From bdc6cd397d11d0a116945dc876cd3eacfeeb0832 Mon Sep 17 00:00:00 2001 From: Alasdair Smith Date: Tue, 9 Oct 2018 11:55:07 +0100 Subject: [PATCH 01/33] Use setting instead of hard-coding port --- services/chat/config/settings.defaults.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/chat/config/settings.defaults.coffee b/services/chat/config/settings.defaults.coffee index d0f64a9d4f..9e89830fee 100644 --- a/services/chat/config/settings.defaults.coffee +++ b/services/chat/config/settings.defaults.coffee @@ -6,7 +6,7 @@ module.exports = apis: web: - url: "http://#{process.env['WEB_HOST'] || "localhost"}:3000" + url: "http://#{process.env['WEB_HOST'] || "localhost"}:#{process.env['WEB_PORT'] or 3000}" user: "sharelatex" pass: "password" From 4f56c952df9f2024159d033ab1b53b38928f0021 Mon Sep 17 00:00:00 2001 From: John Lees-Miller Date: Tue, 27 Nov 2018 15:12:25 +0000 Subject: [PATCH 02/33] Add dev dependencies to shrinkwrap --- services/chat/npm-shrinkwrap.json | 2970 ++++++++++++++++++++++++++--- 1 file changed, 2754 insertions(+), 216 deletions(-) diff --git a/services/chat/npm-shrinkwrap.json b/services/chat/npm-shrinkwrap.json index e52d1d7fb7..6a8d786f90 100644 --- a/services/chat/npm-shrinkwrap.json +++ b/services/chat/npm-shrinkwrap.json @@ -2,11 +2,320 @@ "name": "chat-sharelatex", "version": "0.1.4", "dependencies": { + "@sinonjs/commons": { + "version": "1.3.0", + "from": "@sinonjs/commons@>=1.2.0 <2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.3.0.tgz" + }, + "@sinonjs/formatio": { + "version": "3.0.0", + "from": "@sinonjs/formatio@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.0.0.tgz", + "dependencies": { + "@sinonjs/samsam": { + "version": "2.1.0", + "from": "@sinonjs/samsam@2.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-2.1.0.tgz" + } + } + }, + "@sinonjs/samsam": { + "version": "2.1.2", + "from": "@sinonjs/samsam@>=2.1.2 <3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-2.1.2.tgz" + }, + "abbrev": { + "version": "1.1.1", + "from": "abbrev@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + }, + "ansi-align": { + "version": "2.0.0", + "from": "ansi-align@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "from": "ansi-regex@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "from": "ansi-styles@>=3.2.1 <4.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "from": "anymatch@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "dev": true + }, + "argparse": { + "version": "0.1.16", + "from": "argparse@>=0.1.11 <0.2.0", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", + "dependencies": { + "underscore.string": { + "version": "2.4.0", + "from": "underscore.string@>=2.4.0 <2.5.0", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz" + } + } + }, + "arr-diff": { + "version": "4.0.0", + "from": "arr-diff@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "from": "arr-flatten@>=1.1.0 <2.0.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "from": "arr-union@>=3.1.0 <4.0.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "dev": true + }, + "array-from": { + "version": "2.1.1", + "from": "array-from@>=2.1.1 <3.0.0", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz" + }, + "array-unique": { + "version": "0.3.2", + "from": "array-unique@>=0.3.2 <0.4.0", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "from": "assertion-error@>=1.1.0 <2.0.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" + }, + "assign-symbols": { + "version": "1.0.0", + "from": "assign-symbols@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "dev": true + }, "async": { "version": "0.2.9", "from": "async@0.2.9", "resolved": "https://registry.npmjs.org/async/-/async-0.2.9.tgz" }, + "async-each": { + "version": "1.0.1", + "from": "async-each@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "dev": true + }, + "atob": { + "version": "2.1.2", + "from": "atob@>=2.1.1 <3.0.0", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "from": "balanced-match@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "dev": true + }, + "base": { + "version": "0.11.2", + "from": "base@>=0.11.1 <0.12.0", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "dev": true, + "dependencies": { + "define-property": { + "version": "1.0.0", + "from": "define-property@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "dev": true + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "from": "is-accessor-descriptor@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "dev": true + }, + "is-data-descriptor": { + "version": "1.0.0", + "from": "is-data-descriptor@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "dev": true + }, + "is-descriptor": { + "version": "1.0.2", + "from": "is-descriptor@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "dev": true + } + } + }, + "binary-extensions": { + "version": "1.12.0", + "from": "binary-extensions@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", + "dev": true + }, + "boxen": { + "version": "1.3.0", + "from": "boxen@>=1.2.1 <2.0.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "from": "brace-expansion@>=1.1.7 <2.0.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "dev": true + }, + "braces": { + "version": "2.3.2", + "from": "braces@>=2.3.0 <3.0.0", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "dev": true, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "from": "extend-shallow@>=2.0.1 <3.0.0", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "dev": true + } + } + }, + "broadway": { + "version": "0.3.6", + "from": "broadway@>=0.3.2 <0.4.0", + "resolved": "https://registry.npmjs.org/broadway/-/broadway-0.3.6.tgz", + "dev": true, + "dependencies": { + "cliff": { + "version": "0.1.9", + "from": "cliff@0.1.9", + "resolved": "https://registry.npmjs.org/cliff/-/cliff-0.1.9.tgz", + "dev": true + }, + "winston": { + "version": "0.8.0", + "from": "winston@0.8.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.0.tgz", + "dev": true + } + } + }, + "browser-stdout": { + "version": "1.3.0", + "from": "browser-stdout@1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "dev": true + }, + "bunyan": { + "version": "1.8.12", + "from": "bunyan@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "from": "cache-base@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "from": "camelcase@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "dev": true + }, + "capture-stack-trace": { + "version": "1.0.1", + "from": "capture-stack-trace@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "dev": true + }, + "chai": { + "version": "4.2.0", + "from": "chai@latest", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz" + }, + "chalk": { + "version": "2.4.1", + "from": "chalk@>=2.0.1 <3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "dev": true + }, + "check-error": { + "version": "1.0.2", + "from": "check-error@>=1.0.2 <2.0.0", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" + }, + "check-types": { + "version": "0.6.5", + "from": "check-types@>=0.6.0 <0.7.0", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-0.6.5.tgz", + "dev": true + }, + "chokidar": { + "version": "2.0.4", + "from": "chokidar@>=2.0.4 <3.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "dev": true + }, + "ci-info": { + "version": "1.6.0", + "from": "ci-info@>=1.5.0 <2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "from": "class-utils@>=0.3.5 <0.4.0", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "dev": true, + "dependencies": { + "define-property": { + "version": "0.2.5", + "from": "define-property@>=0.2.5 <0.3.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "dev": true + } + } + }, + "cli": { + "version": "0.4.5", + "from": "cli@>=0.4.0 <0.5.0", + "resolved": "https://registry.npmjs.org/cli/-/cli-0.4.5.tgz", + "dev": true + }, + "cli-boxes": { + "version": "1.0.0", + "from": "cli-boxes@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "dev": true + }, + "cliff": { + "version": "0.1.10", + "from": "cliff@>=0.1.9 <0.2.0", + "resolved": "https://registry.npmjs.org/cliff/-/cliff-0.1.10.tgz", + "dev": true, + "dependencies": { + "colors": { + "version": "1.0.3", + "from": "colors@>=1.0.3 <1.1.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "dev": true + } + } + }, "coffee-script": { "version": "1.7.1", "from": "coffee-script@>=1.7.1 <1.8.0", @@ -19,41 +328,333 @@ } } }, + "collection-visit": { + "version": "1.0.0", + "from": "collection-visit@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "from": "color-convert@>=1.9.0 <2.0.0", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "dev": true + }, + "color-name": { + "version": "1.1.3", + "from": "color-name@1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "dev": true + }, + "colors": { + "version": "0.6.2", + "from": "colors@>=0.6.2 <0.7.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz" + }, + "commander": { + "version": "2.0.0", + "from": "commander@2.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.0.0.tgz", + "dev": true + }, + "complexity-report": { + "version": "0.10.5", + "from": "complexity-report@>=0.10.3 <0.11.0", + "resolved": "https://registry.npmjs.org/complexity-report/-/complexity-report-0.10.5.tgz", + "dev": true, + "dependencies": { + "commander": { + "version": "1.1.1", + "from": "commander@>=1.1.0 <1.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-1.1.1.tgz", + "dev": true + } + } + }, + "component-emitter": { + "version": "1.2.1", + "from": "component-emitter@>=1.2.1 <2.0.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "from": "concat-map@0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "dev": true + }, + "configstore": { + "version": "3.1.2", + "from": "configstore@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "4.1.15", + "from": "graceful-fs@>=4.1.2 <5.0.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "dev": true + } + } + }, + "console-browserify": { + "version": "0.1.6", + "from": "console-browserify@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-0.1.6.tgz", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "from": "copy-descriptor@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "from": "core-util-is@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "dev": true + }, + "create-error-class": { + "version": "3.0.2", + "from": "create-error-class@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "dev": true + }, + "cross-spawn": { + "version": "5.1.0", + "from": "cross-spawn@>=5.0.1 <6.0.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "dev": true, + "dependencies": { + "lru-cache": { + "version": "4.1.4", + "from": "lru-cache@>=4.0.1 <5.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.4.tgz", + "dev": true + }, + "which": { + "version": "1.3.1", + "from": "which@>=1.2.9 <2.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "dev": true + } + } + }, + "crypto-random-string": { + "version": "1.0.0", + "from": "crypto-random-string@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "dev": true + }, + "cycle": { + "version": "1.0.3", + "from": "cycle@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "dev": true + }, + "dateformat": { + "version": "1.0.2-1.2.3", + "from": "dateformat@1.0.2-1.2.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz" + }, + "debug": { + "version": "0.7.4", + "from": "debug@>=0.7.0 <0.8.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "from": "decode-uri-component@>=0.2.0 <0.3.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "dev": true + }, + "deep-eql": { + "version": "3.0.1", + "from": "deep-eql@>=3.0.1 <4.0.0", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" + }, + "deep-equal": { + "version": "1.0.1", + "from": "deep-equal@*", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "dev": true + }, + "deep-extend": { + "version": "0.6.0", + "from": "deep-extend@>=0.6.0 <0.7.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "dev": true + }, + "define-property": { + "version": "2.0.2", + "from": "define-property@>=2.0.2 <3.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "dev": true, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "from": "is-accessor-descriptor@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "dev": true + }, + "is-data-descriptor": { + "version": "1.0.0", + "from": "is-data-descriptor@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "dev": true + }, + "is-descriptor": { + "version": "1.0.2", + "from": "is-descriptor@>=1.0.2 <2.0.0", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "dev": true + } + } + }, + "diff": { + "version": "3.5.0", + "from": "diff@>=3.5.0 <4.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz" + }, + "director": { + "version": "1.2.7", + "from": "director@1.2.7", + "resolved": "https://registry.npmjs.org/director/-/director-1.2.7.tgz", + "dev": true + }, + "dot-prop": { + "version": "4.2.0", + "from": "dot-prop@>=4.1.0 <5.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "dev": true + }, + "dtrace-provider": { + "version": "0.8.7", + "from": "dtrace-provider@>=0.8.0 <0.9.0", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz", + "dev": true, + "optional": true + }, + "duplexer3": { + "version": "0.1.4", + "from": "duplexer3@>=0.1.4 <0.2.0", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "from": "escape-string-regexp@1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "dev": true + }, + "esprima": { + "version": "1.0.4", + "from": "esprima@>=1.0.2 <1.1.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz" + }, + "event-stream": { + "version": "0.5.3", + "from": "event-stream@>=0.5.0 <0.6.0", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-0.5.3.tgz", + "dev": true, + "dependencies": { + "optimist": { + "version": "0.2.8", + "from": "optimist@>=0.2.0 <0.3.0", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.2.8.tgz", + "dev": true + } + } + }, + "eventemitter2": { + "version": "0.4.14", + "from": "eventemitter2@>=0.4.13 <0.5.0", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz" + }, + "execa": { + "version": "0.7.0", + "from": "execa@>=0.7.0 <0.8.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "dev": true + }, + "exit": { + "version": "0.1.2", + "from": "exit@>=0.1.1 <0.2.0", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" + }, + "expand-brackets": { + "version": "2.1.4", + "from": "expand-brackets@>=2.1.4 <3.0.0", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "dev": true, + "dependencies": { + "debug": { + "version": "2.6.9", + "from": "debug@>=2.3.3 <3.0.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "dev": true + }, + "define-property": { + "version": "0.2.5", + "from": "define-property@>=0.2.5 <0.3.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "dev": true + }, + "extend-shallow": { + "version": "2.0.1", + "from": "extend-shallow@>=2.0.1 <3.0.0", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "dev": true + } + } + }, "express": { "version": "3.3.1", "from": "express@3.3.1", "resolved": "https://registry.npmjs.org/express/-/express-3.3.1.tgz", "dependencies": { + "buffer-crc32": { + "version": "0.2.1", + "from": "buffer-crc32@0.2.1", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.1.tgz" + }, + "commander": { + "version": "0.6.1", + "from": "commander@0.6.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz" + }, "connect": { "version": "2.8.1", "from": "connect@2.8.1", "resolved": "https://registry.npmjs.org/connect/-/connect-2.8.1.tgz", "dependencies": { - "qs": { - "version": "0.6.5", - "from": "qs@0.6.5", - "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.5.tgz" - }, - "formidable": { - "version": "1.0.14", - "from": "formidable@1.0.14", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.14.tgz" + "bytes": { + "version": "0.2.0", + "from": "bytes@0.2.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-0.2.0.tgz" }, "cookie": { "version": "0.0.5", "from": "cookie@0.0.5", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.0.5.tgz" }, - "bytes": { - "version": "0.2.0", - "from": "bytes@0.2.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-0.2.0.tgz" + "formidable": { + "version": "1.0.14", + "from": "formidable@1.0.14", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.14.tgz" }, "pause": { "version": "0.0.1", "from": "pause@0.0.1", "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz" }, + "qs": { + "version": "0.6.5", + "from": "qs@0.6.5", + "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.5.tgz" + }, "uid2": { "version": "0.0.2", "from": "uid2@0.0.2", @@ -61,53 +662,11 @@ } } }, - "commander": { - "version": "0.6.1", - "from": "commander@0.6.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz" - }, - "range-parser": { - "version": "0.0.4", - "from": "range-parser@0.0.4", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz" - }, - "mkdirp": { - "version": "0.3.4", - "from": "mkdirp@0.3.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.4.tgz" - }, "cookie": { "version": "0.1.0", "from": "cookie@0.1.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.0.tgz" }, - "buffer-crc32": { - "version": "0.2.1", - "from": "buffer-crc32@0.2.1", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.1.tgz" - }, - "fresh": { - "version": "0.1.0", - "from": "fresh@0.1.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.1.0.tgz" - }, - "methods": { - "version": "0.0.1", - "from": "methods@0.0.1", - "resolved": "https://registry.npmjs.org/methods/-/methods-0.0.1.tgz" - }, - "send": { - "version": "0.1.1", - "from": "send@0.1.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.1.1.tgz", - "dependencies": { - "mime": { - "version": "1.2.11", - "from": "mime@>=1.2.9 <1.3.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz" - } - } - }, "cookie-signature": { "version": "1.0.1", "from": "cookie-signature@1.0.1", @@ -124,9 +683,846 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" } } + }, + "fresh": { + "version": "0.1.0", + "from": "fresh@0.1.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.1.0.tgz" + }, + "methods": { + "version": "0.0.1", + "from": "methods@0.0.1", + "resolved": "https://registry.npmjs.org/methods/-/methods-0.0.1.tgz" + }, + "mkdirp": { + "version": "0.3.4", + "from": "mkdirp@0.3.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.4.tgz" + }, + "range-parser": { + "version": "0.0.4", + "from": "range-parser@0.0.4", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz" + }, + "send": { + "version": "0.1.1", + "from": "send@0.1.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.1.1.tgz", + "dependencies": { + "mime": { + "version": "1.2.11", + "from": "mime@>=1.2.9 <1.3.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz" + } + } } } }, + "extend-shallow": { + "version": "3.0.2", + "from": "extend-shallow@>=3.0.2 <4.0.0", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "dev": true, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "from": "is-extendable@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "from": "extglob@>=2.0.4 <3.0.0", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "dev": true, + "dependencies": { + "define-property": { + "version": "1.0.0", + "from": "define-property@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "dev": true + }, + "extend-shallow": { + "version": "2.0.1", + "from": "extend-shallow@>=2.0.1 <3.0.0", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "dev": true + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "from": "is-accessor-descriptor@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "dev": true + }, + "is-data-descriptor": { + "version": "1.0.0", + "from": "is-data-descriptor@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "dev": true + }, + "is-descriptor": { + "version": "1.0.2", + "from": "is-descriptor@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "dev": true + } + } + }, + "eyes": { + "version": "0.1.8", + "from": "eyes@>=0.1.8 <0.2.0", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "dev": true + }, + "faye-websocket": { + "version": "0.4.4", + "from": "faye-websocket@>=0.4.3 <0.5.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "from": "fill-range@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "dev": true, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "from": "extend-shallow@>=2.0.1 <3.0.0", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "dev": true + } + } + }, + "findup-sync": { + "version": "0.1.3", + "from": "findup-sync@>=0.1.2 <0.2.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", + "dependencies": { + "glob": { + "version": "3.2.11", + "from": "glob@>=3.2.9 <3.3.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz" + }, + "lodash": { + "version": "2.4.2", + "from": "lodash@>=2.4.1 <2.5.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" + }, + "minimatch": { + "version": "0.3.0", + "from": "minimatch@>=0.3.0 <0.4.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz" + } + } + }, + "flatiron": { + "version": "0.4.3", + "from": "flatiron@>=0.4.2 <0.5.0", + "resolved": "https://registry.npmjs.org/flatiron/-/flatiron-0.4.3.tgz", + "dev": true, + "dependencies": { + "optimist": { + "version": "0.6.0", + "from": "optimist@0.6.0", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.0.tgz", + "dev": true + } + } + }, + "for-in": { + "version": "1.0.2", + "from": "for-in@>=1.0.2 <2.0.0", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "dev": true + }, + "forever": { + "version": "0.14.2", + "from": "forever@>=0.14.1 <0.15.0", + "resolved": "https://registry.npmjs.org/forever/-/forever-0.14.2.tgz", + "dev": true + }, + "forever-monitor": { + "version": "1.5.2", + "from": "forever-monitor@>=1.5.1 <1.6.0", + "resolved": "https://registry.npmjs.org/forever-monitor/-/forever-monitor-1.5.2.tgz", + "dev": true, + "dependencies": { + "minimatch": { + "version": "1.0.0", + "from": "minimatch@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz", + "dev": true + } + } + }, + "fragment-cache": { + "version": "0.2.1", + "from": "fragment-cache@>=0.2.1 <0.3.0", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "dev": true + }, + "fs-extra": { + "version": "0.3.2", + "from": "fs-extra@>=0.3.2 <0.4.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.3.2.tgz", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "1.1.14", + "from": "graceful-fs@>=1.1.0 <1.2.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.1.14.tgz", + "dev": true, + "optional": true + }, + "mkdirp": { + "version": "0.3.5", + "from": "mkdirp@>=0.3.0 <0.4.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "dev": true + }, + "ncp": { + "version": "0.2.7", + "from": "ncp@>=0.2.0 <0.3.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.2.7.tgz", + "dev": true + }, + "rimraf": { + "version": "2.0.3", + "from": "rimraf@>=2.0.2 <2.1.0", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.0.3.tgz", + "dev": true + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "from": "fs.realpath@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "dev": true + }, + "gaze": { + "version": "0.4.3", + "from": "gaze@>=0.4.0 <0.5.0", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.4.3.tgz", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "from": "get-func-name@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" + }, + "get-stream": { + "version": "3.0.0", + "from": "get-stream@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "from": "get-value@>=2.0.6 <3.0.0", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "dev": true + }, + "getobject": { + "version": "0.1.0", + "from": "getobject@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz" + }, + "glob": { + "version": "3.1.21", + "from": "glob@>=3.1.21 <3.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "dependencies": { + "inherits": { + "version": "1.0.2", + "from": "inherits@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz" + } + } + }, + "glob-parent": { + "version": "3.1.0", + "from": "glob-parent@>=3.1.0 <4.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "dev": true, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "from": "is-glob@>=3.1.0 <4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "dev": true + } + } + }, + "global-dirs": { + "version": "0.1.1", + "from": "global-dirs@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "dev": true + }, + "globule": { + "version": "0.1.0", + "from": "globule@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", + "dev": true, + "dependencies": { + "lodash": { + "version": "1.0.2", + "from": "lodash@>=1.0.1 <1.1.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", + "dev": true + } + } + }, + "got": { + "version": "6.7.1", + "from": "got@>=6.7.1 <7.0.0", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "dev": true + }, + "graceful-fs": { + "version": "1.2.3", + "from": "graceful-fs@>=1.2.0 <1.3.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz" + }, + "growl": { + "version": "1.7.0", + "from": "growl@>=1.7.0 <1.8.0", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.7.0.tgz", + "dev": true + }, + "grunt": { + "version": "0.4.5", + "from": "grunt@>=0.4.5 <0.5.0", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", + "dependencies": { + "async": { + "version": "0.1.22", + "from": "async@>=0.1.22 <0.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz" + }, + "coffee-script": { + "version": "1.3.3", + "from": "coffee-script@>=1.3.3 <1.4.0", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz" + } + } + }, + "grunt-bunyan": { + "version": "0.5.0", + "from": "grunt-bunyan@>=0.5.0 <0.6.0", + "resolved": "https://registry.npmjs.org/grunt-bunyan/-/grunt-bunyan-0.5.0.tgz", + "dependencies": { + "lodash": { + "version": "2.4.2", + "from": "lodash@>=2.4.1 <2.5.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" + } + } + }, + "grunt-concurrent": { + "version": "0.4.3", + "from": "grunt-concurrent@>=0.4.2 <0.5.0", + "resolved": "https://registry.npmjs.org/grunt-concurrent/-/grunt-concurrent-0.4.3.tgz", + "dev": true + }, + "grunt-contrib-clean": { + "version": "0.5.0", + "from": "grunt-contrib-clean@>=0.5.0 <0.6.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-0.5.0.tgz", + "dev": true + }, + "grunt-contrib-coffee": { + "version": "0.7.0", + "from": "grunt-contrib-coffee@>=0.7.0 <0.8.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-coffee/-/grunt-contrib-coffee-0.7.0.tgz", + "dev": true, + "dependencies": { + "coffee-script": { + "version": "1.6.3", + "from": "coffee-script@>=1.6.2 <1.7.0", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.6.3.tgz", + "dev": true + } + } + }, + "grunt-contrib-watch": { + "version": "0.5.3", + "from": "grunt-contrib-watch@>=0.5.3 <0.6.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.5.3.tgz", + "dev": true + }, + "grunt-execute": { + "version": "0.2.2", + "from": "grunt-execute@>=0.2.2 <0.3.0", + "resolved": "https://registry.npmjs.org/grunt-execute/-/grunt-execute-0.2.2.tgz" + }, + "grunt-forever": { + "version": "0.4.7", + "from": "grunt-forever@>=0.4.7 <0.5.0", + "resolved": "https://registry.npmjs.org/grunt-forever/-/grunt-forever-0.4.7.tgz", + "dev": true + }, + "grunt-legacy-log": { + "version": "0.1.3", + "from": "grunt-legacy-log@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz", + "dependencies": { + "lodash": { + "version": "2.4.2", + "from": "lodash@>=2.4.1 <2.5.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" + }, + "underscore.string": { + "version": "2.3.3", + "from": "underscore.string@>=2.3.3 <2.4.0", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz" + } + } + }, + "grunt-legacy-log-utils": { + "version": "0.1.1", + "from": "grunt-legacy-log-utils@>=0.1.1 <0.2.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz", + "dependencies": { + "lodash": { + "version": "2.4.2", + "from": "lodash@>=2.4.1 <2.5.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" + }, + "underscore.string": { + "version": "2.3.3", + "from": "underscore.string@>=2.3.3 <2.4.0", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz" + } + } + }, + "grunt-legacy-util": { + "version": "0.2.0", + "from": "grunt-legacy-util@>=0.2.0 <0.3.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz", + "dependencies": { + "async": { + "version": "0.1.22", + "from": "async@~0.1.22", + "resolved": "http://registry.npmjs.org/async/-/async-0.1.22.tgz" + } + } + }, + "grunt-mocha-test": { + "version": "0.8.2", + "from": "grunt-mocha-test@>=0.8.0 <0.9.0", + "resolved": "https://registry.npmjs.org/grunt-mocha-test/-/grunt-mocha-test-0.8.2.tgz", + "dev": true, + "dependencies": { + "diff": { + "version": "1.0.7", + "from": "diff@1.0.7", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.0.7.tgz", + "dev": true + }, + "glob": { + "version": "3.2.3", + "from": "glob@3.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.3.tgz", + "dev": true + }, + "graceful-fs": { + "version": "2.0.3", + "from": "graceful-fs@>=2.0.0 <2.1.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", + "dev": true + }, + "mkdirp": { + "version": "0.3.5", + "from": "mkdirp@0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "dev": true + }, + "mocha": { + "version": "1.14.0", + "from": "mocha@>=1.14.0 <1.15.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-1.14.0.tgz", + "dev": true + } + } + }, + "grunt-nodemon": { + "version": "0.1.2", + "from": "grunt-nodemon@>=0.1.2 <0.2.0", + "resolved": "https://registry.npmjs.org/grunt-nodemon/-/grunt-nodemon-0.1.2.tgz", + "dev": true, + "dependencies": { + "nodemon": { + "version": "0.7.10", + "from": "nodemon@>=0.7.8 <0.8.0", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-0.7.10.tgz", + "dev": true + } + } + }, + "grunt-notify": { + "version": "0.2.20", + "from": "grunt-notify@>=0.2.16 <0.3.0", + "resolved": "https://registry.npmjs.org/grunt-notify/-/grunt-notify-0.2.20.tgz", + "dev": true + }, + "grunt-plato": { + "version": "0.2.1", + "from": "grunt-plato@>=0.2.1 <0.3.0", + "resolved": "https://registry.npmjs.org/grunt-plato/-/grunt-plato-0.2.1.tgz", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "from": "has-flag@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + }, + "has-value": { + "version": "1.0.0", + "from": "has-value@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "dev": true + }, + "has-values": { + "version": "1.0.0", + "from": "has-values@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "dev": true, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "from": "kind-of@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "dev": true + } + } + }, + "he": { + "version": "1.1.1", + "from": "he@1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "dev": true + }, + "hooker": { + "version": "0.2.3", + "from": "hooker@>=0.2.3 <0.3.0", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz" + }, + "i": { + "version": "0.3.6", + "from": "i@>=0.3.0 <0.4.0", + "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", + "dev": true + }, + "iconv-lite": { + "version": "0.2.11", + "from": "iconv-lite@>=0.2.11 <0.3.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz" + }, + "ignore-by-default": { + "version": "1.0.1", + "from": "ignore-by-default@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "dev": true + }, + "import-lazy": { + "version": "2.1.0", + "from": "import-lazy@>=2.1.0 <3.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "from": "imurmurhash@>=0.1.4 <0.2.0", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "from": "inflight@>=1.0.4 <2.0.0", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "dev": true + }, + "inherits": { + "version": "2.0.3", + "from": "inherits@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + }, + "ini": { + "version": "1.3.5", + "from": "ini@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "from": "is-accessor-descriptor@>=0.1.6 <0.2.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "dev": true, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "from": "kind-of@>=3.0.2 <4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "dev": true + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "from": "is-binary-path@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "from": "is-buffer@>=1.1.5 <2.0.0", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "dev": true + }, + "is-ci": { + "version": "1.2.1", + "from": "is-ci@>=1.0.10 <2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "dev": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "from": "is-data-descriptor@>=0.1.4 <0.2.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "dev": true, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "from": "kind-of@>=3.0.2 <4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "dev": true + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "from": "is-descriptor@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "dev": true, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "from": "kind-of@>=5.0.0 <6.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "from": "is-extendable@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "from": "is-extglob@>=2.1.0 <3.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "from": "is-fullwidth-code-point@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "from": "is-glob@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "dev": true + }, + "is-installed-globally": { + "version": "0.1.0", + "from": "is-installed-globally@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "dev": true + }, + "is-npm": { + "version": "1.0.0", + "from": "is-npm@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "from": "is-number@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "dev": true, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "from": "kind-of@>=3.0.2 <4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "dev": true + } + } + }, + "is-obj": { + "version": "1.0.1", + "from": "is-obj@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "dev": true + }, + "is-path-inside": { + "version": "1.0.1", + "from": "is-path-inside@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "from": "is-plain-object@>=2.0.3 <3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "dev": true + }, + "is-redirect": { + "version": "1.0.0", + "from": "is-redirect@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "dev": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "from": "is-retry-allowed@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "from": "is-stream@>=1.1.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "from": "is-windows@>=1.0.2 <2.0.0", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "from": "isarray@0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + }, + "isexe": { + "version": "2.0.0", + "from": "isexe@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "from": "isobject@>=3.0.1 <4.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "from": "isstream@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "dev": true + }, + "jade": { + "version": "0.26.3", + "from": "jade@0.26.3", + "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", + "dev": true, + "dependencies": { + "commander": { + "version": "0.6.1", + "from": "commander@0.6.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", + "dev": true + }, + "mkdirp": { + "version": "0.3.0", + "from": "mkdirp@0.3.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", + "dev": true + } + } + }, + "js-yaml": { + "version": "2.0.5", + "from": "js-yaml@>=2.0.5 <2.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz" + }, + "jshint": { + "version": "2.1.11", + "from": "jshint@>=2.1.2 <2.2.0", + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.1.11.tgz", + "dev": true, + "dependencies": { + "underscore": { + "version": "1.4.4", + "from": "underscore@>=1.4.0 <1.5.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", + "dev": true + } + } + }, + "jsonfile": { + "version": "0.0.1", + "from": "jsonfile@>=0.0.0 <0.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-0.0.1.tgz", + "dev": true + }, + "just-extend": { + "version": "3.0.0", + "from": "just-extend@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-3.0.0.tgz" + }, + "keypress": { + "version": "0.1.0", + "from": "keypress@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "from": "kind-of@>=6.0.2 <7.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "dev": true + }, + "latest-version": { + "version": "3.1.0", + "from": "latest-version@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "dev": true + }, + "lazy": { + "version": "1.0.11", + "from": "lazy@>=1.0.11 <1.1.0", + "resolved": "https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz", + "dev": true + }, + "lodash": { + "version": "0.9.2", + "from": "lodash@>=0.9.2 <0.10.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz" + }, + "lodash.debounce": { + "version": "4.0.8", + "from": "lodash.debounce@>=4.0.8 <5.0.0", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "dev": true + }, + "lodash.get": { + "version": "4.4.2", + "from": "lodash.get@>=4.4.2 <5.0.0", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz" + }, "logger-sharelatex": { "version": "1.5.6", "from": "git+https://github.com/sharelatex/logger-sharelatex.git#master", @@ -141,11 +1537,13 @@ "version": "0.6.0", "from": "dtrace-provider@>=0.6.0 <0.7.0", "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.6.0.tgz", + "optional": true, "dependencies": { "nan": { "version": "2.7.0", "from": "nan@>=2.0.8 <3.0.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz" + "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", + "optional": true } } }, @@ -153,70 +1551,83 @@ "version": "2.1.1", "from": "mv@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "optional": true, "dependencies": { "mkdirp": { "version": "0.5.1", "from": "mkdirp@>=0.5.1 <0.6.0", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "optional": true, "dependencies": { "minimist": { "version": "0.0.8", "from": "minimist@0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "optional": true } } }, "ncp": { "version": "2.0.0", "from": "ncp@>=2.0.0 <2.1.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz" + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "optional": true }, "rimraf": { "version": "2.4.5", "from": "rimraf@>=2.4.0 <2.5.0", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "optional": true, "dependencies": { "glob": { "version": "6.0.4", "from": "glob@>=6.0.1 <7.0.0", "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "optional": true, "dependencies": { "inflight": { "version": "1.0.6", "from": "inflight@>=1.0.4 <2.0.0", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "optional": true, "dependencies": { "wrappy": { "version": "1.0.2", "from": "wrappy@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "optional": true } } }, "inherits": { "version": "2.0.3", "from": "inherits@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "optional": true }, "minimatch": { "version": "3.0.4", "from": "minimatch@>=2.0.0 <3.0.0||>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "optional": true, "dependencies": { "brace-expansion": { "version": "1.1.8", "from": "brace-expansion@>=1.1.7 <2.0.0", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "optional": true, "dependencies": { "balanced-match": { "version": "1.0.0", "from": "balanced-match@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "optional": true }, "concat-map": { "version": "0.0.1", "from": "concat-map@0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "optional": true } } } @@ -237,7 +1648,8 @@ "path-is-absolute": { "version": "1.0.1", "from": "path-is-absolute@>=1.0.0 <2.0.0", - "resolved": "https://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", + "optional": true } } } @@ -248,7 +1660,8 @@ "safe-json-stringify": { "version": "1.0.4", "from": "safe-json-stringify@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.0.4.tgz" + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.0.4.tgz", + "optional": true } } }, @@ -274,18 +1687,6 @@ "from": "grunt-contrib-coffee@>=0.11.0 <0.12.0", "resolved": "https://registry.npmjs.org/grunt-contrib-coffee/-/grunt-contrib-coffee-0.11.1.tgz", "dependencies": { - "coffee-script": { - "version": "1.7.1", - "from": "coffee-script@>=1.7.0 <1.8.0", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz", - "dependencies": { - "mkdirp": { - "version": "0.3.5", - "from": "mkdirp@>=0.3.5 <0.4.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz" - } - } - }, "chalk": { "version": "0.5.1", "from": "chalk@>=0.5.0 <0.6.0", @@ -332,6 +1733,18 @@ } } }, + "coffee-script": { + "version": "1.7.1", + "from": "coffee-script@>=1.7.0 <1.8.0", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz", + "dependencies": { + "mkdirp": { + "version": "0.3.5", + "from": "mkdirp@>=0.3.5 <0.4.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz" + } + } + }, "lodash": { "version": "2.4.2", "from": "lodash@>=2.4.1 <2.5.0", @@ -344,110 +1757,15 @@ "from": "grunt-mocha-test@>=0.11.0 <0.12.0", "resolved": "https://registry.npmjs.org/grunt-mocha-test/-/grunt-mocha-test-0.11.0.tgz", "dependencies": { - "mocha": { - "version": "1.20.1", - "from": "mocha@>=1.20.0 <1.21.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-1.20.1.tgz", - "dependencies": { - "commander": { - "version": "2.0.0", - "from": "commander@2.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.0.0.tgz" - }, - "growl": { - "version": "1.7.0", - "from": "growl@>=1.7.0 <1.8.0", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.7.0.tgz" - }, - "jade": { - "version": "0.26.3", - "from": "jade@0.26.3", - "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", - "dependencies": { - "commander": { - "version": "0.6.1", - "from": "commander@0.6.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz" - }, - "mkdirp": { - "version": "0.3.0", - "from": "mkdirp@0.3.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz" - } - } - }, - "diff": { - "version": "1.0.7", - "from": "diff@1.0.7", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.0.7.tgz" - }, - "debug": { - "version": "3.0.1", - "from": "debug@*", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.0.1.tgz", - "dependencies": { - "ms": { - "version": "2.0.0", - "from": "ms@2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - } - } - }, - "mkdirp": { - "version": "0.3.5", - "from": "mkdirp@0.3.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz" - }, - "glob": { - "version": "3.2.3", - "from": "glob@3.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.3.tgz", - "dependencies": { - "minimatch": { - "version": "0.2.14", - "from": "minimatch@>=0.2.11 <0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "dependencies": { - "lru-cache": { - "version": "2.7.3", - "from": "lru-cache@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz" - }, - "sigmund": { - "version": "1.0.1", - "from": "sigmund@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz" - } - } - }, - "graceful-fs": { - "version": "2.0.3", - "from": "graceful-fs@>=2.0.0 <2.1.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz" - }, - "inherits": { - "version": "2.0.3", - "from": "inherits@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" - } - } - } - } - }, - "hooker": { - "version": "0.2.3", - "from": "hooker@>=0.2.3 <0.3.0", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz" - }, "fs-extra": { "version": "0.9.1", "from": "fs-extra@>=0.9.1 <0.10.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.9.1.tgz", "dependencies": { - "ncp": { - "version": "0.5.1", - "from": "ncp@>=0.5.1 <0.6.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.5.1.tgz" + "jsonfile": { + "version": "1.1.1", + "from": "jsonfile@>=1.1.0 <1.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-1.1.1.tgz" }, "mkdirp": { "version": "0.5.1", @@ -461,10 +1779,10 @@ } } }, - "jsonfile": { - "version": "1.1.1", - "from": "jsonfile@>=1.1.0 <1.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-1.1.1.tgz" + "ncp": { + "version": "0.5.1", + "from": "ncp@>=0.5.1 <0.6.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.5.1.tgz" }, "rimraf": { "version": "2.6.1", @@ -544,6 +1862,101 @@ } } } + }, + "hooker": { + "version": "0.2.3", + "from": "hooker@>=0.2.3 <0.3.0", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz" + }, + "mocha": { + "version": "1.20.1", + "from": "mocha@>=1.20.0 <1.21.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-1.20.1.tgz", + "dependencies": { + "commander": { + "version": "2.0.0", + "from": "commander@2.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.0.0.tgz" + }, + "debug": { + "version": "3.0.1", + "from": "debug@*", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.0.1.tgz", + "dependencies": { + "ms": { + "version": "2.0.0", + "from": "ms@2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + } + } + }, + "diff": { + "version": "1.0.7", + "from": "diff@1.0.7", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.0.7.tgz" + }, + "glob": { + "version": "3.2.3", + "from": "glob@3.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.3.tgz", + "dependencies": { + "graceful-fs": { + "version": "2.0.3", + "from": "graceful-fs@>=2.0.0 <2.1.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz" + }, + "inherits": { + "version": "2.0.3", + "from": "inherits@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + }, + "minimatch": { + "version": "0.2.14", + "from": "minimatch@>=0.2.11 <0.3.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "dependencies": { + "lru-cache": { + "version": "2.7.3", + "from": "lru-cache@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz" + }, + "sigmund": { + "version": "1.0.1", + "from": "sigmund@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz" + } + } + } + } + }, + "growl": { + "version": "1.7.0", + "from": "growl@>=1.7.0 <1.8.0", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.7.0.tgz" + }, + "jade": { + "version": "0.26.3", + "from": "jade@0.26.3", + "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", + "dependencies": { + "commander": { + "version": "0.6.1", + "from": "commander@0.6.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz" + }, + "mkdirp": { + "version": "0.3.0", + "from": "mkdirp@0.3.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz" + } + } + }, + "mkdirp": { + "version": "0.3.5", + "from": "mkdirp@0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz" + } + } } } }, @@ -567,15 +1980,15 @@ "from": "lsmod@1.0.0", "resolved": "https://registry.npmjs.org/lsmod/-/lsmod-1.0.0.tgz" }, - "uuid": { - "version": "3.0.0", - "from": "uuid@3.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.0.tgz" - }, "stack-trace": { "version": "0.0.9", "from": "stack-trace@0.0.9", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz" + }, + "uuid": { + "version": "3.0.0", + "from": "uuid@3.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.0.tgz" } } }, @@ -586,11 +1999,56 @@ } } }, + "lolex": { + "version": "3.0.0", + "from": "lolex@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-3.0.0.tgz" + }, + "lowercase-keys": { + "version": "1.0.1", + "from": "lowercase-keys@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "dev": true + }, + "lpad": { + "version": "0.1.0", + "from": "lpad@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/lpad/-/lpad-0.1.0.tgz", + "dev": true + }, + "lru-cache": { + "version": "2.7.3", + "from": "lru-cache@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz" + }, + "make-dir": { + "version": "1.3.0", + "from": "make-dir@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "dev": true + }, + "map-cache": { + "version": "0.2.2", + "from": "map-cache@>=0.2.2 <0.3.0", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "from": "map-visit@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "dev": true + }, "metrics-sharelatex": { "version": "1.7.1", "from": "git+https://github.com/sharelatex/metrics-sharelatex.git#v1.7.1", "resolved": "git+https://github.com/sharelatex/metrics-sharelatex.git#166961924c599b1f9468f2e17846fa2a9d12372d", "dependencies": { + "coffee-script": { + "version": "1.6.0", + "from": "coffee-script@1.6.0", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.6.0.tgz" + }, "lynx": { "version": "0.1.1", "from": "lynx@>=0.1.1 <0.2.0", @@ -608,11 +2066,6 @@ } } }, - "coffee-script": { - "version": "1.6.0", - "from": "coffee-script@1.6.0", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.6.0.tgz" - }, "underscore": { "version": "1.6.0", "from": "underscore@>=1.6.0 <1.7.0", @@ -620,6 +2073,106 @@ } } }, + "micromatch": { + "version": "3.1.10", + "from": "micromatch@>=3.1.4 <4.0.0", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "dev": true + }, + "minimatch": { + "version": "0.2.14", + "from": "minimatch@>=0.2.12 <0.3.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz" + }, + "minimist": { + "version": "0.0.8", + "from": "minimist@0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "dev": true + }, + "mixin-deep": { + "version": "1.3.1", + "from": "mixin-deep@>=1.2.0 <2.0.0", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "dev": true, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "from": "is-extendable@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "dev": true + } + } + }, + "mkdirp": { + "version": "0.5.1", + "from": "mkdirp@>=0.5.1 <0.6.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "dev": true + }, + "mocha": { + "version": "4.1.0", + "from": "mocha@>=4.1.0 <5.0.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", + "dev": true, + "dependencies": { + "commander": { + "version": "2.11.0", + "from": "commander@2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "dev": true + }, + "debug": { + "version": "3.1.0", + "from": "debug@3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "dev": true + }, + "diff": { + "version": "3.3.1", + "from": "diff@3.3.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", + "dev": true + }, + "glob": { + "version": "7.1.2", + "from": "glob@7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "dev": true + }, + "growl": { + "version": "1.10.3", + "from": "growl@1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "from": "has-flag@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "from": "minimatch@>=3.0.4 <4.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "dev": true + }, + "supports-color": { + "version": "4.4.0", + "from": "supports-color@4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "dev": true + } + } + }, + "moment": { + "version": "2.22.2", + "from": "moment@>=2.10.6 <3.0.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", + "dev": true, + "optional": true + }, "mongojs": { "version": "2.4.0", "from": "mongojs@2.4.0", @@ -655,15 +2208,15 @@ "from": "require_optional@>=1.0.0 <1.1.0", "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", "dependencies": { - "semver": { - "version": "5.4.1", - "from": "semver@>=5.1.0 <6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz" - }, "resolve-from": { "version": "2.0.0", "from": "resolve-from@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz" + }, + "semver": { + "version": "5.4.1", + "from": "semver@>=5.1.0 <6.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz" } } } @@ -684,16 +2237,16 @@ "from": "core-util-is@>=1.0.0 <1.1.0", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" }, - "isarray": { - "version": "1.0.0", - "from": "isarray@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - }, "inherits": { "version": "2.0.3", "from": "inherits@>=2.0.1 <2.1.0", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" }, + "isarray": { + "version": "1.0.0", + "from": "isarray@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + }, "process-nextick-args": { "version": "1.0.7", "from": "process-nextick-args@>=1.0.6 <1.1.0", @@ -796,11 +2349,436 @@ } } }, + "ms": { + "version": "2.0.0", + "from": "ms@2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "from": "mute-stream@>=0.0.4 <0.1.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "dev": true + }, + "mv": { + "version": "2.1.1", + "from": "mv@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "dev": true, + "optional": true, + "dependencies": { + "glob": { + "version": "6.0.4", + "from": "glob@>=6.0.1 <7.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "from": "minimatch@>=2.0.0 <3.0.0||>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "dev": true, + "optional": true + }, + "rimraf": { + "version": "2.4.5", + "from": "rimraf@>=2.4.0 <2.5.0", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "dev": true, + "optional": true + } + } + }, + "nan": { + "version": "2.11.1", + "from": "nan@>=2.10.0 <3.0.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "from": "nanomatch@>=1.2.9 <2.0.0", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "dev": true + }, + "nconf": { + "version": "0.6.9", + "from": "nconf@>=0.6.9 <0.7.0", + "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.6.9.tgz", + "dev": true, + "dependencies": { + "optimist": { + "version": "0.6.0", + "from": "optimist@0.6.0", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.0.tgz", + "dev": true + } + } + }, + "ncp": { + "version": "2.0.0", + "from": "ncp@>=2.0.0 <2.1.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "dev": true, + "optional": true + }, + "nise": { + "version": "1.4.6", + "from": "nise@>=1.4.6 <2.0.0", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.6.tgz", + "dependencies": { + "lolex": { + "version": "2.7.5", + "from": "lolex@>=2.3.2 <3.0.0", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz" + } + } + }, + "nodemon": { + "version": "1.18.7", + "from": "nodemon@>=1.14.11 <2.0.0", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.7.tgz", + "dev": true, + "dependencies": { + "debug": { + "version": "3.2.6", + "from": "debug@>=3.1.0 <4.0.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "from": "minimatch@>=3.0.4 <4.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "dev": true + }, + "ms": { + "version": "2.1.1", + "from": "ms@>=2.1.1 <3.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "dev": true + }, + "semver": { + "version": "5.6.0", + "from": "semver@>=5.5.0 <6.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "dev": true + } + } + }, + "nopt": { + "version": "1.0.10", + "from": "nopt@>=1.0.10 <1.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" + }, + "noptify": { + "version": "0.0.3", + "from": "noptify@latest", + "resolved": "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz", + "dev": true, + "dependencies": { + "nopt": { + "version": "2.0.0", + "from": "nopt@>=2.0.0 <2.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz", + "dev": true + } + } + }, + "normalize-path": { + "version": "2.1.1", + "from": "normalize-path@>=2.1.1 <3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "from": "npm-run-path@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "dev": true + }, + "nssocket": { + "version": "0.5.3", + "from": "nssocket@>=0.5.1 <0.6.0", + "resolved": "https://registry.npmjs.org/nssocket/-/nssocket-0.5.3.tgz", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "from": "object-copy@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "dev": true, + "dependencies": { + "define-property": { + "version": "0.2.5", + "from": "define-property@>=0.2.5 <0.3.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "from": "kind-of@>=3.0.3 <4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "dev": true + } + } + }, + "object-visit": { + "version": "1.0.1", + "from": "object-visit@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "dev": true + }, + "object.pick": { + "version": "1.3.0", + "from": "object.pick@>=1.3.0 <2.0.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "dev": true + }, + "once": { + "version": "1.4.0", + "from": "once@>=1.3.0 <2.0.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "dev": true + }, + "optimist": { + "version": "0.6.1", + "from": "optimist@>=0.6.0 <0.7.0", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "from": "p-finally@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "dev": true + }, + "package-json": { + "version": "4.0.1", + "from": "package-json@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "dev": true, + "dependencies": { + "semver": { + "version": "5.6.0", + "from": "semver@>=5.1.0 <6.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "dev": true + } + } + }, + "pascalcase": { + "version": "0.1.1", + "from": "pascalcase@>=0.1.1 <0.2.0", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "from": "path-dirname@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "from": "path-is-absolute@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "from": "path-is-inside@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "from": "path-key@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "dev": true + }, + "path-to-regexp": { + "version": "1.7.0", + "from": "path-to-regexp@>=1.7.0 <2.0.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz" + }, + "pathval": { + "version": "1.1.0", + "from": "pathval@>=1.1.0 <2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz" + }, + "pify": { + "version": "3.0.0", + "from": "pify@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "dev": true + }, + "pkginfo": { + "version": "0.3.1", + "from": "pkginfo@>=0.3.0 <0.4.0", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", + "dev": true + }, + "plato": { + "version": "0.6.2", + "from": "plato@>=0.6.0 <0.7.0", + "resolved": "https://registry.npmjs.org/plato/-/plato-0.6.2.tgz", + "dev": true, + "dependencies": { + "lodash": { + "version": "1.0.2", + "from": "lodash@>=1.0.1 <1.1.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", + "dev": true + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "from": "posix-character-classes@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "dev": true + }, + "posix-getopt": { + "version": "1.0.0", + "from": "posix-getopt@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/posix-getopt/-/posix-getopt-1.0.0.tgz", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "from": "prepend-http@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "from": "process-nextick-args@>=2.0.0 <2.1.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "dev": true + }, + "prompt": { + "version": "0.2.14", + "from": "prompt@0.2.14", + "resolved": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz", + "dev": true + }, + "ps-tree": { + "version": "0.0.3", + "from": "ps-tree@>=0.0.0 <0.1.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-0.0.3.tgz", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "from": "pseudomap@>=1.0.2 <2.0.0", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "dev": true + }, + "pstree.remy": { + "version": "1.1.2", + "from": "pstree.remy@>=1.1.2 <2.0.0", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.2.tgz", + "dev": true + }, + "qs": { + "version": "0.5.6", + "from": "qs@>=0.5.2 <0.6.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz", + "dev": true + }, + "rc": { + "version": "1.2.8", + "from": "rc@>=1.1.6 <2.0.0", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "dev": true, + "dependencies": { + "minimist": { + "version": "1.2.0", + "from": "minimist@>=1.2.0 <2.0.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "dev": true + } + } + }, + "read": { + "version": "1.0.7", + "from": "read@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "from": "readable-stream@>=2.0.2 <3.0.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "dev": true, + "dependencies": { + "isarray": { + "version": "1.0.0", + "from": "isarray@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "dev": true + } + } + }, + "readdirp": { + "version": "2.2.1", + "from": "readdirp@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "4.1.15", + "from": "graceful-fs@>=4.1.11 <5.0.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "dev": true + } + } + }, "redis": { "version": "0.10.3", "from": "redis@>=0.10.1 <0.11.0", "resolved": "https://registry.npmjs.org/redis/-/redis-0.10.3.tgz" }, + "regex-not": { + "version": "1.0.2", + "from": "regex-not@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "dev": true + }, + "registry-auth-token": { + "version": "3.3.2", + "from": "registry-auth-token@>=3.0.1 <4.0.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "dev": true + }, + "registry-url": { + "version": "3.1.0", + "from": "registry-url@>=3.0.3 <4.0.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "from": "remove-trailing-separator@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "from": "repeat-element@>=1.1.2 <2.0.0", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "from": "repeat-string@>=1.6.1 <2.0.0", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "dev": true + }, "request": { "version": "2.81.0", "from": "request@>=2.79.0 <3.0.0", @@ -896,11 +2874,6 @@ "from": "hawk@>=3.1.3 <3.2.0", "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", "dependencies": { - "hoek": { - "version": "2.16.3", - "from": "hoek@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz" - }, "boom": { "version": "2.10.1", "from": "boom@>=2.0.0 <3.0.0", @@ -911,6 +2884,11 @@ "from": "cryptiles@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz" }, + "hoek": { + "version": "2.16.3", + "from": "hoek@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz" + }, "sntp": { "version": "1.0.9", "from": "sntp@>=1.0.0 <2.0.0", @@ -977,11 +2955,23 @@ "from": "assert-plus@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "from": "bcrypt-pbkdf@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "optional": true + }, "dashdash": { "version": "1.14.1", "from": "dashdash@>=1.12.0 <2.0.0", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" }, + "ecc-jsbn": { + "version": "0.1.1", + "from": "ecc-jsbn@>=0.1.1 <0.2.0", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "optional": true + }, "getpass": { "version": "0.1.7", "from": "getpass@>=0.1.1 <0.2.0", @@ -990,22 +2980,14 @@ "jsbn": { "version": "0.1.1", "from": "jsbn@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "optional": true }, "tweetnacl": { "version": "0.14.5", "from": "tweetnacl@>=0.14.0 <0.15.0", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" - }, - "ecc-jsbn": { - "version": "0.1.1", - "from": "ecc-jsbn@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz" - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "from": "bcrypt-pbkdf@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz" + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "optional": true } } } @@ -1087,6 +3069,92 @@ } } }, + "require-like": { + "version": "0.1.2", + "from": "require-like@0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz" + }, + "resolve-url": { + "version": "0.2.1", + "from": "resolve-url@>=0.2.1 <0.3.0", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "dev": true + }, + "ret": { + "version": "0.1.15", + "from": "ret@>=0.1.10 <0.2.0", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "dev": true + }, + "revalidator": { + "version": "0.1.8", + "from": "revalidator@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", + "dev": true + }, + "rimraf": { + "version": "2.2.8", + "from": "rimraf@>=2.2.8 <2.3.0", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz" + }, + "safe-buffer": { + "version": "5.1.2", + "from": "safe-buffer@>=5.1.1 <5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "dev": true + }, + "safe-json-stringify": { + "version": "1.2.0", + "from": "safe-json-stringify@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "dev": true, + "optional": true + }, + "safe-regex": { + "version": "1.1.0", + "from": "safe-regex@>=1.1.0 <2.0.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "dev": true + }, + "sandboxed-module": { + "version": "2.0.3", + "from": "sandboxed-module@latest", + "resolved": "https://registry.npmjs.org/sandboxed-module/-/sandboxed-module-2.0.3.tgz" + }, + "semver": { + "version": "2.2.1", + "from": "semver@>=2.2.1 <2.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-2.2.1.tgz", + "dev": true + }, + "semver-diff": { + "version": "2.1.0", + "from": "semver-diff@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "dev": true, + "dependencies": { + "semver": { + "version": "5.6.0", + "from": "semver@>=5.0.3 <6.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "dev": true + } + } + }, + "set-value": { + "version": "2.0.0", + "from": "set-value@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "dev": true, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "from": "extend-shallow@>=2.0.1 <3.0.0", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "dev": true + } + } + }, "settings-sharelatex": { "version": "1.0.0", "from": "git+https://github.com/sharelatex/settings-sharelatex.git#v1.0.0", @@ -1099,6 +3167,407 @@ } } }, + "shebang-command": { + "version": "1.2.0", + "from": "shebang-command@>=1.2.0 <2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "dev": true + }, + "shebang-regex": { + "version": "1.0.0", + "from": "shebang-regex@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "dev": true + }, + "shelljs": { + "version": "0.1.4", + "from": "shelljs@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz", + "dev": true + }, + "sigmund": { + "version": "1.0.1", + "from": "sigmund@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz" + }, + "signal-exit": { + "version": "3.0.2", + "from": "signal-exit@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "dev": true + }, + "sinon": { + "version": "7.1.1", + "from": "sinon@latest", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.1.1.tgz" + }, + "snapdragon": { + "version": "0.8.2", + "from": "snapdragon@>=0.8.1 <0.9.0", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "dev": true, + "dependencies": { + "debug": { + "version": "2.6.9", + "from": "debug@>=2.2.0 <3.0.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "dev": true + }, + "define-property": { + "version": "0.2.5", + "from": "define-property@>=0.2.5 <0.3.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "dev": true + }, + "extend-shallow": { + "version": "2.0.1", + "from": "extend-shallow@>=2.0.1 <3.0.0", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "from": "snapdragon-node@>=2.0.1 <3.0.0", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "dev": true, + "dependencies": { + "define-property": { + "version": "1.0.0", + "from": "define-property@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "dev": true + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "from": "is-accessor-descriptor@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "dev": true + }, + "is-data-descriptor": { + "version": "1.0.0", + "from": "is-data-descriptor@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "dev": true + }, + "is-descriptor": { + "version": "1.0.2", + "from": "is-descriptor@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "from": "snapdragon-util@>=3.0.1 <4.0.0", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "dev": true, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "from": "kind-of@>=3.2.0 <4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "dev": true + } + } + }, + "source-map": { + "version": "0.5.7", + "from": "source-map@>=0.5.6 <0.6.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.2", + "from": "source-map-resolve@>=0.5.0 <0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "dev": true + }, + "source-map-url": { + "version": "0.4.0", + "from": "source-map-url@>=0.4.0 <0.5.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "from": "split-string@>=3.0.2 <4.0.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "dev": true + }, + "stack-parser": { + "version": "0.0.1", + "from": "stack-parser@>=0.0.1 <0.1.0", + "resolved": "https://registry.npmjs.org/stack-parser/-/stack-parser-0.0.1.tgz", + "dev": true + }, + "stack-trace": { + "version": "0.0.9", + "from": "stack-trace@0.0.9", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz" + }, + "static-extend": { + "version": "0.1.2", + "from": "static-extend@>=0.1.1 <0.2.0", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "dev": true, + "dependencies": { + "define-property": { + "version": "0.2.5", + "from": "define-property@>=0.2.5 <0.3.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "dev": true + } + } + }, + "string_decoder": { + "version": "1.1.1", + "from": "string_decoder@>=1.1.1 <1.2.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "from": "string-width@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "from": "strip-ansi@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "from": "strip-eof@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "from": "strip-json-comments@>=2.0.1 <2.1.0", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "from": "supports-color@>=5.5.0 <6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + }, + "term-size": { + "version": "1.2.0", + "from": "term-size@>=1.2.0 <2.0.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "dev": true + }, + "text-encoding": { + "version": "0.6.4", + "from": "text-encoding@>=0.6.4 <0.7.0", + "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz" + }, + "timed-out": { + "version": "4.0.1", + "from": "timed-out@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "dev": true + }, + "timekeeper": { + "version": "2.1.2", + "from": "timekeeper@latest", + "resolved": "https://registry.npmjs.org/timekeeper/-/timekeeper-2.1.2.tgz" + }, + "timespan": { + "version": "2.3.0", + "from": "timespan@>=2.3.0 <2.4.0", + "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz", + "dev": true + }, + "tiny-lr": { + "version": "0.0.4", + "from": "tiny-lr@0.0.4", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.0.4.tgz", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "from": "to-object-path@>=0.3.0 <0.4.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "dev": true, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "from": "kind-of@>=3.0.2 <4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "dev": true + } + } + }, + "to-regex": { + "version": "3.0.2", + "from": "to-regex@>=3.0.2 <4.0.0", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "dev": true + }, + "to-regex-range": { + "version": "2.1.1", + "from": "to-regex-range@>=2.1.0 <3.0.0", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "dev": true + }, + "touch": { + "version": "3.1.0", + "from": "touch@>=3.1.0 <4.0.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "dev": true + }, + "type-detect": { + "version": "4.0.8", + "from": "type-detect@>=4.0.5 <5.0.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + }, + "undefsafe": { + "version": "2.0.2", + "from": "undefsafe@>=2.0.2 <3.0.0", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", + "dev": true, + "dependencies": { + "debug": { + "version": "2.6.9", + "from": "debug@>=2.2.0 <3.0.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "dev": true + } + } + }, + "underscore": { + "version": "1.7.0", + "from": "underscore@>=1.7.0 <1.8.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz" + }, + "underscore.string": { + "version": "2.2.1", + "from": "underscore.string@>=2.2.1 <2.3.0", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz" + }, + "union-value": { + "version": "1.0.0", + "from": "union-value@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "dev": true, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "from": "extend-shallow@>=2.0.1 <3.0.0", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "dev": true + }, + "set-value": { + "version": "0.4.3", + "from": "set-value@>=0.4.3 <0.5.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "dev": true + } + } + }, + "unique-string": { + "version": "1.0.0", + "from": "unique-string@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "from": "unset-value@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "dev": true, + "dependencies": { + "has-value": { + "version": "0.3.1", + "from": "has-value@>=0.3.1 <0.4.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "dev": true, + "dependencies": { + "isobject": { + "version": "2.1.0", + "from": "isobject@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "dev": true + } + } + }, + "has-values": { + "version": "0.1.4", + "from": "has-values@>=0.1.4 <0.2.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "from": "isarray@1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "dev": true + } + } + }, + "unzip-response": { + "version": "2.0.1", + "from": "unzip-response@>=2.0.1 <3.0.0", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "dev": true + }, + "upath": { + "version": "1.1.0", + "from": "upath@>=1.0.5 <2.0.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "dev": true + }, + "update-notifier": { + "version": "2.5.0", + "from": "update-notifier@>=2.3.0 <3.0.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "dev": true + }, + "urix": { + "version": "0.1.0", + "from": "urix@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "dev": true + }, + "url-parse-lax": { + "version": "1.0.0", + "from": "url-parse-lax@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "dev": true + }, + "use": { + "version": "3.1.1", + "from": "use@>=3.1.0 <4.0.0", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "from": "util-deprecate@>=1.0.1 <1.1.0", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "dev": true + }, + "utile": { + "version": "0.2.1", + "from": "utile@>=0.2.1 <0.3.0", + "resolved": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz", + "dev": true, + "dependencies": { + "ncp": { + "version": "0.4.2", + "from": "ncp@>=0.4.0 <0.5.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", + "dev": true + } + } + }, "v8-profiler": { "version": "5.7.0", "from": "v8-profiler@>=5.6.5 <6.0.0", @@ -1765,6 +4234,75 @@ } } } + }, + "watch": { + "version": "0.13.0", + "from": "watch@>=0.13.0 <0.14.0", + "resolved": "https://registry.npmjs.org/watch/-/watch-0.13.0.tgz", + "dev": true, + "dependencies": { + "minimist": { + "version": "1.2.0", + "from": "minimist@>=1.1.0 <2.0.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "dev": true + } + } + }, + "which": { + "version": "1.0.9", + "from": "which@>=1.0.5 <1.1.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz" + }, + "widest-line": { + "version": "2.0.1", + "from": "widest-line@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "dev": true + }, + "winston": { + "version": "0.8.3", + "from": "winston@>=0.8.1 <0.9.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "from": "wordwrap@>=0.0.2 <0.1.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "from": "wrappy@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "dev": true + }, + "write-file-atomic": { + "version": "2.3.0", + "from": "write-file-atomic@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "4.1.15", + "from": "graceful-fs@>=4.1.11 <5.0.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "dev": true + } + } + }, + "xdg-basedir": { + "version": "3.0.0", + "from": "xdg-basedir@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "dev": true + }, + "yallist": { + "version": "3.0.3", + "from": "yallist@>=3.0.2 <4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "dev": true } } } From 296bdcf5bb29f993053ea43e2fca3696028ac3b8 Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Mon, 3 Dec 2018 12:21:00 -0500 Subject: [PATCH 03/33] add script from web-sharelatex-internal https://github.com/sharelatex/web-sharelatex-internal/blob/79d7cae00d4ff8db0c2898daf60e07227fc5b8e0/decaffeinate.sh --- services/chat/decaffeinate.sh | 57 +++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 services/chat/decaffeinate.sh diff --git a/services/chat/decaffeinate.sh b/services/chat/decaffeinate.sh new file mode 100644 index 0000000000..46691e3d44 --- /dev/null +++ b/services/chat/decaffeinate.sh @@ -0,0 +1,57 @@ +set -ex + +npx bulk-decaffeinate convert --dir public/coffee + +for module in modules/**/public/coffee; do + npx bulk-decaffeinate convert --dir $module +done + +npx bulk-decaffeinate clean + +git mv public/coffee public/src + +for module in modules/**/public; do + if [ -e $module/coffee ]; then + git mv $module/coffee $module/src + fi +done + +git commit -m "Rename public/coffee dir to public/src" + +npx prettier-eslint 'public/src/**/*.js' --write + +for module in modules/**/public/src; do + npx prettier-eslint "$module/**/*.js" --write +done + +git add . +git commit -m "Prettier: convert public/src decaffeinated files to Prettier format" + +npx bulk-decaffeinate convert --dir test/unit_frontend/coffee + +for module in modules/**/test/unit_frontend/coffee; do + npx bulk-decaffeinate convert --dir $module +done + +npx bulk-decaffeinate clean + +git mv test/unit_frontend/coffee test/unit_frontend/src + +for module in modules/**/test/unit_frontend; do + if [ -e $module/coffee ]; then + git mv $module/coffee $module/src + fi +done + +git commit -m "Rename test/unit_frontend/coffee to test/unit_frontend/src" + +npx prettier-eslint 'test/unit_frontend/src/**/*.js' --write + +for module in modules/**/test/unit_frontend/src; do + npx prettier-eslint "$module/**/*.js" --write +done + +git add . +git commit -m "Prettier: convert test/unit_frontend decaffeinated files to Prettier format" + +echo "done" \ No newline at end of file From 1c8430d207a37b73307fbd52cc0b42af0eb6441b Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Mon, 3 Dec 2018 12:31:48 -0500 Subject: [PATCH 04/33] modify script to convert bulk of coffee and lint --- services/chat/decaffeinate.sh | 48 ++++++++--------------------------- 1 file changed, 10 insertions(+), 38 deletions(-) diff --git a/services/chat/decaffeinate.sh b/services/chat/decaffeinate.sh index 46691e3d44..f94e420ac8 100644 --- a/services/chat/decaffeinate.sh +++ b/services/chat/decaffeinate.sh @@ -1,57 +1,29 @@ set -ex -npx bulk-decaffeinate convert --dir public/coffee - -for module in modules/**/public/coffee; do - npx bulk-decaffeinate convert --dir $module -done +npx bulk-decaffeinate convert --dir app/coffee npx bulk-decaffeinate clean -git mv public/coffee public/src +git mv app/coffee app/js -for module in modules/**/public; do - if [ -e $module/coffee ]; then - git mv $module/coffee $module/src - fi -done +git commit -m "Rename app/coffee dir to app/js" -git commit -m "Rename public/coffee dir to public/src" - -npx prettier-eslint 'public/src/**/*.js' --write - -for module in modules/**/public/src; do - npx prettier-eslint "$module/**/*.js" --write -done +npx prettier-eslint 'app/js/**/*.js' --write git add . -git commit -m "Prettier: convert public/src decaffeinated files to Prettier format" +git commit -m "Prettier: convert app/js decaffeinated files to Prettier format" -npx bulk-decaffeinate convert --dir test/unit_frontend/coffee - -for module in modules/**/test/unit_frontend/coffee; do - npx bulk-decaffeinate convert --dir $module -done +npx bulk-decaffeinate convert --dir test/acceptance/coffee npx bulk-decaffeinate clean -git mv test/unit_frontend/coffee test/unit_frontend/src +git mv test/acceptance/coffee test/acceptance/js -for module in modules/**/test/unit_frontend; do - if [ -e $module/coffee ]; then - git mv $module/coffee $module/src - fi -done +git commit -m "Rename test/acceptance/coffee to test/acceptance/js" -git commit -m "Rename test/unit_frontend/coffee to test/unit_frontend/src" - -npx prettier-eslint 'test/unit_frontend/src/**/*.js' --write - -for module in modules/**/test/unit_frontend/src; do - npx prettier-eslint "$module/**/*.js" --write -done +npx prettier-eslint 'test/acceptance/js/**/*.js' --write git add . -git commit -m "Prettier: convert test/unit_frontend decaffeinated files to Prettier format" +git commit -m "Prettier: convert test/acceptance decaffeinated files to Prettier format" echo "done" \ No newline at end of file From f5ff8611b4e1fbc3f674996cfb33d0255e838496 Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Mon, 3 Dec 2018 13:24:54 -0500 Subject: [PATCH 05/33] decaffeinate and lint individual files --- services/chat/decaffeinate.sh | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/services/chat/decaffeinate.sh b/services/chat/decaffeinate.sh index f94e420ac8..ceb08d4c7e 100644 --- a/services/chat/decaffeinate.sh +++ b/services/chat/decaffeinate.sh @@ -26,4 +26,20 @@ npx prettier-eslint 'test/acceptance/js/**/*.js' --write git add . git commit -m "Prettier: convert test/acceptance decaffeinated files to Prettier format" +git mv app.coffee app.js +git mv Gruntfile.coffe Gruntfile.js +git mv config/settings.defaults.coffee config/settings.defaults.js + +git commit -m "Rename individual coffee files to js files" + +decaffeinate app.js +decaffeinate Gruntfile.js +decaffeinate config/settings.defaults.js + +git commit -m "Decaffeinate: convert individual files to js" + +npx prettier-eslint app.js Gruntfile.js config/settings.defaults.js --write + +git commit -m "Prettier: convert individual decaffeinated files to Prettier format" + echo "done" \ No newline at end of file From 60493552773ac268a90ad0b39667bf63f8d25871 Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Mon, 3 Dec 2018 13:28:23 -0500 Subject: [PATCH 06/33] no longer need to ignore js files --- services/chat/.gitignore | 5 ----- 1 file changed, 5 deletions(-) diff --git a/services/chat/.gitignore b/services/chat/.gitignore index ba6632606f..6d84aef4a9 100644 --- a/services/chat/.gitignore +++ b/services/chat/.gitignore @@ -1,12 +1,7 @@ **.swp -app.js -app/js/ -test/unit/js/ -test/acceptance/js/ public/build/ node_modules/ -/public/js/chat.js plato/ From b438af7378b7e287a7a75cfa2f763c5f059868b5 Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Mon, 3 Dec 2018 14:13:08 -0500 Subject: [PATCH 07/33] simplified version of decaffeinate shell script --- services/chat/decaffeinate-simple.sh | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 services/chat/decaffeinate-simple.sh diff --git a/services/chat/decaffeinate-simple.sh b/services/chat/decaffeinate-simple.sh new file mode 100644 index 0000000000..6fd8a618b9 --- /dev/null +++ b/services/chat/decaffeinate-simple.sh @@ -0,0 +1,19 @@ +set -ex + +npx bulk-decaffeinate convert +npx bulk-decaffeinate clean + +git mv app/coffee app/js +git commit -m "Rename app/coffee dir to app/js" + +git mv test/acceptance/coffee test/acceptance/js +git commit -m "Rename test/acceptance/coffee to test/acceptance/js" + +npx prettier-eslint '*.js' --write +npx prettier-eslint 'config/*.js' --write +npx prettier-eslint 'app/js/**/*.js' --write +npx prettier-eslint 'test/acceptance/js/**/*.js' --write +git add . +git commit -m "Prettier: lint javascript files" + +echo "done" \ No newline at end of file From b19c1826d27a64f42a664e8abd264751c7199a56 Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Mon, 3 Dec 2018 14:15:21 -0500 Subject: [PATCH 08/33] add eslintrc file so decaffeinate can use it --- services/chat/.eslintrc | 77 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 services/chat/.eslintrc diff --git a/services/chat/.eslintrc b/services/chat/.eslintrc new file mode 100644 index 0000000000..8a19e98a6c --- /dev/null +++ b/services/chat/.eslintrc @@ -0,0 +1,77 @@ +{ + "extends": [ + "standard", + "standard-react", + "prettier", + "prettier/react", + "prettier/standard", + "plugin:jsx-a11y/recommended" + ], + "plugins": [ + "prettier", + "jsx-a11y", + "mocha", + "chai-expect", + "chai-friendly" + ], + "env": { + "mocha": true + }, + "globals": { + "expect": true, + "define": true, + "$": true, + "angular": true, + // Injected in layout.pug + "user_id": true + }, + "settings": { + // Tell eslint-plugin-react which version of React we are using + "react": { + "version": "15" + } + }, + "rules": { + "max-len": [ + "error", + { + "ignoreUrls": true, + // Ignore long describe/it test blocks, long import/require statements + "ignorePattern": "(^\\s*(it|describe)\\s*\\(['\"]|^import\\s*.*\\s*from\\s*['\"]|^.*\\s*=\\s*require\\(['\"])" + } + ], + // Fix conflict between prettier & standard by overriding to prefer + // double quotes + "jsx-quotes": [ + "error", + "prefer-double" + ], + // Override weird behaviour of jsx-a11y label-has-for (says labels must be + // nested *and* have for/id attributes) + "jsx-a11y/label-has-for": [ + "error", + { + "required": { + "some": [ + "nesting", + "id" + ] + } + } + ], + // Add some mocha specific rules + "mocha/handle-done-callback": "error", + "mocha/no-exclusive-tests": "error", + "mocha/no-global-tests": "error", + "mocha/no-identical-title": "error", + "mocha/no-nested-tests": "error", + "mocha/no-pending-tests": "error", + "mocha/no-skipped-tests": "error", + // Add some chai specific rules + "chai-expect/missing-assertion": "error", + "chai-expect/terminating-properties": "error", + // Swap the no-unused-expressions rule with a more chai-friendly one + "no-unused-expressions": 0, + "chai-friendly/no-unused-expressions": "error" + } +} \ No newline at end of file From 0cc3dbf4f5653ec292cde797736db15f8662265e Mon Sep 17 00:00:00 2001 From: Alasdair Smith Date: Tue, 4 Dec 2018 07:44:59 -0500 Subject: [PATCH 09/33] fix spelling mistake in coffee extension Co-Authored-By: natestemen --- services/chat/decaffeinate.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/chat/decaffeinate.sh b/services/chat/decaffeinate.sh index ceb08d4c7e..0cee2c2673 100644 --- a/services/chat/decaffeinate.sh +++ b/services/chat/decaffeinate.sh @@ -27,7 +27,7 @@ git add . git commit -m "Prettier: convert test/acceptance decaffeinated files to Prettier format" git mv app.coffee app.js -git mv Gruntfile.coffe Gruntfile.js +git mv Gruntfile.coffee Gruntfile.js git mv config/settings.defaults.coffee config/settings.defaults.js git commit -m "Rename individual coffee files to js files" @@ -42,4 +42,4 @@ npx prettier-eslint app.js Gruntfile.js config/settings.defaults.js --write git commit -m "Prettier: convert individual decaffeinated files to Prettier format" -echo "done" \ No newline at end of file +echo "done" From 159442ce419250348917395fd30ce5d0c4929daa Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Mon, 10 Dec 2018 22:17:48 -0500 Subject: [PATCH 10/33] update build scripts with v1.1.10 --- services/chat/.github/ISSUE_TEMPLATE.md | 38 +++++++++++++ .../chat/.github/PULL_REQUEST_TEMPLATE.md | 45 +++++++++++++++ services/chat/Jenkinsfile | 56 ++++++++++++++----- services/chat/Makefile | 28 ++++++---- services/chat/buildscript.txt | 9 +++ services/chat/docker-compose.ci.yml | 13 +++-- services/chat/docker-compose.yml | 18 ++++-- services/chat/nodemon.json | 9 ++- services/chat/package.json | 9 +-- 9 files changed, 183 insertions(+), 42 deletions(-) create mode 100644 services/chat/.github/ISSUE_TEMPLATE.md create mode 100644 services/chat/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 services/chat/buildscript.txt diff --git a/services/chat/.github/ISSUE_TEMPLATE.md b/services/chat/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000000..e0093aa90c --- /dev/null +++ b/services/chat/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,38 @@ + + +## Steps to Reproduce + + + +1. +2. +3. + +## Expected Behaviour + + +## Observed Behaviour + + + +## Context + + +## Technical Info + + +* URL: +* Browser Name and version: +* Operating System and version (desktop or mobile): +* Signed in as: +* Project and/or file: + +## Analysis + + +## Who Needs to Know? + + + +- +- diff --git a/services/chat/.github/PULL_REQUEST_TEMPLATE.md b/services/chat/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000000..ed25ee83c1 --- /dev/null +++ b/services/chat/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,45 @@ + + +### Description + + + +#### Screenshots + + + +#### Related Issues / PRs + + + +### Review + + + +#### Potential Impact + + + +#### Manual Testing Performed + +- [ ] +- [ ] + +#### Accessibility + + + +### Deployment + + + +#### Deployment Checklist + +- [ ] Update documentation not included in the PR (if any) +- [ ] + +#### Metrics and Monitoring + + + +#### Who Needs to Know? diff --git a/services/chat/Jenkinsfile b/services/chat/Jenkinsfile index db818dc1de..0e4aa10f05 100644 --- a/services/chat/Jenkinsfile +++ b/services/chat/Jenkinsfile @@ -3,6 +3,13 @@ String cron_string = BRANCH_NAME == "master" ? "@daily" : "" pipeline { agent any + environment { + GIT_PROJECT = "chat-sharelatex" + JENKINS_WORKFLOW = "chat-sharelatex" + TARGET_URL = "${env.JENKINS_URL}blue/organizations/jenkins/${JENKINS_WORKFLOW}/detail/$BRANCH_NAME/$BUILD_NUMBER/pipeline" + GIT_API_URL = "https://api.github.com/repos/sharelatex/${GIT_PROJECT}/statuses/$GIT_COMMIT" + } + triggers { pollSCM('* * * * *') cron(cron_string) @@ -18,9 +25,18 @@ pipeline { } } steps { - // we need to disable logallrefupdates, else git clones - // during the npm install will require git to lookup the - // user id which does not exist in the container's + withCredentials([usernamePassword(credentialsId: 'GITHUB_INTEGRATION', usernameVariable: 'GH_AUTH_USERNAME', passwordVariable: 'GH_AUTH_PASSWORD')]) { + sh "curl $GIT_API_URL \ + --data '{ \ + \"state\" : \"pending\", \ + \"target_url\": \"$TARGET_URL\", \ + \"description\": \"Your build is underway\", \ + \"context\": \"ci/jenkins\" }' \ + -u $GH_AUTH_USERNAME:$GH_AUTH_PASSWORD" + } + // we need to disable logallrefupdates, else git clones + // during the npm install will require git to lookup the + // user id which does not exist in the container's // /etc/passwd file, causing the clone to fail. sh 'git config --global core.logallrefupdates false' sh 'rm -rf node_modules' @@ -28,18 +44,6 @@ pipeline { } } - stage('Compile') { - agent { - docker { - image 'node:6.14.1' - reuseNode true - } - } - steps { - sh 'npm run compile:all' - } - } - stage('Unit Tests') { steps { sh 'DOCKER_COMPOSE_FLAGS="-f docker-compose.ci.yml" make test_unit' @@ -77,6 +81,19 @@ pipeline { post { always { sh 'DOCKER_COMPOSE_FLAGS="-f docker-compose.ci.yml" make test_clean' + sh 'make clean' + } + + success { + withCredentials([usernamePassword(credentialsId: 'GITHUB_INTEGRATION', usernameVariable: 'GH_AUTH_USERNAME', passwordVariable: 'GH_AUTH_PASSWORD')]) { + sh "curl $GIT_API_URL \ + --data '{ \ + \"state\" : \"success\", \ + \"target_url\": \"$TARGET_URL\", \ + \"description\": \"Your build succeeded!\", \ + \"context\": \"ci/jenkins\" }' \ + -u $GH_AUTH_USERNAME:$GH_AUTH_PASSWORD" + } } failure { @@ -84,6 +101,15 @@ pipeline { to: "${EMAIL_ALERT_TO}", subject: "Jenkins build failed: ${JOB_NAME}:${BUILD_NUMBER}", body: "Build: ${BUILD_URL}") + withCredentials([usernamePassword(credentialsId: 'GITHUB_INTEGRATION', usernameVariable: 'GH_AUTH_USERNAME', passwordVariable: 'GH_AUTH_PASSWORD')]) { + sh "curl $GIT_API_URL \ + --data '{ \ + \"state\" : \"failure\", \ + \"target_url\": \"$TARGET_URL\", \ + \"description\": \"Your build failed\", \ + \"context\": \"ci/jenkins\" }' \ + -u $GH_AUTH_USERNAME:$GH_AUTH_PASSWORD" + } } } diff --git a/services/chat/Makefile b/services/chat/Makefile index 865d63a9fc..d60bf6fad9 100644 --- a/services/chat/Makefile +++ b/services/chat/Makefile @@ -1,29 +1,35 @@ # This file was auto-generated, do not edit it directly. # Instead run bin/update_build_scripts from # https://github.com/sharelatex/sharelatex-dev-environment -# Version: 1.0.0 +# Version: 1.1.10 BUILD_NUMBER ?= local BRANCH_NAME ?= $(shell git rev-parse --abbrev-ref HEAD) PROJECT_NAME = chat DOCKER_COMPOSE_FLAGS ?= -f docker-compose.yml -DOCKER_COMPOSE := docker-compose ${DOCKER_COMPOSE_FLAGS} +DOCKER_COMPOSE := BUILD_NUMBER=$(BUILD_NUMBER) \ + BRANCH_NAME=$(BRANCH_NAME) \ + PROJECT_NAME=$(PROJECT_NAME) \ + MOCHA_GREP=${MOCHA_GREP} \ + docker-compose ${DOCKER_COMPOSE_FLAGS} + clean: - rm -f app.js - rm -rf app/js - rm -rf test/unit/js - rm -rf test/acceptance/js +lint: + $(DOCKER_COMPOSE) run --rm test_unit npm run lint -test: test_unit test_acceptance +test: lint test_unit test_acceptance test_unit: - @[ -d test/unit ] && $(DOCKER_COMPOSE) run --rm test_unit -- ${MOCHA_ARGS} || echo "chat has no unit tests" + @[ ! -d test/unit ] && echo "chat has no unit tests" || $(DOCKER_COMPOSE) run --rm test_unit -test_acceptance: test_clean # clear the database before each acceptance test run - @[ -d test/acceptance ] && $(DOCKER_COMPOSE) run --rm test_acceptance -- ${MOCHA_ARGS} || echo "chat has no acceptance tests" +test_acceptance: test_clean test_acceptance_pre_run # clear the database before each acceptance test run + @[ ! -d test/acceptance ] && echo "chat has no acceptance tests" || $(DOCKER_COMPOSE) run --rm test_acceptance test_clean: - $(DOCKER_COMPOSE) down + $(DOCKER_COMPOSE) down -v -t 0 + +test_acceptance_pre_run: + @[ ! -f test/acceptance/scripts/pre-run ] && echo "chat has no pre acceptance tests task" || $(DOCKER_COMPOSE) run --rm test_acceptance test/acceptance/scripts/pre-run .PHONY: clean test test_unit test_acceptance test_clean build publish diff --git a/services/chat/buildscript.txt b/services/chat/buildscript.txt new file mode 100644 index 0000000000..1ffe964741 --- /dev/null +++ b/services/chat/buildscript.txt @@ -0,0 +1,9 @@ +chat +--node-version=6.14.1 +--script-version=1.1.10 +--build-target=native +--kube=false +--dependencies=redis,mongo +--language=es +--docker-repos=quay.io/sharelatex +--acceptance-creds=None diff --git a/services/chat/docker-compose.ci.yml b/services/chat/docker-compose.ci.yml index a22b32c610..c897b1f824 100644 --- a/services/chat/docker-compose.ci.yml +++ b/services/chat/docker-compose.ci.yml @@ -1,7 +1,7 @@ # This file was auto-generated, do not edit it directly. # Instead run bin/update_build_scripts from # https://github.com/sharelatex/sharelatex-dev-environment -# Version: 1.0.0 +# Version: 1.1.10 version: "2" @@ -11,7 +11,8 @@ services: volumes: - .:/app working_dir: /app - entrypoint: npm run test:unit:_run + user: node + command: npm run test:unit:_run test_acceptance: image: node:6.14.1 @@ -19,12 +20,16 @@ services: - .:/app working_dir: /app environment: + ELASTIC_SEARCH_DSN: es:9200 REDIS_HOST: redis MONGO_HOST: mongo + POSTGRES_HOST: postgres + MOCHA_GREP: ${MOCHA_GREP} depends_on: - - redis - mongo - entrypoint: npm run test:acceptance:_run + - redis + user: node + command: npm run test:acceptance:_run redis: image: redis diff --git a/services/chat/docker-compose.yml b/services/chat/docker-compose.yml index 1278e8856a..1f1eb4ab1c 100644 --- a/services/chat/docker-compose.yml +++ b/services/chat/docker-compose.yml @@ -1,7 +1,7 @@ # This file was auto-generated, do not edit it directly. # Instead run bin/update_build_scripts from # https://github.com/sharelatex/sharelatex-dev-environment -# Version: 1.0.0 +# Version: 1.1.10 version: "2" @@ -11,23 +11,31 @@ services: volumes: - .:/app working_dir: /app - entrypoint: npm run test:unit + environment: + MOCHA_GREP: ${MOCHA_GREP} + command: npm run test:unit + user: node test_acceptance: image: node:6.14.1 volumes: - .:/app + working_dir: /app environment: + ELASTIC_SEARCH_DSN: es:9200 REDIS_HOST: redis MONGO_HOST: mongo + POSTGRES_HOST: postgres + MOCHA_GREP: ${MOCHA_GREP} + user: node depends_on: - - redis - mongo - working_dir: /app - entrypoint: npm run test:acceptance + - redis + command: npm run test:acceptance redis: image: redis mongo: image: mongo:3.4 + diff --git a/services/chat/nodemon.json b/services/chat/nodemon.json index 9044f921c6..5826281b84 100644 --- a/services/chat/nodemon.json +++ b/services/chat/nodemon.json @@ -4,12 +4,15 @@ "node_modules/" ], "verbose": true, + "legacyWatch": true, "execMap": { "js": "npm run start" }, + "watch": [ - "app/coffee/", - "app.coffee" + "app/js/", + "app.js", + "config/" ], - "ext": "coffee" + "ext": "js" } diff --git a/services/chat/package.json b/services/chat/package.json index 2f0eac6f9f..7282b2e7af 100644 --- a/services/chat/package.json +++ b/services/chat/package.json @@ -8,15 +8,16 @@ }, "scripts": { "compile:app": "coffee -o app/js -c app/coffee && coffee -c app.coffee", - "start": "npm run compile:app && node app.js", - "test:acceptance": "npm run compile:app && npm run compile:acceptance_tests && npm run test:acceptance:_run -- $@", - "test:unit": "npm run compile:app && npm run compile:unit_tests && npm run test:unit:_run -- $@", + "start": "node $NODE_APP_OPTIONS app.js", + "test:acceptance": "npm run test:acceptance:_run -- --grep=$MOCHA_GREP", + "test:unit": "npm run test:unit:_run -- --grep=$MOCHA_GREP", "compile:unit_tests": "[ -e test/unit ] && coffee -o test/unit/js -c test/unit/coffee || echo 'No unit tests to compile'", "compile:acceptance_tests": "[ -e test/acceptance ] && coffee -o test/acceptance/js -c test/acceptance/coffee || echo 'No acceptance tests to compile'", "compile:all": "npm run compile:app && npm run compile:unit_tests && npm run compile:acceptance_tests", "nodemon": "nodemon --config nodemon.json", "test:acceptance:_run": "mocha --recursive --reporter spec --timeout 15000 --exit $@ test/acceptance/js", - "test:unit:_run": "mocha --recursive --reporter spec $@ test/unit/js" + "test:unit:_run": "mocha --recursive --reporter spec $@ test/unit/js", + "lint": "node_modules/.bin/eslint ." }, "dependencies": { "async": "0.2.9", From 7a579ed62a7b9041babdd13e70a72963994e9a78 Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Mon, 10 Dec 2018 22:19:45 -0500 Subject: [PATCH 11/33] make script executable --- services/chat/decaffeinate.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 services/chat/decaffeinate.sh diff --git a/services/chat/decaffeinate.sh b/services/chat/decaffeinate.sh old mode 100644 new mode 100755 From c86e81e1f4ed360e59a1ed4ff2b1ed5b5aceb2b4 Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Mon, 10 Dec 2018 22:48:12 -0500 Subject: [PATCH 12/33] add eslint packages --- services/chat/npm-shrinkwrap.json | 5531 +++++++++++++++++++++++------ services/chat/package.json | 15 + 2 files changed, 4436 insertions(+), 1110 deletions(-) diff --git a/services/chat/npm-shrinkwrap.json b/services/chat/npm-shrinkwrap.json index 6a8d786f90..3be5fbbe76 100644 --- a/services/chat/npm-shrinkwrap.json +++ b/services/chat/npm-shrinkwrap.json @@ -1,718 +1,1514 @@ { "name": "chat-sharelatex", "version": "0.1.4", + "lockfileVersion": 1, + "requires": true, "dependencies": { + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, "@sinonjs/commons": { "version": "1.3.0", - "from": "@sinonjs/commons@>=1.2.0 <2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.3.0.tgz" + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.3.0.tgz", + "integrity": "sha1-UKJ1QBa28wqZTO2m2aCow2rdqEk=", + "requires": { + "type-detect": "4.0.8" + } }, "@sinonjs/formatio": { "version": "3.0.0", - "from": "@sinonjs/formatio@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.0.0.tgz", + "integrity": "sha512-vdjoYLDptCgvtJs57ULshak3iJe4NW3sJ3g36xVDGff5AE8P30S6A093EIEPjdi2noGhfuNOEkbxt3J3awFW1w==", + "requires": { + "@sinonjs/samsam": "2.1.0" + }, "dependencies": { "@sinonjs/samsam": { "version": "2.1.0", - "from": "@sinonjs/samsam@2.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-2.1.0.tgz" + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-2.1.0.tgz", + "integrity": "sha512-5x2kFgJYupaF1ns/RmharQ90lQkd2ELS8A9X0ymkAAdemYHGtI2KiUHG8nX2WU0T1qgnOU5YMqnBM2V7NUanNw==", + "requires": { + "array-from": "^2.1.1" + } } } }, "@sinonjs/samsam": { "version": "2.1.2", - "from": "@sinonjs/samsam@>=2.1.2 <3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-2.1.2.tgz" + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-2.1.2.tgz", + "integrity": "sha512-ZwTHAlC9akprWDinwEPD4kOuwaYZlyMwVJIANsKNC3QVp0AHB04m7RnB4eqeWfgmxw8MGTzS9uMaw93Z3QcZbw==" }, "abbrev": { "version": "1.1.1", - "from": "abbrev@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=" + }, + "acorn": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz", + "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==", + "dev": true + }, + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "dev": true + }, + "ajv": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz", + "integrity": "sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } }, "ansi-align": { "version": "2.0.0", - "from": "ansi-align@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "requires": { + "string-width": "^2.0.0" + } + }, + "ansi-escapes": { + "version": "3.1.0", + "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", "dev": true }, "ansi-regex": { "version": "3.0.0", - "from": "ansi-regex@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, "ansi-styles": { "version": "3.2.1", - "from": "ansi-styles@>=3.2.1 <4.0.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "dev": true + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } }, "anymatch": { "version": "2.0.0", - "from": "anymatch@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "dev": true + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } }, "argparse": { "version": "0.1.16", - "from": "argparse@>=0.1.11 <0.2.0", "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", + "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", + "requires": { + "underscore": "~1.7.0", + "underscore.string": "~2.4.0" + }, "dependencies": { "underscore.string": { "version": "2.4.0", - "from": "underscore.string@>=2.4.0 <2.5.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz" + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", + "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=" } } }, + "aria-query": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", + "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "dev": true, + "requires": { + "ast-types-flow": "0.0.7", + "commander": "^2.11.0" + } + }, "arr-diff": { "version": "4.0.0", - "from": "arr-diff@>=4.0.0 <5.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", - "from": "arr-flatten@>=1.1.0 <2.0.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", "dev": true }, "arr-union": { "version": "3.1.0", - "from": "arr-union@>=3.1.0 <4.0.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, "array-from": { "version": "2.1.1", - "from": "array-from@>=2.1.1 <3.0.0", - "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz" + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=" + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } }, "array-unique": { "version": "0.3.2", - "from": "array-unique@>=0.3.2 <0.4.0", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, "assertion-error": { "version": "1.1.0", - "from": "assertion-error@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha1-5gtrDo8wG9l+U3UhW9pAbIURjAs=" }, "assign-symbols": { "version": "1.0.0", - "from": "assign-symbols@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, "async": { "version": "0.2.9", - "from": "async@0.2.9", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.9.tgz" + "resolved": "https://registry.npmjs.org/async/-/async-0.2.9.tgz", + "integrity": "sha1-32MGD789Myhqdqr21Vophtn/hhk=" }, "async-each": { "version": "1.0.1", - "from": "async-each@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", "dev": true }, "atob": { "version": "2.1.2", - "from": "atob@>=2.1.1 <3.0.0", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=", "dev": true }, + "axobject-query": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", + "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", + "dev": true, + "requires": { + "ast-types-flow": "0.0.7" + } + }, "balanced-match": { "version": "1.0.0", - "from": "balanced-match@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, "base": { "version": "0.11.2", - "from": "base@>=0.11.1 <0.12.0", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", "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", - "from": "define-property@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "dev": true + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } }, "is-accessor-descriptor": { "version": "1.0.0", - "from": "is-accessor-descriptor@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "dev": true + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } }, "is-data-descriptor": { "version": "1.0.0", - "from": "is-data-descriptor@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "dev": true + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } }, "is-descriptor": { "version": "1.0.2", - "from": "is-descriptor@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "dev": true + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } } } }, "binary-extensions": { "version": "1.12.0", - "from": "binary-extensions@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", + "integrity": "sha1-wteA9T1Fu6gxeokC1M7q86Y4WxQ=", "dev": true }, "boxen": { "version": "1.3.0", - "from": "boxen@>=1.2.1 <2.0.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "dev": true + "integrity": "sha1-VcbDmouljZxhrSLNh3Uy3rZlogs=", + "dev": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + } }, "brace-expansion": { "version": "1.1.11", - "from": "brace-expansion@>=1.1.7 <2.0.0", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "dev": true + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, "braces": { "version": "2.3.2", - "from": "braces@>=2.3.0 <3.0.0", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", "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", - "from": "extend-shallow@>=2.0.1 <3.0.0", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "dev": true + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } } } }, "broadway": { "version": "0.3.6", - "from": "broadway@>=0.3.2 <0.4.0", "resolved": "https://registry.npmjs.org/broadway/-/broadway-0.3.6.tgz", + "integrity": "sha1-fb7waLlUt5B5Jf1USWO1eKkCuno=", "dev": true, + "requires": { + "cliff": "0.1.9", + "eventemitter2": "0.4.14", + "nconf": "0.6.9", + "utile": "0.2.1", + "winston": "0.8.0" + }, "dependencies": { "cliff": { "version": "0.1.9", - "from": "cliff@0.1.9", "resolved": "https://registry.npmjs.org/cliff/-/cliff-0.1.9.tgz", - "dev": true + "integrity": "sha1-ohHgnGo947oa8n0EnTASUNGIErw=", + "dev": true, + "requires": { + "colors": "0.x.x", + "eyes": "0.1.x", + "winston": "0.8.x" + } }, "winston": { "version": "0.8.0", - "from": "winston@0.8.0", "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.0.tgz", - "dev": true + "integrity": "sha1-YdCDD6aZcGISIGsKK1ymmpMENmg=", + "dev": true, + "requires": { + "async": "0.2.x", + "colors": "0.6.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "pkginfo": "0.3.x", + "stack-trace": "0.0.x" + } } } }, "browser-stdout": { "version": "1.3.0", - "from": "browser-stdout@1.3.0", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, "bunyan": { "version": "1.8.12", - "from": "bunyan@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz", - "dev": true + "integrity": "sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=", + "dev": true, + "requires": { + "dtrace-provider": "~0.8", + "moment": "^2.10.6", + "mv": "~2", + "safe-json-stringify": "~1" + } }, "cache-base": { "version": "1.0.1", - "from": "cache-base@>=1.0.1 <2.0.0", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "^0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "http://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", "dev": true }, "camelcase": { "version": "4.1.0", - "from": "camelcase@>=4.0.0 <5.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true }, "capture-stack-trace": { "version": "1.0.1", - "from": "capture-stack-trace@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha1-psC74fOPOqC5Ijjstv9Cw0TUE10=", "dev": true }, "chai": { "version": "4.2.0", - "from": "chai@latest", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz" + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha1-dgqnLPION5XoSxKHfODoNzeqKeU=", + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" + } }, "chalk": { "version": "2.4.1", - "from": "chalk@>=2.0.1 <3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, "check-error": { "version": "1.0.2", - "from": "check-error@>=1.0.2 <2.0.0", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" }, "check-types": { "version": "0.6.5", - "from": "check-types@>=0.6.0 <0.7.0", "resolved": "https://registry.npmjs.org/check-types/-/check-types-0.6.5.tgz", + "integrity": "sha1-BE/YsBT9+Yy+MeabXtqItS4FDmg=", "dev": true }, "chokidar": { "version": "2.0.4", - "from": "chokidar@>=2.0.4 <3.0.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "dev": true + "integrity": "sha1-NW/04rDo5D4yLRijckYLvPOszSY=", + "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" + } }, "ci-info": { "version": "1.6.0", - "from": "ci-info@>=1.5.0 <2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc=", + "dev": true + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", "dev": true }, "class-utils": { "version": "0.3.6", - "from": "class-utils@>=0.3.5 <0.4.0", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", "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", - "from": "define-property@>=0.2.5 <0.3.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "dev": true + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } } } }, "cli": { "version": "0.4.5", - "from": "cli@>=0.4.0 <0.5.0", "resolved": "https://registry.npmjs.org/cli/-/cli-0.4.5.tgz", - "dev": true + "integrity": "sha1-ePlIXNFhtWbppsctcXDEJw6B22E=", + "dev": true, + "requires": { + "glob": ">= 3.1.4" + } }, "cli-boxes": { "version": "1.0.0", - "from": "cli-boxes@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, "cliff": { "version": "0.1.10", - "from": "cliff@>=0.1.9 <0.2.0", "resolved": "https://registry.npmjs.org/cliff/-/cliff-0.1.10.tgz", + "integrity": "sha1-U74z6p9ZvshWCe4wCsQgdgPlIBM=", "dev": true, + "requires": { + "colors": "~1.0.3", + "eyes": "~0.1.8", + "winston": "0.8.x" + }, "dependencies": { "colors": { "version": "1.0.3", - "from": "colors@>=1.0.3 <1.1.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", "dev": true } } }, "coffee-script": { "version": "1.7.1", - "from": "coffee-script@>=1.7.1 <1.8.0", "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz", + "integrity": "sha1-YplqhheAx15tUGnROCJyO3NAS/w=", + "requires": { + "mkdirp": "~0.3.5" + }, "dependencies": { "mkdirp": { "version": "0.3.5", - "from": "mkdirp@>=0.3.5 <0.4.0", - "resolved": "https://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=" } } }, "collection-visit": { "version": "1.0.0", - "from": "collection-visit@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "dev": true + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } }, "color-convert": { "version": "1.9.3", - "from": "color-convert@>=1.9.0 <2.0.0", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "dev": true + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } }, "color-name": { "version": "1.1.3", - "from": "color-name@1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "colors": { "version": "0.6.2", - "from": "colors@>=0.6.2 <0.7.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz" + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=" }, "commander": { "version": "2.0.0", - "from": "commander@2.0.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.0.0.tgz", + "integrity": "sha1-0bhvkB+LZL2UG96tr5JFMDk76Sg=", "dev": true }, "complexity-report": { "version": "0.10.5", - "from": "complexity-report@>=0.10.3 <0.11.0", "resolved": "https://registry.npmjs.org/complexity-report/-/complexity-report-0.10.5.tgz", + "integrity": "sha1-4AYwT6INC6ybN4BUSpA1E6j7Vcs=", "dev": true, + "requires": { + "check-types": "0.6.x", + "commander": "1.1.x", + "esprima": "1.0.x" + }, "dependencies": { "commander": { "version": "1.1.1", - "from": "commander@>=1.1.0 <1.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-1.1.1.tgz", - "dev": true + "integrity": "sha1-UNFlGGiuYOzP8KLZ80WVN2vGsEE=", + "dev": true, + "requires": { + "keypress": "0.1.x" + } } } }, "component-emitter": { "version": "1.2.1", - "from": "component-emitter@>=1.2.1 <2.0.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, "concat-map": { "version": "0.0.1", - "from": "concat-map@0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "configstore": { "version": "3.1.2", - "from": "configstore@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha1-xvJd767vJt8S3TNBSwAf6BpUP48=", "dev": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, "dependencies": { "graceful-fs": { "version": "4.1.15", - "from": "graceful-fs@>=4.1.2 <5.0.0", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha1-/7cD4QZuig7qpMi4C6klPu77+wA=", "dev": true } } }, "console-browserify": { "version": "0.1.6", - "from": "console-browserify@>=0.1.0 <0.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-0.1.6.tgz", + "integrity": "sha1-0SijwLuINQ61YmxufHGm8P1ImDw=", + "dev": true + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", "dev": true }, "copy-descriptor": { "version": "0.1.1", - "from": "copy-descriptor@>=0.1.0 <0.2.0", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, "core-util-is": { "version": "1.0.2", - "from": "core-util-is@>=1.0.0 <1.1.0", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, "create-error-class": { "version": "3.0.2", - "from": "create-error-class@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "dev": true + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } }, "cross-spawn": { "version": "5.1.0", - "from": "cross-spawn@>=5.0.1 <6.0.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, "dependencies": { "lru-cache": { "version": "4.1.4", - "from": "lru-cache@>=4.0.1 <5.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.4.tgz", - "dev": true + "integrity": "sha512-EPstzZ23znHUVLKj+lcXO1KvZkrlw+ZirdwvOmnAnA/1PB4ggyXJ77LRkCqkff+ShQ+cqoxCxLQOh4cKITO5iA==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^3.0.2" + } }, "which": { "version": "1.3.1", - "from": "which@>=1.2.9 <2.0.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "dev": true + "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } } } }, "crypto-random-string": { "version": "1.0.0", - "from": "crypto-random-string@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", "dev": true }, "cycle": { "version": "1.0.3", - "from": "cycle@>=1.0.0 <1.1.0", "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", + "dev": true + }, + "damerau-levenshtein": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz", + "integrity": "sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ=", "dev": true }, "dateformat": { "version": "1.0.2-1.2.3", - "from": "dateformat@1.0.2-1.2.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz" + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz", + "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=" }, "debug": { "version": "0.7.4", - "from": "debug@>=0.7.0 <0.8.0", "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", + "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=", "dev": true }, "decode-uri-component": { "version": "0.2.0", - "from": "decode-uri-component@>=0.2.0 <0.3.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, "deep-eql": { "version": "3.0.1", - "from": "deep-eql@>=3.0.1 <4.0.0", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha1-38lARACtHI/gI+faHfHBR8S0RN8=", + "requires": { + "type-detect": "^4.0.0" + } }, "deep-equal": { "version": "1.0.1", - "from": "deep-equal@*", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", "dev": true }, "deep-extend": { "version": "0.6.0", - "from": "deep-extend@>=0.6.0 <0.7.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw=", "dev": true }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, "define-property": { "version": "2.0.2", - "from": "define-property@>=2.0.2 <3.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, "dependencies": { "is-accessor-descriptor": { "version": "1.0.0", - "from": "is-accessor-descriptor@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "dev": true + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } }, "is-data-descriptor": { "version": "1.0.0", - "from": "is-data-descriptor@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "dev": true + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } }, "is-descriptor": { "version": "1.0.2", - "from": "is-descriptor@>=1.0.2 <2.0.0", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "dev": true + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } } } }, "diff": { "version": "3.5.0", - "from": "diff@>=3.5.0 <4.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz" + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=" }, "director": { "version": "1.2.7", - "from": "director@1.2.7", "resolved": "https://registry.npmjs.org/director/-/director-1.2.7.tgz", + "integrity": "sha1-v9N0EHX9f7GlsuE2WMX0vsd3NvM=", "dev": true }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "dot-prop": { "version": "4.2.0", - "from": "dot-prop@>=4.1.0 <5.0.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "dev": true + "integrity": "sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc=", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } }, "dtrace-provider": { "version": "0.8.7", - "from": "dtrace-provider@>=0.8.0 <0.9.0", "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz", + "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ=", "dev": true, - "optional": true + "optional": true, + "requires": { + "nan": "^2.10.0" + } }, "duplexer3": { "version": "0.1.4", - "from": "duplexer3@>=0.1.4 <0.2.0", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, + "emoji-regex": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", + "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, "escape-string-regexp": { "version": "1.0.5", - "from": "escape-string-regexp@1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, + "eslint": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.10.0.tgz", + "integrity": "sha512-HpqzC+BHULKlnPwWae9MaVZ5AXJKpkxCVXQHrFaRw3hbDj26V/9ArYM4Rr/SQ8pi6qUPLXSSXC4RBJlyq2Z2OQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.5.3", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^2.1.0", + "eslint-scope": "^4.0.0", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.0", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "imurmurhash": "^0.1.4", + "inquirer": "^6.1.0", + "js-yaml": "^3.12.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.5", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.0.2", + "text-table": "^0.2.0" + } + }, + "eslint-config-prettier": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-3.3.0.tgz", + "integrity": "sha512-Bc3bh5bAcKNvs3HOpSi6EfGA2IIp7EzWcg2tS4vP7stnXu/J1opihHDM7jI9JCIckyIDTgZLSWn7J3HY0j2JfA==", + "dev": true, + "requires": { + "get-stdin": "^6.0.0" + } + }, + "eslint-config-standard": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz", + "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==", + "dev": true + }, + "eslint-config-standard-jsx": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-6.0.2.tgz", + "integrity": "sha512-D+YWAoXw+2GIdbMBRAzWwr1ZtvnSf4n4yL0gKGg7ShUOGXkSOLerI17K4F6LdQMJPNMoWYqepzQD/fKY+tXNSg==", + "dev": true + }, + "eslint-config-standard-react": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/eslint-config-standard-react/-/eslint-config-standard-react-7.0.2.tgz", + "integrity": "sha512-Zv/vubIfrwx4IbRXAggRjaswLXKdfFeuGfN365cVTaRmfpAy/7dIxMvJRZkUT99zEx8FOjTXL0KC4psfDjK/+w==", + "dev": true, + "requires": { + "eslint-config-standard-jsx": "^6.0.1" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.5.0" + } + }, + "eslint-module-utils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", + "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", + "dev": true, + "requires": { + "debug": "^2.6.8", + "pkg-dir": "^1.0.0" + } + }, + "eslint-plugin-chai-expect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-chai-expect/-/eslint-plugin-chai-expect-2.0.1.tgz", + "integrity": "sha512-HiFoh9F9grVdVQEIwADwPA7SlcGZcsm9gdzZGDoH2SeUoUmYrUuq1cQmfjyOfqRpFOL6qlhcz5nZW2ppTH9ZlQ==", + "dev": true + }, + "eslint-plugin-chai-friendly": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-chai-friendly/-/eslint-plugin-chai-friendly-0.4.1.tgz", + "integrity": "sha512-hkpLN7VVoGGsofZjUhcQ+sufC3FgqMJwD0DvAcRfxY1tVRyQyVsqpaKnToPHJQOrRo0FQ0fSEDwW2gr4rsNdGA==", + "dev": true + }, + "eslint-plugin-es": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz", + "integrity": "sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw==", + "dev": true, + "requires": { + "eslint-utils": "^1.3.0", + "regexpp": "^2.0.1" + } + }, + "eslint-plugin-import": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", + "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", + "dev": true, + "requires": { + "contains-path": "^0.1.0", + "debug": "^2.6.8", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.1", + "eslint-module-utils": "^2.2.0", + "has": "^1.0.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.3", + "read-pkg-up": "^2.0.0", + "resolve": "^1.6.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "http://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.2.tgz", + "integrity": "sha512-7gSSmwb3A+fQwtw0arguwMdOdzmKUgnUcbSNlo+GjKLAQFuC2EZxWqG9XHRI8VscBJD5a8raz3RuxQNFW+XJbw==", + "dev": true, + "requires": { + "aria-query": "^3.0.0", + "array-includes": "^3.0.3", + "ast-types-flow": "^0.0.7", + "axobject-query": "^2.0.1", + "damerau-levenshtein": "^1.0.4", + "emoji-regex": "^6.5.1", + "has": "^1.0.3", + "jsx-ast-utils": "^2.0.1" + } + }, + "eslint-plugin-mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-5.2.0.tgz", + "integrity": "sha512-4VTX/qIoxUFRnXLNm6bEhEJyfGnGagmQzV4TWXKzkZgIYyP2FSubEdCjEFTyS/dGwSVRWCWGX7jO7BK8R0kppg==", + "dev": true, + "requires": { + "ramda": "^0.25.0" + } + }, + "eslint-plugin-node": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-8.0.0.tgz", + "integrity": "sha512-Y+ln8iQ52scz9+rSPnSWRaAxeWaoJZ4wIveDR0vLHkuSZGe44Vk1J4HX7WvEP5Cm+iXPE8ixo7OM7gAO3/OKpQ==", + "dev": true, + "requires": { + "eslint-plugin-es": "^1.3.1", + "eslint-utils": "^1.3.1", + "ignore": "^5.0.2", + "minimatch": "^3.0.4", + "resolve": "^1.8.1", + "semver": "^5.5.0" + }, + "dependencies": { + "ignore": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.0.4.tgz", + "integrity": "sha512-WLsTMEhsQuXpCiG173+f3aymI43SXa+fB1rSfbzyP4GkPP+ZFVuO0/3sFUGNBtifisPeDcl/uD/Y2NxZ7xFq4g==", + "dev": true + } + } + }, + "eslint-plugin-prettier": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.0.0.tgz", + "integrity": "sha512-4g11opzhqq/8+AMmo5Vc2Gn7z9alZ4JqrbZ+D4i8KlSyxeQhZHlmIrY8U9Akf514MoEhogPa87Jgkq87aZ2Ohw==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-promise": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz", + "integrity": "sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==", + "dev": true + }, + "eslint-plugin-react": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz", + "integrity": "sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.0.1", + "prop-types": "^15.6.2" + } + }, + "eslint-plugin-standard": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz", + "integrity": "sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA==", + "dev": true + }, + "eslint-scope": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", + "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.0.tgz", + "integrity": "sha512-1MpUfwsdS9MMoN7ZXqAr9e9UKdVHDcvrJpyx7mm1WuQlx/ygErEQBzgi5Nh5qBHIoYweprhtMkTCb9GhcAIcsA==", + "dev": true, + "requires": { + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, "esprima": { "version": "1.0.4", - "from": "esprima@>=1.0.2 <1.1.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz" + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=" + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true }, "event-stream": { "version": "0.5.3", - "from": "event-stream@>=0.5.0 <0.6.0", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-0.5.3.tgz", + "integrity": "sha1-t3uTCfcQet3+q2PwwOr9jbC9jBw=", "dev": true, + "requires": { + "optimist": "0.2" + }, "dependencies": { "optimist": { "version": "0.2.8", - "from": "optimist@>=0.2.0 <0.3.0", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.2.8.tgz", - "dev": true + "integrity": "sha1-6YGrfiaLRXlIWTtVZ0wJmoFcrDE=", + "dev": true, + "requires": { + "wordwrap": ">=0.0.1 <0.1.0" + } } } }, "eventemitter2": { "version": "0.4.14", - "from": "eventemitter2@>=0.4.13 <0.5.0", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz" + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=" }, "execa": { "version": "0.7.0", - "from": "execa@>=0.7.0 <0.8.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "dev": true + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } }, "exit": { "version": "0.1.2", - "from": "exit@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" }, "expand-brackets": { "version": "2.1.4", - "from": "expand-brackets@>=2.1.4 <3.0.0", "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": { "debug": { "version": "2.6.9", - "from": "debug@>=2.3.3 <3.0.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "dev": true + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } }, "define-property": { "version": "0.2.5", - "from": "define-property@>=0.2.5 <0.3.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "dev": true + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } }, "extend-shallow": { "version": "2.0.1", - "from": "extend-shallow@>=2.0.1 <3.0.0", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "dev": true + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } } } }, "express": { "version": "3.3.1", - "from": "express@3.3.1", "resolved": "https://registry.npmjs.org/express/-/express-3.3.1.tgz", + "integrity": "sha1-S7efs1SDE9nhpJ/9xao2mpNhJ9c=", + "requires": { + "buffer-crc32": "0.2.1", + "commander": "0.6.1", + "connect": "2.8.1", + "cookie": "0.1.0", + "cookie-signature": "1.0.1", + "debug": "*", + "fresh": "0.1.0", + "methods": "0.0.1", + "mkdirp": "0.3.4", + "range-parser": "0.0.4", + "send": "0.1.1" + }, "dependencies": { "buffer-crc32": { "version": "0.2.1", - "from": "buffer-crc32@0.2.1", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.1.tgz" + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.1.tgz", + "integrity": "sha1-vj5TgvwCttYySVasGvmKqYsIU0w=" }, "commander": { "version": "0.6.1", - "from": "commander@0.6.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz" + "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", + "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=" }, "connect": { "version": "2.8.1", - "from": "connect@2.8.1", "resolved": "https://registry.npmjs.org/connect/-/connect-2.8.1.tgz", + "integrity": "sha1-3nsHXqcM0YqAzLeVpdPje1eVG8U=", + "requires": { + "buffer-crc32": "0.2.1", + "bytes": "0.2.0", + "cookie": "0.0.5", + "cookie-signature": "1.0.1", + "debug": "*", + "formidable": "1.0.14", + "fresh": "0.1.0", + "pause": "0.0.1", + "qs": "0.6.5", + "send": "0.1.1", + "uid2": "0.0.2" + }, "dependencies": { "bytes": { "version": "0.2.0", - "from": "bytes@0.2.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-0.2.0.tgz" + "resolved": "https://registry.npmjs.org/bytes/-/bytes-0.2.0.tgz", + "integrity": "sha1-qtM+wU49wsp06OfUUfm6BTrU96A=" }, "cookie": { "version": "0.0.5", - "from": "cookie@0.0.5", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.0.5.tgz" + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.0.5.tgz", + "integrity": "sha1-+az521frdWjJ/MWWJWt7si4wfIE=" }, "formidable": { "version": "1.0.14", - "from": "formidable@1.0.14", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.14.tgz" + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.14.tgz", + "integrity": "sha1-Kz9MQRy7X91pXESEPiojUUpDIxo=" }, "pause": { "version": "0.0.1", - "from": "pause@0.0.1", - "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz" + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" }, "qs": { "version": "0.6.5", - "from": "qs@0.6.5", - "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.5.tgz" + "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.5.tgz", + "integrity": "sha1-KUsmjksNQlD23eGbO4s0k13/FO8=" }, "uid2": { "version": "0.0.2", - "from": "uid2@0.0.2", - "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.2.tgz" + "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.2.tgz", + "integrity": "sha1-EH+xVcgsETZiB5ftTIjPKwj2qrg=" } } }, "cookie": { "version": "0.1.0", - "from": "cookie@0.1.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.0.tgz" + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.0.tgz", + "integrity": "sha1-kOtGndzpBchm3mh+/EMTHYgB+dA=" }, "cookie-signature": { "version": "1.0.1", - "from": "cookie-signature@1.0.1", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.1.tgz" + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.1.tgz", + "integrity": "sha1-ROByFIrwHm6OJK+/EmkNaK5pjss=" }, "debug": { "version": "3.0.1", - "from": "debug@*", "resolved": "https://registry.npmjs.org/debug/-/debug-3.0.1.tgz", + "integrity": "sha1-BWTGErUh3JLZ8piPBUnjT5yY22Q=", + "requires": { + "ms": "2.0.0" + }, "dependencies": { "ms": { "version": "2.0.0", - "from": "ms@2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, "fresh": { "version": "0.1.0", - "from": "fresh@0.1.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.1.0.tgz" + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.1.0.tgz", + "integrity": "sha1-A+SwF4Qk5MLV0ZpU2IFM3JeTSFA=" }, "methods": { "version": "0.0.1", - "from": "methods@0.0.1", - "resolved": "https://registry.npmjs.org/methods/-/methods-0.0.1.tgz" + "resolved": "https://registry.npmjs.org/methods/-/methods-0.0.1.tgz", + "integrity": "sha1-J3yQ+L7zlwlkWoNxxRw7bGSOBow=" }, "mkdirp": { "version": "0.3.4", - "from": "mkdirp@0.3.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.4.tgz" + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.4.tgz", + "integrity": "sha1-+MgdITtymaAx8ZOlfXUqF9L2x9g=" }, "range-parser": { "version": "0.0.4", - "from": "range-parser@0.0.4", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz" + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz", + "integrity": "sha1-wEJ//vUcEKy6B4KkbJYC50T/Ygs=" }, "send": { "version": "0.1.1", - "from": "send@0.1.1", "resolved": "https://registry.npmjs.org/send/-/send-0.1.1.tgz", + "integrity": "sha1-C8/L0D3vbi2GEuGr+PSJW0UMYMg=", + "requires": { + "debug": "*", + "fresh": "0.1.0", + "mime": "~1.2.9", + "range-parser": "0.0.4" + }, "dependencies": { "mime": { "version": "1.2.11", - "from": "mime@>=1.2.9 <1.3.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz" + "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", + "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=" } } } @@ -720,913 +1516,2062 @@ }, "extend-shallow": { "version": "3.0.2", - "from": "extend-shallow@>=3.0.2 <4.0.0", "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", - "from": "is-extendable@>=1.0.1 <2.0.0", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "dev": true + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } } } }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, "extglob": { "version": "2.0.4", - "from": "extglob@>=2.0.4 <3.0.0", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", "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", - "from": "define-property@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "dev": true + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } }, "extend-shallow": { "version": "2.0.1", - "from": "extend-shallow@>=2.0.1 <3.0.0", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "dev": true + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } }, "is-accessor-descriptor": { "version": "1.0.0", - "from": "is-accessor-descriptor@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "dev": true + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } }, "is-data-descriptor": { "version": "1.0.0", - "from": "is-data-descriptor@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "dev": true + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } }, "is-descriptor": { "version": "1.0.2", - "from": "is-descriptor@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "dev": true + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } } } }, "eyes": { "version": "0.1.8", - "from": "eyes@>=0.1.8 <0.2.0", "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, "faye-websocket": { "version": "0.4.4", - "from": "faye-websocket@>=0.4.3 <0.5.0", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz", + "integrity": "sha1-wUxbO/FNdBf/v9mQwKdJXNnzN7w=", "dev": true }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, "fill-range": { "version": "4.0.0", - "from": "fill-range@>=4.0.0 <5.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", - "from": "extend-shallow@>=2.0.1 <3.0.0", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "dev": true + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.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.1.3", - "from": "findup-sync@>=0.1.2 <0.2.0", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", + "integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=", + "requires": { + "glob": "~3.2.9", + "lodash": "~2.4.1" + }, "dependencies": { "glob": { "version": "3.2.11", - "from": "glob@>=3.2.9 <3.3.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz" + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", + "requires": { + "inherits": "2", + "minimatch": "0.3" + } }, "lodash": { "version": "2.4.2", - "from": "lodash@>=2.4.1 <2.5.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=" }, "minimatch": { "version": "0.3.0", - "from": "minimatch@>=0.3.0 <0.4.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz" + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", + "requires": { + "lru-cache": "2", + "sigmund": "~1.0.0" + } } } }, + "flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "dev": true, + "requires": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + } + }, "flatiron": { "version": "0.4.3", - "from": "flatiron@>=0.4.2 <0.5.0", "resolved": "https://registry.npmjs.org/flatiron/-/flatiron-0.4.3.tgz", + "integrity": "sha1-JIz3mj2n19w3nioRySonGcu1QPY=", "dev": true, + "requires": { + "broadway": "~0.3.2", + "director": "1.2.7", + "optimist": "0.6.0", + "prompt": "0.2.14" + }, "dependencies": { "optimist": { "version": "0.6.0", - "from": "optimist@0.6.0", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.0.tgz", - "dev": true + "integrity": "sha1-aUJIJvNAX3nxQub8PZrljU27kgA=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } } } }, "for-in": { "version": "1.0.2", - "from": "for-in@>=1.0.2 <2.0.0", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, "forever": { "version": "0.14.2", - "from": "forever@>=0.14.1 <0.15.0", "resolved": "https://registry.npmjs.org/forever/-/forever-0.14.2.tgz", - "dev": true + "integrity": "sha1-6Tsr2UxXBavBmxXlTDEz1puinGs=", + "dev": true, + "requires": { + "cliff": "~0.1.9", + "colors": "~0.6.2", + "flatiron": "~0.4.2", + "forever-monitor": "~1.5.1", + "nconf": "~0.6.9", + "nssocket": "~0.5.1", + "optimist": "~0.6.0", + "timespan": "~2.3.0", + "utile": "~0.2.1", + "winston": "~0.8.1" + } }, "forever-monitor": { "version": "1.5.2", - "from": "forever-monitor@>=1.5.1 <1.6.0", "resolved": "https://registry.npmjs.org/forever-monitor/-/forever-monitor-1.5.2.tgz", + "integrity": "sha1-J5OI36k7CFNj1rKKgj7wpq7rNdc=", "dev": true, + "requires": { + "broadway": "~0.3.6", + "minimatch": "~1.0.0", + "ps-tree": "0.0.x", + "utile": "~0.2.1", + "watch": "~0.13.0" + }, "dependencies": { "minimatch": { "version": "1.0.0", - "from": "minimatch@>=1.0.0 <1.1.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz", - "dev": true + "integrity": "sha1-4N0hILSeG3JM6NcUxSCCKpQ4V20=", + "dev": true, + "requires": { + "lru-cache": "2", + "sigmund": "~1.0.0" + } } } }, "fragment-cache": { "version": "0.2.1", - "from": "fragment-cache@>=0.2.1 <0.3.0", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "dev": true + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } }, "fs-extra": { "version": "0.3.2", - "from": "fs-extra@>=0.3.2 <0.4.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.3.2.tgz", + "integrity": "sha1-B0ebBCx9e1zSCwpcHGflW1b3GTs=", "dev": true, + "requires": { + "jsonfile": "0.0.x", + "mkdirp": "0.3.x", + "ncp": "0.2.x", + "rimraf": "~2.0.2" + }, "dependencies": { "graceful-fs": { "version": "1.1.14", - "from": "graceful-fs@>=1.1.0 <1.2.0", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.1.14.tgz", + "integrity": "sha1-BweNtfY3f2Mh/Oqu30l94STclGU=", "dev": true, "optional": true }, "mkdirp": { "version": "0.3.5", - "from": "mkdirp@>=0.3.0 <0.4.0", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=", "dev": true }, "ncp": { "version": "0.2.7", - "from": "ncp@>=0.2.0 <0.3.0", "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.2.7.tgz", + "integrity": "sha1-RvrCt92iVgpMt+YoZ3vV9k6sW+E=", "dev": true }, "rimraf": { "version": "2.0.3", - "from": "rimraf@>=2.0.2 <2.1.0", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.0.3.tgz", - "dev": true + "integrity": "sha1-9QopZecUTpr9mYmC8V33BnMPVqk=", + "dev": true, + "requires": { + "graceful-fs": "~1.1" + } } } }, "fs.realpath": { "version": "1.0.0", - "from": "fs.realpath@>=1.0.0 <2.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 + }, + "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 + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": 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 + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": 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, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "minipass": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "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 + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": 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, + "dev": 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, + "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, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true, + "dev": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, "gaze": { "version": "0.4.3", - "from": "gaze@>=0.4.0 <0.5.0", "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.4.3.tgz", - "dev": true + "integrity": "sha1-5Tj0/15P5kj0c6l+HrslPS3hJ7U=", + "dev": true, + "requires": { + "globule": "~0.1.0" + } }, "get-func-name": { "version": "2.0.0", - "from": "get-func-name@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true }, "get-stream": { "version": "3.0.0", - "from": "get-stream@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, "get-value": { "version": "2.0.6", - "from": "get-value@>=2.0.6 <3.0.0", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, "getobject": { "version": "0.1.0", - "from": "getobject@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz" + "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", + "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=" }, "glob": { "version": "3.1.21", - "from": "glob@>=3.1.21 <3.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", + "requires": { + "graceful-fs": "~1.2.0", + "inherits": "1", + "minimatch": "~0.2.11" + }, "dependencies": { "inherits": { "version": "1.0.2", - "from": "inherits@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=" } } }, "glob-parent": { "version": "3.1.0", - "from": "glob-parent@>=3.1.0 <4.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, "dependencies": { "is-glob": { "version": "3.1.0", - "from": "is-glob@>=3.1.0 <4.0.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "dev": true + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } } } }, "global-dirs": { "version": "0.1.1", - "from": "global-dirs@>=0.1.0 <0.2.0", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, + "globals": { + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz", + "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==", "dev": true }, "globule": { "version": "0.1.0", - "from": "globule@>=0.1.0 <0.2.0", "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", + "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", "dev": true, + "requires": { + "glob": "~3.1.21", + "lodash": "~1.0.1", + "minimatch": "~0.2.11" + }, "dependencies": { "lodash": { "version": "1.0.2", - "from": "lodash@>=1.0.1 <1.1.0", "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", + "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", "dev": true } } }, "got": { "version": "6.7.1", - "from": "got@>=6.7.1 <7.0.0", "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "dev": true + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } }, "graceful-fs": { "version": "1.2.3", - "from": "graceful-fs@>=1.2.0 <1.3.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz" + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=" }, "growl": { "version": "1.7.0", - "from": "growl@>=1.7.0 <1.8.0", "resolved": "https://registry.npmjs.org/growl/-/growl-1.7.0.tgz", + "integrity": "sha1-3i1mE20ALhErpw8/EMMc98NQsto=", "dev": true }, "grunt": { "version": "0.4.5", - "from": "grunt@>=0.4.5 <0.5.0", "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", + "integrity": "sha1-VpN81RlDJK3/bSB2MYMqnWuk5/A=", + "requires": { + "async": "~0.1.22", + "coffee-script": "~1.3.3", + "colors": "~0.6.2", + "dateformat": "1.0.2-1.2.3", + "eventemitter2": "~0.4.13", + "exit": "~0.1.1", + "findup-sync": "~0.1.2", + "getobject": "~0.1.0", + "glob": "~3.1.21", + "grunt-legacy-log": "~0.1.0", + "grunt-legacy-util": "~0.2.0", + "hooker": "~0.2.3", + "iconv-lite": "~0.2.11", + "js-yaml": "~2.0.5", + "lodash": "~0.9.2", + "minimatch": "~0.2.12", + "nopt": "~1.0.10", + "rimraf": "~2.2.8", + "underscore.string": "~2.2.1", + "which": "~1.0.5" + }, "dependencies": { "async": { "version": "0.1.22", - "from": "async@>=0.1.22 <0.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz" + "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz", + "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=" }, "coffee-script": { "version": "1.3.3", - "from": "coffee-script@>=1.3.3 <1.4.0", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz" + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz", + "integrity": "sha1-FQ1rTLUiiUNp7+1qIQHCC8f0pPQ=" } } }, "grunt-bunyan": { "version": "0.5.0", - "from": "grunt-bunyan@>=0.5.0 <0.6.0", "resolved": "https://registry.npmjs.org/grunt-bunyan/-/grunt-bunyan-0.5.0.tgz", + "integrity": "sha1-aCnXbgGZQ9owQTk2MaNuKsgpsWw=", + "requires": { + "lodash": "~2.4.1" + }, "dependencies": { "lodash": { "version": "2.4.2", - "from": "lodash@>=2.4.1 <2.5.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=" } } }, "grunt-concurrent": { "version": "0.4.3", - "from": "grunt-concurrent@>=0.4.2 <0.5.0", "resolved": "https://registry.npmjs.org/grunt-concurrent/-/grunt-concurrent-0.4.3.tgz", - "dev": true + "integrity": "sha1-JFNJAYVZTInYOZ87GENHb2hp5J0=", + "dev": true, + "requires": { + "async": "~0.2.9", + "lpad": "~0.1.0" + } }, "grunt-contrib-clean": { "version": "0.5.0", - "from": "grunt-contrib-clean@>=0.5.0 <0.6.0", "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-0.5.0.tgz", - "dev": true + "integrity": "sha1-9T397ghJsce0Dp67umn0jExgecU=", + "dev": true, + "requires": { + "rimraf": "~2.2.1" + } }, "grunt-contrib-coffee": { "version": "0.7.0", - "from": "grunt-contrib-coffee@>=0.7.0 <0.8.0", "resolved": "https://registry.npmjs.org/grunt-contrib-coffee/-/grunt-contrib-coffee-0.7.0.tgz", + "integrity": "sha1-ixIme3TnM4sfKcW4txj7n4mYLxM=", "dev": true, + "requires": { + "coffee-script": "~1.6.2" + }, "dependencies": { "coffee-script": { "version": "1.6.3", - "from": "coffee-script@>=1.6.2 <1.7.0", "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.6.3.tgz", + "integrity": "sha1-Y1XTLPGwTN/2tITl5xF4Ky8MOb4=", "dev": true } } }, "grunt-contrib-watch": { "version": "0.5.3", - "from": "grunt-contrib-watch@>=0.5.3 <0.6.0", "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.5.3.tgz", - "dev": true + "integrity": "sha1-fZ61Rl1Qb6FPqspH5uh5CoLBye4=", + "dev": true, + "requires": { + "gaze": "~0.4.0", + "tiny-lr": "0.0.4" + } }, "grunt-execute": { "version": "0.2.2", - "from": "grunt-execute@>=0.2.2 <0.3.0", - "resolved": "https://registry.npmjs.org/grunt-execute/-/grunt-execute-0.2.2.tgz" + "resolved": "https://registry.npmjs.org/grunt-execute/-/grunt-execute-0.2.2.tgz", + "integrity": "sha1-TpRf5XlZzA3neZCDtrQq7ZYWNQo=" }, "grunt-forever": { "version": "0.4.7", - "from": "grunt-forever@>=0.4.7 <0.5.0", "resolved": "https://registry.npmjs.org/grunt-forever/-/grunt-forever-0.4.7.tgz", - "dev": true + "integrity": "sha1-dHDb4a2hFFAhZKTCoAOHXfj+EzA=", + "dev": true, + "requires": { + "forever": "^0.14.1" + } }, "grunt-legacy-log": { "version": "0.1.3", - "from": "grunt-legacy-log@>=0.1.0 <0.2.0", "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz", + "integrity": "sha1-7ClCboAwIa9ZAp+H0vnNczWgVTE=", + "requires": { + "colors": "~0.6.2", + "grunt-legacy-log-utils": "~0.1.1", + "hooker": "~0.2.3", + "lodash": "~2.4.1", + "underscore.string": "~2.3.3" + }, "dependencies": { "lodash": { "version": "2.4.2", - "from": "lodash@>=2.4.1 <2.5.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=" }, "underscore.string": { "version": "2.3.3", - "from": "underscore.string@>=2.3.3 <2.4.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz" + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=" } } }, "grunt-legacy-log-utils": { "version": "0.1.1", - "from": "grunt-legacy-log-utils@>=0.1.1 <0.2.0", "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz", + "integrity": "sha1-wHBrndkGThFvNvI/5OawSGcsD34=", + "requires": { + "colors": "~0.6.2", + "lodash": "~2.4.1", + "underscore.string": "~2.3.3" + }, "dependencies": { "lodash": { "version": "2.4.2", - "from": "lodash@>=2.4.1 <2.5.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=" }, "underscore.string": { "version": "2.3.3", - "from": "underscore.string@>=2.3.3 <2.4.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz" + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=" } } }, "grunt-legacy-util": { "version": "0.2.0", - "from": "grunt-legacy-util@>=0.2.0 <0.3.0", "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz", + "integrity": "sha1-kzJIhNv343qf98Am3/RR2UqeVUs=", + "requires": { + "async": "~0.1.22", + "exit": "~0.1.1", + "getobject": "~0.1.0", + "hooker": "~0.2.3", + "lodash": "~0.9.2", + "underscore.string": "~2.2.1", + "which": "~1.0.5" + }, "dependencies": { "async": { "version": "0.1.22", - "from": "async@~0.1.22", - "resolved": "http://registry.npmjs.org/async/-/async-0.1.22.tgz" + "resolved": "http://registry.npmjs.org/async/-/async-0.1.22.tgz", + "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=" } } }, "grunt-mocha-test": { "version": "0.8.2", - "from": "grunt-mocha-test@>=0.8.0 <0.9.0", "resolved": "https://registry.npmjs.org/grunt-mocha-test/-/grunt-mocha-test-0.8.2.tgz", + "integrity": "sha1-emGEuYhg0Phb3qrWvqob199bvus=", "dev": true, + "requires": { + "mocha": "~1.14.0" + }, "dependencies": { "diff": { "version": "1.0.7", - "from": "diff@1.0.7", "resolved": "https://registry.npmjs.org/diff/-/diff-1.0.7.tgz", + "integrity": "sha1-JLuwAcSn1VIhaefKvbLCgU7ZHPQ=", "dev": true }, "glob": { "version": "3.2.3", - "from": "glob@3.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.3.tgz", - "dev": true + "integrity": "sha1-4xPusknHr/qlxHUoaw4RW1mDlGc=", + "dev": true, + "requires": { + "graceful-fs": "~2.0.0", + "inherits": "2", + "minimatch": "~0.2.11" + } }, "graceful-fs": { "version": "2.0.3", - "from": "graceful-fs@>=2.0.0 <2.1.0", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", + "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=", "dev": true }, "mkdirp": { "version": "0.3.5", - "from": "mkdirp@0.3.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=", "dev": true }, "mocha": { "version": "1.14.0", - "from": "mocha@>=1.14.0 <1.15.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-1.14.0.tgz", - "dev": true + "integrity": "sha1-cT223FAAGRqdA1gZXQkIeQ7LYVc=", + "dev": true, + "requires": { + "commander": "2.0.0", + "debug": "*", + "diff": "1.0.7", + "glob": "3.2.3", + "growl": "1.7.x", + "jade": "0.26.3", + "mkdirp": "0.3.5" + } } } }, "grunt-nodemon": { "version": "0.1.2", - "from": "grunt-nodemon@>=0.1.2 <0.2.0", "resolved": "https://registry.npmjs.org/grunt-nodemon/-/grunt-nodemon-0.1.2.tgz", + "integrity": "sha1-/nnu2yOhTrwSDlsuIrI4ny4WpHQ=", "dev": true, + "requires": { + "nodemon": "~0.7.8" + }, "dependencies": { "nodemon": { "version": "0.7.10", - "from": "nodemon@>=0.7.8 <0.8.0", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-0.7.10.tgz", + "integrity": "sha1-aVoBuUWLEVsDu+AWltNhvVC0+5s=", "dev": true } } }, "grunt-notify": { "version": "0.2.20", - "from": "grunt-notify@>=0.2.16 <0.3.0", "resolved": "https://registry.npmjs.org/grunt-notify/-/grunt-notify-0.2.20.tgz", - "dev": true + "integrity": "sha1-b4KP1j9CTICCa6aiXiXZsMzBMa8=", + "dev": true, + "requires": { + "semver": "~2.2.1", + "stack-parser": "~0.0.1", + "which": "~1.0.5" + } }, "grunt-plato": { "version": "0.2.1", - "from": "grunt-plato@>=0.2.1 <0.3.0", "resolved": "https://registry.npmjs.org/grunt-plato/-/grunt-plato-0.2.1.tgz", - "dev": true + "integrity": "sha1-5hS53hnVoW6sKZ0KWZ6IjtpCYaA=", + "dev": true, + "requires": { + "plato": "~0.6.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } }, "has-flag": { "version": "3.0.0", - "from": "has-flag@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true }, "has-value": { "version": "1.0.0", - "from": "has-value@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "dev": true + "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", - "from": "has-values@>=1.0.0 <2.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", - "from": "kind-of@>=4.0.0 <5.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "dev": true + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, "he": { "version": "1.1.1", - "from": "he@1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", "dev": true }, "hooker": { "version": "0.2.3", - "from": "hooker@>=0.2.3 <0.3.0", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz" + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=" + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true }, "i": { "version": "0.3.6", - "from": "i@>=0.3.0 <0.4.0", "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", + "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=", "dev": true }, "iconv-lite": { "version": "0.2.11", - "from": "iconv-lite@>=0.2.11 <0.3.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz" + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz", + "integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=" + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true }, "ignore-by-default": { "version": "1.0.1", - "from": "ignore-by-default@>=1.0.1 <2.0.0", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", "dev": true }, "import-lazy": { "version": "2.1.0", - "from": "import-lazy@>=2.1.0 <3.0.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", "dev": true }, "imurmurhash": { "version": "0.1.4", - "from": "imurmurhash@>=0.1.4 <0.2.0", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, "inflight": { "version": "1.0.6", - "from": "inflight@>=1.0.4 <2.0.0", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "dev": true + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } }, "inherits": { "version": "2.0.3", - "from": "inherits@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { "version": "1.3.5", - "from": "ini@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=", "dev": true }, + "inquirer": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", + "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.0", + "figures": "^2.0.0", + "lodash": "^4.17.10", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.1.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.0.0", + "through": "^2.3.6" + } + }, "is-accessor-descriptor": { "version": "0.1.6", - "from": "is-accessor-descriptor@>=0.1.6 <0.2.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, "dependencies": { "kind-of": { "version": "3.2.2", - "from": "kind-of@>=3.0.2 <4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "dev": true + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, "is-binary-path": { "version": "1.0.1", - "from": "is-binary-path@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "dev": true + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } }, "is-buffer": { "version": "1.1.6", - "from": "is-buffer@>=1.1.5 <2.0.0", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "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=", + "dev": true, + "requires": { + "builtin-modules": "^1.0.0" + } + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "dev": true }, "is-ci": { "version": "1.2.1", - "from": "is-ci@>=1.0.10 <2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "dev": true + "integrity": "sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw=", + "dev": true, + "requires": { + "ci-info": "^1.5.0" + } }, "is-data-descriptor": { "version": "0.1.4", - "from": "is-data-descriptor@>=0.1.4 <0.2.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, "dependencies": { "kind-of": { "version": "3.2.2", - "from": "kind-of@>=3.0.2 <4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "dev": true + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, + "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", - "from": "is-descriptor@>=0.1.0 <0.2.0", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", "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", - "from": "kind-of@>=5.0.0 <6.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", "dev": true } } }, "is-extendable": { "version": "0.1.1", - "from": "is-extendable@>=0.1.0 <0.2.0", "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", - "from": "is-extglob@>=2.1.0 <3.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", - "from": "is-fullwidth-code-point@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, "is-glob": { "version": "4.0.0", - "from": "is-glob@>=4.0.0 <5.0.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "dev": true + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } }, "is-installed-globally": { "version": "0.1.0", - "from": "is-installed-globally@>=0.1.0 <0.2.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "dev": true + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } }, "is-npm": { "version": "1.0.0", - "from": "is-npm@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", "dev": true }, "is-number": { "version": "3.0.0", - "from": "is-number@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, "dependencies": { "kind-of": { "version": "3.2.2", - "from": "kind-of@>=3.0.2 <4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "dev": true + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, "is-obj": { "version": "1.0.1", - "from": "is-obj@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, "is-path-inside": { "version": "1.0.1", - "from": "is-path-inside@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "dev": true + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } }, "is-plain-object": { "version": "2.0.4", - "from": "is-plain-object@>=2.0.3 <3.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "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", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, "is-redirect": { "version": "1.0.0", - "from": "is-redirect@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", "dev": true }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, "is-retry-allowed": { "version": "1.1.0", - "from": "is-retry-allowed@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", "dev": true }, "is-stream": { "version": "1.1.0", - "from": "is-stream@>=1.1.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, "is-windows": { "version": "1.0.2", - "from": "is-windows@>=1.0.2 <2.0.0", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", "dev": true }, "isarray": { "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, "isexe": { "version": "2.0.0", - "from": "isexe@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "isobject": { "version": "3.0.1", - "from": "isobject@>=3.0.1 <4.0.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, "isstream": { "version": "0.1.2", - "from": "isstream@>=0.1.0 <0.2.0", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, "jade": { "version": "0.26.3", - "from": "jade@0.26.3", "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", + "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", "dev": true, + "requires": { + "commander": "0.6.1", + "mkdirp": "0.3.0" + }, "dependencies": { "commander": { "version": "0.6.1", - "from": "commander@0.6.1", "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", + "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", "dev": true }, "mkdirp": { "version": "0.3.0", - "from": "mkdirp@0.3.0", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", + "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", "dev": true } } }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, "js-yaml": { "version": "2.0.5", - "from": "js-yaml@>=2.0.5 <2.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz" + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", + "integrity": "sha1-olrmUJmZ6X3yeMZxnaEb0Gh3Q6g=", + "requires": { + "argparse": "~ 0.1.11", + "esprima": "~ 1.0.2" + } }, "jshint": { "version": "2.1.11", - "from": "jshint@>=2.1.2 <2.2.0", "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.1.11.tgz", + "integrity": "sha1-61EI/vm6Xd67gwmD9XLSQuSeP5Y=", "dev": true, + "requires": { + "cli": "0.4.x", + "console-browserify": "0.1.x", + "minimatch": "0.x.x", + "shelljs": "0.1.x", + "underscore": "1.4.x" + }, "dependencies": { "underscore": { "version": "1.4.4", - "from": "underscore@>=1.4.0 <1.5.0", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", + "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=", "dev": true } } }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, "jsonfile": { "version": "0.0.1", - "from": "jsonfile@>=0.0.0 <0.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-0.0.1.tgz", + "integrity": "sha1-tfn1FRIbKETyy/4UM4tVx5gA4dg=", "dev": true }, + "jsx-ast-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", + "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", + "dev": true, + "requires": { + "array-includes": "^3.0.3" + } + }, "just-extend": { "version": "3.0.0", - "from": "just-extend@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-3.0.0.tgz" + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-3.0.0.tgz", + "integrity": "sha1-zuAEAx6qv2QG2gOnuE5P6deO8og=" }, "keypress": { "version": "0.1.0", - "from": "keypress@>=0.1.0 <0.2.0", "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz", + "integrity": "sha1-SjGI1CkbZrT2XtuZ+AaqmuKTWSo=", "dev": true }, "kind-of": { "version": "6.0.2", - "from": "kind-of@>=6.0.2 <7.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", "dev": true }, "latest-version": { "version": "3.1.0", - "from": "latest-version@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "dev": true + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true, + "requires": { + "package-json": "^4.0.0" + } }, "lazy": { "version": "1.0.11", - "from": "lazy@>=1.0.11 <1.1.0", "resolved": "https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz", + "integrity": "sha1-2qBoIGKCVCwIgojpdcKXwa53tpA=", "dev": true }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "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": "0.9.2", - "from": "lodash@>=0.9.2 <0.10.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz", + "integrity": "sha1-jzSZxSRdNG1oLlsNO0B2fgnxqSw=" }, "lodash.debounce": { "version": "4.0.8", - "from": "lodash.debounce@>=4.0.8 <5.0.0", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, "lodash.get": { "version": "4.4.2", - "from": "lodash.get@>=4.4.2 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz" + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" }, "logger-sharelatex": { - "version": "1.5.6", + "version": "git+https://github.com/sharelatex/logger-sharelatex.git#b2956ec56b582b9f4fc8fdda8dc00c06e77c5537", "from": "git+https://github.com/sharelatex/logger-sharelatex.git#master", - "resolved": "git+https://github.com/sharelatex/logger-sharelatex.git#b2956ec56b582b9f4fc8fdda8dc00c06e77c5537", + "requires": { + "bunyan": "1.5.1", + "chai": "^4.2.0", + "coffee-script": "1.12.4", + "grunt": "^0.4.5", + "grunt-bunyan": "^0.5.0", + "grunt-contrib-clean": "^0.6.0", + "grunt-contrib-coffee": "^0.11.0", + "grunt-execute": "^0.2.2", + "grunt-mocha-test": "^0.11.0", + "raven": "^1.1.3", + "sandboxed-module": "^2.0.3", + "sinon": "^7.1.1", + "timekeeper": "^1.0.0" + }, "dependencies": { "bunyan": { "version": "1.5.1", - "from": "bunyan@1.5.1", "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.5.1.tgz", + "integrity": "sha1-X259RMQ7lS9WsPQTCeOrEjkbTi0=", + "requires": { + "dtrace-provider": "~0.6", + "mv": "~2", + "safe-json-stringify": "~1" + }, "dependencies": { "dtrace-provider": { "version": "0.6.0", - "from": "dtrace-provider@>=0.6.0 <0.7.0", "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.6.0.tgz", + "integrity": "sha1-CweNVReTfYcxAUUtkUZzdVe3XlE=", "optional": true, + "requires": { + "nan": "^2.0.8" + }, "dependencies": { "nan": { "version": "2.7.0", - "from": "nan@>=2.0.8 <3.0.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", + "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=", "optional": true } } }, "mv": { "version": "2.1.1", - "from": "mv@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", "optional": true, + "requires": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, "dependencies": { "mkdirp": { "version": "0.5.1", - "from": "mkdirp@>=0.5.1 <0.6.0", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "optional": true, + "requires": { + "minimist": "0.0.8" + }, "dependencies": { "minimist": { "version": "0.0.8", - "from": "minimist@0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "optional": true } } }, "ncp": { "version": "2.0.0", - "from": "ncp@>=2.0.0 <2.1.0", "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", "optional": true }, "rimraf": { "version": "2.4.5", - "from": "rimraf@>=2.4.0 <2.5.0", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", "optional": true, + "requires": { + "glob": "^6.0.1" + }, "dependencies": { "glob": { "version": "6.0.4", - "from": "glob@>=6.0.1 <7.0.0", "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", "optional": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "dependencies": { "inflight": { "version": "1.0.6", - "from": "inflight@>=1.0.4 <2.0.0", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + }, "dependencies": { "wrappy": { "version": "1.0.2", - "from": "wrappy@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "optional": true } } }, "inherits": { "version": "2.0.3", - "from": "inherits@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "optional": true }, "minimatch": { "version": "3.0.4", - "from": "minimatch@>=2.0.0 <3.0.0||>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + }, "dependencies": { "brace-expansion": { "version": "1.1.8", - "from": "brace-expansion@>=1.1.7 <2.0.0", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + }, "dependencies": { "balanced-match": { "version": "1.0.0", - "from": "balanced-match@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "optional": true }, "concat-map": { "version": "0.0.1", - "from": "concat-map@0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "optional": true } } @@ -1635,20 +3580,23 @@ }, "once": { "version": "1.4.0", - "from": "once@>=1.3.0 <2.0.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + }, "dependencies": { "wrappy": { "version": "1.0.2", - "from": "wrappy@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" } } }, "path-is-absolute": { "version": "1.0.1", - "from": "path-is-absolute@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "optional": true } } @@ -1659,182 +3607,242 @@ }, "safe-json-stringify": { "version": "1.0.4", - "from": "safe-json-stringify@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.0.4.tgz", + "integrity": "sha1-gaCY9Efku8P/MxKiQ1IbwGDvWRE=", "optional": true } } }, "coffee-script": { "version": "1.12.4", - "from": "coffee-script@1.12.4", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.4.tgz" + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.4.tgz", + "integrity": "sha1-/hvO2X/h+zknuZjytFYW4GWL4f8=" }, "grunt-contrib-clean": { "version": "0.6.0", - "from": "grunt-contrib-clean@>=0.6.0 <0.7.0", "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-0.6.0.tgz", + "integrity": "sha1-9TLbpLghJnTHwBPhRr2mY4uQSPY=", + "requires": { + "rimraf": "~2.2.1" + }, "dependencies": { "rimraf": { "version": "2.2.8", - "from": "rimraf@>=2.2.1 <2.3.0", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz" + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=" } } }, "grunt-contrib-coffee": { "version": "0.11.1", - "from": "grunt-contrib-coffee@>=0.11.0 <0.12.0", "resolved": "https://registry.npmjs.org/grunt-contrib-coffee/-/grunt-contrib-coffee-0.11.1.tgz", + "integrity": "sha1-+v48nuikQryNF9WlwZ/I5i2fP0U=", + "requires": { + "chalk": "~0.5.0", + "coffee-script": "~1.7.0", + "lodash": "~2.4.1" + }, "dependencies": { "chalk": { "version": "0.5.1", - "from": "chalk@>=0.5.0 <0.6.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", + "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", + "requires": { + "ansi-styles": "^1.1.0", + "escape-string-regexp": "^1.0.0", + "has-ansi": "^0.1.0", + "strip-ansi": "^0.3.0", + "supports-color": "^0.2.0" + }, "dependencies": { "ansi-styles": { "version": "1.1.0", - "from": "ansi-styles@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz" + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", + "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=" }, "escape-string-regexp": { "version": "1.0.5", - "from": "escape-string-regexp@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "has-ansi": { "version": "0.1.0", - "from": "has-ansi@>=0.1.0 <0.2.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", + "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", + "requires": { + "ansi-regex": "^0.2.0" + }, "dependencies": { "ansi-regex": { "version": "0.2.1", - "from": "ansi-regex@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz" + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", + "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=" } } }, "strip-ansi": { "version": "0.3.0", - "from": "strip-ansi@>=0.3.0 <0.4.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", + "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", + "requires": { + "ansi-regex": "^0.2.1" + }, "dependencies": { "ansi-regex": { "version": "0.2.1", - "from": "ansi-regex@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz" + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", + "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=" } } }, "supports-color": { "version": "0.2.0", - "from": "supports-color@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz" + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", + "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=" } } }, "coffee-script": { "version": "1.7.1", - "from": "coffee-script@>=1.7.0 <1.8.0", "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz", + "integrity": "sha1-YplqhheAx15tUGnROCJyO3NAS/w=", + "requires": { + "mkdirp": "~0.3.5" + }, "dependencies": { "mkdirp": { "version": "0.3.5", - "from": "mkdirp@>=0.3.5 <0.4.0", - "resolved": "https://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=" } } }, "lodash": { "version": "2.4.2", - "from": "lodash@>=2.4.1 <2.5.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=" } } }, "grunt-mocha-test": { "version": "0.11.0", - "from": "grunt-mocha-test@>=0.11.0 <0.12.0", "resolved": "https://registry.npmjs.org/grunt-mocha-test/-/grunt-mocha-test-0.11.0.tgz", + "integrity": "sha1-deQboQdZDkrL0phgklwBLkQ8oyI=", + "requires": { + "fs-extra": "~0.9.1", + "hooker": "~0.2.3", + "mocha": "~1.20.0" + }, "dependencies": { "fs-extra": { "version": "0.9.1", - "from": "fs-extra@>=0.9.1 <0.10.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.9.1.tgz", + "integrity": "sha1-h9v8ATg6jdzn2dVJbzYIVkiJ8VY=", + "requires": { + "jsonfile": "~1.1.0", + "mkdirp": "^0.5.0", + "ncp": "^0.5.1", + "rimraf": "^2.2.8" + }, "dependencies": { "jsonfile": { "version": "1.1.1", - "from": "jsonfile@>=1.1.0 <1.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-1.1.1.tgz" + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-1.1.1.tgz", + "integrity": "sha1-2k/WrXfxolUgPqY8e8Mtwx72RDM=" }, "mkdirp": { "version": "0.5.1", - "from": "mkdirp@>=0.5.0 <0.6.0", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, "dependencies": { "minimist": { "version": "0.0.8", - "from": "minimist@0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" } } }, "ncp": { "version": "0.5.1", - "from": "ncp@>=0.5.1 <0.6.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.5.1.tgz" + "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.5.1.tgz", + "integrity": "sha1-dDmFMW49tFkoG1hxaehFc1oFQ58=" }, "rimraf": { "version": "2.6.1", - "from": "rimraf@>=2.2.8 <3.0.0", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "requires": { + "glob": "^7.0.5" + }, "dependencies": { "glob": { "version": "7.1.2", - "from": "glob@>=7.0.5 <8.0.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", + "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" + }, "dependencies": { "fs.realpath": { "version": "1.0.0", - "from": "fs.realpath@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "inflight": { "version": "1.0.6", - "from": "inflight@>=1.0.4 <2.0.0", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + }, "dependencies": { "wrappy": { "version": "1.0.2", - "from": "wrappy@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" } } }, "inherits": { "version": "2.0.3", - "from": "inherits@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "minimatch": { "version": "3.0.4", - "from": "minimatch@>=3.0.4 <4.0.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "requires": { + "brace-expansion": "^1.1.7" + }, "dependencies": { "brace-expansion": { "version": "1.1.8", - "from": "brace-expansion@>=1.1.7 <2.0.0", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + }, "dependencies": { "balanced-match": { "version": "1.0.0", - "from": "balanced-match@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "concat-map": { "version": "0.0.1", - "from": "concat-map@0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" } } } @@ -1842,20 +3850,23 @@ }, "once": { "version": "1.4.0", - "from": "once@>=1.3.0 <2.0.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + }, "dependencies": { "wrappy": { "version": "1.0.2", - "from": "wrappy@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" } } }, "path-is-absolute": { "version": "1.0.1", - "from": "path-is-absolute@>=1.0.0 <2.0.0", - "resolved": "https://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=" } } } @@ -1865,65 +3876,86 @@ }, "hooker": { "version": "0.2.3", - "from": "hooker@>=0.2.3 <0.3.0", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz" + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=" }, "mocha": { "version": "1.20.1", - "from": "mocha@>=1.20.0 <1.21.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-1.20.1.tgz", + "integrity": "sha1-80ODLZ/gx9l8ZPxwRI9RNt+f7Vs=", + "requires": { + "commander": "2.0.0", + "debug": "*", + "diff": "1.0.7", + "glob": "3.2.3", + "growl": "1.7.x", + "jade": "0.26.3", + "mkdirp": "0.3.5" + }, "dependencies": { "commander": { "version": "2.0.0", - "from": "commander@2.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.0.0.tgz" + "resolved": "https://registry.npmjs.org/commander/-/commander-2.0.0.tgz", + "integrity": "sha1-0bhvkB+LZL2UG96tr5JFMDk76Sg=" }, "debug": { "version": "3.0.1", - "from": "debug@*", "resolved": "https://registry.npmjs.org/debug/-/debug-3.0.1.tgz", + "integrity": "sha1-BWTGErUh3JLZ8piPBUnjT5yY22Q=", + "requires": { + "ms": "2.0.0" + }, "dependencies": { "ms": { "version": "2.0.0", - "from": "ms@2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, "diff": { "version": "1.0.7", - "from": "diff@1.0.7", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.0.7.tgz" + "resolved": "https://registry.npmjs.org/diff/-/diff-1.0.7.tgz", + "integrity": "sha1-JLuwAcSn1VIhaefKvbLCgU7ZHPQ=" }, "glob": { "version": "3.2.3", - "from": "glob@3.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.3.tgz", + "integrity": "sha1-4xPusknHr/qlxHUoaw4RW1mDlGc=", + "requires": { + "graceful-fs": "~2.0.0", + "inherits": "2", + "minimatch": "~0.2.11" + }, "dependencies": { "graceful-fs": { "version": "2.0.3", - "from": "graceful-fs@>=2.0.0 <2.1.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz" + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", + "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=" }, "inherits": { "version": "2.0.3", - "from": "inherits@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "minimatch": { "version": "0.2.14", - "from": "minimatch@>=0.2.11 <0.3.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "requires": { + "lru-cache": "2", + "sigmund": "~1.0.0" + }, "dependencies": { "lru-cache": { "version": "2.7.3", - "from": "lru-cache@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz" + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" }, "sigmund": { "version": "1.0.1", - "from": "sigmund@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz" + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" } } } @@ -1931,30 +3963,34 @@ }, "growl": { "version": "1.7.0", - "from": "growl@>=1.7.0 <1.8.0", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.7.0.tgz" + "resolved": "https://registry.npmjs.org/growl/-/growl-1.7.0.tgz", + "integrity": "sha1-3i1mE20ALhErpw8/EMMc98NQsto=" }, "jade": { "version": "0.26.3", - "from": "jade@0.26.3", "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", + "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", + "requires": { + "commander": "0.6.1", + "mkdirp": "0.3.0" + }, "dependencies": { "commander": { "version": "0.6.1", - "from": "commander@0.6.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz" + "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", + "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=" }, "mkdirp": { "version": "0.3.0", - "from": "mkdirp@0.3.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz" + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", + "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=" } } }, "mkdirp": { "version": "0.3.5", - "from": "mkdirp@0.3.5", - "resolved": "https://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=" } } } @@ -1962,261 +3998,378 @@ }, "raven": { "version": "1.2.1", - "from": "raven@>=1.1.3 <2.0.0", "resolved": "https://registry.npmjs.org/raven/-/raven-1.2.1.tgz", + "integrity": "sha1-lJwTTbAooZC3u/j3kKrlQbfAIL0=", + "requires": { + "cookie": "0.3.1", + "json-stringify-safe": "5.0.1", + "lsmod": "1.0.0", + "stack-trace": "0.0.9", + "uuid": "3.0.0" + }, "dependencies": { "cookie": { "version": "0.3.1", - "from": "cookie@0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz" + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" }, "json-stringify-safe": { "version": "5.0.1", - "from": "json-stringify-safe@5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "lsmod": { "version": "1.0.0", - "from": "lsmod@1.0.0", - "resolved": "https://registry.npmjs.org/lsmod/-/lsmod-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/lsmod/-/lsmod-1.0.0.tgz", + "integrity": "sha1-mgD3bco26yP6BTUK/htYXUKZ5ks=" }, "stack-trace": { "version": "0.0.9", - "from": "stack-trace@0.0.9", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz" + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", + "integrity": "sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU=" }, "uuid": { "version": "3.0.0", - "from": "uuid@3.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.0.tgz" + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.0.tgz", + "integrity": "sha1-Zyj8BFnEUNeWqZwxg3VpvfZy1yg=" } } }, "timekeeper": { "version": "1.0.0", - "from": "timekeeper@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/timekeeper/-/timekeeper-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/timekeeper/-/timekeeper-1.0.0.tgz", + "integrity": "sha1-Lziu4elLEd1m2FgP8aqdzGoroNg=" } } }, "lolex": { "version": "3.0.0", - "from": "lolex@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-3.0.0.tgz" + "resolved": "https://registry.npmjs.org/lolex/-/lolex-3.0.0.tgz", + "integrity": "sha1-8E7hqKoT9g8avXsOj0IT7HLsGT4=" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } }, "lowercase-keys": { "version": "1.0.1", - "from": "lowercase-keys@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha1-b54wtHCE2XGnyCD/FabFFnt0wm8=", "dev": true }, "lpad": { "version": "0.1.0", - "from": "lpad@>=0.1.0 <0.2.0", "resolved": "https://registry.npmjs.org/lpad/-/lpad-0.1.0.tgz", + "integrity": "sha1-5MYMKROTIcWXDeSTtJauDXdM0qc=", "dev": true }, "lru-cache": { "version": "2.7.3", - "from": "lru-cache@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz" + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" }, "make-dir": { "version": "1.3.0", - "from": "make-dir@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "dev": true + "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=", + "dev": true, + "requires": { + "pify": "^3.0.0" + } }, "map-cache": { "version": "0.2.2", - "from": "map-cache@>=0.2.2 <0.3.0", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, "map-visit": { "version": "1.0.0", - "from": "map-visit@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "dev": true + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } }, "metrics-sharelatex": { - "version": "1.7.1", + "version": "git+https://github.com/sharelatex/metrics-sharelatex.git#166961924c599b1f9468f2e17846fa2a9d12372d", "from": "git+https://github.com/sharelatex/metrics-sharelatex.git#v1.7.1", - "resolved": "git+https://github.com/sharelatex/metrics-sharelatex.git#166961924c599b1f9468f2e17846fa2a9d12372d", + "requires": { + "coffee-script": "1.6.0", + "lynx": "~0.1.1", + "underscore": "~1.6.0" + }, "dependencies": { "coffee-script": { "version": "1.6.0", - "from": "coffee-script@1.6.0", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.6.0.tgz" + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.6.0.tgz", + "integrity": "sha1-gIs5bhEPU9AhoZpO8fZb4OjjX6M=" }, "lynx": { "version": "0.1.1", - "from": "lynx@>=0.1.1 <0.2.0", "resolved": "https://registry.npmjs.org/lynx/-/lynx-0.1.1.tgz", + "integrity": "sha1-Mxjc7xaQi4KG6Bisz9sxzXQkj50=", + "requires": { + "mersenne": "~0.0.3", + "statsd-parser": "~0.0.4" + }, "dependencies": { "mersenne": { "version": "0.0.4", - "from": "mersenne@>=0.0.3 <0.1.0", - "resolved": "https://registry.npmjs.org/mersenne/-/mersenne-0.0.4.tgz" + "resolved": "https://registry.npmjs.org/mersenne/-/mersenne-0.0.4.tgz", + "integrity": "sha1-QB/ex+whzbngPNPTAhOY2iGycIU=" }, "statsd-parser": { "version": "0.0.4", - "from": "statsd-parser@>=0.0.4 <0.1.0", - "resolved": "https://registry.npmjs.org/statsd-parser/-/statsd-parser-0.0.4.tgz" + "resolved": "https://registry.npmjs.org/statsd-parser/-/statsd-parser-0.0.4.tgz", + "integrity": "sha1-y9JDlTzELv/VSLXSI4jtaJ7GOb0=" } } }, "underscore": { "version": "1.6.0", - "from": "underscore@>=1.6.0 <1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz" + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=" } } }, "micromatch": { "version": "3.1.10", - "from": "micromatch@>=3.1.4 <4.0.0", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "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" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, "minimatch": { "version": "0.2.14", - "from": "minimatch@>=0.2.12 <0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz" + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "requires": { + "lru-cache": "2", + "sigmund": "~1.0.0" + } }, "minimist": { "version": "0.0.8", - "from": "minimist@0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, "mixin-deep": { "version": "1.3.1", - "from": "mixin-deep@>=1.2.0 <2.0.0", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=", "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, "dependencies": { "is-extendable": { "version": "1.0.1", - "from": "is-extendable@>=1.0.1 <2.0.0", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "dev": true + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } } } }, "mkdirp": { "version": "0.5.1", - "from": "mkdirp@>=0.5.1 <0.6.0", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "dev": true + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } }, "mocha": { "version": "4.1.0", - "from": "mocha@>=4.1.0 <5.0.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", + "integrity": "sha1-fYbPvPNcuCnidUwy4XNV7AUzh5Q=", "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.3.1", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.3", + "he": "1.1.1", + "mkdirp": "0.5.1", + "supports-color": "4.4.0" + }, "dependencies": { "commander": { "version": "2.11.0", - "from": "commander@2.11.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha1-FXFS/R56bI2YpbcVzzdt+SgARWM=", "dev": true }, "debug": { "version": "3.1.0", - "from": "debug@3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "dev": true + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } }, "diff": { "version": "3.3.1", - "from": "diff@3.3.1", "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", + "integrity": "sha1-qoVnpu7QPFMfyJ0/cRzQ5SWd7HU=", "dev": true }, "glob": { "version": "7.1.2", - "from": "glob@7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "dev": true + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", + "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" + } }, "growl": { "version": "1.10.3", - "from": "growl@1.10.3", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha1-GSa6kM8+3+KttJJ/WIC8IsZseQ8=", "dev": true }, "has-flag": { "version": "2.0.0", - "from": "has-flag@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "dev": true }, "minimatch": { "version": "3.0.4", - "from": "minimatch@>=3.0.4 <4.0.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "dev": true + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } }, "supports-color": { "version": "4.4.0", - "from": "supports-color@4.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "dev": true + "integrity": "sha1-iD992rwWUUKyphQn8zUt7RldGj4=", + "dev": true, + "requires": { + "has-flag": "^2.0.0" + } } } }, "moment": { "version": "2.22.2", - "from": "moment@>=2.10.6 <3.0.0", "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", + "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=", "dev": true, "optional": true }, "mongojs": { "version": "2.4.0", - "from": "mongojs@2.4.0", "resolved": "https://registry.npmjs.org/mongojs/-/mongojs-2.4.0.tgz", + "integrity": "sha1-8of7/UV/7fWItakBHmhRPZ3TK/s=", + "requires": { + "each-series": "^1.0.0", + "mongodb": "^2.0.45", + "once": "^1.3.2", + "parse-mongo-url": "^1.1.0", + "readable-stream": "^2.0.2", + "thunky": "^0.1.0", + "to-mongodb-core": "^2.0.0", + "xtend": "^4.0.0" + }, "dependencies": { "each-series": { "version": "1.0.0", - "from": "each-series@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/each-series/-/each-series-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/each-series/-/each-series-1.0.0.tgz", + "integrity": "sha1-+Ibmxm39sl7x/nNWQUbuXLR4r8s=" }, "mongodb": { "version": "2.2.31", - "from": "mongodb@>=2.0.45 <3.0.0", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.31.tgz", + "integrity": "sha1-GUBEXGYeGSF7s7+CRdmFSq71SNs=", + "requires": { + "es6-promise": "3.2.1", + "mongodb-core": "2.1.15", + "readable-stream": "2.2.7" + }, "dependencies": { "es6-promise": { "version": "3.2.1", - "from": "es6-promise@3.2.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz" + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", + "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=" }, "mongodb-core": { "version": "2.1.15", - "from": "mongodb-core@2.1.15", "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.15.tgz", + "integrity": "sha1-hB9TuH//9MdFgYnDXIroJ+EWl2Q=", + "requires": { + "bson": "~1.0.4", + "require_optional": "~1.0.0" + }, "dependencies": { "bson": { "version": "1.0.4", - "from": "bson@>=1.0.4 <1.1.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.4.tgz" + "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.4.tgz", + "integrity": "sha1-k8ENOeqltYQVy8QFLz5T5WKwtyw=" }, "require_optional": { "version": "1.0.1", - "from": "require_optional@>=1.0.0 <1.1.0", "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha1-TPNaQkf2TKPfjC7yCMxJSxyo/C4=", + "requires": { + "resolve-from": "^2.0.0", + "semver": "^5.1.0" + }, "dependencies": { "resolve-from": { "version": "2.0.0", - "from": "resolve-from@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz" + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" }, "semver": { "version": "5.4.1", - "from": "semver@>=5.1.0 <6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz" + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha1-4FnAnYVx8FQII3M0M1BdOi8AsY4=" } } } @@ -2224,50 +4377,62 @@ }, "readable-stream": { "version": "2.2.7", - "from": "readable-stream@2.2.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", + "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=", + "requires": { + "buffer-shims": "~1.0.0", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~1.0.0", + "util-deprecate": "~1.0.1" + }, "dependencies": { "buffer-shims": { "version": "1.0.0", - "from": "buffer-shims@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" }, "core-util-is": { "version": "1.0.2", - "from": "core-util-is@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "inherits": { "version": "2.0.3", - "from": "inherits@>=2.0.1 <2.1.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "isarray": { "version": "1.0.0", - "from": "isarray@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "process-nextick-args": { "version": "1.0.7", - "from": "process-nextick-args@>=1.0.6 <1.1.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz" + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, "string_decoder": { "version": "1.0.3", - "from": "string_decoder@>=1.0.0 <1.1.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "requires": { + "safe-buffer": "~5.1.0" + }, "dependencies": { "safe-buffer": { "version": "5.1.1", - "from": "safe-buffer@>=5.1.0 <5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" } } }, "util-deprecate": { "version": "1.0.2", - "from": "util-deprecate@>=1.0.1 <1.1.0", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" } } } @@ -2275,588 +4440,1041 @@ }, "once": { "version": "1.4.0", - "from": "once@>=1.3.2 <2.0.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + }, "dependencies": { "wrappy": { "version": "1.0.2", - "from": "wrappy@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" } } }, "parse-mongo-url": { "version": "1.1.1", - "from": "parse-mongo-url@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/parse-mongo-url/-/parse-mongo-url-1.1.1.tgz" + "resolved": "https://registry.npmjs.org/parse-mongo-url/-/parse-mongo-url-1.1.1.tgz", + "integrity": "sha1-ZiON9fjnwMjKTNlw1KtqE3PrdbU=" }, "readable-stream": { "version": "2.3.3", - "from": "readable-stream@>=2.0.2 <3.0.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" + }, "dependencies": { "core-util-is": { "version": "1.0.2", - "from": "core-util-is@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "inherits": { "version": "2.0.3", - "from": "inherits@>=2.0.3 <2.1.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "isarray": { "version": "1.0.0", - "from": "isarray@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "process-nextick-args": { "version": "1.0.7", - "from": "process-nextick-args@>=1.0.6 <1.1.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz" + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, "safe-buffer": { "version": "5.1.1", - "from": "safe-buffer@>=5.1.1 <5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" }, "string_decoder": { "version": "1.0.3", - "from": "string_decoder@>=1.0.3 <1.1.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz" + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "requires": { + "safe-buffer": "~5.1.0" + } }, "util-deprecate": { "version": "1.0.2", - "from": "util-deprecate@>=1.0.1 <1.1.0", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" } } }, "thunky": { "version": "0.1.0", - "from": "thunky@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-0.1.0.tgz" + "resolved": "https://registry.npmjs.org/thunky/-/thunky-0.1.0.tgz", + "integrity": "sha1-vzAUaCTituZ7Dy16Ssi+smkIaE4=" }, "to-mongodb-core": { "version": "2.0.0", - "from": "to-mongodb-core@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/to-mongodb-core/-/to-mongodb-core-2.0.0.tgz" + "resolved": "https://registry.npmjs.org/to-mongodb-core/-/to-mongodb-core-2.0.0.tgz", + "integrity": "sha1-NZbsdhOsmtO5ioncua77pWnNJ+s=" }, "xtend": { "version": "4.0.1", - "from": "xtend@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" } } }, "ms": { "version": "2.0.0", - "from": "ms@2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "mute-stream": { "version": "0.0.7", - "from": "mute-stream@>=0.0.4 <0.1.0", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, "mv": { "version": "2.1.1", - "from": "mv@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", "dev": true, "optional": true, + "requires": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, "dependencies": { "glob": { "version": "6.0.4", - "from": "glob@>=6.0.1 <7.0.0", "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", "dev": true, - "optional": true + "optional": 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", - "from": "minimatch@>=2.0.0 <3.0.0||>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "dev": true, - "optional": true + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } }, "rimraf": { "version": "2.4.5", - "from": "rimraf@>=2.4.0 <2.5.0", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", "dev": true, - "optional": true + "optional": true, + "requires": { + "glob": "^6.0.1" + } } } }, "nan": { "version": "2.11.1", - "from": "nan@>=2.10.0 <3.0.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", + "integrity": "sha1-kOIrzLjKV+pM03zIPTgZtS7qZ2Y=", "dev": true, "optional": true }, "nanomatch": { "version": "1.2.13", - "from": "nanomatch@>=1.2.9 <2.0.0", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", + "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" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, "nconf": { "version": "0.6.9", - "from": "nconf@>=0.6.9 <0.7.0", "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.6.9.tgz", + "integrity": "sha1-lXDvFe1vmuays8jV5xtm0xk81mE=", "dev": true, + "requires": { + "async": "0.2.9", + "ini": "1.x.x", + "optimist": "0.6.0" + }, "dependencies": { "optimist": { "version": "0.6.0", - "from": "optimist@0.6.0", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.0.tgz", - "dev": true + "integrity": "sha1-aUJIJvNAX3nxQub8PZrljU27kgA=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } } } }, "ncp": { "version": "2.0.0", - "from": "ncp@>=2.0.0 <2.1.0", "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", "dev": true, "optional": true }, "nise": { "version": "1.4.6", - "from": "nise@>=1.4.6 <2.0.0", "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.6.tgz", + "integrity": "sha512-1GedetLKzmqmgwabuMSqPsT7oumdR77SBpDfNNJhADRIeA3LN/2RVqR4fFqwvzhAqcTef6PPCzQwITE/YQ8S8A==", + "requires": { + "@sinonjs/formatio": "3.0.0", + "just-extend": "^3.0.0", + "lolex": "^2.3.2", + "path-to-regexp": "^1.7.0", + "text-encoding": "^0.6.4" + }, "dependencies": { "lolex": { "version": "2.7.5", - "from": "lolex@>=2.3.2 <3.0.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz" + "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz", + "integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==" } } }, "nodemon": { "version": "1.18.7", - "from": "nodemon@>=1.14.11 <2.0.0", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.7.tgz", + "integrity": "sha512-xuC1V0F5EcEyKQ1VhHYD13owznQbUw29JKvZ8bVH7TmuvVNHvvbp9pLgE4PjTMRJVe0pJ8fGRvwR2nMiosIsPQ==", "dev": true, + "requires": { + "chokidar": "^2.0.4", + "debug": "^3.1.0", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.2", + "semver": "^5.5.0", + "supports-color": "^5.2.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.2", + "update-notifier": "^2.3.0" + }, "dependencies": { "debug": { "version": "3.2.6", - "from": "debug@>=3.1.0 <4.0.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "dev": true + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "dev": true, + "requires": { + "ms": "^2.1.1" + } }, "minimatch": { "version": "3.0.4", - "from": "minimatch@>=3.0.4 <4.0.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "dev": true + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } }, "ms": { "version": "2.1.1", - "from": "ms@>=2.1.1 <3.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", "dev": true }, "semver": { "version": "5.6.0", - "from": "semver@>=5.5.0 <6.0.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha1-fnQlb7qknHWqfHogXMInmcrIAAQ=", "dev": true } } }, "nopt": { "version": "1.0.10", - "from": "nopt@>=1.0.10 <1.1.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "requires": { + "abbrev": "1" + } }, "noptify": { "version": "0.0.3", - "from": "noptify@latest", "resolved": "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz", + "integrity": "sha1-WPZUpz2XU98MUdlobckhBKZ/S7s=", "dev": true, + "requires": { + "nopt": "~2.0.0" + }, "dependencies": { "nopt": { "version": "2.0.0", - "from": "nopt@>=2.0.0 <2.1.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz", - "dev": true + "integrity": "sha1-ynQW8gpeP5w7hhgPlilfo9C1Lg0=", + "dev": true, + "requires": { + "abbrev": "1" + } } } }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, "normalize-path": { "version": "2.1.1", - "from": "normalize-path@>=2.1.1 <3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "dev": true + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } }, "npm-run-path": { "version": "2.0.2", - "from": "npm-run-path@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "dev": true + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } }, "nssocket": { "version": "0.5.3", - "from": "nssocket@>=0.5.1 <0.6.0", "resolved": "https://registry.npmjs.org/nssocket/-/nssocket-0.5.3.tgz", + "integrity": "sha1-iDyi7GBfXtZKTVGQsmJUAZKPj40=", + "dev": true, + "requires": { + "eventemitter2": "~0.4.14", + "lazy": "~1.0.11" + } + }, + "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 }, "object-copy": { "version": "0.1.0", - "from": "object-copy@>=0.1.0 <0.2.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", - "from": "define-property@>=0.2.5 <0.3.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "dev": true + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } }, "kind-of": { "version": "3.2.2", - "from": "kind-of@>=3.0.3 <4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "dev": true + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, + "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 + }, "object-visit": { "version": "1.0.1", - "from": "object-visit@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "dev": true + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } }, "object.pick": { "version": "1.3.0", - "from": "object.pick@>=1.3.0 <2.0.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "dev": true + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } }, "once": { "version": "1.4.0", - "from": "once@>=1.3.0 <2.0.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "dev": true + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } }, "optimist": { "version": "0.6.1", - "from": "optimist@>=0.6.0 <0.7.0", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, "p-finally": { "version": "1.0.0", - "from": "p-finally@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, "package-json": { "version": "4.0.1", - "from": "package-json@>=4.0.0 <5.0.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", "dev": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + }, "dependencies": { "semver": { "version": "5.6.0", - "from": "semver@>=5.1.0 <6.0.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha1-fnQlb7qknHWqfHogXMInmcrIAAQ=", "dev": true } } }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, "pascalcase": { "version": "0.1.1", - "from": "pascalcase@>=0.1.1 <0.2.0", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true }, "path-dirname": { "version": "1.0.2", - "from": "path-dirname@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", "dev": true }, + "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" + } + }, "path-is-absolute": { "version": "1.0.1", - "from": "path-is-absolute@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, "path-is-inside": { "version": "1.0.2", - "from": "path-is-inside@>=1.0.1 <2.0.0", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", "dev": true }, "path-key": { "version": "2.0.1", - "from": "path-key@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "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-to-regexp": { "version": "1.7.0", - "from": "path-to-regexp@>=1.7.0 <2.0.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz" + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "requires": { + "isarray": "0.0.1" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } }, "pathval": { "version": "1.1.0", - "from": "pathval@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz" + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" }, "pify": { "version": "3.0.0", - "from": "pify@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "^1.0.0" + } + }, "pkginfo": { "version": "0.3.1", - "from": "pkginfo@>=0.3.0 <0.4.0", "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", + "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=", "dev": true }, "plato": { "version": "0.6.2", - "from": "plato@>=0.6.0 <0.7.0", "resolved": "https://registry.npmjs.org/plato/-/plato-0.6.2.tgz", + "integrity": "sha1-mdPFU5/Rq4cdcLWMsWyzvamJlvU=", "dev": true, + "requires": { + "complexity-report": "~0.10.3", + "fs-extra": "~0.3.2", + "jshint": "~2.1.2", + "lodash": "~1.0.1", + "posix-getopt": "~1.0.0" + }, "dependencies": { "lodash": { "version": "1.0.2", - "from": "lodash@>=1.0.1 <1.1.0", "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", + "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", "dev": true } } }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, "posix-character-classes": { "version": "0.1.1", - "from": "posix-character-classes@>=0.1.0 <0.2.0", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true }, "posix-getopt": { "version": "1.0.0", - "from": "posix-getopt@>=1.0.0 <1.1.0", "resolved": "https://registry.npmjs.org/posix-getopt/-/posix-getopt-1.0.0.tgz", + "integrity": "sha1-QqkOymEZAUx4vEubcEY9KU2xqoc=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, "prepend-http": { "version": "1.0.4", - "from": "prepend-http@>=1.0.1 <2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, "process-nextick-args": { "version": "2.0.0", - "from": "process-nextick-args@>=2.0.0 <2.1.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, "prompt": { "version": "0.2.14", - "from": "prompt@0.2.14", "resolved": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz", - "dev": true + "integrity": "sha1-V3VPZPVD/XsIRXB8gY7OYY8F/9w=", + "dev": true, + "requires": { + "pkginfo": "0.x.x", + "read": "1.0.x", + "revalidator": "0.1.x", + "utile": "0.2.x", + "winston": "0.8.x" + } + }, + "prop-types": { + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", + "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", + "dev": true, + "requires": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } }, "ps-tree": { "version": "0.0.3", - "from": "ps-tree@>=0.0.0 <0.1.0", "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-0.0.3.tgz", - "dev": true + "integrity": "sha1-2/jXUqf+Ivp9WGNWiUmWEOknbdw=", + "dev": true, + "requires": { + "event-stream": "~0.5" + } }, "pseudomap": { "version": "1.0.2", - "from": "pseudomap@>=1.0.2 <2.0.0", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, "pstree.remy": { "version": "1.1.2", - "from": "pstree.remy@>=1.1.2 <2.0.0", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.2.tgz", + "integrity": "sha512-vL6NLxNHzkNTjGJUpMm5PLC+94/0tTlC1vkP9bdU0pOHih+EujMjgMTwfZopZvHWRFbqJ5Y73OMoau50PewDDA==", + "dev": true + }, + "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 }, "qs": { "version": "0.5.6", - "from": "qs@>=0.5.2 <0.6.0", "resolved": "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz", + "integrity": "sha1-MbGtBYVnZRxSaSFQa5qHk5EaA4Q=", + "dev": true + }, + "ramda": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.25.0.tgz", + "integrity": "sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==", "dev": true }, "rc": { "version": "1.2.8", - "from": "rc@>=1.1.6 <2.0.0", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0=", "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, "dependencies": { "minimist": { "version": "1.2.0", - "from": "minimist@>=1.2.0 <2.0.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } } }, "read": { "version": "1.0.7", - "from": "read@>=1.0.0 <1.1.0", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "dev": true + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "dev": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "dependencies": { + "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" + } + } + } }, "readable-stream": { "version": "2.3.6", - "from": "readable-stream@>=2.0.2 <3.0.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", "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" + }, "dependencies": { "isarray": { "version": "1.0.0", - "from": "isarray@>=1.0.0 <1.1.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true } } }, "readdirp": { "version": "2.2.1", - "from": "readdirp@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, "dependencies": { "graceful-fs": { "version": "4.1.15", - "from": "graceful-fs@>=4.1.11 <5.0.0", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha1-/7cD4QZuig7qpMi4C6klPu77+wA=", "dev": true } } }, "redis": { "version": "0.10.3", - "from": "redis@>=0.10.1 <0.11.0", - "resolved": "https://registry.npmjs.org/redis/-/redis-0.10.3.tgz" + "resolved": "https://registry.npmjs.org/redis/-/redis-0.10.3.tgz", + "integrity": "sha1-iSf+IRDuOWF7zz/Te4nY4SORG7Y=" }, "regex-not": { "version": "1.0.2", - "from": "regex-not@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, "registry-auth-token": { "version": "3.3.2", - "from": "registry-auth-token@>=3.0.1 <4.0.0", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "dev": true + "integrity": "sha1-hR/UkDjuy1hpERFa+EUmDuyYPyA=", + "dev": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } }, "registry-url": { "version": "3.1.0", - "from": "registry-url@>=3.0.3 <4.0.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "dev": true + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "^1.0.1" + } }, "remove-trailing-separator": { "version": "1.1.0", - "from": "remove-trailing-separator@>=1.0.1 <2.0.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", - "from": "repeat-element@>=1.1.2 <2.0.0", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=", "dev": true }, "repeat-string": { "version": "1.6.1", - "from": "repeat-string@>=1.6.1 <2.0.0", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, "request": { "version": "2.81.0", - "from": "request@>=2.79.0 <3.0.0", "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "requires": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" + }, "dependencies": { "aws-sign2": { "version": "0.6.0", - "from": "aws-sign2@>=0.6.0 <0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz" + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" }, "aws4": { "version": "1.6.0", - "from": "aws4@>=1.2.1 <2.0.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz" + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" }, "caseless": { "version": "0.12.0", - "from": "caseless@>=0.12.0 <0.13.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "combined-stream": { "version": "1.0.5", - "from": "combined-stream@>=1.0.5 <1.1.0", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "requires": { + "delayed-stream": "~1.0.0" + }, "dependencies": { "delayed-stream": { "version": "1.0.0", - "from": "delayed-stream@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" } } }, "extend": { "version": "3.0.1", - "from": "extend@>=3.0.0 <3.1.0", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz" + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" }, "forever-agent": { "version": "0.6.1", - "from": "forever-agent@>=0.6.1 <0.7.0", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { "version": "2.1.4", - "from": "form-data@>=2.1.1 <2.2.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + }, "dependencies": { "asynckit": { "version": "0.4.0", - "from": "asynckit@>=0.4.0 <0.5.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" } } }, "har-validator": { "version": "4.2.1", - "from": "har-validator@>=4.2.1 <4.3.0", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "requires": { + "ajv": "^4.9.1", + "har-schema": "^1.0.5" + }, "dependencies": { "ajv": { "version": "4.11.8", - "from": "ajv@>=4.9.1 <5.0.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "requires": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + }, "dependencies": { "co": { "version": "4.6.0", - "from": "co@>=4.6.0 <5.0.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz" + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, "json-stable-stringify": { "version": "1.0.1", - "from": "json-stable-stringify@>=1.0.1 <2.0.0", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "~0.0.0" + }, "dependencies": { "jsonify": { "version": "0.0.0", - "from": "jsonify@>=0.0.0 <0.1.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz" + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" } } } @@ -2864,77 +5482,108 @@ }, "har-schema": { "version": "1.0.5", - "from": "har-schema@>=1.0.5 <2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz" + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" } } }, "hawk": { "version": "3.1.3", - "from": "hawk@>=3.1.3 <3.2.0", "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + }, "dependencies": { "boom": { "version": "2.10.1", - "from": "boom@>=2.0.0 <3.0.0", - "resolved": "https://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=", + "requires": { + "hoek": "2.x.x" + } }, "cryptiles": { "version": "2.0.5", - "from": "cryptiles@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz" + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "requires": { + "boom": "2.x.x" + } }, "hoek": { "version": "2.16.3", - "from": "hoek@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz" + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" }, "sntp": { "version": "1.0.9", - "from": "sntp@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz" + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "requires": { + "hoek": "2.x.x" + } } } }, "http-signature": { "version": "1.1.1", - "from": "http-signature@>=1.1.0 <1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "requires": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, "dependencies": { "assert-plus": { "version": "0.2.0", - "from": "assert-plus@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz" + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" }, "jsprim": { "version": "1.4.1", - "from": "jsprim@>=1.2.2 <2.0.0", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", - "from": "assert-plus@1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "extsprintf": { "version": "1.3.0", - "from": "extsprintf@1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "json-schema": { "version": "0.2.3", - "from": "json-schema@0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz" + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "verror": { "version": "1.10.0", - "from": "verror@1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, "dependencies": { "core-util-is": { "version": "1.0.2", - "from": "core-util-is@1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" } } } @@ -2942,51 +5591,73 @@ }, "sshpk": { "version": "1.13.1", - "from": "sshpk@>=1.7.0 <2.0.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" + }, "dependencies": { "asn1": { "version": "0.2.3", - "from": "asn1@>=0.2.3 <0.3.0", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz" + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" }, "assert-plus": { "version": "1.0.0", - "from": "assert-plus@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "bcrypt-pbkdf": { "version": "1.0.1", - "from": "bcrypt-pbkdf@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "optional": true + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } }, "dashdash": { "version": "1.14.1", - "from": "dashdash@>=1.12.0 <2.0.0", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } }, "ecc-jsbn": { "version": "0.1.1", - "from": "ecc-jsbn@>=0.1.1 <0.2.0", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "optional": true + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "~0.1.0" + } }, "getpass": { "version": "0.1.7", - "from": "getpass@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } }, "jsbn": { "version": "0.1.1", - "from": "jsbn@>=0.1.0 <0.2.0", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "optional": true }, "tweetnacl": { "version": "0.14.5", - "from": "tweetnacl@>=0.14.0 <0.15.0", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "optional": true } } @@ -2995,630 +5666,1021 @@ }, "is-typedarray": { "version": "1.0.0", - "from": "is-typedarray@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "isstream": { "version": "0.1.2", - "from": "isstream@>=0.1.2 <0.2.0", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "json-stringify-safe": { "version": "5.0.1", - "from": "json-stringify-safe@>=5.0.1 <5.1.0", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "mime-types": { "version": "2.1.17", - "from": "mime-types@>=2.1.7 <2.2.0", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "requires": { + "mime-db": "~1.30.0" + }, "dependencies": { "mime-db": { "version": "1.30.0", - "from": "mime-db@>=1.30.0 <1.31.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz" + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" } } }, "oauth-sign": { "version": "0.8.2", - "from": "oauth-sign@>=0.8.1 <0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz" + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" }, "performance-now": { "version": "0.2.0", - "from": "performance-now@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz" + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" }, "qs": { "version": "6.4.0", - "from": "qs@>=6.4.0 <6.5.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz" + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" }, "safe-buffer": { "version": "5.1.1", - "from": "safe-buffer@>=5.0.1 <6.0.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" }, "stringstream": { "version": "0.0.5", - "from": "stringstream@>=0.0.4 <0.1.0", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz" + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" }, "tough-cookie": { "version": "2.3.2", - "from": "tough-cookie@>=2.3.0 <2.4.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "requires": { + "punycode": "^1.4.1" + }, "dependencies": { "punycode": { "version": "1.4.1", - "from": "punycode@>=1.4.1 <2.0.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" } } }, "tunnel-agent": { "version": "0.6.0", - "from": "tunnel-agent@>=0.6.0 <0.7.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } }, "uuid": { "version": "3.1.0", - "from": "uuid@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz" + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha1-PdPT55Crwk17DToDT/q6vijrvAQ=" } } }, "require-like": { "version": "0.1.2", - "from": "require-like@0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz" + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=" + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "http://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + } + }, + "resolve": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true }, "resolve-url": { "version": "0.2.1", - "from": "resolve-url@>=0.2.1 <0.3.0", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, "ret": { "version": "0.1.15", - "from": "ret@>=0.1.10 <0.2.0", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", "dev": true }, "revalidator": { "version": "0.1.8", - "from": "revalidator@>=0.1.0 <0.2.0", "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", + "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=", "dev": true }, "rimraf": { "version": "2.2.8", - "from": "rimraf@>=2.2.8 <2.3.0", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz" + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=" + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } }, "safe-buffer": { "version": "5.1.2", - "from": "safe-buffer@>=5.1.1 <5.2.0", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", "dev": true }, "safe-json-stringify": { "version": "1.2.0", - "from": "safe-json-stringify@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha1-NW5EvJjx+TzkXfFLzXwBzahuCv0=", "dev": true, "optional": true }, "safe-regex": { "version": "1.1.0", - "from": "safe-regex@>=1.1.0 <2.0.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "dev": true + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } }, "sandboxed-module": { "version": "2.0.3", - "from": "sandboxed-module@latest", - "resolved": "https://registry.npmjs.org/sandboxed-module/-/sandboxed-module-2.0.3.tgz" + "resolved": "https://registry.npmjs.org/sandboxed-module/-/sandboxed-module-2.0.3.tgz", + "integrity": "sha1-x+VFkzm7y6KMUwPusz9ug4e/upY=", + "requires": { + "require-like": "0.1.2", + "stack-trace": "0.0.9" + } }, "semver": { "version": "2.2.1", - "from": "semver@>=2.2.1 <2.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-2.2.1.tgz", + "integrity": "sha1-eUEYKz/8xYC/8cF5QqzfeVHA0hM=", "dev": true }, "semver-diff": { "version": "2.1.0", - "from": "semver-diff@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", "dev": true, + "requires": { + "semver": "^5.0.3" + }, "dependencies": { "semver": { "version": "5.6.0", - "from": "semver@>=5.0.3 <6.0.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha1-fnQlb7qknHWqfHogXMInmcrIAAQ=", "dev": true } } }, "set-value": { "version": "2.0.0", - "from": "set-value@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", "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", - "from": "extend-shallow@>=2.0.1 <3.0.0", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "dev": true + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } } } }, "settings-sharelatex": { - "version": "1.0.0", + "version": "git+https://github.com/sharelatex/settings-sharelatex.git#cbc5e41c1dbe6789721a14b3fdae05bf22546559", "from": "git+https://github.com/sharelatex/settings-sharelatex.git#v1.0.0", - "resolved": "git+https://github.com/sharelatex/settings-sharelatex.git#cbc5e41c1dbe6789721a14b3fdae05bf22546559", + "requires": { + "coffee-script": "1.6.0" + }, "dependencies": { "coffee-script": { "version": "1.6.0", - "from": "coffee-script@1.6.0", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.6.0.tgz" + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.6.0.tgz", + "integrity": "sha1-gIs5bhEPU9AhoZpO8fZb4OjjX6M=" } } }, "shebang-command": { "version": "1.2.0", - "from": "shebang-command@>=1.2.0 <2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "dev": true + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } }, "shebang-regex": { "version": "1.0.0", - "from": "shebang-regex@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, "shelljs": { "version": "0.1.4", - "from": "shelljs@>=0.1.0 <0.2.0", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz", + "integrity": "sha1-37vnjVbDwBaNL7eeEOzR28sH7A4=", "dev": true }, "sigmund": { "version": "1.0.1", - "from": "sigmund@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz" + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" }, "signal-exit": { "version": "3.0.2", - "from": "signal-exit@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, "sinon": { "version": "7.1.1", - "from": "sinon@latest", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.1.1.tgz" + "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.1.1.tgz", + "integrity": "sha512-iYagtjLVt1vN3zZY7D8oH7dkjNJEjLjyuzy8daX5+3bbQl8gaohrheB9VfH1O3L6LKuue5WTJvFluHiuZ9y3nQ==", + "requires": { + "@sinonjs/commons": "^1.2.0", + "@sinonjs/formatio": "^3.0.0", + "@sinonjs/samsam": "^2.1.2", + "diff": "^3.5.0", + "lodash.get": "^4.4.2", + "lolex": "^3.0.0", + "nise": "^1.4.6", + "supports-color": "^5.5.0", + "type-detect": "^4.0.8" + } + }, + "slice-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.0.0.tgz", + "integrity": "sha512-4j2WTWjp3GsZ+AOagyzVbzp4vWGtZ0hEZ/gDY/uTvm6MTxUfTUIsnMIFb1bn8o0RuXiqUw15H1bue8f22Vw2oQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } }, "snapdragon": { "version": "0.8.2", - "from": "snapdragon@>=0.8.1 <0.9.0", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", "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": { "debug": { "version": "2.6.9", - "from": "debug@>=2.2.0 <3.0.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "dev": true + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } }, "define-property": { "version": "0.2.5", - "from": "define-property@>=0.2.5 <0.3.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "dev": true + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } }, "extend-shallow": { "version": "2.0.1", - "from": "extend-shallow@>=2.0.1 <3.0.0", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "dev": true + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } } } }, "snapdragon-node": { "version": "2.1.1", - "from": "snapdragon-node@>=2.0.1 <3.0.0", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, "dependencies": { "define-property": { "version": "1.0.0", - "from": "define-property@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "dev": true + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } }, "is-accessor-descriptor": { "version": "1.0.0", - "from": "is-accessor-descriptor@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "dev": true + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } }, "is-data-descriptor": { "version": "1.0.0", - "from": "is-data-descriptor@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "dev": true + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } }, "is-descriptor": { "version": "1.0.2", - "from": "is-descriptor@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "dev": true + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } } } }, "snapdragon-util": { "version": "3.0.1", - "from": "snapdragon-util@>=3.0.1 <4.0.0", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, "dependencies": { "kind-of": { "version": "3.2.2", - "from": "kind-of@>=3.2.0 <4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "dev": true + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, "source-map": { "version": "0.5.7", - "from": "source-map@>=0.5.6 <0.6.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, "source-map-resolve": { "version": "0.5.2", - "from": "source-map-resolve@>=0.5.0 <0.6.0", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "dev": true + "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=", + "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-url": { "version": "0.4.0", - "from": "source-map-url@>=0.4.0 <0.5.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.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", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "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==", "dev": true }, "split-string": { "version": "3.1.0", - "from": "split-string@>=3.0.2 <4.0.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "dev": true + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } }, "stack-parser": { "version": "0.0.1", - "from": "stack-parser@>=0.0.1 <0.1.0", "resolved": "https://registry.npmjs.org/stack-parser/-/stack-parser-0.0.1.tgz", + "integrity": "sha1-fTtjoXiH6eLCv1Xb0zGP40o50ec=", "dev": true }, "stack-trace": { "version": "0.0.9", - "from": "stack-trace@0.0.9", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz" + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", + "integrity": "sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU=" }, "static-extend": { "version": "0.1.2", - "from": "static-extend@>=0.1.1 <0.2.0", "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", - "from": "define-property@>=0.2.5 <0.3.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "dev": true + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } } } }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, "string_decoder": { "version": "1.1.1", - "from": "string_decoder@>=1.1.1 <1.2.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "from": "string-width@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "dev": true + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } }, "strip-ansi": { "version": "4.0.0", - "from": "strip-ansi@>=4.0.0 <5.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" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, "strip-eof": { "version": "1.0.0", - "from": "strip-eof@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, "strip-json-comments": { "version": "2.0.1", - "from": "strip-json-comments@>=2.0.1 <2.1.0", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true }, "supports-color": { "version": "5.5.0", - "from": "supports-color@>=5.5.0 <6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/table/-/table-5.1.1.tgz", + "integrity": "sha512-NUjapYb/qd4PeFW03HnAuOJ7OMcBkJlqeClWxeNlQ0lXGSb52oZXGzkO0/I0ARegQ2eUT1g2VDJH0eUxDRcHmw==", + "dev": true, + "requires": { + "ajv": "^6.6.1", + "lodash": "^4.17.11", + "slice-ansi": "2.0.0", + "string-width": "^2.1.1" + } }, "term-size": { "version": "1.2.0", - "from": "term-size@>=1.2.0 <2.0.0", "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "dev": true + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "^0.7.0" + } }, "text-encoding": { "version": "0.6.4", - "from": "text-encoding@>=0.6.4 <0.7.0", - "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz" + "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", + "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=" + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true }, "timed-out": { "version": "4.0.1", - "from": "timed-out@>=4.0.0 <5.0.0", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", "dev": true }, "timekeeper": { "version": "2.1.2", - "from": "timekeeper@latest", - "resolved": "https://registry.npmjs.org/timekeeper/-/timekeeper-2.1.2.tgz" + "resolved": "https://registry.npmjs.org/timekeeper/-/timekeeper-2.1.2.tgz", + "integrity": "sha512-fc1DDqbiyz5vxRO4xkiATwfWUw1FV7W20+FJYal1SnoIYgNuB4WNxYLtbG3zjUBwOSk3P4u1TgBAZYG/aqBWMw==" }, "timespan": { "version": "2.3.0", - "from": "timespan@>=2.3.0 <2.4.0", "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz", + "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk=", "dev": true }, "tiny-lr": { "version": "0.0.4", - "from": "tiny-lr@0.0.4", "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.0.4.tgz", - "dev": true + "integrity": "sha1-gGGFR/Y/aX0Fy0DEwsSwg1Ia77Y=", + "dev": true, + "requires": { + "debug": "~0.7.0", + "faye-websocket": "~0.4.3", + "noptify": "^0.0.3", + "qs": "~0.5.2" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } }, "to-object-path": { "version": "0.3.0", - "from": "to-object-path@>=0.3.0 <0.4.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" + }, "dependencies": { "kind-of": { "version": "3.2.2", - "from": "kind-of@>=3.0.2 <4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "dev": true + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, "to-regex": { "version": "3.0.2", - "from": "to-regex@>=3.0.2 <4.0.0", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "dev": true + "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", + "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", - "from": "to-regex-range@>=2.1.0 <3.0.0", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "dev": true + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } }, "touch": { "version": "3.1.0", - "from": "touch@>=3.1.0 <4.0.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha1-/jZfX3XsntTlaCXgu3bSSrdK+Ds=", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", "dev": true }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, "type-detect": { "version": "4.0.8", - "from": "type-detect@>=4.0.5 <5.0.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw=" }, "undefsafe": { "version": "2.0.2", - "from": "undefsafe@>=2.0.2 <3.0.0", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", + "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", "dev": true, + "requires": { + "debug": "^2.2.0" + }, "dependencies": { "debug": { "version": "2.6.9", - "from": "debug@>=2.2.0 <3.0.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "dev": true + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } } } }, "underscore": { "version": "1.7.0", - "from": "underscore@>=1.7.0 <1.8.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz" + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" }, "underscore.string": { "version": "2.2.1", - "from": "underscore.string@>=2.2.1 <2.3.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz" + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz", + "integrity": "sha1-18D6KvXVoaZ/QlPa7pgTLnM/Dxk=" }, "union-value": { "version": "1.0.0", - "from": "union-value@>=1.0.0 <2.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", - "from": "extend-shallow@>=2.0.1 <3.0.0", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "dev": true + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } }, "set-value": { "version": "0.4.3", - "from": "set-value@>=0.4.3 <0.5.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "dev": true + "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" + } } } }, "unique-string": { "version": "1.0.0", - "from": "unique-string@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "dev": true + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "^1.0.0" + } }, "unset-value": { "version": "1.0.0", - "from": "unset-value@>=1.0.0 <2.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", - "from": "has-value@>=0.3.1 <0.4.0", "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", - "from": "isobject@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "dev": true + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } } } }, "has-values": { "version": "0.1.4", - "from": "has-values@>=0.1.4 <0.2.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true }, "isarray": { "version": "1.0.0", - "from": "isarray@1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true } } }, "unzip-response": { "version": "2.0.1", - "from": "unzip-response@>=2.0.1 <3.0.0", "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", "dev": true }, "upath": { "version": "1.1.0", - "from": "upath@>=1.0.5 <2.0.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha1-NSVll+RqWB20eT0M5H+prr/J+r0=", "dev": true }, "update-notifier": { "version": "2.5.0", - "from": "update-notifier@>=2.3.0 <3.0.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "dev": true + "integrity": "sha1-0HRFk+E/Fh5AassdlAi3LK0Ir/Y=", + "dev": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } }, "urix": { "version": "0.1.0", - "from": "urix@>=0.1.0 <0.2.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, "url-parse-lax": { "version": "1.0.0", - "from": "url-parse-lax@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "dev": true + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } }, "use": { "version": "3.1.1", - "from": "use@>=3.1.0 <4.0.0", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=", "dev": true }, "util-deprecate": { "version": "1.0.2", - "from": "util-deprecate@>=1.0.1 <1.1.0", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, "utile": { "version": "0.2.1", - "from": "utile@>=0.2.1 <0.3.0", "resolved": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz", + "integrity": "sha1-kwyI6ZCY1iIINMNWy9mncFItkNc=", "dev": true, + "requires": { + "async": "~0.2.9", + "deep-equal": "*", + "i": "0.3.x", + "mkdirp": "0.x.x", + "ncp": "0.4.x", + "rimraf": "2.x.x" + }, "dependencies": { "ncp": { "version": "0.4.2", - "from": "ncp@>=0.4.0 <0.5.0", "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", + "integrity": "sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ=", "dev": true } } }, "v8-profiler": { "version": "5.7.0", - "from": "v8-profiler@>=5.6.5 <6.0.0", "resolved": "https://registry.npmjs.org/v8-profiler/-/v8-profiler-5.7.0.tgz", + "integrity": "sha1-6DgcvrtbX9DKjSsJ9qAYGhWNs00=", + "requires": { + "nan": "^2.5.1", + "node-pre-gyp": "^0.6.34" + }, "dependencies": { "nan": { "version": "2.7.0", - "from": "nan@>=2.5.1 <3.0.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz" + "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", + "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=" }, "node-pre-gyp": { "version": "0.6.37", - "from": "node-pre-gyp@>=0.6.34 <0.7.0", "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.37.tgz", + "integrity": "sha1-PIcrI2suJm5BQFeP4e6I9pMyOgU=", + "requires": { + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "request": "^2.81.0", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tape": "^4.6.3", + "tar": "^2.2.1", + "tar-pack": "^3.4.0" + }, "dependencies": { "mkdirp": { "version": "0.5.1", - "from": "mkdirp@>=0.5.1 <0.6.0", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, "dependencies": { "minimist": { "version": "0.0.8", - "from": "minimist@0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" } } }, "nopt": { "version": "4.0.1", - "from": "nopt@>=4.0.1 <5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + }, "dependencies": { "abbrev": { "version": "1.1.0", - "from": "abbrev@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz" + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", + "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=" }, "osenv": { "version": "0.1.4", - "from": "osenv@>=0.1.4 <0.2.0", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + }, "dependencies": { "os-homedir": { "version": "1.0.2", - "from": "os-homedir@>=1.0.0 <2.0.0", - "resolved": "https://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=" }, "os-tmpdir": { "version": "1.0.2", - "from": "os-tmpdir@>=1.0.0 <2.0.0", - "resolved": "https://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=" } } } @@ -3626,58 +6688,80 @@ }, "npmlog": { "version": "4.1.2", - "from": "npmlog@>=4.0.2 <5.0.0", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + }, "dependencies": { "are-we-there-yet": { "version": "1.1.4", - "from": "are-we-there-yet@>=1.1.2 <1.2.0", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, "dependencies": { "delegates": { "version": "1.0.0", - "from": "delegates@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, "readable-stream": { "version": "2.3.3", - "from": "readable-stream@>=2.0.6 <3.0.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" + }, "dependencies": { "core-util-is": { "version": "1.0.2", - "from": "core-util-is@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "inherits": { "version": "2.0.3", - "from": "inherits@>=2.0.3 <2.1.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "isarray": { "version": "1.0.0", - "from": "isarray@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "process-nextick-args": { "version": "1.0.7", - "from": "process-nextick-args@>=1.0.6 <1.1.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz" + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, "safe-buffer": { "version": "5.1.1", - "from": "safe-buffer@>=5.1.1 <5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" }, "string_decoder": { "version": "1.0.3", - "from": "string_decoder@>=1.0.3 <1.1.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz" + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "requires": { + "safe-buffer": "~5.1.0" + } }, "util-deprecate": { "version": "1.0.2", - "from": "util-deprecate@>=1.0.1 <1.1.0", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" } } } @@ -3685,53 +6769,71 @@ }, "console-control-strings": { "version": "1.1.0", - "from": "console-control-strings@>=1.1.0 <1.2.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "gauge": { "version": "2.7.4", - "from": "gauge@>=2.7.3 <2.8.0", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "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" + }, "dependencies": { "aproba": { "version": "1.1.2", - "from": "aproba@>=1.0.3 <2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz" + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz", + "integrity": "sha1-RcZikJTeTpb2k+9+q3SuB5wkD8E=" }, "has-unicode": { "version": "2.0.1", - "from": "has-unicode@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, "object-assign": { "version": "4.1.1", - "from": "object-assign@>=4.1.0 <5.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "signal-exit": { "version": "3.0.2", - "from": "signal-exit@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz" + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "string-width": { "version": "1.0.2", - "from": "string-width@>=1.0.1 <2.0.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, "dependencies": { "code-point-at": { "version": "1.1.0", - "from": "code-point-at@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "is-fullwidth-code-point": { "version": "1.0.0", - "from": "is-fullwidth-code-point@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + }, "dependencies": { "number-is-nan": { "version": "1.0.1", - "from": "number-is-nan@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" } } } @@ -3739,108 +6841,142 @@ }, "strip-ansi": { "version": "3.0.1", - "from": "strip-ansi@>=3.0.1 <4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + }, "dependencies": { "ansi-regex": { "version": "2.1.1", - "from": "ansi-regex@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" } } }, "wide-align": { "version": "1.1.2", - "from": "wide-align@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz" + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha1-Vx4PGwYEY268DfwhsDObvjE0FxA=", + "requires": { + "string-width": "^1.0.2" + } } } }, "set-blocking": { "version": "2.0.0", - "from": "set-blocking@>=2.0.0 <2.1.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" } } }, "rc": { "version": "1.2.1", - "from": "rc@>=1.1.7 <2.0.0", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", + "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", + "requires": { + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, "dependencies": { "deep-extend": { "version": "0.4.2", - "from": "deep-extend@>=0.4.0 <0.5.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz" + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" }, "ini": { "version": "1.3.4", - "from": "ini@>=1.3.0 <1.4.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz" + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=" }, "minimist": { "version": "1.2.0", - "from": "minimist@>=1.2.0 <2.0.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "strip-json-comments": { "version": "2.0.1", - "from": "strip-json-comments@>=2.0.1 <2.1.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" } } }, "rimraf": { "version": "2.6.1", - "from": "rimraf@>=2.6.1 <3.0.0", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "requires": { + "glob": "^7.0.5" + }, "dependencies": { "glob": { "version": "7.1.2", - "from": "glob@>=7.0.5 <8.0.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", + "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" + }, "dependencies": { "fs.realpath": { "version": "1.0.0", - "from": "fs.realpath@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "inflight": { "version": "1.0.6", - "from": "inflight@>=1.0.4 <2.0.0", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + }, "dependencies": { "wrappy": { "version": "1.0.2", - "from": "wrappy@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" } } }, "inherits": { "version": "2.0.3", - "from": "inherits@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "minimatch": { "version": "3.0.4", - "from": "minimatch@>=3.0.4 <4.0.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "requires": { + "brace-expansion": "^1.1.7" + }, "dependencies": { "brace-expansion": { "version": "1.1.8", - "from": "brace-expansion@>=1.1.7 <2.0.0", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + }, "dependencies": { "balanced-match": { "version": "1.0.0", - "from": "balanced-match@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "concat-map": { "version": "0.0.1", - "from": "concat-map@0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" } } } @@ -3848,20 +6984,23 @@ }, "once": { "version": "1.4.0", - "from": "once@>=1.3.0 <2.0.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + }, "dependencies": { "wrappy": { "version": "1.0.2", - "from": "wrappy@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" } } }, "path-is-absolute": { "version": "1.0.1", - "from": "path-is-absolute@>=1.0.0 <2.0.0", - "resolved": "https://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=" } } } @@ -3869,82 +7008,119 @@ }, "semver": { "version": "5.4.1", - "from": "semver@>=5.3.0 <6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz" + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha1-4FnAnYVx8FQII3M0M1BdOi8AsY4=" }, "tape": { "version": "4.8.0", - "from": "tape@>=4.6.3 <5.0.0", "resolved": "https://registry.npmjs.org/tape/-/tape-4.8.0.tgz", + "integrity": "sha1-9qn+xBzFCh3lD6M2A6tYCZH2Bo4=", + "requires": { + "deep-equal": "~1.0.1", + "defined": "~1.0.0", + "for-each": "~0.3.2", + "function-bind": "~1.1.0", + "glob": "~7.1.2", + "has": "~1.0.1", + "inherits": "~2.0.3", + "minimist": "~1.2.0", + "object-inspect": "~1.3.0", + "resolve": "~1.4.0", + "resumer": "~0.0.0", + "string.prototype.trim": "~1.1.2", + "through": "~2.3.8" + }, "dependencies": { "deep-equal": { "version": "1.0.1", - "from": "deep-equal@>=1.0.1 <1.1.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz" + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" }, "defined": { "version": "1.0.0", - "from": "defined@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" }, "for-each": { "version": "0.3.2", - "from": "for-each@>=0.3.2 <0.4.0", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.2.tgz", + "integrity": "sha1-LEBFC5NI6X8oEyJZO6lnBLmr1NQ=", + "requires": { + "is-function": "~1.0.0" + }, "dependencies": { "is-function": { "version": "1.0.1", - "from": "is-function@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz" + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", + "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" } } }, "function-bind": { "version": "1.1.1", - "from": "function-bind@>=1.1.0 <1.2.0", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" }, "glob": { "version": "7.1.2", - "from": "glob@>=7.1.2 <7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", + "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" + }, "dependencies": { "fs.realpath": { "version": "1.0.0", - "from": "fs.realpath@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "inflight": { "version": "1.0.6", - "from": "inflight@>=1.0.4 <2.0.0", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + }, "dependencies": { "wrappy": { "version": "1.0.2", - "from": "wrappy@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" } } }, "minimatch": { "version": "3.0.4", - "from": "minimatch@>=3.0.4 <4.0.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "requires": { + "brace-expansion": "^1.1.7" + }, "dependencies": { "brace-expansion": { "version": "1.1.8", - "from": "brace-expansion@>=1.1.7 <2.0.0", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + }, "dependencies": { "balanced-match": { "version": "1.0.0", - "from": "balanced-match@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "concat-map": { "version": "0.0.1", - "from": "concat-map@0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" } } } @@ -3952,113 +7128,149 @@ }, "once": { "version": "1.4.0", - "from": "once@>=1.3.0 <2.0.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + }, "dependencies": { "wrappy": { "version": "1.0.2", - "from": "wrappy@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" } } }, "path-is-absolute": { "version": "1.0.1", - "from": "path-is-absolute@>=1.0.0 <2.0.0", - "resolved": "https://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=" } } }, "has": { "version": "1.0.1", - "from": "has@>=1.0.1 <1.1.0", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz" + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "requires": { + "function-bind": "^1.0.2" + } }, "inherits": { "version": "2.0.3", - "from": "inherits@>=2.0.3 <2.1.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "minimist": { "version": "1.2.0", - "from": "minimist@>=1.2.0 <1.3.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "object-inspect": { "version": "1.3.0", - "from": "object-inspect@>=1.3.0 <1.4.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.3.0.tgz" + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.3.0.tgz", + "integrity": "sha1-Wx645nQuLugzQqY3A02ESSi6L20=" }, "resolve": { "version": "1.4.0", - "from": "resolve@>=1.4.0 <1.5.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", + "integrity": "sha1-p1vgHFPaJdk0qY69DkxKcxL5KoY=", + "requires": { + "path-parse": "^1.0.5" + }, "dependencies": { "path-parse": { "version": "1.0.5", - "from": "path-parse@>=1.0.5 <2.0.0", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz" + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" } } }, "resumer": { "version": "0.0.0", - "from": "resumer@>=0.0.0 <0.1.0", - "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz" + "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", + "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", + "requires": { + "through": "~2.3.4" + } }, "string.prototype.trim": { "version": "1.1.2", - "from": "string.prototype.trim@>=1.1.2 <1.2.0", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", + "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.0", + "function-bind": "^1.0.2" + }, "dependencies": { "define-properties": { "version": "1.1.2", - "from": "define-properties@>=1.1.2 <2.0.0", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "requires": { + "foreach": "^2.0.5", + "object-keys": "^1.0.8" + }, "dependencies": { "foreach": { "version": "2.0.5", - "from": "foreach@>=2.0.5 <3.0.0", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz" + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" }, "object-keys": { "version": "1.0.11", - "from": "object-keys@>=1.0.8 <2.0.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz" + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=" } } }, "es-abstract": { "version": "1.8.2", - "from": "es-abstract@>=1.5.0 <2.0.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.8.2.tgz", + "integrity": "sha1-JRAyY9xN7L2mDgxzfKMjE1GAJ+4=", + "requires": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" + }, "dependencies": { "es-to-primitive": { "version": "1.1.1", - "from": "es-to-primitive@>=1.1.1 <2.0.0", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "requires": { + "is-callable": "^1.1.1", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.1" + }, "dependencies": { "is-date-object": { "version": "1.0.1", - "from": "is-date-object@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz" + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" }, "is-symbol": { "version": "1.0.1", - "from": "is-symbol@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz" + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=" } } }, "is-callable": { "version": "1.1.3", - "from": "is-callable@>=1.1.3 <2.0.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz" + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", + "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=" }, "is-regex": { "version": "1.0.4", - "from": "is-regex@>=1.0.4 <2.0.0", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz" + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "requires": { + "has": "^1.0.1" + } } } } @@ -4066,103 +7278,148 @@ }, "through": { "version": "2.3.8", - "from": "through@>=2.3.8 <2.4.0", - "resolved": "https://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=" } } }, "tar": { "version": "2.2.1", - "from": "tar@>=2.2.1 <3.0.0", "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "requires": { + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" + }, "dependencies": { "block-stream": { "version": "0.0.9", - "from": "block-stream@*", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz" + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "requires": { + "inherits": "~2.0.0" + } }, "fstream": { "version": "1.0.11", - "from": "fstream@>=1.0.2 <2.0.0", "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, "dependencies": { "graceful-fs": { "version": "4.1.11", - "from": "graceful-fs@>=4.1.2 <5.0.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz" + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" } } }, "inherits": { "version": "2.0.3", - "from": "inherits@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" } } }, "tar-pack": { "version": "3.4.0", - "from": "tar-pack@>=3.4.0 <4.0.0", "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz", + "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=", + "requires": { + "debug": "^2.2.0", + "fstream": "^1.0.10", + "fstream-ignore": "^1.0.5", + "once": "^1.3.3", + "readable-stream": "^2.1.4", + "rimraf": "^2.5.1", + "tar": "^2.2.1", + "uid-number": "^0.0.6" + }, "dependencies": { "debug": { "version": "2.6.8", - "from": "debug@>=2.2.0 <3.0.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "requires": { + "ms": "2.0.0" + }, "dependencies": { "ms": { "version": "2.0.0", - "from": "ms@2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, "fstream": { "version": "1.0.11", - "from": "fstream@>=1.0.10 <2.0.0", "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, "dependencies": { "graceful-fs": { "version": "4.1.11", - "from": "graceful-fs@>=4.1.2 <5.0.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz" + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" }, "inherits": { "version": "2.0.3", - "from": "inherits@>=2.0.3 <2.1.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" } } }, "fstream-ignore": { "version": "1.0.5", - "from": "fstream-ignore@>=1.0.5 <2.0.0", "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", + "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", + "requires": { + "fstream": "^1.0.0", + "inherits": "2", + "minimatch": "^3.0.0" + }, "dependencies": { "inherits": { "version": "2.0.3", - "from": "inherits@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "minimatch": { "version": "3.0.4", - "from": "minimatch@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "requires": { + "brace-expansion": "^1.1.7" + }, "dependencies": { "brace-expansion": { "version": "1.1.8", - "from": "brace-expansion@>=1.1.7 <2.0.0", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + }, "dependencies": { "balanced-match": { "version": "1.0.0", - "from": "balanced-match@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "concat-map": { "version": "0.0.1", - "from": "concat-map@0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" } } } @@ -4172,62 +7429,77 @@ }, "once": { "version": "1.4.0", - "from": "once@>=1.3.3 <2.0.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + }, "dependencies": { "wrappy": { "version": "1.0.2", - "from": "wrappy@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" } } }, "readable-stream": { "version": "2.3.3", - "from": "readable-stream@>=2.1.4 <3.0.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" + }, "dependencies": { "core-util-is": { "version": "1.0.2", - "from": "core-util-is@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "inherits": { "version": "2.0.3", - "from": "inherits@>=2.0.3 <2.1.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "isarray": { "version": "1.0.0", - "from": "isarray@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "process-nextick-args": { "version": "1.0.7", - "from": "process-nextick-args@>=1.0.6 <1.1.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz" + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, "safe-buffer": { "version": "5.1.1", - "from": "safe-buffer@>=5.1.1 <5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" }, "string_decoder": { "version": "1.0.3", - "from": "string_decoder@>=1.0.3 <1.1.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz" + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "requires": { + "safe-buffer": "~5.1.0" + } }, "util-deprecate": { "version": "1.0.2", - "from": "util-deprecate@>=1.0.1 <1.1.0", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" } } }, "uid-number": { "version": "0.0.6", - "from": "uid-number@>=0.0.6 <0.0.7", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz" + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=" } } } @@ -4235,73 +7507,112 @@ } } }, + "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", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "watch": { "version": "0.13.0", - "from": "watch@>=0.13.0 <0.14.0", "resolved": "https://registry.npmjs.org/watch/-/watch-0.13.0.tgz", + "integrity": "sha1-/MbSs/DoxzSC61Qjmhn9W8+adTw=", "dev": true, + "requires": { + "minimist": "^1.1.0" + }, "dependencies": { "minimist": { "version": "1.2.0", - "from": "minimist@>=1.1.0 <2.0.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } } }, "which": { "version": "1.0.9", - "from": "which@>=1.0.5 <1.1.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz" + "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", + "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=" }, "widest-line": { "version": "2.0.1", - "from": "widest-line@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "dev": true + "integrity": "sha1-dDh2RzDsfvQ4HOTfgvuYpTFCo/w=", + "dev": true, + "requires": { + "string-width": "^2.1.1" + } }, "winston": { "version": "0.8.3", - "from": "winston@>=0.8.1 <0.9.0", "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz", - "dev": true + "integrity": "sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA=", + "dev": true, + "requires": { + "async": "0.2.x", + "colors": "0.6.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "pkginfo": "0.3.x", + "stack-trace": "0.0.x" + } }, "wordwrap": { "version": "0.0.3", - "from": "wordwrap@>=0.0.2 <0.1.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", "dev": true }, "wrappy": { "version": "1.0.2", - "from": "wrappy@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, "write-file-atomic": { "version": "2.3.0", - "from": "write-file-atomic@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha1-H/YVdcLipOjlENb6TiQ8zhg5mas=", "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + }, "dependencies": { "graceful-fs": { "version": "4.1.15", - "from": "graceful-fs@>=4.1.11 <5.0.0", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha1-/7cD4QZuig7qpMi4C6klPu77+wA=", "dev": true } } }, "xdg-basedir": { "version": "3.0.0", - "from": "xdg-basedir@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", "dev": true }, "yallist": { "version": "3.0.3", - "from": "yallist@>=3.0.2 <4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", "dev": true } } diff --git a/services/chat/package.json b/services/chat/package.json index 7282b2e7af..3dc250746e 100644 --- a/services/chat/package.json +++ b/services/chat/package.json @@ -34,6 +34,21 @@ "devDependencies": { "bunyan": "^1.0.0", "chai": "", + "eslint": "^5.10.0", + "eslint-config-prettier": "^3.3.0", + "eslint-config-standard": "^12.0.0", + "eslint-config-standard-jsx": "^6.0.2", + "eslint-config-standard-react": "^7.0.2", + "eslint-plugin-chai-expect": "^2.0.1", + "eslint-plugin-chai-friendly": "^0.4.1", + "eslint-plugin-import": "^2.14.0", + "eslint-plugin-jsx-a11y": "^6.1.2", + "eslint-plugin-mocha": "^5.2.0", + "eslint-plugin-node": "^8.0.0", + "eslint-plugin-prettier": "^3.0.0", + "eslint-plugin-promise": "^4.0.1", + "eslint-plugin-react": "^7.11.1", + "eslint-plugin-standard": "^4.0.0", "grunt": "~0.4.1", "grunt-bunyan": "^0.5.0", "grunt-concurrent": "~0.4.2", From 912781f23f80c3a25682f6f959e301037b549809 Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Mon, 10 Dec 2018 22:59:03 -0500 Subject: [PATCH 13/33] update packages --- services/chat/npm-shrinkwrap.json | 385 ++++++++++++++++++++++++++---- 1 file changed, 342 insertions(+), 43 deletions(-) diff --git a/services/chat/npm-shrinkwrap.json b/services/chat/npm-shrinkwrap.json index 3be5fbbe76..15a3346a36 100644 --- a/services/chat/npm-shrinkwrap.json +++ b/services/chat/npm-shrinkwrap.json @@ -27,33 +27,28 @@ "@sinonjs/commons": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.3.0.tgz", - "integrity": "sha1-UKJ1QBa28wqZTO2m2aCow2rdqEk=", + "integrity": "sha512-j4ZwhaHmwsCb4DlDOIWnI5YyKDNMoNThsmwEpfHx6a1EpsGZ9qYLxP++LMlmBRjtGptGHFsGItJ768snllFWpA==", "requires": { "type-detect": "4.0.8" } }, "@sinonjs/formatio": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.0.0.tgz", - "integrity": "sha512-vdjoYLDptCgvtJs57ULshak3iJe4NW3sJ3g36xVDGff5AE8P30S6A093EIEPjdi2noGhfuNOEkbxt3J3awFW1w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.1.0.tgz", + "integrity": "sha512-ZAR2bPHOl4Xg6eklUGpsdiIJ4+J1SNag1DHHrG/73Uz/nVwXqjgUtRPLoS+aVyieN9cSbc0E4LsU984tWcDyNg==", "requires": { - "@sinonjs/samsam": "2.1.0" - }, - "dependencies": { - "@sinonjs/samsam": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-2.1.0.tgz", - "integrity": "sha512-5x2kFgJYupaF1ns/RmharQ90lQkd2ELS8A9X0ymkAAdemYHGtI2KiUHG8nX2WU0T1qgnOU5YMqnBM2V7NUanNw==", - "requires": { - "array-from": "^2.1.1" - } - } + "@sinonjs/samsam": "^2 || ^3" } }, "@sinonjs/samsam": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-2.1.2.tgz", - "integrity": "sha512-ZwTHAlC9akprWDinwEPD4kOuwaYZlyMwVJIANsKNC3QVp0AHB04m7RnB4eqeWfgmxw8MGTzS9uMaw93Z3QcZbw==" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.0.2.tgz", + "integrity": "sha512-m08g4CS3J6lwRQk1pj1EO+KEVWbrbXsmi9Pw0ySmrIbcVxVaedoFgLvFsV8wHLwh01EpROVz3KvVcD1Jmks9FQ==", + "requires": { + "@sinonjs/commons": "^1.0.2", + "array-from": "^2.1.1", + "lodash.get": "^4.4.2" + } }, "abbrev": { "version": "1.1.1", @@ -148,6 +143,14 @@ "requires": { "ast-types-flow": "0.0.7", "commander": "^2.11.0" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + } } }, "arr-diff": { @@ -192,7 +195,7 @@ "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha1-5gtrDo8wG9l+U3UhW9pAbIURjAs=" + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" }, "assign-symbols": { "version": "1.0.0", @@ -470,7 +473,7 @@ "chai": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha1-dgqnLPION5XoSxKHfODoNzeqKeU=", + "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", @@ -823,7 +826,7 @@ "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha1-38lARACtHI/gI+faHfHBR8S0RN8=", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "requires": { "type-detect": "^4.0.0" } @@ -899,7 +902,7 @@ "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=" + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" }, "director": { "version": "1.2.7", @@ -1029,6 +1032,105 @@ "strip-json-comments": "^2.0.1", "table": "^5.0.2", "text-table": "^0.2.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" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", + "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "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 + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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 + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, + "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" + } + } } }, "eslint-config-prettier": { @@ -1069,6 +1171,17 @@ "requires": { "debug": "^2.6.9", "resolve": "^1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } } }, "eslint-module-utils": { @@ -1079,6 +1192,17 @@ "requires": { "debug": "^2.6.8", "pkg-dir": "^1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } } }, "eslint-plugin-chai-expect": { @@ -1121,6 +1245,15 @@ "resolve": "^1.6.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "doctrine": { "version": "1.5.0", "resolved": "http://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", @@ -1130,6 +1263,21 @@ "esutils": "^2.0.2", "isarray": "^1.0.0" } + }, + "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" + } } } }, @@ -1177,6 +1325,21 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.0.4.tgz", "integrity": "sha512-WLsTMEhsQuXpCiG173+f3aymI43SXa+fB1rSfbzyP4GkPP+ZFVuO0/3sFUGNBtifisPeDcl/uD/Y2NxZ7xFq4g==", "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" + } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true } } }, @@ -1544,6 +1707,17 @@ "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "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" + } + } } }, "extglob": { @@ -1743,6 +1917,46 @@ "graceful-fs": "^4.1.2", "rimraf": "~2.6.2", "write": "^0.2.1" + }, + "dependencies": { + "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" + } + }, + "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 + }, + "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" + } + } } }, "flatiron": { @@ -2972,6 +3186,29 @@ "string-width": "^2.1.0", "strip-ansi": "^5.0.0", "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", + "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", + "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 + }, + "strip-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", + "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "dev": true, + "requires": { + "ansi-regex": "^4.0.0" + } + } } }, "is-accessor-descriptor": { @@ -3220,9 +3457,10 @@ "dev": true }, "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 }, "isexe": { "version": "2.0.0", @@ -3332,7 +3570,7 @@ "just-extend": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-3.0.0.tgz", - "integrity": "sha1-zuAEAx6qv2QG2gOnuE5P6deO8og=" + "integrity": "sha512-Fu3T6pKBuxjWT/p4DkqGHFRsysc8OauWr4ZRTY9dIx07Y9O0RkoR5jcv28aeD1vuAwhm3nLkDurwLXoALp4DpQ==" }, "keypress": { "version": "0.1.0", @@ -3381,6 +3619,20 @@ "parse-json": "^2.2.0", "pify": "^2.0.0", "strip-bom": "^3.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 + }, + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, "locate-path": { @@ -3432,7 +3684,7 @@ "grunt-mocha-test": "^0.11.0", "raven": "^1.1.3", "sandboxed-module": "^2.0.3", - "sinon": "^7.1.1", + "sinon": "^7.2.0", "timekeeper": "^1.0.0" }, "dependencies": { @@ -4045,7 +4297,7 @@ "lolex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lolex/-/lolex-3.0.0.tgz", - "integrity": "sha1-8E7hqKoT9g8avXsOj0IT7HLsGT4=" + "integrity": "sha512-hcnW80h3j2lbUfFdMArd5UPA/vxZJ+G8vobd+wg3nVEQA0EigStbYcrG030FJxL6xiDDPEkoMatV9xIh5OecQQ==" }, "loose-envify": { "version": "1.4.0", @@ -4651,12 +4903,18 @@ "dev": true, "optional": true }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, "nise": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.6.tgz", - "integrity": "sha512-1GedetLKzmqmgwabuMSqPsT7oumdR77SBpDfNNJhADRIeA3LN/2RVqR4fFqwvzhAqcTef6PPCzQwITE/YQ8S8A==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.7.tgz", + "integrity": "sha512-5cxvo/pEAEHBX5s0zl+zd96BvHHuua/zttIHeQuTWSDjGrWsEHamty8xbZNfocC+fx7NMrle7XHvvxtFxobIZQ==", "requires": { - "@sinonjs/formatio": "3.0.0", + "@sinonjs/formatio": "^3.1.0", "just-extend": "^3.0.0", "lolex": "^2.3.2", "path-to-regexp": "^1.7.0", @@ -4889,6 +5147,14 @@ "prelude-ls": "~1.1.2", "type-check": "~0.3.2", "wordwrap": "~1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } } }, "os-tmpdir": { @@ -5007,6 +5273,13 @@ "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", "requires": { "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + } } }, "path-type": { @@ -5016,6 +5289,14 @@ "dev": true, "requires": { "pify": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, "pathval": { @@ -5852,6 +6133,12 @@ "ret": "~0.1.10" } }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, "sandboxed-module": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/sandboxed-module/-/sandboxed-module-2.0.3.tgz", @@ -5954,19 +6241,17 @@ "dev": true }, "sinon": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.1.1.tgz", - "integrity": "sha512-iYagtjLVt1vN3zZY7D8oH7dkjNJEjLjyuzy8daX5+3bbQl8gaohrheB9VfH1O3L6LKuue5WTJvFluHiuZ9y3nQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.2.0.tgz", + "integrity": "sha512-N+ebPVqU55E6IUUGPSia57D5nTlCjfxrVR/33KTMRjsJJP5ZoGW1TXyLa2kDREgMtzqdnnksv7gA9oGC2v2LGw==", "requires": { "@sinonjs/commons": "^1.2.0", - "@sinonjs/formatio": "^3.0.0", - "@sinonjs/samsam": "^2.1.2", + "@sinonjs/formatio": "^3.1.0", + "@sinonjs/samsam": "^3.0.1", "diff": "^3.5.0", - "lodash.get": "^4.4.2", "lolex": "^3.0.0", - "nise": "^1.4.6", - "supports-color": "^5.5.0", - "type-detect": "^4.0.8" + "nise": "^1.4.7", + "supports-color": "^5.5.0" } }, "slice-ansi": { @@ -6162,6 +6447,12 @@ "extend-shallow": "^3.0.0" } }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "http://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, "stack-parser": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/stack-parser/-/stack-parser-0.0.1.tgz", @@ -6258,6 +6549,14 @@ "lodash": "^4.17.11", "slice-ansi": "2.0.0", "string-width": "^2.1.1" + }, + "dependencies": { + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + } } }, "term-size": { @@ -6271,7 +6570,7 @@ }, "text-encoding": { "version": "0.6.4", - "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", + "resolved": "http://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=" }, "text-table": { @@ -6393,7 +6692,7 @@ "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw=" + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" }, "undefsafe": { "version": "2.0.2", From 93a9030686e992758b418f8e25de1c98b4016f72 Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Mon, 10 Dec 2018 22:59:31 -0500 Subject: [PATCH 14/33] forgot to add files before committing --- services/chat/decaffeinate.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/services/chat/decaffeinate.sh b/services/chat/decaffeinate.sh index 0cee2c2673..86b2b0e777 100755 --- a/services/chat/decaffeinate.sh +++ b/services/chat/decaffeinate.sh @@ -40,6 +40,7 @@ git commit -m "Decaffeinate: convert individual files to js" npx prettier-eslint app.js Gruntfile.js config/settings.defaults.js --write +git add . git commit -m "Prettier: convert individual decaffeinated files to Prettier format" echo "done" From 9c44a2c9fc45e156495dabe7e21899fc46d6e685 Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Thu, 13 Dec 2018 16:55:47 -0500 Subject: [PATCH 15/33] download rc files in script and quote filenames --- services/chat/.eslintrc | 77 ----------------------------------- services/chat/decaffeinate.sh | 8 +++- 2 files changed, 7 insertions(+), 78 deletions(-) delete mode 100644 services/chat/.eslintrc diff --git a/services/chat/.eslintrc b/services/chat/.eslintrc deleted file mode 100644 index 8a19e98a6c..0000000000 --- a/services/chat/.eslintrc +++ /dev/null @@ -1,77 +0,0 @@ -{ - "extends": [ - "standard", - "standard-react", - "prettier", - "prettier/react", - "prettier/standard", - "plugin:jsx-a11y/recommended" - ], - "plugins": [ - "prettier", - "jsx-a11y", - "mocha", - "chai-expect", - "chai-friendly" - ], - "env": { - "mocha": true - }, - "globals": { - "expect": true, - "define": true, - "$": true, - "angular": true, - // Injected in layout.pug - "user_id": true - }, - "settings": { - // Tell eslint-plugin-react which version of React we are using - "react": { - "version": "15" - } - }, - "rules": { - "max-len": [ - "error", - { - "ignoreUrls": true, - // Ignore long describe/it test blocks, long import/require statements - "ignorePattern": "(^\\s*(it|describe)\\s*\\(['\"]|^import\\s*.*\\s*from\\s*['\"]|^.*\\s*=\\s*require\\(['\"])" - } - ], - // Fix conflict between prettier & standard by overriding to prefer - // double quotes - "jsx-quotes": [ - "error", - "prefer-double" - ], - // Override weird behaviour of jsx-a11y label-has-for (says labels must be - // nested *and* have for/id attributes) - "jsx-a11y/label-has-for": [ - "error", - { - "required": { - "some": [ - "nesting", - "id" - ] - } - } - ], - // Add some mocha specific rules - "mocha/handle-done-callback": "error", - "mocha/no-exclusive-tests": "error", - "mocha/no-global-tests": "error", - "mocha/no-identical-title": "error", - "mocha/no-nested-tests": "error", - "mocha/no-pending-tests": "error", - "mocha/no-skipped-tests": "error", - // Add some chai specific rules - "chai-expect/missing-assertion": "error", - "chai-expect/terminating-properties": "error", - // Swap the no-unused-expressions rule with a more chai-friendly one - "no-unused-expressions": 0, - "chai-friendly/no-unused-expressions": "error" - } -} \ No newline at end of file diff --git a/services/chat/decaffeinate.sh b/services/chat/decaffeinate.sh index 86b2b0e777..d78e339dcb 100755 --- a/services/chat/decaffeinate.sh +++ b/services/chat/decaffeinate.sh @@ -1,5 +1,11 @@ set -ex +curl -o .eslintrc https://raw.githubusercontent.com/sharelatex/web-sharelatex-internal/master/.eslintrc?token=AMHVk43L42-Htd0MSIfjao6vRukW52r4ks5cHA9WwA%3D%3D +curl -o .prettierrc https://raw.githubusercontent.com/sharelatex/web-sharelatex-internal/master/.prettierrc?token=AMHVk45yPk51AJkmy-hYGoHI9gW-kZHvks5cHAu3wA%3D%3D + +git add . +git commit -m "add rc files" + npx bulk-decaffeinate convert --dir app/coffee npx bulk-decaffeinate clean @@ -38,7 +44,7 @@ decaffeinate config/settings.defaults.js git commit -m "Decaffeinate: convert individual files to js" -npx prettier-eslint app.js Gruntfile.js config/settings.defaults.js --write +npx prettier-eslint 'app.js' 'Gruntfile.js' 'config/settings.defaults.js' --write git add . git commit -m "Prettier: convert individual decaffeinated files to Prettier format" From f6ef1cd6a3358d610f424baf331e00b7012a8772 Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Thu, 13 Dec 2018 16:59:55 -0500 Subject: [PATCH 16/33] d'oh add individual decaffed files before committing --- services/chat/decaffeinate.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/services/chat/decaffeinate.sh b/services/chat/decaffeinate.sh index d78e339dcb..0039d30cc4 100755 --- a/services/chat/decaffeinate.sh +++ b/services/chat/decaffeinate.sh @@ -42,6 +42,7 @@ decaffeinate app.js decaffeinate Gruntfile.js decaffeinate config/settings.defaults.js +git add . git commit -m "Decaffeinate: convert individual files to js" npx prettier-eslint 'app.js' 'Gruntfile.js' 'config/settings.defaults.js' --write From b751f704363cb86c56bf6c91af3c4967ca0ba212 Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Thu, 20 Dec 2018 13:56:51 -0500 Subject: [PATCH 17/33] bump settings-sharelatex version to latest release --- services/chat/decaffeinate.sh | 2 +- services/chat/npm-shrinkwrap.json | 6 +++--- services/chat/package.json | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/services/chat/decaffeinate.sh b/services/chat/decaffeinate.sh index 0039d30cc4..a2958457ab 100755 --- a/services/chat/decaffeinate.sh +++ b/services/chat/decaffeinate.sh @@ -4,7 +4,7 @@ curl -o .eslintrc https://raw.githubusercontent.com/sharelatex/web-sharelatex-in curl -o .prettierrc https://raw.githubusercontent.com/sharelatex/web-sharelatex-internal/master/.prettierrc?token=AMHVk45yPk51AJkmy-hYGoHI9gW-kZHvks5cHAu3wA%3D%3D git add . -git commit -m "add rc files" +git commit -m "Decaffeinate: add eslint and prettier rc files" npx bulk-decaffeinate convert --dir app/coffee diff --git a/services/chat/npm-shrinkwrap.json b/services/chat/npm-shrinkwrap.json index 15a3346a36..49daedbb17 100644 --- a/services/chat/npm-shrinkwrap.json +++ b/services/chat/npm-shrinkwrap.json @@ -6195,15 +6195,15 @@ } }, "settings-sharelatex": { - "version": "git+https://github.com/sharelatex/settings-sharelatex.git#cbc5e41c1dbe6789721a14b3fdae05bf22546559", - "from": "git+https://github.com/sharelatex/settings-sharelatex.git#v1.0.0", + "version": "git+https://github.com/sharelatex/settings-sharelatex.git#93f63d029b52fef8825c3a401b2b6a7ba29b4750", + "from": "git+https://github.com/sharelatex/settings-sharelatex.git#1.1.0", "requires": { "coffee-script": "1.6.0" }, "dependencies": { "coffee-script": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.6.0.tgz", + "resolved": "http://registry.npmjs.org/coffee-script/-/coffee-script-1.6.0.tgz", "integrity": "sha1-gIs5bhEPU9AhoZpO8fZb4OjjX6M=" } } diff --git a/services/chat/package.json b/services/chat/package.json index 3dc250746e..d9a8aa3d2d 100644 --- a/services/chat/package.json +++ b/services/chat/package.json @@ -28,7 +28,7 @@ "mongojs": "2.4.0", "redis": "~0.10.1", "request": "^2.79.0", - "settings-sharelatex": "git+https://github.com/sharelatex/settings-sharelatex.git#v1.0.0", + "settings-sharelatex": "git+https://github.com/sharelatex/settings-sharelatex.git#1.1.0", "v8-profiler": "^5.6.5" }, "devDependencies": { From 273b81b806d4d65b1c58724926a4f68bacfab06c Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Thu, 20 Dec 2018 14:06:35 -0500 Subject: [PATCH 18/33] forgot prettier-eslint-cli package. thanks @40thieves --- services/chat/npm-shrinkwrap.json | 1362 ++++++++++++++++++++++++++++- services/chat/package.json | 1 + 2 files changed, 1362 insertions(+), 1 deletion(-) diff --git a/services/chat/npm-shrinkwrap.json b/services/chat/npm-shrinkwrap.json index 49daedbb17..ab4f9681de 100644 --- a/services/chat/npm-shrinkwrap.json +++ b/services/chat/npm-shrinkwrap.json @@ -79,6 +79,12 @@ "uri-js": "^4.2.2" } }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true + }, "ansi-align": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", @@ -192,6 +198,12 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", @@ -241,6 +253,75 @@ "ast-types-flow": "0.0.7" } }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://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" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^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 + } + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -308,6 +389,12 @@ "integrity": "sha1-wteA9T1Fu6gxeokC1M7q86Y4WxQ=", "dev": true }, + "boolify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/boolify/-/boolify-1.0.1.tgz", + "integrity": "sha1-tcCeF8rNET0Rt7s+04TMASmU2Gs=", + "dev": true + }, "boxen": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", @@ -408,6 +495,12 @@ "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", "dev": true }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", @@ -464,6 +557,17 @@ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true }, + "camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + } + }, "capture-stack-trace": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", @@ -616,6 +720,66 @@ } } }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, "coffee-script": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz", @@ -667,6 +831,12 @@ "integrity": "sha1-0bhvkB+LZL2UG96tr5JFMDk76Sg=", "dev": true }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "dev": true + }, "complexity-report": { "version": "0.10.5", "resolved": "https://registry.npmjs.org/complexity-report/-/complexity-report-0.10.5.tgz", @@ -701,6 +871,18 @@ "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==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, "configstore": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", @@ -741,6 +923,12 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, + "core-js": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.1.tgz", + "integrity": "sha512-L72mmmEayPJBejKIWe2pYtGis5r0tQ5NaJekdhyXgeMQTpJoBsH0NL4ElY2LfSoV15xeQWKQ+XTTOZdyero5Xg==", + "dev": true + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -817,6 +1005,12 @@ "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=", "dev": true }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", @@ -910,6 +1104,12 @@ "integrity": "sha1-v9N0EHX9f7GlsuE2WMX0vsd3NvM=", "dev": true }, + "dlv": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.2.tgz", + "integrity": "sha512-xxD4VSH67GbRvSGUrckvha94RD7hjgOH7rqGxiytLpkaeMvixOHFZTGFK6EkIm3T761OVHT8ABHmGkq9gXgu6Q==", + "dev": true + }, "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -2639,6 +2839,12 @@ "globule": "~0.1.0" } }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, "get-func-name": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", @@ -3051,6 +3257,23 @@ "function-bind": "^1.1.1" } }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -3146,6 +3369,12 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -3211,6 +3440,12 @@ } } }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -3429,6 +3664,12 @@ "has": "^1.0.1" } }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, "is-retry-allowed": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", @@ -3599,6 +3840,15 @@ "integrity": "sha1-2qBoIGKCVCwIgojpdcKXwa53tpA=", "dev": true }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -3669,6 +3919,24 @@ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", + "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==", + "dev": true + }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", + "dev": true + }, "logger-sharelatex": { "version": "git+https://github.com/sharelatex/logger-sharelatex.git#b2956ec56b582b9f4fc8fdda8dc00c06e77c5537", "from": "git+https://github.com/sharelatex/logger-sharelatex.git#master", @@ -4294,6 +4562,64 @@ } } }, + "loglevel": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", + "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "dev": true + }, + "loglevel-colored-level-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz", + "integrity": "sha1-akAhj9x64V/HbD0PPmdsRlOIYD4=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "loglevel": "^1.4.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://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" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^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 + } + } + }, "lolex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lolex/-/lolex-3.0.0.tgz", @@ -4334,12 +4660,36 @@ "pify": "^3.0.0" } }, + "make-plural": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-4.3.0.tgz", + "integrity": "sha512-xTYd4JVHpSCW+aqDof6w/MebaMVNTVYBZhbB/vi513xXdiPT92JMVCo0Jq8W2UZnzYRFeVbQiQ+I25l13JuKvA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "optional": 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 }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "dev": true + }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", @@ -4349,6 +4699,68 @@ "object-visit": "^1.0.0" } }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "messageformat": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/messageformat/-/messageformat-1.1.1.tgz", + "integrity": "sha512-Q0uXcDtF5pEZsVSyhzDOGgZZK6ykN79VY9CwU3Nv0gsqx62BjdJW0MT+63UkHQ4exe3HE33ZlxR2/YwoJarRTg==", + "dev": true, + "requires": { + "glob": "~7.0.6", + "make-plural": "^4.1.1", + "messageformat-parser": "^1.1.0", + "nopt": "~3.0.6", + "reserved-words": "^0.1.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" + } + }, + "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" + } + } + } + }, + "messageformat-parser": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/messageformat-parser/-/messageformat-parser-1.1.0.tgz", + "integrity": "sha512-Hwem6G3MsKDLS1FtBRGIs8T50P1Q00r3srS6QJePCFbad9fq0nYxwf3rnU2BreApRGhmpKMV7oZI06Sy1c9TPA==", + "dev": true + }, "metrics-sharelatex": { "version": "git+https://github.com/sharelatex/metrics-sharelatex.git#166961924c599b1f9468f2e17846fa2a9d12372d", "from": "git+https://github.com/sharelatex/metrics-sharelatex.git#v1.7.1", @@ -5046,6 +5458,12 @@ "lazy": "~1.0.11" } }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -5157,6 +5575,17 @@ } } }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, "os-tmpdir": { "version": "1.0.2", "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -5391,6 +5820,655 @@ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, + "prettier": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.15.3.tgz", + "integrity": "sha512-gAU9AGAPMaKb3NNSUUuhhFAS7SCO4ALTN4nRIn6PJ075Qd28Yn2Ig2ahEJWdJwJmlEBTUfC7mMUSFy8MwsOCfg==", + "dev": true + }, + "prettier-eslint": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-8.8.2.tgz", + "integrity": "sha512-2UzApPuxi2yRoyMlXMazgR6UcH9DKJhNgCviIwY3ixZ9THWSSrUww5vkiZ3C48WvpFl1M1y/oU63deSy1puWEA==", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "common-tags": "^1.4.0", + "dlv": "^1.1.0", + "eslint": "^4.0.0", + "indent-string": "^3.2.0", + "lodash.merge": "^4.6.0", + "loglevel-colored-level-prefix": "^1.0.0", + "prettier": "^1.7.0", + "pretty-format": "^23.0.1", + "require-relative": "^0.8.7", + "typescript": "^2.5.1", + "typescript-eslint-parser": "^16.0.0", + "vue-eslint-parser": "^2.0.2" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "http://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "^3.0.4" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "http://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "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" + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "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" + } + }, + "eslint": { + "version": "4.19.1", + "resolved": "http://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "dev": true, + "requires": { + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.4", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", + "table": "4.0.2", + "text-table": "~0.2.0" + } + }, + "eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "espree": { + "version": "3.5.4", + "resolved": "http://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "requires": { + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" + } + }, + "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 + }, + "external-editor": { + "version": "2.2.0", + "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "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" + } + }, + "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" + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + } + }, + "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" + } + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "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" + } + }, + "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 + }, + "regexpp": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0" + } + }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "requires": { + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", + "string-width": "^2.1.1" + } + } + } + }, + "prettier-eslint-cli": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/prettier-eslint-cli/-/prettier-eslint-cli-4.7.1.tgz", + "integrity": "sha512-hQbsGaEVz97oBBcKdsJ46khv0kOGkMyWrXzcFOXW6X8UuetZ/j0yDJkNJgUTVc6PVFbbzBXk+qgd5vos9qzXPQ==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "babel-runtime": "^6.23.0", + "boolify": "^1.0.0", + "camelcase-keys": "^4.1.0", + "chalk": "2.3.0", + "common-tags": "^1.4.0", + "eslint": "^4.5.0", + "find-up": "^2.1.0", + "get-stdin": "^5.0.1", + "glob": "^7.1.1", + "ignore": "^3.2.7", + "indent-string": "^3.1.0", + "lodash.memoize": "^4.1.2", + "loglevel-colored-level-prefix": "^1.0.0", + "messageformat": "^1.0.2", + "prettier-eslint": "^8.5.0", + "rxjs": "^5.3.0", + "yargs": "10.0.3" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "http://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "^3.0.4" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "http://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "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" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "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" + } + }, + "eslint": { + "version": "4.19.1", + "resolved": "http://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "dev": true, + "requires": { + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.4", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", + "table": "4.0.2", + "text-table": "~0.2.0" + } + }, + "eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "espree": { + "version": "3.5.4", + "resolved": "http://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "requires": { + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" + } + }, + "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 + }, + "external-editor": { + "version": "2.2.0", + "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "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" + } + }, + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", + "dev": true + }, + "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" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + } + }, + "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" + } + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "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" + } + }, + "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 + }, + "regexpp": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true + }, + "rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "^2.0.0" + } + }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "requires": { + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", + "string-width": "^2.1.1" + } + } + } + }, "prettier-linter-helpers": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", @@ -5400,6 +6478,16 @@ "fast-diff": "^1.1.2" } }, + "pretty-format": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", + "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0", + "ansi-styles": "^3.2.0" + } + }, "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", @@ -5468,6 +6556,12 @@ "integrity": "sha1-MbGtBYVnZRxSaSFQa5qHk5EaA4Q=", "dev": true }, + "quick-lru": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", + "dev": true + }, "ramda": { "version": "0.25.0", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.25.0.tgz", @@ -5582,6 +6676,12 @@ "resolved": "https://registry.npmjs.org/redis/-/redis-0.10.3.tgz", "integrity": "sha1-iSf+IRDuOWF7zz/Te4nY4SORG7Y=" }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -6030,11 +7130,29 @@ } } }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, "require-like": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=" }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "require-relative": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", + "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", + "dev": true + }, "require-uncached": { "version": "1.0.3", "resolved": "http://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", @@ -6045,6 +7163,12 @@ "resolve-from": "^1.0.0" } }, + "reserved-words": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.2.tgz", + "integrity": "sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=", + "dev": true + }, "resolve": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", @@ -6102,6 +7226,21 @@ "is-promise": "^2.1.0" } }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "*" + } + }, "rxjs": { "version": "6.3.3", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", @@ -6171,6 +7310,12 @@ } } }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, "set-value": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", @@ -6203,7 +7348,7 @@ "dependencies": { "coffee-script": { "version": "1.6.0", - "resolved": "http://registry.npmjs.org/coffee-script/-/coffee-script-1.6.0.tgz", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.6.0.tgz", "integrity": "sha1-gIs5bhEPU9AhoZpO8fZb4OjjX6M=" } } @@ -6539,6 +7684,12 @@ "has-flag": "^3.0.0" } }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true + }, "table": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/table/-/table-5.1.1.tgz", @@ -6694,6 +7845,36 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typescript": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", + "dev": true + }, + "typescript-eslint-parser": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-16.0.1.tgz", + "integrity": "sha512-IKawLTu4A2xN3aN/cPLxvZ0bhxZHILGDKTZWvWNJ3sLNhJ3PjfMEDQmR2VMpdRPrmWOadgWXRwjLBzSA8AGsaQ==", + "dev": true, + "requires": { + "lodash.unescape": "4.0.1", + "semver": "5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + } + } + }, "undefsafe": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", @@ -7816,6 +8997,86 @@ "spdx-expression-parse": "^3.0.0" } }, + "vue-eslint-parser": { + "version": "2.0.3", + "resolved": "http://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz", + "integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.2", + "esquery": "^1.0.0", + "lodash": "^4.17.4" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "http://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "^3.0.4" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "http://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "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" + } + }, + "eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "espree": { + "version": "3.5.4", + "resolved": "http://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "requires": { + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, + "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 + } + } + }, "watch": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/watch/-/watch-0.13.0.tgz", @@ -7838,6 +9099,12 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=" }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, "widest-line": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", @@ -7868,6 +9135,53 @@ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", "dev": true }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -7908,11 +9222,57 @@ "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", "dev": true }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "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 + }, + "yargs": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.0.3.tgz", + "integrity": "sha512-DqBpQ8NAUX4GyPP/ijDGHsJya4tYqLQrjPr95HNsr1YwL3+daCfvBwg7+gIC6IdJhR2kATh3hb61vjzMWEtjdw==", + "dev": true, + "requires": { + "cliui": "^3.2.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.0.0" + }, + "dependencies": { + "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" + } + } + } + }, + "yargs-parser": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", + "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } } } } diff --git a/services/chat/package.json b/services/chat/package.json index d9a8aa3d2d..276233faae 100644 --- a/services/chat/package.json +++ b/services/chat/package.json @@ -63,6 +63,7 @@ "grunt-plato": "~0.2.1", "mocha": "^4.1.0", "nodemon": "^1.14.11", + "prettier-eslint-cli": "^4.7.1", "sandboxed-module": "", "sinon": "", "timekeeper": "" From d54fc7efc6e8538f08e9482a8cf66167d4aca7f1 Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Thu, 20 Dec 2018 14:13:48 -0500 Subject: [PATCH 19/33] Decaffeinate: add eslint and prettier rc files --- services/chat/.eslintrc | 75 +++++++++++++++++++++++++++++++++++++++ services/chat/.prettierrc | 4 +++ 2 files changed, 79 insertions(+) create mode 100644 services/chat/.eslintrc create mode 100644 services/chat/.prettierrc diff --git a/services/chat/.eslintrc b/services/chat/.eslintrc new file mode 100644 index 0000000000..d55c4160bb --- /dev/null +++ b/services/chat/.eslintrc @@ -0,0 +1,75 @@ +{ + "extends": [ + "standard", + "standard-react", + "prettier", + "prettier/react", + "prettier/standard", + "plugin:jsx-a11y/recommended" + ], + "plugins": [ + "prettier", + "jsx-a11y", + "mocha", + "chai-expect", + "chai-friendly" + ], + "env": { + "mocha": true + }, + "globals": { + "expect": true, + "define": true, + "$": true, + "angular": true, + // Injected in layout.pug + "user_id": true + }, + "settings": { + // Tell eslint-plugin-react which version of React we are using + "react": { + "version": "15" + } + }, + "rules": { + "max-len": ["error", { + "ignoreUrls": true, + // Ignore long describe/it test blocks, long import/require statements + "ignorePattern": "(^\\s*(it|describe)\\s*\\(['\"]|^import\\s*.*\\s*from\\s*['\"]|^.*\\s*=\\s*require\\(['\"])" + }], + + // Fix conflict between prettier & standard by overriding to prefer + // double quotes + "jsx-quotes": ["error", "prefer-double"], + + // Override weird behaviour of jsx-a11y label-has-for (says labels must be + // nested *and* have for/id attributes) + "jsx-a11y/label-has-for": [ + "error", + { + "required": { + "some": [ + "nesting", + "id" + ] + } + } + ], + + // Add some mocha specific rules + "mocha/handle-done-callback": "error", + "mocha/no-exclusive-tests": "error", + "mocha/no-global-tests": "error", + "mocha/no-identical-title": "error", + "mocha/no-nested-tests": "error", + "mocha/no-pending-tests": "error", + "mocha/no-skipped-tests": "error", + + // Add some chai specific rules + "chai-expect/missing-assertion": "error", + "chai-expect/terminating-properties": "error", + // Swap the no-unused-expressions rule with a more chai-friendly one + "no-unused-expressions": 0, + "chai-friendly/no-unused-expressions": "error" + } +} diff --git a/services/chat/.prettierrc b/services/chat/.prettierrc new file mode 100644 index 0000000000..b2095be81e --- /dev/null +++ b/services/chat/.prettierrc @@ -0,0 +1,4 @@ +{ + "semi": false, + "singleQuote": true +} From 36a9f79d11c66acc3bcf429b69406b1964bf37c2 Mon Sep 17 00:00:00 2001 From: decaffeinate Date: Thu, 20 Dec 2018 14:13:50 -0500 Subject: [PATCH 20/33] decaffeinate: Rename MessageFormatter.coffee and 6 other files from .coffee to .js --- .../Messages/{MessageFormatter.coffee => MessageFormatter.js} | 0 .../{MessageHttpController.coffee => MessageHttpController.js} | 0 .../Messages/{MessageManager.coffee => MessageManager.js} | 0 .../Features/Threads/{ThreadManager.coffee => ThreadManager.js} | 0 services/chat/app/coffee/{mongojs.coffee => mongojs.js} | 0 services/chat/app/coffee/{router.coffee => router.js} | 0 services/chat/app/coffee/{server.coffee => server.js} | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename services/chat/app/coffee/Features/Messages/{MessageFormatter.coffee => MessageFormatter.js} (100%) rename services/chat/app/coffee/Features/Messages/{MessageHttpController.coffee => MessageHttpController.js} (100%) rename services/chat/app/coffee/Features/Messages/{MessageManager.coffee => MessageManager.js} (100%) rename services/chat/app/coffee/Features/Threads/{ThreadManager.coffee => ThreadManager.js} (100%) rename services/chat/app/coffee/{mongojs.coffee => mongojs.js} (100%) rename services/chat/app/coffee/{router.coffee => router.js} (100%) rename services/chat/app/coffee/{server.coffee => server.js} (100%) diff --git a/services/chat/app/coffee/Features/Messages/MessageFormatter.coffee b/services/chat/app/coffee/Features/Messages/MessageFormatter.js similarity index 100% rename from services/chat/app/coffee/Features/Messages/MessageFormatter.coffee rename to services/chat/app/coffee/Features/Messages/MessageFormatter.js diff --git a/services/chat/app/coffee/Features/Messages/MessageHttpController.coffee b/services/chat/app/coffee/Features/Messages/MessageHttpController.js similarity index 100% rename from services/chat/app/coffee/Features/Messages/MessageHttpController.coffee rename to services/chat/app/coffee/Features/Messages/MessageHttpController.js diff --git a/services/chat/app/coffee/Features/Messages/MessageManager.coffee b/services/chat/app/coffee/Features/Messages/MessageManager.js similarity index 100% rename from services/chat/app/coffee/Features/Messages/MessageManager.coffee rename to services/chat/app/coffee/Features/Messages/MessageManager.js diff --git a/services/chat/app/coffee/Features/Threads/ThreadManager.coffee b/services/chat/app/coffee/Features/Threads/ThreadManager.js similarity index 100% rename from services/chat/app/coffee/Features/Threads/ThreadManager.coffee rename to services/chat/app/coffee/Features/Threads/ThreadManager.js diff --git a/services/chat/app/coffee/mongojs.coffee b/services/chat/app/coffee/mongojs.js similarity index 100% rename from services/chat/app/coffee/mongojs.coffee rename to services/chat/app/coffee/mongojs.js diff --git a/services/chat/app/coffee/router.coffee b/services/chat/app/coffee/router.js similarity index 100% rename from services/chat/app/coffee/router.coffee rename to services/chat/app/coffee/router.js diff --git a/services/chat/app/coffee/server.coffee b/services/chat/app/coffee/server.js similarity index 100% rename from services/chat/app/coffee/server.coffee rename to services/chat/app/coffee/server.js From 0a12cee07179ad1f8739bfb584e11261f313c5d6 Mon Sep 17 00:00:00 2001 From: decaffeinate Date: Thu, 20 Dec 2018 14:13:53 -0500 Subject: [PATCH 21/33] decaffeinate: Convert MessageFormatter.coffee and 6 other files to JS --- .../Features/Messages/MessageFormatter.js | 102 +++++--- .../Messages/MessageHttpController.js | 239 ++++++++++-------- .../Features/Messages/MessageManager.js | 146 ++++++----- .../coffee/Features/Threads/ThreadManager.js | 125 +++++---- services/chat/app/coffee/mongojs.js | 11 +- services/chat/app/coffee/router.js | 67 +++-- services/chat/app/coffee/server.js | 77 +++--- 7 files changed, 452 insertions(+), 315 deletions(-) diff --git a/services/chat/app/coffee/Features/Messages/MessageFormatter.js b/services/chat/app/coffee/Features/Messages/MessageFormatter.js index 8f3fdf3e04..eacfa41c1c 100644 --- a/services/chat/app/coffee/Features/Messages/MessageFormatter.js +++ b/services/chat/app/coffee/Features/Messages/MessageFormatter.js @@ -1,46 +1,70 @@ -module.exports = MessageFormatter = - formatMessageForClientSide: (message) -> - if message._id? - message.id = message._id.toString() - delete message._id - formattedMessage = - id: message.id - content: message.content - timestamp: message.timestamp +/* + * decaffeinate suggestions: + * DS101: Remove unnecessary use of Array.from + * DS102: Remove unnecessary code created because of implicit returns + * DS207: Consider shorter variations of null checks + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md + */ +let MessageFormatter; +module.exports = (MessageFormatter = { + formatMessageForClientSide(message) { + if (message._id != null) { + message.id = message._id.toString(); + delete message._id; + } + const formattedMessage = { + id: message.id, + content: message.content, + timestamp: message.timestamp, user_id: message.user_id - if message.edited_at? - formattedMessage.edited_at = message.edited_at - return formattedMessage + }; + if (message.edited_at != null) { + formattedMessage.edited_at = message.edited_at; + } + return formattedMessage; + }, - formatMessagesForClientSide: (messages) -> - (@formatMessageForClientSide(message) for message in messages) + formatMessagesForClientSide(messages) { + return (Array.from(messages).map((message) => this.formatMessageForClientSide(message))); + }, - groupMessagesByThreads: (rooms, messages) -> - rooms_by_id = {} - for room in rooms - rooms_by_id[room._id.toString()] = room + groupMessagesByThreads(rooms, messages) { + let room, thread; + const rooms_by_id = {}; + for (room of Array.from(rooms)) { + rooms_by_id[room._id.toString()] = room; + } - threads = {} - getThread = (room) -> - thread_id = room.thread_id.toString() - if threads[thread_id]? - return threads[thread_id] - else - thread = { messages: [] } - if room.resolved? - thread.resolved = true - thread.resolved_at = room.resolved.ts - thread.resolved_by_user_id = room.resolved.user_id - threads[thread_id] = thread - return thread + const threads = {}; + const getThread = function(room) { + const thread_id = room.thread_id.toString(); + if (threads[thread_id] != null) { + return threads[thread_id]; + } else { + const thread = { messages: [] }; + if (room.resolved != null) { + thread.resolved = true; + thread.resolved_at = room.resolved.ts; + thread.resolved_by_user_id = room.resolved.user_id; + } + threads[thread_id] = thread; + return thread; + } + }; - for message in messages - room = rooms_by_id[message.room_id.toString()] - if room? - thread = getThread(room) - thread.messages.push MessageFormatter.formatMessageForClientSide(message) + for (let message of Array.from(messages)) { + room = rooms_by_id[message.room_id.toString()]; + if (room != null) { + thread = getThread(room); + thread.messages.push(MessageFormatter.formatMessageForClientSide(message)); + } + } - for thread_id, thread of threads - thread.messages.sort (a,b) -> a.timestamp - b.timestamp + for (let thread_id in threads) { + thread = threads[thread_id]; + thread.messages.sort((a,b) => a.timestamp - b.timestamp); + } - return threads \ No newline at end of file + return threads; + } +}); \ No newline at end of file diff --git a/services/chat/app/coffee/Features/Messages/MessageHttpController.js b/services/chat/app/coffee/Features/Messages/MessageHttpController.js index 4a870cd2fc..c2144e3885 100644 --- a/services/chat/app/coffee/Features/Messages/MessageHttpController.js +++ b/services/chat/app/coffee/Features/Messages/MessageHttpController.js @@ -1,112 +1,151 @@ -logger = require "logger-sharelatex" -metrics = require "metrics-sharelatex" -MessageManager = require "./MessageManager" -MessageFormatter = require "./MessageFormatter" -ThreadManager = require "../Threads/ThreadManager" -{ObjectId} = require "../../mongojs" +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS207: Consider shorter variations of null checks + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md + */ +let MessageHttpController; +const logger = require("logger-sharelatex"); +const metrics = require("metrics-sharelatex"); +const MessageManager = require("./MessageManager"); +const MessageFormatter = require("./MessageFormatter"); +const ThreadManager = require("../Threads/ThreadManager"); +const {ObjectId} = require("../../mongojs"); -module.exports = MessageHttpController = - DEFAULT_MESSAGE_LIMIT: 50 - MAX_MESSAGE_LENGTH: 10 * 1024 # 10kb, about 1,500 words +module.exports = (MessageHttpController = { + DEFAULT_MESSAGE_LIMIT: 50, + MAX_MESSAGE_LENGTH: 10 * 1024, // 10kb, about 1,500 words - getGlobalMessages: (req, res, next) -> - MessageHttpController._getMessages(ThreadManager.GLOBAL_THREAD, req, res, next) + getGlobalMessages(req, res, next) { + return MessageHttpController._getMessages(ThreadManager.GLOBAL_THREAD, req, res, next); + }, - sendGlobalMessage: (req, res, next) -> - MessageHttpController._sendMessage(ThreadManager.GLOBAL_THREAD, req, res, next) + sendGlobalMessage(req, res, next) { + return MessageHttpController._sendMessage(ThreadManager.GLOBAL_THREAD, req, res, next); + }, - sendThreadMessage: (req, res, next) -> - MessageHttpController._sendMessage(req.params.thread_id, req, res, next) + sendThreadMessage(req, res, next) { + return MessageHttpController._sendMessage(req.params.thread_id, req, res, next); + }, - getAllThreads: (req, res, next) -> - {project_id} = req.params - logger.log {project_id}, "getting all threads" - ThreadManager.findAllThreadRooms project_id, (error, rooms) -> - return next(error) if error? - room_ids = rooms.map (r) -> r._id - MessageManager.findAllMessagesInRooms room_ids, (error, messages) -> - return next(error) if error? - threads = MessageFormatter.groupMessagesByThreads rooms, messages - res.json threads + getAllThreads(req, res, next) { + const {project_id} = req.params; + logger.log({project_id}, "getting all threads"); + return ThreadManager.findAllThreadRooms(project_id, function(error, rooms) { + if (error != null) { return next(error); } + const room_ids = rooms.map(r => r._id); + return MessageManager.findAllMessagesInRooms(room_ids, function(error, messages) { + if (error != null) { return next(error); } + const threads = MessageFormatter.groupMessagesByThreads(rooms, messages); + return res.json(threads); + }); + }); + }, - resolveThread: (req, res, next) -> - {project_id, thread_id} = req.params - {user_id} = req.body - logger.log {user_id, project_id, thread_id}, "marking thread as resolved" - ThreadManager.resolveThread project_id, thread_id, user_id, (error) -> - return next(error) if error? - res.send 204 # No content + resolveThread(req, res, next) { + const {project_id, thread_id} = req.params; + const {user_id} = req.body; + logger.log({user_id, project_id, thread_id}, "marking thread as resolved"); + return ThreadManager.resolveThread(project_id, thread_id, user_id, function(error) { + if (error != null) { return next(error); } + return res.send(204); + }); + }, // No content - reopenThread: (req, res, next) -> - {project_id, thread_id} = req.params - logger.log {project_id, thread_id}, "reopening thread" - ThreadManager.reopenThread project_id, thread_id, (error) -> - return next(error) if error? - res.send 204 # No content + reopenThread(req, res, next) { + const {project_id, thread_id} = req.params; + logger.log({project_id, thread_id}, "reopening thread"); + return ThreadManager.reopenThread(project_id, thread_id, function(error) { + if (error != null) { return next(error); } + return res.send(204); + }); + }, // No content - deleteThread: (req, res, next) -> - {project_id, thread_id} = req.params - logger.log {project_id, thread_id}, "deleting thread" - ThreadManager.deleteThread project_id, thread_id, (error, room_id) -> - return next(error) if error? - MessageManager.deleteAllMessagesInRoom room_id, (error) -> - return next(error) if error? - res.send 204 # No content + deleteThread(req, res, next) { + const {project_id, thread_id} = req.params; + logger.log({project_id, thread_id}, "deleting thread"); + return ThreadManager.deleteThread(project_id, thread_id, function(error, room_id) { + if (error != null) { return next(error); } + return MessageManager.deleteAllMessagesInRoom(room_id, function(error) { + if (error != null) { return next(error); } + return res.send(204); + }); + }); + }, // No content - editMessage: (req, res, next) -> - {content} = req?.body - {project_id, thread_id, message_id} = req.params - logger.log {project_id, thread_id, message_id, content}, "editing message" - ThreadManager.findOrCreateThread project_id, thread_id, (error, room) -> - return next(error) if error? - MessageManager.updateMessage room._id, message_id, content, Date.now(), (error) -> - return next(error) if error? - res.send(204) + editMessage(req, res, next) { + const {content} = req != null ? req.body : undefined; + const {project_id, thread_id, message_id} = req.params; + logger.log({project_id, thread_id, message_id, content}, "editing message"); + return ThreadManager.findOrCreateThread(project_id, thread_id, function(error, room) { + if (error != null) { return next(error); } + return MessageManager.updateMessage(room._id, message_id, content, Date.now(), function(error) { + if (error != null) { return next(error); } + return res.send(204); + }); + }); + }, - deleteMessage: (req, res, next) -> - {project_id, thread_id, message_id} = req.params - logger.log {project_id, thread_id, message_id}, "deleting message" - ThreadManager.findOrCreateThread project_id, thread_id, (error, room) -> - return next(error) if error? - MessageManager.deleteMessage room._id, message_id, (error, message) -> - return next(error) if error? - res.send(204) + deleteMessage(req, res, next) { + const {project_id, thread_id, message_id} = req.params; + logger.log({project_id, thread_id, message_id}, "deleting message"); + return ThreadManager.findOrCreateThread(project_id, thread_id, function(error, room) { + if (error != null) { return next(error); } + return MessageManager.deleteMessage(room._id, message_id, function(error, message) { + if (error != null) { return next(error); } + return res.send(204); + }); + }); + }, - _sendMessage: (client_thread_id, req, res, next) -> - {user_id, content} = req?.body - {project_id} = req.params - if !ObjectId.isValid(user_id) - return res.send(400, "Invalid user_id") - if !content? - return res.send(400, "No content provided") - if content.length > @MAX_MESSAGE_LENGTH - return res.send(400, "Content too long (> #{@MAX_MESSAGE_LENGTH} bytes)") - logger.log {client_thread_id, project_id, user_id, content}, "new message received" - ThreadManager.findOrCreateThread project_id, client_thread_id, (error, thread) -> - return next(error) if error? - MessageManager.createMessage thread._id, user_id, content, Date.now(), (error, message) -> - return next(error) if error? - message = MessageFormatter.formatMessageForClientSide(message) - message.room_id = project_id - res.send(201, message) + _sendMessage(client_thread_id, req, res, next) { + const {user_id, content} = req != null ? req.body : undefined; + const {project_id} = req.params; + if (!ObjectId.isValid(user_id)) { + return res.send(400, "Invalid user_id"); + } + if ((content == null)) { + return res.send(400, "No content provided"); + } + if (content.length > this.MAX_MESSAGE_LENGTH) { + return res.send(400, `Content too long (> ${this.MAX_MESSAGE_LENGTH} bytes)`); + } + logger.log({client_thread_id, project_id, user_id, content}, "new message received"); + return ThreadManager.findOrCreateThread(project_id, client_thread_id, function(error, thread) { + if (error != null) { return next(error); } + return MessageManager.createMessage(thread._id, user_id, content, Date.now(), function(error, message) { + if (error != null) { return next(error); } + message = MessageFormatter.formatMessageForClientSide(message); + message.room_id = project_id; + return res.send(201, message); + }); + }); + }, - _getMessages: (client_thread_id, req, res, next) -> - {project_id} = req.params - if req.query?.before? - before = parseInt(req.query.before, 10) - else - before = null - if req.query?.limit? - limit = parseInt(req.query.limit, 10) - else - limit = MessageHttpController.DEFAULT_MESSAGE_LIMIT - logger.log {limit, before, project_id, client_thread_id}, "get message request received" - ThreadManager.findOrCreateThread project_id, client_thread_id, (error, thread) -> - return next(error) if error? - thread_object_id = thread._id - logger.log {limit, before, project_id, client_thread_id, thread_object_id}, "found or created thread" - MessageManager.getMessages thread_object_id, limit, before, (error, messages) -> - return next(error) if error? - messages = MessageFormatter.formatMessagesForClientSide messages - logger.log {project_id, messages}, "got messages" - res.send 200, messages + _getMessages(client_thread_id, req, res, next) { + let before, limit; + const {project_id} = req.params; + if ((req.query != null ? req.query.before : undefined) != null) { + before = parseInt(req.query.before, 10); + } else { + before = null; + } + if ((req.query != null ? req.query.limit : undefined) != null) { + limit = parseInt(req.query.limit, 10); + } else { + limit = MessageHttpController.DEFAULT_MESSAGE_LIMIT; + } + logger.log({limit, before, project_id, client_thread_id}, "get message request received"); + return ThreadManager.findOrCreateThread(project_id, client_thread_id, function(error, thread) { + if (error != null) { return next(error); } + const thread_object_id = thread._id; + logger.log({limit, before, project_id, client_thread_id, thread_object_id}, "found or created thread"); + return MessageManager.getMessages(thread_object_id, limit, before, function(error, messages) { + if (error != null) { return next(error); } + messages = MessageFormatter.formatMessagesForClientSide(messages); + logger.log({project_id, messages}, "got messages"); + return res.send(200, messages); + }); + }); + } +}); diff --git a/services/chat/app/coffee/Features/Messages/MessageManager.js b/services/chat/app/coffee/Features/Messages/MessageManager.js index bda57097da..44e2d7d7a7 100644 --- a/services/chat/app/coffee/Features/Messages/MessageManager.js +++ b/services/chat/app/coffee/Features/Messages/MessageManager.js @@ -1,69 +1,98 @@ -mongojs = require "../../mongojs" -db = mongojs.db -ObjectId = mongojs.ObjectId -async = require "async" -metrics = require 'metrics-sharelatex' -logger = require 'logger-sharelatex' +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS207: Consider shorter variations of null checks + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md + */ +let MessageManager; +const mongojs = require("../../mongojs"); +const { db } = mongojs; +const { ObjectId } = mongojs; +const async = require("async"); +const metrics = require('metrics-sharelatex'); +const logger = require('logger-sharelatex'); -module.exports = MessageManager = - createMessage: (room_id, user_id, content, timestamp, callback = (error, message) ->) -> - newMessageOpts = - content: content - room_id: room_id - user_id: user_id - timestamp: timestamp - newMessageOpts = @_ensureIdsAreObjectIds(newMessageOpts) - db.messages.save newMessageOpts, callback +module.exports = (MessageManager = { + createMessage(room_id, user_id, content, timestamp, callback) { + if (callback == null) { callback = function(error, message) {}; } + let newMessageOpts = { + content, + room_id, + user_id, + timestamp + }; + newMessageOpts = this._ensureIdsAreObjectIds(newMessageOpts); + return db.messages.save(newMessageOpts, callback); + }, - getMessages: (room_id, limit, before, callback = (error, messages) ->) -> - query = - room_id: room_id - if before? - query.timestamp = { $lt: before } - query = @_ensureIdsAreObjectIds(query) - cursor = db.messages.find(query).sort({ timestamp: -1 }).limit(limit) - cursor.toArray callback + getMessages(room_id, limit, before, callback) { + if (callback == null) { callback = function(error, messages) {}; } + let query = + {room_id}; + if (before != null) { + query.timestamp = { $lt: before }; + } + query = this._ensureIdsAreObjectIds(query); + const cursor = db.messages.find(query).sort({ timestamp: -1 }).limit(limit); + return cursor.toArray(callback); + }, - findAllMessagesInRooms: (room_ids, callback = (error, messages) ->) -> - db.messages.find { + findAllMessagesInRooms(room_ids, callback) { + if (callback == null) { callback = function(error, messages) {}; } + return db.messages.find({ room_id: { $in: room_ids } - }, callback + }, callback); + }, - deleteAllMessagesInRoom: (room_id, callback = (error) ->) -> - db.messages.remove { - room_id: room_id - }, callback + deleteAllMessagesInRoom(room_id, callback) { + if (callback == null) { callback = function(error) {}; } + return db.messages.remove({ + room_id + }, callback); + }, - updateMessage: (room_id, message_id, content, timestamp, callback = (error, message) ->) -> - query = @_ensureIdsAreObjectIds( - _id: message_id - room_id: room_id - ) - db.messages.update query, { - $set: - content: content + updateMessage(room_id, message_id, content, timestamp, callback) { + if (callback == null) { callback = function(error, message) {}; } + const query = this._ensureIdsAreObjectIds({ + _id: message_id, + room_id + }); + return db.messages.update(query, { + $set: { + content, edited_at: timestamp - }, (error) -> - return callback(error) if error? - return callback() + } + }, function(error) { + if (error != null) { return callback(error); } + return callback(); + }); + }, - deleteMessage: (room_id, message_id, callback = (error) ->) -> - query = @_ensureIdsAreObjectIds( - _id: message_id - room_id: room_id - ) - db.messages.remove query, (error) -> - return callback(error) if error? - return callback() + deleteMessage(room_id, message_id, callback) { + if (callback == null) { callback = function(error) {}; } + const query = this._ensureIdsAreObjectIds({ + _id: message_id, + room_id + }); + return db.messages.remove(query, function(error) { + if (error != null) { return callback(error); } + return callback(); + }); + }, - _ensureIdsAreObjectIds: (query) -> - if query.user_id? and query.user_id not instanceof ObjectId - query.user_id = ObjectId(query.user_id) - if query.room_id? and query.room_id not instanceof ObjectId - query.room_id = ObjectId(query.room_id) - if query._id? and query._id not instanceof ObjectId - query._id = ObjectId(query._id) - return query + _ensureIdsAreObjectIds(query) { + if ((query.user_id != null) && !(query.user_id instanceof ObjectId)) { + query.user_id = ObjectId(query.user_id); + } + if ((query.room_id != null) && !(query.room_id instanceof ObjectId)) { + query.room_id = ObjectId(query.room_id); + } + if ((query._id != null) && !(query._id instanceof ObjectId)) { + query._id = ObjectId(query._id); + } + return query; + } +}); [ @@ -72,5 +101,4 @@ module.exports = MessageManager = 'findAllMessagesInRooms', 'updateMessage', 'deleteMessage' -].map (method) -> - metrics.timeAsyncMethod(MessageManager, method, 'mongo.MessageManager', logger) +].map(method => metrics.timeAsyncMethod(MessageManager, method, 'mongo.MessageManager', logger)); diff --git a/services/chat/app/coffee/Features/Threads/ThreadManager.js b/services/chat/app/coffee/Features/Threads/ThreadManager.js index d2c4b82d11..7353b1ab7b 100644 --- a/services/chat/app/coffee/Features/Threads/ThreadManager.js +++ b/services/chat/app/coffee/Features/Threads/ThreadManager.js @@ -1,81 +1,107 @@ -mongojs = require("../../mongojs") -db = mongojs.db -ObjectId = mongojs.ObjectId -logger = require('logger-sharelatex') -metrics = require('metrics-sharelatex') +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS207: Consider shorter variations of null checks + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md + */ +let ThreadManager; +const mongojs = require("../../mongojs"); +const { db } = mongojs; +const { ObjectId } = mongojs; +const logger = require('logger-sharelatex'); +const metrics = require('metrics-sharelatex'); -module.exports = ThreadManager = - GLOBAL_THREAD: "GLOBAL" +module.exports = (ThreadManager = { + GLOBAL_THREAD: "GLOBAL", - findOrCreateThread: (project_id, thread_id, callback = (error, thread) ->) -> - project_id = ObjectId(project_id.toString()) - if thread_id != ThreadManager.GLOBAL_THREAD - thread_id = ObjectId(thread_id.toString()) + findOrCreateThread(project_id, thread_id, callback) { + let query, update; + if (callback == null) { callback = function(error, thread) {}; } + project_id = ObjectId(project_id.toString()); + if (thread_id !== ThreadManager.GLOBAL_THREAD) { + thread_id = ObjectId(thread_id.toString()); + } - if thread_id == ThreadManager.GLOBAL_THREAD + if (thread_id === ThreadManager.GLOBAL_THREAD) { query = { - project_id: project_id + project_id, thread_id: { $exists: false } - } + }; update = { - project_id: project_id - } - else + project_id + }; + } else { query = { - project_id: project_id - thread_id: thread_id - } + project_id, + thread_id + }; update = { - project_id: project_id - thread_id: thread_id - } + project_id, + thread_id + }; + } - db.rooms.update query, update, { upsert: true }, (error) -> - return callback(error) if error? - db.rooms.find query, (error, rooms = []) -> - return callback(error) if error? - return callback null, rooms[0] + return db.rooms.update(query, update, { upsert: true }, function(error) { + if (error != null) { return callback(error); } + return db.rooms.find(query, function(error, rooms) { + if (rooms == null) { rooms = []; } + if (error != null) { return callback(error); } + return callback(null, rooms[0]); + }); + }); + }, - findAllThreadRooms: (project_id, callback = (error, rooms) ->) -> - db.rooms.find { - project_id: ObjectId(project_id.toString()) + findAllThreadRooms(project_id, callback) { + if (callback == null) { callback = function(error, rooms) {}; } + return db.rooms.find({ + project_id: ObjectId(project_id.toString()), thread_id: { $exists: true } }, { thread_id: 1, resolved: 1 - }, callback + }, callback); + }, - resolveThread: (project_id, thread_id, user_id, callback = (error) ->) -> - db.rooms.update { - project_id: ObjectId(project_id.toString()) + resolveThread(project_id, thread_id, user_id, callback) { + if (callback == null) { callback = function(error) {}; } + return db.rooms.update({ + project_id: ObjectId(project_id.toString()), thread_id: ObjectId(thread_id.toString()) }, { $set: { resolved: { - user_id: user_id + user_id, ts: new Date() } } - }, callback + }, callback); + }, - reopenThread: (project_id, thread_id, callback = (error) ->) -> - db.rooms.update { - project_id: ObjectId(project_id.toString()) + reopenThread(project_id, thread_id, callback) { + if (callback == null) { callback = function(error) {}; } + return db.rooms.update({ + project_id: ObjectId(project_id.toString()), thread_id: ObjectId(thread_id.toString()) }, { $unset: { resolved: true } - }, callback + }, callback); + }, - deleteThread: (project_id, thread_id, callback = (error, room_id) ->) -> - @findOrCreateThread project_id, thread_id, (error, room) -> - return callback(error) if error? - db.rooms.remove { + deleteThread(project_id, thread_id, callback) { + if (callback == null) { callback = function(error, room_id) {}; } + return this.findOrCreateThread(project_id, thread_id, function(error, room) { + if (error != null) { return callback(error); } + return db.rooms.remove({ _id: room._id - }, (error) -> - return callback(error) if error? - return callback null, room._id + }, function(error) { + if (error != null) { return callback(error); } + return callback(null, room._id); + }); + }); + } +}); [ @@ -84,5 +110,4 @@ module.exports = ThreadManager = 'resolveThread', 'reopenThread', 'deleteThread', -].map (method) -> - metrics.timeAsyncMethod(ThreadManager, method, 'mongo.ThreadManager', logger) +].map(method => metrics.timeAsyncMethod(ThreadManager, method, 'mongo.ThreadManager', logger)); diff --git a/services/chat/app/coffee/mongojs.js b/services/chat/app/coffee/mongojs.js index 44b54c15f4..2627880239 100644 --- a/services/chat/app/coffee/mongojs.js +++ b/services/chat/app/coffee/mongojs.js @@ -1,6 +1,7 @@ -Settings = require("settings-sharelatex") -mongojs = require "mongojs" -db = mongojs(Settings.mongo.url, ["rooms", "messages"]) -module.exports = - db: db +const Settings = require("settings-sharelatex"); +const mongojs = require("mongojs"); +const db = mongojs(Settings.mongo.url, ["rooms", "messages"]); +module.exports = { + db, ObjectId: mongojs.ObjectId +}; diff --git a/services/chat/app/coffee/router.js b/services/chat/app/coffee/router.js index 79004235e7..f0cda13e5d 100644 --- a/services/chat/app/coffee/router.js +++ b/services/chat/app/coffee/router.js @@ -1,39 +1,50 @@ -MessageHttpController = require('./Features/Messages/MessageHttpController') -{ObjectId} = require "./mongojs" +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md + */ +let Router; +const MessageHttpController = require('./Features/Messages/MessageHttpController'); +const {ObjectId} = require("./mongojs"); -module.exports = Router = - route: (app) -> - app.param 'project_id', (req, res, next, project_id) -> - if ObjectId.isValid(project_id) - next() - else - res.send 400, "Invalid project_id" +module.exports = (Router = { + route(app) { + app.param('project_id', function(req, res, next, project_id) { + if (ObjectId.isValid(project_id)) { + return next(); + } else { + return res.send(400, "Invalid project_id"); + } + }); - app.param 'thread_id', (req, res, next, thread_id) -> - if ObjectId.isValid(thread_id) - next() - else - res.send 400, "Invalid thread_id" + app.param('thread_id', function(req, res, next, thread_id) { + if (ObjectId.isValid(thread_id)) { + return next(); + } else { + return res.send(400, "Invalid thread_id"); + } + }); - # These are for backwards compatibility - app.get "/room/:project_id/messages", MessageHttpController.getGlobalMessages - app.post "/room/:project_id/messages", MessageHttpController.sendGlobalMessage + // These are for backwards compatibility + app.get("/room/:project_id/messages", MessageHttpController.getGlobalMessages); + app.post("/room/:project_id/messages", MessageHttpController.sendGlobalMessage); - app.get "/project/:project_id/messages", MessageHttpController.getGlobalMessages - app.post "/project/:project_id/messages", MessageHttpController.sendGlobalMessage + app.get("/project/:project_id/messages", MessageHttpController.getGlobalMessages); + app.post("/project/:project_id/messages", MessageHttpController.sendGlobalMessage); - app.post "/project/:project_id/thread/:thread_id/messages", MessageHttpController.sendThreadMessage - app.get "/project/:project_id/threads", MessageHttpController.getAllThreads + app.post("/project/:project_id/thread/:thread_id/messages", MessageHttpController.sendThreadMessage); + app.get("/project/:project_id/threads", MessageHttpController.getAllThreads); - app.post "/project/:project_id/thread/:thread_id/messages/:message_id/edit", MessageHttpController.editMessage - app.del "/project/:project_id/thread/:thread_id/messages/:message_id", MessageHttpController.deleteMessage + app.post("/project/:project_id/thread/:thread_id/messages/:message_id/edit", MessageHttpController.editMessage); + app.del("/project/:project_id/thread/:thread_id/messages/:message_id", MessageHttpController.deleteMessage); - app.post "/project/:project_id/thread/:thread_id/resolve", MessageHttpController.resolveThread - app.post "/project/:project_id/thread/:thread_id/reopen", MessageHttpController.reopenThread - app.del "/project/:project_id/thread/:thread_id", MessageHttpController.deleteThread + app.post("/project/:project_id/thread/:thread_id/resolve", MessageHttpController.resolveThread); + app.post("/project/:project_id/thread/:thread_id/reopen", MessageHttpController.reopenThread); + app.del("/project/:project_id/thread/:thread_id", MessageHttpController.deleteThread); - app.get "/status", (req, res, next) -> - res.send("chat is alive") + return app.get("/status", (req, res, next) => res.send("chat is alive")); + } +}); diff --git a/services/chat/app/coffee/server.js b/services/chat/app/coffee/server.js index 3b0dc4b42d..c3b6a7de0f 100644 --- a/services/chat/app/coffee/server.js +++ b/services/chat/app/coffee/server.js @@ -1,39 +1,48 @@ -logger = require 'logger-sharelatex' -logger.initialize("chat-sharelatex") -metrics = require("metrics-sharelatex") -metrics.initialize("chat") -Path = require("path") -express = require("express") -app = express() -server = require("http").createServer(app) -Router = require "./router" +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md + */ +const logger = require('logger-sharelatex'); +logger.initialize("chat-sharelatex"); +const metrics = require("metrics-sharelatex"); +metrics.initialize("chat"); +const Path = require("path"); +const express = require("express"); +const app = express(); +const server = require("http").createServer(app); +const Router = require("./router"); -app.use express.bodyParser() -app.use metrics.http.monitor(logger) +app.use(express.bodyParser()); +app.use(metrics.http.monitor(logger)); -if (app.get 'env') == 'development' - console.log "Development Enviroment" - app.use express.errorHandler({ dumpExceptions: true, showStack: true }) - -if (app.get 'env') == 'production' - console.log "Production Enviroment" - app.use express.logger() - app.use express.errorHandler() - -profiler = require "v8-profiler" -app.get "/profile", (req, res) -> - time = parseInt(req.query.time || "1000") - profiler.startProfiling("test") - setTimeout () -> - profile = profiler.stopProfiling("test") - res.json(profile) - , time - -Router.route(app) - -module.exports = { - server: server - app: app +if ((app.get('env')) === 'development') { + console.log("Development Enviroment"); + app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); } +if ((app.get('env')) === 'production') { + console.log("Production Enviroment"); + app.use(express.logger()); + app.use(express.errorHandler()); +} + +const profiler = require("v8-profiler"); +app.get("/profile", function(req, res) { + const time = parseInt(req.query.time || "1000"); + profiler.startProfiling("test"); + return setTimeout(function() { + const profile = profiler.stopProfiling("test"); + return res.json(profile); + } + , time); +}); + +Router.route(app); + +module.exports = { + server, + app +}; + From 45f865ebbb1a3e8332f9a28cf3dc75b5836e51ca Mon Sep 17 00:00:00 2001 From: decaffeinate Date: Thu, 20 Dec 2018 14:13:56 -0500 Subject: [PATCH 22/33] decaffeinate: Run post-processing cleanups on MessageFormatter.coffee and 6 other files --- .../chat/app/coffee/Features/Messages/MessageFormatter.js | 6 ++++++ .../app/coffee/Features/Messages/MessageHttpController.js | 7 +++++++ .../chat/app/coffee/Features/Messages/MessageManager.js | 8 ++++++++ .../chat/app/coffee/Features/Threads/ThreadManager.js | 7 +++++++ services/chat/app/coffee/mongojs.js | 2 ++ services/chat/app/coffee/router.js | 7 +++++++ services/chat/app/coffee/server.js | 5 +++++ 7 files changed, 42 insertions(+) diff --git a/services/chat/app/coffee/Features/Messages/MessageFormatter.js b/services/chat/app/coffee/Features/Messages/MessageFormatter.js index eacfa41c1c..d928b29ccc 100644 --- a/services/chat/app/coffee/Features/Messages/MessageFormatter.js +++ b/services/chat/app/coffee/Features/Messages/MessageFormatter.js @@ -1,3 +1,9 @@ +/* eslint-disable + camelcase, + max-len, +*/ +// TODO: This file was created by bulk-decaffeinate. +// Fix any style issues and re-enable lint. /* * decaffeinate suggestions: * DS101: Remove unnecessary use of Array.from diff --git a/services/chat/app/coffee/Features/Messages/MessageHttpController.js b/services/chat/app/coffee/Features/Messages/MessageHttpController.js index c2144e3885..f913c594d8 100644 --- a/services/chat/app/coffee/Features/Messages/MessageHttpController.js +++ b/services/chat/app/coffee/Features/Messages/MessageHttpController.js @@ -1,3 +1,10 @@ +/* eslint-disable + camelcase, + max-len, + no-unused-vars, +*/ +// TODO: This file was created by bulk-decaffeinate. +// Fix any style issues and re-enable lint. /* * decaffeinate suggestions: * DS102: Remove unnecessary code created because of implicit returns diff --git a/services/chat/app/coffee/Features/Messages/MessageManager.js b/services/chat/app/coffee/Features/Messages/MessageManager.js index 44e2d7d7a7..3bc542a20b 100644 --- a/services/chat/app/coffee/Features/Messages/MessageManager.js +++ b/services/chat/app/coffee/Features/Messages/MessageManager.js @@ -1,3 +1,11 @@ +/* eslint-disable + camelcase, + handle-callback-err, + max-len, + no-unused-vars, +*/ +// TODO: This file was created by bulk-decaffeinate. +// Fix any style issues and re-enable lint. /* * decaffeinate suggestions: * DS102: Remove unnecessary code created because of implicit returns diff --git a/services/chat/app/coffee/Features/Threads/ThreadManager.js b/services/chat/app/coffee/Features/Threads/ThreadManager.js index 7353b1ab7b..60a408bb4d 100644 --- a/services/chat/app/coffee/Features/Threads/ThreadManager.js +++ b/services/chat/app/coffee/Features/Threads/ThreadManager.js @@ -1,3 +1,10 @@ +/* eslint-disable + camelcase, + handle-callback-err, + max-len, +*/ +// TODO: This file was created by bulk-decaffeinate. +// Fix any style issues and re-enable lint. /* * decaffeinate suggestions: * DS102: Remove unnecessary code created because of implicit returns diff --git a/services/chat/app/coffee/mongojs.js b/services/chat/app/coffee/mongojs.js index 2627880239..4182b6f8c0 100644 --- a/services/chat/app/coffee/mongojs.js +++ b/services/chat/app/coffee/mongojs.js @@ -1,3 +1,5 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. const Settings = require("settings-sharelatex"); const mongojs = require("mongojs"); const db = mongojs(Settings.mongo.url, ["rooms", "messages"]); diff --git a/services/chat/app/coffee/router.js b/services/chat/app/coffee/router.js index f0cda13e5d..5a9f85b47a 100644 --- a/services/chat/app/coffee/router.js +++ b/services/chat/app/coffee/router.js @@ -1,3 +1,10 @@ +/* eslint-disable + camelcase, + max-len, + no-unused-vars, +*/ +// TODO: This file was created by bulk-decaffeinate. +// Fix any style issues and re-enable lint. /* * decaffeinate suggestions: * DS102: Remove unnecessary code created because of implicit returns diff --git a/services/chat/app/coffee/server.js b/services/chat/app/coffee/server.js index c3b6a7de0f..7e795833e3 100644 --- a/services/chat/app/coffee/server.js +++ b/services/chat/app/coffee/server.js @@ -1,3 +1,8 @@ +/* eslint-disable + no-unused-vars, +*/ +// TODO: This file was created by bulk-decaffeinate. +// Fix any style issues and re-enable lint. /* * decaffeinate suggestions: * DS102: Remove unnecessary code created because of implicit returns From 976d1675e6a0cc89c313ed71dd9e838cdee98f54 Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Thu, 20 Dec 2018 14:13:56 -0500 Subject: [PATCH 23/33] Rename app/coffee dir to app/js --- .../chat/app/{coffee => js}/Features/Messages/MessageFormatter.js | 0 .../app/{coffee => js}/Features/Messages/MessageHttpController.js | 0 .../chat/app/{coffee => js}/Features/Messages/MessageManager.js | 0 .../chat/app/{coffee => js}/Features/Threads/ThreadManager.js | 0 services/chat/app/{coffee => js}/mongojs.js | 0 services/chat/app/{coffee => js}/router.js | 0 services/chat/app/{coffee => js}/server.js | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename services/chat/app/{coffee => js}/Features/Messages/MessageFormatter.js (100%) rename services/chat/app/{coffee => js}/Features/Messages/MessageHttpController.js (100%) rename services/chat/app/{coffee => js}/Features/Messages/MessageManager.js (100%) rename services/chat/app/{coffee => js}/Features/Threads/ThreadManager.js (100%) rename services/chat/app/{coffee => js}/mongojs.js (100%) rename services/chat/app/{coffee => js}/router.js (100%) rename services/chat/app/{coffee => js}/server.js (100%) diff --git a/services/chat/app/coffee/Features/Messages/MessageFormatter.js b/services/chat/app/js/Features/Messages/MessageFormatter.js similarity index 100% rename from services/chat/app/coffee/Features/Messages/MessageFormatter.js rename to services/chat/app/js/Features/Messages/MessageFormatter.js diff --git a/services/chat/app/coffee/Features/Messages/MessageHttpController.js b/services/chat/app/js/Features/Messages/MessageHttpController.js similarity index 100% rename from services/chat/app/coffee/Features/Messages/MessageHttpController.js rename to services/chat/app/js/Features/Messages/MessageHttpController.js diff --git a/services/chat/app/coffee/Features/Messages/MessageManager.js b/services/chat/app/js/Features/Messages/MessageManager.js similarity index 100% rename from services/chat/app/coffee/Features/Messages/MessageManager.js rename to services/chat/app/js/Features/Messages/MessageManager.js diff --git a/services/chat/app/coffee/Features/Threads/ThreadManager.js b/services/chat/app/js/Features/Threads/ThreadManager.js similarity index 100% rename from services/chat/app/coffee/Features/Threads/ThreadManager.js rename to services/chat/app/js/Features/Threads/ThreadManager.js diff --git a/services/chat/app/coffee/mongojs.js b/services/chat/app/js/mongojs.js similarity index 100% rename from services/chat/app/coffee/mongojs.js rename to services/chat/app/js/mongojs.js diff --git a/services/chat/app/coffee/router.js b/services/chat/app/js/router.js similarity index 100% rename from services/chat/app/coffee/router.js rename to services/chat/app/js/router.js diff --git a/services/chat/app/coffee/server.js b/services/chat/app/js/server.js similarity index 100% rename from services/chat/app/coffee/server.js rename to services/chat/app/js/server.js From 03093dc283bb386942727c85aca9270a5d028bfd Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Thu, 20 Dec 2018 14:13:59 -0500 Subject: [PATCH 24/33] Prettier: convert app/js decaffeinated files to Prettier format --- .../js/Features/Messages/MessageFormatter.js | 126 +++--- .../Messages/MessageHttpController.js | 378 +++++++++++------- .../js/Features/Messages/MessageManager.js | 216 +++++----- .../app/js/Features/Threads/ThreadManager.js | 241 ++++++----- services/chat/app/js/mongojs.js | 12 +- services/chat/app/js/router.js | 101 +++-- services/chat/app/js/server.js | 67 ++-- 7 files changed, 671 insertions(+), 470 deletions(-) diff --git a/services/chat/app/js/Features/Messages/MessageFormatter.js b/services/chat/app/js/Features/Messages/MessageFormatter.js index d928b29ccc..fe230f5587 100644 --- a/services/chat/app/js/Features/Messages/MessageFormatter.js +++ b/services/chat/app/js/Features/Messages/MessageFormatter.js @@ -11,66 +11,70 @@ * DS207: Consider shorter variations of null checks * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ -let MessageFormatter; -module.exports = (MessageFormatter = { - formatMessageForClientSide(message) { - if (message._id != null) { - message.id = message._id.toString(); - delete message._id; - } - const formattedMessage = { - id: message.id, - content: message.content, - timestamp: message.timestamp, - user_id: message.user_id - }; - if (message.edited_at != null) { - formattedMessage.edited_at = message.edited_at; - } - return formattedMessage; - }, +let MessageFormatter +module.exports = MessageFormatter = { + formatMessageForClientSide(message) { + if (message._id != null) { + message.id = message._id.toString() + delete message._id + } + const formattedMessage = { + id: message.id, + content: message.content, + timestamp: message.timestamp, + user_id: message.user_id + } + if (message.edited_at != null) { + formattedMessage.edited_at = message.edited_at + } + return formattedMessage + }, - formatMessagesForClientSide(messages) { - return (Array.from(messages).map((message) => this.formatMessageForClientSide(message))); - }, - - groupMessagesByThreads(rooms, messages) { - let room, thread; - const rooms_by_id = {}; - for (room of Array.from(rooms)) { - rooms_by_id[room._id.toString()] = room; - } + formatMessagesForClientSide(messages) { + return Array.from(messages).map(message => + this.formatMessageForClientSide(message) + ) + }, - const threads = {}; - const getThread = function(room) { - const thread_id = room.thread_id.toString(); - if (threads[thread_id] != null) { - return threads[thread_id]; - } else { - const thread = { messages: [] }; - if (room.resolved != null) { - thread.resolved = true; - thread.resolved_at = room.resolved.ts; - thread.resolved_by_user_id = room.resolved.user_id; - } - threads[thread_id] = thread; - return thread; - } - }; - - for (let message of Array.from(messages)) { - room = rooms_by_id[message.room_id.toString()]; - if (room != null) { - thread = getThread(room); - thread.messages.push(MessageFormatter.formatMessageForClientSide(message)); - } - } - - for (let thread_id in threads) { - thread = threads[thread_id]; - thread.messages.sort((a,b) => a.timestamp - b.timestamp); - } - - return threads; - } -}); \ No newline at end of file + groupMessagesByThreads(rooms, messages) { + let room, thread + const rooms_by_id = {} + for (room of Array.from(rooms)) { + rooms_by_id[room._id.toString()] = room + } + + const threads = {} + const getThread = function(room) { + const thread_id = room.thread_id.toString() + if (threads[thread_id] != null) { + return threads[thread_id] + } else { + const thread = { messages: [] } + if (room.resolved != null) { + thread.resolved = true + thread.resolved_at = room.resolved.ts + thread.resolved_by_user_id = room.resolved.user_id + } + threads[thread_id] = thread + return thread + } + } + + for (let message of Array.from(messages)) { + room = rooms_by_id[message.room_id.toString()] + if (room != null) { + thread = getThread(room) + thread.messages.push( + MessageFormatter.formatMessageForClientSide(message) + ) + } + } + + for (let thread_id in threads) { + thread = threads[thread_id] + thread.messages.sort((a, b) => a.timestamp - b.timestamp) + } + + return threads + } +} diff --git a/services/chat/app/js/Features/Messages/MessageHttpController.js b/services/chat/app/js/Features/Messages/MessageHttpController.js index f913c594d8..cac289c494 100644 --- a/services/chat/app/js/Features/Messages/MessageHttpController.js +++ b/services/chat/app/js/Features/Messages/MessageHttpController.js @@ -11,148 +11,248 @@ * DS207: Consider shorter variations of null checks * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ -let MessageHttpController; -const logger = require("logger-sharelatex"); -const metrics = require("metrics-sharelatex"); -const MessageManager = require("./MessageManager"); -const MessageFormatter = require("./MessageFormatter"); -const ThreadManager = require("../Threads/ThreadManager"); -const {ObjectId} = require("../../mongojs"); +let MessageHttpController +const logger = require('logger-sharelatex') +const metrics = require('metrics-sharelatex') +const MessageManager = require('./MessageManager') +const MessageFormatter = require('./MessageFormatter') +const ThreadManager = require('../Threads/ThreadManager') +const { ObjectId } = require('../../mongojs') -module.exports = (MessageHttpController = { - DEFAULT_MESSAGE_LIMIT: 50, - MAX_MESSAGE_LENGTH: 10 * 1024, // 10kb, about 1,500 words - - getGlobalMessages(req, res, next) { - return MessageHttpController._getMessages(ThreadManager.GLOBAL_THREAD, req, res, next); - }, +module.exports = MessageHttpController = { + DEFAULT_MESSAGE_LIMIT: 50, + MAX_MESSAGE_LENGTH: 10 * 1024, // 10kb, about 1,500 words - sendGlobalMessage(req, res, next) { - return MessageHttpController._sendMessage(ThreadManager.GLOBAL_THREAD, req, res, next); - }, - - sendThreadMessage(req, res, next) { - return MessageHttpController._sendMessage(req.params.thread_id, req, res, next); - }, - - getAllThreads(req, res, next) { - const {project_id} = req.params; - logger.log({project_id}, "getting all threads"); - return ThreadManager.findAllThreadRooms(project_id, function(error, rooms) { - if (error != null) { return next(error); } - const room_ids = rooms.map(r => r._id); - return MessageManager.findAllMessagesInRooms(room_ids, function(error, messages) { - if (error != null) { return next(error); } - const threads = MessageFormatter.groupMessagesByThreads(rooms, messages); - return res.json(threads); - }); - }); - }, - - resolveThread(req, res, next) { - const {project_id, thread_id} = req.params; - const {user_id} = req.body; - logger.log({user_id, project_id, thread_id}, "marking thread as resolved"); - return ThreadManager.resolveThread(project_id, thread_id, user_id, function(error) { - if (error != null) { return next(error); } - return res.send(204); - }); - }, // No content + getGlobalMessages(req, res, next) { + return MessageHttpController._getMessages( + ThreadManager.GLOBAL_THREAD, + req, + res, + next + ) + }, - reopenThread(req, res, next) { - const {project_id, thread_id} = req.params; - logger.log({project_id, thread_id}, "reopening thread"); - return ThreadManager.reopenThread(project_id, thread_id, function(error) { - if (error != null) { return next(error); } - return res.send(204); - }); - }, // No content - - deleteThread(req, res, next) { - const {project_id, thread_id} = req.params; - logger.log({project_id, thread_id}, "deleting thread"); - return ThreadManager.deleteThread(project_id, thread_id, function(error, room_id) { - if (error != null) { return next(error); } - return MessageManager.deleteAllMessagesInRoom(room_id, function(error) { - if (error != null) { return next(error); } - return res.send(204); - }); - }); - }, // No content - - editMessage(req, res, next) { - const {content} = req != null ? req.body : undefined; - const {project_id, thread_id, message_id} = req.params; - logger.log({project_id, thread_id, message_id, content}, "editing message"); - return ThreadManager.findOrCreateThread(project_id, thread_id, function(error, room) { - if (error != null) { return next(error); } - return MessageManager.updateMessage(room._id, message_id, content, Date.now(), function(error) { - if (error != null) { return next(error); } - return res.send(204); - }); - }); - }, + sendGlobalMessage(req, res, next) { + return MessageHttpController._sendMessage( + ThreadManager.GLOBAL_THREAD, + req, + res, + next + ) + }, - deleteMessage(req, res, next) { - const {project_id, thread_id, message_id} = req.params; - logger.log({project_id, thread_id, message_id}, "deleting message"); - return ThreadManager.findOrCreateThread(project_id, thread_id, function(error, room) { - if (error != null) { return next(error); } - return MessageManager.deleteMessage(room._id, message_id, function(error, message) { - if (error != null) { return next(error); } - return res.send(204); - }); - }); - }, + sendThreadMessage(req, res, next) { + return MessageHttpController._sendMessage( + req.params.thread_id, + req, + res, + next + ) + }, - _sendMessage(client_thread_id, req, res, next) { - const {user_id, content} = req != null ? req.body : undefined; - const {project_id} = req.params; - if (!ObjectId.isValid(user_id)) { - return res.send(400, "Invalid user_id"); - } - if ((content == null)) { - return res.send(400, "No content provided"); - } - if (content.length > this.MAX_MESSAGE_LENGTH) { - return res.send(400, `Content too long (> ${this.MAX_MESSAGE_LENGTH} bytes)`); - } - logger.log({client_thread_id, project_id, user_id, content}, "new message received"); - return ThreadManager.findOrCreateThread(project_id, client_thread_id, function(error, thread) { - if (error != null) { return next(error); } - return MessageManager.createMessage(thread._id, user_id, content, Date.now(), function(error, message) { - if (error != null) { return next(error); } - message = MessageFormatter.formatMessageForClientSide(message); - message.room_id = project_id; - return res.send(201, message); - }); - }); - }, + getAllThreads(req, res, next) { + const { project_id } = req.params + logger.log({ project_id }, 'getting all threads') + return ThreadManager.findAllThreadRooms(project_id, function(error, rooms) { + if (error != null) { + return next(error) + } + const room_ids = rooms.map(r => r._id) + return MessageManager.findAllMessagesInRooms(room_ids, function( + error, + messages + ) { + if (error != null) { + return next(error) + } + const threads = MessageFormatter.groupMessagesByThreads(rooms, messages) + return res.json(threads) + }) + }) + }, - _getMessages(client_thread_id, req, res, next) { - let before, limit; - const {project_id} = req.params; - if ((req.query != null ? req.query.before : undefined) != null) { - before = parseInt(req.query.before, 10); - } else { - before = null; - } - if ((req.query != null ? req.query.limit : undefined) != null) { - limit = parseInt(req.query.limit, 10); - } else { - limit = MessageHttpController.DEFAULT_MESSAGE_LIMIT; - } - logger.log({limit, before, project_id, client_thread_id}, "get message request received"); - return ThreadManager.findOrCreateThread(project_id, client_thread_id, function(error, thread) { - if (error != null) { return next(error); } - const thread_object_id = thread._id; - logger.log({limit, before, project_id, client_thread_id, thread_object_id}, "found or created thread"); - return MessageManager.getMessages(thread_object_id, limit, before, function(error, messages) { - if (error != null) { return next(error); } - messages = MessageFormatter.formatMessagesForClientSide(messages); - logger.log({project_id, messages}, "got messages"); - return res.send(200, messages); - }); - }); - } -}); + resolveThread(req, res, next) { + const { project_id, thread_id } = req.params + const { user_id } = req.body + logger.log({ user_id, project_id, thread_id }, 'marking thread as resolved') + return ThreadManager.resolveThread(project_id, thread_id, user_id, function( + error + ) { + if (error != null) { + return next(error) + } + return res.send(204) + }) + }, // No content + + reopenThread(req, res, next) { + const { project_id, thread_id } = req.params + logger.log({ project_id, thread_id }, 'reopening thread') + return ThreadManager.reopenThread(project_id, thread_id, function(error) { + if (error != null) { + return next(error) + } + return res.send(204) + }) + }, // No content + + deleteThread(req, res, next) { + const { project_id, thread_id } = req.params + logger.log({ project_id, thread_id }, 'deleting thread') + return ThreadManager.deleteThread(project_id, thread_id, function( + error, + room_id + ) { + if (error != null) { + return next(error) + } + return MessageManager.deleteAllMessagesInRoom(room_id, function(error) { + if (error != null) { + return next(error) + } + return res.send(204) + }) + }) + }, // No content + + editMessage(req, res, next) { + const { content } = req != null ? req.body : undefined + const { project_id, thread_id, message_id } = req.params + logger.log( + { project_id, thread_id, message_id, content }, + 'editing message' + ) + return ThreadManager.findOrCreateThread(project_id, thread_id, function( + error, + room + ) { + if (error != null) { + return next(error) + } + return MessageManager.updateMessage( + room._id, + message_id, + content, + Date.now(), + function(error) { + if (error != null) { + return next(error) + } + return res.send(204) + } + ) + }) + }, + + deleteMessage(req, res, next) { + const { project_id, thread_id, message_id } = req.params + logger.log({ project_id, thread_id, message_id }, 'deleting message') + return ThreadManager.findOrCreateThread(project_id, thread_id, function( + error, + room + ) { + if (error != null) { + return next(error) + } + return MessageManager.deleteMessage(room._id, message_id, function( + error, + message + ) { + if (error != null) { + return next(error) + } + return res.send(204) + }) + }) + }, + + _sendMessage(client_thread_id, req, res, next) { + const { user_id, content } = req != null ? req.body : undefined + const { project_id } = req.params + if (!ObjectId.isValid(user_id)) { + return res.send(400, 'Invalid user_id') + } + if (content == null) { + return res.send(400, 'No content provided') + } + if (content.length > this.MAX_MESSAGE_LENGTH) { + return res.send( + 400, + `Content too long (> ${this.MAX_MESSAGE_LENGTH} bytes)` + ) + } + logger.log( + { client_thread_id, project_id, user_id, content }, + 'new message received' + ) + return ThreadManager.findOrCreateThread( + project_id, + client_thread_id, + function(error, thread) { + if (error != null) { + return next(error) + } + return MessageManager.createMessage( + thread._id, + user_id, + content, + Date.now(), + function(error, message) { + if (error != null) { + return next(error) + } + message = MessageFormatter.formatMessageForClientSide(message) + message.room_id = project_id + return res.send(201, message) + } + ) + } + ) + }, + + _getMessages(client_thread_id, req, res, next) { + let before, limit + const { project_id } = req.params + if ((req.query != null ? req.query.before : undefined) != null) { + before = parseInt(req.query.before, 10) + } else { + before = null + } + if ((req.query != null ? req.query.limit : undefined) != null) { + limit = parseInt(req.query.limit, 10) + } else { + limit = MessageHttpController.DEFAULT_MESSAGE_LIMIT + } + logger.log( + { limit, before, project_id, client_thread_id }, + 'get message request received' + ) + return ThreadManager.findOrCreateThread( + project_id, + client_thread_id, + function(error, thread) { + if (error != null) { + return next(error) + } + const thread_object_id = thread._id + logger.log( + { limit, before, project_id, client_thread_id, thread_object_id }, + 'found or created thread' + ) + return MessageManager.getMessages( + thread_object_id, + limit, + before, + function(error, messages) { + if (error != null) { + return next(error) + } + messages = MessageFormatter.formatMessagesForClientSide(messages) + logger.log({ project_id, messages }, 'got messages') + return res.send(200, messages) + } + ) + } + ) + } +} diff --git a/services/chat/app/js/Features/Messages/MessageManager.js b/services/chat/app/js/Features/Messages/MessageManager.js index 3bc542a20b..0344aed97d 100644 --- a/services/chat/app/js/Features/Messages/MessageManager.js +++ b/services/chat/app/js/Features/Messages/MessageManager.js @@ -12,101 +12,135 @@ * DS207: Consider shorter variations of null checks * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ -let MessageManager; -const mongojs = require("../../mongojs"); -const { db } = mongojs; -const { ObjectId } = mongojs; -const async = require("async"); -const metrics = require('metrics-sharelatex'); -const logger = require('logger-sharelatex'); +let MessageManager +const mongojs = require('../../mongojs') +const { db } = mongojs +const { ObjectId } = mongojs +const async = require('async') +const metrics = require('metrics-sharelatex') +const logger = require('logger-sharelatex') -module.exports = (MessageManager = { - createMessage(room_id, user_id, content, timestamp, callback) { - if (callback == null) { callback = function(error, message) {}; } - let newMessageOpts = { - content, - room_id, - user_id, - timestamp - }; - newMessageOpts = this._ensureIdsAreObjectIds(newMessageOpts); - return db.messages.save(newMessageOpts, callback); - }, +module.exports = MessageManager = { + createMessage(room_id, user_id, content, timestamp, callback) { + if (callback == null) { + callback = function(error, message) {} + } + let newMessageOpts = { + content, + room_id, + user_id, + timestamp + } + newMessageOpts = this._ensureIdsAreObjectIds(newMessageOpts) + return db.messages.save(newMessageOpts, callback) + }, - getMessages(room_id, limit, before, callback) { - if (callback == null) { callback = function(error, messages) {}; } - let query = - {room_id}; - if (before != null) { - query.timestamp = { $lt: before }; - } - query = this._ensureIdsAreObjectIds(query); - const cursor = db.messages.find(query).sort({ timestamp: -1 }).limit(limit); - return cursor.toArray(callback); - }, - - findAllMessagesInRooms(room_ids, callback) { - if (callback == null) { callback = function(error, messages) {}; } - return db.messages.find({ - room_id: { $in: room_ids } - }, callback); - }, + getMessages(room_id, limit, before, callback) { + if (callback == null) { + callback = function(error, messages) {} + } + let query = { room_id } + if (before != null) { + query.timestamp = { $lt: before } + } + query = this._ensureIdsAreObjectIds(query) + const cursor = db.messages + .find(query) + .sort({ timestamp: -1 }) + .limit(limit) + return cursor.toArray(callback) + }, - deleteAllMessagesInRoom(room_id, callback) { - if (callback == null) { callback = function(error) {}; } - return db.messages.remove({ - room_id - }, callback); - }, - - updateMessage(room_id, message_id, content, timestamp, callback) { - if (callback == null) { callback = function(error, message) {}; } - const query = this._ensureIdsAreObjectIds({ - _id: message_id, - room_id - }); - return db.messages.update(query, { - $set: { - content, - edited_at: timestamp - } - }, function(error) { - if (error != null) { return callback(error); } - return callback(); - }); - }, + findAllMessagesInRooms(room_ids, callback) { + if (callback == null) { + callback = function(error, messages) {} + } + return db.messages.find( + { + room_id: { $in: room_ids } + }, + callback + ) + }, - deleteMessage(room_id, message_id, callback) { - if (callback == null) { callback = function(error) {}; } - const query = this._ensureIdsAreObjectIds({ - _id: message_id, - room_id - }); - return db.messages.remove(query, function(error) { - if (error != null) { return callback(error); } - return callback(); - }); - }, + deleteAllMessagesInRoom(room_id, callback) { + if (callback == null) { + callback = function(error) {} + } + return db.messages.remove( + { + room_id + }, + callback + ) + }, - _ensureIdsAreObjectIds(query) { - if ((query.user_id != null) && !(query.user_id instanceof ObjectId)) { - query.user_id = ObjectId(query.user_id); - } - if ((query.room_id != null) && !(query.room_id instanceof ObjectId)) { - query.room_id = ObjectId(query.room_id); - } - if ((query._id != null) && !(query._id instanceof ObjectId)) { - query._id = ObjectId(query._id); - } - return query; - } -}); + updateMessage(room_id, message_id, content, timestamp, callback) { + if (callback == null) { + callback = function(error, message) {} + } + const query = this._ensureIdsAreObjectIds({ + _id: message_id, + room_id + }) + return db.messages.update( + query, + { + $set: { + content, + edited_at: timestamp + } + }, + function(error) { + if (error != null) { + return callback(error) + } + return callback() + } + ) + }, + deleteMessage(room_id, message_id, callback) { + if (callback == null) { + callback = function(error) {} + } + const query = this._ensureIdsAreObjectIds({ + _id: message_id, + room_id + }) + return db.messages.remove(query, function(error) { + if (error != null) { + return callback(error) + } + return callback() + }) + }, -[ - 'createMessage', - 'getMessages', - 'findAllMessagesInRooms', - 'updateMessage', - 'deleteMessage' -].map(method => metrics.timeAsyncMethod(MessageManager, method, 'mongo.MessageManager', logger)); + _ensureIdsAreObjectIds(query) { + if (query.user_id != null && !(query.user_id instanceof ObjectId)) { + query.user_id = ObjectId(query.user_id) + } + if (query.room_id != null && !(query.room_id instanceof ObjectId)) { + query.room_id = ObjectId(query.room_id) + } + if (query._id != null && !(query._id instanceof ObjectId)) { + query._id = ObjectId(query._id) + } + return query + } +} + +;[ + 'createMessage', + 'getMessages', + 'findAllMessagesInRooms', + 'updateMessage', + 'deleteMessage' +].map(method => + metrics.timeAsyncMethod( + MessageManager, + method, + 'mongo.MessageManager', + logger + ) +) diff --git a/services/chat/app/js/Features/Threads/ThreadManager.js b/services/chat/app/js/Features/Threads/ThreadManager.js index 60a408bb4d..880f814eb3 100644 --- a/services/chat/app/js/Features/Threads/ThreadManager.js +++ b/services/chat/app/js/Features/Threads/ThreadManager.js @@ -11,110 +11,149 @@ * DS207: Consider shorter variations of null checks * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ -let ThreadManager; -const mongojs = require("../../mongojs"); -const { db } = mongojs; -const { ObjectId } = mongojs; -const logger = require('logger-sharelatex'); -const metrics = require('metrics-sharelatex'); +let ThreadManager +const mongojs = require('../../mongojs') +const { db } = mongojs +const { ObjectId } = mongojs +const logger = require('logger-sharelatex') +const metrics = require('metrics-sharelatex') -module.exports = (ThreadManager = { - GLOBAL_THREAD: "GLOBAL", +module.exports = ThreadManager = { + GLOBAL_THREAD: 'GLOBAL', - findOrCreateThread(project_id, thread_id, callback) { - let query, update; - if (callback == null) { callback = function(error, thread) {}; } - project_id = ObjectId(project_id.toString()); - if (thread_id !== ThreadManager.GLOBAL_THREAD) { - thread_id = ObjectId(thread_id.toString()); - } + findOrCreateThread(project_id, thread_id, callback) { + let query, update + if (callback == null) { + callback = function(error, thread) {} + } + project_id = ObjectId(project_id.toString()) + if (thread_id !== ThreadManager.GLOBAL_THREAD) { + thread_id = ObjectId(thread_id.toString()) + } - if (thread_id === ThreadManager.GLOBAL_THREAD) { - query = { - project_id, - thread_id: { $exists: false } - }; - update = { - project_id - }; - } else { - query = { - project_id, - thread_id - }; - update = { - project_id, - thread_id - }; - } - - return db.rooms.update(query, update, { upsert: true }, function(error) { - if (error != null) { return callback(error); } - return db.rooms.find(query, function(error, rooms) { - if (rooms == null) { rooms = []; } - if (error != null) { return callback(error); } - return callback(null, rooms[0]); - }); - }); - }, - - findAllThreadRooms(project_id, callback) { - if (callback == null) { callback = function(error, rooms) {}; } - return db.rooms.find({ - project_id: ObjectId(project_id.toString()), - thread_id: { $exists: true } - }, { - thread_id: 1, - resolved: 1 - }, callback); - }, - - resolveThread(project_id, thread_id, user_id, callback) { - if (callback == null) { callback = function(error) {}; } - return db.rooms.update({ - project_id: ObjectId(project_id.toString()), - thread_id: ObjectId(thread_id.toString()) - }, { - $set: { - resolved: { - user_id, - ts: new Date() - } - } - }, callback); - }, - - reopenThread(project_id, thread_id, callback) { - if (callback == null) { callback = function(error) {}; } - return db.rooms.update({ - project_id: ObjectId(project_id.toString()), - thread_id: ObjectId(thread_id.toString()) - }, { - $unset: { - resolved: true - } - }, callback); - }, + if (thread_id === ThreadManager.GLOBAL_THREAD) { + query = { + project_id, + thread_id: { $exists: false } + } + update = { + project_id + } + } else { + query = { + project_id, + thread_id + } + update = { + project_id, + thread_id + } + } - deleteThread(project_id, thread_id, callback) { - if (callback == null) { callback = function(error, room_id) {}; } - return this.findOrCreateThread(project_id, thread_id, function(error, room) { - if (error != null) { return callback(error); } - return db.rooms.remove({ - _id: room._id - }, function(error) { - if (error != null) { return callback(error); } - return callback(null, room._id); - }); - }); - } -}); + return db.rooms.update(query, update, { upsert: true }, function(error) { + if (error != null) { + return callback(error) + } + return db.rooms.find(query, function(error, rooms) { + if (rooms == null) { + rooms = [] + } + if (error != null) { + return callback(error) + } + return callback(null, rooms[0]) + }) + }) + }, + findAllThreadRooms(project_id, callback) { + if (callback == null) { + callback = function(error, rooms) {} + } + return db.rooms.find( + { + project_id: ObjectId(project_id.toString()), + thread_id: { $exists: true } + }, + { + thread_id: 1, + resolved: 1 + }, + callback + ) + }, -[ - 'findOrCreateThread', - 'findAllThreadRooms', - 'resolveThread', - 'reopenThread', - 'deleteThread', -].map(method => metrics.timeAsyncMethod(ThreadManager, method, 'mongo.ThreadManager', logger)); + resolveThread(project_id, thread_id, user_id, callback) { + if (callback == null) { + callback = function(error) {} + } + return db.rooms.update( + { + project_id: ObjectId(project_id.toString()), + thread_id: ObjectId(thread_id.toString()) + }, + { + $set: { + resolved: { + user_id, + ts: new Date() + } + } + }, + callback + ) + }, + + reopenThread(project_id, thread_id, callback) { + if (callback == null) { + callback = function(error) {} + } + return db.rooms.update( + { + project_id: ObjectId(project_id.toString()), + thread_id: ObjectId(thread_id.toString()) + }, + { + $unset: { + resolved: true + } + }, + callback + ) + }, + + deleteThread(project_id, thread_id, callback) { + if (callback == null) { + callback = function(error, room_id) {} + } + return this.findOrCreateThread(project_id, thread_id, function( + error, + room + ) { + if (error != null) { + return callback(error) + } + return db.rooms.remove( + { + _id: room._id + }, + function(error) { + if (error != null) { + return callback(error) + } + return callback(null, room._id) + } + ) + }) + } +} + +;[ + 'findOrCreateThread', + 'findAllThreadRooms', + 'resolveThread', + 'reopenThread', + 'deleteThread' +].map(method => + metrics.timeAsyncMethod(ThreadManager, method, 'mongo.ThreadManager', logger) +) diff --git a/services/chat/app/js/mongojs.js b/services/chat/app/js/mongojs.js index 4182b6f8c0..f73f6fc93f 100644 --- a/services/chat/app/js/mongojs.js +++ b/services/chat/app/js/mongojs.js @@ -1,9 +1,9 @@ // TODO: This file was created by bulk-decaffeinate. // Sanity-check the conversion and remove this comment. -const Settings = require("settings-sharelatex"); -const mongojs = require("mongojs"); -const db = mongojs(Settings.mongo.url, ["rooms", "messages"]); +const Settings = require('settings-sharelatex') +const mongojs = require('mongojs') +const db = mongojs(Settings.mongo.url, ['rooms', 'messages']) module.exports = { - db, - ObjectId: mongojs.ObjectId -}; + db, + ObjectId: mongojs.ObjectId +} diff --git a/services/chat/app/js/router.js b/services/chat/app/js/router.js index 5a9f85b47a..b7e2164532 100644 --- a/services/chat/app/js/router.js +++ b/services/chat/app/js/router.js @@ -10,48 +10,75 @@ * DS102: Remove unnecessary code created because of implicit returns * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ -let Router; -const MessageHttpController = require('./Features/Messages/MessageHttpController'); -const {ObjectId} = require("./mongojs"); +let Router +const MessageHttpController = require('./Features/Messages/MessageHttpController') +const { ObjectId } = require('./mongojs') -module.exports = (Router = { - route(app) { - app.param('project_id', function(req, res, next, project_id) { - if (ObjectId.isValid(project_id)) { - return next(); - } else { - return res.send(400, "Invalid project_id"); - } - }); +module.exports = Router = { + route(app) { + app.param('project_id', function(req, res, next, project_id) { + if (ObjectId.isValid(project_id)) { + return next() + } else { + return res.send(400, 'Invalid project_id') + } + }) - app.param('thread_id', function(req, res, next, thread_id) { - if (ObjectId.isValid(thread_id)) { - return next(); - } else { - return res.send(400, "Invalid thread_id"); - } - }); + app.param('thread_id', function(req, res, next, thread_id) { + if (ObjectId.isValid(thread_id)) { + return next() + } else { + return res.send(400, 'Invalid thread_id') + } + }) - // These are for backwards compatibility - app.get("/room/:project_id/messages", MessageHttpController.getGlobalMessages); - app.post("/room/:project_id/messages", MessageHttpController.sendGlobalMessage); + // These are for backwards compatibility + app.get( + '/room/:project_id/messages', + MessageHttpController.getGlobalMessages + ) + app.post( + '/room/:project_id/messages', + MessageHttpController.sendGlobalMessage + ) - app.get("/project/:project_id/messages", MessageHttpController.getGlobalMessages); - app.post("/project/:project_id/messages", MessageHttpController.sendGlobalMessage); + app.get( + '/project/:project_id/messages', + MessageHttpController.getGlobalMessages + ) + app.post( + '/project/:project_id/messages', + MessageHttpController.sendGlobalMessage + ) - app.post("/project/:project_id/thread/:thread_id/messages", MessageHttpController.sendThreadMessage); - app.get("/project/:project_id/threads", MessageHttpController.getAllThreads); + app.post( + '/project/:project_id/thread/:thread_id/messages', + MessageHttpController.sendThreadMessage + ) + app.get('/project/:project_id/threads', MessageHttpController.getAllThreads) - app.post("/project/:project_id/thread/:thread_id/messages/:message_id/edit", MessageHttpController.editMessage); - app.del("/project/:project_id/thread/:thread_id/messages/:message_id", MessageHttpController.deleteMessage); + app.post( + '/project/:project_id/thread/:thread_id/messages/:message_id/edit', + MessageHttpController.editMessage + ) + app.del( + '/project/:project_id/thread/:thread_id/messages/:message_id', + MessageHttpController.deleteMessage + ) - app.post("/project/:project_id/thread/:thread_id/resolve", MessageHttpController.resolveThread); - app.post("/project/:project_id/thread/:thread_id/reopen", MessageHttpController.reopenThread); - app.del("/project/:project_id/thread/:thread_id", MessageHttpController.deleteThread); + app.post( + '/project/:project_id/thread/:thread_id/resolve', + MessageHttpController.resolveThread + ) + app.post( + '/project/:project_id/thread/:thread_id/reopen', + MessageHttpController.reopenThread + ) + app.del( + '/project/:project_id/thread/:thread_id', + MessageHttpController.deleteThread + ) - return app.get("/status", (req, res, next) => res.send("chat is alive")); - } -}); - - - + return app.get('/status', (req, res, next) => res.send('chat is alive')) + } +} diff --git a/services/chat/app/js/server.js b/services/chat/app/js/server.js index 7e795833e3..161cf76c33 100644 --- a/services/chat/app/js/server.js +++ b/services/chat/app/js/server.js @@ -8,46 +8,43 @@ * DS102: Remove unnecessary code created because of implicit returns * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ -const logger = require('logger-sharelatex'); -logger.initialize("chat-sharelatex"); -const metrics = require("metrics-sharelatex"); -metrics.initialize("chat"); -const Path = require("path"); -const express = require("express"); -const app = express(); -const server = require("http").createServer(app); -const Router = require("./router"); +const logger = require('logger-sharelatex') +logger.initialize('chat-sharelatex') +const metrics = require('metrics-sharelatex') +metrics.initialize('chat') +const Path = require('path') +const express = require('express') +const app = express() +const server = require('http').createServer(app) +const Router = require('./router') -app.use(express.bodyParser()); -app.use(metrics.http.monitor(logger)); +app.use(express.bodyParser()) +app.use(metrics.http.monitor(logger)) -if ((app.get('env')) === 'development') { - console.log("Development Enviroment"); - app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); +if (app.get('env') === 'development') { + console.log('Development Enviroment') + app.use(express.errorHandler({ dumpExceptions: true, showStack: true })) } -if ((app.get('env')) === 'production') { - console.log("Production Enviroment"); - app.use(express.logger()); - app.use(express.errorHandler()); +if (app.get('env') === 'production') { + console.log('Production Enviroment') + app.use(express.logger()) + app.use(express.errorHandler()) } - -const profiler = require("v8-profiler"); -app.get("/profile", function(req, res) { - const time = parseInt(req.query.time || "1000"); - profiler.startProfiling("test"); - return setTimeout(function() { - const profile = profiler.stopProfiling("test"); - return res.json(profile); - } - , time); -}); -Router.route(app); +const profiler = require('v8-profiler') +app.get('/profile', function(req, res) { + const time = parseInt(req.query.time || '1000') + profiler.startProfiling('test') + return setTimeout(function() { + const profile = profiler.stopProfiling('test') + return res.json(profile) + }, time) +}) + +Router.route(app) module.exports = { - server, - app -}; - - + server, + app +} From c34b906598ed5f9872b2b2c310e65842147ea0e5 Mon Sep 17 00:00:00 2001 From: decaffeinate Date: Thu, 20 Dec 2018 14:14:02 -0500 Subject: [PATCH 25/33] decaffeinate: Rename DeletingAMessageTests.coffee and 7 other files from .coffee to .js --- .../{DeletingAMessageTests.coffee => DeletingAMessageTests.js} | 0 .../{DeletingAThreadTests.coffee => DeletingAThreadTests.js} | 0 .../{EditingAMessageTests.coffee => EditingAMessageTests.js} | 0 .../{GettingMessagesTests.coffee => GettingMessagesTests.js} | 0 .../{ResolvingAThreadTests.coffee => ResolvingAThreadTests.js} | 0 .../{SendingAMessageTests.coffee => SendingAMessageTests.js} | 0 .../test/acceptance/coffee/helpers/{ChatApp.coffee => ChatApp.js} | 0 .../coffee/helpers/{ChatClient.coffee => ChatClient.js} | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename services/chat/test/acceptance/coffee/{DeletingAMessageTests.coffee => DeletingAMessageTests.js} (100%) rename services/chat/test/acceptance/coffee/{DeletingAThreadTests.coffee => DeletingAThreadTests.js} (100%) rename services/chat/test/acceptance/coffee/{EditingAMessageTests.coffee => EditingAMessageTests.js} (100%) rename services/chat/test/acceptance/coffee/{GettingMessagesTests.coffee => GettingMessagesTests.js} (100%) rename services/chat/test/acceptance/coffee/{ResolvingAThreadTests.coffee => ResolvingAThreadTests.js} (100%) rename services/chat/test/acceptance/coffee/{SendingAMessageTests.coffee => SendingAMessageTests.js} (100%) rename services/chat/test/acceptance/coffee/helpers/{ChatApp.coffee => ChatApp.js} (100%) rename services/chat/test/acceptance/coffee/helpers/{ChatClient.coffee => ChatClient.js} (100%) diff --git a/services/chat/test/acceptance/coffee/DeletingAMessageTests.coffee b/services/chat/test/acceptance/coffee/DeletingAMessageTests.js similarity index 100% rename from services/chat/test/acceptance/coffee/DeletingAMessageTests.coffee rename to services/chat/test/acceptance/coffee/DeletingAMessageTests.js diff --git a/services/chat/test/acceptance/coffee/DeletingAThreadTests.coffee b/services/chat/test/acceptance/coffee/DeletingAThreadTests.js similarity index 100% rename from services/chat/test/acceptance/coffee/DeletingAThreadTests.coffee rename to services/chat/test/acceptance/coffee/DeletingAThreadTests.js diff --git a/services/chat/test/acceptance/coffee/EditingAMessageTests.coffee b/services/chat/test/acceptance/coffee/EditingAMessageTests.js similarity index 100% rename from services/chat/test/acceptance/coffee/EditingAMessageTests.coffee rename to services/chat/test/acceptance/coffee/EditingAMessageTests.js diff --git a/services/chat/test/acceptance/coffee/GettingMessagesTests.coffee b/services/chat/test/acceptance/coffee/GettingMessagesTests.js similarity index 100% rename from services/chat/test/acceptance/coffee/GettingMessagesTests.coffee rename to services/chat/test/acceptance/coffee/GettingMessagesTests.js diff --git a/services/chat/test/acceptance/coffee/ResolvingAThreadTests.coffee b/services/chat/test/acceptance/coffee/ResolvingAThreadTests.js similarity index 100% rename from services/chat/test/acceptance/coffee/ResolvingAThreadTests.coffee rename to services/chat/test/acceptance/coffee/ResolvingAThreadTests.js diff --git a/services/chat/test/acceptance/coffee/SendingAMessageTests.coffee b/services/chat/test/acceptance/coffee/SendingAMessageTests.js similarity index 100% rename from services/chat/test/acceptance/coffee/SendingAMessageTests.coffee rename to services/chat/test/acceptance/coffee/SendingAMessageTests.js diff --git a/services/chat/test/acceptance/coffee/helpers/ChatApp.coffee b/services/chat/test/acceptance/coffee/helpers/ChatApp.js similarity index 100% rename from services/chat/test/acceptance/coffee/helpers/ChatApp.coffee rename to services/chat/test/acceptance/coffee/helpers/ChatApp.js diff --git a/services/chat/test/acceptance/coffee/helpers/ChatClient.coffee b/services/chat/test/acceptance/coffee/helpers/ChatClient.js similarity index 100% rename from services/chat/test/acceptance/coffee/helpers/ChatClient.coffee rename to services/chat/test/acceptance/coffee/helpers/ChatClient.js From 41eed6df4e2609c062fb2a6c39acc11356f657a5 Mon Sep 17 00:00:00 2001 From: decaffeinate Date: Thu, 20 Dec 2018 14:14:05 -0500 Subject: [PATCH 26/33] decaffeinate: Convert DeletingAMessageTests.coffee and 7 other files to JS --- .../coffee/DeletingAMessageTests.js | 72 +++--- .../acceptance/coffee/DeletingAThreadTests.js | 67 +++--- .../acceptance/coffee/EditingAMessageTests.js | 75 ++++--- .../acceptance/coffee/GettingMessagesTests.js | 127 ++++++----- .../coffee/ResolvingAThreadTests.js | 153 +++++++------ .../acceptance/coffee/SendingAMessageTests.js | 210 ++++++++++-------- .../test/acceptance/coffee/helpers/ChatApp.js | 56 +++-- .../acceptance/coffee/helpers/ChatClient.js | 124 ++++++----- 8 files changed, 519 insertions(+), 365 deletions(-) diff --git a/services/chat/test/acceptance/coffee/DeletingAMessageTests.js b/services/chat/test/acceptance/coffee/DeletingAMessageTests.js index 7d6ca8b00b..0969d522cf 100644 --- a/services/chat/test/acceptance/coffee/DeletingAMessageTests.js +++ b/services/chat/test/acceptance/coffee/DeletingAMessageTests.js @@ -1,32 +1,48 @@ -{ObjectId} = require "../../../app/js/mongojs" -expect = require("chai").expect +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md + */ +const {ObjectId} = require("../../../app/js/mongojs"); +const { expect } = require("chai"); -ChatClient = require "./helpers/ChatClient" -ChatApp = require "./helpers/ChatApp" +const ChatClient = require("./helpers/ChatClient"); +const ChatApp = require("./helpers/ChatApp"); -describe "Deleting a message", -> - before (done) -> - @project_id = ObjectId().toString() - @user_id = ObjectId().toString() - @thread_id = ObjectId().toString() - ChatApp.ensureRunning done +describe("Deleting a message", function() { + before(function(done) { + this.project_id = ObjectId().toString(); + this.user_id = ObjectId().toString(); + this.thread_id = ObjectId().toString(); + return ChatApp.ensureRunning(done); + }); - describe "in a thread", -> - before (done) -> - ChatClient.sendMessage @project_id, @thread_id, @user_id, "first message", (error, response, @message) => - expect(error).to.be.null - expect(response.statusCode).to.equal 201 - ChatClient.sendMessage @project_id, @thread_id, @user_id, "deleted message", (error, response, @message) => - expect(error).to.be.null - expect(response.statusCode).to.equal 201 - ChatClient.deleteMessage @project_id, @thread_id, @message.id, (error, response, body) => - expect(error).to.be.null - expect(response.statusCode).to.equal 204 - done() + return describe("in a thread", function() { + before(function(done) { + return ChatClient.sendMessage(this.project_id, this.thread_id, this.user_id, "first message", (error, response, message) => { + this.message = message; + expect(error).to.be.null; + expect(response.statusCode).to.equal(201); + return ChatClient.sendMessage(this.project_id, this.thread_id, this.user_id, "deleted message", (error, response, message1) => { + this.message = message1; + expect(error).to.be.null; + expect(response.statusCode).to.equal(201); + return ChatClient.deleteMessage(this.project_id, this.thread_id, this.message.id, (error, response, body) => { + expect(error).to.be.null; + expect(response.statusCode).to.equal(204); + return done(); + }); + }); + }); + }); - it "should then remove the message from the threads", (done) -> - ChatClient.getThreads @project_id, (error, response, threads) => - expect(error).to.be.null - expect(response.statusCode).to.equal 200 - expect(threads[@thread_id].messages.length).to.equal 1 - done() \ No newline at end of file + return it("should then remove the message from the threads", function(done) { + return ChatClient.getThreads(this.project_id, (error, response, threads) => { + expect(error).to.be.null; + expect(response.statusCode).to.equal(200); + expect(threads[this.thread_id].messages.length).to.equal(1); + return done(); + }); + }); + }); +}); \ No newline at end of file diff --git a/services/chat/test/acceptance/coffee/DeletingAThreadTests.js b/services/chat/test/acceptance/coffee/DeletingAThreadTests.js index a803e730c7..843134bbd8 100644 --- a/services/chat/test/acceptance/coffee/DeletingAThreadTests.js +++ b/services/chat/test/acceptance/coffee/DeletingAThreadTests.js @@ -1,31 +1,44 @@ -{ObjectId} = require "../../../app/js/mongojs" -expect = require("chai").expect -crypto = require "crypto" +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md + */ +const {ObjectId} = require("../../../app/js/mongojs"); +const { expect } = require("chai"); +const crypto = require("crypto"); -ChatClient = require "./helpers/ChatClient" -ChatApp = require "./helpers/ChatApp" +const ChatClient = require("./helpers/ChatClient"); +const ChatApp = require("./helpers/ChatApp"); -describe "Deleting a thread", -> - before (done) -> - @project_id = ObjectId().toString() - @user_id = ObjectId().toString() - ChatApp.ensureRunning done +describe("Deleting a thread", function() { + before(function(done) { + this.project_id = ObjectId().toString(); + this.user_id = ObjectId().toString(); + return ChatApp.ensureRunning(done); + }); - describe "with a thread that is deleted", -> - before (done) -> - @thread_id = ObjectId().toString() - @content = "deleted thread message" - ChatClient.sendMessage @project_id, @thread_id, @user_id, @content, (error, response, body) => - expect(error).to.be.null - expect(response.statusCode).to.equal 201 - ChatClient.deleteThread @project_id, @thread_id, (error, response, body) => - expect(error).to.be.null - expect(response.statusCode).to.equal 204 - done() + return describe("with a thread that is deleted", function() { + before(function(done) { + this.thread_id = ObjectId().toString(); + this.content = "deleted thread message"; + return ChatClient.sendMessage(this.project_id, this.thread_id, this.user_id, this.content, (error, response, body) => { + expect(error).to.be.null; + expect(response.statusCode).to.equal(201); + return ChatClient.deleteThread(this.project_id, this.thread_id, (error, response, body) => { + expect(error).to.be.null; + expect(response.statusCode).to.equal(204); + return done(); + }); + }); + }); - it "should then not list the thread for the project", (done) -> - ChatClient.getThreads @project_id, (error, response, threads) => - expect(error).to.be.null - expect(response.statusCode).to.equal 200 - expect(Object.keys(threads).length).to.equal 0 - done() + return it("should then not list the thread for the project", function(done) { + return ChatClient.getThreads(this.project_id, (error, response, threads) => { + expect(error).to.be.null; + expect(response.statusCode).to.equal(200); + expect(Object.keys(threads).length).to.equal(0); + return done(); + }); + }); + }); +}); diff --git a/services/chat/test/acceptance/coffee/EditingAMessageTests.js b/services/chat/test/acceptance/coffee/EditingAMessageTests.js index f507e4b205..03bbbeab0a 100644 --- a/services/chat/test/acceptance/coffee/EditingAMessageTests.js +++ b/services/chat/test/acceptance/coffee/EditingAMessageTests.js @@ -1,34 +1,49 @@ -{ObjectId} = require "../../../app/js/mongojs" -expect = require("chai").expect +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md + */ +const {ObjectId} = require("../../../app/js/mongojs"); +const { expect } = require("chai"); -ChatClient = require "./helpers/ChatClient" -ChatApp = require "./helpers/ChatApp" +const ChatClient = require("./helpers/ChatClient"); +const ChatApp = require("./helpers/ChatApp"); -describe "Editing a message", -> - before (done) -> - @project_id = ObjectId().toString() - @user_id = ObjectId().toString() - @thread_id = ObjectId().toString() - ChatApp.ensureRunning done +describe("Editing a message", function() { + before(function(done) { + this.project_id = ObjectId().toString(); + this.user_id = ObjectId().toString(); + this.thread_id = ObjectId().toString(); + return ChatApp.ensureRunning(done); + }); - describe "in a thread", -> - before (done) -> - @content = "thread message" - @new_content = "updated thread message" - ChatClient.sendMessage @project_id, @thread_id, @user_id, @content, (error, response, @message) => - expect(error).to.be.null - expect(response.statusCode).to.equal 201 - expect(@message.id).to.exist - expect(@message.content).to.equal @content - ChatClient.editMessage @project_id, @thread_id, @message.id, @new_content, (error, response, @new_message) => - expect(error).to.be.null - expect(response.statusCode).to.equal 204 - done() + return describe("in a thread", function() { + before(function(done) { + this.content = "thread message"; + this.new_content = "updated thread message"; + return ChatClient.sendMessage(this.project_id, this.thread_id, this.user_id, this.content, (error, response, message) => { + this.message = message; + expect(error).to.be.null; + expect(response.statusCode).to.equal(201); + expect(this.message.id).to.exist; + expect(this.message.content).to.equal(this.content); + return ChatClient.editMessage(this.project_id, this.thread_id, this.message.id, this.new_content, (error, response, new_message) => { + this.new_message = new_message; + expect(error).to.be.null; + expect(response.statusCode).to.equal(204); + return done(); + }); + }); + }); - it "should then list the updated message in the threads", (done) -> - ChatClient.getThreads @project_id, (error, response, threads) => - expect(error).to.be.null - expect(response.statusCode).to.equal 200 - expect(threads[@thread_id].messages.length).to.equal 1 - expect(threads[@thread_id].messages[0].content).to.equal @new_content - done() \ No newline at end of file + return it("should then list the updated message in the threads", function(done) { + return ChatClient.getThreads(this.project_id, (error, response, threads) => { + expect(error).to.be.null; + expect(response.statusCode).to.equal(200); + expect(threads[this.thread_id].messages.length).to.equal(1); + expect(threads[this.thread_id].messages[0].content).to.equal(this.new_content); + return done(); + }); + }); + }); +}); \ No newline at end of file diff --git a/services/chat/test/acceptance/coffee/GettingMessagesTests.js b/services/chat/test/acceptance/coffee/GettingMessagesTests.js index b0c872e5cd..a2d3c81df6 100644 --- a/services/chat/test/acceptance/coffee/GettingMessagesTests.js +++ b/services/chat/test/acceptance/coffee/GettingMessagesTests.js @@ -1,64 +1,79 @@ -{ObjectId} = require "../../../app/js/mongojs" -expect = require("chai").expect -async = require "async" -crypto = require "crypto" +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md + */ +const {ObjectId} = require("../../../app/js/mongojs"); +const { expect } = require("chai"); +const async = require("async"); +const crypto = require("crypto"); -ChatClient = require "./helpers/ChatClient" -ChatApp = require "./helpers/ChatApp" +const ChatClient = require("./helpers/ChatClient"); +const ChatApp = require("./helpers/ChatApp"); -describe "Getting messages", -> - before (done) -> - @user_id1 = ObjectId().toString() - @user_id2 = ObjectId().toString() - @content1 = "foo bar" - @content2 = "hello world" - ChatApp.ensureRunning done +describe("Getting messages", function() { + before(function(done) { + this.user_id1 = ObjectId().toString(); + this.user_id2 = ObjectId().toString(); + this.content1 = "foo bar"; + this.content2 = "hello world"; + return ChatApp.ensureRunning(done); + }); - describe "globally", -> - before (done) -> - @project_id = ObjectId().toString() - async.series [ - (cb) => ChatClient.sendGlobalMessage @project_id, @user_id1, @content1, cb - (cb) => ChatClient.sendGlobalMessage @project_id, @user_id2, @content2, cb - ], done + describe("globally", function() { + before(function(done) { + this.project_id = ObjectId().toString(); + return async.series([ + cb => ChatClient.sendGlobalMessage(this.project_id, this.user_id1, this.content1, cb), + cb => ChatClient.sendGlobalMessage(this.project_id, this.user_id2, this.content2, cb) + ], done); + }); - it "should contain the messages and populated users when getting the messages", (done) -> - ChatClient.getGlobalMessages @project_id, (error, response, messages) => - expect(messages.length).to.equal 2 - messages.reverse() - expect(messages[0].content).to.equal @content1 - expect(messages[0].user_id).to.equal @user_id1 - expect(messages[1].content).to.equal @content2 - expect(messages[1].user_id).to.equal @user_id2 - done() + return it("should contain the messages and populated users when getting the messages", function(done) { + return ChatClient.getGlobalMessages(this.project_id, (error, response, messages) => { + expect(messages.length).to.equal(2); + messages.reverse(); + expect(messages[0].content).to.equal(this.content1); + expect(messages[0].user_id).to.equal(this.user_id1); + expect(messages[1].content).to.equal(this.content2); + expect(messages[1].user_id).to.equal(this.user_id2); + return done(); + }); + }); + }); - describe "from all the threads", -> - before (done) -> - @project_id = ObjectId().toString() - @thread_id1 = ObjectId().toString() - @thread_id2 = ObjectId().toString() - async.series [ - (cb) => ChatClient.sendMessage @project_id, @thread_id1, @user_id1, "one", cb - (cb) => ChatClient.sendMessage @project_id, @thread_id2, @user_id2, "two", cb - (cb) => ChatClient.sendMessage @project_id, @thread_id1, @user_id1, "three", cb - (cb) => ChatClient.sendMessage @project_id, @thread_id2, @user_id2, "four", cb - ], done + return describe("from all the threads", function() { + before(function(done) { + this.project_id = ObjectId().toString(); + this.thread_id1 = ObjectId().toString(); + this.thread_id2 = ObjectId().toString(); + return async.series([ + cb => ChatClient.sendMessage(this.project_id, this.thread_id1, this.user_id1, "one", cb), + cb => ChatClient.sendMessage(this.project_id, this.thread_id2, this.user_id2, "two", cb), + cb => ChatClient.sendMessage(this.project_id, this.thread_id1, this.user_id1, "three", cb), + cb => ChatClient.sendMessage(this.project_id, this.thread_id2, this.user_id2, "four", cb) + ], done); + }); - it "should contain a dictionary of threads with messages with populated users", (done) -> - ChatClient.getThreads @project_id, (error, response, threads) => - expect(Object.keys(threads).length).to.equal 2 - thread1 = threads[@thread_id1] - expect(thread1.messages.length).to.equal 2 - thread2 = threads[@thread_id2] - expect(thread2.messages.length).to.equal 2 + return it("should contain a dictionary of threads with messages with populated users", function(done) { + return ChatClient.getThreads(this.project_id, (error, response, threads) => { + expect(Object.keys(threads).length).to.equal(2); + const thread1 = threads[this.thread_id1]; + expect(thread1.messages.length).to.equal(2); + const thread2 = threads[this.thread_id2]; + expect(thread2.messages.length).to.equal(2); - expect(thread1.messages[0].content).to.equal "one" - expect(thread1.messages[0].user_id).to.equal @user_id1 - expect(thread1.messages[1].content).to.equal "three" - expect(thread1.messages[1].user_id).to.equal @user_id1 + expect(thread1.messages[0].content).to.equal("one"); + expect(thread1.messages[0].user_id).to.equal(this.user_id1); + expect(thread1.messages[1].content).to.equal("three"); + expect(thread1.messages[1].user_id).to.equal(this.user_id1); - expect(thread2.messages[0].content).to.equal "two" - expect(thread2.messages[0].user_id).to.equal @user_id2 - expect(thread2.messages[1].content).to.equal "four" - expect(thread2.messages[1].user_id).to.equal @user_id2 - done() + expect(thread2.messages[0].content).to.equal("two"); + expect(thread2.messages[0].user_id).to.equal(this.user_id2); + expect(thread2.messages[1].content).to.equal("four"); + expect(thread2.messages[1].user_id).to.equal(this.user_id2); + return done(); + }); + }); + }); +}); diff --git a/services/chat/test/acceptance/coffee/ResolvingAThreadTests.js b/services/chat/test/acceptance/coffee/ResolvingAThreadTests.js index d162f881f6..bad9b5feef 100644 --- a/services/chat/test/acceptance/coffee/ResolvingAThreadTests.js +++ b/services/chat/test/acceptance/coffee/ResolvingAThreadTests.js @@ -1,72 +1,97 @@ -{ObjectId} = require "../../../app/js/mongojs" -expect = require("chai").expect -crypto = require "crypto" +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md + */ +const {ObjectId} = require("../../../app/js/mongojs"); +const { expect } = require("chai"); +const crypto = require("crypto"); -ChatClient = require "./helpers/ChatClient" -ChatApp = require "./helpers/ChatApp" +const ChatClient = require("./helpers/ChatClient"); +const ChatApp = require("./helpers/ChatApp"); -describe "Resolving a thread", -> - before (done) -> - @project_id = ObjectId().toString() - @user_id = ObjectId().toString() - ChatApp.ensureRunning done +describe("Resolving a thread", function() { + before(function(done) { + this.project_id = ObjectId().toString(); + this.user_id = ObjectId().toString(); + return ChatApp.ensureRunning(done); + }); - describe "with a resolved thread", -> - before (done) -> - @thread_id = ObjectId().toString() - @content = "resolved message" - ChatClient.sendMessage @project_id, @thread_id, @user_id, @content, (error, response, body) => - expect(error).to.be.null - expect(response.statusCode).to.equal 201 - ChatClient.resolveThread @project_id, @thread_id, @user_id, (error, response, body) => - expect(error).to.be.null - expect(response.statusCode).to.equal 204 - done() + describe("with a resolved thread", function() { + before(function(done) { + this.thread_id = ObjectId().toString(); + this.content = "resolved message"; + return ChatClient.sendMessage(this.project_id, this.thread_id, this.user_id, this.content, (error, response, body) => { + expect(error).to.be.null; + expect(response.statusCode).to.equal(201); + return ChatClient.resolveThread(this.project_id, this.thread_id, this.user_id, (error, response, body) => { + expect(error).to.be.null; + expect(response.statusCode).to.equal(204); + return done(); + }); + }); + }); - it "should then list the thread as resolved", (done) -> - ChatClient.getThreads @project_id, (error, response, threads) => - expect(error).to.be.null - expect(response.statusCode).to.equal 200 - expect(threads[@thread_id].resolved).to.equal true - expect(threads[@thread_id].resolved_by_user_id).to.equal @user_id - resolved_at = new Date(threads[@thread_id].resolved_at) - expect(new Date() - resolved_at).to.be.below 1000 - done() + return it("should then list the thread as resolved", function(done) { + return ChatClient.getThreads(this.project_id, (error, response, threads) => { + expect(error).to.be.null; + expect(response.statusCode).to.equal(200); + expect(threads[this.thread_id].resolved).to.equal(true); + expect(threads[this.thread_id].resolved_by_user_id).to.equal(this.user_id); + const resolved_at = new Date(threads[this.thread_id].resolved_at); + expect(new Date() - resolved_at).to.be.below(1000); + return done(); + }); + }); + }); - describe "when a thread is not resolved", -> - before (done) -> - @thread_id = ObjectId().toString() - @content = "open message" - ChatClient.sendMessage @project_id, @thread_id, @user_id, @content, (error, response, body) => - expect(error).to.be.null - expect(response.statusCode).to.equal 201 - done() + describe("when a thread is not resolved", function() { + before(function(done) { + this.thread_id = ObjectId().toString(); + this.content = "open message"; + return ChatClient.sendMessage(this.project_id, this.thread_id, this.user_id, this.content, (error, response, body) => { + expect(error).to.be.null; + expect(response.statusCode).to.equal(201); + return done(); + }); + }); - it "should not list the thread as resolved", (done) -> - ChatClient.getThreads @project_id, (error, response, threads) => - expect(error).to.be.null - expect(response.statusCode).to.equal 200 - expect(threads[@thread_id].resolved).to.be.undefined - done() + return it("should not list the thread as resolved", function(done) { + return ChatClient.getThreads(this.project_id, (error, response, threads) => { + expect(error).to.be.null; + expect(response.statusCode).to.equal(200); + expect(threads[this.thread_id].resolved).to.be.undefined; + return done(); + }); + }); + }); - describe "when a thread is resolved then reopened", -> - before (done) -> - @thread_id = ObjectId().toString() - @content = "resolved message" - ChatClient.sendMessage @project_id, @thread_id, @user_id, @content, (error, response, body) => - expect(error).to.be.null - expect(response.statusCode).to.equal 201 - ChatClient.resolveThread @project_id, @thread_id, @user_id, (error, response, body) => - expect(error).to.be.null - expect(response.statusCode).to.equal 204 - ChatClient.reopenThread @project_id, @thread_id, (error, response, body) => - expect(error).to.be.null - expect(response.statusCode).to.equal 204 - done() + return describe("when a thread is resolved then reopened", function() { + before(function(done) { + this.thread_id = ObjectId().toString(); + this.content = "resolved message"; + return ChatClient.sendMessage(this.project_id, this.thread_id, this.user_id, this.content, (error, response, body) => { + expect(error).to.be.null; + expect(response.statusCode).to.equal(201); + return ChatClient.resolveThread(this.project_id, this.thread_id, this.user_id, (error, response, body) => { + expect(error).to.be.null; + expect(response.statusCode).to.equal(204); + return ChatClient.reopenThread(this.project_id, this.thread_id, (error, response, body) => { + expect(error).to.be.null; + expect(response.statusCode).to.equal(204); + return done(); + }); + }); + }); + }); - it "should not list the thread as resolved", (done) -> - ChatClient.getThreads @project_id, (error, response, threads) => - expect(error).to.be.null - expect(response.statusCode).to.equal 200 - expect(threads[@thread_id].resolved).to.be.undefined - done() + return it("should not list the thread as resolved", function(done) { + return ChatClient.getThreads(this.project_id, (error, response, threads) => { + expect(error).to.be.null; + expect(response.statusCode).to.equal(200); + expect(threads[this.thread_id].resolved).to.be.undefined; + return done(); + }); + }); + }); +}); diff --git a/services/chat/test/acceptance/coffee/SendingAMessageTests.js b/services/chat/test/acceptance/coffee/SendingAMessageTests.js index 64a2d5dbe5..d1459efe9b 100644 --- a/services/chat/test/acceptance/coffee/SendingAMessageTests.js +++ b/services/chat/test/acceptance/coffee/SendingAMessageTests.js @@ -1,101 +1,135 @@ -{ObjectId} = require "../../../app/js/mongojs" -expect = require("chai").expect +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md + */ +const {ObjectId} = require("../../../app/js/mongojs"); +const { expect } = require("chai"); -ChatClient = require "./helpers/ChatClient" -ChatApp = require "./helpers/ChatApp" +const ChatClient = require("./helpers/ChatClient"); +const ChatApp = require("./helpers/ChatApp"); -describe "Sending a message", -> - before (done) -> - ChatApp.ensureRunning done +describe("Sending a message", function() { + before(done => ChatApp.ensureRunning(done)); - describe "globally", -> - before (done) -> - @project_id = ObjectId().toString() - @user_id = ObjectId().toString() - @content = "global message" - ChatClient.sendGlobalMessage @project_id, @user_id, @content, (error, response, body) => - expect(error).to.be.null - expect(response.statusCode).to.equal 201 - expect(body.content).to.equal @content - expect(body.user_id).to.equal @user_id - expect(body.room_id).to.equal @project_id - done() + describe("globally", function() { + before(function(done) { + this.project_id = ObjectId().toString(); + this.user_id = ObjectId().toString(); + this.content = "global message"; + return ChatClient.sendGlobalMessage(this.project_id, this.user_id, this.content, (error, response, body) => { + expect(error).to.be.null; + expect(response.statusCode).to.equal(201); + expect(body.content).to.equal(this.content); + expect(body.user_id).to.equal(this.user_id); + expect(body.room_id).to.equal(this.project_id); + return done(); + }); + }); - it "should then list the message in the project messages", (done) -> - ChatClient.getGlobalMessages @project_id, (error, response, messages) => - expect(error).to.be.null - expect(response.statusCode).to.equal 200 - expect(messages.length).to.equal 1 - expect(messages[0].content).to.equal @content - done() + return it("should then list the message in the project messages", function(done) { + return ChatClient.getGlobalMessages(this.project_id, (error, response, messages) => { + expect(error).to.be.null; + expect(response.statusCode).to.equal(200); + expect(messages.length).to.equal(1); + expect(messages[0].content).to.equal(this.content); + return done(); + }); + }); + }); - describe "to a thread", -> - before (done) -> - @project_id = ObjectId().toString() - @user_id = ObjectId().toString() - @thread_id = ObjectId().toString() - @content = "thread message" - ChatClient.sendMessage @project_id, @thread_id, @user_id, @content, (error, response, body) => - expect(error).to.be.null - expect(response.statusCode).to.equal 201 - expect(body.content).to.equal @content - expect(body.user_id).to.equal @user_id - expect(body.room_id).to.equal @project_id - done() + describe("to a thread", function() { + before(function(done) { + this.project_id = ObjectId().toString(); + this.user_id = ObjectId().toString(); + this.thread_id = ObjectId().toString(); + this.content = "thread message"; + return ChatClient.sendMessage(this.project_id, this.thread_id, this.user_id, this.content, (error, response, body) => { + expect(error).to.be.null; + expect(response.statusCode).to.equal(201); + expect(body.content).to.equal(this.content); + expect(body.user_id).to.equal(this.user_id); + expect(body.room_id).to.equal(this.project_id); + return done(); + }); + }); - it "should then list the message in the threads", (done) -> - ChatClient.getThreads @project_id, (error, response, threads) => - expect(error).to.be.null - expect(response.statusCode).to.equal 200 - expect(threads[@thread_id].messages.length).to.equal 1 - expect(threads[@thread_id].messages[0].content).to.equal @content - done() + it("should then list the message in the threads", function(done) { + return ChatClient.getThreads(this.project_id, (error, response, threads) => { + expect(error).to.be.null; + expect(response.statusCode).to.equal(200); + expect(threads[this.thread_id].messages.length).to.equal(1); + expect(threads[this.thread_id].messages[0].content).to.equal(this.content); + return done(); + }); + }); - it "should not appear in the global messages", (done) -> - ChatClient.getGlobalMessages @project_id, (error, response, messages) => - expect(error).to.be.null - expect(response.statusCode).to.equal 200 - expect(messages.length).to.equal 0 - done() + return it("should not appear in the global messages", function(done) { + return ChatClient.getGlobalMessages(this.project_id, (error, response, messages) => { + expect(error).to.be.null; + expect(response.statusCode).to.equal(200); + expect(messages.length).to.equal(0); + return done(); + }); + }); + }); - describe "failure cases", -> - before () -> - @project_id = ObjectId().toString() - @user_id = ObjectId().toString() - @thread_id = ObjectId().toString() + return describe("failure cases", function() { + before(function() { + this.project_id = ObjectId().toString(); + this.user_id = ObjectId().toString(); + return this.thread_id = ObjectId().toString(); + }); - describe "with a malformed user_id", -> - it "should return a graceful error", (done) -> - ChatClient.sendMessage @project_id, @thread_id, "malformed-user", "content", (error, response, body) => - expect(response.statusCode).to.equal 400 - expect(body).to.equal "Invalid user_id" - done() + describe("with a malformed user_id", () => + it("should return a graceful error", function(done) { + return ChatClient.sendMessage(this.project_id, this.thread_id, "malformed-user", "content", (error, response, body) => { + expect(response.statusCode).to.equal(400); + expect(body).to.equal("Invalid user_id"); + return done(); + }); + }) + ); - describe "with a malformed project_id", -> - it "should return a graceful error", (done) -> - ChatClient.sendMessage "malformed-project", @thread_id, @user_id, "content", (error, response, body) => - expect(response.statusCode).to.equal 400 - expect(body).to.equal "Invalid project_id" - done() + describe("with a malformed project_id", () => + it("should return a graceful error", function(done) { + return ChatClient.sendMessage("malformed-project", this.thread_id, this.user_id, "content", (error, response, body) => { + expect(response.statusCode).to.equal(400); + expect(body).to.equal("Invalid project_id"); + return done(); + }); + }) + ); - describe "with a malformed thread_id", -> - it "should return a graceful error", (done) -> - ChatClient.sendMessage @project_id, "malformed-thread-id", @user_id, "content", (error, response, body) => - expect(response.statusCode).to.equal 400 - expect(body).to.equal "Invalid thread_id" - done() + describe("with a malformed thread_id", () => + it("should return a graceful error", function(done) { + return ChatClient.sendMessage(this.project_id, "malformed-thread-id", this.user_id, "content", (error, response, body) => { + expect(response.statusCode).to.equal(400); + expect(body).to.equal("Invalid thread_id"); + return done(); + }); + }) + ); - describe "with no content", -> - it "should return a graceful error", (done) -> - ChatClient.sendMessage @project_id, @thread_id, @user_id, null, (error, response, body) => - expect(response.statusCode).to.equal 400 - expect(body).to.equal "No content provided" - done() + describe("with no content", () => + it("should return a graceful error", function(done) { + return ChatClient.sendMessage(this.project_id, this.thread_id, this.user_id, null, (error, response, body) => { + expect(response.statusCode).to.equal(400); + expect(body).to.equal("No content provided"); + return done(); + }); + }) + ); - describe "with very long content", -> - it "should return a graceful error", (done) -> - content = new Buffer(10240).toString("hex") - ChatClient.sendMessage @project_id, @thread_id, @user_id, content, (error, response, body) => - expect(response.statusCode).to.equal 400 - expect(body).to.equal "Content too long (> 10240 bytes)" - done() \ No newline at end of file + return describe("with very long content", () => + it("should return a graceful error", function(done) { + const content = new Buffer(10240).toString("hex"); + return ChatClient.sendMessage(this.project_id, this.thread_id, this.user_id, content, (error, response, body) => { + expect(response.statusCode).to.equal(400); + expect(body).to.equal("Content too long (> 10240 bytes)"); + return done(); + }); + }) + ); + }); +}); \ No newline at end of file diff --git a/services/chat/test/acceptance/coffee/helpers/ChatApp.js b/services/chat/test/acceptance/coffee/helpers/ChatApp.js index 8973541003..916901b08c 100644 --- a/services/chat/test/acceptance/coffee/helpers/ChatApp.js +++ b/services/chat/test/acceptance/coffee/helpers/ChatApp.js @@ -1,20 +1,38 @@ -app = require('../../../../app') -require("logger-sharelatex").logger.level("error") +/* + * decaffeinate suggestions: + * DS101: Remove unnecessary use of Array.from + * DS102: Remove unnecessary code created because of implicit returns + * DS205: Consider reworking code to avoid use of IIFEs + * DS207: Consider shorter variations of null checks + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md + */ +const app = require('../../../../app'); +require("logger-sharelatex").logger.level("error"); -module.exports = - running: false - initing: false - callbacks: [] - ensureRunning: (callback = (error) ->) -> - if @running - return callback() - else if @initing - @callbacks.push callback - else - @initing = true - @callbacks.push callback - app.listen 3010, "localhost", (error) => - throw error if error? - @running = true - for callback in @callbacks - callback() \ No newline at end of file +module.exports = { + running: false, + initing: false, + callbacks: [], + ensureRunning(callback) { + if (callback == null) { callback = function(error) {}; } + if (this.running) { + return callback(); + } else if (this.initing) { + return this.callbacks.push(callback); + } else { + this.initing = true; + this.callbacks.push(callback); + return app.listen(3010, "localhost", error => { + if (error != null) { throw error; } + this.running = true; + return (() => { + const result = []; + for (callback of Array.from(this.callbacks)) { + result.push(callback()); + } + return result; + })(); + }); + } + } +}; \ No newline at end of file diff --git a/services/chat/test/acceptance/coffee/helpers/ChatClient.js b/services/chat/test/acceptance/coffee/helpers/ChatClient.js index 902d743d21..34c8d4cf5b 100644 --- a/services/chat/test/acceptance/coffee/helpers/ChatClient.js +++ b/services/chat/test/acceptance/coffee/helpers/ChatClient.js @@ -1,60 +1,78 @@ -request = require("request").defaults({baseUrl: "http://localhost:3010"}) +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md + */ +const request = require("request").defaults({baseUrl: "http://localhost:3010"}); -module.exports = - sendGlobalMessage: (project_id, user_id, content, callback) -> - request.post { - url: "/project/#{project_id}/messages" - json: - user_id: user_id - content: content - }, callback - - getGlobalMessages: (project_id, callback) -> - request.get { - url: "/project/#{project_id}/messages", - json: true - }, callback - - sendMessage: (project_id, thread_id, user_id, content, callback) -> - request.post { - url: "/project/#{project_id}/thread/#{thread_id}/messages" - json: - user_id: user_id - content: content - }, callback - - getThreads: (project_id, callback) -> - request.get { - url: "/project/#{project_id}/threads", - json: true - }, callback - - resolveThread: (project_id, thread_id, user_id, callback) -> - request.post { - url: "/project/#{project_id}/thread/#{thread_id}/resolve", +module.exports = { + sendGlobalMessage(project_id, user_id, content, callback) { + return request.post({ + url: `/project/${project_id}/messages`, json: { - user_id: user_id + user_id, + content } - }, callback + }, callback); + }, + + getGlobalMessages(project_id, callback) { + return request.get({ + url: `/project/${project_id}/messages`, + json: true + }, callback); + }, - reopenThread: (project_id, thread_id, callback) -> - request.post { - url: "/project/#{project_id}/thread/#{thread_id}/reopen", - }, callback + sendMessage(project_id, thread_id, user_id, content, callback) { + return request.post({ + url: `/project/${project_id}/thread/${thread_id}/messages`, + json: { + user_id, + content + } + }, callback); + }, + + getThreads(project_id, callback) { + return request.get({ + url: `/project/${project_id}/threads`, + json: true + }, callback); + }, + + resolveThread(project_id, thread_id, user_id, callback) { + return request.post({ + url: `/project/${project_id}/thread/${thread_id}/resolve`, + json: { + user_id + } + }, callback); + }, - deleteThread: (project_id, thread_id, callback) -> - request.del { - url: "/project/#{project_id}/thread/#{thread_id}", - }, callback + reopenThread(project_id, thread_id, callback) { + return request.post({ + url: `/project/${project_id}/thread/${thread_id}/reopen`, + }, callback); + }, - editMessage: (project_id, thread_id, message_id, content, callback) -> - request.post { - url: "/project/#{project_id}/thread/#{thread_id}/messages/#{message_id}/edit" - json: - content: content - }, callback + deleteThread(project_id, thread_id, callback) { + return request.del({ + url: `/project/${project_id}/thread/${thread_id}`, + }, callback); + }, - deleteMessage: (project_id, thread_id, message_id, callback) -> - request.del { - url: "/project/#{project_id}/thread/#{thread_id}/messages/#{message_id}", - }, callback + editMessage(project_id, thread_id, message_id, content, callback) { + return request.post({ + url: `/project/${project_id}/thread/${thread_id}/messages/${message_id}/edit`, + json: { + content + } + }, callback); + }, + + deleteMessage(project_id, thread_id, message_id, callback) { + return request.del({ + url: `/project/${project_id}/thread/${thread_id}/messages/${message_id}`, + }, callback); + } +}; From ca55bac90ff8865ae4d0b3be9d6029cabeee0cc4 Mon Sep 17 00:00:00 2001 From: decaffeinate Date: Thu, 20 Dec 2018 14:14:08 -0500 Subject: [PATCH 27/33] decaffeinate: Run post-processing cleanups on DeletingAMessageTests.coffee and 7 other files --- .../chat/test/acceptance/coffee/DeletingAMessageTests.js | 5 +++++ .../chat/test/acceptance/coffee/DeletingAThreadTests.js | 6 ++++++ .../chat/test/acceptance/coffee/EditingAMessageTests.js | 6 ++++++ .../chat/test/acceptance/coffee/GettingMessagesTests.js | 7 +++++++ .../chat/test/acceptance/coffee/ResolvingAThreadTests.js | 7 +++++++ .../chat/test/acceptance/coffee/SendingAMessageTests.js | 8 ++++++++ services/chat/test/acceptance/coffee/helpers/ChatApp.js | 5 +++++ .../chat/test/acceptance/coffee/helpers/ChatClient.js | 6 ++++++ 8 files changed, 50 insertions(+) diff --git a/services/chat/test/acceptance/coffee/DeletingAMessageTests.js b/services/chat/test/acceptance/coffee/DeletingAMessageTests.js index 0969d522cf..1af37a990a 100644 --- a/services/chat/test/acceptance/coffee/DeletingAMessageTests.js +++ b/services/chat/test/acceptance/coffee/DeletingAMessageTests.js @@ -1,3 +1,8 @@ +/* eslint-disable + max-len, +*/ +// TODO: This file was created by bulk-decaffeinate. +// Fix any style issues and re-enable lint. /* * decaffeinate suggestions: * DS102: Remove unnecessary code created because of implicit returns diff --git a/services/chat/test/acceptance/coffee/DeletingAThreadTests.js b/services/chat/test/acceptance/coffee/DeletingAThreadTests.js index 843134bbd8..98fd62bc76 100644 --- a/services/chat/test/acceptance/coffee/DeletingAThreadTests.js +++ b/services/chat/test/acceptance/coffee/DeletingAThreadTests.js @@ -1,3 +1,9 @@ +/* eslint-disable + max-len, + no-unused-vars, +*/ +// TODO: This file was created by bulk-decaffeinate. +// Fix any style issues and re-enable lint. /* * decaffeinate suggestions: * DS102: Remove unnecessary code created because of implicit returns diff --git a/services/chat/test/acceptance/coffee/EditingAMessageTests.js b/services/chat/test/acceptance/coffee/EditingAMessageTests.js index 03bbbeab0a..de39aa47a1 100644 --- a/services/chat/test/acceptance/coffee/EditingAMessageTests.js +++ b/services/chat/test/acceptance/coffee/EditingAMessageTests.js @@ -1,3 +1,9 @@ +/* eslint-disable + camelcase, + max-len, +*/ +// TODO: This file was created by bulk-decaffeinate. +// Fix any style issues and re-enable lint. /* * decaffeinate suggestions: * DS102: Remove unnecessary code created because of implicit returns diff --git a/services/chat/test/acceptance/coffee/GettingMessagesTests.js b/services/chat/test/acceptance/coffee/GettingMessagesTests.js index a2d3c81df6..d84eab01b5 100644 --- a/services/chat/test/acceptance/coffee/GettingMessagesTests.js +++ b/services/chat/test/acceptance/coffee/GettingMessagesTests.js @@ -1,3 +1,10 @@ +/* eslint-disable + handle-callback-err, + max-len, + no-unused-vars, +*/ +// TODO: This file was created by bulk-decaffeinate. +// Fix any style issues and re-enable lint. /* * decaffeinate suggestions: * DS102: Remove unnecessary code created because of implicit returns diff --git a/services/chat/test/acceptance/coffee/ResolvingAThreadTests.js b/services/chat/test/acceptance/coffee/ResolvingAThreadTests.js index bad9b5feef..fd4522c7ab 100644 --- a/services/chat/test/acceptance/coffee/ResolvingAThreadTests.js +++ b/services/chat/test/acceptance/coffee/ResolvingAThreadTests.js @@ -1,3 +1,10 @@ +/* eslint-disable + camelcase, + max-len, + no-unused-vars, +*/ +// TODO: This file was created by bulk-decaffeinate. +// Fix any style issues and re-enable lint. /* * decaffeinate suggestions: * DS102: Remove unnecessary code created because of implicit returns diff --git a/services/chat/test/acceptance/coffee/SendingAMessageTests.js b/services/chat/test/acceptance/coffee/SendingAMessageTests.js index d1459efe9b..153b4c13a5 100644 --- a/services/chat/test/acceptance/coffee/SendingAMessageTests.js +++ b/services/chat/test/acceptance/coffee/SendingAMessageTests.js @@ -1,3 +1,11 @@ +/* eslint-disable + handle-callback-err, + max-len, + no-return-assign, + node/no-deprecated-api, +*/ +// TODO: This file was created by bulk-decaffeinate. +// Fix any style issues and re-enable lint. /* * decaffeinate suggestions: * DS102: Remove unnecessary code created because of implicit returns diff --git a/services/chat/test/acceptance/coffee/helpers/ChatApp.js b/services/chat/test/acceptance/coffee/helpers/ChatApp.js index 916901b08c..7dc5e78b21 100644 --- a/services/chat/test/acceptance/coffee/helpers/ChatApp.js +++ b/services/chat/test/acceptance/coffee/helpers/ChatApp.js @@ -1,3 +1,8 @@ +/* eslint-disable + handle-callback-err, +*/ +// TODO: This file was created by bulk-decaffeinate. +// Fix any style issues and re-enable lint. /* * decaffeinate suggestions: * DS101: Remove unnecessary use of Array.from diff --git a/services/chat/test/acceptance/coffee/helpers/ChatClient.js b/services/chat/test/acceptance/coffee/helpers/ChatClient.js index 34c8d4cf5b..7c866d8ac5 100644 --- a/services/chat/test/acceptance/coffee/helpers/ChatClient.js +++ b/services/chat/test/acceptance/coffee/helpers/ChatClient.js @@ -1,3 +1,9 @@ +/* eslint-disable + camelcase, + max-len, +*/ +// TODO: This file was created by bulk-decaffeinate. +// Fix any style issues and re-enable lint. /* * decaffeinate suggestions: * DS102: Remove unnecessary code created because of implicit returns From 08c43ea4bf49fbb4906c73d94761b584b8a05356 Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Thu, 20 Dec 2018 14:14:09 -0500 Subject: [PATCH 28/33] Rename test/acceptance/coffee to test/acceptance/js --- .../chat/test/acceptance/{coffee => js}/DeletingAMessageTests.js | 0 .../chat/test/acceptance/{coffee => js}/DeletingAThreadTests.js | 0 .../chat/test/acceptance/{coffee => js}/EditingAMessageTests.js | 0 .../chat/test/acceptance/{coffee => js}/GettingMessagesTests.js | 0 .../chat/test/acceptance/{coffee => js}/ResolvingAThreadTests.js | 0 .../chat/test/acceptance/{coffee => js}/SendingAMessageTests.js | 0 services/chat/test/acceptance/{coffee => js}/helpers/ChatApp.js | 0 .../chat/test/acceptance/{coffee => js}/helpers/ChatClient.js | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename services/chat/test/acceptance/{coffee => js}/DeletingAMessageTests.js (100%) rename services/chat/test/acceptance/{coffee => js}/DeletingAThreadTests.js (100%) rename services/chat/test/acceptance/{coffee => js}/EditingAMessageTests.js (100%) rename services/chat/test/acceptance/{coffee => js}/GettingMessagesTests.js (100%) rename services/chat/test/acceptance/{coffee => js}/ResolvingAThreadTests.js (100%) rename services/chat/test/acceptance/{coffee => js}/SendingAMessageTests.js (100%) rename services/chat/test/acceptance/{coffee => js}/helpers/ChatApp.js (100%) rename services/chat/test/acceptance/{coffee => js}/helpers/ChatClient.js (100%) diff --git a/services/chat/test/acceptance/coffee/DeletingAMessageTests.js b/services/chat/test/acceptance/js/DeletingAMessageTests.js similarity index 100% rename from services/chat/test/acceptance/coffee/DeletingAMessageTests.js rename to services/chat/test/acceptance/js/DeletingAMessageTests.js diff --git a/services/chat/test/acceptance/coffee/DeletingAThreadTests.js b/services/chat/test/acceptance/js/DeletingAThreadTests.js similarity index 100% rename from services/chat/test/acceptance/coffee/DeletingAThreadTests.js rename to services/chat/test/acceptance/js/DeletingAThreadTests.js diff --git a/services/chat/test/acceptance/coffee/EditingAMessageTests.js b/services/chat/test/acceptance/js/EditingAMessageTests.js similarity index 100% rename from services/chat/test/acceptance/coffee/EditingAMessageTests.js rename to services/chat/test/acceptance/js/EditingAMessageTests.js diff --git a/services/chat/test/acceptance/coffee/GettingMessagesTests.js b/services/chat/test/acceptance/js/GettingMessagesTests.js similarity index 100% rename from services/chat/test/acceptance/coffee/GettingMessagesTests.js rename to services/chat/test/acceptance/js/GettingMessagesTests.js diff --git a/services/chat/test/acceptance/coffee/ResolvingAThreadTests.js b/services/chat/test/acceptance/js/ResolvingAThreadTests.js similarity index 100% rename from services/chat/test/acceptance/coffee/ResolvingAThreadTests.js rename to services/chat/test/acceptance/js/ResolvingAThreadTests.js diff --git a/services/chat/test/acceptance/coffee/SendingAMessageTests.js b/services/chat/test/acceptance/js/SendingAMessageTests.js similarity index 100% rename from services/chat/test/acceptance/coffee/SendingAMessageTests.js rename to services/chat/test/acceptance/js/SendingAMessageTests.js diff --git a/services/chat/test/acceptance/coffee/helpers/ChatApp.js b/services/chat/test/acceptance/js/helpers/ChatApp.js similarity index 100% rename from services/chat/test/acceptance/coffee/helpers/ChatApp.js rename to services/chat/test/acceptance/js/helpers/ChatApp.js diff --git a/services/chat/test/acceptance/coffee/helpers/ChatClient.js b/services/chat/test/acceptance/js/helpers/ChatClient.js similarity index 100% rename from services/chat/test/acceptance/coffee/helpers/ChatClient.js rename to services/chat/test/acceptance/js/helpers/ChatClient.js From c82e899c2a6785a8746e0b6234a745d8aa437fe2 Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Thu, 20 Dec 2018 14:14:11 -0500 Subject: [PATCH 29/33] Prettier: convert test/acceptance decaffeinated files to Prettier format --- .../acceptance/js/DeletingAMessageTests.js | 100 +++--- .../acceptance/js/DeletingAThreadTests.js | 85 ++--- .../acceptance/js/EditingAMessageTests.js | 99 +++--- .../acceptance/js/GettingMessagesTests.js | 190 +++++++---- .../acceptance/js/ResolvingAThreadTests.js | 219 +++++++------ .../acceptance/js/SendingAMessageTests.js | 299 ++++++++++-------- .../test/acceptance/js/helpers/ChatApp.js | 60 ++-- .../test/acceptance/js/helpers/ChatClient.js | 161 ++++++---- 8 files changed, 719 insertions(+), 494 deletions(-) diff --git a/services/chat/test/acceptance/js/DeletingAMessageTests.js b/services/chat/test/acceptance/js/DeletingAMessageTests.js index 1af37a990a..9f13530cd4 100644 --- a/services/chat/test/acceptance/js/DeletingAMessageTests.js +++ b/services/chat/test/acceptance/js/DeletingAMessageTests.js @@ -8,46 +8,66 @@ * DS102: Remove unnecessary code created because of implicit returns * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ -const {ObjectId} = require("../../../app/js/mongojs"); -const { expect } = require("chai"); +const { ObjectId } = require('../../../app/js/mongojs') +const { expect } = require('chai') -const ChatClient = require("./helpers/ChatClient"); -const ChatApp = require("./helpers/ChatApp"); +const ChatClient = require('./helpers/ChatClient') +const ChatApp = require('./helpers/ChatApp') -describe("Deleting a message", function() { - before(function(done) { - this.project_id = ObjectId().toString(); - this.user_id = ObjectId().toString(); - this.thread_id = ObjectId().toString(); - return ChatApp.ensureRunning(done); - }); +describe('Deleting a message', function() { + before(function(done) { + this.project_id = ObjectId().toString() + this.user_id = ObjectId().toString() + this.thread_id = ObjectId().toString() + return ChatApp.ensureRunning(done) + }) - return describe("in a thread", function() { - before(function(done) { - return ChatClient.sendMessage(this.project_id, this.thread_id, this.user_id, "first message", (error, response, message) => { - this.message = message; - expect(error).to.be.null; - expect(response.statusCode).to.equal(201); - return ChatClient.sendMessage(this.project_id, this.thread_id, this.user_id, "deleted message", (error, response, message1) => { - this.message = message1; - expect(error).to.be.null; - expect(response.statusCode).to.equal(201); - return ChatClient.deleteMessage(this.project_id, this.thread_id, this.message.id, (error, response, body) => { - expect(error).to.be.null; - expect(response.statusCode).to.equal(204); - return done(); - }); - }); - }); - }); - - return it("should then remove the message from the threads", function(done) { - return ChatClient.getThreads(this.project_id, (error, response, threads) => { - expect(error).to.be.null; - expect(response.statusCode).to.equal(200); - expect(threads[this.thread_id].messages.length).to.equal(1); - return done(); - }); - }); - }); -}); \ No newline at end of file + return describe('in a thread', function() { + before(function(done) { + return ChatClient.sendMessage( + this.project_id, + this.thread_id, + this.user_id, + 'first message', + (error, response, message) => { + this.message = message + expect(error).to.be.null + expect(response.statusCode).to.equal(201) + return ChatClient.sendMessage( + this.project_id, + this.thread_id, + this.user_id, + 'deleted message', + (error, response, message1) => { + this.message = message1 + expect(error).to.be.null + expect(response.statusCode).to.equal(201) + return ChatClient.deleteMessage( + this.project_id, + this.thread_id, + this.message.id, + (error, response, body) => { + expect(error).to.be.null + expect(response.statusCode).to.equal(204) + return done() + } + ) + } + ) + } + ) + }) + + return it('should then remove the message from the threads', function(done) { + return ChatClient.getThreads( + this.project_id, + (error, response, threads) => { + expect(error).to.be.null + expect(response.statusCode).to.equal(200) + expect(threads[this.thread_id].messages.length).to.equal(1) + return done() + } + ) + }) + }) +}) diff --git a/services/chat/test/acceptance/js/DeletingAThreadTests.js b/services/chat/test/acceptance/js/DeletingAThreadTests.js index 98fd62bc76..527e808568 100644 --- a/services/chat/test/acceptance/js/DeletingAThreadTests.js +++ b/services/chat/test/acceptance/js/DeletingAThreadTests.js @@ -9,42 +9,55 @@ * DS102: Remove unnecessary code created because of implicit returns * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ -const {ObjectId} = require("../../../app/js/mongojs"); -const { expect } = require("chai"); -const crypto = require("crypto"); +const { ObjectId } = require('../../../app/js/mongojs') +const { expect } = require('chai') +const crypto = require('crypto') -const ChatClient = require("./helpers/ChatClient"); -const ChatApp = require("./helpers/ChatApp"); +const ChatClient = require('./helpers/ChatClient') +const ChatApp = require('./helpers/ChatApp') -describe("Deleting a thread", function() { - before(function(done) { - this.project_id = ObjectId().toString(); - this.user_id = ObjectId().toString(); - return ChatApp.ensureRunning(done); - }); +describe('Deleting a thread', function() { + before(function(done) { + this.project_id = ObjectId().toString() + this.user_id = ObjectId().toString() + return ChatApp.ensureRunning(done) + }) - return describe("with a thread that is deleted", function() { - before(function(done) { - this.thread_id = ObjectId().toString(); - this.content = "deleted thread message"; - return ChatClient.sendMessage(this.project_id, this.thread_id, this.user_id, this.content, (error, response, body) => { - expect(error).to.be.null; - expect(response.statusCode).to.equal(201); - return ChatClient.deleteThread(this.project_id, this.thread_id, (error, response, body) => { - expect(error).to.be.null; - expect(response.statusCode).to.equal(204); - return done(); - }); - }); - }); - - return it("should then not list the thread for the project", function(done) { - return ChatClient.getThreads(this.project_id, (error, response, threads) => { - expect(error).to.be.null; - expect(response.statusCode).to.equal(200); - expect(Object.keys(threads).length).to.equal(0); - return done(); - }); - }); - }); -}); + return describe('with a thread that is deleted', function() { + before(function(done) { + this.thread_id = ObjectId().toString() + this.content = 'deleted thread message' + return ChatClient.sendMessage( + this.project_id, + this.thread_id, + this.user_id, + this.content, + (error, response, body) => { + expect(error).to.be.null + expect(response.statusCode).to.equal(201) + return ChatClient.deleteThread( + this.project_id, + this.thread_id, + (error, response, body) => { + expect(error).to.be.null + expect(response.statusCode).to.equal(204) + return done() + } + ) + } + ) + }) + + return it('should then not list the thread for the project', function(done) { + return ChatClient.getThreads( + this.project_id, + (error, response, threads) => { + expect(error).to.be.null + expect(response.statusCode).to.equal(200) + expect(Object.keys(threads).length).to.equal(0) + return done() + } + ) + }) + }) +}) diff --git a/services/chat/test/acceptance/js/EditingAMessageTests.js b/services/chat/test/acceptance/js/EditingAMessageTests.js index de39aa47a1..bf107412ed 100644 --- a/services/chat/test/acceptance/js/EditingAMessageTests.js +++ b/services/chat/test/acceptance/js/EditingAMessageTests.js @@ -9,47 +9,64 @@ * DS102: Remove unnecessary code created because of implicit returns * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ -const {ObjectId} = require("../../../app/js/mongojs"); -const { expect } = require("chai"); +const { ObjectId } = require('../../../app/js/mongojs') +const { expect } = require('chai') -const ChatClient = require("./helpers/ChatClient"); -const ChatApp = require("./helpers/ChatApp"); +const ChatClient = require('./helpers/ChatClient') +const ChatApp = require('./helpers/ChatApp') -describe("Editing a message", function() { - before(function(done) { - this.project_id = ObjectId().toString(); - this.user_id = ObjectId().toString(); - this.thread_id = ObjectId().toString(); - return ChatApp.ensureRunning(done); - }); +describe('Editing a message', function() { + before(function(done) { + this.project_id = ObjectId().toString() + this.user_id = ObjectId().toString() + this.thread_id = ObjectId().toString() + return ChatApp.ensureRunning(done) + }) - return describe("in a thread", function() { - before(function(done) { - this.content = "thread message"; - this.new_content = "updated thread message"; - return ChatClient.sendMessage(this.project_id, this.thread_id, this.user_id, this.content, (error, response, message) => { - this.message = message; - expect(error).to.be.null; - expect(response.statusCode).to.equal(201); - expect(this.message.id).to.exist; - expect(this.message.content).to.equal(this.content); - return ChatClient.editMessage(this.project_id, this.thread_id, this.message.id, this.new_content, (error, response, new_message) => { - this.new_message = new_message; - expect(error).to.be.null; - expect(response.statusCode).to.equal(204); - return done(); - }); - }); - }); - - return it("should then list the updated message in the threads", function(done) { - return ChatClient.getThreads(this.project_id, (error, response, threads) => { - expect(error).to.be.null; - expect(response.statusCode).to.equal(200); - expect(threads[this.thread_id].messages.length).to.equal(1); - expect(threads[this.thread_id].messages[0].content).to.equal(this.new_content); - return done(); - }); - }); - }); -}); \ No newline at end of file + return describe('in a thread', function() { + before(function(done) { + this.content = 'thread message' + this.new_content = 'updated thread message' + return ChatClient.sendMessage( + this.project_id, + this.thread_id, + this.user_id, + this.content, + (error, response, message) => { + this.message = message + expect(error).to.be.null + expect(response.statusCode).to.equal(201) + expect(this.message.id).to.exist + expect(this.message.content).to.equal(this.content) + return ChatClient.editMessage( + this.project_id, + this.thread_id, + this.message.id, + this.new_content, + (error, response, new_message) => { + this.new_message = new_message + expect(error).to.be.null + expect(response.statusCode).to.equal(204) + return done() + } + ) + } + ) + }) + + return it('should then list the updated message in the threads', function(done) { + return ChatClient.getThreads( + this.project_id, + (error, response, threads) => { + expect(error).to.be.null + expect(response.statusCode).to.equal(200) + expect(threads[this.thread_id].messages.length).to.equal(1) + expect(threads[this.thread_id].messages[0].content).to.equal( + this.new_content + ) + return done() + } + ) + }) + }) +}) diff --git a/services/chat/test/acceptance/js/GettingMessagesTests.js b/services/chat/test/acceptance/js/GettingMessagesTests.js index d84eab01b5..0fe17a5c7c 100644 --- a/services/chat/test/acceptance/js/GettingMessagesTests.js +++ b/services/chat/test/acceptance/js/GettingMessagesTests.js @@ -10,77 +10,129 @@ * DS102: Remove unnecessary code created because of implicit returns * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ -const {ObjectId} = require("../../../app/js/mongojs"); -const { expect } = require("chai"); -const async = require("async"); -const crypto = require("crypto"); +const { ObjectId } = require('../../../app/js/mongojs') +const { expect } = require('chai') +const async = require('async') +const crypto = require('crypto') -const ChatClient = require("./helpers/ChatClient"); -const ChatApp = require("./helpers/ChatApp"); +const ChatClient = require('./helpers/ChatClient') +const ChatApp = require('./helpers/ChatApp') -describe("Getting messages", function() { - before(function(done) { - this.user_id1 = ObjectId().toString(); - this.user_id2 = ObjectId().toString(); - this.content1 = "foo bar"; - this.content2 = "hello world"; - return ChatApp.ensureRunning(done); - }); +describe('Getting messages', function() { + before(function(done) { + this.user_id1 = ObjectId().toString() + this.user_id2 = ObjectId().toString() + this.content1 = 'foo bar' + this.content2 = 'hello world' + return ChatApp.ensureRunning(done) + }) - describe("globally", function() { - before(function(done) { - this.project_id = ObjectId().toString(); - return async.series([ - cb => ChatClient.sendGlobalMessage(this.project_id, this.user_id1, this.content1, cb), - cb => ChatClient.sendGlobalMessage(this.project_id, this.user_id2, this.content2, cb) - ], done); - }); - - return it("should contain the messages and populated users when getting the messages", function(done) { - return ChatClient.getGlobalMessages(this.project_id, (error, response, messages) => { - expect(messages.length).to.equal(2); - messages.reverse(); - expect(messages[0].content).to.equal(this.content1); - expect(messages[0].user_id).to.equal(this.user_id1); - expect(messages[1].content).to.equal(this.content2); - expect(messages[1].user_id).to.equal(this.user_id2); - return done(); - }); - }); - }); + describe('globally', function() { + before(function(done) { + this.project_id = ObjectId().toString() + return async.series( + [ + cb => + ChatClient.sendGlobalMessage( + this.project_id, + this.user_id1, + this.content1, + cb + ), + cb => + ChatClient.sendGlobalMessage( + this.project_id, + this.user_id2, + this.content2, + cb + ) + ], + done + ) + }) - return describe("from all the threads", function() { - before(function(done) { - this.project_id = ObjectId().toString(); - this.thread_id1 = ObjectId().toString(); - this.thread_id2 = ObjectId().toString(); - return async.series([ - cb => ChatClient.sendMessage(this.project_id, this.thread_id1, this.user_id1, "one", cb), - cb => ChatClient.sendMessage(this.project_id, this.thread_id2, this.user_id2, "two", cb), - cb => ChatClient.sendMessage(this.project_id, this.thread_id1, this.user_id1, "three", cb), - cb => ChatClient.sendMessage(this.project_id, this.thread_id2, this.user_id2, "four", cb) - ], done); - }); - - return it("should contain a dictionary of threads with messages with populated users", function(done) { - return ChatClient.getThreads(this.project_id, (error, response, threads) => { - expect(Object.keys(threads).length).to.equal(2); - const thread1 = threads[this.thread_id1]; - expect(thread1.messages.length).to.equal(2); - const thread2 = threads[this.thread_id2]; - expect(thread2.messages.length).to.equal(2); - - expect(thread1.messages[0].content).to.equal("one"); - expect(thread1.messages[0].user_id).to.equal(this.user_id1); - expect(thread1.messages[1].content).to.equal("three"); - expect(thread1.messages[1].user_id).to.equal(this.user_id1); + return it('should contain the messages and populated users when getting the messages', function(done) { + return ChatClient.getGlobalMessages( + this.project_id, + (error, response, messages) => { + expect(messages.length).to.equal(2) + messages.reverse() + expect(messages[0].content).to.equal(this.content1) + expect(messages[0].user_id).to.equal(this.user_id1) + expect(messages[1].content).to.equal(this.content2) + expect(messages[1].user_id).to.equal(this.user_id2) + return done() + } + ) + }) + }) - expect(thread2.messages[0].content).to.equal("two"); - expect(thread2.messages[0].user_id).to.equal(this.user_id2); - expect(thread2.messages[1].content).to.equal("four"); - expect(thread2.messages[1].user_id).to.equal(this.user_id2); - return done(); - }); - }); - }); -}); + return describe('from all the threads', function() { + before(function(done) { + this.project_id = ObjectId().toString() + this.thread_id1 = ObjectId().toString() + this.thread_id2 = ObjectId().toString() + return async.series( + [ + cb => + ChatClient.sendMessage( + this.project_id, + this.thread_id1, + this.user_id1, + 'one', + cb + ), + cb => + ChatClient.sendMessage( + this.project_id, + this.thread_id2, + this.user_id2, + 'two', + cb + ), + cb => + ChatClient.sendMessage( + this.project_id, + this.thread_id1, + this.user_id1, + 'three', + cb + ), + cb => + ChatClient.sendMessage( + this.project_id, + this.thread_id2, + this.user_id2, + 'four', + cb + ) + ], + done + ) + }) + + return it('should contain a dictionary of threads with messages with populated users', function(done) { + return ChatClient.getThreads( + this.project_id, + (error, response, threads) => { + expect(Object.keys(threads).length).to.equal(2) + const thread1 = threads[this.thread_id1] + expect(thread1.messages.length).to.equal(2) + const thread2 = threads[this.thread_id2] + expect(thread2.messages.length).to.equal(2) + + expect(thread1.messages[0].content).to.equal('one') + expect(thread1.messages[0].user_id).to.equal(this.user_id1) + expect(thread1.messages[1].content).to.equal('three') + expect(thread1.messages[1].user_id).to.equal(this.user_id1) + + expect(thread2.messages[0].content).to.equal('two') + expect(thread2.messages[0].user_id).to.equal(this.user_id2) + expect(thread2.messages[1].content).to.equal('four') + expect(thread2.messages[1].user_id).to.equal(this.user_id2) + return done() + } + ) + }) + }) +}) diff --git a/services/chat/test/acceptance/js/ResolvingAThreadTests.js b/services/chat/test/acceptance/js/ResolvingAThreadTests.js index fd4522c7ab..255a1fc5e1 100644 --- a/services/chat/test/acceptance/js/ResolvingAThreadTests.js +++ b/services/chat/test/acceptance/js/ResolvingAThreadTests.js @@ -10,95 +10,138 @@ * DS102: Remove unnecessary code created because of implicit returns * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ -const {ObjectId} = require("../../../app/js/mongojs"); -const { expect } = require("chai"); -const crypto = require("crypto"); +const { ObjectId } = require('../../../app/js/mongojs') +const { expect } = require('chai') +const crypto = require('crypto') -const ChatClient = require("./helpers/ChatClient"); -const ChatApp = require("./helpers/ChatApp"); +const ChatClient = require('./helpers/ChatClient') +const ChatApp = require('./helpers/ChatApp') -describe("Resolving a thread", function() { - before(function(done) { - this.project_id = ObjectId().toString(); - this.user_id = ObjectId().toString(); - return ChatApp.ensureRunning(done); - }); +describe('Resolving a thread', function() { + before(function(done) { + this.project_id = ObjectId().toString() + this.user_id = ObjectId().toString() + return ChatApp.ensureRunning(done) + }) - describe("with a resolved thread", function() { - before(function(done) { - this.thread_id = ObjectId().toString(); - this.content = "resolved message"; - return ChatClient.sendMessage(this.project_id, this.thread_id, this.user_id, this.content, (error, response, body) => { - expect(error).to.be.null; - expect(response.statusCode).to.equal(201); - return ChatClient.resolveThread(this.project_id, this.thread_id, this.user_id, (error, response, body) => { - expect(error).to.be.null; - expect(response.statusCode).to.equal(204); - return done(); - }); - }); - }); - - return it("should then list the thread as resolved", function(done) { - return ChatClient.getThreads(this.project_id, (error, response, threads) => { - expect(error).to.be.null; - expect(response.statusCode).to.equal(200); - expect(threads[this.thread_id].resolved).to.equal(true); - expect(threads[this.thread_id].resolved_by_user_id).to.equal(this.user_id); - const resolved_at = new Date(threads[this.thread_id].resolved_at); - expect(new Date() - resolved_at).to.be.below(1000); - return done(); - }); - }); - }); + describe('with a resolved thread', function() { + before(function(done) { + this.thread_id = ObjectId().toString() + this.content = 'resolved message' + return ChatClient.sendMessage( + this.project_id, + this.thread_id, + this.user_id, + this.content, + (error, response, body) => { + expect(error).to.be.null + expect(response.statusCode).to.equal(201) + return ChatClient.resolveThread( + this.project_id, + this.thread_id, + this.user_id, + (error, response, body) => { + expect(error).to.be.null + expect(response.statusCode).to.equal(204) + return done() + } + ) + } + ) + }) - describe("when a thread is not resolved", function() { - before(function(done) { - this.thread_id = ObjectId().toString(); - this.content = "open message"; - return ChatClient.sendMessage(this.project_id, this.thread_id, this.user_id, this.content, (error, response, body) => { - expect(error).to.be.null; - expect(response.statusCode).to.equal(201); - return done(); - }); - }); - - return it("should not list the thread as resolved", function(done) { - return ChatClient.getThreads(this.project_id, (error, response, threads) => { - expect(error).to.be.null; - expect(response.statusCode).to.equal(200); - expect(threads[this.thread_id].resolved).to.be.undefined; - return done(); - }); - }); - }); - - return describe("when a thread is resolved then reopened", function() { - before(function(done) { - this.thread_id = ObjectId().toString(); - this.content = "resolved message"; - return ChatClient.sendMessage(this.project_id, this.thread_id, this.user_id, this.content, (error, response, body) => { - expect(error).to.be.null; - expect(response.statusCode).to.equal(201); - return ChatClient.resolveThread(this.project_id, this.thread_id, this.user_id, (error, response, body) => { - expect(error).to.be.null; - expect(response.statusCode).to.equal(204); - return ChatClient.reopenThread(this.project_id, this.thread_id, (error, response, body) => { - expect(error).to.be.null; - expect(response.statusCode).to.equal(204); - return done(); - }); - }); - }); - }); - - return it("should not list the thread as resolved", function(done) { - return ChatClient.getThreads(this.project_id, (error, response, threads) => { - expect(error).to.be.null; - expect(response.statusCode).to.equal(200); - expect(threads[this.thread_id].resolved).to.be.undefined; - return done(); - }); - }); - }); -}); + return it('should then list the thread as resolved', function(done) { + return ChatClient.getThreads( + this.project_id, + (error, response, threads) => { + expect(error).to.be.null + expect(response.statusCode).to.equal(200) + expect(threads[this.thread_id].resolved).to.equal(true) + expect(threads[this.thread_id].resolved_by_user_id).to.equal( + this.user_id + ) + const resolved_at = new Date(threads[this.thread_id].resolved_at) + expect(new Date() - resolved_at).to.be.below(1000) + return done() + } + ) + }) + }) + + describe('when a thread is not resolved', function() { + before(function(done) { + this.thread_id = ObjectId().toString() + this.content = 'open message' + return ChatClient.sendMessage( + this.project_id, + this.thread_id, + this.user_id, + this.content, + (error, response, body) => { + expect(error).to.be.null + expect(response.statusCode).to.equal(201) + return done() + } + ) + }) + + return it('should not list the thread as resolved', function(done) { + return ChatClient.getThreads( + this.project_id, + (error, response, threads) => { + expect(error).to.be.null + expect(response.statusCode).to.equal(200) + expect(threads[this.thread_id].resolved).to.be.undefined + return done() + } + ) + }) + }) + + return describe('when a thread is resolved then reopened', function() { + before(function(done) { + this.thread_id = ObjectId().toString() + this.content = 'resolved message' + return ChatClient.sendMessage( + this.project_id, + this.thread_id, + this.user_id, + this.content, + (error, response, body) => { + expect(error).to.be.null + expect(response.statusCode).to.equal(201) + return ChatClient.resolveThread( + this.project_id, + this.thread_id, + this.user_id, + (error, response, body) => { + expect(error).to.be.null + expect(response.statusCode).to.equal(204) + return ChatClient.reopenThread( + this.project_id, + this.thread_id, + (error, response, body) => { + expect(error).to.be.null + expect(response.statusCode).to.equal(204) + return done() + } + ) + } + ) + } + ) + }) + + return it('should not list the thread as resolved', function(done) { + return ChatClient.getThreads( + this.project_id, + (error, response, threads) => { + expect(error).to.be.null + expect(response.statusCode).to.equal(200) + expect(threads[this.thread_id].resolved).to.be.undefined + return done() + } + ) + }) + }) +}) diff --git a/services/chat/test/acceptance/js/SendingAMessageTests.js b/services/chat/test/acceptance/js/SendingAMessageTests.js index 153b4c13a5..f837a2edd5 100644 --- a/services/chat/test/acceptance/js/SendingAMessageTests.js +++ b/services/chat/test/acceptance/js/SendingAMessageTests.js @@ -11,133 +11,180 @@ * DS102: Remove unnecessary code created because of implicit returns * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ -const {ObjectId} = require("../../../app/js/mongojs"); -const { expect } = require("chai"); +const { ObjectId } = require('../../../app/js/mongojs') +const { expect } = require('chai') -const ChatClient = require("./helpers/ChatClient"); -const ChatApp = require("./helpers/ChatApp"); +const ChatClient = require('./helpers/ChatClient') +const ChatApp = require('./helpers/ChatApp') -describe("Sending a message", function() { - before(done => ChatApp.ensureRunning(done)); +describe('Sending a message', function() { + before(done => ChatApp.ensureRunning(done)) - describe("globally", function() { - before(function(done) { - this.project_id = ObjectId().toString(); - this.user_id = ObjectId().toString(); - this.content = "global message"; - return ChatClient.sendGlobalMessage(this.project_id, this.user_id, this.content, (error, response, body) => { - expect(error).to.be.null; - expect(response.statusCode).to.equal(201); - expect(body.content).to.equal(this.content); - expect(body.user_id).to.equal(this.user_id); - expect(body.room_id).to.equal(this.project_id); - return done(); - }); - }); - - return it("should then list the message in the project messages", function(done) { - return ChatClient.getGlobalMessages(this.project_id, (error, response, messages) => { - expect(error).to.be.null; - expect(response.statusCode).to.equal(200); - expect(messages.length).to.equal(1); - expect(messages[0].content).to.equal(this.content); - return done(); - }); - }); - }); + describe('globally', function() { + before(function(done) { + this.project_id = ObjectId().toString() + this.user_id = ObjectId().toString() + this.content = 'global message' + return ChatClient.sendGlobalMessage( + this.project_id, + this.user_id, + this.content, + (error, response, body) => { + expect(error).to.be.null + expect(response.statusCode).to.equal(201) + expect(body.content).to.equal(this.content) + expect(body.user_id).to.equal(this.user_id) + expect(body.room_id).to.equal(this.project_id) + return done() + } + ) + }) - describe("to a thread", function() { - before(function(done) { - this.project_id = ObjectId().toString(); - this.user_id = ObjectId().toString(); - this.thread_id = ObjectId().toString(); - this.content = "thread message"; - return ChatClient.sendMessage(this.project_id, this.thread_id, this.user_id, this.content, (error, response, body) => { - expect(error).to.be.null; - expect(response.statusCode).to.equal(201); - expect(body.content).to.equal(this.content); - expect(body.user_id).to.equal(this.user_id); - expect(body.room_id).to.equal(this.project_id); - return done(); - }); - }); - - it("should then list the message in the threads", function(done) { - return ChatClient.getThreads(this.project_id, (error, response, threads) => { - expect(error).to.be.null; - expect(response.statusCode).to.equal(200); - expect(threads[this.thread_id].messages.length).to.equal(1); - expect(threads[this.thread_id].messages[0].content).to.equal(this.content); - return done(); - }); - }); - - return it("should not appear in the global messages", function(done) { - return ChatClient.getGlobalMessages(this.project_id, (error, response, messages) => { - expect(error).to.be.null; - expect(response.statusCode).to.equal(200); - expect(messages.length).to.equal(0); - return done(); - }); - }); - }); - - return describe("failure cases", function() { - before(function() { - this.project_id = ObjectId().toString(); - this.user_id = ObjectId().toString(); - return this.thread_id = ObjectId().toString(); - }); - - describe("with a malformed user_id", () => - it("should return a graceful error", function(done) { - return ChatClient.sendMessage(this.project_id, this.thread_id, "malformed-user", "content", (error, response, body) => { - expect(response.statusCode).to.equal(400); - expect(body).to.equal("Invalid user_id"); - return done(); - }); - }) - ); - - describe("with a malformed project_id", () => - it("should return a graceful error", function(done) { - return ChatClient.sendMessage("malformed-project", this.thread_id, this.user_id, "content", (error, response, body) => { - expect(response.statusCode).to.equal(400); - expect(body).to.equal("Invalid project_id"); - return done(); - }); - }) - ); - - describe("with a malformed thread_id", () => - it("should return a graceful error", function(done) { - return ChatClient.sendMessage(this.project_id, "malformed-thread-id", this.user_id, "content", (error, response, body) => { - expect(response.statusCode).to.equal(400); - expect(body).to.equal("Invalid thread_id"); - return done(); - }); - }) - ); - - describe("with no content", () => - it("should return a graceful error", function(done) { - return ChatClient.sendMessage(this.project_id, this.thread_id, this.user_id, null, (error, response, body) => { - expect(response.statusCode).to.equal(400); - expect(body).to.equal("No content provided"); - return done(); - }); - }) - ); - - return describe("with very long content", () => - it("should return a graceful error", function(done) { - const content = new Buffer(10240).toString("hex"); - return ChatClient.sendMessage(this.project_id, this.thread_id, this.user_id, content, (error, response, body) => { - expect(response.statusCode).to.equal(400); - expect(body).to.equal("Content too long (> 10240 bytes)"); - return done(); - }); - }) - ); - }); -}); \ No newline at end of file + return it('should then list the message in the project messages', function(done) { + return ChatClient.getGlobalMessages( + this.project_id, + (error, response, messages) => { + expect(error).to.be.null + expect(response.statusCode).to.equal(200) + expect(messages.length).to.equal(1) + expect(messages[0].content).to.equal(this.content) + return done() + } + ) + }) + }) + + describe('to a thread', function() { + before(function(done) { + this.project_id = ObjectId().toString() + this.user_id = ObjectId().toString() + this.thread_id = ObjectId().toString() + this.content = 'thread message' + return ChatClient.sendMessage( + this.project_id, + this.thread_id, + this.user_id, + this.content, + (error, response, body) => { + expect(error).to.be.null + expect(response.statusCode).to.equal(201) + expect(body.content).to.equal(this.content) + expect(body.user_id).to.equal(this.user_id) + expect(body.room_id).to.equal(this.project_id) + return done() + } + ) + }) + + it('should then list the message in the threads', function(done) { + return ChatClient.getThreads( + this.project_id, + (error, response, threads) => { + expect(error).to.be.null + expect(response.statusCode).to.equal(200) + expect(threads[this.thread_id].messages.length).to.equal(1) + expect(threads[this.thread_id].messages[0].content).to.equal( + this.content + ) + return done() + } + ) + }) + + return it('should not appear in the global messages', function(done) { + return ChatClient.getGlobalMessages( + this.project_id, + (error, response, messages) => { + expect(error).to.be.null + expect(response.statusCode).to.equal(200) + expect(messages.length).to.equal(0) + return done() + } + ) + }) + }) + + return describe('failure cases', function() { + before(function() { + this.project_id = ObjectId().toString() + this.user_id = ObjectId().toString() + return (this.thread_id = ObjectId().toString()) + }) + + describe('with a malformed user_id', () => + it('should return a graceful error', function(done) { + return ChatClient.sendMessage( + this.project_id, + this.thread_id, + 'malformed-user', + 'content', + (error, response, body) => { + expect(response.statusCode).to.equal(400) + expect(body).to.equal('Invalid user_id') + return done() + } + ) + })) + + describe('with a malformed project_id', () => + it('should return a graceful error', function(done) { + return ChatClient.sendMessage( + 'malformed-project', + this.thread_id, + this.user_id, + 'content', + (error, response, body) => { + expect(response.statusCode).to.equal(400) + expect(body).to.equal('Invalid project_id') + return done() + } + ) + })) + + describe('with a malformed thread_id', () => + it('should return a graceful error', function(done) { + return ChatClient.sendMessage( + this.project_id, + 'malformed-thread-id', + this.user_id, + 'content', + (error, response, body) => { + expect(response.statusCode).to.equal(400) + expect(body).to.equal('Invalid thread_id') + return done() + } + ) + })) + + describe('with no content', () => + it('should return a graceful error', function(done) { + return ChatClient.sendMessage( + this.project_id, + this.thread_id, + this.user_id, + null, + (error, response, body) => { + expect(response.statusCode).to.equal(400) + expect(body).to.equal('No content provided') + return done() + } + ) + })) + + return describe('with very long content', () => + it('should return a graceful error', function(done) { + const content = new Buffer(10240).toString('hex') + return ChatClient.sendMessage( + this.project_id, + this.thread_id, + this.user_id, + content, + (error, response, body) => { + expect(response.statusCode).to.equal(400) + expect(body).to.equal('Content too long (> 10240 bytes)') + return done() + } + ) + })) + }) +}) diff --git a/services/chat/test/acceptance/js/helpers/ChatApp.js b/services/chat/test/acceptance/js/helpers/ChatApp.js index 7dc5e78b21..4967dc1d51 100644 --- a/services/chat/test/acceptance/js/helpers/ChatApp.js +++ b/services/chat/test/acceptance/js/helpers/ChatApp.js @@ -11,33 +11,37 @@ * DS207: Consider shorter variations of null checks * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ -const app = require('../../../../app'); -require("logger-sharelatex").logger.level("error"); +const app = require('../../../../app') +require('logger-sharelatex').logger.level('error') module.exports = { - running: false, - initing: false, - callbacks: [], - ensureRunning(callback) { - if (callback == null) { callback = function(error) {}; } - if (this.running) { - return callback(); - } else if (this.initing) { - return this.callbacks.push(callback); - } else { - this.initing = true; - this.callbacks.push(callback); - return app.listen(3010, "localhost", error => { - if (error != null) { throw error; } - this.running = true; - return (() => { - const result = []; - for (callback of Array.from(this.callbacks)) { - result.push(callback()); - } - return result; - })(); - }); - } - } -}; \ No newline at end of file + running: false, + initing: false, + callbacks: [], + ensureRunning(callback) { + if (callback == null) { + callback = function(error) {} + } + if (this.running) { + return callback() + } else if (this.initing) { + return this.callbacks.push(callback) + } else { + this.initing = true + this.callbacks.push(callback) + return app.listen(3010, 'localhost', error => { + if (error != null) { + throw error + } + this.running = true + return (() => { + const result = [] + for (callback of Array.from(this.callbacks)) { + result.push(callback()) + } + return result + })() + }) + } + } +} diff --git a/services/chat/test/acceptance/js/helpers/ChatClient.js b/services/chat/test/acceptance/js/helpers/ChatClient.js index 7c866d8ac5..932e6cc651 100644 --- a/services/chat/test/acceptance/js/helpers/ChatClient.js +++ b/services/chat/test/acceptance/js/helpers/ChatClient.js @@ -9,76 +9,105 @@ * DS102: Remove unnecessary code created because of implicit returns * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ -const request = require("request").defaults({baseUrl: "http://localhost:3010"}); +const request = require('request').defaults({ + baseUrl: 'http://localhost:3010' +}) module.exports = { - sendGlobalMessage(project_id, user_id, content, callback) { - return request.post({ - url: `/project/${project_id}/messages`, - json: { - user_id, - content - } - }, callback); - }, - - getGlobalMessages(project_id, callback) { - return request.get({ - url: `/project/${project_id}/messages`, - json: true - }, callback); - }, + sendGlobalMessage(project_id, user_id, content, callback) { + return request.post( + { + url: `/project/${project_id}/messages`, + json: { + user_id, + content + } + }, + callback + ) + }, - sendMessage(project_id, thread_id, user_id, content, callback) { - return request.post({ - url: `/project/${project_id}/thread/${thread_id}/messages`, - json: { - user_id, - content - } - }, callback); - }, - - getThreads(project_id, callback) { - return request.get({ - url: `/project/${project_id}/threads`, - json: true - }, callback); - }, - - resolveThread(project_id, thread_id, user_id, callback) { - return request.post({ - url: `/project/${project_id}/thread/${thread_id}/resolve`, - json: { - user_id - } - }, callback); - }, + getGlobalMessages(project_id, callback) { + return request.get( + { + url: `/project/${project_id}/messages`, + json: true + }, + callback + ) + }, - reopenThread(project_id, thread_id, callback) { - return request.post({ - url: `/project/${project_id}/thread/${thread_id}/reopen`, - }, callback); - }, + sendMessage(project_id, thread_id, user_id, content, callback) { + return request.post( + { + url: `/project/${project_id}/thread/${thread_id}/messages`, + json: { + user_id, + content + } + }, + callback + ) + }, - deleteThread(project_id, thread_id, callback) { - return request.del({ - url: `/project/${project_id}/thread/${thread_id}`, - }, callback); - }, + getThreads(project_id, callback) { + return request.get( + { + url: `/project/${project_id}/threads`, + json: true + }, + callback + ) + }, - editMessage(project_id, thread_id, message_id, content, callback) { - return request.post({ - url: `/project/${project_id}/thread/${thread_id}/messages/${message_id}/edit`, - json: { - content - } - }, callback); - }, + resolveThread(project_id, thread_id, user_id, callback) { + return request.post( + { + url: `/project/${project_id}/thread/${thread_id}/resolve`, + json: { + user_id + } + }, + callback + ) + }, - deleteMessage(project_id, thread_id, message_id, callback) { - return request.del({ - url: `/project/${project_id}/thread/${thread_id}/messages/${message_id}`, - }, callback); - } -}; + reopenThread(project_id, thread_id, callback) { + return request.post( + { + url: `/project/${project_id}/thread/${thread_id}/reopen` + }, + callback + ) + }, + + deleteThread(project_id, thread_id, callback) { + return request.del( + { + url: `/project/${project_id}/thread/${thread_id}` + }, + callback + ) + }, + + editMessage(project_id, thread_id, message_id, content, callback) { + return request.post( + { + url: `/project/${project_id}/thread/${thread_id}/messages/${message_id}/edit`, + json: { + content + } + }, + callback + ) + }, + + deleteMessage(project_id, thread_id, message_id, callback) { + return request.del( + { + url: `/project/${project_id}/thread/${thread_id}/messages/${message_id}` + }, + callback + ) + } +} From c47ec473e61c22ce4266c4f77729f4ac297cb31e Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Thu, 20 Dec 2018 14:14:11 -0500 Subject: [PATCH 30/33] Rename individual coffee files to js files --- services/chat/{Gruntfile.coffee => Gruntfile.js} | 0 services/chat/{app.coffee => app.js} | 0 .../config/{settings.defaults.coffee => settings.defaults.js} | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename services/chat/{Gruntfile.coffee => Gruntfile.js} (100%) rename services/chat/{app.coffee => app.js} (100%) rename services/chat/config/{settings.defaults.coffee => settings.defaults.js} (100%) diff --git a/services/chat/Gruntfile.coffee b/services/chat/Gruntfile.js similarity index 100% rename from services/chat/Gruntfile.coffee rename to services/chat/Gruntfile.js diff --git a/services/chat/app.coffee b/services/chat/app.js similarity index 100% rename from services/chat/app.coffee rename to services/chat/app.js diff --git a/services/chat/config/settings.defaults.coffee b/services/chat/config/settings.defaults.js similarity index 100% rename from services/chat/config/settings.defaults.coffee rename to services/chat/config/settings.defaults.js From ee4d9766fdb6f881b6b5f75085c6f7fc7111962f Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Thu, 20 Dec 2018 14:14:12 -0500 Subject: [PATCH 31/33] Decaffeinate: convert individual files to js --- services/chat/Gruntfile.js | 130 ++++++++++++++-------- services/chat/app.js | 33 ++++-- services/chat/config/settings.defaults.js | 38 ++++--- 3 files changed, 127 insertions(+), 74 deletions(-) diff --git a/services/chat/Gruntfile.js b/services/chat/Gruntfile.js index b4d7b91f34..8e28c2e65e 100644 --- a/services/chat/Gruntfile.js +++ b/services/chat/Gruntfile.js @@ -1,97 +1,129 @@ -module.exports = (grunt) -> +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md + */ +module.exports = function(grunt) { - # Project configuration. - grunt.initConfig - forever: - app: - options: + // Project configuration. + grunt.initConfig({ + forever: { + app: { + options: { index: "app.js" + } + } + }, - execute: - app: + execute: { + app: { src: "app.js" + } + }, - coffee: - server: + coffee: { + server: { expand: true, flatten: false, cwd: 'app/coffee', src: ['**/*.coffee'], dest: 'app/js/', ext: '.js' + }, - app_server: + app_server: { expand: true, flatten: false, src: ['app.coffee'], dest: './', ext: '.js' + }, - unit_tests: + unit_tests: { expand: true, flatten: false, cwd: 'test/unit/coffee', src: ['**/*.coffee'], dest: 'test/unit/js/', ext: '.js' + }, - acceptance_tests: + acceptance_tests: { expand: true, flatten: false, cwd: 'test/acceptance/coffee', src: ['**/*.coffee'], dest: 'test/acceptance/js/', ext: '.js' + } + }, - watch: - server_coffee: - files: ['app/**/*.coffee', 'test/unit/**/*.coffee'] + watch: { + server_coffee: { + files: ['app/**/*.coffee', 'test/unit/**/*.coffee'], tasks: ['compile:server', 'compile:unit_tests', 'mochaTest'] + } + }, - clean: ["app/js", "test/unit/js"] + clean: ["app/js", "test/unit/js"], - nodemon: - dev: - options: + nodemon: { + dev: { + options: { file: 'app.js' + } + } + }, - concurrent: - dev: - tasks: ['nodemon', 'watch'] - options: + concurrent: { + dev: { + tasks: ['nodemon', 'watch'], + options: { logConcurrentOutput: true + } + } + }, - mochaTest: - unit: - options: - reporter: process.env.MOCHA_RUNNER || "spec" + mochaTest: { + unit: { + options: { + reporter: process.env.MOCHA_RUNNER || "spec", grep: grunt.option("grep") + }, src: ['test/unit/**/*.js'] - acceptance: - options: - reporter: process.env.MOCHA_RUNNER || "spec" + }, + acceptance: { + options: { + reporter: process.env.MOCHA_RUNNER || "spec", grep: grunt.option("grep") + }, src: ['test/acceptance/**/*.js'] + } + }, - plato: - your_task: - files: 'plato': ['app/js/**/*.js'], + plato: { + your_task: { + files: {'plato': ['app/js/**/*.js']} + } + } + }); - grunt.loadNpmTasks 'grunt-contrib-coffee' - grunt.loadNpmTasks 'grunt-contrib-watch' - grunt.loadNpmTasks 'grunt-nodemon' - grunt.loadNpmTasks 'grunt-contrib-clean' - grunt.loadNpmTasks 'grunt-concurrent' - grunt.loadNpmTasks 'grunt-mocha-test' - grunt.loadNpmTasks 'grunt-plato' - grunt.loadNpmTasks 'grunt-execute' - grunt.loadNpmTasks 'grunt-bunyan' - grunt.loadNpmTasks 'grunt-forever' + grunt.loadNpmTasks('grunt-contrib-coffee'); + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-nodemon'); + grunt.loadNpmTasks('grunt-contrib-clean'); + grunt.loadNpmTasks('grunt-concurrent'); + grunt.loadNpmTasks('grunt-mocha-test'); + grunt.loadNpmTasks('grunt-plato'); + grunt.loadNpmTasks('grunt-execute'); + grunt.loadNpmTasks('grunt-bunyan'); + grunt.loadNpmTasks('grunt-forever'); - grunt.registerTask 'compile', ['clean', 'coffee'] - grunt.registerTask 'install', ['compile'] - grunt.registerTask 'default', ['compile', 'bunyan', 'execute'] - grunt.registerTask 'test:unit', ['compile', 'mochaTest:unit'] - grunt.registerTask 'test:acceptance', ['compile:acceptance_tests', 'mochaTest:acceptance'] + grunt.registerTask('compile', ['clean', 'coffee']); + grunt.registerTask('install', ['compile']); + grunt.registerTask('default', ['compile', 'bunyan', 'execute']); + grunt.registerTask('test:unit', ['compile', 'mochaTest:unit']); + return grunt.registerTask('test:acceptance', ['compile:acceptance_tests', 'mochaTest:acceptance']); +}; diff --git a/services/chat/app.js b/services/chat/app.js index 3fad2e610e..1d427bdd98 100644 --- a/services/chat/app.js +++ b/services/chat/app.js @@ -1,13 +1,26 @@ -logger = require 'logger-sharelatex' -settings = require 'settings-sharelatex' +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS103: Rewrite code to no longer use __guard__ + * DS207: Consider shorter variations of null checks + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md + */ +const logger = require('logger-sharelatex'); +const settings = require('settings-sharelatex'); -Server = require "./app/js/server" +const Server = require("./app/js/server"); -if !module.parent # Called directly - port = settings.internal?.chat?.port or 3010 - host = settings.internal?.chat?.host or "localhost" - Server.server.listen port, host, (error) -> - throw error if error? - logger.info "Chat starting up, listening on #{host}:#{port}" +if (!module.parent) { // Called directly + const port = __guard__(settings.internal != null ? settings.internal.chat : undefined, x => x.port) || 3010; + const host = __guard__(settings.internal != null ? settings.internal.chat : undefined, x1 => x1.host) || "localhost"; + Server.server.listen(port, host, function(error) { + if (error != null) { throw error; } + return logger.info(`Chat starting up, listening on ${host}:${port}`); + }); +} -module.exports = Server.server +module.exports = Server.server; + +function __guard__(value, transform) { + return (typeof value !== 'undefined' && value !== null) ? transform(value) : undefined; +} \ No newline at end of file diff --git a/services/chat/config/settings.defaults.js b/services/chat/config/settings.defaults.js index 9e89830fee..f0d219fa23 100644 --- a/services/chat/config/settings.defaults.js +++ b/services/chat/config/settings.defaults.js @@ -1,20 +1,28 @@ -module.exports = - internal: - chat: - host: process.env['LISTEN_ADDRESS'] or "localhost" +module.exports = { + internal: { + chat: { + host: process.env['LISTEN_ADDRESS'] || "localhost", port: 3010 + } + }, - apis: - web: - url: "http://#{process.env['WEB_HOST'] || "localhost"}:#{process.env['WEB_PORT'] or 3000}" - user: "sharelatex" + apis: { + web: { + url: `http://${process.env['WEB_HOST'] || "localhost"}:${process.env['WEB_PORT'] || 3000}`, + user: "sharelatex", pass: "password" + } + }, - mongo: - url : "mongodb://#{process.env['MONGO_HOST'] || "localhost"}/sharelatex" + mongo: { + url : `mongodb://${process.env['MONGO_HOST'] || "localhost"}/sharelatex` + }, - redis: - web: - host: process.env['REDIS_HOST'] || "localhost" - port: "6379" - password: "" \ No newline at end of file + redis: { + web: { + host: process.env['REDIS_HOST'] || "localhost", + port: "6379", + password: "" + } + } +}; \ No newline at end of file From 9f65be577102e11410b4f7029bc075381a21dacb Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Thu, 20 Dec 2018 14:14:14 -0500 Subject: [PATCH 32/33] Prettier: convert individual decaffeinated files to Prettier format --- services/chat/Gruntfile.js | 220 +++++++++++----------- services/chat/app.js | 39 ++-- services/chat/config/settings.defaults.js | 54 +++--- 3 files changed, 164 insertions(+), 149 deletions(-) diff --git a/services/chat/Gruntfile.js b/services/chat/Gruntfile.js index 8e28c2e65e..3459144d54 100644 --- a/services/chat/Gruntfile.js +++ b/services/chat/Gruntfile.js @@ -4,126 +4,126 @@ * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ module.exports = function(grunt) { + // Project configuration. + grunt.initConfig({ + forever: { + app: { + options: { + index: 'app.js' + } + } + }, - // Project configuration. - grunt.initConfig({ - forever: { - app: { - options: { - index: "app.js" - } - } - }, + execute: { + app: { + src: 'app.js' + } + }, - execute: { - app: { - src: "app.js" - } - }, + coffee: { + server: { + expand: true, + flatten: false, + cwd: 'app/coffee', + src: ['**/*.coffee'], + dest: 'app/js/', + ext: '.js' + }, - coffee: { - server: { - expand: true, - flatten: false, - cwd: 'app/coffee', - src: ['**/*.coffee'], - dest: 'app/js/', - ext: '.js' - }, + app_server: { + expand: true, + flatten: false, + src: ['app.coffee'], + dest: './', + ext: '.js' + }, - app_server: { - expand: true, - flatten: false, - src: ['app.coffee'], - dest: './', - ext: '.js' - }, + unit_tests: { + expand: true, + flatten: false, + cwd: 'test/unit/coffee', + src: ['**/*.coffee'], + dest: 'test/unit/js/', + ext: '.js' + }, - unit_tests: { - expand: true, - flatten: false, - cwd: 'test/unit/coffee', - src: ['**/*.coffee'], - dest: 'test/unit/js/', - ext: '.js' - }, + acceptance_tests: { + expand: true, + flatten: false, + cwd: 'test/acceptance/coffee', + src: ['**/*.coffee'], + dest: 'test/acceptance/js/', + ext: '.js' + } + }, - acceptance_tests: { - expand: true, - flatten: false, - cwd: 'test/acceptance/coffee', - src: ['**/*.coffee'], - dest: 'test/acceptance/js/', - ext: '.js' - } - }, + watch: { + server_coffee: { + files: ['app/**/*.coffee', 'test/unit/**/*.coffee'], + tasks: ['compile:server', 'compile:unit_tests', 'mochaTest'] + } + }, - watch: { - server_coffee: { - files: ['app/**/*.coffee', 'test/unit/**/*.coffee'], - tasks: ['compile:server', 'compile:unit_tests', 'mochaTest'] - } - }, + clean: ['app/js', 'test/unit/js'], - clean: ["app/js", "test/unit/js"], + nodemon: { + dev: { + options: { + file: 'app.js' + } + } + }, - nodemon: { - dev: { - options: { - file: 'app.js' - } - } - }, + concurrent: { + dev: { + tasks: ['nodemon', 'watch'], + options: { + logConcurrentOutput: true + } + } + }, - concurrent: { - dev: { - tasks: ['nodemon', 'watch'], - options: { - logConcurrentOutput: true - } - } - }, + mochaTest: { + unit: { + options: { + reporter: process.env.MOCHA_RUNNER || 'spec', + grep: grunt.option('grep') + }, + src: ['test/unit/**/*.js'] + }, + acceptance: { + options: { + reporter: process.env.MOCHA_RUNNER || 'spec', + grep: grunt.option('grep') + }, + src: ['test/acceptance/**/*.js'] + } + }, - mochaTest: { - unit: { - options: { - reporter: process.env.MOCHA_RUNNER || "spec", - grep: grunt.option("grep") - }, - src: ['test/unit/**/*.js'] - }, - acceptance: { - options: { - reporter: process.env.MOCHA_RUNNER || "spec", - grep: grunt.option("grep") - }, - src: ['test/acceptance/**/*.js'] - } - }, + plato: { + your_task: { + files: { plato: ['app/js/**/*.js'] } + } + } + }) - plato: { - your_task: { - files: {'plato': ['app/js/**/*.js']} - } - } - }); - - grunt.loadNpmTasks('grunt-contrib-coffee'); - grunt.loadNpmTasks('grunt-contrib-watch'); - grunt.loadNpmTasks('grunt-nodemon'); - grunt.loadNpmTasks('grunt-contrib-clean'); - grunt.loadNpmTasks('grunt-concurrent'); - grunt.loadNpmTasks('grunt-mocha-test'); - grunt.loadNpmTasks('grunt-plato'); - grunt.loadNpmTasks('grunt-execute'); - grunt.loadNpmTasks('grunt-bunyan'); - grunt.loadNpmTasks('grunt-forever'); - - - grunt.registerTask('compile', ['clean', 'coffee']); - grunt.registerTask('install', ['compile']); - grunt.registerTask('default', ['compile', 'bunyan', 'execute']); - grunt.registerTask('test:unit', ['compile', 'mochaTest:unit']); - return grunt.registerTask('test:acceptance', ['compile:acceptance_tests', 'mochaTest:acceptance']); -}; + grunt.loadNpmTasks('grunt-contrib-coffee') + grunt.loadNpmTasks('grunt-contrib-watch') + grunt.loadNpmTasks('grunt-nodemon') + grunt.loadNpmTasks('grunt-contrib-clean') + grunt.loadNpmTasks('grunt-concurrent') + grunt.loadNpmTasks('grunt-mocha-test') + grunt.loadNpmTasks('grunt-plato') + grunt.loadNpmTasks('grunt-execute') + grunt.loadNpmTasks('grunt-bunyan') + grunt.loadNpmTasks('grunt-forever') + grunt.registerTask('compile', ['clean', 'coffee']) + grunt.registerTask('install', ['compile']) + grunt.registerTask('default', ['compile', 'bunyan', 'execute']) + grunt.registerTask('test:unit', ['compile', 'mochaTest:unit']) + return grunt.registerTask('test:acceptance', [ + 'compile:acceptance_tests', + 'mochaTest:acceptance' + ]) +} diff --git a/services/chat/app.js b/services/chat/app.js index 1d427bdd98..ceeaa2ce85 100644 --- a/services/chat/app.js +++ b/services/chat/app.js @@ -5,22 +5,35 @@ * DS207: Consider shorter variations of null checks * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ -const logger = require('logger-sharelatex'); -const settings = require('settings-sharelatex'); +const logger = require('logger-sharelatex') +const settings = require('settings-sharelatex') -const Server = require("./app/js/server"); +const Server = require('./app/js/server') -if (!module.parent) { // Called directly - const port = __guard__(settings.internal != null ? settings.internal.chat : undefined, x => x.port) || 3010; - const host = __guard__(settings.internal != null ? settings.internal.chat : undefined, x1 => x1.host) || "localhost"; - Server.server.listen(port, host, function(error) { - if (error != null) { throw error; } - return logger.info(`Chat starting up, listening on ${host}:${port}`); - }); +if (!module.parent) { + // Called directly + const port = + __guard__( + settings.internal != null ? settings.internal.chat : undefined, + x => x.port + ) || 3010 + const host = + __guard__( + settings.internal != null ? settings.internal.chat : undefined, + x1 => x1.host + ) || 'localhost' + Server.server.listen(port, host, function(error) { + if (error != null) { + throw error + } + return logger.info(`Chat starting up, listening on ${host}:${port}`) + }) } -module.exports = Server.server; +module.exports = Server.server function __guard__(value, transform) { - return (typeof value !== 'undefined' && value !== null) ? transform(value) : undefined; -} \ No newline at end of file + return typeof value !== 'undefined' && value !== null + ? transform(value) + : undefined +} diff --git a/services/chat/config/settings.defaults.js b/services/chat/config/settings.defaults.js index f0d219fa23..e8f150a85c 100644 --- a/services/chat/config/settings.defaults.js +++ b/services/chat/config/settings.defaults.js @@ -1,28 +1,30 @@ module.exports = { - internal: { - chat: { - host: process.env['LISTEN_ADDRESS'] || "localhost", - port: 3010 - } - }, - - apis: { - web: { - url: `http://${process.env['WEB_HOST'] || "localhost"}:${process.env['WEB_PORT'] || 3000}`, - user: "sharelatex", - pass: "password" - } - }, - - mongo: { - url : `mongodb://${process.env['MONGO_HOST'] || "localhost"}/sharelatex` - }, + internal: { + chat: { + host: process.env['LISTEN_ADDRESS'] || 'localhost', + port: 3010 + } + }, - redis: { - web: { - host: process.env['REDIS_HOST'] || "localhost", - port: "6379", - password: "" - } - } -}; \ No newline at end of file + apis: { + web: { + url: `http://${process.env['WEB_HOST'] || 'localhost'}:${process.env[ + 'WEB_PORT' + ] || 3000}`, + user: 'sharelatex', + pass: 'password' + } + }, + + mongo: { + url: `mongodb://${process.env['MONGO_HOST'] || 'localhost'}/sharelatex` + }, + + redis: { + web: { + host: process.env['REDIS_HOST'] || 'localhost', + port: '6379', + password: '' + } + } +} From adc4c3bdb80c59298ba158fee10229d83e3d7c7e Mon Sep 17 00:00:00 2001 From: Nate Stemen Date: Fri, 21 Dec 2018 13:55:29 -0500 Subject: [PATCH 33/33] use public rc files --- services/chat/decaffeinate-simple.sh | 19 ------------------- services/chat/decaffeinate.sh | 4 ++-- 2 files changed, 2 insertions(+), 21 deletions(-) delete mode 100644 services/chat/decaffeinate-simple.sh diff --git a/services/chat/decaffeinate-simple.sh b/services/chat/decaffeinate-simple.sh deleted file mode 100644 index 6fd8a618b9..0000000000 --- a/services/chat/decaffeinate-simple.sh +++ /dev/null @@ -1,19 +0,0 @@ -set -ex - -npx bulk-decaffeinate convert -npx bulk-decaffeinate clean - -git mv app/coffee app/js -git commit -m "Rename app/coffee dir to app/js" - -git mv test/acceptance/coffee test/acceptance/js -git commit -m "Rename test/acceptance/coffee to test/acceptance/js" - -npx prettier-eslint '*.js' --write -npx prettier-eslint 'config/*.js' --write -npx prettier-eslint 'app/js/**/*.js' --write -npx prettier-eslint 'test/acceptance/js/**/*.js' --write -git add . -git commit -m "Prettier: lint javascript files" - -echo "done" \ No newline at end of file diff --git a/services/chat/decaffeinate.sh b/services/chat/decaffeinate.sh index a2958457ab..9a8ec31bce 100755 --- a/services/chat/decaffeinate.sh +++ b/services/chat/decaffeinate.sh @@ -1,7 +1,7 @@ set -ex -curl -o .eslintrc https://raw.githubusercontent.com/sharelatex/web-sharelatex-internal/master/.eslintrc?token=AMHVk43L42-Htd0MSIfjao6vRukW52r4ks5cHA9WwA%3D%3D -curl -o .prettierrc https://raw.githubusercontent.com/sharelatex/web-sharelatex-internal/master/.prettierrc?token=AMHVk45yPk51AJkmy-hYGoHI9gW-kZHvks5cHAu3wA%3D%3D +curl -o .eslintrc https://raw.githubusercontent.com/sharelatex/web-sharelatex/master/.eslintrc +curl -o .prettierrc https://raw.githubusercontent.com/sharelatex/web-sharelatex/master/.prettierrc git add . git commit -m "Decaffeinate: add eslint and prettier rc files"