From 2ad0d0eb8b025ff285db26b1cdf12e57dc0f0831 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Sun, 15 Jul 2018 13:03:28 -0400 Subject: [PATCH 01/39] Automate tests using Headless Chrome + Karma runner --- .travis.yml | 15 +- CONTRIBUTING.md | 7 +- karma.conf.js | 18 + package-lock.json | 2209 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 13 +- 5 files changed, 2254 insertions(+), 8 deletions(-) create mode 100644 karma.conf.js diff --git a/.travis.yml b/.travis.yml index b89a92e..521d17c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,16 @@ +sudo: true + language: node_js node_js: - - "8.11.3" -before_install: npm install -g grunt-cli + - "lts/*" + +# Setup headless Chrome support +# https://docs.travis-ci.com/user/gui-and-headless-browsers/#Using-the-Chrome-addon-in-the-headless-mode +addons: + chrome: stable +before_install: + - google-chrome-stable --headless --disable-gpu --remote-debugging-port=9222 http://localhost & + notifications: email: false irc: "irc.mozilla.org#filer" -env: - - "FILER_UPSTREAM_URI=\"default\" FILER_UPSTREAM_BRANCH=\"default\" FILER_UPSTREAM_REMOTE_NAME=\"default\"" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 498273f..1513829 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,10 +17,13 @@ npm install You can now run the following `npm` scripts: -* `npm test` will build Filer and the tests in `tests/` and start a web server at http://localhost:1234 where you can run the tests. -* `npm lint` will run `eslint` on the `src` and `tests` directories. +* `npm run lint` will run `eslint` on the `src` and `tests` directories. +* `npm run test:manual` will build the tests, and allow you to run them in a browser manually by loading http://localhost:1234. +* `npm run karma-mocha` will build Filer and the tests, and finally run the tests in a headless Chrome browser. +* `npm test` will run `lint` followed by `karma-chrome`, and is what we do on Travis. * `npm run build` will bundle two versions of Filer: `dist/filer.js` (unminified) and `dist/filer.min.js` (minified) as well as source map files. + Once you've done some hacking and you'd like to have your work merged, you'll need to make a pull request. If you're patch includes code, make sure to check that all the unit tests pass, including any new tests you wrote. Finally, make sure you add yourself diff --git a/karma.conf.js b/karma.conf.js new file mode 100644 index 0000000..f6a8abd --- /dev/null +++ b/karma.conf.js @@ -0,0 +1,18 @@ +module.exports = function(config) { + config.set({ + browsers: ['ChromeHeadless'], + singleRun: true, + basePath: '', + files: ['tests/dist/index.js'], + + frameworks: ['mocha', 'chai'], + reporters: ['mocha'], + client: { + mocha: { + ui: 'bdd', + timeout: 5000, + slow: 250 + } + } + }); +}; diff --git a/package-lock.json b/package-lock.json index 379e165..d63dce0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,6 +26,16 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "dev": true, + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, "acorn": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", @@ -41,6 +51,28 @@ "acorn": "^5.0.3" } }, + "addressparser": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz", + "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=", + "dev": true, + "optional": true + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, "ajv": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz", @@ -65,6 +97,49 @@ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", "dev": true }, + "amqplib": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.5.2.tgz", + "integrity": "sha512-l9mCs6LbydtHqRniRwYkKdqxVa6XMz3Vw1fh+2gJaaVgTM6Jk3o8RccAKWKtlhT1US5sWrFh+KKxsVUALURSIA==", + "dev": true, + "optional": true, + "requires": { + "bitsyntax": "~0.0.4", + "bluebird": "^3.4.6", + "buffer-more-ints": "0.0.2", + "readable-stream": "1.x >=1.1.9", + "safe-buffer": "^5.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true, + "optional": 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, + "optional": 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, + "optional": true + } + } + }, "ansi-escapes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", @@ -129,6 +204,12 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -150,12 +231,25 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true, + "optional": true + }, "asn1.js": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", @@ -193,6 +287,12 @@ } } }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", @@ -205,6 +305,23 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, + "ast-types": { + "version": "0.11.5", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.5.tgz", + "integrity": "sha512-oJjo+5e7/vEc2FBK8gUalV0pba4L3VdBIs2EKhOLHLcOd2FgQIVQN9xb0eZ9IjEWyAL7vq6fGJxOvVvdCHNyMw==", + "dev": true, + "optional": true + }, + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "dev": true, + "optional": true, + "requires": { + "lodash": "^4.17.10" + } + }, "async-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", @@ -217,6 +334,13 @@ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", "dev": true }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true, + "optional": true + }, "atob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", @@ -312,6 +436,52 @@ } } }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", + "dev": true, + "optional": true + }, + "axios": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.15.3.tgz", + "integrity": "sha1-LJ1jiy4ZGgjqHWzJiOrda6W9wFM=", + "dev": true, + "optional": true, + "requires": { + "follow-redirects": "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, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "follow-redirects": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.0.0.tgz", + "integrity": "sha1-jjQpjL0uF28lTv/sdaHHjMhJ/Tc=", + "dev": true, + "optional": true, + "requires": { + "debug": "^2.2.0" + } + } + } + }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", @@ -1036,6 +1206,12 @@ "lodash.clone": "^4.5.0" } }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -1107,6 +1283,31 @@ "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", "dev": true }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, "binary-extensions": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", @@ -1119,6 +1320,63 @@ "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=", "dev": true }, + "bitsyntax": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.0.4.tgz", + "integrity": "sha1-6xDMb4K4xJDj6FaY8H6D1G4MuoI=", + "dev": true, + "optional": true, + "requires": { + "buffer-more-ints": "0.0.2" + } + }, + "bl": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", + "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=", + "dev": true, + "optional": true, + "requires": { + "readable-stream": "~2.0.5" + }, + "dependencies": { + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true, + "optional": true + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true, + "optional": true + } + } + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "dev": true + }, "bluebird": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", @@ -1131,12 +1389,50 @@ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" + }, + "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" + } + } + } + }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.x.x" + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1311,18 +1607,55 @@ "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==", "dev": true }, + "buffer-more-ints": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-0.0.2.tgz", + "integrity": "sha1-JrOIXRD6E9t/wBquOquHAZngEkw=", + "dev": true + }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, + "buildmail": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/buildmail/-/buildmail-4.0.1.tgz", + "integrity": "sha1-h393OLeHKYccmhBeO4N9K+EaenI=", + "dev": true, + "optional": true, + "requires": { + "addressparser": "1.0.1", + "libbase64": "0.1.0", + "libmime": "3.0.0", + "libqp": "1.1.0", + "nodemailer-fetch": "1.6.0", + "nodemailer-shared": "1.1.0", + "punycode": "1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true, + "optional": true + } + } + }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -1355,6 +1688,12 @@ "callsites": "^0.2.0" } }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, "callsites": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", @@ -1398,6 +1737,13 @@ "integrity": "sha512-vs79o1mOSKRGv/1pSkp4EXgl4ZviWeYReXw60XfacPU64uQWZwJT6vZNmxRF9O+6zu71sJwMxLK5JXxbzuVrLw==", "dev": true }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true, + "optional": true + }, "chai": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", @@ -1581,6 +1927,13 @@ "integrity": "sha1-h+kEEy1hQMXAtyAGwIwNBb17Y7M=", "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, + "optional": true + }, "coa": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.1.tgz", @@ -1680,6 +2033,24 @@ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, + "combine-lists": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", + "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", + "dev": true, + "requires": { + "lodash": "^4.5.0" + } + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, "command-exists": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.7.tgz", @@ -1692,12 +2063,24 @@ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", "dev": true }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1725,6 +2108,29 @@ "proto-list": "~1.2.1" } }, + "connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + }, + "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" + } + } + } + }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", @@ -1740,12 +2146,24 @@ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", "dev": true }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, "convert-source-map": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", "dev": true }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -1825,6 +2243,16 @@ "which": "^1.2.9" } }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "optional": true, + "requires": { + "boom": "2.x.x" + } + }, "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", @@ -2018,6 +2446,35 @@ } } }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-uri-to-buffer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz", + "integrity": "sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==", + "dev": true, + "optional": true + }, + "date-format": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz", + "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=", + "dev": true + }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -2144,6 +2601,27 @@ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, + "degenerator": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz", + "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", + "dev": true, + "optional": true, + "requires": { + "ast-types": "0.x.x", + "escodegen": "1.x.x", + "esprima": "3.x.x" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true, + "optional": true + } + } + }, "del": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", @@ -2159,6 +2637,12 @@ "rimraf": "^2.2.8" } }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -2190,6 +2674,12 @@ "repeating": "^2.0.0" } }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", @@ -2216,6 +2706,18 @@ "esutils": "^2.0.2" } }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, "dom-serializer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", @@ -2280,6 +2782,13 @@ "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==", "dev": true }, + "double-ended-queue": { + "version": "2.1.0-0", + "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", + "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=", + "dev": true, + "optional": true + }, "duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", @@ -2289,6 +2798,16 @@ "readable-stream": "^2.0.2" } }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0" + } + }, "editorconfig": { "version": "0.13.3", "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.13.3.tgz", @@ -2335,6 +2854,85 @@ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, + "engine.io": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.5.tgz", + "integrity": "sha512-D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "uws": "~9.14.0", + "ws": "~3.3.1" + }, + "dependencies": { + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } + } + }, + "engine.io-client": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz", + "integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", + "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary2": "~1.0.2" + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, "entities": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", @@ -2374,6 +2972,21 @@ "is-symbol": "^1.0.1" } }, + "es6-promise": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", + "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -2528,6 +3141,12 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true }, + "eventemitter3": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", + "dev": true + }, "events": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", @@ -2544,6 +3163,34 @@ "safe-buffer": "^5.1.1" } }, + "expand-braces": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", + "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", + "dev": true, + "requires": { + "array-slice": "^0.2.3", + "array-unique": "^0.2.1", + "braces": "^0.1.2" + }, + "dependencies": { + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", + "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", + "dev": true, + "requires": { + "expand-range": "^0.1.0" + } + } + } + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -2588,6 +3235,36 @@ } } }, + "expand-range": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", + "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", + "dev": true, + "requires": { + "is-number": "^0.1.1", + "repeat-string": "^0.2.2" + }, + "dependencies": { + "is-number": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", + "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", + "dev": true + }, + "repeat-string": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", + "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", + "dev": true + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -2685,6 +3362,12 @@ } } }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, "falafel": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.1.0.tgz", @@ -2756,6 +3439,13 @@ "object-assign": "^4.0.1" } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "filesize": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", @@ -2785,6 +3475,38 @@ } } }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + }, + "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" + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + } + } + }, "flat-cache": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", @@ -2803,6 +3525,15 @@ "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", "dev": true }, + "follow-redirects": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.1.tgz", + "integrity": "sha512-v9GI1hpaqq1ZZR6pBD1+kI7O24PhDvNGNodjS3MdcEqyrahCp8zbtpv+2B/krUnSmUH80lbAS7MrdeK5IylgKg==", + "dev": true, + "requires": { + "debug": "^3.1.0" + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -2815,6 +3546,25 @@ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "dev": true }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "dev": true, + "optional": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -2830,6 +3580,15 @@ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "^1.0.0" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3374,6 +4133,46 @@ "chokidar": "^2.0.3" } }, + "ftp": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", + "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", + "dev": true, + "optional": true, + "requires": { + "readable-stream": "1.1.x", + "xregexp": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true, + "optional": 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, + "optional": 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, + "optional": true + } + } + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -3386,6 +4185,23 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "dev": true, + "optional": true + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "optional": true, + "requires": { + "is-property": "^1.0.0" + } + }, "get-func-name": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", @@ -3398,12 +4214,49 @@ "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", "dev": true }, + "get-uri": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.2.tgz", + "integrity": "sha512-ZD325dMZOgerGqF/rF6vZXyFGTAay62svjQIT+X/oU2PtxYpFxvSkbsdi+oxIrsNxlZVd4y8wUDqkaExWTI/Cw==", + "dev": true, + "optional": true, + "requires": { + "data-uri-to-buffer": "1", + "debug": "2", + "extend": "3", + "file-uri-to-path": "1", + "ftp": "~0.3.10", + "readable-stream": "2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", @@ -3487,6 +4340,53 @@ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true, + "optional": true + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "dev": true, + "optional": true, + "requires": { + "ajv": "^5.1.0", + "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "optional": 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" + } + }, + "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, + "optional": 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, + "optional": true + } + } + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -3505,6 +4405,29 @@ "ansi-regex": "^2.0.0" } }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -3569,6 +4492,19 @@ "minimalistic-assert": "^1.0.1" } }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "optional": true, + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + } + }, "he": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", @@ -3581,6 +4517,17 @@ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", "dev": true }, + "hipchat-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hipchat-notifier/-/hipchat-notifier-1.1.0.tgz", + "integrity": "sha1-ttJJdVQ3wZEII2d5nTupoPI7Ix4=", + "dev": true, + "optional": true, + "requires": { + "lodash": "^4.0.0", + "request": "^2.0.0" + } + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -3592,6 +4539,12 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, "home-or-tmp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", @@ -4086,12 +5039,71 @@ "statuses": ">= 1.4.0 < 2" } }, + "http-proxy": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "dev": true, + "requires": { + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "dev": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "httpntlm": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.6.1.tgz", + "integrity": "sha1-rQFScUOi6Hc8+uapb1hla7UqNLI=", + "dev": true, + "requires": { + "httpreq": ">=0.4.22", + "underscore": "~1.7.0" + } + }, + "httpreq": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz", + "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=", + "dev": true + }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, + "https-proxy-agent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", + "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "dev": true, + "requires": { + "agent-base": "^4.1.0", + "debug": "^3.1.0" + } + }, "iconv-lite": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", @@ -4131,6 +5143,13 @@ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", "dev": true }, + "inflection": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", + "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=", + "dev": true, + "optional": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -4183,6 +5202,12 @@ "loose-envify": "^1.0.0" } }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, "is-absolute-url": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", @@ -4337,6 +5362,27 @@ "is-extglob": "^2.1.1" } }, + "is-my-ip-valid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", + "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", + "dev": true, + "optional": true + }, + "is-my-json-valid": { + "version": "2.17.2", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", + "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", + "dev": true, + "optional": true, + "requires": { + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" + } + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -4408,6 +5454,13 @@ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true, + "optional": true + }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", @@ -4423,6 +5476,13 @@ "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", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "optional": true + }, "is-svg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", @@ -4438,6 +5498,13 @@ "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", "dev": true }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true, + "optional": true + }, "is-url": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", @@ -4462,6 +5529,12 @@ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, + "isbinaryfile": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", + "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", + "dev": true + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -4474,6 +5547,13 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true, + "optional": true + }, "js-base64": { "version": "2.4.6", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.6.tgz", @@ -4508,6 +5588,13 @@ "esprima": "^4.0.0" } }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, "jsesc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", @@ -4520,6 +5607,13 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true, + "optional": true + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -4532,6 +5626,12 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, "json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -4549,6 +5649,105 @@ } } }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "karma": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/karma/-/karma-2.0.4.tgz", + "integrity": "sha512-32yhTwoi6BZgJZhR78GwhzyFABbYG/1WwQqYgY7Vh96Demvua2jM3+FyRltIMTUH/Kd5xaQvDw2L7jTvkYFeXg==", + "dev": true, + "requires": { + "bluebird": "^3.3.0", + "body-parser": "^1.16.1", + "chokidar": "^2.0.3", + "colors": "^1.1.0", + "combine-lists": "^1.0.0", + "connect": "^3.6.0", + "core-js": "^2.2.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.0", + "expand-braces": "^0.1.1", + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "http-proxy": "^1.13.0", + "isbinaryfile": "^3.0.0", + "lodash": "^4.17.4", + "log4js": "^2.5.3", + "mime": "^1.3.4", + "minimatch": "^3.0.2", + "optimist": "^0.6.1", + "qjobs": "^1.1.4", + "range-parser": "^1.2.0", + "rimraf": "^2.6.0", + "safe-buffer": "^5.0.1", + "socket.io": "2.0.4", + "source-map": "^0.6.1", + "tmp": "0.0.33", + "useragent": "2.2.1" + } + }, + "karma-chai": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/karma-chai/-/karma-chai-0.1.0.tgz", + "integrity": "sha1-vuWtQEAFF4Ea40u5RfdikJEIt5o=", + "dev": true + }, + "karma-chrome-launcher": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", + "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "dev": true, + "requires": { + "fs-access": "^1.0.0", + "which": "^1.2.1" + } + }, + "karma-mocha": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-1.3.0.tgz", + "integrity": "sha1-7qrH/8DiAetjxGdEDStpx883eL8=", + "dev": true, + "requires": { + "minimist": "1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "karma-mocha-reporter": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz", + "integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=", + "dev": true, + "requires": { + "chalk": "^2.1.0", + "log-symbols": "^2.1.0", + "strip-ansi": "^4.0.0" + } + }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -4565,6 +5764,37 @@ "type-check": "~0.3.2" } }, + "libbase64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-0.1.0.tgz", + "integrity": "sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY=", + "dev": true + }, + "libmime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/libmime/-/libmime-3.0.0.tgz", + "integrity": "sha1-UaGp50SOy9Ms2lRCFnW7IbwJPaY=", + "dev": true, + "requires": { + "iconv-lite": "0.4.15", + "libbase64": "0.1.0", + "libqp": "1.1.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", + "dev": true + } + } + }, + "libqp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/libqp/-/libqp-1.1.0.tgz", + "integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=", + "dev": true + }, "lodash": { "version": "4.17.10", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", @@ -4604,6 +5834,182 @@ "chalk": "^2.0.1" } }, + "log4js": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-2.11.0.tgz", + "integrity": "sha512-z1XdwyGFg8/WGkOyF6DPJjivCWNLKrklGdViywdYnSKOvgtEBo2UyEMZS5sD2mZrQlU3TvO8wDWLc8mzE1ncBQ==", + "dev": true, + "requires": { + "amqplib": "^0.5.2", + "axios": "^0.15.3", + "circular-json": "^0.5.4", + "date-format": "^1.2.0", + "debug": "^3.1.0", + "hipchat-notifier": "^1.1.0", + "loggly": "^1.1.0", + "mailgun-js": "^0.18.0", + "nodemailer": "^2.5.0", + "redis": "^2.7.1", + "semver": "^5.5.0", + "slack-node": "~0.2.0", + "streamroller": "0.7.0" + }, + "dependencies": { + "circular-json": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.5.tgz", + "integrity": "sha512-13YaR6kiz0kBNmIVM87Io8Hp7bWOo4r61vkEANy8iH9R9bc6avud/1FT0SBpqR1RpIQADOh/Q+yHZDA1iL6ysA==", + "dev": true + } + } + }, + "loggly": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/loggly/-/loggly-1.1.1.tgz", + "integrity": "sha1-Cg/B0/o6XsRP3HuJe+uipGlc6+4=", + "dev": true, + "optional": true, + "requires": { + "json-stringify-safe": "5.0.x", + "request": "2.75.x", + "timespan": "2.3.x" + }, + "dependencies": { + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true, + "optional": true + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "dev": true, + "optional": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "optional": 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" + } + }, + "form-data": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.0.0.tgz", + "integrity": "sha1-bwrrrcxdoWwT4ezBETfYX5uIOyU=", + "dev": true, + "optional": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.11" + } + }, + "har-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "dev": true, + "optional": true, + "requires": { + "chalk": "^1.1.1", + "commander": "^2.9.0", + "is-my-json-valid": "^2.12.4", + "pinkie-promise": "^2.0.0" + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "node-uuid": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", + "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", + "dev": true, + "optional": true + }, + "qs": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", + "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", + "dev": true, + "optional": true + }, + "request": { + "version": "2.75.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.75.0.tgz", + "integrity": "sha1-0rgmiihtoT6qXQGt9dGMyQ9lfZM=", + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "bl": "~1.1.2", + "caseless": "~0.11.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.0.0", + "har-validator": "~2.0.6", + "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", + "node-uuid": "~1.4.7", + "oauth-sign": "~0.8.1", + "qs": "~6.2.0", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "~0.4.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true, + "optional": true + } + } + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -4631,6 +6037,35 @@ "vlq": "^0.2.2" } }, + "mailcomposer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/mailcomposer/-/mailcomposer-4.0.1.tgz", + "integrity": "sha1-DhxEsqB890DuF9wUm6AJ8Zyt/rQ=", + "dev": true, + "optional": true, + "requires": { + "buildmail": "4.0.1", + "libmime": "3.0.0" + } + }, + "mailgun-js": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/mailgun-js/-/mailgun-js-0.18.1.tgz", + "integrity": "sha512-lvuMP14u24HS2uBsJEnzSyPMxzU2b99tQsIx1o6QNjqxjk8b3WvR+vq5oG1mjqz/IBYo+5gF+uSoDS0RkMVHmg==", + "dev": true, + "optional": true, + "requires": { + "async": "~2.6.0", + "debug": "~3.1.0", + "form-data": "~2.3.0", + "inflection": "~1.12.0", + "is-stream": "^1.1.0", + "path-proxy": "~1.0.0", + "promisify-call": "^2.0.2", + "proxy-agent": "~3.0.0", + "tsscmp": "~1.0.0" + } + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -4668,6 +6103,12 @@ "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", "dev": true }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, "merge-source-map": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", @@ -4728,6 +6169,21 @@ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", "dev": true }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "requires": { + "mime-db": "~1.33.0" + } + }, "mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", @@ -4863,6 +6319,19 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "netmask": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", + "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=", + "dev": true, + "optional": true + }, "nice-try": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", @@ -4923,6 +6392,91 @@ "semver": "^5.3.0" } }, + "nodemailer": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-2.7.2.tgz", + "integrity": "sha1-8kLmSa7q45tsftdA73sGHEBNMPk=", + "dev": true, + "optional": true, + "requires": { + "libmime": "3.0.0", + "mailcomposer": "4.0.1", + "nodemailer-direct-transport": "3.3.2", + "nodemailer-shared": "1.1.0", + "nodemailer-smtp-pool": "2.8.2", + "nodemailer-smtp-transport": "2.7.2", + "socks": "1.1.9" + }, + "dependencies": { + "socks": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.9.tgz", + "integrity": "sha1-Yo1+TQSRJDVEWsC25Fk3bLPm1pE=", + "dev": true, + "optional": true, + "requires": { + "ip": "^1.1.2", + "smart-buffer": "^1.0.4" + } + } + } + }, + "nodemailer-direct-transport": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz", + "integrity": "sha1-6W+vuQNYVglH5WkBfZfmBzilCoY=", + "dev": true, + "optional": true, + "requires": { + "nodemailer-shared": "1.1.0", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-fetch": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz", + "integrity": "sha1-ecSQihwPXzdbc/6IjamCj23JY6Q=", + "dev": true + }, + "nodemailer-shared": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz", + "integrity": "sha1-z1mU4v0mjQD1zw+nZ6CBae2wfsA=", + "dev": true, + "requires": { + "nodemailer-fetch": "1.6.0" + } + }, + "nodemailer-smtp-pool": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/nodemailer-smtp-pool/-/nodemailer-smtp-pool-2.8.2.tgz", + "integrity": "sha1-LrlNbPhXgLG0clzoU7nL1ejajHI=", + "dev": true, + "optional": true, + "requires": { + "nodemailer-shared": "1.1.0", + "nodemailer-wellknown": "0.1.10", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-smtp-transport": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz", + "integrity": "sha1-A9ccdjFPFKx9vHvwM6am0W1n+3c=", + "dev": true, + "optional": true, + "requires": { + "nodemailer-shared": "1.1.0", + "nodemailer-wellknown": "0.1.10", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-wellknown": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz", + "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U=", + "dev": true + }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -4962,6 +6516,12 @@ "boolbase": "~1.0.0" } }, + "null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true + }, "num2fraction": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", @@ -4974,12 +6534,25 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true, + "optional": true + }, "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-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -5099,6 +6672,24 @@ "is-wsl": "^1.1.0" } }, + "optimist": { + "version": "0.6.1", + "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" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } + }, "optionator": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", @@ -5145,6 +6736,50 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, + "pac-proxy-agent": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-2.0.2.tgz", + "integrity": "sha512-cDNAN1Ehjbf5EHkNY5qnRhGPUCp6SnpyVof5fRzN800QV1Y2OkzbH9rmjZkbBRa8igof903yOnjIl6z0SlAhxA==", + "dev": true, + "optional": true, + "requires": { + "agent-base": "^4.2.0", + "debug": "^3.1.0", + "get-uri": "^2.0.0", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "pac-resolver": "^3.0.0", + "raw-body": "^2.2.0", + "socks-proxy-agent": "^3.0.0" + }, + "dependencies": { + "socks-proxy-agent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-3.0.1.tgz", + "integrity": "sha512-ZwEDymm204mTzvdqyUqOdovVr2YRd2NYskrYrF2LXyZ9qDiMAoFESGK8CRphiO7rtbo2Y757k2Nia3x2hGtalA==", + "dev": true, + "optional": true, + "requires": { + "agent-base": "^4.1.0", + "socks": "^1.1.10" + } + } + } + }, + "pac-resolver": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-3.0.0.tgz", + "integrity": "sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==", + "dev": true, + "optional": true, + "requires": { + "co": "^4.6.0", + "degenerator": "^1.0.4", + "ip": "^1.1.5", + "netmask": "^1.0.6", + "thunkify": "^2.1.2" + } + }, "pako": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", @@ -5236,6 +6871,24 @@ "json-parse-better-errors": "^1.0.1" } }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, "parseurl": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", @@ -5284,6 +6937,25 @@ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", "dev": true }, + "path-proxy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-proxy/-/path-proxy-1.0.0.tgz", + "integrity": "sha1-GOijaFn8nS8aU7SN7hOFQ8Ag3l4=", + "dev": true, + "optional": true, + "requires": { + "inflection": "~1.3.0" + }, + "dependencies": { + "inflection": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.3.8.tgz", + "integrity": "sha1-y9Fg2p91sUw8xjV41POWeEvzAU4=", + "dev": true, + "optional": true + } + } + }, "pathval": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", @@ -5303,6 +6975,13 @@ "sha.js": "^2.4.8" } }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true, + "optional": true + }, "physical-cpu-count": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz", @@ -6210,12 +7889,59 @@ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", "dev": true }, + "promisify-call": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/promisify-call/-/promisify-call-2.0.4.tgz", + "integrity": "sha1-1IwtRWUszM1SgB3ey9UzptS9X7o=", + "dev": true, + "optional": true, + "requires": { + "with-callback": "^1.0.2" + } + }, "proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", "dev": true }, + "proxy-agent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-3.0.1.tgz", + "integrity": "sha512-mAZexaz9ZxQhYPWfAjzlrloEjW+JHiBFryE4AJXFDTnaXfmH/FKqC1swTRKuEPbHWz02flQNXFOyDUF7zfEG6A==", + "dev": true, + "optional": true, + "requires": { + "agent-base": "^4.2.0", + "debug": "^3.1.0", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "lru-cache": "^4.1.2", + "pac-proxy-agent": "^2.0.1", + "proxy-from-env": "^1.0.0", + "socks-proxy-agent": "^4.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "optional": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + } + } + }, + "proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=", + "dev": true, + "optional": true + }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -6247,6 +7973,18 @@ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true }, + "qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, "query-string": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", @@ -6313,6 +8051,18 @@ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", "dev": true }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + } + }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", @@ -6340,6 +8090,32 @@ "set-immediate-shim": "^1.0.1" } }, + "redis": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz", + "integrity": "sha512-M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A==", + "dev": true, + "optional": true, + "requires": { + "double-ended-queue": "^2.1.0-0", + "redis-commands": "^1.2.0", + "redis-parser": "^2.6.0" + } + }, + "redis-commands": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.3.5.tgz", + "integrity": "sha512-foGF8u6MXGFF++1TZVC6icGXuMYPftKXt1FBT2vrfU9ZATNtZJ8duRC5d1lEfE8hyVe3jhelHGB91oB7I6qLsA==", + "dev": true, + "optional": true + }, + "redis-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz", + "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=", + "dev": true, + "optional": true + }, "reduce-css-calc": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.4.tgz", @@ -6476,6 +8252,48 @@ "is-finite": "^1.0.0" } }, + "request": { + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" + } + }, + "requestretry": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/requestretry/-/requestretry-1.13.0.tgz", + "integrity": "sha512-Lmh9qMvnQXADGAQxsXHP4rbgO6pffCfuR8XUBdP9aitJcLQJxhp7YZK4xAVYXnPJ5E52mwrfiKQtKonPL8xsmg==", + "dev": true, + "optional": true, + "requires": { + "extend": "^3.0.0", + "lodash": "^4.15.0", + "request": "^2.74.0", + "when": "^3.7.7" + } + }, "require-uncached": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", @@ -6486,6 +8304,12 @@ "resolve-from": "^1.0.0" } }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, "resolve": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", @@ -6769,6 +8593,16 @@ } } }, + "slack-node": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/slack-node/-/slack-node-0.2.0.tgz", + "integrity": "sha1-3kuN3aqLeT9h29KTgQT9q/N9+jA=", + "dev": true, + "optional": true, + "requires": { + "requestretry": "^1.2.2" + } + }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", @@ -6784,6 +8618,23 @@ "is-fullwidth-code-point": "^2.0.0" } }, + "smart-buffer": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz", + "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=", + "dev": true, + "optional": true + }, + "smtp-connection": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/smtp-connection/-/smtp-connection-2.12.0.tgz", + "integrity": "sha1-1275EnyyPCJZ7bHoNJwujV4tdME=", + "dev": true, + "requires": { + "httpntlm": "1.6.1", + "nodemailer-shared": "1.1.0" + } + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -6906,6 +8757,140 @@ } } }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "optional": true, + "requires": { + "hoek": "2.x.x" + } + }, + "socket.io": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz", + "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=", + "dev": true, + "requires": { + "debug": "~2.6.6", + "engine.io": "~3.1.0", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.0.4", + "socket.io-parser": "~3.1.1" + }, + "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" + } + } + } + }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "dev": true + }, + "socket.io-client": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz", + "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=", + "dev": true, + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~2.6.4", + "engine.io-client": "~3.1.0", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.1.1", + "to-array": "0.1.4" + }, + "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" + } + } + } + }, + "socket.io-parser": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz", + "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "has-binary2": "~1.0.2", + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } + } + }, + "socks": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.10.tgz", + "integrity": "sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o=", + "dev": true, + "optional": true, + "requires": { + "ip": "^1.1.4", + "smart-buffer": "^1.0.13" + } + }, + "socks-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz", + "integrity": "sha512-Kezx6/VBguXOsEe5oU3lXYyKMi4+gva72TwJ7pQY5JfqUx2nMk7NXA6z/mpNqIlfQjWYVfeuNvQjexiTaTn6Nw==", + "dev": true, + "optional": true, + "requires": { + "agent-base": "~4.2.0", + "socks": "~2.2.0" + }, + "dependencies": { + "smart-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.1.tgz", + "integrity": "sha512-RFqinRVJVcCAL9Uh1oVqE6FZkqsyLiVOYEZ20TqIOjuX7iFVJ+zsbs4RIghnw/pTs7mZvt8ZHhvm1ZUrR4fykg==", + "dev": true, + "optional": true + }, + "socks": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.2.1.tgz", + "integrity": "sha512-0GabKw7n9mI46vcNrVfs0o6XzWzjVa3h6GaSo2UPxtWAROXUWavfJWh1M4PR5tnE0dcnQXZIDFP4yrAysLze/w==", + "dev": true, + "optional": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.0.1" + } + } + } + }, "sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", @@ -6972,6 +8957,24 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "sshpk": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "dev": true, + "optional": true, + "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", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, "stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", @@ -7059,6 +9062,18 @@ "xtend": "^4.0.0" } }, + "streamroller": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz", + "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", + "dev": true, + "requires": { + "date-format": "^1.2.0", + "debug": "^3.1.0", + "mkdirp": "^0.5.1", + "readable-stream": "^2.3.0" + } + }, "strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", @@ -7097,6 +9112,13 @@ "safe-buffer": "~5.1.0" } }, + "stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", + "dev": true, + "optional": true + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -7266,6 +9288,13 @@ "xtend": "~4.0.1" } }, + "thunkify": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz", + "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=", + "dev": true, + "optional": true + }, "timers-browserify": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", @@ -7275,6 +9304,13 @@ "setimmediate": "^1.0.4" } }, + "timespan": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz", + "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk=", + "dev": true, + "optional": true + }, "timsort": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", @@ -7296,6 +9332,12 @@ "os-tmpdir": "~1.0.2" } }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -7362,18 +9404,61 @@ "integrity": "sha512-2Ulkc8T7mXJ2l0W476YC/A209PR38Nw8PuaCNtk9uI3t1zzFdGQeWYGQvmj2PZkVvRC/Yoi4xQKMRnWc/N29tQ==", "dev": true }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "optional": true, + "requires": { + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true, + "optional": true + } + } + }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, + "tsscmp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.5.tgz", + "integrity": "sha1-fcSjOvcVgatDN9qR2FylQn69mpc=", + "dev": true, + "optional": true + }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -7389,6 +9474,16 @@ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.18" + } + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -7413,6 +9508,18 @@ } } }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true + }, + "underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", + "dev": true + }, "unicode-trie": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz", @@ -7470,6 +9577,12 @@ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", "dev": true }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, "unquote": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", @@ -7561,6 +9674,24 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, + "useragent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", + "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", + "dev": true, + "requires": { + "lru-cache": "2.2.x", + "tmp": "0.0.x" + }, + "dependencies": { + "lru-cache": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", + "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", + "dev": true + } + } + }, "util": { "version": "0.10.4", "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", @@ -7586,6 +9717,26 @@ "object.getownpropertydescriptors": "^2.0.3" } }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true, + "optional": true + }, + "uws": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/uws/-/uws-9.14.0.tgz", + "integrity": "sha512-HNMztPP5A1sKuVFmdZ6BPVpBQd5bUjNC8EFMFiICK+oho/OQsAJy5hnIx4btMHiOk8j04f/DbIlqnEZ9d72dqg==", + "dev": true, + "optional": true + }, "v8-compile-cache": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.0.tgz", @@ -7598,6 +9749,18 @@ "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==", "dev": true }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, "vlq": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", @@ -7613,6 +9776,12 @@ "indexof": "0.0.1" } }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -7622,6 +9791,13 @@ "defaults": "^1.0.3" } }, + "when": { + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", + "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=", + "dev": true, + "optional": true + }, "whet.extend": { "version": "0.9.9", "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", @@ -7637,6 +9813,13 @@ "isexe": "^2.0.0" } }, + "with-callback": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/with-callback/-/with-callback-1.0.2.tgz", + "integrity": "sha1-oJYpuakgAo1yFAT7Q1vc/1yRvCE=", + "dev": true, + "optional": true + }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -7667,11 +9850,37 @@ "async-limiter": "~1.0.0" } }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, + "xregexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", + "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", + "dev": true, + "optional": true + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true, + "optional": true + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true } } } diff --git a/package.json b/package.json index 14e99d0..f4509d0 100644 --- a/package.json +++ b/package.json @@ -18,9 +18,13 @@ "license": "BSD-2-Clause", "scripts": { "lint": "eslint src tests", - "test": "parcel tests/index.html --out-dir tests/dist", + "test:manual": "parcel tests/index.html --out-dir tests/dist", + "pretest": "npm run lint", + "test": "npm run travis", "prebuild": "parcel build --global Filer src/index.js --no-minify --out-file filer.js", - "build": "parcel build --global Filer src/index.js --out-file filer.min.js --detailed-report" + "build": "parcel build --global Filer src/index.js --out-file filer.min.js --detailed-report", + "prekarma-mocha": "parcel build tests/index.js --out-dir tests/dist", + "karma-mocha": "karma start karma.conf.js" }, "repository": { "type": "git", @@ -33,6 +37,11 @@ "devDependencies": { "chai": "^4.1.2", "eslint": "^5.0.1", + "karma": "^2.0.4", + "karma-chai": "^0.1.0", + "karma-chrome-launcher": "^2.2.0", + "karma-mocha": "^1.3.0", + "karma-mocha-reporter": "^2.2.5", "mocha": "^5.2.0", "parcel-bundler": "^1.9.6" }, From a900d8df6d9cb483f872e8e1eace62922435adfe Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Sun, 15 Jul 2018 13:25:35 -0400 Subject: [PATCH 02/39] Add eslint --fix scripts, fix first round of lint errors --- package.json | 3 + src/buffer.js | 2 +- src/constants.js | 4 +- src/filesystem/implementation.js | 12 +- src/filesystem/interface.js | 4 +- src/node.js | 16 +-- src/path.js | 10 +- src/providers/index.js | 2 +- src/providers/memory.js | 6 +- src/providers/websql.js | 28 ++-- src/shell/shell.js | 4 +- tests/bugs/issue357.js | 4 +- tests/index.js | 128 +++++++++--------- tests/lib/indexeddb.js | 2 +- tests/lib/test-utils.js | 32 ++--- tests/spec/errors.spec.js | 8 +- tests/spec/filer.filesystem.spec.js | 2 +- tests/spec/filer.spec.js | 8 +- tests/spec/fs.appendFile.spec.js | 26 ++-- tests/spec/fs.link.spec.js | 2 +- tests/spec/fs.lstat.spec.js | 2 +- tests/spec/fs.mkdir.spec.js | 4 +- tests/spec/fs.open.spec.js | 8 +- tests/spec/fs.readdir.spec.js | 2 +- tests/spec/fs.readlink.spec.js | 4 +- tests/spec/fs.rmdir.spec.js | 10 +- tests/spec/fs.shell.spec.js | 8 +- tests/spec/fs.spec.js | 4 +- tests/spec/fs.stat.spec.js | 2 +- tests/spec/fs.stats.spec.js | 6 +- tests/spec/fs.symlink.spec.js | 4 +- tests/spec/fs.truncate.spec.js | 6 +- tests/spec/fs.utimes.spec.js | 2 +- tests/spec/fs.writeFile-readFile.spec.js | 14 +- tests/spec/fs.xattr.spec.js | 2 +- tests/spec/node-js/simple/test-fs-mkdir.js | 2 +- .../spec/node-js/simple/test-fs-null-bytes.js | 8 +- .../node-js/simple/test-fs-watch-recursive.js | 2 +- tests/spec/node-js/simple/test-fs-watch.js | 4 +- tests/spec/path-resolution.spec.js | 4 +- tests/spec/providers/providers.base.js | 46 +++---- tests/spec/providers/providers.spec.js | 14 +- tests/spec/shell/cat.spec.js | 10 +- tests/spec/shell/env.spec.js | 2 +- tests/spec/shell/exec.spec.js | 2 +- tests/spec/shell/ls.spec.js | 10 +- tests/spec/shell/rm.spec.js | 6 +- tests/spec/time-flags.spec.js | 4 +- tests/spec/times.spec.js | 6 +- 49 files changed, 252 insertions(+), 249 deletions(-) diff --git a/package.json b/package.json index f4509d0..793b9c7 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,10 @@ "bugs": "https://github.com/filerjs/filer/issues", "license": "BSD-2-Clause", "scripts": { + "eslint": "npm run lint", + "eslint:fix": "npm run lint:fix", "lint": "eslint src tests", + "lint:fix": "eslint --fix src tests", "test:manual": "parcel tests/index.html --out-dir tests/dist", "pretest": "npm run lint", "test": "npm run travis", diff --git a/src/buffer.js b/src/buffer.js index bf8745e..6286d33 100644 --- a/src/buffer.js +++ b/src/buffer.js @@ -7,7 +7,7 @@ function FilerBuffer (subject, encoding, nonZero) { } return new Buffer(subject, encoding, nonZero); -}; +} // Inherit prototype from Buffer FilerBuffer.prototype = Object.create(Buffer.prototype); diff --git a/src/constants.js b/src/constants.js index 2b9f980..b783d6f 100644 --- a/src/constants.js +++ b/src/constants.js @@ -15,9 +15,9 @@ module.exports = { IDB_RO: 'readonly', IDB_RW: 'readwrite', - WSQL_VERSION: "1", + WSQL_VERSION: '1', WSQL_SIZE: 5 * 1024 * 1024, - WSQL_DESC: "FileSystem Storage", + WSQL_DESC: 'FileSystem Storage', NODE_TYPE_FILE: 'FILE', NODE_TYPE_DIRECTORY: 'DIRECTORY', diff --git a/src/filesystem/implementation.js b/src/filesystem/implementation.js index b6d0910..377af8b 100644 --- a/src/filesystem/implementation.js +++ b/src/filesystem/implementation.js @@ -1572,9 +1572,9 @@ function validate_flags(flags) { function validate_file_options(options, enc, fileMode){ if(!options) { options = { encoding: enc, flag: fileMode }; - } else if(typeof options === "function") { + } else if(typeof options === 'function') { options = { encoding: enc, flag: fileMode }; - } else if(typeof options === "string") { + } else if(typeof options === 'string') { options = { encoding: options, flag: fileMode }; } return options; @@ -1832,10 +1832,10 @@ function writeFile(fs, context, path, data, options, callback) { } data = data || ''; - if(typeof data === "number") { + if(typeof data === 'number') { data = '' + data; } - if(typeof data === "string" && options.encoding === 'utf8') { + if(typeof data === 'string' && options.encoding === 'utf8') { data = Encoding.encode(data); } @@ -1869,10 +1869,10 @@ function appendFile(fs, context, path, data, options, callback) { } data = data || ''; - if(typeof data === "number") { + if(typeof data === 'number') { data = '' + data; } - if(typeof data === "string" && options.encoding === 'utf8') { + if(typeof data === 'string' && options.encoding === 'utf8') { data = Encoding.encode(data); } diff --git a/src/filesystem/interface.js b/src/filesystem/interface.js index 719fd35..e5ba6ea 100644 --- a/src/filesystem/interface.js +++ b/src/filesystem/interface.js @@ -29,7 +29,7 @@ var impl = require('./implementation.js'); // node.js supports a calling pattern that leaves off a callback. function maybeCallback(callback) { - if(typeof callback === "function") { + if(typeof callback === 'function') { return callback; } return function(err) { @@ -104,7 +104,7 @@ function FileSystem(options, callback) { // descriptor management functions var openFiles = {}; var nextDescriptor = FIRST_DESCRIPTOR; - Object.defineProperty(this, "openFiles", { + Object.defineProperty(this, 'openFiles', { get: function() { return openFiles; } }); this.allocDescriptor = function(openFileDescription) { diff --git a/src/node.js b/src/node.js index 9c15166..3ed381b 100644 --- a/src/node.js +++ b/src/node.js @@ -14,15 +14,15 @@ var DEFAULT_DIR_PERMISSIONS = require('./constants.js').DEFAULT_DIR_PERMISSIONS; function getMode(type, mode) { switch(type) { - case NODE_TYPE_DIRECTORY: - return (mode || DEFAULT_DIR_PERMISSIONS) | S_IFDIR; - case NODE_TYPE_SYMBOLIC_LINK: - return (mode || DEFAULT_FILE_PERMISSIONS) | S_IFLNK; + case NODE_TYPE_DIRECTORY: + return (mode || DEFAULT_DIR_PERMISSIONS) | S_IFDIR; + case NODE_TYPE_SYMBOLIC_LINK: + return (mode || DEFAULT_FILE_PERMISSIONS) | S_IFLNK; /* jshint -W086 */ - case NODE_TYPE_FILE: - // falls through - default: - return (mode || DEFAULT_FILE_PERMISSIONS) | S_IFREG; + case NODE_TYPE_FILE: + // falls through + default: + return (mode || DEFAULT_FILE_PERMISSIONS) | S_IFREG; } } diff --git a/src/path.js b/src/path.js index 87c57f7..d845b52 100644 --- a/src/path.js +++ b/src/path.js @@ -63,7 +63,7 @@ var splitPath = function(filename) { // path.resolve([from ...], to) function resolve() { var resolvedPath = '', - resolvedAbsolute = false; + resolvedAbsolute = false; for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { // XXXfiler: we don't have process.cwd() so we use '/' as a fallback @@ -92,7 +92,7 @@ function resolve() { // path.normalize(path) function normalize(path) { var isAbsolute = path.charAt(0) === '/', - trailingSlash = path.substr(-1) === '/'; + trailingSlash = path.substr(-1) === '/'; // Normalize the path path = normalizeArray(path.split('/').filter(function(p) { @@ -162,8 +162,8 @@ function relative(from, to) { function dirname(path) { var result = splitPath(path), - root = result[0], - dir = result[1]; + root = result[0], + dir = result[1]; if (!root && !dir) { // No dirname whatsoever @@ -185,7 +185,7 @@ function basename(path, ext) { f = f.substr(0, f.length - ext.length); } // XXXfiler: node.js just does `return f` - return f === "" ? "/" : f; + return f === '' ? '/' : f; } function extname(path) { diff --git a/src/providers/index.js b/src/providers/index.js index eb608b0..d52d5f0 100644 --- a/src/providers/index.js +++ b/src/providers/index.js @@ -25,7 +25,7 @@ module.exports = { } function NotSupported() { - throw "[Filer Error] Your browser doesn't support IndexedDB or WebSQL."; + throw '[Filer Error] Your browser doesn\'t support IndexedDB or WebSQL.'; } NotSupported.isSupported = function() { return false; diff --git a/src/providers/memory.js b/src/providers/memory.js index 2998cf9..048e7da 100644 --- a/src/providers/memory.js +++ b/src/providers/memory.js @@ -24,7 +24,7 @@ function MemoryContext(db, readOnly) { MemoryContext.prototype.clear = function(callback) { if(this.readOnly) { asyncCallback(function() { - callback("[MemoryContext] Error: write operation on read only context"); + callback('[MemoryContext] Error: write operation on read only context'); }); return; } @@ -49,7 +49,7 @@ MemoryContext.prototype.putBuffer = function(key, value, callback) { if(this.readOnly) { asyncCallback(function() { - callback("[MemoryContext] Error: write operation on read only context"); + callback('[MemoryContext] Error: write operation on read only context'); }); return; } @@ -60,7 +60,7 @@ function(key, value, callback) { MemoryContext.prototype.delete = function(key, callback) { if(this.readOnly) { asyncCallback(function() { - callback("[MemoryContext] Error: write operation on read only context"); + callback('[MemoryContext] Error: write operation on read only context'); }); return; } diff --git a/src/providers/websql.js b/src/providers/websql.js index eb35589..77d28f3 100644 --- a/src/providers/websql.js +++ b/src/providers/websql.js @@ -30,8 +30,8 @@ WebSQLContext.prototype.clear = function(callback) { callback(null); } this.getTransaction(function(transaction) { - transaction.executeSql("DELETE FROM " + FILE_STORE_NAME + ";", - [], onSuccess, onError); + transaction.executeSql('DELETE FROM ' + FILE_STORE_NAME + ';', + [], onSuccess, onError); }); }; @@ -45,8 +45,8 @@ function _get(getTransaction, key, callback) { callback(error); } getTransaction(function(transaction) { - transaction.executeSql("SELECT data FROM " + FILE_STORE_NAME + " WHERE id = ? LIMIT 1;", - [key], onSuccess, onError); + transaction.executeSql('SELECT data FROM ' + FILE_STORE_NAME + ' WHERE id = ? LIMIT 1;', + [key], onSuccess, onError); }); } WebSQLContext.prototype.getObject = function(key, callback) { @@ -90,8 +90,8 @@ function _put(getTransaction, key, value, callback) { callback(error); } getTransaction(function(transaction) { - transaction.executeSql("INSERT OR REPLACE INTO " + FILE_STORE_NAME + " (id, data) VALUES (?, ?);", - [key, value], onSuccess, onError); + transaction.executeSql('INSERT OR REPLACE INTO ' + FILE_STORE_NAME + ' (id, data) VALUES (?, ?);', + [key, value], onSuccess, onError); }); } WebSQLContext.prototype.putObject = function(key, value, callback) { @@ -111,8 +111,8 @@ WebSQLContext.prototype.delete = function(key, callback) { callback(error); } this.getTransaction(function(transaction) { - transaction.executeSql("DELETE FROM " + FILE_STORE_NAME + " WHERE id = ?;", - [key], onSuccess, onError); + transaction.executeSql('DELETE FROM ' + FILE_STORE_NAME + ' WHERE id = ?;', + [key], onSuccess, onError); }); }; @@ -135,7 +135,7 @@ WebSQL.prototype.open = function(callback) { var db = global.openDatabase(that.name, WSQL_VERSION, WSQL_DESC, WSQL_SIZE); if(!db) { - callback("[WebSQL] Unable to open database."); + callback('[WebSQL] Unable to open database.'); return; } @@ -153,12 +153,12 @@ WebSQL.prototype.open = function(callback) { // Create the table and index we'll need to store the fs data. db.transaction(function(transaction) { function createIndex(transaction) { - transaction.executeSql("CREATE INDEX IF NOT EXISTS idx_" + FILE_STORE_NAME + "_id" + - " on " + FILE_STORE_NAME + " (id);", - [], onSuccess, onError); + transaction.executeSql('CREATE INDEX IF NOT EXISTS idx_' + FILE_STORE_NAME + '_id' + + ' on ' + FILE_STORE_NAME + ' (id);', + [], onSuccess, onError); } - transaction.executeSql("CREATE TABLE IF NOT EXISTS " + FILE_STORE_NAME + " (id unique, data TEXT);", - [], createIndex, onError); + transaction.executeSql('CREATE TABLE IF NOT EXISTS ' + FILE_STORE_NAME + ' (id unique, data TEXT);', + [], createIndex, onError); }); }; WebSQL.prototype.getReadOnlyContext = function() { diff --git a/src/shell/shell.js b/src/shell/shell.js index 92e0c57..89a895c 100644 --- a/src/shell/shell.js +++ b/src/shell/shell.js @@ -87,7 +87,7 @@ Shell.prototype.exec = function(path, args, callback) { callback = callback || function(){}; path = Path.resolve(sh.pwd(), path); - fs.readFile(path, "utf8", function(error, data) { + fs.readFile(path, 'utf8', function(error, data) { if(error) { callback(error); return; @@ -432,7 +432,7 @@ Shell.prototype.mkdirp = function(path, callback) { * `find` returns a flat array of absolute paths for all matching/found * paths as the final argument to the callback. */ - Shell.prototype.find = function(path, options, callback) { +Shell.prototype.find = function(path, options, callback) { var sh = this; var fs = sh.fs; if(typeof options === 'function') { diff --git a/tests/bugs/issue357.js b/tests/bugs/issue357.js index eb8bb53..870de50 100644 --- a/tests/bugs/issue357.js +++ b/tests/bugs/issue357.js @@ -3,10 +3,10 @@ var expect = require('chai').expect; describe('Path.resolve does not work, issue357', function() { it('Path.relative() should not crash', function() { - expect(Path.relative("/mydir", "/mydir/file")).to.equal("file"); + expect(Path.relative('/mydir', '/mydir/file')).to.equal('file'); // https://nodejs.org/api/path.html#path_path_relative_from_to - expect(Path.relative("/data/orandea/test/aaa", "/data/orandea/impl/bbb")).to.equal("../../impl/bbb"); + expect(Path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb')).to.equal('../../impl/bbb'); }); it('Path.resolve() should work as expectedh', function() { diff --git a/tests/index.js b/tests/index.js index 7b32430..e49c342 100644 --- a/tests/index.js +++ b/tests/index.js @@ -4,77 +4,77 @@ */ // Filer -require("./spec/filer.spec"); +require('./spec/filer.spec'); // Filer.FileSystem.* -require("./spec/filer.filesystem.spec"); -require("./spec/fs.spec"); -require("./spec/fs.stat.spec"); -require("./spec/fs.lstat.spec"); -require("./spec/fs.exists.spec"); -require("./spec/fs.mknod.spec"); -require("./spec/fs.mkdir.spec"); -require("./spec/fs.readdir.spec"); -require("./spec/fs.rmdir.spec"); -require("./spec/fs.open.spec"); -require("./spec/fs.write.spec"); -require("./spec/fs.writeFile-readFile.spec"); -require("./spec/fs.appendFile.spec"); -require("./spec/fs.read.spec"); -require("./spec/fs.close.spec"); -require("./spec/fs.link.spec"); -require("./spec/fs.unlink.spec"); -require("./spec/fs.rename.spec"); -require("./spec/fs.lseek.spec"); -require("./spec/fs.symlink.spec"); -require("./spec/fs.readlink.spec"); -require("./spec/fs.truncate.spec"); -require("./spec/fs.utimes.spec"); -require("./spec/fs.xattr.spec"); -require("./spec/fs.stats.spec"); -require("./spec/path-resolution.spec"); -require("./spec/trailing-slashes.spec"); -require("./spec/times.spec"); -require("./spec/time-flags.spec"); -require("./spec/fs.watch.spec"); -require("./spec/errors.spec"); -require("./spec/fs.shell.spec"); -require("./spec/fs.chmod.spec"); -require("./spec/fs.chown.spec") +require('./spec/filer.filesystem.spec'); +require('./spec/fs.spec'); +require('./spec/fs.stat.spec'); +require('./spec/fs.lstat.spec'); +require('./spec/fs.exists.spec'); +require('./spec/fs.mknod.spec'); +require('./spec/fs.mkdir.spec'); +require('./spec/fs.readdir.spec'); +require('./spec/fs.rmdir.spec'); +require('./spec/fs.open.spec'); +require('./spec/fs.write.spec'); +require('./spec/fs.writeFile-readFile.spec'); +require('./spec/fs.appendFile.spec'); +require('./spec/fs.read.spec'); +require('./spec/fs.close.spec'); +require('./spec/fs.link.spec'); +require('./spec/fs.unlink.spec'); +require('./spec/fs.rename.spec'); +require('./spec/fs.lseek.spec'); +require('./spec/fs.symlink.spec'); +require('./spec/fs.readlink.spec'); +require('./spec/fs.truncate.spec'); +require('./spec/fs.utimes.spec'); +require('./spec/fs.xattr.spec'); +require('./spec/fs.stats.spec'); +require('./spec/path-resolution.spec'); +require('./spec/trailing-slashes.spec'); +require('./spec/times.spec'); +require('./spec/time-flags.spec'); +require('./spec/fs.watch.spec'); +require('./spec/errors.spec'); +require('./spec/fs.shell.spec'); +require('./spec/fs.chmod.spec'); +require('./spec/fs.chown.spec'); // Filer.FileSystem.providers.* -require("./spec/providers/providers.spec"); -require("./spec/providers/providers.indexeddb.spec"); -require("./spec/providers/providers.websql.spec"); -require("./spec/providers/providers.memory.spec"); +require('./spec/providers/providers.spec'); +require('./spec/providers/providers.indexeddb.spec'); +require('./spec/providers/providers.websql.spec'); +require('./spec/providers/providers.memory.spec'); // Filer.FileSystemShell.* -require("./spec/shell/cd.spec"); -require("./spec/shell/touch.spec"); -require("./spec/shell/exec.spec"); -require("./spec/shell/cat.spec"); -require("./spec/shell/ls.spec"); -require("./spec/shell/rm.spec"); -require("./spec/shell/env.spec"); -require("./spec/shell/mkdirp.spec"); -require("./spec/shell/find.spec"); +require('./spec/shell/cd.spec'); +require('./spec/shell/touch.spec'); +require('./spec/shell/exec.spec'); +require('./spec/shell/cat.spec'); +require('./spec/shell/ls.spec'); +require('./spec/shell/rm.spec'); +require('./spec/shell/env.spec'); +require('./spec/shell/mkdirp.spec'); +require('./spec/shell/find.spec'); // Ported node.js tests (filenames match names in https://github.com/joyent/node/tree/master/test) -require("./spec/node-js/simple/test-fs-mkdir"); -require("./spec/node-js/simple/test-fs-null-bytes"); -require("./spec/node-js/simple/test-fs-watch"); -require("./spec/node-js/simple/test-fs-watch-recursive"); +require('./spec/node-js/simple/test-fs-mkdir'); +require('./spec/node-js/simple/test-fs-null-bytes'); +require('./spec/node-js/simple/test-fs-watch'); +require('./spec/node-js/simple/test-fs-watch-recursive'); // Regressions, Bugs -require("./bugs/issue105"); -require("./bugs/issue106"); -require("./bugs/issue239"); -require("./bugs/issue249"); -require("./bugs/ls-depth-bug"); -require("./bugs/issue247.js"); -require("./bugs/issue254.js"); -require("./bugs/issue258.js"); -require("./bugs/issue267.js"); -require("./bugs/issue270.js"); -require("./bugs/rename-dir-trailing-slash.js"); -require("./bugs/issue357.js"); +require('./bugs/issue105'); +require('./bugs/issue106'); +require('./bugs/issue239'); +require('./bugs/issue249'); +require('./bugs/ls-depth-bug'); +require('./bugs/issue247.js'); +require('./bugs/issue254.js'); +require('./bugs/issue258.js'); +require('./bugs/issue267.js'); +require('./bugs/issue270.js'); +require('./bugs/rename-dir-trailing-slash.js'); +require('./bugs/issue357.js'); diff --git a/tests/lib/indexeddb.js b/tests/lib/indexeddb.js index 4a2b3fe..4dbc505 100644 --- a/tests/lib/indexeddb.js +++ b/tests/lib/indexeddb.js @@ -40,7 +40,7 @@ function IndexedDBTestProvider(name) { request.onsuccess = finished; request.onerror = finished; } catch(e) { - console.log("Failed to delete test database", e); + console.log('Failed to delete test database', e); finished(); } } diff --git a/tests/lib/test-utils.js b/tests/lib/test-utils.js index ffe0035..80a12e4 100644 --- a/tests/lib/test-utils.js +++ b/tests/lib/test-utils.js @@ -58,20 +58,20 @@ function setup(callback) { var name = uniqueName(); switch(providerType.toLowerCase()) { - case 'indexeddb': - _provider = new IndexedDBTestProvider(name); - break; - case 'websql': - _provider = new WebSQLTestProvider(name); - break; - case 'memory': - _provider = new MemoryTestProvider(name); - break; - case 'default': - default: - var BestProvider = findBestProvider(); - _provider = new BestProvider(name); - break; + case 'indexeddb': + _provider = new IndexedDBTestProvider(name); + break; + case 'websql': + _provider = new WebSQLTestProvider(name); + break; + case 'memory': + _provider = new MemoryTestProvider(name); + break; + case 'default': + default: + var BestProvider = findBestProvider(); + _provider = new BestProvider(name); + break; } // Allow passing FS flags on query string @@ -95,14 +95,14 @@ function setup(callback) { function fs() { if(!_fs) { - throw "TestUtil: call setup() before fs()"; + throw 'TestUtil: call setup() before fs()'; } return _fs; } function provider() { if(!_provider) { - throw "TestUtil: call setup() before provider()"; + throw 'TestUtil: call setup() before provider()'; } return _provider; } diff --git a/tests/spec/errors.spec.js b/tests/spec/errors.spec.js index 8c6fcd6..1d6e5bb 100644 --- a/tests/spec/errors.spec.js +++ b/tests/spec/errors.spec.js @@ -1,8 +1,8 @@ var Filer = require('../../src'); var expect = require('chai').expect; -describe("Filer.Errors", function() { - it("has expected errors", function() { +describe('Filer.Errors', function() { + it('has expected errors', function() { expect(Filer.Errors).to.exist; // By ctor -- if you add some to src/errors.js, also add here @@ -165,12 +165,12 @@ describe("Filer.Errors", function() { it('should not include path in toString() when not provided', function() { var err = new Filer.Errors.ENOENT('This is the message'); - expect(err.toString()).to.equal("ENOENT: This is the message"); + expect(err.toString()).to.equal('ENOENT: This is the message'); }); it('should include path in toString() when provided', function() { var err = new Filer.Errors.ENOENT(null, '/this/is/the/path'); - expect(err.toString()).to.equal("ENOENT: no such file or directory, '/this/is/the/path'"); + expect(err.toString()).to.equal('ENOENT: no such file or directory, \'/this/is/the/path\''); }); it('should include message and path info when provided', function() { diff --git a/tests/spec/filer.filesystem.spec.js b/tests/spec/filer.filesystem.spec.js index 243e4dc..17fc8c1 100644 --- a/tests/spec/filer.filesystem.spec.js +++ b/tests/spec/filer.filesystem.spec.js @@ -2,7 +2,7 @@ var Filer = require('../../src'); var util = require('../lib/test-utils.js'); var expect = require('chai').expect; -describe("Filer.FileSystem", function() { +describe('Filer.FileSystem', function() { beforeEach(util.setup); afterEach(util.cleanup); diff --git a/tests/spec/filer.spec.js b/tests/spec/filer.spec.js index b6fb385..0d9b610 100644 --- a/tests/spec/filer.spec.js +++ b/tests/spec/filer.spec.js @@ -1,16 +1,16 @@ var Filer = require('../../src'); var expect = require('chai').expect; -describe("Filer", function() { - it("is defined", function() { +describe('Filer', function() { + it('is defined', function() { expect(typeof Filer).not.to.equal(undefined); }); - it("has FileSystem constructor", function() { + it('has FileSystem constructor', function() { expect(typeof Filer.FileSystem).to.equal('function'); }); - it("has Shell constructor", function() { + it('has Shell constructor', function() { expect(typeof Filer.Shell).to.equal('function'); }); }); diff --git a/tests/spec/fs.appendFile.spec.js b/tests/spec/fs.appendFile.spec.js index 21401bd..3949a4e 100644 --- a/tests/spec/fs.appendFile.spec.js +++ b/tests/spec/fs.appendFile.spec.js @@ -5,7 +5,7 @@ describe('fs.appendFile', function() { beforeEach(function(done) { util.setup(function() { var fs = util.fs(); - fs.writeFile('/myfile', "This is a file.", { encoding: 'utf8' }, function(error) { + fs.writeFile('/myfile', 'This is a file.', { encoding: 'utf8' }, function(error) { if(error) throw error; done(); }); @@ -20,8 +20,8 @@ describe('fs.appendFile', function() { it('should append a utf8 file without specifying utf8 in appendFile', function(done) { var fs = util.fs(); - var contents = "This is a file."; - var more = " Appended."; + var contents = 'This is a file.'; + var more = ' Appended.'; fs.appendFile('/myfile', more, function(error) { if(error) throw error; @@ -36,8 +36,8 @@ describe('fs.appendFile', function() { it('should append a utf8 file with "utf8" option to appendFile', function(done) { var fs = util.fs(); - var contents = "This is a file."; - var more = " Appended."; + var contents = 'This is a file.'; + var more = ' Appended.'; fs.appendFile('/myfile', more, 'utf8', function(error) { if(error) throw error; @@ -52,8 +52,8 @@ describe('fs.appendFile', function() { it('should append a utf8 file with {encoding: "utf8"} option to appendFile', function(done) { var fs = util.fs(); - var contents = "This is a file."; - var more = " Appended."; + var contents = 'This is a file.'; + var more = ' Appended.'; fs.appendFile('/myfile', more, { encoding: 'utf8' }, function(error) { if(error) throw error; @@ -70,12 +70,12 @@ describe('fs.appendFile', function() { var fs = util.fs(); // String and utf8 binary encoded versions of the same thing: - var contents = "This is a file."; + var contents = 'This is a file.'; var binary = new Buffer([84, 104, 105, 115, 32, 105, 115, 32, 97, 32, 102, 105, 108, 101, 46]); - var more = " Appended."; + var more = ' Appended.'; var binary2 = new Buffer([32, 65, 112, 112, 101, 110, 100, 101, 100, 46]); var binary3 = new Buffer([84, 104, 105, 115, 32, 105, 115, 32, 97, 32, 102, 105, 108, 101, 46, - 32, 65, 112, 112, 101, 110, 100, 101, 100, 46]); + 32, 65, 112, 112, 101, 110, 100, 101, 100, 46]); fs.writeFile('/mybinaryfile', binary, function(error) { if(error) throw error; @@ -94,8 +94,8 @@ describe('fs.appendFile', function() { it('should follow symbolic links', function(done) { var fs = util.fs(); - var contents = "This is a file."; - var more = " Appended."; + var contents = 'This is a file.'; + var more = ' Appended.'; fs.symlink('/myfile', '/myFileLink', function (error) { if (error) throw error; @@ -114,7 +114,7 @@ describe('fs.appendFile', function() { it('should work when file does not exist, and create the file', function(done) { var fs = util.fs(); - var contents = "This is a file."; + var contents = 'This is a file.'; fs.appendFile('/newfile', contents, { encoding: 'utf8' }, function(error) { expect(error).not.to.exist; diff --git a/tests/spec/fs.link.spec.js b/tests/spec/fs.link.spec.js index 83eb7a5..a9499c4 100644 --- a/tests/spec/fs.link.spec.js +++ b/tests/spec/fs.link.spec.js @@ -43,7 +43,7 @@ describe('fs.link', function() { it('should create hard link to identical data node', function(done) { var fs = util.fs(); - var contents = "Hello World!"; + var contents = 'Hello World!'; fs.writeFile('/file', contents, function(err) { if(err) throw err; diff --git a/tests/spec/fs.lstat.spec.js b/tests/spec/fs.lstat.spec.js index 788c230..72d826b 100644 --- a/tests/spec/fs.lstat.spec.js +++ b/tests/spec/fs.lstat.spec.js @@ -16,7 +16,7 @@ describe('fs.lstat', function() { fs.lstat('/tmp', function(error, result) { expect(error).to.exist; - expect(error.code).to.equal("ENOENT"); + expect(error.code).to.equal('ENOENT'); expect(result).not.to.exist; done(); }); diff --git a/tests/spec/fs.mkdir.spec.js b/tests/spec/fs.mkdir.spec.js index 37a4652..5dcd154 100644 --- a/tests/spec/fs.mkdir.spec.js +++ b/tests/spec/fs.mkdir.spec.js @@ -15,7 +15,7 @@ describe('fs.mkdir', function() { fs.mkdir('/tmp/mydir', function(error) { expect(error).to.exist; - expect(error.code).to.equal("ENOENT"); + expect(error.code).to.equal('ENOENT'); done(); }); }); @@ -25,7 +25,7 @@ describe('fs.mkdir', function() { fs.mkdir('/', function(error) { expect(error).to.exist; - expect(error.code).to.equal("EEXIST"); + expect(error.code).to.equal('EEXIST'); done(); }); }); diff --git a/tests/spec/fs.open.spec.js b/tests/spec/fs.open.spec.js index d6a102b..5ee7150 100644 --- a/tests/spec/fs.open.spec.js +++ b/tests/spec/fs.open.spec.js @@ -16,7 +16,7 @@ describe('fs.open', function() { fs.open('/tmp/myfile', 'w+', function(error, result) { expect(error).to.exist; - expect(error.code).to.equal("ENOENT"); + expect(error.code).to.equal('ENOENT'); expect(result).not.to.exist; done(); }); @@ -27,7 +27,7 @@ describe('fs.open', function() { fs.open('/myfile', 'r+', function(error, result) { expect(error).to.exist; - expect(error.code).to.equal("ENOENT"); + expect(error.code).to.equal('ENOENT'); expect(result).not.to.exist; done(); }); @@ -40,7 +40,7 @@ describe('fs.open', function() { if(error) throw error; fs.open('/tmp', 'w', function(error, result) { expect(error).to.exist; - expect(error.code).to.equal("EISDIR"); + expect(error.code).to.equal('EISDIR'); expect(result).not.to.exist; done(); }); @@ -54,7 +54,7 @@ describe('fs.open', function() { if(error) throw error; fs.open('/tmp', 'a', function(error, result) { expect(error).to.exist; - expect(error.code).to.equal("EISDIR"); + expect(error.code).to.equal('EISDIR'); expect(result).not.to.exist; done(); }); diff --git a/tests/spec/fs.readdir.spec.js b/tests/spec/fs.readdir.spec.js index 6c55de9..0e9a1ec 100644 --- a/tests/spec/fs.readdir.spec.js +++ b/tests/spec/fs.readdir.spec.js @@ -15,7 +15,7 @@ describe('fs.readdir', function() { fs.readdir('/tmp/mydir', function(error, files) { expect(error).to.exist; - expect(error.code).to.equal("ENOENT"); + expect(error.code).to.equal('ENOENT'); expect(files).not.to.exist; done(); }); diff --git a/tests/spec/fs.readlink.spec.js b/tests/spec/fs.readlink.spec.js index 9929b9c..7d2b6c9 100644 --- a/tests/spec/fs.readlink.spec.js +++ b/tests/spec/fs.readlink.spec.js @@ -15,7 +15,7 @@ describe('fs.readlink', function() { fs.readlink('/tmp/mydir', function(error) { expect(error).to.exist; - expect(error.code).to.equal("ENOENT"); + expect(error.code).to.equal('ENOENT'); done(); }); }); @@ -25,7 +25,7 @@ describe('fs.readlink', function() { fs.readlink('/', function(error) { expect(error).to.exist; - expect(error.code).to.equal("ENOENT"); + expect(error.code).to.equal('ENOENT'); done(); }); }); diff --git a/tests/spec/fs.rmdir.spec.js b/tests/spec/fs.rmdir.spec.js index d8075db..328c972 100644 --- a/tests/spec/fs.rmdir.spec.js +++ b/tests/spec/fs.rmdir.spec.js @@ -15,7 +15,7 @@ describe('fs.rmdir', function() { fs.rmdir('/tmp/mydir', function(error) { expect(error).to.exist; - expect(error.code).to.equal("ENOENT"); + expect(error.code).to.equal('ENOENT'); done(); }); }); @@ -25,7 +25,7 @@ describe('fs.rmdir', function() { fs.rmdir('/', function(error) { expect(error).to.exist; - expect(error.code).to.equal("EBUSY"); + expect(error.code).to.equal('EBUSY'); done(); }); }); @@ -39,7 +39,7 @@ describe('fs.rmdir', function() { if(error) throw error; fs.rmdir('/', function(error) { expect(error).to.exist; - expect(error.code).to.equal("EBUSY"); + expect(error.code).to.equal('EBUSY'); done(); }); }); @@ -57,7 +57,7 @@ describe('fs.rmdir', function() { if(error) throw error; fs.rmdir('/tmp/myfile', function(error) { expect(error).to.exist; - expect(error.code).to.equal("ENOTDIR"); + expect(error.code).to.equal('ENOTDIR'); done(); }); }); @@ -74,7 +74,7 @@ describe('fs.rmdir', function() { if(error) throw error; fs.rmdir('/tmp/myfile', function (error) { expect(error).to.exist; - expect(error.code).to.equal("ENOTDIR"); + expect(error.code).to.equal('ENOTDIR'); done(); }); }); diff --git a/tests/spec/fs.shell.spec.js b/tests/spec/fs.shell.spec.js index 6ce7f44..6492fc4 100644 --- a/tests/spec/fs.shell.spec.js +++ b/tests/spec/fs.shell.spec.js @@ -2,11 +2,11 @@ var Filer = require('../../src'); var util = require('../lib/test-utils.js'); var expect = require('chai').expect; -describe("fs.Shell", function() { +describe('fs.Shell', function() { beforeEach(util.setup); afterEach(util.cleanup); - it("is a function", function(done) { + it('is a function', function(done) { var fs = util.fs(); expect(typeof fs.Shell).to.equal('function'); @@ -25,9 +25,9 @@ describe("fs.Shell", function() { var fs = util.fs(); var sh = new fs.Shell(); - Filer.Shell.prototype.test = "foo"; + Filer.Shell.prototype.test = 'foo'; - expect(sh.test).to.equal("foo"); + expect(sh.test).to.equal('foo'); done(); }); }); diff --git a/tests/spec/fs.spec.js b/tests/spec/fs.spec.js index 91abf21..f2eb3b8 100644 --- a/tests/spec/fs.spec.js +++ b/tests/spec/fs.spec.js @@ -2,11 +2,11 @@ var Filer = require('../../src'); var util = require('../lib/test-utils.js'); var expect = require('chai').expect; -describe("fs", function() { +describe('fs', function() { beforeEach(util.setup); afterEach(util.cleanup); - it("is an object", function() { + it('is an object', function() { var fs = util.fs(); expect(typeof fs).to.equal('object'); expect(fs).to.be.an.instanceof(Filer.FileSystem); diff --git a/tests/spec/fs.stat.spec.js b/tests/spec/fs.stat.spec.js index f14bdee..16ee1bb 100644 --- a/tests/spec/fs.stat.spec.js +++ b/tests/spec/fs.stat.spec.js @@ -15,7 +15,7 @@ describe('fs.stat', function() { fs.stat('/tmp', function(error, result) { expect(error).to.exist; - expect(error.code).to.equal("ENOENT"); + expect(error.code).to.equal('ENOENT'); expect(result).not.to.exist; done(); }); diff --git a/tests/spec/fs.stats.spec.js b/tests/spec/fs.stats.spec.js index c92ecd1..eb53241 100644 --- a/tests/spec/fs.stats.spec.js +++ b/tests/spec/fs.stats.spec.js @@ -274,7 +274,7 @@ describe('fs.stats', function() { expect(stats.name).to.equal(Path.basename(filepath)); done(); }); - }) + }); }); it('should correct return name for an fd', function(done) { @@ -290,7 +290,7 @@ describe('fs.stats', function() { expect(stats.name).to.equal(Path.basename(filepath)); done(); }); - }) + }); }); - }) + }); }); diff --git a/tests/spec/fs.symlink.spec.js b/tests/spec/fs.symlink.spec.js index 7b36d81..1e4e9b1 100644 --- a/tests/spec/fs.symlink.spec.js +++ b/tests/spec/fs.symlink.spec.js @@ -15,7 +15,7 @@ describe('fs.symlink', function() { fs.symlink('/', '/tmp/mydir', function(error) { expect(error).to.exist; - expect(error.code).to.equal("ENOENT"); + expect(error.code).to.equal('ENOENT'); done(); }); }); @@ -25,7 +25,7 @@ describe('fs.symlink', function() { fs.symlink('/tmp', '/', function(error) { expect(error).to.exist; - expect(error.code).to.equal("EEXIST"); + expect(error.code).to.equal('EEXIST'); done(); }); }); diff --git a/tests/spec/fs.truncate.spec.js b/tests/spec/fs.truncate.spec.js index 8c8cfdc..2999779 100644 --- a/tests/spec/fs.truncate.spec.js +++ b/tests/spec/fs.truncate.spec.js @@ -12,14 +12,14 @@ describe('fs.truncate', function() { it('should error when length is negative', function(done) { var fs = util.fs(); - var contents = "This is a file."; + var contents = 'This is a file.'; fs.writeFile('/myfile', contents, function(error) { if(error) throw error; fs.truncate('/myfile', -1, function(error) { expect(error).to.exist; - expect(error.code).to.equal("EINVAL"); + expect(error.code).to.equal('EINVAL'); done(); }); }); @@ -30,7 +30,7 @@ describe('fs.truncate', function() { fs.truncate('/', 0, function(error) { expect(error).to.exist; - expect(error.code).to.equal("EISDIR"); + expect(error.code).to.equal('EISDIR'); done(); }); }); diff --git a/tests/spec/fs.utimes.spec.js b/tests/spec/fs.utimes.spec.js index 671a4be..d663050 100644 --- a/tests/spec/fs.utimes.spec.js +++ b/tests/spec/fs.utimes.spec.js @@ -126,7 +126,7 @@ describe('fs.utimes', function() { fs.fstat(ofd, function (error, stat) { expect(error).not.to.exist; expect(stat.mtime).to.equal(mtime); - done(); + done(); }); }); }); diff --git a/tests/spec/fs.writeFile-readFile.spec.js b/tests/spec/fs.writeFile-readFile.spec.js index 37c4a87..7f2d62c 100644 --- a/tests/spec/fs.writeFile-readFile.spec.js +++ b/tests/spec/fs.writeFile-readFile.spec.js @@ -13,11 +13,11 @@ describe('fs.writeFile, fs.readFile', function() { it('should error when path is wrong to readFile', function(done) { var fs = util.fs(); - var contents = "This is a file."; + var contents = 'This is a file.'; fs.readFile('/no-such-file', 'utf8', function(error, data) { expect(error).to.exist; - expect(error.code).to.equal("ENOENT"); + expect(error.code).to.equal('ENOENT'); expect(data).not.to.exist; done(); }); @@ -25,7 +25,7 @@ describe('fs.writeFile, fs.readFile', function() { it('should write, read a utf8 file without specifying utf8 in writeFile', function(done) { var fs = util.fs(); - var contents = "This is a file."; + var contents = 'This is a file.'; fs.writeFile('/myfile', contents, function(error) { if(error) throw error; @@ -39,7 +39,7 @@ describe('fs.writeFile, fs.readFile', function() { it('should write, read a utf8 file with "utf8" option to writeFile', function(done) { var fs = util.fs(); - var contents = "This is a file."; + var contents = 'This is a file.'; fs.writeFile('/myfile', contents, 'utf8', function(error) { if(error) throw error; @@ -53,7 +53,7 @@ describe('fs.writeFile, fs.readFile', function() { it('should write, read a utf8 file with {encoding: "utf8"} option to writeFile', function(done) { var fs = util.fs(); - var contents = "This is a file."; + var contents = 'This is a file.'; fs.writeFile('/myfile', contents, { encoding: 'utf8' }, function(error) { if(error) throw error; @@ -68,7 +68,7 @@ describe('fs.writeFile, fs.readFile', function() { it('should write, read a binary file', function(done) { var fs = util.fs(); // String and utf8 binary encoded versions of the same thing: - var contents = "This is a file."; + var contents = 'This is a file.'; var binary = new Buffer([84, 104, 105, 115, 32, 105, 115, 32, 97, 32, 102, 105, 108, 101, 46]); fs.writeFile('/myfile', binary, function(error) { @@ -83,7 +83,7 @@ describe('fs.writeFile, fs.readFile', function() { it('should follow symbolic links', function(done) { var fs = util.fs(); - var contents = "This is a file."; + var contents = 'This is a file.'; fs.writeFile('/myfile', '', { encoding: 'utf8' }, function(error) { if(error) throw error; diff --git a/tests/spec/fs.xattr.spec.js b/tests/spec/fs.xattr.spec.js index 092939e..c29a4c3 100644 --- a/tests/spec/fs.xattr.spec.js +++ b/tests/spec/fs.xattr.spec.js @@ -288,7 +288,7 @@ describe('fs.xattr', function() { }); }); }); - }) + }); }); }); diff --git a/tests/spec/node-js/simple/test-fs-mkdir.js b/tests/spec/node-js/simple/test-fs-mkdir.js index 389d1d2..f1ffef4 100644 --- a/tests/spec/node-js/simple/test-fs-mkdir.js +++ b/tests/spec/node-js/simple/test-fs-mkdir.js @@ -1,7 +1,7 @@ var util = require('../../../lib/test-utils.js'); var expect = require('chai').expect; -describe("node.js tests: https://github.com/joyent/node/blob/master/test/simple/test-fs-mkdir.js", function() { +describe('node.js tests: https://github.com/joyent/node/blob/master/test/simple/test-fs-mkdir.js', function() { beforeEach(util.setup); afterEach(util.cleanup); diff --git a/tests/spec/node-js/simple/test-fs-null-bytes.js b/tests/spec/node-js/simple/test-fs-null-bytes.js index 8c51eef..62b9290 100644 --- a/tests/spec/node-js/simple/test-fs-null-bytes.js +++ b/tests/spec/node-js/simple/test-fs-null-bytes.js @@ -1,7 +1,7 @@ var util = require('../../../lib/test-utils.js'); var expect = require('chai').expect; -describe("node.js tests: https://github.com/joyent/node/blob/master/test/simple/test-fs-null-bytes.js", function() { +describe('node.js tests: https://github.com/joyent/node/blob/master/test/simple/test-fs-null-bytes.js', function() { beforeEach(util.setup); afterEach(util.cleanup); @@ -9,7 +9,7 @@ describe("node.js tests: https://github.com/joyent/node/blob/master/test/simple/ var checks = []; var fnCount = 0; var fnTotal = 16; - var expected = "Path must be a string without null bytes."; + var expected = 'Path must be a string without null bytes.'; var fs = util.fs(); // Make sure function fails with null path error in callback. @@ -47,8 +47,8 @@ describe("node.js tests: https://github.com/joyent/node/blob/master/test/simple/ check(fs.appendFile, '/foo\u0000bar'); check(fs.truncate, '/foo\u0000bar'); check(fs.utimes, '/foo\u0000bar', 0, 0); -// Not implemented -// check(fs.realpath, '/foo\u0000bar'); + // Not implemented + // check(fs.realpath, '/foo\u0000bar'); check(fs.chmod, '/foo\u0000bar', '0644'); check(fs.chown, '/foo\u0000bar', 12, 34); diff --git a/tests/spec/node-js/simple/test-fs-watch-recursive.js b/tests/spec/node-js/simple/test-fs-watch-recursive.js index d6b6cfc..52fba8c 100644 --- a/tests/spec/node-js/simple/test-fs-watch-recursive.js +++ b/tests/spec/node-js/simple/test-fs-watch-recursive.js @@ -6,7 +6,7 @@ var expect = require('chai').expect; * fd vs. path) for events, or gives only a portion thereof (e.g., basname), * we give full, abs paths always. */ -describe("node.js tests: https://github.com/joyent/node/blob/master/test/simple/test-fs-watch-recursive.js", function() { +describe('node.js tests: https://github.com/joyent/node/blob/master/test/simple/test-fs-watch-recursive.js', function() { beforeEach(util.setup); afterEach(util.cleanup); diff --git a/tests/spec/node-js/simple/test-fs-watch.js b/tests/spec/node-js/simple/test-fs-watch.js index bb05419..6db48be 100644 --- a/tests/spec/node-js/simple/test-fs-watch.js +++ b/tests/spec/node-js/simple/test-fs-watch.js @@ -9,7 +9,7 @@ var expect = require('chai').expect; var filenameOne = '/watch.txt'; var filenameTwo = '/hasOwnProperty'; -describe("node.js tests: https://github.com/joyent/node/blob/master/test/simple/test-fs-watch.js", function() { +describe('node.js tests: https://github.com/joyent/node/blob/master/test/simple/test-fs-watch.js', function() { beforeEach(util.setup); afterEach(util.cleanup); @@ -56,7 +56,7 @@ describe("node.js tests: https://github.com/joyent/node/blob/master/test/simple/ if(error) throw error; var watcher = fs.watch('/tmp', function(event, filename) { -// TODO: node thinks this should be 'rename', need to add rename along with change. + // TODO: node thinks this should be 'rename', need to add rename along with change. expect(event).to.equal('change'); expect(filename).to.equal('/tmp'); watcher.close(); diff --git a/tests/spec/path-resolution.spec.js b/tests/spec/path-resolution.spec.js index 3ae54a4..b53f932 100644 --- a/tests/spec/path-resolution.spec.js +++ b/tests/spec/path-resolution.spec.js @@ -121,7 +121,7 @@ describe('path resolution', function() { fs.stat('/myfilelink1', function(error, result) { expect(error).to.exist; - expect(error.code).to.equal("ENOENT"); + expect(error.code).to.equal('ENOENT'); expect(result).not.to.exist; done(); }); @@ -212,7 +212,7 @@ describe('path resolution', function() { fs.stat('/mynotdirlink/myfile', function(error, result) { expect(error).to.exist; - expect(error.code).to.equal("ENOTDIR"); + expect(error.code).to.equal('ENOTDIR'); expect(result).not.to.exist; done(); }); diff --git a/tests/spec/providers/providers.base.js b/tests/spec/providers/providers.base.js index 70e1510..217eed7 100644 --- a/tests/spec/providers/providers.base.js +++ b/tests/spec/providers/providers.base.js @@ -8,11 +8,11 @@ var expect = require('chai').expect; */ module.exports = function createProviderTestsFor(providerName, testProvider) { if(!testProvider.isSupported()) { - console.log("Skipping provider tests for `" + providerName +"'--not supported in current environment."); + console.log('Skipping provider tests for `' + providerName +'\'--not supported in current environment.'); return; } - describe("Filer Provider Tests for " + providerName, function() { + describe('Filer Provider Tests for ' + providerName, function() { var _provider; var provider; @@ -29,27 +29,27 @@ module.exports = function createProviderTestsFor(providerName, testProvider) { }); - it("has open, getReadOnlyContext, and getReadWriteContext instance methods", function() { + it('has open, getReadOnlyContext, and getReadWriteContext instance methods', function() { expect(provider.open).to.be.a('function'); expect(provider.getReadOnlyContext).to.be.a('function'); expect(provider.getReadWriteContext).to.be.a('function'); }); - it("should open a new provider database", function(done) { + it('should open a new provider database', function(done) { provider.open(function(error) { expect(error).not.to.exist; done(); }); }); - it("should allow putObject() and getObject()", function(done) { + it('should allow putObject() and getObject()', function(done) { provider.open(function(error, firstAccess) { if(error) throw error; var context = provider.getReadWriteContext(); // Simple JS Object var value = { - a: "a", + a: 'a', b: 1, c: true, d: [1,2,3], @@ -57,10 +57,10 @@ module.exports = function createProviderTestsFor(providerName, testProvider) { e1: ['a', 'b', 'c'] } }; - context.putObject("key", value, function(error) { + context.putObject('key', value, function(error) { if(error) throw error; - context.getObject("key", function(error, result) { + context.getObject('key', function(error, result) { expect(error).not.to.exist; expect(result).to.be.an('object'); expect(result).to.deep.equal(value); @@ -70,17 +70,17 @@ module.exports = function createProviderTestsFor(providerName, testProvider) { }); }); - it("should allow putBuffer() and getBuffer()", function(done) { + it('should allow putBuffer() and getBuffer()', function(done) { provider.open(function(error, firstAccess) { if(error) throw error; var context = provider.getReadWriteContext(); // Filer Buffer var buf = new Buffer([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); - context.putBuffer("key", buf, function(error) { + context.putBuffer('key', buf, function(error) { if(error) throw error; - context.getBuffer("key", function(error, result) { + context.getBuffer('key', function(error, result) { expect(error).not.to.exist; expect(Buffer.isBuffer(result)).to.be.true; expect(result).to.deep.equal(buf); @@ -90,17 +90,17 @@ module.exports = function createProviderTestsFor(providerName, testProvider) { }); }); - it("should allow zero-length Buffers with putBuffer() and getBuffer()", function(done) { + it('should allow zero-length Buffers with putBuffer() and getBuffer()', function(done) { provider.open(function(error, firstAccess) { if(error) throw error; var context = provider.getReadWriteContext(); // Zero-length Filer Buffer var buf = new Buffer(new ArrayBuffer(0)); - context.putBuffer("key", buf, function(error) { + context.putBuffer('key', buf, function(error) { if(error) throw error; - context.getBuffer("key", function(error, result) { + context.getBuffer('key', function(error, result) { expect(error).not.to.exist; expect(Buffer.isBuffer(result)).to.be.true; expect(result).to.deep.equal(buf); @@ -110,19 +110,19 @@ module.exports = function createProviderTestsFor(providerName, testProvider) { }); }); - it("should allow delete()", function(done) { + it('should allow delete()', function(done) { var provider = _provider.provider; provider.open(function(error, firstAccess) { if(error) throw error; var context = provider.getReadWriteContext(); - context.putObject("key", "value", function(error) { + context.putObject('key', 'value', function(error) { if(error) throw error; - context.delete("key", function(error) { + context.delete('key', function(error) { if(error) throw error; - context.getObject("key", function(error, result) { + context.getObject('key', function(error, result) { expect(error).not.to.exist; expect(result).not.to.exist; done(); @@ -132,25 +132,25 @@ module.exports = function createProviderTestsFor(providerName, testProvider) { }); }); - it("should allow clear()", function(done) { + it('should allow clear()', function(done) { provider.open(function(error, firstAccess) { if(error) throw error; var context = provider.getReadWriteContext(); - context.putObject("key1", "value1", function(error) { + context.putObject('key1', 'value1', function(error) { if(error) throw error; - context.putObject("key2", "value2", function(error) { + context.putObject('key2', 'value2', function(error) { if(error) throw error; context.clear(function(err) { if(error) throw error; - context.getObject("key1", function(error, result) { + context.getObject('key1', function(error, result) { if(error) throw error; expect(result).not.to.exist; - context.getObject("key2", function(error, result) { + context.getObject('key2', function(error, result) { if(error) throw error; expect(result).not.to.exist; done(); diff --git a/tests/spec/providers/providers.spec.js b/tests/spec/providers/providers.spec.js index d452f26..d8c45d6 100644 --- a/tests/spec/providers/providers.spec.js +++ b/tests/spec/providers/providers.spec.js @@ -1,28 +1,28 @@ var Filer = require('../../../src'); var expect = require('chai').expect; -describe("Filer.FileSystem.providers", function() { - it("is defined", function() { +describe('Filer.FileSystem.providers', function() { + it('is defined', function() { expect(Filer.FileSystem.providers).to.exist; }); - it("has IndexedDB constructor", function() { + it('has IndexedDB constructor', function() { expect(Filer.FileSystem.providers.IndexedDB).to.be.a('function'); }); - it("has WebSQL constructor", function() { + it('has WebSQL constructor', function() { expect(Filer.FileSystem.providers.WebSQL).to.be.a('function'); }); - it("has Memory constructor", function() { + it('has Memory constructor', function() { expect(Filer.FileSystem.providers.Memory).to.be.a('function'); }); - it("has a Default constructor", function() { + it('has a Default constructor', function() { expect(Filer.FileSystem.providers.Default).to.be.a('function'); }); - it("has Fallback constructor", function() { + it('has Fallback constructor', function() { expect(Filer.FileSystem.providers.Fallback).to.be.a('function'); }); }); diff --git a/tests/spec/shell/cat.spec.js b/tests/spec/shell/cat.spec.js index 4396c6f..333295f 100644 --- a/tests/spec/shell/cat.spec.js +++ b/tests/spec/shell/cat.spec.js @@ -16,7 +16,7 @@ describe('FileSystemShell.cat', function() { shell.cat(null, function(error, data) { expect(error).to.exist; - expect(error.code).to.equal("EINVAL"); + expect(error.code).to.equal('EINVAL'); expect(data).not.to.exist; done(); }); @@ -25,7 +25,7 @@ describe('FileSystemShell.cat', function() { it('should return the contents of a single file', function(done) { var fs = util.fs(); var shell = new fs.Shell(); - var contents = "file contents"; + var contents = 'file contents'; fs.writeFile('/file', contents, function(err) { if(err) throw err; @@ -41,7 +41,7 @@ describe('FileSystemShell.cat', function() { it('should return the contents of multiple files', function(done) { var fs = util.fs(); var shell = new fs.Shell(); - var contents = "file contents"; + var contents = 'file contents'; var contents2 = contents + '\n' + contents; fs.writeFile('/file', contents, function(err) { @@ -62,7 +62,7 @@ describe('FileSystemShell.cat', function() { it('should fail if any of multiple file paths is invalid', function(done) { var fs = util.fs(); var shell = new fs.Shell(); - var contents = "file contents"; + var contents = 'file contents'; var contents2 = contents + '\n' + contents; fs.writeFile('/file', contents, function(err) { @@ -73,7 +73,7 @@ describe('FileSystemShell.cat', function() { shell.cat(['/file', '/nofile'], function(err, data) { expect(err).to.exist; - expect(err.code).to.equal("ENOENT"); + expect(err.code).to.equal('ENOENT'); expect(data).not.to.exist; done(); }); diff --git a/tests/spec/shell/env.spec.js b/tests/spec/shell/env.spec.js index c4e16fa..22a5e4a 100644 --- a/tests/spec/shell/env.spec.js +++ b/tests/spec/shell/env.spec.js @@ -37,7 +37,7 @@ describe('FileSystemShell.env', function() { shell.cat(null, function(error, list) { expect(error).to.exist; - expect(error.code).to.equal("EINVAL"); + expect(error.code).to.equal('EINVAL'); expect(list).not.to.exist; done(); }); diff --git a/tests/spec/shell/exec.spec.js b/tests/spec/shell/exec.spec.js index 1044c9b..b9e8b4f 100644 --- a/tests/spec/shell/exec.spec.js +++ b/tests/spec/shell/exec.spec.js @@ -13,7 +13,7 @@ describe('FileSystemShell.exec', function() { it('should be able to execute a command .js file from the filesystem', function(done) { var fs = util.fs(); var shell = new fs.Shell(); - var cmdString = "fs.writeFile(args[0], args[1], callback);"; + var cmdString = 'fs.writeFile(args[0], args[1], callback);'; fs.writeFile('/cmd.js', cmdString, function(error) { if(error) throw error; diff --git a/tests/spec/shell/ls.spec.js b/tests/spec/shell/ls.spec.js index b453764..a789281 100644 --- a/tests/spec/shell/ls.spec.js +++ b/tests/spec/shell/ls.spec.js @@ -16,7 +16,7 @@ describe('FileSystemShell.ls', function() { shell.cat(null, function(error, list) { expect(error).to.exist; - expect(error.code).to.equal("EINVAL"); + expect(error.code).to.equal('EINVAL'); expect(list).not.to.exist; done(); }); @@ -25,8 +25,8 @@ describe('FileSystemShell.ls', function() { it('should return the contents of a simple dir', function(done) { var fs = util.fs(); var shell = new fs.Shell(); - var contents = "a"; - var contents2 = "bb"; + var contents = 'a'; + var contents2 = 'bb'; fs.writeFile('/file', contents, function(err) { if(err) throw err; @@ -63,7 +63,7 @@ describe('FileSystemShell.ls', function() { it('should return the shallow contents of a dir tree', function(done) { var fs = util.fs(); var shell = new fs.Shell(); - var contents = "a"; + var contents = 'a'; fs.mkdir('/dir', function(err) { if(err) throw err; @@ -119,7 +119,7 @@ describe('FileSystemShell.ls', function() { it('should return the deep contents of a dir tree', function(done) { var fs = util.fs(); var shell = new fs.Shell(); - var contents = "a"; + var contents = 'a'; fs.mkdir('/dir', function(err) { if(err) throw err; diff --git a/tests/spec/shell/rm.spec.js b/tests/spec/shell/rm.spec.js index 1e7d635..116d871 100644 --- a/tests/spec/shell/rm.spec.js +++ b/tests/spec/shell/rm.spec.js @@ -16,7 +16,7 @@ describe('FileSystemShell.rm', function() { shell.rm(null, function(error, list) { expect(error).to.exist; - expect(error.code).to.equal("EINVAL"); + expect(error.code).to.equal('EINVAL'); expect(list).not.to.exist; done(); }); @@ -25,7 +25,7 @@ describe('FileSystemShell.rm', function() { it('should remove a single file', function(done) { var fs = util.fs(); var shell = new fs.Shell(); - var contents = "a"; + var contents = 'a'; fs.writeFile('/file', contents, function(err) { if(err) throw err; @@ -106,7 +106,7 @@ describe('FileSystemShell.rm', function() { it('should work on a complex dir structure', function(done) { var fs = util.fs(); var shell = new fs.Shell(); - var contents = "a"; + var contents = 'a'; fs.mkdir('/dir', function(err) { if(err) throw err; diff --git a/tests/spec/time-flags.spec.js b/tests/spec/time-flags.spec.js index e5d856a..1bfe120 100644 --- a/tests/spec/time-flags.spec.js +++ b/tests/spec/time-flags.spec.js @@ -4,8 +4,8 @@ var expect = require('chai').expect; describe('node times (atime, mtime, ctime) with mount flags', function() { - var dirname = "/dir"; - var filename = "/dir/file"; + var dirname = '/dir'; + var filename = '/dir/file'; function memoryFS(flags, callback) { var name = util.uniqueName(); diff --git a/tests/spec/times.spec.js b/tests/spec/times.spec.js index df6178f..5b112fb 100644 --- a/tests/spec/times.spec.js +++ b/tests/spec/times.spec.js @@ -6,8 +6,8 @@ describe('node times (atime, mtime, ctime)', function() { beforeEach(util.setup); afterEach(util.cleanup); - var dirname = "/dir"; - var filename = "/dir/file"; + var dirname = '/dir'; + var filename = '/dir/file'; function createTree(callback) { var fs = util.fs(); @@ -287,7 +287,7 @@ describe('node times (atime, mtime, ctime)', function() { }); it('should update ctime, atime, mtime of parent dir when calling fs.mkdir()', function(done) { - var fs = util.fs(); + var fs = util.fs(); createTree(function() { stat('/', function(stats1) { From e5b6026b91f3ffadc712414b2c2696da94327a97 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Sun, 15 Jul 2018 13:28:04 -0400 Subject: [PATCH 03/39] Add docs for running eslint/lint scripts --- CONTRIBUTING.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1513829..3792c36 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,7 +17,8 @@ npm install You can now run the following `npm` scripts: -* `npm run lint` will run `eslint` on the `src` and `tests` directories. +* `npm run lint` or `npm run eslint` will run `eslint` on the `src` and `tests` directories. +* `npm run lint:fix` or `npm run eslint:fix` will run `eslint` with `--fix` on the `src` and `tests` directories, automatically fixing minor issues. * `npm run test:manual` will build the tests, and allow you to run them in a browser manually by loading http://localhost:1234. * `npm run karma-mocha` will build Filer and the tests, and finally run the tests in a headless Chrome browser. * `npm test` will run `lint` followed by `karma-chrome`, and is what we do on Travis. From 4a066064f4f3280f9248caf5c3accf1749ace147 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Thu, 26 Jul 2018 17:37:26 -0400 Subject: [PATCH 04/39] Fix lint issues in times.spec.js --- tests/spec/times.spec.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/spec/times.spec.js b/tests/spec/times.spec.js index 5b112fb..d25d86a 100644 --- a/tests/spec/times.spec.js +++ b/tests/spec/times.spec.js @@ -364,6 +364,7 @@ describe('node times (atime, mtime, ctime)', function() { stat('/myfile', function(stats1) { fs.write(fd, buffer, 0, buffer.length, 0, function(error, nbytes) { if(error) throw error; + expect(nbytes).to.equal(buffer.length); fs.close(fd, function(error) { if(error) throw error; @@ -391,6 +392,7 @@ describe('node times (atime, mtime, ctime)', function() { fs.write(fd, buffer, 0, buffer.length, 0, function(err, nbytes) { if(err) throw err; + expect(nbytes).to.equal(buffer.length); fs.close(fd, function(error) { if(error) throw error; @@ -402,6 +404,8 @@ describe('node times (atime, mtime, ctime)', function() { var buffer2 = new Filer.Buffer(buffer.length); buffer2.fill(0); fs.read(fd, buffer2, 0, buffer2.length, 0, function(err, nbytes) { + if(err) throw err; + expect(nbytes).to.equal(buffer2.length); fs.close(fd, function(error) { if(error) throw error; @@ -429,6 +433,7 @@ describe('node times (atime, mtime, ctime)', function() { stat(filename, function(stats1) { fs.readFile(filename, function(error, data) { if(error) throw error; + expect(data).to.exist; stat(filename, function(stats2) { expect(stats2.ctime).to.equal(stats1.ctime); @@ -531,6 +536,7 @@ describe('node times (atime, mtime, ctime)', function() { stat(filename, function(stats1) { fs.getxattr(filename, 'extra', function(error, value) { if(error) throw error; + expect(value).to.equal('data'); stat(filename, function(stats2) { expect(stats2.ctime).to.equal(stats1.ctime); @@ -557,6 +563,7 @@ describe('node times (atime, mtime, ctime)', function() { stat(filename, function(stats1) { fs.fgetxattr(fd, 'extra', function(error, value) { if(error) throw error; + expect(value).to.equal('data'); stat(filename, function(stats2) { expect(stats2.ctime).to.equal(stats1.ctime); From 8e900a3a888c6bc13be2d470e232057206016647 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Thu, 26 Jul 2018 17:39:19 -0400 Subject: [PATCH 05/39] Fix lint issues in time-flags.spec.js --- tests/spec/time-flags.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/spec/time-flags.spec.js b/tests/spec/time-flags.spec.js index 1bfe120..9dfa55a 100644 --- a/tests/spec/time-flags.spec.js +++ b/tests/spec/time-flags.spec.js @@ -9,7 +9,7 @@ describe('node times (atime, mtime, ctime) with mount flags', function() { function memoryFS(flags, callback) { var name = util.uniqueName(); - var fs = new Filer.FileSystem({ + return new Filer.FileSystem({ name: name, flags: flags || [], provider: new Filer.FileSystem.providers.Memory(name) From 51c81edb5be16689ef5ddd3104780b1bd09ffef7 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Thu, 26 Jul 2018 17:41:35 -0400 Subject: [PATCH 06/39] Fix lint issues in touch.spec.js --- tests/spec/shell/touch.spec.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/spec/shell/touch.spec.js b/tests/spec/shell/touch.spec.js index 665a8bf..5586060 100644 --- a/tests/spec/shell/touch.spec.js +++ b/tests/spec/shell/touch.spec.js @@ -41,6 +41,7 @@ describe('FileSystemShell.touch', function() { fs.stat('/newfile', function(error, stats) { expect(error).to.exist; + expect(stats).not.to.exist; done(); }); }); From a8c3fa85db3e963b52540922dca84b51d3542c12 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Thu, 26 Jul 2018 17:44:27 -0400 Subject: [PATCH 07/39] Fix lint issues in exec.spec.js --- tests/spec/shell/exec.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/spec/shell/exec.spec.js b/tests/spec/shell/exec.spec.js index b9e8b4f..a7df430 100644 --- a/tests/spec/shell/exec.spec.js +++ b/tests/spec/shell/exec.spec.js @@ -18,7 +18,7 @@ describe('FileSystemShell.exec', function() { fs.writeFile('/cmd.js', cmdString, function(error) { if(error) throw error; - shell.exec('/cmd.js', ['/test', 'hello world'], function(error, result) { + shell.exec('/cmd.js', ['/test', 'hello world'], function(error) { if(error) throw error; fs.readFile('/test', 'utf8', function(error, data) { From 3e1c3deb51780549967f029cf2bb5703da7135bc Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Thu, 26 Jul 2018 17:50:32 -0400 Subject: [PATCH 08/39] Fix lint issues in providers.base.js --- tests/spec/providers/providers.base.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/tests/spec/providers/providers.base.js b/tests/spec/providers/providers.base.js index 217eed7..91248ce 100644 --- a/tests/spec/providers/providers.base.js +++ b/tests/spec/providers/providers.base.js @@ -1,3 +1,5 @@ +/* eslint no-console: 0 */ + var Buffer = require('../../../src').Buffer; var util = require('../../lib/test-utils.js'); var expect = require('chai').expect; @@ -43,7 +45,7 @@ module.exports = function createProviderTestsFor(providerName, testProvider) { }); it('should allow putObject() and getObject()', function(done) { - provider.open(function(error, firstAccess) { + provider.open(function(error) { if(error) throw error; var context = provider.getReadWriteContext(); @@ -71,7 +73,7 @@ module.exports = function createProviderTestsFor(providerName, testProvider) { }); it('should allow putBuffer() and getBuffer()', function(done) { - provider.open(function(error, firstAccess) { + provider.open(function(error) { if(error) throw error; var context = provider.getReadWriteContext(); @@ -91,7 +93,7 @@ module.exports = function createProviderTestsFor(providerName, testProvider) { }); it('should allow zero-length Buffers with putBuffer() and getBuffer()', function(done) { - provider.open(function(error, firstAccess) { + provider.open(function(error) { if(error) throw error; var context = provider.getReadWriteContext(); @@ -112,7 +114,7 @@ module.exports = function createProviderTestsFor(providerName, testProvider) { it('should allow delete()', function(done) { var provider = _provider.provider; - provider.open(function(error, firstAccess) { + provider.open(function(error) { if(error) throw error; var context = provider.getReadWriteContext(); @@ -133,7 +135,7 @@ module.exports = function createProviderTestsFor(providerName, testProvider) { }); it('should allow clear()', function(done) { - provider.open(function(error, firstAccess) { + provider.open(function(error) { if(error) throw error; var context = provider.getReadWriteContext(); @@ -143,7 +145,7 @@ module.exports = function createProviderTestsFor(providerName, testProvider) { context.putObject('key2', 'value2', function(error) { if(error) throw error; - context.clear(function(err) { + context.clear(function(error) { if(error) throw error; context.getObject('key1', function(error, result) { From 49931722cc1580efbc6f477c14be477ae0c2f38e Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Thu, 26 Jul 2018 17:53:02 -0400 Subject: [PATCH 09/39] Fix lint issues in path-resolution.spec.js --- tests/spec/path-resolution.spec.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/spec/path-resolution.spec.js b/tests/spec/path-resolution.spec.js index b53f932..f44f040 100644 --- a/tests/spec/path-resolution.spec.js +++ b/tests/spec/path-resolution.spec.js @@ -32,6 +32,8 @@ describe('path resolution', function() { var fs = util.fs(); fs.mkdir('/mydir', function(error) { + if(error) throw error; + fs.symlink('/mydir', '/mydirectorylink', function(error) { if(error) throw error; @@ -148,6 +150,7 @@ describe('path resolution', function() { if(error) throw error; fs.stat('/myfile0', function(error, result) { if(error) throw error; + expect(result).to.exist; createSymlinkChain(1, function() { fs.stat('/myfile11', function(error, result) { @@ -201,6 +204,7 @@ describe('path resolution', function() { if(error) throw error; fs.stat('/myfile', function(error, result) { if(error) throw error; + expect(result).to.exist; fs.open('/myfile2', 'w', function(error, result) { if(error) throw error; From ab87c7f14a126a0cbffa97ba38c5b7d4e7db2778 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Thu, 26 Jul 2018 17:54:26 -0400 Subject: [PATCH 10/39] Fix lint issues in tests-fs-watch.js --- tests/spec/node-js/simple/test-fs-watch.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/spec/node-js/simple/test-fs-watch.js b/tests/spec/node-js/simple/test-fs-watch.js index 6db48be..c7d7fef 100644 --- a/tests/spec/node-js/simple/test-fs-watch.js +++ b/tests/spec/node-js/simple/test-fs-watch.js @@ -27,6 +27,7 @@ describe('node.js tests: https://github.com/joyent/node/blob/master/test/simple/ watcher.close(); fs.writeFile(filenameOne, 'hello again', function(error) { + if(error) throw error; expect(changes).to.equal(1); done(); }); @@ -37,7 +38,6 @@ describe('node.js tests: https://github.com/joyent/node/blob/master/test/simple/ it('should get change event for writeFile() using fs.watch() only', function(done) { var fs = util.fs(); - var changes = 0; var watcher = fs.watch(filenameTwo, function(event, filename) { expect(event).to.equal('change'); From a93ae13c992782eb70442f94f841e3fafa57161e Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Thu, 26 Jul 2018 17:56:54 -0400 Subject: [PATCH 11/39] Fix lint issues in fs.xattr.spec.js --- tests/spec/fs.xattr.spec.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/tests/spec/fs.xattr.spec.js b/tests/spec/fs.xattr.spec.js index c29a4c3..7fb8161 100644 --- a/tests/spec/fs.xattr.spec.js +++ b/tests/spec/fs.xattr.spec.js @@ -97,6 +97,7 @@ describe('fs.xattr', function() { fs.getxattr('/testfile', '', function(error, value) { expect(error).to.exist; expect(error.code).to.equal('EINVAL'); + expect(value).not.to.exist; done(); }); }); @@ -111,6 +112,7 @@ describe('fs.xattr', function() { fs.getxattr('/testfile', 89, function(error, value) { expect(error).to.exist; expect(error.code).to.equal('EINVAL'); + expect(value).not.to.exist; done(); }); }); @@ -125,6 +127,7 @@ describe('fs.xattr', function() { fs.getxattr('/testfile', 'test', function(error, value) { expect(error).to.exist; expect(error.code).to.equal('ENOATTR'); + expect(value).not.to.exist; done(); }); }); @@ -132,10 +135,9 @@ describe('fs.xattr', function() { it('should error when file descriptor is invalid', function(done) { var fs = util.fs(); - var completeSet, completeGet, completeRemove; - var _value; - - completeSet = completeGet = completeRemove = false; + var completeSet = false; + var completeGet = false; + var completeRemove = false; function maybeDone() { if(completeSet && completeGet && completeRemove) { @@ -161,6 +163,7 @@ describe('fs.xattr', function() { fs.fremovexattr(1, 'test', function(error, value) { expect(error).to.exist; expect(error.code).to.equal('EBADF'); + expect(value).not.to.exist; completeRemove = true; maybeDone(); }); From ee8e2a665a828f7ce37c362b0396f8163240d044 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Thu, 26 Jul 2018 18:01:07 -0400 Subject: [PATCH 12/39] Fix lint issues in fs.writeFile-readFile.spec.js --- tests/spec/fs.writeFile-readFile.spec.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/spec/fs.writeFile-readFile.spec.js b/tests/spec/fs.writeFile-readFile.spec.js index 7f2d62c..589b273 100644 --- a/tests/spec/fs.writeFile-readFile.spec.js +++ b/tests/spec/fs.writeFile-readFile.spec.js @@ -13,7 +13,6 @@ describe('fs.writeFile, fs.readFile', function() { it('should error when path is wrong to readFile', function(done) { var fs = util.fs(); - var contents = 'This is a file.'; fs.readFile('/no-such-file', 'utf8', function(error, data) { expect(error).to.exist; @@ -67,8 +66,7 @@ describe('fs.writeFile, fs.readFile', function() { it('should write, read a binary file', function(done) { var fs = util.fs(); - // String and utf8 binary encoded versions of the same thing: - var contents = 'This is a file.'; + // String and utf8 binary encoded versions of the same thing: 'This is a file.' var binary = new Buffer([84, 104, 105, 115, 32, 105, 115, 32, 97, 32, 102, 105, 108, 101, 46]); fs.writeFile('/myfile', binary, function(error) { From 94e6a98cb86b1e081dc6993050ce6fa2b665aa0b Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Thu, 26 Jul 2018 18:01:21 -0400 Subject: [PATCH 13/39] Fix lint issues in fs.utimes.spec.js --- tests/spec/fs.utimes.spec.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/spec/fs.utimes.spec.js b/tests/spec/fs.utimes.spec.js index d663050..1f11113 100644 --- a/tests/spec/fs.utimes.spec.js +++ b/tests/spec/fs.utimes.spec.js @@ -154,8 +154,6 @@ describe('fs.utimes', function() { it('should update atime and mtime using current time if arguments are null', function(done) { var fs = util.fs(); - var atimeEst; - var mtimeEst; fs.writeFile('/myfile', '', function (error) { if (error) throw error; From bb8743eda1aeda24a07fd288523397ee40a7fd36 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Thu, 26 Jul 2018 18:02:16 -0400 Subject: [PATCH 14/39] Fix lint issues in fs.unlink.spec.js --- tests/spec/fs.unlink.spec.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/spec/fs.unlink.spec.js b/tests/spec/fs.unlink.spec.js index a6d71aa..8ece478 100644 --- a/tests/spec/fs.unlink.spec.js +++ b/tests/spec/fs.unlink.spec.js @@ -34,6 +34,7 @@ describe('fs.unlink', function() { fs.stat('/myfile', function(error, result) { expect(error).to.exist; + expect(result).not.to.exist; complete1 = true; maybeDone(); }); @@ -65,6 +66,7 @@ describe('fs.unlink', function() { fs.lstat('/myFileLink', function (error, result) { expect(error).to.exist; + expect(result).not.to.exist; fs.lstat('/myotherfile', function (error, result) { if (error) throw error; From 7258a2913e1bee6e2a0cb42e0a27d17e16a6f272 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Thu, 26 Jul 2018 18:07:50 -0400 Subject: [PATCH 15/39] Fix lint issues in fs.truncate.spec.js --- tests/spec/fs.truncate.spec.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/spec/fs.truncate.spec.js b/tests/spec/fs.truncate.spec.js index 2999779..4827ffe 100644 --- a/tests/spec/fs.truncate.spec.js +++ b/tests/spec/fs.truncate.spec.js @@ -46,6 +46,7 @@ describe('fs.truncate', function() { var fd = result; fs.write(fd, buffer, 0, buffer.length, 0, function(error, result) { if(error) throw error; + expect(result).to.equal(buffer.length); fs.close(fd, function(error) { if(error) throw error; @@ -76,6 +77,7 @@ describe('fs.truncate', function() { var fd = result; fs.write(fd, buffer, 0, buffer.length, 0, function(error, result) { if(error) throw error; + expect(result).to.equal(buffer.length); fs.close(fd, function(error) { if(error) throw error; @@ -105,6 +107,7 @@ describe('fs.truncate', function() { var fd = result; fs.write(fd, buffer, 0, buffer.length, 0, function(error, result) { if(error) throw error; + expect(result).to.equal(buffer.length); fs.close(fd, function(error) { if(error) throw error; @@ -134,6 +137,7 @@ describe('fs.truncate', function() { var fd = result; fs.write(fd, buffer, 0, buffer.length, 0, function(error, result) { if(error) throw error; + expect(result).to.equal(buffer.length); fs.ftruncate(fd, 0, function(error) { expect(error).not.to.exist; @@ -159,6 +163,7 @@ describe('fs.truncate', function() { var fd = result; fs.write(fd, buffer, 0, buffer.length, 0, function(error, result) { if(error) throw error; + expect(result).to.equal(buffer.length); fs.close(fd, function(error) { if(error) throw error; From 1c7b40c895ddd9e4aa4fa393515238f9ab6be6fa Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Thu, 26 Jul 2018 18:17:05 -0400 Subject: [PATCH 16/39] Fix lint issues in fs.stats.spec.js --- tests/spec/fs.stats.spec.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/spec/fs.stats.spec.js b/tests/spec/fs.stats.spec.js index eb53241..6552cea 100644 --- a/tests/spec/fs.stats.spec.js +++ b/tests/spec/fs.stats.spec.js @@ -45,6 +45,8 @@ describe('fs.stats', function() { if(error) throw error; fs.close(fd, function(error, stats) { if(error) throw error; + expect(stats).to.exist; + fs.symlink('/myfile', '/myfilelink', function(error) { if(error) throw error; fs.lstat('/myfilelink', function(error, stats) { @@ -97,7 +99,7 @@ describe('fs.stats', function() { fs.open('/myfile', 'w+', function(error, fd) { if(error) throw error; - fs.close(fd, function(error, stats) { + fs.close(fd, function(error) { if(error) throw error; fs.symlink('/myfile', '/myfilelink', function(error) { if(error) throw error; @@ -197,7 +199,7 @@ describe('fs.stats', function() { fs.open('/myfile', 'w+', function(error, fd) { if(error) throw error; - fs.close(fd, function(error, stats) { + fs.close(fd, function(error) { if(error) throw error; fs.symlink('/myfile', '/myfilelink', function(error) { if(error) throw error; From cafff52c3af445b399566fa6b06741863061bd9f Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 10:34:21 -0400 Subject: [PATCH 17/39] Fix lint issues in fs.rename.spec.js --- tests/spec/fs.rename.spec.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/spec/fs.rename.spec.js b/tests/spec/fs.rename.spec.js index 27453dc..51959c2 100644 --- a/tests/spec/fs.rename.spec.js +++ b/tests/spec/fs.rename.spec.js @@ -32,6 +32,7 @@ describe('fs.rename', function() { fs.stat('/myfile', function(error, result) { expect(error).to.exist; + expect(result).not.to.exist; complete1 = true; maybeDone(); }); From 054094c852c0f19dc095e181481c4c4e6517a8b8 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 10:37:45 -0400 Subject: [PATCH 18/39] Fix lint issues in fs.read.spec.js, fix test failure in fs.stats.spec.js --- tests/spec/fs.read.spec.js | 4 +++- tests/spec/fs.stats.spec.js | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/tests/spec/fs.read.spec.js b/tests/spec/fs.read.spec.js index 054e03b..1a57421 100644 --- a/tests/spec/fs.read.spec.js +++ b/tests/spec/fs.read.spec.js @@ -21,6 +21,7 @@ describe('fs.read', function() { if(error) throw error; fs.write(fd, wbuffer, 0, wbuffer.length, 0, function(error, result) { if(error) throw error; + expect(result).to.equal(wbuffer.length); fs.read(fd, rbuffer, 0, rbuffer.length, 0, function(error, result) { expect(error).not.to.exist; @@ -44,6 +45,7 @@ describe('fs.read', function() { fs.write(fd, wbuffer, 0, wbuffer.length, 0, function(error, result) { if(error) throw error; + expect(result).to.equal(wbuffer.length); fs.read(fd, rbuffer, 0, rbuffer.length / 2, undefined, function(error, result) { if(error) throw error; @@ -70,7 +72,7 @@ describe('fs.read', function() { buf2.fill(0); fs.mkdir('/mydir', function(error) { - if(error) throw err; + if(error) throw error; fs.open('/mydir', 'r', function(error, fd) { if(error) throw error; diff --git a/tests/spec/fs.stats.spec.js b/tests/spec/fs.stats.spec.js index 6552cea..1752923 100644 --- a/tests/spec/fs.stats.spec.js +++ b/tests/spec/fs.stats.spec.js @@ -43,9 +43,9 @@ describe('fs.stats', function() { fs.open('/myfile', 'w+', function(error, fd) { if(error) throw error; - fs.close(fd, function(error, stats) { + + fs.close(fd, function(error) { if(error) throw error; - expect(stats).to.exist; fs.symlink('/myfile', '/myfilelink', function(error) { if(error) throw error; From 86e57d60dba40cc4325f7c6c06c22af9a5665716 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 10:38:44 -0400 Subject: [PATCH 19/39] Fix lint issues in fs.open.spec.js --- tests/spec/fs.open.spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/spec/fs.open.spec.js b/tests/spec/fs.open.spec.js index 5ee7150..b995755 100644 --- a/tests/spec/fs.open.spec.js +++ b/tests/spec/fs.open.spec.js @@ -83,7 +83,6 @@ describe('fs.open', function() { it('should return the argument value of the file descriptor index matching the value set by the first useable file descriptor constant', function(done) { var fs = util.fs(); var firstFD = constants.FIRST_DESCRIPTOR; - var fd1; fs.open('/file1', 'w+', function(error, fd) { if(error) throw error; @@ -95,8 +94,9 @@ describe('fs.open', function() { it('should create a new file when flagged for write', function(done) { var fs = util.fs(); - fs.open('/myfile', 'w', function(error, result) { + fs.open('/myfile', 'w', function(error) { if(error) throw error; + fs.stat('/myfile', function(error, result) { expect(error).not.to.exist; expect(result).to.exist; From a8e373e4b969296c9461318097ab9ac4d90f4915 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 10:39:34 -0400 Subject: [PATCH 20/39] Fix lint issues in fs.mknod.spec.js --- tests/spec/fs.mknod.spec.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tests/spec/fs.mknod.spec.js b/tests/spec/fs.mknod.spec.js index 68ddd4c..58391e3 100644 --- a/tests/spec/fs.mknod.spec.js +++ b/tests/spec/fs.mknod.spec.js @@ -32,9 +32,10 @@ describe('fs.mknod', function() { it('should return an error if the parent node is not a directory', function(done) { var fs = util.fs(); - fs.mknod('/file', 'FILE' , function(error, result) { + fs.mknod('/file', 'FILE' , function(error) { if(error) throw error; - fs.mknod('/file/myfile', 'FILE', function(error, result) { + + fs.mknod('/file/myfile', 'FILE', function(error) { expect(error.code).to.equal('ENOTDIR'); done(); }); @@ -68,8 +69,9 @@ describe('fs.mknod', function() { it('should make a new file', function(done) { var fs = util.fs(); - fs.mknod('/file', 'FILE' , function(error, result) { + fs.mknod('/file', 'FILE' , function(error) { if(error) throw error; + fs.stat('/file', function(error, result) { expect(error).not.to.exist; expect(result.type).to.equal('FILE'); From 980d5d09170ada58fba63e728d906f77f56a5f40 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 10:43:51 -0400 Subject: [PATCH 21/39] Fix lint issues in fs.lseek.spec.js --- tests/spec/fs.lseek.spec.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/spec/fs.lseek.spec.js b/tests/spec/fs.lseek.spec.js index c095ddd..84d5c1c 100644 --- a/tests/spec/fs.lseek.spec.js +++ b/tests/spec/fs.lseek.spec.js @@ -28,9 +28,11 @@ describe('fs.lseek', function() { fs.stat('/myfile', function (error, result) { expect(error).not.to.exist; + expect(result).to.exist; fs.lstat('/myFileLink', function (error, result) { expect(error).to.exist; + expect(result).not.to.exist; fs.stat('/myOtherFileLink', function (error, result) { if (error) throw error; @@ -57,6 +59,7 @@ describe('fs.lseek', function() { fs.write(fd, buffer, 0, buffer.length, undefined, function(error, result) { if(error) throw error; + expect(result).to.equal(buffer.length); fs.lseek(fd, offset, 'SET', function(error, result) { expect(error).not.to.exist; @@ -64,9 +67,11 @@ describe('fs.lseek', function() { fs.write(fd, buffer, 0, buffer.length, undefined, function(error, result) { if(error) throw error; + expect(result).to.equal(buffer.length); fs.read(fd, result_buffer, 0, result_buffer.length, 0, function(error, result) { if(error) throw error; + expect(result).to.equal(result_buffer.length); fs.stat('/myfile', function(error, result) { if(error) throw error; @@ -95,6 +100,7 @@ describe('fs.lseek', function() { fs.write(fd, buffer, 0, buffer.length, undefined, function(error, result) { if(error) throw error; + expect(result).to.equal(buffer.length); fs.lseek(fd, offset, 'CUR', function(error, result) { expect(error).not.to.exist; @@ -102,9 +108,11 @@ describe('fs.lseek', function() { fs.write(fd, buffer, 0, buffer.length, undefined, function(error, result) { if(error) throw error; + expect(result).to.equal(buffer.length); fs.read(fd, result_buffer, 0, result_buffer.length, 0, function(error, result) { if(error) throw error; + expect(result).to.equal(result_buffer.length); fs.stat('/myfile', function(error, result) { if(error) throw error; @@ -133,6 +141,7 @@ describe('fs.lseek', function() { var fd1 = result; fs.write(fd1, buffer, 0, buffer.length, undefined, function(error, result) { if(error) throw error; + expect(result).to.equal(buffer.length); fs.open('/myfile', 'w+', function(error, result) { if(error) throw error; @@ -144,6 +153,7 @@ describe('fs.lseek', function() { fs.write(fd2, buffer, 0, buffer.length, undefined, function(error, result) { if(error) throw error; + expect(result).to.equal(buffer.length); fs.stat('/myfile', function(error, result) { if(error) throw error; @@ -153,6 +163,8 @@ describe('fs.lseek', function() { result_buffer.fill(0); fs.read(fd2, result_buffer, 0, result_buffer.length, 0, function(error, result) { if(error) throw error; + expect(result).to.equal(result_buffer.length); + var expected = new Filer.Buffer([1, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8]); expect(result_buffer).to.deep.equal(expected); done(); From 9e08d96c96800d5bfa2a5b609da0c889e1356b70 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 10:44:42 -0400 Subject: [PATCH 22/39] Fix lint issues in fs.lstat.spec.js --- tests/spec/fs.lstat.spec.js | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/spec/fs.lstat.spec.js b/tests/spec/fs.lstat.spec.js index 72d826b..0fa650f 100644 --- a/tests/spec/fs.lstat.spec.js +++ b/tests/spec/fs.lstat.spec.js @@ -12,7 +12,6 @@ describe('fs.lstat', function() { it('should return an error if path does not exist', function(done) { var fs = util.fs(); - var _error, _result; fs.lstat('/tmp', function(error, result) { expect(error).to.exist; From 1a738dd2bb8ca68562e98f6c8291c0f38b441510 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 11:00:48 -0400 Subject: [PATCH 23/39] Fix lint issues in fs.close.spec.js, fs.link.spec.js --- tests/spec/fs.close.spec.js | 3 +++ tests/spec/fs.link.spec.js | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/tests/spec/fs.close.spec.js b/tests/spec/fs.close.spec.js index aa273ed..b050669 100644 --- a/tests/spec/fs.close.spec.js +++ b/tests/spec/fs.close.spec.js @@ -20,8 +20,11 @@ describe('fs.close', function() { var fd = result; fs.close(fd, function(error) { + if(error) throw error; + fs.read(fd, buffer, 0, buffer.length, undefined, function(error, result) { expect(error).to.exist; + expect(result).not.to.exist; done(); }); }); diff --git a/tests/spec/fs.link.spec.js b/tests/spec/fs.link.spec.js index a9499c4..0466ae4 100644 --- a/tests/spec/fs.link.spec.js +++ b/tests/spec/fs.link.spec.js @@ -70,13 +70,17 @@ describe('fs.link', function() { fs.stat('/', function (error, result) { if (error) throw error; - var _oldstats = result; + expect(result).to.exist; + fs.symlink('/', '/myfileLink', function (error) { if (error) throw error; + fs.link('/myfileLink', '/myotherfile', function (error) { if (error) throw error; + fs.lstat('/myfileLink', function (error, result) { if (error) throw error; + var _linkstats = result; fs.lstat('/myotherfile', function (error, result) { expect(error).not.to.exist; From cbcddee3be2daf3a7968185452ff15c1d1391206 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 11:01:26 -0400 Subject: [PATCH 24/39] Fix lint issues in fs.chown.spec.js --- tests/spec/fs.chown.spec.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/spec/fs.chown.spec.js b/tests/spec/fs.chown.spec.js index 4dbe896..d6de220 100644 --- a/tests/spec/fs.chown.spec.js +++ b/tests/spec/fs.chown.spec.js @@ -1,4 +1,3 @@ -var Filer = require('../../src'); var util = require('../lib/test-utils.js'); var expect = require('chai').expect; @@ -12,7 +11,7 @@ describe('fs.chown, fs.fchown', function() { expect(typeof fs.fchown).to.equal('function'); }); - it('should automatically set a file\s uid and gid to 0 (i.e., root)', function(done) { + it('should automatically set a file\'s uid and gid to 0 (i.e., root)', function(done) { var fs = util.fs(); fs.open('/file', 'w', function(err, fd) { From f89b616fdc1cedd5c5bc95786dd0e212db237db3 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 11:01:47 -0400 Subject: [PATCH 25/39] Fix issues in fs.chmod.spec.js --- tests/spec/fs.chmod.spec.js | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/spec/fs.chmod.spec.js b/tests/spec/fs.chmod.spec.js index fd66d3d..800f18f 100644 --- a/tests/spec/fs.chmod.spec.js +++ b/tests/spec/fs.chmod.spec.js @@ -1,4 +1,3 @@ -var Filer = require('../../src'); var util = require('../lib/test-utils.js'); var expect = require('chai').expect; From 0e00af661a5b6a110b31cd4f5329b23e74269689 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 11:02:42 -0400 Subject: [PATCH 26/39] Fix lint issues in fs.appendFile.spec.js --- tests/spec/fs.appendFile.spec.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/spec/fs.appendFile.spec.js b/tests/spec/fs.appendFile.spec.js index 3949a4e..7fb3aa9 100644 --- a/tests/spec/fs.appendFile.spec.js +++ b/tests/spec/fs.appendFile.spec.js @@ -69,10 +69,8 @@ describe('fs.appendFile', function() { it('should append a binary file', function(done) { var fs = util.fs(); - // String and utf8 binary encoded versions of the same thing: - var contents = 'This is a file.'; + // String and utf8 binary encoded versions of the same thing: 'This is a file.' var binary = new Buffer([84, 104, 105, 115, 32, 105, 115, 32, 97, 32, 102, 105, 108, 101, 46]); - var more = ' Appended.'; var binary2 = new Buffer([32, 65, 112, 112, 101, 110, 100, 101, 100, 46]); var binary3 = new Buffer([84, 104, 105, 115, 32, 105, 115, 32, 97, 32, 102, 105, 108, 101, 46, 32, 65, 112, 112, 101, 110, 100, 101, 100, 46]); From d41885e9d09ac9302be4a744f503b68fc1b57dd9 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 11:03:43 -0400 Subject: [PATCH 27/39] Fix lint issue in tests/lib/indexeddb.js --- tests/lib/indexeddb.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/lib/indexeddb.js b/tests/lib/indexeddb.js index 4dbc505..0fce63b 100644 --- a/tests/lib/indexeddb.js +++ b/tests/lib/indexeddb.js @@ -40,6 +40,7 @@ function IndexedDBTestProvider(name) { request.onsuccess = finished; request.onerror = finished; } catch(e) { + /* eslint no-console:0 */ console.log('Failed to delete test database', e); finished(); } From 454d5bc801e619f909bb31d36e2aadf4412c862e Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 11:07:17 -0400 Subject: [PATCH 28/39] Fix lint issues in ls-depth-bug.js --- tests/bugs/ls-depth-bug.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/bugs/ls-depth-bug.js b/tests/bugs/ls-depth-bug.js index fae400e..073e925 100644 --- a/tests/bugs/ls-depth-bug.js +++ b/tests/bugs/ls-depth-bug.js @@ -46,7 +46,7 @@ describe('sh.ls and deep directory trees', function() { } async.eachSeries(paths, writeFile, function(err) { - if(err) { console.log('error', err); throw err; } + if(err) throw err; sh.ls('/', {recursive: true}, function(err, listing) { expect(err).not.to.exist; From a31044cc8d7da710672f9a8a0a68f4d5929ebacc Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 11:08:40 -0400 Subject: [PATCH 29/39] Fix lint issues in issue267.js --- tests/bugs/issue267.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/bugs/issue267.js b/tests/bugs/issue267.js index e13f256..5075b78 100644 --- a/tests/bugs/issue267.js +++ b/tests/bugs/issue267.js @@ -14,6 +14,7 @@ describe('fs.readdir on non-dir paths, issue 267', function() { fs.readdir('/myfile.txt', function(err, contents) { expect(err).to.exist; expect(err.code).to.equal('ENOTDIR'); + expect(contents).not.to.exist; done(); }); }); From 0980ec4608abef672fbc075b603d81ad839242db Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 11:09:45 -0400 Subject: [PATCH 30/39] Fix lint issues in issue258.js --- tests/bugs/issue258.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/bugs/issue258.js b/tests/bugs/issue258.js index e231a6a..84ce02b 100644 --- a/tests/bugs/issue258.js +++ b/tests/bugs/issue258.js @@ -52,7 +52,7 @@ describe('Queued operations should error when fs is in error state, issue 258', it('should get EFILESYSTEMERROR errors on callbacks to queued operations on provider error', function(done) { var errCount = 0; - var fs = new Filer.FileSystem({provider: provider}, function(err) { + var fs = new Filer.FileSystem({provider: provider}, function() { // Do nothing }); From ed11b01234c2cefb9be74a6d39f5520a634613f1 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 11:12:06 -0400 Subject: [PATCH 31/39] Fix lint issues in shell.js --- src/shell/shell.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/shell/shell.js b/src/shell/shell.js index 89a895c..97de86b 100644 --- a/src/shell/shell.js +++ b/src/shell/shell.js @@ -2,7 +2,6 @@ var Path = require('../path.js'); var Errors = require('../errors.js'); var Environment = require('./environment.js'); var async = require('../../lib/async.js'); -var Encoding = require('../encoding.js'); var minimatch = require('minimatch'); function Shell(fs, options) { @@ -131,7 +130,7 @@ Shell.prototype.touch = function(path, options, callback) { fs.utimes(path, atime, mtime, callback); } - fs.stat(path, function(error, stats) { + fs.stat(path, function(error) { if(error) { if(options.updateOnly === true) { callback(); @@ -348,7 +347,7 @@ Shell.prototype.tempDir = function(callback) { // Try and create it, and it will either work or fail // but either way it's now there. - fs.mkdir(tmp, function(err) { + fs.mkdir(tmp, function() { callback(null, tmp); }); }; From bcf4d9834a711f540f2919962daf97197c239ec0 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 11:12:25 -0400 Subject: [PATCH 32/39] Don't build source map for karma test bundle --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 793b9c7..06d64af 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "test": "npm run travis", "prebuild": "parcel build --global Filer src/index.js --no-minify --out-file filer.js", "build": "parcel build --global Filer src/index.js --out-file filer.min.js --detailed-report", - "prekarma-mocha": "parcel build tests/index.js --out-dir tests/dist", + "prekarma-mocha": "parcel build tests/index.js --no-source-maps --out-dir tests/dist", "karma-mocha": "karma start karma.conf.js" }, "repository": { From b92151cdc5992edc82e5e206b8c4c20abf032065 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 11:13:40 -0400 Subject: [PATCH 33/39] Fix lint issues in websql.js provider --- src/providers/websql.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/providers/websql.js b/src/providers/websql.js index 77d28f3..7219a0a 100644 --- a/src/providers/websql.js +++ b/src/providers/websql.js @@ -26,7 +26,7 @@ WebSQLContext.prototype.clear = function(callback) { function onError(transaction, error) { callback(error); } - function onSuccess(transaction, result) { + function onSuccess() { callback(null); } this.getTransaction(function(transaction) { @@ -83,7 +83,7 @@ WebSQLContext.prototype.getBuffer = function(key, callback) { }; function _put(getTransaction, key, value, callback) { - function onSuccess(transaction, result) { + function onSuccess() { callback(null); } function onError(transaction, error) { @@ -104,7 +104,7 @@ WebSQLContext.prototype.putBuffer = function(key, uint8BackedBuffer, callback) { }; WebSQLContext.prototype.delete = function(key, callback) { - function onSuccess(transaction, result) { + function onSuccess() { callback(null); } function onError(transaction, error) { @@ -145,7 +145,7 @@ WebSQL.prototype.open = function(callback) { } callback(error); } - function onSuccess(transaction, result) { + function onSuccess() { that.db = db; callback(); } From 8d553b78e053f388405426d64ad332fd79b57af5 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 11:14:08 -0400 Subject: [PATCH 34/39] Fix lint issues in indexeddb.js provider --- src/providers/indexeddb.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/providers/indexeddb.js b/src/providers/indexeddb.js index 83363ae..b0fb412 100644 --- a/src/providers/indexeddb.js +++ b/src/providers/indexeddb.js @@ -2,7 +2,6 @@ var FILE_SYSTEM_NAME = require('../constants.js').FILE_SYSTEM_NAME; var FILE_STORE_NAME = require('../constants.js').FILE_STORE_NAME; var IDB_RW = require('../constants.js').IDB_RW; var IDB_RO = require('../constants.js').IDB_RO; -var Errors = require('../errors.js'); var FilerBuffer = require('../buffer.js'); var indexedDB = global.indexedDB || From 3a44c1756afa7040c0b07c67aa0652c35e6c55f2 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 11:16:30 -0400 Subject: [PATCH 35/39] Fix lint issues in src/path.js --- src/path.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/path.js b/src/path.js index d845b52..ff4dff4 100644 --- a/src/path.js +++ b/src/path.js @@ -54,7 +54,7 @@ function normalizeArray(parts, allowAboveRoot) { // Split a filename into [root, dir, basename, ext], unix version // 'root' is just a slash, or nothing. var splitPathRe = - /^(\/?)([\s\S]+\/(?!$)|\/)?((?:\.{1,2}$|[\s\S]+?)?(\.[^.\/]*)?)$/; + /^(\/?)([\s\S]+\/(?!$)|\/)?((?:\.{1,2}$|[\s\S]+?)?(\.[^./]*)?)$/; var splitPath = function(filename) { var result = splitPathRe.exec(filename); return [result[1] || '', result[2] || '', result[3] || '', result[4] || '']; @@ -91,8 +91,7 @@ function resolve() { // path.normalize(path) function normalize(path) { - var isAbsolute = path.charAt(0) === '/', - trailingSlash = path.substr(-1) === '/'; + var isAbsolute = path.charAt(0) === '/'; // Normalize the path path = normalizeArray(path.split('/').filter(function(p) { @@ -113,7 +112,7 @@ function normalize(path) { function join() { var paths = Array.prototype.slice.call(arguments, 0); - return normalize(paths.filter(function(p, index) { + return normalize(paths.filter(function(p) { return p && typeof p === 'string'; }).join('/')); } @@ -151,7 +150,7 @@ function relative(from, to) { } var outputParts = []; - for (var i = samePartsLength; i < fromParts.length; i++) { + for (i = samePartsLength; i < fromParts.length; i++) { outputParts.push('..'); } From dc8fa4cb96cb1507a33dfdb372584ea21fe68d17 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 11:17:03 -0400 Subject: [PATCH 36/39] Fix lint issues in node.js --- src/node.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/node.js b/src/node.js index 3ed381b..67e8835 100644 --- a/src/node.js +++ b/src/node.js @@ -1,9 +1,6 @@ var NODE_TYPE_FILE = require('./constants.js').NODE_TYPE_FILE; var NODE_TYPE_DIRECTORY = require('./constants.js').NODE_TYPE_DIRECTORY; var NODE_TYPE_SYMBOLIC_LINK = require('./constants.js').NODE_TYPE_SYMBOLIC_LINK; -var NODE_TYPE_META = require('./constants.js').NODE_TYPE_META; - -var ROOT_DIRECTORY_NAME = require('./constants.js').ROOT_DIRECTORY_NAME; var S_IFREG = require('./constants.js').S_IFREG; var S_IFDIR = require('./constants.js').S_IFDIR; From 0da0e6019450afc7120c2ebd936f129845864de7 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 11:17:45 -0400 Subject: [PATCH 37/39] Fix lint issues in interface.js --- src/filesystem/interface.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/filesystem/interface.js b/src/filesystem/interface.js index e5ba6ea..b60576e 100644 --- a/src/filesystem/interface.js +++ b/src/filesystem/interface.js @@ -42,6 +42,7 @@ function maybeCallback(callback) { // Default callback that logs an error if passed in function defaultCallback(err) { if(err) { + /* eslint no-console: 0 */ console.error('Filer error: ', err); } } From 7798b1cb87506e84a71a68504772ee61c502666a Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 11:23:06 -0400 Subject: [PATCH 38/39] Fix lint issues in implementation.js --- src/filesystem/implementation.js | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/filesystem/implementation.js b/src/filesystem/implementation.js index 377af8b..5669de8 100644 --- a/src/filesystem/implementation.js +++ b/src/filesystem/implementation.js @@ -13,8 +13,6 @@ var NODE_TYPE_DIRECTORY = Constants.NODE_TYPE_DIRECTORY; var NODE_TYPE_SYMBOLIC_LINK = Constants.NODE_TYPE_SYMBOLIC_LINK; var NODE_TYPE_META = Constants.NODE_TYPE_META; -var DEFAULT_FILE_PERMISSIONS = Constants.DEFAULT_FILE_PERMISSIONS; -var DEFAULT_DIR_PERMISSIONS = Constants.DEFAULT_DIR_PERMISSIONS; var FULL_READ_WRITE_EXEC_PERMISSIONS = Constants.FULL_READ_WRITE_EXEC_PERMISSIONS; var ROOT_DIRECTORY_NAME = Constants.ROOT_DIRECTORY_NAME; @@ -25,7 +23,6 @@ var O_READ = Constants.O_READ; var O_WRITE = Constants.O_WRITE; var O_CREATE = Constants.O_CREATE; var O_EXCLUSIVE = Constants.O_EXCLUSIVE; -var O_TRUNCATE = Constants.O_TRUNCATE; var O_APPEND = Constants.O_APPEND; var O_FLAGS = Constants.O_FLAGS; @@ -843,7 +840,6 @@ function read_data(context, ofd, buffer, offset, length, position, callback) { function stat_file(context, path, callback) { path = normalize(path); - var name = basename(path); find_node(context, path, callback); } @@ -923,7 +919,7 @@ function link_node(context, oldpath, newpath, callback) { } } - function read_file_node(error, result) { + function read_file_node(error) { if(error) { callback(error); } else { @@ -997,8 +993,12 @@ function unlink_node(context, path, callback) { } else { delete directoryData[name]; context.putObject(directoryNode.data, directoryData, function(error) { - var now = Date.now(); - update_node_times(context, parentPath, directoryNode, { mtime: now, ctime: now }, callback); + if(error) { + callback(error); + } else { + var now = Date.now(); + update_node_times(context, parentPath, directoryNode, { mtime: now, ctime: now }, callback); + } }); } } @@ -1021,7 +1021,11 @@ function unlink_node(context, path, callback) { context.delete(fileNode.id, delete_file_data); } else { context.putObject(fileNode.id, fileNode, function(error) { - update_node_times(context, path, fileNode, { ctime: Date.now() }, update_directory_data); + if(error) { + callback(error); + } else { + update_node_times(context, path, fileNode, { ctime: Date.now() }, update_directory_data); + } }); } } @@ -1064,7 +1068,6 @@ function unlink_node(context, path, callback) { function read_directory(context, path, callback) { path = normalize(path); - var name = basename(path); var directoryNode; var directoryData; @@ -1784,7 +1787,7 @@ function readFile(fs, context, path, options, callback) { var buffer = new Buffer(size); buffer.fill(0); - read_data(context, ofd, buffer, 0, size, 0, function(err, nbytes) { + read_data(context, ofd, buffer, 0, size, 0, function(err) { cleanup(); if(err) { @@ -1846,7 +1849,7 @@ function writeFile(fs, context, path, data, options, callback) { var ofd = new OpenFileDescription(path, fileNode.id, flags, 0); var fd = fs.allocDescriptor(ofd); - replace_data(context, ofd, data, 0, data.length, function(err, nbytes) { + replace_data(context, ofd, data, 0, data.length, function(err) { fs.releaseDescriptor(fd); if(err) { @@ -1883,7 +1886,7 @@ function appendFile(fs, context, path, data, options, callback) { var ofd = new OpenFileDescription(path, fileNode.id, flags, fileNode.size); var fd = fs.allocDescriptor(ofd); - write_data(context, ofd, data, 0, data.length, ofd.position, function(err, nbytes) { + write_data(context, ofd, data, 0, data.length, ofd.position, function(err) { fs.releaseDescriptor(fd); if(err) { @@ -1895,7 +1898,7 @@ function appendFile(fs, context, path, data, options, callback) { } function exists(fs, context, path, callback) { - function cb(err, stats) { + function cb(err) { callback(err ? false : true); } stat(fs, context, path, cb); @@ -1903,7 +1906,6 @@ function exists(fs, context, path, callback) { // Based on https://github.com/nodejs/node/blob/c700cc42da9cf73af9fec2098520a6c0a631d901/lib/internal/validators.js#L21 var octalReg = /^[0-7]+$/; -var modeDesc = 'must be a 32-bit unsigned integer or an octal string'; function isUint32(value) { return value === (value >>> 0); } From 53f5b0c50b53c9b894193b0150ddc89910e26558 Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Fri, 27 Jul 2018 11:23:27 -0400 Subject: [PATCH 39/39] Fix script names in package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 06d64af..684fbed 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "lint:fix": "eslint --fix src tests", "test:manual": "parcel tests/index.html --out-dir tests/dist", "pretest": "npm run lint", - "test": "npm run travis", + "test": "npm run karma-mocha", "prebuild": "parcel build --global Filer src/index.js --no-minify --out-file filer.js", "build": "parcel build --global Filer src/index.js --out-file filer.min.js --detailed-report", "prekarma-mocha": "parcel build tests/index.js --no-source-maps --out-dir tests/dist",