diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..062683db --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,20 @@ +module.exports = { + "env": { + "browser": true, + "commonjs": true, + "es6": true + }, + "extends": "eslint:recommended", + "globals": { + "Atomics": "readonly", + "SharedArrayBuffer": "readonly", + "process": "readonly", + "Buffer": "readonly" + }, + "parserOptions": { + "ecmaVersion": 2018 + }, + "rules": { + "no-empty": ["error", { "allowEmptyCatch": true }] + } +}; diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index 6ac2d477..00000000 --- a/.jshintrc +++ /dev/null @@ -1,16 +0,0 @@ -{ - "trailing": true, - "curly": true, - "eqeqeq": true, - "immed": true, - "latedef": true, - "laxcomma": true, - "newcap": true, - "noarg": true, - "sub": true, - "undef": true, - "unused": true, - "boss": true, - "eqnull": true, - "node": true -} diff --git a/.travis.yml b/.travis.yml index cac410ef..44fa55de 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,4 +21,4 @@ env: # - CONFIG=ipad # - CONFIG=android_phone script: - - npx gulp travis --config $CONFIG --sauce + - npm run lint && npx gulp travis --config $CONFIG --sauce diff --git a/README.md b/README.md index 0c8c1ff3..eec83937 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# WD.js +# WD.js -[![NPM version](http://img.shields.io/npm/v/wd.svg)](https://npmjs.org/package/wd) +[![NPM version](http://img.shields.io/npm/v/wd.svg)](https://npmjs.org/package/wd) [![Downloads](http://img.shields.io/npm/dm/wd.svg)](https://npmjs.org/package/wd) [![Dependency Status](https://david-dm.org/admc/wd.svg)](https://david-dm.org/admc/wd) [![devDependency Status](https://david-dm.org/admc/wd/dev-status.svg)](https://david-dm.org/admc/wd#info=devDependencies) @@ -25,7 +25,7 @@ This library is designed to be a maleable implementation of the webdriver protoc npm install wd ``` -Note: WD.js does not start the selenium server. You may use the [selenium-standalone](https://www.npmjs.com/package/selenium-standalone) package +Note: WD.js does not start the selenium server. You may use the [selenium-standalone](https://www.npmjs.com/package/selenium-standalone) package to install and start a selenium server. ## Authors @@ -84,7 +84,6 @@ browser.init({browserName:'chrome'}, function() { title.should.include('WD'); browser.elementById('i am a link', function(err, el) { browser.clickElement(el, function() { - /* jshint evil: true */ browser.eval("window.location.href", function(err, href) { href.should.include('guinea-pig2'); browser.quit(); diff --git a/browser-scripts/safe-execute-async.js b/browser-scripts/safe-execute-async.js index eb75076b..2f83efb6 100644 --- a/browser-scripts/safe-execute-async.js +++ b/browser-scripts/safe-execute-async.js @@ -1,4 +1,3 @@ -/* jshint evil:true */ var args = Array.prototype.slice.call(arguments, 0); var code = args[0], fargs = args[1], done = args[2]; var wrap = function() { diff --git a/browser-scripts/safe-execute.js b/browser-scripts/safe-execute.js index 4abab00c..78e5f73a 100644 --- a/browser-scripts/safe-execute.js +++ b/browser-scripts/safe-execute.js @@ -1,4 +1,3 @@ -/* jshint evil:true */ var args = Array.prototype.slice.call(arguments, 0); var code = args[0], fargs = args[1]; var wrap = function() { diff --git a/browser-scripts/wait-for-cond-in-browser.js b/browser-scripts/wait-for-cond-in-browser.js index 625828ac..a23d77c4 100644 --- a/browser-scripts/wait-for-cond-in-browser.js +++ b/browser-scripts/wait-for-cond-in-browser.js @@ -1,4 +1,3 @@ -/* jshint evil:true */ var args = Array.prototype.slice.call(arguments, 0); var condExpr = args[0], timeout = args[1], poll = args[2], cb = args[3]; diff --git a/examples/async/browserstack.ie.js b/examples/async/browserstack.ie.js index cd412619..11962334 100644 --- a/examples/async/browserstack.ie.js +++ b/examples/async/browserstack.ie.js @@ -41,7 +41,6 @@ browser.init(desired, function() { title.should.include('WD'); browser.elementById('i am a link', function(err, el) { browser.clickElement(el, function() { - /* jshint evil: true */ browser.eval("window.location.href", function(err, href) { href.should.include('guinea-pig2'); browser.quit(); diff --git a/examples/async/browserstack.js b/examples/async/browserstack.js index 79b875bd..c621339a 100644 --- a/examples/async/browserstack.js +++ b/examples/async/browserstack.js @@ -38,7 +38,6 @@ browser.init(desired, function() { title.should.include('WD'); browser.elementById('i am a link', function(err, el) { browser.clickElement(el, function() { - /* jshint evil: true */ browser.eval("window.location.href", function(err, href) { href.should.include('guinea-pig2'); browser.quit(); diff --git a/examples/async/chrome.js b/examples/async/chrome.js index 5839836a..c827a82b 100644 --- a/examples/async/chrome.js +++ b/examples/async/chrome.js @@ -28,7 +28,6 @@ browser.init({browserName:'chrome'}, function() { title.should.include('WD'); browser.elementById('i am a link', function(err, el) { browser.clickElement(el, function() { - /* jshint evil: true */ browser.eval("window.location.href", function(err, href) { href.should.include('guinea-pig2'); browser.quit(); diff --git a/examples/async/firefox.js b/examples/async/firefox.js index ea440f9a..0fb47bcf 100644 --- a/examples/async/firefox.js +++ b/examples/async/firefox.js @@ -28,7 +28,6 @@ browser.init({browserName:'firefox'}, function() { title.should.include('WD'); browser.elementById('i am a link', function(err, el) { browser.clickElement(el, function() { - /* jshint evil: true */ browser.eval("window.location.href", function(err, href) { href.should.include('guinea-pig2'); browser.quit(); diff --git a/examples/async/kobiton.js b/examples/async/kobiton.js index c788dc83..a99602e7 100644 --- a/examples/async/kobiton.js +++ b/examples/async/kobiton.js @@ -49,7 +49,6 @@ browser.init(desired, function() { title.should.include('WD'); browser.elementById('i am a link', function(err, el) { browser.clickElement(el, function() { - /* jshint evil: true */ browser.eval('window.location.href', function(err, href) { href.should.include('guinea-pig2'); browser.quit(); diff --git a/examples/async/sauce.ie.js b/examples/async/sauce.ie.js index f12bc829..27fea9e7 100644 --- a/examples/async/sauce.ie.js +++ b/examples/async/sauce.ie.js @@ -39,7 +39,6 @@ browser.init(desired, function() { title.should.include('WD'); browser.elementById('i am a link', function(err, el) { browser.clickElement(el, function() { - /* jshint evil: true */ browser.eval("window.location.href", function(err, href) { href.should.include('guinea-pig2'); browser.quit(); diff --git a/examples/async/sauce.js b/examples/async/sauce.js index dc7e1e33..bd9758f4 100644 --- a/examples/async/sauce.js +++ b/examples/async/sauce.js @@ -37,7 +37,6 @@ browser.init(desired, function() { title.should.include('WD'); browser.elementById('i am a link', function(err, el) { browser.clickElement(el, function() { - /* jshint evil: true */ browser.eval("window.location.href", function(err, href) { href.should.include('guinea-pig2'); browser.quit(); diff --git a/examples/deprecated/deprecated.chain.js b/examples/deprecated/deprecated.chain.js index 5bc2643d..d5d8aac5 100644 --- a/examples/deprecated/deprecated.chain.js +++ b/examples/deprecated/deprecated.chain.js @@ -22,7 +22,6 @@ browser.on('http', function(meth, path, data) { console.log(' > ' + meth.magenta, path, (data || '').grey); }); -/* jshint evil: true */ browser .chain() .init({ browserName: 'chrome' }) diff --git a/examples/promise/chrome.js b/examples/promise/chrome.js index 754f437d..b56f0bbb 100644 --- a/examples/promise/chrome.js +++ b/examples/promise/chrome.js @@ -27,7 +27,6 @@ browser.on('http', function(meth, path, data) { console.log(' > ' + meth.magenta, path, (data || '').grey); }); -/* jshint evil: true */ browser .init({browserName:'chrome'}) .get("http://admc.io/wd/test-pages/guinea-pig.html") diff --git a/examples/promise/chromedriver.js b/examples/promise/chromedriver.js index e0370875..ce5a64f3 100644 --- a/examples/promise/chromedriver.js +++ b/examples/promise/chromedriver.js @@ -27,7 +27,6 @@ browser.on('http', function(meth, path, data) { console.log(' > ' + meth.magenta, path, (data || '').grey); }); -/* jshint evil: true */ browser .status() .init({browserName:'chrome'}) diff --git a/examples/promise/firefox.js b/examples/promise/firefox.js index 7345853b..f1d05db1 100644 --- a/examples/promise/firefox.js +++ b/examples/promise/firefox.js @@ -27,7 +27,6 @@ browser.on('http', function(meth, path, data) { console.log(' > ' + meth.magenta, path, (data || '').grey); }); -/* jshint evil: true */ browser .init({browserName:'firefox'}) .get("http://admc.io/wd/test-pages/guinea-pig.html") diff --git a/examples/promise/harmony.js b/examples/promise/harmony.js index 7c4bc0d7..8368a1ee 100644 --- a/examples/promise/harmony.js +++ b/examples/promise/harmony.js @@ -3,8 +3,6 @@ // // This demos how to mix promise chain and generators -/* jshint moz: true, evil: true */ - require('colors'); var chai = require("chai"); var chaiAsPromised = require("chai-as-promised"); diff --git a/examples/promise/mocha-harmony.js b/examples/promise/mocha-harmony.js index 69b8f74d..53598c7d 100644 --- a/examples/promise/mocha-harmony.js +++ b/examples/promise/mocha-harmony.js @@ -2,7 +2,6 @@ // run with: mocha --harmony examples/promise/mocha-harmony.js /* global describe, it, before , beforeEach, after*/ -/* jshint moz: true, evil: true */ require('colors'); var chai = require("chai"); @@ -57,4 +56,3 @@ describe("mocha with generators", function() { })); }); - diff --git a/examples/promise/mocha-specs.js b/examples/promise/mocha-specs.js index 9e941b51..1e9c1954 100644 --- a/examples/promise/mocha-specs.js +++ b/examples/promise/mocha-specs.js @@ -54,7 +54,6 @@ describe('mocha spec examples', function() { }); it("submit element should be clicked", function() { - /* jshint evil: true */ return browser .elementById("submit") .click() @@ -102,7 +101,6 @@ describe('mocha spec examples', function() { }); it("submit element should be clicked", function(done) { - /* jshint evil: true */ browser .elementById("submit") .click() diff --git a/examples/promise/no-chain.js b/examples/promise/no-chain.js index e22556e2..c231cf1b 100644 --- a/examples/promise/no-chain.js +++ b/examples/promise/no-chain.js @@ -34,7 +34,6 @@ browser }) .then(function (el) { return browser.clickElement(el); }) .then(function () { - /* jshint evil: true */ return browser.eval("window.location.href"); }) .then(function (href) { href.should.include('guinea-pig2'); }) diff --git a/examples/promise/sauce-connect.js b/examples/promise/sauce-connect.js index 6d595b05..77dca91a 100644 --- a/examples/promise/sauce-connect.js +++ b/examples/promise/sauce-connect.js @@ -38,7 +38,6 @@ var desired = { name: "This is an example test" }; -/* jshint evil: true */ browser .init(desired) .get("http://admc.io/wd/test-pages/guinea-pig.html") diff --git a/examples/promise/sauce.ie.js b/examples/promise/sauce.ie.js index 1284d55a..65cf1ebe 100644 --- a/examples/promise/sauce.ie.js +++ b/examples/promise/sauce.ie.js @@ -38,7 +38,6 @@ var desired = { name: "This is an example test" }; -/* jshint evil: true */ browser .init(desired) .get("http://admc.io/wd/test-pages/guinea-pig.html") diff --git a/examples/promise/sauce.js b/examples/promise/sauce.js index f8669b6e..8f192e8d 100644 --- a/examples/promise/sauce.js +++ b/examples/promise/sauce.js @@ -35,7 +35,6 @@ var desired = { name: "example test" }; -/* jshint evil: true */ browser .init(desired) .sauceJobUpdate({tags:['example']}) diff --git a/gulpfile.js b/gulpfile.js index de61af26..4bc6b1ee 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,6 +1,4 @@ var gulp = require('gulp'), - jshint = require('gulp-jshint'), - jshintStylish = require('jshint-stylish'), Q = require('q'), runSequence = Q.denodeify(require('run-sequence')), path = require('path'), @@ -11,8 +9,9 @@ var gulp = require('gulp'), httpProxy = require('http-proxy'), sauceConnectLauncher = require('sauce-connect-launcher'), async = require('async'), - log = require('fancy-log') - gulpIf = require('gulp-if') + log = require('fancy-log'), + eslint = require('gulp-eslint'), + gulpIf = require('gulp-if'), debug = require('gulp-debug'); require('./test/helpers/env'); @@ -80,11 +79,17 @@ function buildMochaOpts(opts) { } gulp.task('lint', function() { -// return gulp.src(['lib/**/*.js','test/**/*.js','browser-scripts/**/*.js']) - return gulp.src(['lib/**/*.js']) - .pipe(jshint()) - .pipe(jshint.reporter(jshintStylish)) - .pipe(jshint.reporter('fail')); + var opts = { + fix: process.argv.indexOf('--fix') !== -1, + }; + return gulp.src(['lib/**/*.js', 'test/**/*.js', '!node_modules', '!**/node_modules', '!build/**']) + .pipe(gulpIf(!!process.env.VERBOSE, debug())) + .pipe(eslint(opts)) + .pipe(eslint.format()) + .pipe(eslint.failAfterError()) + .pipe(gulpIf(function (file) { + return file.eslint && file.eslint.fixed; + }, gulp.dest(process.cwd()))); }); gulp.task('test-unit', function () { diff --git a/lib/asserters.js b/lib/asserters.js index 0661c537..b7e41df2 100644 --- a/lib/asserters.js +++ b/lib/asserters.js @@ -88,7 +88,6 @@ var isHidden = new Asserter( * @asserter */ function jsCondition(jsConditionExpr, safe) { - // jshint evil: true if(safe === undefined) { safe = false; } return new Asserter( function(browser, cb) { diff --git a/lib/bin.js b/lib/bin.js index 4f8b0049..9b7deedf 100755 --- a/lib/bin.js +++ b/lib/bin.js @@ -5,15 +5,15 @@ var net = require('net') , assert = require('assert') , wd = require('./main'); -var connections = 0; +var connections = 0; // eslint-disable-line no-unused-vars var startRepl = function() { var r = repl.start('(wd): '); r.context.assert = assert; r.context.wd = wd; r.context.help = function() { - console.log("WD - Shell."); - console.log("Access the webdriver object via the object: 'wd'"); + console.log("WD - Shell."); // eslint-disable-line no-console + console.log("Access the webdriver object via the object: 'wd'"); // eslint-disable-line no-console }; var server = net.createServer(function (socket) { diff --git a/lib/commands.js b/lib/commands.js index f4586a3b..02745e5c 100644 --- a/lib/commands.js +++ b/lib/commands.js @@ -130,7 +130,6 @@ commands.safeExecute = function() { * @jsonWire POST /session/:sessionId/execute */ (function() { - // jshint evil: true commands.eval = function(code) { var cb = findCallback(arguments); code = codeToString(code); @@ -359,7 +358,6 @@ commands.frame = function(frameRef) { */ commands.windowName = function() { var cb = findCallback(arguments); - // jshint evil: true commands.eval.apply(this, ["window.name", cb]); }; diff --git a/lib/deprecated-chain.js b/lib/deprecated-chain.js index e150d539..1f768395 100644 --- a/lib/deprecated-chain.js +++ b/lib/deprecated-chain.js @@ -13,7 +13,9 @@ deprecatedChain.chain = function(obj){ this._chainOnErrorCallback = obj.onError; } else if (!this._chainOnErrorCallback) { this._chainOnErrorCallback = function(err) { - if (err) { console.error("a function in your .chain() failed:", err); } + if (err) { + console.error("a function in your .chain() failed:", err); // eslint-disable-line no-console + } }; } diff --git a/lib/promise-webdriver.js b/lib/promise-webdriver.js index fb24a20b..20fa01bf 100644 --- a/lib/promise-webdriver.js +++ b/lib/promise-webdriver.js @@ -249,7 +249,7 @@ module.exports = function(WebDriver, Element, chainable) { promise.printError = function(prepend) { prepend = prepend || ""; return _this._enrich( promise.catch(function(err) { - console.log(prepend + err); + console.log(prepend + err); // eslint-disable-line no-console throw err; }), currentEl); }; @@ -258,7 +258,7 @@ module.exports = function(WebDriver, Element, chainable) { promise.print = function(prepend) { prepend = prepend || ""; return _this._enrich( promise.then(function(val) { - console.log(prepend + val); + console.log(prepend + val); // eslint-disable-line no-console }), currentEl); }; } @@ -319,7 +319,7 @@ module.exports = function(WebDriver, Element, chainable) { return arg; } }).join(', ') + ' )'; - console.log(' --> ' + status + context + " " + method + args); + console.log(' --> ' + status + context + " " + method + args); // eslint-disable-line no-console }); }; diff --git a/lib/utils.js b/lib/utils.js index daac5139..7f279700 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -90,7 +90,7 @@ exports.deprecator = { warn: function(cat, message) { if(this.warnDeprecated && !this.deprecationMessageShown[cat]) { this.deprecationMessageShown[cat] = 1; - console.warn(message); + console.warn(message); // eslint-disable-line no-console } } }; diff --git a/lib/webdriver.js b/lib/webdriver.js index 3c296be6..757b7d58 100644 --- a/lib/webdriver.js +++ b/lib/webdriver.js @@ -150,11 +150,13 @@ Webdriver.prototype._init = function() { err.data = data; return cb(err); } else { + /* eslint-disable no-console */ console.error('\x1b[31mError\x1b[0m: The environment you requested was unavailable.\n'); console.error('\x1b[33mReason\x1b[0m:\n'); console.error(data); console.error('\nFor the available values please consult the WebDriver JSONWireProtocol,'); console.error('located at: \x1b[33mhttp://code.google.com/p/selenium/wiki/JsonWireProtocol#/session\x1b[0m'); + /* eslint-enable no-console */ } } }); diff --git a/package-lock.json b/package-lock.json index 07560306..fa4c8ce2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,29 @@ "negotiator": "0.6.1" } }, + "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": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "^3.0.4" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, "adm-zip": { "version": "0.4.13", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz", @@ -46,6 +69,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 + }, "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", @@ -70,6 +99,12 @@ "ansi-wrap": "0.1.0" } }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, "ansi-gray": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", @@ -257,6 +292,17 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, + "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" + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -465,6 +511,12 @@ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" }, + "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 + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -488,6 +540,21 @@ "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": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -540,12 +607,24 @@ } } }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "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", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -569,16 +648,21 @@ } } }, - "cli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", - "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", + "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": { - "exit": "0.1.2", - "glob": "^7.1.1" + "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 + }, "cliui": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", @@ -596,16 +680,6 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -629,6 +703,12 @@ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", "dev": true }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -716,13 +796,16 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "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": { - "date-now": "^0.1.4" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "content-disposition": { @@ -802,12 +885,6 @@ "assert-plus": "^1.0.0" } }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, "dateformat": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", @@ -947,39 +1024,13 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" }, - "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "dev": true, - "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "esutils": "^2.0.2" } }, "dox": { @@ -1131,6 +1182,18 @@ "source-map": "~0.2.0" }, "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, "source-map": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", @@ -1143,16 +1206,188 @@ } } }, + "eslint": { + "version": "4.19.1", + "resolved": "https://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" + }, + "dependencies": { + "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" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "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" + } + }, + "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": "3.5.4", + "resolved": "https://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": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, + "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": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", "dev": true }, "esutils": { @@ -1187,12 +1422,6 @@ "strip-eof": "^1.0.0" } }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -1315,6 +1544,17 @@ "is-extendable": "^1.0.1" } }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://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" + } + }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -1418,6 +1658,33 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "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" + }, + "dependencies": { + "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 + } + } + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -1525,6 +1792,18 @@ "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", "dev": true }, + "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" + } + }, "follow-redirects": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", @@ -1624,6 +1903,12 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "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.5.2", "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", @@ -1796,6 +2081,12 @@ "which": "^1.2.14" } }, + "globals": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", + "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", + "dev": true + }, "globule": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", @@ -1909,14 +2200,14 @@ } }, "gulp-debug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gulp-debug/-/gulp-debug-4.0.0.tgz", - "integrity": "sha512-cn/GhMD2nVZCVxAl5vWao4/dcoZ8wUJ8w3oqTvQaGDmC1vT7swNOEbhQTWJp+/otKePT64aENcqAQXDcdj5H1g==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/gulp-debug/-/gulp-debug-3.2.0.tgz", + "integrity": "sha512-2LZzP+ydczqz1rhqq/NYxvVvYTmOa0IgBl2B1sQTdkQgku9ayOUM/KHuGPjF4QA5aO1VcG+Sskw7iCcRUqHKkA==", "dev": true, "requires": { "chalk": "^2.3.0", "fancy-log": "^1.3.2", - "plur": "^3.0.0", + "plur": "^2.0.0", "stringify-object": "^3.0.0", "through2": "^2.0.0", "tildify": "^1.1.2" @@ -1944,6 +2235,17 @@ } } }, + "gulp-eslint": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp-eslint/-/gulp-eslint-4.0.2.tgz", + "integrity": "sha512-fcFUQzFsN6dJ6KZlG+qPOEkqfcevRUXgztkYCvhNvJeSvOicC8ucutN4qR/ID8LmNZx9YPIkBzazTNnVvbh8wg==", + "dev": true, + "requires": { + "eslint": "^4.0.0", + "fancy-log": "^1.3.2", + "plugin-error": "^1.0.0" + } + }, "gulp-if": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-2.0.2.tgz", @@ -1955,71 +2257,6 @@ "through2": "^2.0.1" } }, - "gulp-jshint": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/gulp-jshint/-/gulp-jshint-2.1.0.tgz", - "integrity": "sha512-sP3NK8Y/1e58O0PH9t6s7DAr/lKDSUbIY207oWSeufM6/VclB7jJrIBcPCsyhrFTCDUl9DauePbt6VqP2vPM5w==", - "dev": true, - "requires": { - "lodash": "^4.12.0", - "minimatch": "^3.0.3", - "plugin-error": "^0.1.2", - "rcloader": "^0.2.2", - "through2": "^2.0.0" - }, - "dependencies": { - "arr-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1", - "array-slice": "^0.2.3" - } - }, - "arr-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", - "dev": true - }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true - }, - "extend-shallow": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", - "dev": true, - "requires": { - "kind-of": "^1.1.0" - } - }, - "kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", - "dev": true - }, - "plugin-error": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", - "dev": true, - "requires": { - "ansi-cyan": "^0.1.1", - "ansi-red": "^0.1.1", - "arr-diff": "^1.0.1", - "arr-union": "^2.0.1", - "extend-shallow": "^1.1.2" - } - } - } - }, "gulp-match": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-1.0.3.tgz", @@ -2199,51 +2436,6 @@ "parse-passwd": "^1.0.0" } }, - "htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", - "dev": true, - "requires": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" - }, - "dependencies": { - "entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -2301,12 +2493,24 @@ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, "imageinfo": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/imageinfo/-/imageinfo-1.0.4.tgz", "integrity": "sha1-HdJFbsuW/DlfCqEXnEZ9+z1deio=", "dev": true }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -2327,6 +2531,65 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "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" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "interpret": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", @@ -2346,9 +2609,9 @@ "dev": true }, "irregular-plurals": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-2.0.0.tgz", - "integrity": "sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz", + "integrity": "sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y=", "dev": true }, "is-absolute": { @@ -2489,6 +2752,12 @@ "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-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", @@ -2504,6 +2773,12 @@ "is-unc-path": "^1.0.0" } }, + "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-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -2583,6 +2858,12 @@ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, "glob": { "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", @@ -2616,12 +2897,6 @@ "requires": { "has-flag": "^1.0.0" } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true } } }, @@ -2649,6 +2924,12 @@ } } }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, "js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", @@ -2657,14 +2938,6 @@ "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - } } }, "jsbn": { @@ -2689,53 +2962,6 @@ } } }, - "jshint": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.10.2.tgz", - "integrity": "sha512-e7KZgCSXMJxznE/4WULzybCMNXNAd/bf5TSrvVEq78Q/K8ZwFpmBqQeDtNiHc3l49nV4E/+YeHU/JZjSUIrLAA==", - "dev": true, - "requires": { - "cli": "~1.0.0", - "console-browserify": "1.1.x", - "exit": "0.1.x", - "htmlparser2": "3.8.x", - "lodash": "~4.17.11", - "minimatch": "~3.0.2", - "shelljs": "0.3.x", - "strip-json-comments": "1.0.x" - } - }, - "jshint-stylish": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jshint-stylish/-/jshint-stylish-2.2.1.tgz", - "integrity": "sha1-JCCCosA1rgP9gQROBXDMQgjPbmE=", - "dev": true, - "requires": { - "beeper": "^1.1.0", - "chalk": "^1.0.0", - "log-symbols": "^1.0.0", - "plur": "^2.1.0", - "string-length": "^1.0.0", - "text-table": "^0.2.0" - }, - "dependencies": { - "irregular-plurals": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz", - "integrity": "sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y=", - "dev": true - }, - "plur": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", - "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=", - "dev": true, - "requires": { - "irregular-plurals": "^1.0.0" - } - } - } - }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", @@ -2746,6 +2972,12 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -2894,12 +3126,6 @@ "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, "lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", @@ -2936,12 +3162,6 @@ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", "dev": true }, - "lodash.isobject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", - "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=", - "dev": true - }, "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", @@ -2958,12 +3178,6 @@ "lodash.isarray": "^3.0.0" } }, - "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.restparam": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", @@ -3007,15 +3221,6 @@ "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "requires": { - "chalk": "^1.0.0" - } - }, "lru-cache": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", @@ -3089,6 +3294,14 @@ "map-age-cleaner": "^0.1.1", "mimic-fn": "^2.0.0", "p-is-promise": "^2.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + } } }, "merge-descriptors": { @@ -3153,9 +3366,9 @@ } }, "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "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": { @@ -3250,6 +3463,12 @@ "duplexer2": "0.0.2" } }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -3275,6 +3494,12 @@ "integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==", "dev": true }, + "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 + }, "negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", @@ -3476,6 +3701,15 @@ "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", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", @@ -3484,6 +3718,14 @@ "requires": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } } }, "optionator": { @@ -3498,14 +3740,6 @@ "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 - } } }, "orchestrator": { @@ -3588,6 +3822,12 @@ } } }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, "p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", @@ -3674,6 +3914,12 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -3729,14 +3975,20 @@ } }, "plur": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/plur/-/plur-3.1.1.tgz", - "integrity": "sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", + "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=", "dev": true, "requires": { - "irregular-plurals": "^2.0.0" + "irregular-plurals": "^1.0.0" } }, + "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", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -3760,6 +4012,12 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, "promise-simple": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/promise-simple/-/promise-simple-0.1.0.tgz", @@ -3782,6 +4040,12 @@ "ipaddr.js": "1.9.0" } }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, "psl": { "version": "1.1.31", "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", @@ -3830,27 +4094,6 @@ "unpipe": "1.0.0" } }, - "rcfinder": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/rcfinder/-/rcfinder-0.1.9.tgz", - "integrity": "sha1-8+gPOH3fmugK4wpBADKWQuroERU=", - "dev": true, - "requires": { - "lodash.clonedeep": "^4.3.2" - } - }, - "rcloader": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/rcloader/-/rcloader-0.2.2.tgz", - "integrity": "sha1-WNIpi0YtC5v9ITPSoex0+9cFxxc=", - "dev": true, - "requires": { - "lodash.assign": "^4.2.0", - "lodash.isobject": "^3.0.2", - "lodash.merge": "^4.6.0", - "rcfinder": "^0.1.6" - } - }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", @@ -3884,6 +4127,12 @@ "safe-regex": "^1.1.0" } }, + "regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -3946,6 +4195,16 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + } + }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -3971,12 +4230,28 @@ "global-modules": "^1.0.0" } }, + "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", "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", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -3992,6 +4267,15 @@ "glob": "^7.1.3" } }, + "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" + } + }, "run-sequence": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/run-sequence/-/run-sequence-2.2.1.tgz", @@ -4055,6 +4339,21 @@ } } }, + "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": "*" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -4196,12 +4495,6 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, - "shelljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", - "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", - "dev": true - }, "sigmund": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", @@ -4213,6 +4506,15 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, + "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" + } + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -4563,39 +4865,29 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, - "string-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", - "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=", - "dev": true, - "requires": { - "strip-ansi": "^3.0.0" - } - }, "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^3.0.0" } } } @@ -4644,9 +4936,9 @@ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true }, "supports-color": { @@ -4663,6 +4955,66 @@ "integrity": "sha1-l+YPpR2s0kan84Rne8nzPUrR6Vc=", "dev": true }, + "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" + }, + "dependencies": { + "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" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "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 + } + } + }, "tar-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", @@ -4724,6 +5076,15 @@ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" }, + "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-buffer": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", @@ -4831,6 +5192,12 @@ "mime-types": "~2.1.18" } }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, "uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", @@ -5157,9 +5524,9 @@ "dev": true }, "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, "wrap-ansi": { @@ -5199,6 +5566,15 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "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" + } + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", @@ -5210,6 +5586,12 @@ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, "yargs": { "version": "13.2.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz", @@ -5227,6 +5609,34 @@ "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^13.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, "yargs-parser": { diff --git a/package.json b/package.json index b6d76c4e..b41c2d24 100644 --- a/package.json +++ b/package.json @@ -61,15 +61,13 @@ "dox": "^0.9.0", "express": "^4.16.3", "gulp": "^3.9.1", - "gulp-debug": "^4.0.0", + "gulp-debug": "^3.0.0", + "gulp-eslint": "^4.0.0", "gulp-if": "^2.0.2", - "gulp-jshint": "^2.1.0", "hbs": "^4.0.0", "http-proxy": "^1.15.1", "imageinfo": "^1.0.4", "istanbul": "^0.4.5", - "jshint": "^2.9.6", - "jshint-stylish": "^2.2.1", "mocha": "^5.2.0", "mu2": "^0.5.21", "nock": "^10.0.0", @@ -85,6 +83,9 @@ "scripts": { "test": "gulp test-unit", "all_tests": "gulp test", - "install": "node scripts/build-browser-scripts" + "install": "node scripts/build-browser-scripts", + "clean": "rm -rf node_modules && rm -f package-lock.json && npm install", + "lint": "gulp lint", + "lint:fix": "gulp lint --fix" } } diff --git a/test/.eslintrc.js b/test/.eslintrc.js new file mode 100644 index 00000000..c0fd128c --- /dev/null +++ b/test/.eslintrc.js @@ -0,0 +1,19 @@ +module.exports = { + "env": { + "node": true, + "browser": true, + "commonjs": true, + "es6": true, + "mocha": true + }, + "extends": "../.eslintrc.js", + "globals": { + "wd": "readonly", + "env": "readonly", + "should": "readonly", + "skip": "readonly", + "Q": "readonly", + "prepareJs": "readonly", + "AssertionError": "readonly" + } +}; diff --git a/test/.jshintrc b/test/.jshintrc deleted file mode 100644 index a0e4b682..00000000 --- a/test/.jshintrc +++ /dev/null @@ -1,35 +0,0 @@ -// jshint configuration for tests -{ - "curly": true, - "eqeqeq": true, - "expr": true, - "globals": { - "describe": false, - "it": false, - "before": false, - "after": false, - "beforeEach": false, - "afterEach": false, - "AssertionError": false, - "should": false, - "assert": false, - "wd": false, - "_": false, - "S": false, - "Q": false, - "env": false, - "prepareJs": false, - "skip": false - }, - "immed": true, - "latedef": true, - "laxcomma": true, - "newcap": true, - "noarg": true, - "sub": true, - "undef": true, - "unused": true, - "boss": true, - "eqnull": true, - "node": true -} diff --git a/test/coverage/run_tests.js b/test/coverage/run_tests.js index 6e91ba4b..5855bfdd 100644 --- a/test/coverage/run_tests.js +++ b/test/coverage/run_tests.js @@ -1,9 +1,8 @@ -/*global _:true, Q:true */ var Mocha = require('mocha'), fs = require('fs'), path = require('path'), _ = require('lodash'), - Q = require('Q') + Q = require('Q'), log = require('fancy-log'); var sauceUsername = process.env.SAUCE_USERNAME; @@ -22,7 +21,7 @@ function runSpecs(dir, mochaConfig) { mocha.ui('bdd'); mocha.bail(false); mocha.reporter('dot'); - _(mochaConfig).each(function(opt) { + _.each(mochaConfig, function(opt) { var optName = opt.shift(); mocha[optName].apply(mocha, opt); }); @@ -30,7 +29,7 @@ function runSpecs(dir, mochaConfig) { // Need to cleanup require cache otherwise the test won't run twice // and there may be some weird side effects cause with have some global // state in our test setup helpers. - // see https://github.com/visionmedia/mocha/issues/736 + // see https://github.com/mochajs/mocha/issues/736 _(require.cache) .keys() .filter(function(key) { diff --git a/test/e2e/async.js b/test/e2e/async.js index 99050c21..fa64d260 100644 --- a/test/e2e/async.js +++ b/test/e2e/async.js @@ -52,11 +52,9 @@ describe('async' + env.ENV_DESC, function() { }); it("eval", function(done) { - /* jshint evil: true */ browser.eval("window.location.href", function(err, href) { href.should.include('http'); done(null); }); }); }); - diff --git a/test/e2e/basic-specs.js b/test/e2e/basic-specs.js index 4a2ea1ab..45d2f2f8 100644 --- a/test/e2e/basic-specs.js +++ b/test/e2e/basic-specs.js @@ -37,10 +37,9 @@ describe('basic ' + env.ENV_DESC, function() { it("should retrieve the page title", function() { return browser .title().should.eventually.include("WD"); - }); + }); it("submit element should be clicked", function() { - /* jshint evil: true */ return browser .elementById("submit") .click() @@ -48,5 +47,3 @@ describe('basic ' + env.ENV_DESC, function() { }); }); - - diff --git a/test/e2e/deprecated-chain-specs.js b/test/e2e/deprecated-chain-specs.js index a279918b..13e2d5fc 100644 --- a/test/e2e/deprecated-chain-specs.js +++ b/test/e2e/deprecated-chain-specs.js @@ -28,7 +28,6 @@ describe('deprecated chain - full' + env.ENV_DESC, function() { name: sauceJobTitle(this.runnable().parent.title), tags: ['e2e'] }; - /* jshint evil: true */ browser.chain() .init(mergeDesired(env.DESIRED, env.SAUCE? sauceExtra : null )) .get("http://admc.io/wd/test-pages/guinea-pig.html") @@ -77,7 +76,6 @@ describe('deprecated chain - partial' + env.ENV_DESC, function() { }); it("partial chaining should work", function(done) { - /* jshint evil: true */ browser.chain() .title(function(err, title) { title.should.include('WD'); @@ -119,4 +117,3 @@ describe('deprecated chain - partial' + env.ENV_DESC, function() { }); }); - diff --git a/test/e2e/promise-chain-specs.js b/test/e2e/promise-chain-specs.js index 10bad1d0..c01a66dc 100644 --- a/test/e2e/promise-chain-specs.js +++ b/test/e2e/promise-chain-specs.js @@ -58,7 +58,6 @@ describe('promise chain ' + env.ENV_DESC, function() { }); it("clicking submit should work", function() { - /* jshint evil: true */ return browser .elementById("submit") .click() diff --git a/test/e2e/promise-no-chain-specs.js b/test/e2e/promise-no-chain-specs.js index f09ccb93..27e4bcfd 100644 --- a/test/e2e/promise-no-chain-specs.js +++ b/test/e2e/promise-no-chain-specs.js @@ -52,10 +52,8 @@ describe('promise no-chain ' + env.ENV_DESC, function() { return browser.elementById("submit").then(function(el) { return browser.clickElement(el); }).then(function() { - /* jshint evil: true */ return browser.eval("window.location.href"); }).should.eventually.include("http://"); }); }); - diff --git a/test/e2e/sauce-helpers-specs.js b/test/e2e/sauce-helpers-specs.js index 02bccb56..229f394d 100644 --- a/test/e2e/sauce-helpers-specs.js +++ b/test/e2e/sauce-helpers-specs.js @@ -1,6 +1,7 @@ /* global sauceJobTitle, mergeDesired */ require('../helpers/setup'); +var _ = require('lodash'); // Testing sauce specific method, it doesn't work // in regular selenium @@ -52,5 +53,3 @@ if(env.SAUCE){ }); } - - diff --git a/test/e2e/w3c-specs.js b/test/e2e/w3c-specs.js index 67504282..cf6a70a9 100644 --- a/test/e2e/w3c-specs.js +++ b/test/e2e/w3c-specs.js @@ -39,10 +39,9 @@ describe('basic ' + env.ENV_DESC, function() { it("should retrieve the page title", function() { return browser .title().should.eventually.include("WD"); - }); + }); it("submit element should be clicked", function() { - /* jshint evil: true */ return browser .elementByCss("#submit") .click(); @@ -65,5 +64,3 @@ describe('basic ' + env.ENV_DESC, function() { .takeScreenshot(); }); }); - - diff --git a/test/helpers/env.js b/test/helpers/env.js index 75945702..fd0ed677 100644 --- a/test/helpers/env.js +++ b/test/helpers/env.js @@ -1,4 +1,3 @@ -var _ = require('lodash'); var underscoreString = require('underscore.string'); var toNumber = underscoreString.toNumber; var toBoolean = underscoreString.toBoolean; diff --git a/test/helpers/express-helper.js b/test/helpers/express-helper.js index ef9bba3f..816423ad 100644 --- a/test/helpers/express-helper.js +++ b/test/helpers/express-helper.js @@ -23,7 +23,7 @@ Express.prototype.start = function(done) { content = _this.partials[req.query.p]; } res.render('test-page', { - testSuite: req.query.ts? req.query.ts.replace(/\@[\w\-]+/g,'') : '', + testSuite: req.query.ts? req.query.ts.replace(/@[\w-]+/g,'') : '', testTitle: (req.query.c? req.query.c + ' - ': '') + req.query.p, content: content, uuid: req.query.uuid diff --git a/test/helpers/make-tool.js b/test/helpers/make-tool.js index 63d91c16..108f246d 100644 --- a/test/helpers/make-tool.js +++ b/test/helpers/make-tool.js @@ -3,7 +3,7 @@ require('./env'); var args = process.argv.splice(2); var result; -if(args[0]='env'){ +if (args[0] === 'env'){ result = env[args[1]]; if(result === undefined) { result = ''; } if(typeof result === 'object') { diff --git a/test/helpers/setup.js b/test/helpers/setup.js index 93419a8a..3d6a2c2d 100644 --- a/test/helpers/setup.js +++ b/test/helpers/setup.js @@ -80,7 +80,7 @@ global.sauceJobTitle = function(title) { return (env.TRAVIS_JOB_NUMBER? '[' + env.TRAVIS_JOB_NUMBER + '] ' : '') + title .replace(/\(.*\)/g,'') - .replace(/\@[\w\-]+/g,'') + .replace(/@[\w-]+/g,'') .trim(); }; diff --git a/test/midway/api-el-specs.js b/test/midway/api-el-specs.js index d42ae7de..0ac315c1 100644 --- a/test/midway/api-el-specs.js +++ b/test/midway/api-el-specs.js @@ -1,5 +1,5 @@ require('../helpers/setup'); -var _ = require('lodash'); + describe('api-el ' + env.ENV_DESC, skip('ios'), function() { var partials = {}; @@ -98,7 +98,7 @@ describe('api-el ' + env.ENV_DESC, skip('ios'), function() { .then(function() { return browser .waitForVisible("css selector", "#wrongsel .child", 0.1 * env.BASE_TIME_UNIT) - .should.be.rejectedWith(/Element didn\'t become visible/); + .should.be.rejectedWith(/Element didn't become visible/); }); }); diff --git a/test/midway/api-el-suffix-base.js b/test/midway/api-el-suffix-base.js index d5162c0f..1496790f 100644 --- a/test/midway/api-el-suffix-base.js +++ b/test/midway/api-el-suffix-base.js @@ -1,3 +1,4 @@ +/* eslint-disable no-unexpected-multiline */ // spliting the test cause it takes too long, list of possible suffixes below // var suffixes = // ['ByClassName', 'ByCssSelector', 'ById', 'ByName', 'ByLinkText', diff --git a/test/midway/api-exec-specs.js b/test/midway/api-exec-specs.js index 1f71292d..ee32a236 100644 --- a/test/midway/api-exec-specs.js +++ b/test/midway/api-exec-specs.js @@ -1,5 +1,4 @@ require('../helpers/setup'); -var _ = require('lodash'); describe('api-exec ' + env.ENV_DESC, function() { @@ -11,7 +10,6 @@ describe('api-exec ' + env.ENV_DESC, function() { partials['browser.eval'] = '