diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..c4ae50c4 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,2 @@ +dist +assets/*.js diff --git a/app/experiments.js b/app/experiments.js index aecee475..247bcb85 100644 --- a/app/experiments.js +++ b/app/experiments.js @@ -51,7 +51,7 @@ export default function initialize(state, emitter) { emitter.on('DOMContentLoaded', () => { const xp = experiments[state.query.x]; if (xp) { - xp.run(state.query.v, state, emitter); + xp.run(+state.query.v, state, emitter); } }); diff --git a/app/fileManager.js b/app/fileManager.js index e7816324..661d4163 100644 --- a/app/fileManager.js +++ b/app/fileManager.js @@ -1,7 +1,7 @@ /* global EXPIRE_SECONDS */ import FileSender from './fileSender'; import FileReceiver from './fileReceiver'; -import { copyToClipboard, delay, fadeOut } from './utils'; +import { copyToClipboard, delay, fadeOut, percent } from './utils'; import * as metrics from './metrics'; function saveFile(file) { @@ -54,6 +54,7 @@ function exists(id) { export default function(state, emitter) { let lastRender = 0; + let updateTitle = false; function render() { emitter.emit('render'); @@ -74,7 +75,21 @@ export default function(state, emitter) { } } - emitter.on('DOMContentLoaded', checkFiles); + function updateProgress() { + if (updateTitle) { + emitter.emit('DOMTitleChange', percent(state.transfer.progressRatio)); + } + render(); + } + + emitter.on('DOMContentLoaded', () => { + document.addEventListener('blur', () => (updateTitle = true)); + document.addEventListener('focus', () => { + updateTitle = false; + emitter.emit('DOMTitleChange', 'Firefox Send'); + }); + checkFiles(); + }); emitter.on('navigate', checkFiles); @@ -107,7 +122,7 @@ export default function(state, emitter) { emitter.on('upload', async ({ file, type }) => { const size = file.size; const sender = new FileSender(file); - sender.on('progress', render); + sender.on('progress', updateProgress); sender.on('encrypting', render); state.transfer = sender; render(); @@ -153,7 +168,7 @@ export default function(state, emitter) { const size = file.size; const url = `/api/download/${file.id}`; const receiver = new FileReceiver(url, file.key); - receiver.on('progress', render); + receiver.on('progress', updateProgress); receiver.on('decrypting', render); state.transfer = receiver; const links = openLinksInNewTab(); diff --git a/app/main.js b/app/main.js index b222d129..6d7b4eaa 100644 --- a/app/main.js +++ b/app/main.js @@ -28,6 +28,13 @@ app.use((state, emitter) => { uploadButtonStyle: 'browse btn' }; emitter.on('DOMContentLoaded', async () => { + if ( + /firefox/i.test(navigator.userAgent) && + parseInt(navigator.userAgent.match(/firefox\/*([^\n\r]*)\./i)[1], 10) <= + 49 + ) { + return emitter.emit('replaceState', '/unsupported/outdated'); + } const ok = await canHasSend(assets.get('cryptofill.js')); if (!ok) { const reason = /firefox/i.test(navigator.userAgent) ? 'outdated' : 'gcm'; diff --git a/app/templates/file.js b/app/templates/file.js index 4a1bac47..7fc665e9 100644 --- a/app/templates/file.js +++ b/app/templates/file.js @@ -4,7 +4,7 @@ const assets = require('../../common/assets'); function timeLeft(milliseconds) { const minutes = Math.floor(milliseconds / 1000 / 60); const hours = Math.floor(minutes / 60); - const seconds = Math.floor(milliseconds / 1000 % 60); + const seconds = Math.floor((milliseconds / 1000) % 60); if (hours >= 1) { return `${hours}h ${minutes % 60}m`; } else if (hours === 0) { diff --git a/app/templates/preview.js b/app/templates/preview.js index 44ba951b..b623a3b4 100644 --- a/app/templates/preview.js +++ b/app/templates/preview.js @@ -40,11 +40,16 @@ module.exports = function(state, emit) { state.translate('downloadFileSize', { size })}
${state.translate('downloadMessage')}
- ${state.translate('downloadAltText')} + ${state.translate('downloadAltText')}
-
diff --git a/app/templates/share.js b/app/templates/share.js index fd5917b2..8c9b3c3c 100644 --- a/app/templates/share.js +++ b/app/templates/share.js @@ -17,13 +17,13 @@ module.exports = function(state, emit) { })}
- +
- + ${state.translate( 'sendAnotherFileLink' )} diff --git a/app/templates/upload.js b/app/templates/upload.js index 15ab54c6..a2d9edd2 100644 --- a/app/templates/upload.js +++ b/app/templates/upload.js @@ -21,9 +21,9 @@ module.exports = function(state, emit) { transfer.msg, transfer.sizes )} - + `; diff --git a/app/templates/welcome.js b/app/templates/welcome.js index 582d3186..f3cc89f9 100644 --- a/app/templates/welcome.js +++ b/app/templates/welcome.js @@ -24,9 +24,9 @@ module.exports = function(state, emit) { )}
+ )}">${state.translate('uploadPageBrowseButton1')}
diff --git a/assets/main.css b/assets/main.css index c285f713..1cd51f36 100644 --- a/assets/main.css +++ b/assets/main.css @@ -278,7 +278,7 @@ a { font-size: 20px; } -input[type="file"] { +input[type='file'] { display: none; } @@ -359,7 +359,7 @@ tbody { cursor: pointer; } -.icon-copy[disabled="disabled"] { +.icon-copy[disabled='disabled'] { pointer-events: none; opacity: 0.3; } @@ -398,7 +398,7 @@ tbody { /* Popup arrow */ .popup .popuptext::after { - content: ""; + content: ''; position: absolute; bottom: -11px; left: 20px; diff --git a/package-lock.json b/package-lock.json index 6aa7bcdf..b8916b3a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -244,6 +244,16 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.8.2" + } + }, "array-map": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", @@ -340,23 +350,81 @@ "dev": true }, "autoprefixer": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.1.2.tgz", - "integrity": "sha1-++rwfUj9h44Ggr98vurecorbKxg=", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.1.4.tgz", + "integrity": "sha512-MB1XybOJqu1uAwpfSilAa1wSURNc4W310CFKvMj1fNaJBFxr1PGgz72vZaPr9ryKGqs2vYZ6jDyJ0aiGELjsoA==", "dev": true, "requires": { - "browserslist": "2.3.3", - "caniuse-lite": "1.0.30000717", + "browserslist": "2.4.0", + "caniuse-lite": "1.0.30000727", "normalize-range": "0.1.2", "num2fraction": "1.2.2", - "postcss": "6.0.9", + "postcss": "6.0.11", "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "browserslist": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.4.0.tgz", + "integrity": "sha512-aM2Gt4x9bVlCUteADBS6JP0F+2tMWKM1jQzUulVROtdFWFIcIVvY76AJbr7GDqy0eDhn+PcnpzzivGxY4qiaKQ==", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000727", + "electron-to-chromium": "1.3.18" + } + }, + "caniuse-lite": { + "version": "1.0.30000727", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000727.tgz", + "integrity": "sha1-IMiVdoOY3tX5ikvqtKdsKF3vQdI=", + "dev": true + }, + "chalk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.4.0" + } + }, + "postcss": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.11.tgz", + "integrity": "sha512-DsnIzznNRQprsGTALpkC0xjDygo+QcOd+qVjP9+RjyzrPiyYOXBGOwoJ4rAiiE4lu6JggQ/jW4niY24WLxuncg==", + "dev": true, + "requires": { + "chalk": "2.1.0", + "source-map": "0.5.7", + "supports-color": "4.4.0" + } + }, + "supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } } }, "aws-sdk": { - "version": "2.103.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.103.0.tgz", - "integrity": "sha1-gJtzG+tlg/OmwLZYeMMso6aloRE=", + "version": "2.114.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.114.0.tgz", + "integrity": "sha1-NckZ6N4c/ZbtplzYpmGZcyR7tzc=", "requires": { "buffer": "4.9.1", "crypto-browserify": "1.0.9", @@ -1236,9 +1304,9 @@ "integrity": "sha1-NUvjMH/9CEM6ePXh4glYRfifx/4=" }, "bel": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/bel/-/bel-5.0.3.tgz", - "integrity": "sha512-bMLvUOrKBM2zWp3Ab6UugjCjFmsZtIeKH3oMNWaUr9RA94sNeicajzptZHQWU3K8KNIL8o6JwAmKG1W3mUiwXw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bel/-/bel-5.1.1.tgz", + "integrity": "sha512-gw9u9YwrxynK2glPkBewYrmO2NSWgWWpcFCdQLnD1BkD5Jc+ndMpb5YFwDcpGRgmvZIQX/W+wIn23fl1tbxR6g==", "requires": { "hyperx": "2.3.0", "is-electron": "2.1.0", @@ -1299,20 +1367,40 @@ "dev": true }, "body-parser": { - "version": "1.17.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", - "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.1.tgz", + "integrity": "sha512-KL2pZpGvy6xuZHgYUznB1Zfw4AoGMApfRanT5NafeLvglbaSM+4CCtmlyYOv66oYXqvKL1xpaFb94V/AZVUnYg==", "requires": { - "bytes": "2.4.0", - "content-type": "1.0.2", - "debug": "2.6.7", + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.8", "depd": "1.1.1", "http-errors": "1.6.2", - "iconv-lite": "0.4.15", + "iconv-lite": "0.4.19", "on-finished": "2.3.0", - "qs": "6.4.0", - "raw-body": "2.2.0", + "qs": "6.5.1", + "raw-body": "2.3.2", "type-is": "1.6.15" + }, + "dependencies": { + "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==" + }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "requires": { + "ms": "2.0.0" + } + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + } } }, "bonjour": { @@ -1388,16 +1476,17 @@ "dev": true }, "browserify-aes": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz", - "integrity": "sha1-Xncl297x/Vkw1OurSFZ85FHEigo=", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.8.tgz", + "integrity": "sha512-WYCMOT/PtGTlpOKFht0YJFYcPy6pLCR98CtWfzK13zoynLlBMvAdEMSRGmgnJCw2M2j/5qxBkinZQFobieM8dQ==", "dev": true, "requires": { "buffer-xor": "1.0.3", "cipher-base": "1.0.4", "create-hash": "1.1.3", - "evp_bytestokey": "1.0.2", - "inherits": "2.0.3" + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.1" } }, "browserify-cipher": { @@ -1406,9 +1495,9 @@ "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", "dev": true, "requires": { - "browserify-aes": "1.0.6", + "browserify-aes": "1.0.8", "browserify-des": "1.0.0", - "evp_bytestokey": "1.0.2" + "evp_bytestokey": "1.0.3" } }, "browserify-des": { @@ -1518,9 +1607,9 @@ } }, "bytes": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", - "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, "call-matcher": { "version": "1.0.1", @@ -1664,16 +1753,16 @@ } }, "choo": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/choo/-/choo-6.0.0.tgz", - "integrity": "sha512-bwBnTuZCZlHHTDJNqbBCdKmnLnApkJcaw6wYK6NRrS+wL1L4GXz1Athe6FiOGw15leisW+XhSGgF3WBT8E8Bmg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/choo/-/choo-6.0.1.tgz", + "integrity": "sha512-bp9EpUFcDiPn0Qc5ccawQS4HnfAnC0QzeoZtzo1FjVGcXIeaO0DXhlBnrxa98ZK1vSjnt/3Juz+yG+Lzi3sdUQ==", "requires": { - "bel": "5.0.3", + "bel": "5.1.1", "document-ready": "2.0.1", "nanobus": "4.2.0", "nanohref": "3.0.0", "nanolocation": "1.0.0", - "nanomorph": "5.1.2", + "nanomorph": "5.1.3", "nanoquery": "1.1.0", "nanoraf": "3.0.1", "nanorouter": "2.1.0", @@ -2174,7 +2263,7 @@ "jsonfile": "2.4.0", "klaw": "1.3.1", "path-is-absolute": "1.0.1", - "rimraf": "2.6.1" + "rimraf": "2.6.2" } }, "glob": { @@ -2324,9 +2413,9 @@ "dev": true }, "css-loader": { - "version": "0.28.5", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.5.tgz", - "integrity": "sha512-/FJmsDD8e6xZOBHMFShN/BCjnrEybq0spYaTZ1QoZ10/jhUa1LDDojQELu/JJ1ykZZjt0nSwkYrb2Mfx3bZx3Q==", + "version": "0.28.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.7.tgz", + "integrity": "sha512-GxMpax8a/VgcfRrVy0gXD6yLd5ePYbXX/5zGgTVYp4wXtJklS8Z2VaUArJgc//f6/Dzil7BaJObdSv8eKKCPgg==", "dev": true, "requires": { "babel-code-frame": "6.26.0", @@ -2590,7 +2679,7 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "0.10.29" + "es5-ext": "0.10.30" } }, "dasherize": { @@ -2646,6 +2735,33 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, + "default-gateway": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-2.0.2.tgz", + "integrity": "sha512-lvDPOoSVibdJqnZNS9OF7SzDrvr5PYVgynPNNqt89lcJWDRnLP3bpzkgFc/5t759YcuNjz9VEpFe5I6NLLrSiQ==", + "dev": true, + "requires": { + "execa": "0.7.0", + "ip-regex": "2.1.0" + }, + "dependencies": { + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + } + } + }, "define-properties": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", @@ -2674,7 +2790,7 @@ "object-assign": "4.1.1", "pify": "2.3.0", "pinkie-promise": "2.0.1", - "rimraf": "2.6.1" + "rimraf": "2.6.2" } }, "delayed-stream": { @@ -2950,16 +3066,24 @@ } }, "es-abstract": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.8.0.tgz", - "integrity": "sha512-Cf9/h5MrXtExM20gSS55YFrGKCyPrRBjIVBtVyy8vmlsDfe0NPKMWj65tPLgzyfPuapWxh5whpXCtW4+AW5mRg==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.8.2.tgz", + "integrity": "sha512-dvhwFL3yjQxNNsOWx6exMlaDrRHCRGMQlnx5lsXDCZ/J7G/frgIIl94zhZSp/galVAYp7VzPi1OrAHta89/yGQ==", "dev": true, "requires": { "es-to-primitive": "1.1.1", - "function-bind": "1.1.0", + "function-bind": "1.1.1", "has": "1.0.1", "is-callable": "1.1.3", "is-regex": "1.0.4" + }, + "dependencies": { + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + } } }, "es-to-primitive": { @@ -2974,9 +3098,9 @@ } }, "es5-ext": { - "version": "0.10.29", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.29.tgz", - "integrity": "sha512-KXla9NXo5sdaEkGSmbFPYgjH6m75kxsthL6GDRSug/Y2OiMoYm0I9giL39j4cgmaFmAbkIFJ6gG+SGKnLSmOvA==", + "version": "0.10.30", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz", + "integrity": "sha1-cUGhaDZpfbq/qq7uQUlc4p9SyTk=", "dev": true, "requires": { "es6-iterator": "2.0.1", @@ -2990,7 +3114,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.29", + "es5-ext": "0.10.30", "es6-symbol": "3.1.1" } }, @@ -3001,7 +3125,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.29", + "es5-ext": "0.10.30", "es6-iterator": "2.0.1", "es6-set": "0.1.5", "es6-symbol": "3.1.1", @@ -3021,7 +3145,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.29", + "es5-ext": "0.10.30", "es6-iterator": "2.0.1", "es6-symbol": "3.1.1", "event-emitter": "0.3.5" @@ -3034,7 +3158,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.29" + "es5-ext": "0.10.30" } }, "es6-templates": { @@ -3054,7 +3178,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.29", + "es5-ext": "0.10.30", "es6-iterator": "2.0.1", "es6-symbol": "3.1.1" } @@ -3119,9 +3243,9 @@ } }, "eslint": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.5.0.tgz", - "integrity": "sha1-u3XTuL3pf7XhPvzVOXRGd/6wGcM=", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.6.1.tgz", + "integrity": "sha1-3cf8f9cL+TIFsLNEm7FqHp59SVA=", "dev": true, "requires": { "ajv": "5.2.2", @@ -3142,9 +3266,9 @@ "globals": "9.18.0", "ignore": "3.3.3", "imurmurhash": "0.1.4", - "inquirer": "3.2.2", + "inquirer": "3.2.3", "is-resolvable": "1.0.0", - "js-yaml": "3.9.1", + "js-yaml": "3.10.0", "json-stable-stringify": "1.0.1", "levn": "0.3.0", "lodash": "4.17.4", @@ -3186,7 +3310,7 @@ "requires": { "ansi-styles": "3.2.0", "escape-string-regexp": "1.0.5", - "supports-color": "4.2.1" + "supports-color": "4.4.0" } }, "debug": { @@ -3205,9 +3329,9 @@ "dev": true }, "js-yaml": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.1.tgz", - "integrity": "sha512-CbcG379L1e+mWBnLvHWWeLs8GyV/EMw862uLI3c+GxVyDHWZcjZinwuBd3iW2pgxgIlksW/1vNJa4to+RvDOww==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", + "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", "dev": true, "requires": { "argparse": "1.0.9", @@ -3224,9 +3348,9 @@ } }, "supports-color": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", - "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "dev": true, "requires": { "has-flag": "2.0.0" @@ -3350,7 +3474,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.29" + "es5-ext": "0.10.30" } }, "event-stream": { @@ -3389,9 +3513,9 @@ } }, "evp_bytestokey": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.2.tgz", - "integrity": "sha512-ni0r0lrm7AOzsh2qC5mi9sj8S0gmj5fLNjfFpxN05FB4tAVZEKotbkjOtLPqTCX/CXT7NsUr6juZb4IFJeNNdA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { "md5.js": "1.3.4", @@ -3528,17 +3652,9 @@ "integrity": "sha1-HtkZnanL/i7y96MbL96LDRI2iXI=", "dev": true, "requires": { - "iconv-lite": "0.4.18", + "iconv-lite": "0.4.19", "jschardet": "1.5.1", "tmp": "0.0.31" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz", - "integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA==", - "dev": true - } } }, "extglob": { @@ -3603,7 +3719,7 @@ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { - "websocket-driver": "0.6.5" + "websocket-driver": "0.7.0" } }, "figures": { @@ -3835,7 +3951,7 @@ "jsonfile": "2.4.0", "klaw": "1.3.1", "path-is-absolute": "1.0.1", - "rimraf": "2.6.1" + "rimraf": "2.6.2" } }, "fs.realpath": { @@ -3851,7 +3967,7 @@ "dev": true, "optional": true, "requires": { - "nan": "2.6.2", + "nan": "2.7.0", "node-pre-gyp": "0.6.36" }, "dependencies": { @@ -4761,6 +4877,12 @@ "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", "dev": true }, + "get-own-enumerable-property-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-1.0.1.tgz", + "integrity": "sha1-8dTjrRQC4DmJjlbR6bmqkkwm5IQ=", + "dev": true + }, "get-stdin": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", @@ -5182,6 +5304,12 @@ "statuses": "1.3.1" } }, + "http-parser-js": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.6.tgz", + "integrity": "sha1-GVJz9YcExFLWcQdr4gEyndNB3FU=", + "dev": true + }, "http-proxy": { "version": "1.16.2", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", @@ -5303,9 +5431,9 @@ } }, "iconv-lite": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", - "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=" + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" }, "icss-replace-symbols": { "version": "1.1.0", @@ -5387,9 +5515,9 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "inquirer": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.2.tgz", - "integrity": "sha512-bTKLzEHJVATimZO/YFdLrom0lRx1BHfRYskFHfIMVkGdp8+dIZaxuU+4yrsS1lcu6YWywVQVVsfvdwESzbeqHw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.3.tgz", + "integrity": "sha512-Bc3KbimpDTOeQdDj18Ir/rlsGuhBSSNqdOnxaAuKhpkdnMMuKsEGbZD2v5KFF9oso2OU+BPh7+/u5obmFDRmWw==", "dev": true, "requires": { "ansi-escapes": "2.0.0", @@ -5431,7 +5559,7 @@ "requires": { "ansi-styles": "3.2.0", "escape-string-regexp": "1.0.5", - "supports-color": "4.2.1" + "supports-color": "4.4.0" } }, "strip-ansi": { @@ -5444,9 +5572,9 @@ } }, "supports-color": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", - "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "dev": true, "requires": { "has-flag": "2.0.0" @@ -5468,12 +5596,21 @@ } }, "internal-ip": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", - "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-2.0.2.tgz", + "integrity": "sha512-1OBR5z3Te0FrUtpsPP04XQ2Tsgj+AwujBioVtM9WVW/Jyoe7xR3BIfWnnmg1eUwRuYFelIJM9mQwB7u3bLXD7Q==", "dev": true, "requires": { - "meow": "3.7.0" + "default-gateway": "2.0.2", + "ipaddr.js": "1.5.2" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", + "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=", + "dev": true + } } }, "interpret": { @@ -5503,6 +5640,12 @@ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, "ipaddr.js": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz", @@ -5648,6 +5791,12 @@ "kind-of": "3.2.2" } }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, "is-object": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz", @@ -5765,6 +5914,12 @@ "integrity": "sha1-MQ23D3QtJZoWo2kgK1GvhCMzENk=", "dev": true }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -5785,6 +5940,28 @@ "isarray": "1.0.0" } }, + "jest-matcher-utils": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-20.0.3.tgz", + "integrity": "sha1-s6a443yld4A7CDKpixZPRLeBVhI=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "pretty-format": "20.0.3" + } + }, + "jest-validate": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-20.0.3.tgz", + "integrity": "sha1-0M/R3k9XnymEhJJcKA+PHZTsPKs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "jest-matcher-utils": "20.0.3", + "leven": "2.1.0", + "pretty-format": "20.0.3" + } + }, "jmespath": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", @@ -6072,6 +6249,12 @@ } } }, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "dev": true + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -6092,20 +6275,80 @@ } }, "lint-staged": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-4.0.4.tgz", - "integrity": "sha1-nKaWizDfv+gTZbenY81PSZKJZVM=", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-4.1.3.tgz", + "integrity": "sha512-nOV/CUs10lQz7STNkNs+X3lQahaMfWj31OoTPQxVVg17pqDbBi8chV564nk/GdTgHNAF7RyRFt0ZiA2cTjgppw==", "dev": true, "requires": { "app-root-path": "2.0.1", + "chalk": "2.1.0", "cosmiconfig": "1.1.0", "execa": "0.8.0", + "is-glob": "4.0.0", + "jest-validate": "20.0.3", "listr": "0.12.0", - "lodash.chunk": "4.2.0", + "lodash": "4.17.4", + "log-symbols": "2.0.0", "minimatch": "3.0.4", "npm-which": "3.0.1", - "p-map": "1.1.1", - "staged-git-files": "0.0.4" + "p-map": "1.2.0", + "staged-git-files": "0.0.4", + "stringify-object": "3.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.4.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "log-symbols": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.0.0.tgz", + "integrity": "sha512-ValCSal2pRxRbet7O69a/1g5fZ2MLxf1YXIslNrdJF42ofY9zVf6MTqTwfhG+2x168xrbZATCgFQfXAwdNHv+w==", + "dev": true, + "requires": { + "chalk": "2.1.0" + } + }, + "supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } } }, "listr": { @@ -6126,7 +6369,7 @@ "log-symbols": "1.0.2", "log-update": "1.0.2", "ora": "0.2.3", - "p-map": "1.1.1", + "p-map": "1.2.0", "rxjs": "5.4.3", "stream-to-observable": "0.1.0", "strip-ansi": "3.0.1" @@ -6317,12 +6560,6 @@ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", "dev": true }, - "lodash.chunk": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", - "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=", - "dev": true - }, "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -6432,9 +6669,9 @@ } }, "loglevel": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.4.1.tgz", - "integrity": "sha1-lbOD+Ro8J1b9SrCTZn5DCRYfK80=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.5.0.tgz", + "integrity": "sha512-OQ2jhWI5G2qsvO0UFNyCQWgKl/tFiwuPIXxELzACeUO2FqstN/R7mmL09+nhv6xOWVPPojQO1A90sCEoJSgBcQ==", "dev": true }, "lolex": { @@ -6600,6 +6837,35 @@ } } }, + "memory-streams": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/memory-streams/-/memory-streams-0.1.2.tgz", + "integrity": "sha1-Jz/3d6tg/sWZsRY1UlUoLMosUMI=", + "dev": true, + "requires": { + "readable-stream": "1.0.34" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + } + } + }, "meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", @@ -6825,9 +7091,9 @@ } }, "mocha": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.0.tgz", - "integrity": "sha512-pIU2PJjrPYvYRqVpjXzj76qltO9uBYI7woYAMoxbSefsa+vqAfptjoeevd6bUgwD0mPIO+hv9f7ltvsNreL2PA==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz", + "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==", "dev": true, "requires": { "browser-stdout": "1.3.0", @@ -6837,6 +7103,7 @@ "escape-string-regexp": "1.0.5", "glob": "7.1.1", "growl": "1.9.2", + "he": "1.1.1", "json3": "3.3.2", "lodash.create": "3.1.1", "mkdirp": "0.5.1", @@ -6961,12 +7228,17 @@ "dev": true }, "nan": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", - "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", + "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=", "dev": true, "optional": true }, + "nanoassert": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", + "integrity": "sha1-TzFS4JVA/eKMdvRLGbvNHVpCR40=" + }, "nanobus": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/nanobus/-/nanobus-4.2.0.tgz", @@ -6996,9 +7268,12 @@ } }, "nanomorph": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/nanomorph/-/nanomorph-5.1.2.tgz", - "integrity": "sha1-ZtElCYco5UsOyqDISYA205XT8l0=" + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/nanomorph/-/nanomorph-5.1.3.tgz", + "integrity": "sha512-VydkKjFWU/DAO0R10awFASRNXQKHrZUMdMIiNcdmWm+IhuifuPOw/dDtpiQ1cNROF8f3ATPrcKRVarEayQJOqA==", + "requires": { + "nanoassert": "1.1.0" + } }, "nanoquery": { "version": "1.1.0", @@ -7160,7 +7435,7 @@ "create-hmac": "1.1.6", "diffie-hellman": "5.0.2", "inherits": "2.0.3", - "pbkdf2": "3.0.13", + "pbkdf2": "3.0.14", "public-encrypt": "4.0.0", "randombytes": "2.0.5" } @@ -7285,18 +7560,51 @@ } }, "npm-run-all": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.0.2.tgz", - "integrity": "sha1-qEZpNI5ttsy+BSIAtM22v+A0pP4=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.1.tgz", + "integrity": "sha512-qrmqqaJa+REbzUTIL/mHfTdgwz+gL1xUezY/ueyLa7GISZ4T3h0CH8D2r6AaZdCYN2unu7PzspP0ofpXla1ftg==", "dev": true, "requires": { - "chalk": "1.1.3", + "ansi-styles": "3.2.0", + "chalk": "2.1.0", "cross-spawn": "5.1.0", + "memory-streams": "0.1.2", "minimatch": "3.0.4", "ps-tree": "1.1.0", "read-pkg": "2.0.0", "shell-quote": "1.6.1", "string.prototype.padend": "3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.4.0" + } + }, + "supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } } }, "npm-run-path": { @@ -7421,13 +7729,12 @@ } }, "opn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", - "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz", + "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==", "dev": true, "requires": { - "object-assign": "4.1.1", - "pinkie-promise": "2.0.1" + "is-wsl": "1.1.0" } }, "optionator": { @@ -7572,9 +7879,9 @@ } }, "p-map": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.1.1.tgz", - "integrity": "sha1-BfXkrpegaDcbwqXMhr+9vBnErno=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", "dev": true }, "pako": { @@ -7599,10 +7906,10 @@ "dev": true, "requires": { "asn1.js": "4.9.1", - "browserify-aes": "1.0.6", + "browserify-aes": "1.0.8", "create-hash": "1.1.3", - "evp_bytestokey": "1.0.2", - "pbkdf2": "3.0.13" + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.14" } }, "parse-glob": { @@ -7723,9 +8030,9 @@ } }, "pbkdf2": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.13.tgz", - "integrity": "sha512-+dCHxDH+djNtjgWmvVC/my3SYBAKpKNqKSjLkp+GtWWYe4XPE+e/PSD2aCanlEZZnqPk2uekTKNC/ccbwd2X2Q==", + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", + "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", "dev": true, "requires": { "create-hash": "1.1.3", @@ -9084,11 +9391,32 @@ "dev": true }, "prettier": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.5.3.tgz", - "integrity": "sha1-WdrcaDNF7GuI+IuU7Urn4do5S/4=", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.6.1.tgz", + "integrity": "sha512-f85qBoQiqiFM/sCmJaN4Lagj9bqMcv38vCftqp4GfVessAqq3Ns6g+3gd8UXReStLLE/DGEdwiZXoFKxphKqwg==", "dev": true }, + "pretty-format": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-20.0.3.tgz", + "integrity": "sha1-Ag41ClYKH+GpjcO+tsz/s4beixQ=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1", + "ansi-styles": "3.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + } + } + }, "private": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", @@ -9189,7 +9517,8 @@ "qs": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true }, "query-string": { "version": "4.3.4", @@ -9311,12 +9640,13 @@ "dev": true }, "raw-body": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", - "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", "requires": { - "bytes": "2.4.0", - "iconv-lite": "0.4.15", + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", "unpipe": "1.0.0" } }, @@ -9764,9 +10094,9 @@ } }, "rimraf": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { "glob": "7.1.2" @@ -9868,7 +10198,7 @@ "dev": true, "requires": { "jszip": "3.1.4", - "rimraf": "2.6.1", + "rimraf": "2.6.2", "tmp": "0.0.30", "xml2js": "0.4.17" }, @@ -10143,7 +10473,7 @@ "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", "dev": true, "requires": { - "websocket-driver": "0.6.5" + "websocket-driver": "0.7.0" } } } @@ -10506,10 +10836,21 @@ "dev": true, "requires": { "define-properties": "1.1.2", - "es-abstract": "1.8.0", + "es-abstract": "1.8.2", "function-bind": "1.1.0" } }, + "stringify-object": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.2.0.tgz", + "integrity": "sha1-lDcKE15BvASDWIE7+ZSB8TFcaqY=", + "dev": true, + "requires": { + "get-own-enumerable-property-symbols": "1.0.1", + "is-obj": "1.0.1", + "is-regexp": "1.0.0" + } + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -10554,7 +10895,7 @@ "integrity": "sha512-k1GkRhOtghvYu5PWCdec7SNN22KZZLq4TL1vVyykBvHr91oUS7eVfX2IAZJjBpYKh9Gdep+AnSZCwuUn+J76Bw==", "dev": true, "requires": { - "autoprefixer": "7.1.2", + "autoprefixer": "7.1.4", "balanced-match": "1.0.0", "chalk": "2.1.0", "cosmiconfig": "2.2.2", @@ -11333,9 +11674,9 @@ } }, "webpack": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.5.5.tgz", - "integrity": "sha512-qeUx4nIbeLL53qqNTs3kObPBMkUVDrOjEfp/hTvMlx21qL2MsGNr8/tXCoX/lS12dLl9qtZaXv2qfBEctPScDg==", + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.5.6.tgz", + "integrity": "sha512-sXnxfx6KoZVrFAGLjdhCCwDtDwkYMfwm8mJjkQv3thr5pjTlbxopVlr/kJwc9Bz317gL+gNjvz++ir9TgG1MDg==", "dev": true, "requires": { "acorn": "5.1.1", @@ -11354,7 +11695,7 @@ "mkdirp": "0.5.1", "node-libs-browser": "2.0.0", "source-map": "0.5.7", - "supports-color": "4.2.1", + "supports-color": "4.4.0", "tapable": "0.2.8", "uglifyjs-webpack-plugin": "0.4.6", "watchpack": "1.4.0", @@ -11378,9 +11719,9 @@ } }, "supports-color": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", - "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "dev": true, "requires": { "has-flag": "2.0.0" @@ -11402,12 +11743,13 @@ } }, "webpack-dev-server": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.7.1.tgz", - "integrity": "sha1-IVgPWgjNBlxxFEz29hw0W8pZqLg=", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.8.0.tgz", + "integrity": "sha512-uIHpSWqeAca//nDjACAHkhBDG2wJg3hD/sICImLj4ResZsc2t+WaBQ0f4FL50jd89NLaZjvlLRKu7ayMOTdOhg==", "dev": true, "requires": { "ansi-html": "0.0.7", + "array-includes": "3.0.3", "bonjour": "3.5.0", "chokidar": "1.7.0", "compression": "1.7.0", @@ -11416,26 +11758,26 @@ "express": "4.15.4", "html-entities": "1.2.1", "http-proxy-middleware": "0.17.4", - "internal-ip": "1.2.0", + "internal-ip": "2.0.2", "ip": "1.1.5", - "loglevel": "1.4.1", - "opn": "4.0.2", + "loglevel": "1.5.0", + "opn": "5.1.0", "portfinder": "1.0.13", "selfsigned": "1.10.1", "serve-index": "1.9.0", "sockjs": "0.3.18", "sockjs-client": "1.1.4", "spdy": "3.4.7", - "strip-ansi": "3.0.1", - "supports-color": "3.2.3", + "strip-ansi": "4.0.0", + "supports-color": "4.4.0", "webpack-dev-middleware": "1.12.0", - "yargs": "6.6.0" + "yargs": "8.0.2" }, "dependencies": { - "camelcase": { + "ansi-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, "del": { @@ -11447,19 +11789,9 @@ "globby": "6.1.0", "is-path-cwd": "1.0.0", "is-path-in-cwd": "1.0.0", - "p-map": "1.1.1", + "p-map": "1.2.0", "pify": "3.0.0", - "rimraf": "2.6.1" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "rimraf": "2.6.2" } }, "globby": { @@ -11483,169 +11815,28 @@ } } }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "1.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" + "ansi-regex": "3.0.0" } }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "dev": true, "requires": { - "has-flag": "1.0.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "yargs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", - "dev": true, - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "4.2.1" - } - }, - "yargs-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", - "dev": true, - "requires": { - "camelcase": "3.0.0" + "has-flag": "2.0.0" } } } @@ -11691,18 +11882,19 @@ } }, "websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", + "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "dev": true, "requires": { - "websocket-extensions": "0.1.1" + "http-parser-js": "0.4.6", + "websocket-extensions": "0.1.2" } }, "websocket-extensions": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", - "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.2.tgz", + "integrity": "sha1-Dhh4HeYpoYMIzhSBZQ9n/6JpOl0=", "dev": true }, "whet.extend": { diff --git a/package.json b/package.json index 2ca7fb42..307140dd 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "lint-locales": "node scripts/lint-locales", "lint-locales:dev": "npm run lint-locales", "lint-locales:prod": "npm run lint-locales -- --production", - "format": "prettier '!(dist|node_modules|assets)/**/*.js' 'assets/*.css' --single-quote --write", + "format": "prettier '**/*.js' 'assets/*.css' --single-quote --write", "get-prod-locales": "node scripts/get-prod-locales", "get-prod-locales:write": "npm run get-prod-locales -- --write", "changelog": "github-changes -o mozilla -r send --only-pulls --use-commit-body --no-merges", @@ -43,7 +43,7 @@ "node": ">=8.2.0" }, "devDependencies": { - "autoprefixer": "^7.1.2", + "autoprefixer": "^7.1.4", "babel-core": "^6.26.0", "babel-loader": "^7.1.2", "babel-plugin-yo-yoify": "^0.7.0", @@ -54,10 +54,10 @@ "choo-log": "^7.2.1", "copy-webpack-plugin": "^4.0.1", "cross-env": "^5.0.5", - "css-loader": "^0.28.5", + "css-loader": "^0.28.7", "css-mqpacker": "^6.0.1", "cssnano": "^3.10.0", - "eslint": "^4.5.0", + "eslint": "^4.6.1", "eslint-plugin-mocha": "^4.11.0", "eslint-plugin-node": "^5.1.1", "eslint-plugin-security": "^1.4.0", @@ -68,17 +68,17 @@ "github-changes": "^1.1.0", "html-loader": "^0.5.1", "husky": "^0.14.3", - "lint-staged": "^4.0.4", - "mocha": "^3.5.0", + "lint-staged": "^4.1.3", + "mocha": "^3.5.3", "nanobus": "^4.2.0", - "npm-run-all": "^4.0.2", + "npm-run-all": "^4.1.1", "postcss-loader": "^2.0.6", - "prettier": "^1.5.3", + "prettier": "^1.6.1", "proxyquire": "^1.8.0", "raven-js": "^3.17.0", "redis-mock": "^0.20.0", "require-from-string": "^1.2.1", - "rimraf": "^2.6.1", + "rimraf": "^2.6.2", "selenium-webdriver": "^3.5.0", "sinon": "^3.2.1", "string-hash": "^1.1.3", @@ -87,15 +87,15 @@ "supertest": "^3.0.0", "testpilot-ga": "^0.3.0", "val-loader": "^1.0.2", - "webpack": "^3.5.5", - "webpack-dev-server": "^2.7.1", + "webpack": "^3.5.6", + "webpack-dev-server": "^2.8.0", "webpack-manifest-plugin": "^1.3.1", "webpack-unassert-loader": "^1.2.0" }, "dependencies": { - "aws-sdk": "^2.103.0", - "body-parser": "^1.17.2", - "choo": "^6.0.0", + "aws-sdk": "^2.114.0", + "body-parser": "^1.18.1", + "choo": "^6.0.1", "connect-busboy": "0.0.2", "convict": "^4.0.0", "express": "^4.15.4", diff --git a/test/server/server.test.js b/test/server/server.test.js index 627c3a9b..89a6d1ed 100644 --- a/test/server/server.test.js +++ b/test/server/server.test.js @@ -54,7 +54,9 @@ describe('Server integration tests', function() { } it('Responds with a 200 when the service is up', function() { - return request(server).get('/').expect(200); + return request(server) + .get('/') + .expect(200); }); it('Rejects with a 404 when a file id is not valid', function() { @@ -89,7 +91,9 @@ describe('Server integration tests', function() { }); it('Responds with a 200 if a file exists', function() { - return request(server).get('/exists/' + fileId).expect(200); + return request(server) + .get('/exists/' + fileId) + .expect(200); }); it('Exists in the redis server', function() { @@ -107,7 +111,9 @@ describe('Server integration tests', function() { }); it('Fails delete if the id is invalid', function() { - return request(server).post('/delete/1').expect(404); + return request(server) + .post('/delete/1') + .expect(404); }); it('Successfully deletes if the id is valid and the delete token matches', function( @@ -129,7 +135,9 @@ describe('Server integration tests', function() { }); it('Responds with a 404 if a file does not exist', function() { - return request(server).get('/exists/notfound').expect(404); + return request(server) + .get('/exists/notfound') + .expect(404); }); it('Uploads properly after a delete', function(done) { @@ -150,21 +158,25 @@ describe('Server integration tests', function() { }); it('Responds with a 200 for the download page', function() { - return request(server).get('/download/' + fileId).expect(200); + return request(server) + .get('/download/' + fileId) + .expect(200); }); it('Downloads a file properly', function() { - return request(server).get('/assets/download/' + fileId).then(res => { - assert(res.header.hasOwnProperty('content-disposition')); - assert(res.header.hasOwnProperty('content-type')); - assert(res.header.hasOwnProperty('content-length')); - assert(res.header.hasOwnProperty('x-file-metadata')); - assert.equal( - res.header['content-disposition'], - 'attachment; filename=test_upload.txt' - ); - assert.equal(res.header['content-type'], 'application/octet-stream'); - }); + return request(server) + .get('/assets/download/' + fileId) + .then(res => { + assert(res.header.hasOwnProperty('content-disposition')); + assert(res.header.hasOwnProperty('content-type')); + assert(res.header.hasOwnProperty('content-length')); + assert(res.header.hasOwnProperty('x-file-metadata')); + assert.equal( + res.header['content-disposition'], + 'attachment; filename=test_upload.txt' + ); + assert.equal(res.header['content-type'], 'application/octet-stream'); + }); }); it('The file is deleted after one download', function() {