diff --git a/.dockerignore b/.dockerignore
index 6c87ade9..eb85ddcc 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,12 +1,8 @@
node_modules
.git
.DS_Store
-static
-test
-scripts
-docs
firefox
+assets
+docs
public
-views
-webpack
-frontend
+test
diff --git a/.eslintignore b/.eslintignore
index a435bfcc..7540c39c 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -1,3 +1,3 @@
-public
-test/frontend/bundle.js
+dist
+assets
firefox
diff --git a/.gitignore b/.gitignore
index 2aa3a824..f06235c4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,2 @@
-.DS_Store
-dist
node_modules
-static/*
-!static/info.txt
-test/frontend/bundle.js
+dist
diff --git a/Dockerfile b/Dockerfile
index 998c72b2..93f3a47b 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -12,4 +12,4 @@ RUN npm install --production && npm cache clean --force
ENV PORT=1443
EXPOSE $PORT
-CMD ["npm", "start"]
+CMD ["npm", "run", "prod"]
diff --git a/README.md b/README.md
index 4ded5ec1..114ee240 100644
--- a/README.md
+++ b/README.md
@@ -30,11 +30,12 @@ $ redis-server /usr/local/etc/redis.conf
| Command | Description |
|------------------|-------------|
-| `npm run dev` | Builds and starts the web server locally for development.
| `npm run format` | Formats the frontend and server code using **prettier**.
| `npm run lint` | Lints the CSS and JavaScript code.
-| `npm start` | Starts the Express web server.
| `npm test` | Runs the suite of mocha tests.
+| `npm start` | Runs the server in development configuration.
+| `npm run build` | Builds the production assets.
+| `npm run prod` | Runs the server in production configuration.
---
diff --git a/frontend/src/.eslintrc.yml b/app/.eslintrc.yml
similarity index 87%
rename from frontend/src/.eslintrc.yml
rename to app/.eslintrc.yml
index d6d7fd0c..677cec88 100644
--- a/frontend/src/.eslintrc.yml
+++ b/app/.eslintrc.yml
@@ -1,6 +1,6 @@
env:
browser: true
- node: false
+ node: true
parserOptions:
sourceType: module
diff --git a/app/dragManager.js b/app/dragManager.js
new file mode 100644
index 00000000..a878853a
--- /dev/null
+++ b/app/dragManager.js
@@ -0,0 +1,24 @@
+export default function(state, emitter) {
+ emitter.on('DOMContentLoaded', () => {
+ document.body.addEventListener('dragover', event => {
+ if (state.route === '/') {
+ event.preventDefault();
+ }
+ });
+ document.body.addEventListener('drop', event => {
+ if (state.route === '/' && !state.transfer) {
+ event.preventDefault();
+ document.querySelector('.upload-window').classList.remove('ondrag');
+ const target = event.dataTransfer;
+ if (target.files.length === 0) {
+ return;
+ }
+ if (target.files.length > 1 || target.files[0].size === 0) {
+ return alert(state.translate('uploadPageMultipleFilesAlert'));
+ }
+ const file = target.files[0];
+ emitter.emit('upload', { file, type: 'drop' });
+ }
+ });
+ });
+}
diff --git a/app/fileManager.js b/app/fileManager.js
new file mode 100644
index 00000000..e7816324
--- /dev/null
+++ b/app/fileManager.js
@@ -0,0 +1,202 @@
+/* global EXPIRE_SECONDS */
+import FileSender from './fileSender';
+import FileReceiver from './fileReceiver';
+import { copyToClipboard, delay, fadeOut } from './utils';
+import * as metrics from './metrics';
+
+function saveFile(file) {
+ const dataView = new DataView(file.plaintext);
+ const blob = new Blob([dataView], { type: file.type });
+ const downloadUrl = URL.createObjectURL(blob);
+
+ if (window.navigator.msSaveBlob) {
+ return window.navigator.msSaveBlob(blob, file.name);
+ }
+ const a = document.createElement('a');
+ a.href = downloadUrl;
+ a.download = file.name;
+ document.body.appendChild(a);
+ a.click();
+ URL.revokeObjectURL(downloadUrl);
+}
+
+function openLinksInNewTab(links, should = true) {
+ links = links || Array.from(document.querySelectorAll('a:not([target])'));
+ if (should) {
+ links.forEach(l => {
+ l.setAttribute('target', '_blank');
+ l.setAttribute('rel', 'noopener noreferrer');
+ });
+ } else {
+ links.forEach(l => {
+ l.removeAttribute('target');
+ l.removeAttribute('rel');
+ });
+ }
+ return links;
+}
+
+function exists(id) {
+ return new Promise((resolve, reject) => {
+ const xhr = new XMLHttpRequest();
+ xhr.onreadystatechange = () => {
+ if (xhr.readyState === XMLHttpRequest.HEADERS_RECEIVED) {
+ resolve(xhr.status === 200);
+ }
+ };
+ xhr.onerror = () => resolve(false);
+ xhr.ontimeout = () => resolve(false);
+ xhr.open('get', '/api/exists/' + id);
+ xhr.timeout = 2000;
+ xhr.send();
+ });
+}
+
+export default function(state, emitter) {
+ let lastRender = 0;
+
+ function render() {
+ emitter.emit('render');
+ }
+
+ async function checkFiles() {
+ const files = state.storage.files;
+ let rerender = false;
+ for (const file of files) {
+ const ok = await exists(file.id);
+ if (!ok) {
+ state.storage.remove(file.id);
+ rerender = true;
+ }
+ }
+ if (rerender) {
+ render();
+ }
+ }
+
+ emitter.on('DOMContentLoaded', checkFiles);
+
+ emitter.on('navigate', checkFiles);
+
+ emitter.on('render', () => {
+ lastRender = Date.now();
+ });
+
+ emitter.on('delete', async ({ file, location }) => {
+ try {
+ metrics.deletedUpload({
+ size: file.size,
+ time: file.time,
+ speed: file.speed,
+ type: file.type,
+ ttl: file.expiresAt - Date.now(),
+ location
+ });
+ state.storage.remove(file.id);
+ await FileSender.delete(file.id, file.deleteToken);
+ } catch (e) {
+ state.raven.captureException(e);
+ }
+ state.fileInfo = null;
+ });
+
+ emitter.on('cancel', () => {
+ state.transfer.cancel();
+ });
+
+ emitter.on('upload', async ({ file, type }) => {
+ const size = file.size;
+ const sender = new FileSender(file);
+ sender.on('progress', render);
+ sender.on('encrypting', render);
+ state.transfer = sender;
+ render();
+ const links = openLinksInNewTab();
+ await delay(200);
+ try {
+ const start = Date.now();
+ metrics.startedUpload({ size, type });
+ const info = await sender.upload();
+ const time = Date.now() - start;
+ const speed = size / (time / 1000);
+ metrics.completedUpload({ size, time, speed, type });
+ await delay(1000);
+ await fadeOut('upload-progress');
+ info.name = file.name;
+ info.size = size;
+ info.type = type;
+ info.time = time;
+ info.speed = speed;
+ info.createdAt = Date.now();
+ info.url = `${info.url}#${info.secretKey}`;
+ info.expiresAt = Date.now() + EXPIRE_SECONDS * 1000;
+ state.fileInfo = info;
+ state.storage.addFile(state.fileInfo);
+ openLinksInNewTab(links, false);
+ state.transfer = null;
+ state.storage.totalUploads += 1;
+ emitter.emit('pushState', `/share/${info.id}`);
+ } catch (err) {
+ state.transfer = null;
+ if (err.message === '0') {
+ //cancelled. do nothing
+ metrics.cancelledUpload({ size, type });
+ return render();
+ }
+ state.raven.captureException(err);
+ metrics.stoppedUpload({ size, type, err });
+ emitter.emit('replaceState', '/error');
+ }
+ });
+
+ emitter.on('download', async file => {
+ const size = file.size;
+ const url = `/api/download/${file.id}`;
+ const receiver = new FileReceiver(url, file.key);
+ receiver.on('progress', render);
+ receiver.on('decrypting', render);
+ state.transfer = receiver;
+ const links = openLinksInNewTab();
+ render();
+ try {
+ const start = Date.now();
+ metrics.startedDownload({ size: file.size, ttl: file.ttl });
+ const f = await receiver.download();
+ const time = Date.now() - start;
+ const speed = size / (time / 1000);
+ await delay(1000);
+ await fadeOut('download-progress');
+ saveFile(f);
+ state.storage.totalDownloads += 1;
+ metrics.completedDownload({ size, time, speed });
+ emitter.emit('pushState', '/completed');
+ } catch (err) {
+ // TODO cancelled download
+ const location = err.message === 'notfound' ? '/404' : '/error';
+ if (location === '/error') {
+ state.raven.captureException(err);
+ metrics.stoppedDownload({ size, err });
+ }
+ emitter.emit('replaceState', location);
+ } finally {
+ state.transfer = null;
+ openLinksInNewTab(links, false);
+ }
+ });
+
+ emitter.on('copy', ({ url, location }) => {
+ copyToClipboard(url);
+ metrics.copiedLink({ location });
+ });
+
+ setInterval(() => {
+ // poll for rerendering the file list countdown timers
+ if (
+ state.route === '/' &&
+ state.storage.files.length > 0 &&
+ Date.now() - lastRender > 30000
+ ) {
+ render();
+ }
+ }, 60000);
+}
diff --git a/frontend/src/fileReceiver.js b/app/fileReceiver.js
similarity index 72%
rename from frontend/src/fileReceiver.js
rename to app/fileReceiver.js
index 13caafa5..5af6c34c 100644
--- a/frontend/src/fileReceiver.js
+++ b/app/fileReceiver.js
@@ -1,9 +1,9 @@
-import EventEmitter from 'events';
-import { hexToArray } from './utils';
+import Nanobus from 'nanobus';
+import { hexToArray, bytes } from './utils';
-export default class FileReceiver extends EventEmitter {
+export default class FileReceiver extends Nanobus {
constructor(url, k) {
- super();
+ super('FileReceiver');
this.key = window.crypto.subtle.importKey(
'jwk',
{
@@ -19,6 +19,23 @@ export default class FileReceiver extends EventEmitter {
['decrypt']
);
this.url = url;
+ this.msg = 'fileSizeProgress';
+ this.progress = [0, 1];
+ }
+
+ get progressRatio() {
+ return this.progress[0] / this.progress[1];
+ }
+
+ get sizes() {
+ return {
+ partialSize: bytes(this.progress[0]),
+ totalSize: bytes(this.progress[1])
+ };
+ }
+
+ cancel() {
+ // TODO
}
downloadFile() {
@@ -27,7 +44,8 @@ export default class FileReceiver extends EventEmitter {
xhr.onprogress = event => {
if (event.lengthComputable && event.target.status !== 404) {
- this.emit('progress', [event.loaded, event.total]);
+ this.progress = [event.loaded, event.total];
+ this.emit('progress', this.progress);
}
};
@@ -61,6 +79,7 @@ export default class FileReceiver extends EventEmitter {
async download() {
const key = await this.key;
const file = await this.downloadFile();
+ this.msg = 'decryptingFile';
this.emit('decrypting');
const plaintext = await window.crypto.subtle.decrypt(
{
@@ -71,6 +90,7 @@ export default class FileReceiver extends EventEmitter {
key,
file.data
);
+ this.msg = 'downloadFinish';
return {
plaintext,
name: decodeURIComponent(file.name),
diff --git a/frontend/src/fileSender.js b/app/fileSender.js
similarity index 67%
rename from frontend/src/fileSender.js
rename to app/fileSender.js
index 2073c121..37a5add1 100644
--- a/frontend/src/fileSender.js
+++ b/app/fileSender.js
@@ -1,10 +1,13 @@
-import EventEmitter from 'events';
-import { arrayToHex } from './utils';
+import Nanobus from 'nanobus';
+import { arrayToHex, bytes } from './utils';
-export default class FileSender extends EventEmitter {
+export default class FileSender extends Nanobus {
constructor(file) {
- super();
+ super('FileSender');
this.file = file;
+ this.msg = 'importingFile';
+ this.progress = [0, 1];
+ this.cancelled = false;
this.iv = window.crypto.getRandomValues(new Uint8Array(12));
this.uploadXHR = new XMLHttpRequest();
this.key = window.crypto.subtle.generateKey(
@@ -17,13 +20,13 @@ export default class FileSender extends EventEmitter {
);
}
- static delete(fileId, token) {
+ static delete(id, token) {
return new Promise((resolve, reject) => {
- if (!fileId || !token) {
+ if (!id || !token) {
return reject();
}
const xhr = new XMLHttpRequest();
- xhr.open('post', '/delete/' + fileId, true);
+ xhr.open('POST', `/api/delete/${id}`);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = () => {
@@ -36,8 +39,22 @@ export default class FileSender extends EventEmitter {
});
}
+ get progressRatio() {
+ return this.progress[0] / this.progress[1];
+ }
+
+ get sizes() {
+ return {
+ partialSize: bytes(this.progress[0]),
+ totalSize: bytes(this.progress[1])
+ };
+ }
+
cancel() {
- this.uploadXHR.abort();
+ this.cancelled = true;
+ if (this.msg === 'fileSizeProgress') {
+ this.uploadXHR.abort();
+ }
}
readFile() {
@@ -57,7 +74,7 @@ export default class FileSender extends EventEmitter {
uploadFile(encrypted, keydata) {
return new Promise((resolve, reject) => {
const file = this.file;
- const fileId = arrayToHex(this.iv);
+ const id = arrayToHex(this.iv);
const dataView = new DataView(encrypted);
const blob = new Blob([dataView], { type: file.type });
const fd = new FormData();
@@ -67,41 +84,49 @@ export default class FileSender extends EventEmitter {
xhr.upload.addEventListener('progress', e => {
if (e.lengthComputable) {
- this.emit('progress', [e.loaded, e.total]);
+ this.progress = [e.loaded, e.total];
+ this.emit('progress', this.progress);
}
});
xhr.onreadystatechange = () => {
if (xhr.readyState === XMLHttpRequest.DONE) {
if (xhr.status === 200) {
+ this.progress = [1, 1];
+ this.msg = 'notifyUploadDone';
const responseObj = JSON.parse(xhr.responseText);
return resolve({
url: responseObj.url,
- fileId: responseObj.id,
+ id: responseObj.id,
secretKey: keydata.k,
deleteToken: responseObj.delete
});
}
- reject(xhr.status);
+ this.msg = 'errorPageHeader';
+ reject(new Error(xhr.status));
}
};
- xhr.open('post', '/upload', true);
+ xhr.open('post', '/api/upload', true);
xhr.setRequestHeader(
'X-File-Metadata',
JSON.stringify({
- id: fileId,
+ id: id,
filename: encodeURIComponent(file.name)
})
);
xhr.send(fd);
+ this.msg = 'fileSizeProgress';
});
}
async upload() {
- this.emit('loading');
const key = await this.key;
const plaintext = await this.readFile();
+ if (this.cancelled) {
+ throw new Error(0);
+ }
+ this.msg = 'encryptingFile';
this.emit('encrypting');
const encrypted = await window.crypto.subtle.encrypt(
{
@@ -112,6 +137,9 @@ export default class FileSender extends EventEmitter {
key,
plaintext
);
+ if (this.cancelled) {
+ throw new Error(0);
+ }
const keydata = await window.crypto.subtle.exportKey('jwk', key);
return this.uploadFile(encrypted, keydata);
}
diff --git a/app/main.js b/app/main.js
new file mode 100644
index 00000000..39494995
--- /dev/null
+++ b/app/main.js
@@ -0,0 +1,38 @@
+import app from './routes';
+import log from 'choo-log';
+import locale from '../common/locales';
+import fileManager from './fileManager';
+import dragManager from './dragManager';
+import { canHasSend } from './utils';
+import assets from '../common/assets';
+import storage from './storage';
+import metrics from './metrics';
+import Raven from 'raven-js';
+
+if (navigator.doNotTrack !== '1' && window.RAVEN_CONFIG) {
+ Raven.config(window.SENTRY_ID, window.RAVEN_CONFIG).install();
+}
+
+app.use(log());
+
+app.use((state, emitter) => {
+ // init state
+ state.transfer = null;
+ state.fileInfo = null;
+ state.translate = locale.getTranslator();
+ state.storage = storage;
+ state.raven = Raven;
+ emitter.on('DOMContentLoaded', async () => {
+ const ok = await canHasSend(assets.get('cryptofill.js'));
+ if (!ok) {
+ const reason = /firefox/i.test(navigator.userAgent) ? 'outdated' : 'gcm';
+ emitter.emit('replaceState', `/unsupported/${reason}`);
+ }
+ });
+});
+
+app.use(metrics);
+app.use(fileManager);
+app.use(dragManager);
+
+app.mount('#page-one');
diff --git a/frontend/src/metrics.js b/app/metrics.js
similarity index 73%
rename from frontend/src/metrics.js
rename to app/metrics.js
index 9a0167d7..61f99971 100644
--- a/frontend/src/metrics.js
+++ b/app/metrics.js
@@ -1,12 +1,11 @@
import testPilotGA from 'testpilot-ga/src/TestPilotGA';
-import Storage from './storage';
-const storage = new Storage();
+import storage from './storage';
let hasLocalStorage = false;
try {
- hasLocalStorage = !!localStorage;
+ hasLocalStorage = typeof localStorage !== 'undefined';
} catch (e) {
- // don't care
+ // when disabled, any mention of localStorage throws an error
}
const analytics = new testPilotGA({
@@ -15,14 +14,19 @@ const analytics = new testPilotGA({
tid: window.GOOGLE_ANALYTICS_ID
});
-const category = location.pathname.includes('/download')
- ? 'recipient'
- : 'sender';
+let appState = null;
-document.addEventListener('DOMContentLoaded', function() {
- addExitHandlers();
- addRestartHandlers();
-});
+export default function initialize(state, emitter) {
+ appState = state;
+ emitter.on('DOMContentLoaded', () => {
+ addExitHandlers();
+ //TODO restart handlers... somewhere
+ });
+}
+
+function category() {
+ return appState.route === '/' ? 'sender' : 'recipient';
+}
function sendEvent() {
return (
@@ -62,11 +66,11 @@ function urlToMetric(url) {
}
function setReferrer(state) {
- if (category === 'sender') {
+ if (category() === 'sender') {
if (state) {
storage.referrer = `${state}-upload`;
}
- } else if (category === 'recipient') {
+ } else if (category() === 'recipient') {
if (state) {
storage.referrer = `${state}-download`;
}
@@ -87,10 +91,10 @@ function takeReferrer() {
}
function startedUpload(params) {
- return sendEvent(category, 'upload-started', {
+ return sendEvent('sender', 'upload-started', {
cm1: params.size,
cm5: storage.totalUploads,
- cm6: storage.numFiles + 1,
+ cm6: storage.files.length + 1,
cm7: storage.totalDownloads,
cd1: params.type,
cd5: takeReferrer()
@@ -99,10 +103,10 @@ function startedUpload(params) {
function cancelledUpload(params) {
setReferrer('cancelled');
- return sendEvent(category, 'upload-stopped', {
+ return sendEvent('sender', 'upload-stopped', {
cm1: params.size,
cm5: storage.totalUploads,
- cm6: storage.numFiles,
+ cm6: storage.files.length,
cm7: storage.totalDownloads,
cd1: params.type,
cd2: 'cancelled'
@@ -110,12 +114,12 @@ function cancelledUpload(params) {
}
function completedUpload(params) {
- return sendEvent(category, 'upload-stopped', {
+ return sendEvent('sender', 'upload-stopped', {
cm1: params.size,
cm2: params.time,
cm3: params.speed,
cm5: storage.totalUploads,
- cm6: storage.numFiles,
+ cm6: storage.files.length,
cm7: storage.totalDownloads,
cd1: params.type,
cd2: 'completed'
@@ -123,20 +127,20 @@ function completedUpload(params) {
}
function startedDownload(params) {
- return sendEvent(category, 'download-started', {
+ return sendEvent('recipient', 'download-started', {
cm1: params.size,
cm4: params.ttl,
cm5: storage.totalUploads,
- cm6: storage.numFiles,
+ cm6: storage.files.length,
cm7: storage.totalDownloads
});
}
function stoppedDownload(params) {
- return sendEvent(category, 'download-stopped', {
+ return sendEvent('recipient', 'download-stopped', {
cm1: params.size,
cm5: storage.totalUploads,
- cm6: storage.numFiles,
+ cm6: storage.files.length,
cm7: storage.totalDownloads,
cd2: 'errored',
cd6: params.err
@@ -145,20 +149,20 @@ function stoppedDownload(params) {
function cancelledDownload(params) {
setReferrer('cancelled');
- return sendEvent(category, 'download-stopped', {
+ return sendEvent('recipient', 'download-stopped', {
cm1: params.size,
cm5: storage.totalUploads,
- cm6: storage.numFiles,
+ cm6: storage.files.length,
cm7: storage.totalDownloads,
cd2: 'cancelled'
});
}
function stoppedUpload(params) {
- return sendEvent(category, 'upload-stopped', {
+ return sendEvent('sender', 'upload-stopped', {
cm1: params.size,
cm5: storage.totalUploads,
- cm6: storage.numFiles,
+ cm6: storage.files.length,
cm7: storage.totalDownloads,
cd1: params.type,
cd2: 'errored',
@@ -167,25 +171,25 @@ function stoppedUpload(params) {
}
function completedDownload(params) {
- return sendEvent(category, 'download-stopped', {
+ return sendEvent('recipient', 'download-stopped', {
cm1: params.size,
cm2: params.time,
cm3: params.speed,
cm5: storage.totalUploads,
- cm6: storage.numFiles,
+ cm6: storage.files.length,
cm7: storage.totalDownloads,
cd2: 'completed'
});
}
function deletedUpload(params) {
- return sendEvent(category, 'upload-deleted', {
+ return sendEvent(category(), 'upload-deleted', {
cm1: params.size,
cm2: params.time,
cm3: params.speed,
cm4: params.ttl,
cm5: storage.totalUploads,
- cm6: storage.numFiles,
+ cm6: storage.files.length,
cm7: storage.totalDownloads,
cd1: params.type,
cd4: params.location
@@ -193,19 +197,19 @@ function deletedUpload(params) {
}
function unsupported(params) {
- return sendEvent(category, 'unsupported', {
+ return sendEvent(category(), 'unsupported', {
cd6: params.err
});
}
function copiedLink(params) {
- return sendEvent(category, 'copied', {
+ return sendEvent('sender', 'copied', {
cd4: params.location
});
}
function exitEvent(target) {
- return sendEvent(category, 'exited', {
+ return sendEvent(category(), 'exited', {
cd3: urlToMetric(target.currentTarget.href)
});
}
@@ -219,21 +223,13 @@ function addExitHandlers() {
});
}
-function restartEvent(state) {
+function restart(state) {
setReferrer(state);
- return sendEvent(category, 'restarted', {
+ return sendEvent(category(), 'restarted', {
cd2: state
});
}
-function addRestartHandlers() {
- const elements = Array.from(document.querySelectorAll('.send-new'));
- elements.forEach(el => {
- const state = el.getAttribute('data-state');
- el.addEventListener('click', restartEvent.bind(null, state));
- });
-}
-
export {
copiedLink,
startedUpload,
@@ -245,5 +241,6 @@ export {
cancelledDownload,
stoppedDownload,
completedDownload,
+ restart,
unsupported
};
diff --git a/app/routes/download.js b/app/routes/download.js
new file mode 100644
index 00000000..0b935028
--- /dev/null
+++ b/app/routes/download.js
@@ -0,0 +1,9 @@
+const preview = require('../templates/preview');
+const download = require('../templates/download');
+
+module.exports = function(state, emit) {
+ if (state.transfer) {
+ return download(state, emit);
+ }
+ return preview(state, emit);
+};
diff --git a/app/routes/home.js b/app/routes/home.js
new file mode 100644
index 00000000..2be53047
--- /dev/null
+++ b/app/routes/home.js
@@ -0,0 +1,9 @@
+const welcome = require('../templates/welcome');
+const upload = require('../templates/upload');
+
+module.exports = function(state, emit) {
+ if (state.transfer) {
+ return upload(state, emit);
+ }
+ return welcome(state, emit);
+};
diff --git a/app/routes/index.js b/app/routes/index.js
new file mode 100644
index 00000000..08b84705
--- /dev/null
+++ b/app/routes/index.js
@@ -0,0 +1,17 @@
+const choo = require('choo');
+const download = require('./download');
+
+const app = choo();
+
+app.route('/', require('./home'));
+app.route('/share/:id', require('../templates/share'));
+app.route('/download/:id', download);
+app.route('/download/:id/:key', download);
+app.route('/completed', require('../templates/completed'));
+app.route('/unsupported/:reason', require('../templates/unsupported'));
+app.route('/legal', require('../templates/legal'));
+app.route('/error', require('../templates/error'));
+app.route('/blank', require('../templates/blank'));
+app.route('*', require('../templates/notFound'));
+
+module.exports = app;
diff --git a/frontend/src/storage.js b/app/storage.js
similarity index 75%
rename from frontend/src/storage.js
rename to app/storage.js
index 28f14b89..75483b42 100644
--- a/frontend/src/storage.js
+++ b/app/storage.js
@@ -26,13 +26,30 @@ class Mem {
}
}
-export default class Storage {
+class Storage {
constructor() {
try {
this.engine = localStorage || new Mem();
} catch (e) {
this.engine = new Mem();
}
+ this._files = this.loadFiles();
+ }
+
+ loadFiles() {
+ const fs = [];
+ for (let i = 0; i < this.engine.length; i++) {
+ const k = this.engine.key(i);
+ if (isFile(k)) {
+ try {
+ fs.push(JSON.parse(this.engine.getItem(k)));
+ } catch (err) {
+ // obviously you're not a golfer
+ this.engine.removeItem(k);
+ }
+ }
+ }
+ return fs.sort((a, b) => a.createdAt - b.createdAt);
}
get totalDownloads() {
@@ -55,34 +72,7 @@ export default class Storage {
}
get files() {
- const fs = [];
- for (let i = 0; i < this.engine.length; i++) {
- const k = this.engine.key(i);
- if (isFile(k)) {
- try {
- fs.push(JSON.parse(this.engine.getItem(k)));
- } catch (err) {
- // obviously you're not a golfer
- this.engine.removeItem(k);
- }
- }
- }
- return fs.sort((file1, file2) => {
- const creationDate1 = new Date(file1.creationDate);
- const creationDate2 = new Date(file2.creationDate);
- return creationDate1 - creationDate2;
- });
- }
-
- get numFiles() {
- let length = 0;
- for (let i = 0; i < this.engine.length; i++) {
- const k = this.engine.key(i);
- if (isFile(k)) {
- length += 1;
- }
- }
- return length;
+ return this._files;
}
getFileById(id) {
@@ -94,10 +84,16 @@ export default class Storage {
}
remove(property) {
+ if (isFile(property)) {
+ this._files.splice(this._files.findIndex(f => f.id === property), 1);
+ }
this.engine.removeItem(property);
}
- addFile(id, file) {
- this.engine.setItem(id, JSON.stringify(file));
+ addFile(file) {
+ this._files.push(file);
+ this.engine.setItem(file.id, JSON.stringify(file));
}
}
+
+export default new Storage();
diff --git a/app/templates/blank.js b/app/templates/blank.js
new file mode 100644
index 00000000..377b9817
--- /dev/null
+++ b/app/templates/blank.js
@@ -0,0 +1,9 @@
+const html = require('choo/html');
+
+module.exports = function(state) {
+ const div = html`
`;
+ if (state.layout) {
+ return state.layout(state, div);
+ }
+ return div;
+};
diff --git a/app/templates/completed.js b/app/templates/completed.js
new file mode 100644
index 00000000..3ebc5020
--- /dev/null
+++ b/app/templates/completed.js
@@ -0,0 +1,31 @@
+const html = require('choo/html');
+const progress = require('./progress');
+const { fadeOut } = require('../utils');
+
+module.exports = function(state, emit) {
+ const div = html`
+
+ `;
+
+ async function sendNew(e) {
+ e.preventDefault();
+ await fadeOut('download');
+ emit('pushState', '/');
+ }
+
+ return div;
+};
diff --git a/app/templates/download.js b/app/templates/download.js
new file mode 100644
index 00000000..38fff942
--- /dev/null
+++ b/app/templates/download.js
@@ -0,0 +1,28 @@
+const html = require('choo/html');
+const progress = require('./progress');
+const { bytes } = require('../utils');
+
+module.exports = function(state) {
+ const transfer = state.transfer;
+ const div = html`
+
+
${state.translate(
+ 'downloadingPageProgress',
+ {
+ filename: state.fileInfo.name,
+ size: bytes(state.fileInfo.size)
+ }
+ )}
+
${state.translate('downloadingPageMessage')}
+ ${progress(transfer.progressRatio)}
+
+
${state.translate(
+ transfer.msg,
+ transfer.sizes
+ )}
+
+
+ `;
+
+ return div;
+};
diff --git a/app/templates/error.js b/app/templates/error.js
new file mode 100644
index 00000000..074dba71
--- /dev/null
+++ b/app/templates/error.js
@@ -0,0 +1,12 @@
+const html = require('choo/html');
+const assets = require('../../common/assets');
+
+module.exports = function(state) {
+ return html`
+
+
${state.translate('errorPageHeader')}
+
+
`;
+};
diff --git a/app/templates/file.js b/app/templates/file.js
new file mode 100644
index 00000000..4c20d641
--- /dev/null
+++ b/app/templates/file.js
@@ -0,0 +1,84 @@
+const html = require('choo/html');
+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);
+ if (hours >= 1) {
+ return `${hours}h ${minutes % 60}m`;
+ } else if (hours === 0) {
+ return `${minutes}m ${seconds}s`;
+ }
+ return null;
+}
+
+module.exports = function(file, state, emit) {
+ const ttl = file.expiresAt - Date.now();
+ const remaining = timeLeft(ttl) || state.translate('linkExpiredAlt');
+ const row = html`
+
+ ${file.name} |
+
+
+ ${state.translate(
+ 'copiedUrl'
+ )}
+ |
+ ${remaining} |
+
+
+
+ |
+
+ `;
+
+ function copyClick(e) {
+ emit('copy', { url: file.url, location: 'upload-list' });
+ const icon = e.target;
+ const text = e.target.nextSibling;
+ icon.hidden = true;
+ text.hidden = false;
+ setTimeout(() => {
+ icon.hidden = false;
+ text.hidden = true;
+ }, 500);
+ }
+
+ function showPopup() {
+ const tr = document.getElementById(file.id);
+ const popup = tr.querySelector('.popuptext');
+ popup.classList.add('show');
+ popup.focus();
+ }
+
+ function cancel(e) {
+ e.stopPropagation();
+ const tr = document.getElementById(file.id);
+ const popup = tr.querySelector('.popuptext');
+ popup.classList.remove('show');
+ }
+
+ function deleteFile() {
+ emit('delete', { file, location: 'upload-list' });
+ emit('render');
+ }
+
+ return row;
+};
diff --git a/app/templates/fileList.js b/app/templates/fileList.js
new file mode 100644
index 00000000..c5961239
--- /dev/null
+++ b/app/templates/fileList.js
@@ -0,0 +1,28 @@
+const html = require('choo/html');
+const file = require('./file');
+
+module.exports = function(state, emit) {
+ let table = '';
+ if (state.storage.files.length) {
+ table = html`
+
+
+
+ ${state.translate('uploadedFile')} |
+ ${state.translate('copyFileList')} |
+ ${state.translate('expiryFileList')} |
+ ${state.translate('deleteFileList')} |
+
+
+
+ ${state.storage.files.map(f => file(f, state, emit))}
+
+
+ `;
+ }
+ return html`
+
+ ${table}
+
+ `;
+};
diff --git a/app/templates/legal.js b/app/templates/legal.js
new file mode 100644
index 00000000..9fa3f0f5
--- /dev/null
+++ b/app/templates/legal.js
@@ -0,0 +1,38 @@
+const html = require('choo/html');
+
+function replaceLinks(str, urls) {
+ let i = -1;
+ const s = str.replace(/([^<]+)<\/a>/g, (m, v) => {
+ i++;
+ return `${v}`;
+ });
+ return [`${s}
`];
+}
+
+module.exports = function(state) {
+ const div = html`
+
+
+
${state.translate('legalHeader')}
+ ${html(
+ replaceLinks(state.translate('legalNoticeTestPilot'), [
+ 'https://testpilot.firefox.com/terms',
+ 'https://testpilot.firefox.com/privacy',
+ 'https://testpilot.firefox.com/experiments/send'
+ ])
+ )}
+ ${html(
+ replaceLinks(state.translate('legalNoticeMozilla'), [
+ 'https://www.mozilla.org/privacy/websites/',
+ 'https://www.mozilla.org/about/legal/terms/mozilla/'
+ ])
+ )}
+
+
+ `;
+
+ if (state.layout) {
+ return state.layout(state, div);
+ }
+ return div;
+};
diff --git a/app/templates/notFound.js b/app/templates/notFound.js
new file mode 100644
index 00000000..c08a9ddf
--- /dev/null
+++ b/app/templates/notFound.js
@@ -0,0 +1,27 @@
+const html = require('choo/html');
+const assets = require('../../common/assets');
+
+module.exports = function(state) {
+ const div = html`
+ `;
+
+ if (state.layout) {
+ return state.layout(state, div);
+ }
+ return div;
+};
diff --git a/app/templates/preview.js b/app/templates/preview.js
new file mode 100644
index 00000000..44ba951b
--- /dev/null
+++ b/app/templates/preview.js
@@ -0,0 +1,65 @@
+const html = require('choo/html');
+const assets = require('../../common/assets');
+const notFound = require('./notFound');
+const { bytes } = require('../utils');
+
+function getFileFromDOM() {
+ const el = document.getElementById('dl-file');
+ if (!el) {
+ return null;
+ }
+ const data = el.dataset;
+ return {
+ name: data.name,
+ size: parseInt(data.size, 10),
+ ttl: parseInt(data.ttl, 10)
+ };
+}
+
+module.exports = function(state, emit) {
+ state.fileInfo = state.fileInfo || getFileFromDOM();
+ if (!state.fileInfo) {
+ return notFound(state, emit);
+ }
+ state.fileInfo.id = state.params.id;
+ state.fileInfo.key = state.params.key;
+ const fileInfo = state.fileInfo;
+ const size = bytes(fileInfo.size);
+ const div = html`
+
+
+
+
+ ${state.translate('downloadFileName', {
+ filename: fileInfo.name
+ })}
+ ${' ' +
+ state.translate('downloadFileSize', { size })}
+
+
${state.translate('downloadMessage')}
+
+
+
+
+
+
${state.translate('sendYourFilesLink')}
+
+
+ `;
+ function download(event) {
+ event.preventDefault();
+ emit('download', fileInfo);
+ }
+
+ if (state.layout) {
+ return state.layout(state, div);
+ }
+ return div;
+};
diff --git a/app/templates/progress.js b/app/templates/progress.js
new file mode 100644
index 00000000..c83a5e88
--- /dev/null
+++ b/app/templates/progress.js
@@ -0,0 +1,21 @@
+const html = require('choo/html');
+
+const radius = 73;
+const oRadius = radius + 10;
+const oDiameter = oRadius * 2;
+const circumference = 2 * Math.PI * radius;
+
+module.exports = function(progressRatio) {
+ const dashOffset = (1 - progressRatio) * circumference;
+ const percent = Math.floor(progressRatio * 100);
+ const div = html`
+
+
+
+ `;
+ return div;
+};
diff --git a/app/templates/share.js b/app/templates/share.js
new file mode 100644
index 00000000..b16d9932
--- /dev/null
+++ b/app/templates/share.js
@@ -0,0 +1,61 @@
+const html = require('choo/html');
+const assets = require('../../common/assets');
+const notFound = require('./notFound');
+const { allowedCopy, delay, fadeOut } = require('../utils');
+
+module.exports = function(state, emit) {
+ const file = state.storage.getFileById(state.params.id);
+ if (!file) {
+ return notFound(state, emit);
+ }
+ const div = html`
+
+
${state.translate('uploadSuccessTimingHeader')}
+
+
+ `;
+
+ async function sendNew(e) {
+ e.preventDefault();
+ await fadeOut('share-link');
+ emit('pushState', '/');
+ }
+
+ async function copyLink() {
+ if (allowedCopy()) {
+ emit('copy', { url: file.url, location: 'success-screen' });
+ const copyBtn = document.getElementById('copy-btn');
+ copyBtn.disabled = true;
+ copyBtn.replaceChild(
+ html``,
+ copyBtn.firstChild
+ );
+ await delay(2000);
+ copyBtn.disabled = false;
+ copyBtn.textContent = state.translate('copyUrlFormButton');
+ }
+ }
+
+ async function deleteFile() {
+ emit('delete', { file, location: 'success-screen' });
+ await fadeOut('share-link');
+ emit('pushState', '/');
+ }
+ return div;
+};
diff --git a/app/templates/unsupported.js b/app/templates/unsupported.js
new file mode 100644
index 00000000..a4a7a60d
--- /dev/null
+++ b/app/templates/unsupported.js
@@ -0,0 +1,50 @@
+const html = require('choo/html');
+const assets = require('../../common/assets');
+
+module.exports = function(state) {
+ const msg =
+ state.params.reason === 'outdated'
+ ? html`
+ `
+ : html`
+ `;
+ const div = html`${msg}
`;
+
+ if (state.layout) {
+ return state.layout(state, div);
+ }
+ return div;
+};
diff --git a/app/templates/upload.js b/app/templates/upload.js
new file mode 100644
index 00000000..15ab54c6
--- /dev/null
+++ b/app/templates/upload.js
@@ -0,0 +1,38 @@
+const html = require('choo/html');
+const progress = require('./progress');
+const { bytes } = require('../utils');
+
+module.exports = function(state, emit) {
+ const transfer = state.transfer;
+
+ const div = html`
+
+
${state.translate(
+ 'uploadingPageProgress',
+ {
+ filename: transfer.file.name,
+ size: bytes(transfer.file.size)
+ }
+ )}
+
+ ${progress(transfer.progressRatio)}
+
+
${state.translate(
+ transfer.msg,
+ transfer.sizes
+ )}
+
+
+
+ `;
+
+ function cancel() {
+ const btn = document.getElementById('cancel-upload');
+ btn.disabled = true;
+ btn.textContent = state.translate('uploadCancelNotification');
+ emit('cancel');
+ }
+ return div;
+};
diff --git a/app/templates/welcome.js b/app/templates/welcome.js
new file mode 100644
index 00000000..da7e753f
--- /dev/null
+++ b/app/templates/welcome.js
@@ -0,0 +1,55 @@
+const html = require('choo/html');
+const assets = require('../../common/assets');
+const fileList = require('./fileList');
+const { fadeOut } = require('../utils');
+
+module.exports = function(state, emit) {
+ const div = html`
+
+
${state.translate('uploadPageHeader')}
+
+
+
+
${state.translate('uploadPageDropMessage')}
+
${state.translate(
+ 'uploadPageSizeMessage'
+ )}
+
+
+ ${fileList(state, emit)}
+
+ `;
+
+ function dragover(event) {
+ event.target.classList.add('ondrag');
+ }
+
+ function dragleave(event) {
+ event.target.classList.remove('ondrag');
+ }
+
+ async function upload(event) {
+ event.preventDefault();
+ const target = event.target;
+ const file = target.files[0];
+ await fadeOut('page-one');
+ emit('upload', { file, type: 'click' });
+ }
+
+ if (state.layout) {
+ return state.layout(state, div);
+ }
+ return div;
+};
diff --git a/frontend/src/utils.js b/app/utils.js
similarity index 68%
rename from frontend/src/utils.js
rename to app/utils.js
index 8a7ae84e..61bf742a 100644
--- a/frontend/src/utils.js
+++ b/app/utils.js
@@ -35,47 +35,39 @@ function notify(str) {
*/
}
-function gcmCompliant() {
+function loadShim(polyfill) {
+ return new Promise((resolve, reject) => {
+ const shim = document.createElement('script');
+ shim.src = polyfill;
+ shim.addEventListener('load', () => resolve(true));
+ shim.addEventListener('error', () => resolve(false));
+ document.head.appendChild(shim);
+ });
+}
+
+async function canHasSend(polyfill) {
try {
- return window.crypto.subtle
- .generateKey(
- {
- name: 'AES-GCM',
- length: 128
- },
- true,
- ['encrypt', 'decrypt']
- )
- .then(key => {
- return window.crypto.subtle
- .encrypt(
- {
- name: 'AES-GCM',
- iv: window.crypto.getRandomValues(new Uint8Array(12)),
- additionalData: window.crypto.getRandomValues(new Uint8Array(6)),
- tagLength: 128
- },
- key,
- new ArrayBuffer(8)
- )
- .then(() => {
- return Promise.resolve();
- });
- })
- .catch(err => {
- return loadShim();
- });
+ const key = await window.crypto.subtle.generateKey(
+ {
+ name: 'AES-GCM',
+ length: 128
+ },
+ true,
+ ['encrypt', 'decrypt']
+ );
+
+ await window.crypto.subtle.encrypt(
+ {
+ name: 'AES-GCM',
+ iv: window.crypto.getRandomValues(new Uint8Array(12)),
+ tagLength: 128
+ },
+ key,
+ new ArrayBuffer(8)
+ );
+ return true;
} catch (err) {
- return loadShim();
- }
- function loadShim() {
- return new Promise((resolve, reject) => {
- const shim = document.createElement('script');
- shim.src = '/cryptofill.js';
- shim.addEventListener('load', resolve);
- shim.addEventListener('error', reject);
- document.head.appendChild(shim);
- });
+ return loadShim(polyfill);
}
}
@@ -107,7 +99,8 @@ function copyToClipboard(str) {
const LOCALIZE_NUMBERS = !!(
typeof Intl === 'object' &&
Intl &&
- typeof Intl.NumberFormat === 'function'
+ typeof Intl.NumberFormat === 'function' &&
+ typeof navigator === 'object'
);
const UNITS = ['B', 'kB', 'MB', 'GB'];
@@ -134,9 +127,22 @@ function allowedCopy() {
return support ? document.queryCommandSupported('copy') : false;
}
+function delay(delay = 100) {
+ return new Promise(resolve => setTimeout(resolve, delay));
+}
+
+function fadeOut(id) {
+ const classes = document.getElementById(id).classList;
+ classes.remove('fadeIn');
+ classes.add('fadeOut');
+ return delay(300);
+}
+
const ONE_DAY_IN_MS = 86400000;
-export {
+module.exports = {
+ fadeOut,
+ delay,
allowedCopy,
bytes,
percent,
@@ -144,7 +150,7 @@ export {
arrayToHex,
hexToArray,
notify,
- gcmCompliant,
+ canHasSend,
isFile,
ONE_DAY_IN_MS
};
diff --git a/public/resources/check-16.svg b/assets/check-16.svg
similarity index 100%
rename from public/resources/check-16.svg
rename to assets/check-16.svg
diff --git a/public/resources/close-16.svg b/assets/close-16.svg
similarity index 66%
rename from public/resources/close-16.svg
rename to assets/close-16.svg
index 8f143c5b..21207a15 100644
--- a/public/resources/close-16.svg
+++ b/assets/close-16.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
diff --git a/public/resources/copy-16.svg b/assets/copy-16.svg
similarity index 100%
rename from public/resources/copy-16.svg
rename to assets/copy-16.svg
diff --git a/public/cryptofill.js b/assets/cryptofill.js
similarity index 100%
rename from public/cryptofill.js
rename to assets/cryptofill.js
diff --git a/public/resources/favicon-32x32.png b/assets/favicon-32x32.png
similarity index 100%
rename from public/resources/favicon-32x32.png
rename to assets/favicon-32x32.png
diff --git a/public/resources/feedback.svg b/assets/feedback.svg
similarity index 100%
rename from public/resources/feedback.svg
rename to assets/feedback.svg
diff --git a/public/resources/firefox_logo-only.svg b/assets/firefox_logo-only.svg
similarity index 100%
rename from public/resources/firefox_logo-only.svg
rename to assets/firefox_logo-only.svg
diff --git a/public/resources/github-icon.svg b/assets/github-icon.svg
similarity index 100%
rename from public/resources/github-icon.svg
rename to assets/github-icon.svg
diff --git a/public/resources/illustration_download.svg b/assets/illustration_download.svg
similarity index 100%
rename from public/resources/illustration_download.svg
rename to assets/illustration_download.svg
diff --git a/public/resources/illustration_error.svg b/assets/illustration_error.svg
similarity index 100%
rename from public/resources/illustration_error.svg
rename to assets/illustration_error.svg
diff --git a/public/resources/illustration_expired.svg b/assets/illustration_expired.svg
similarity index 100%
rename from public/resources/illustration_expired.svg
rename to assets/illustration_expired.svg
diff --git a/frontend/src/main.css b/assets/main.css
similarity index 96%
rename from frontend/src/main.css
rename to assets/main.css
index ad670f0a..7641d932 100644
--- a/frontend/src/main.css
+++ b/assets/main.css
@@ -1,6 +1,6 @@
/*** index.html ***/
html {
- background: url('../../public/resources/send_bg.svg');
+ background: url('./send_bg.svg');
font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'segoe ui',
'helvetica neue', helvetica, ubuntu, roboto, noto, arial, sans-serif;
font-weight: 200;
@@ -89,7 +89,7 @@ body {
.feedback {
background-color: #0297f8;
- background-image: url('../../public/resources/feedback.svg');
+ background-image: url('./feedback.svg');
background-position: 2px 4px;
background-repeat: no-repeat;
background-size: 18px;
@@ -154,6 +154,36 @@ a {
/** page-one **/
+.fadeOut {
+ opacity: 0;
+ animation: fadeout 200ms linear;
+}
+
+@keyframes fadeout {
+ 0% {
+ opacity: 1;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+
+.fadeIn {
+ opacity: 1;
+ animation: fadein 200ms linear;
+}
+
+@keyframes fadein {
+ 0% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 1;
+ }
+}
+
.title {
font-size: 33px;
line-height: 40px;
@@ -431,12 +461,8 @@ tbody {
}
.percentage {
- position: absolute;
letter-spacing: -0.78px;
font-family: 'Segoe UI', 'SF Pro Text', sans-serif;
- top: 50px;
- left: 50%;
- transform: translateX(-45%);
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
@@ -449,7 +475,8 @@ tbody {
.percent-sign {
font-size: 28.8px;
- color: rgb(104, 104, 104);
+ stroke: none;
+ fill: #686868;
}
.upload {
@@ -471,10 +498,18 @@ tbody {
#cancel-upload {
color: #d70022;
+ background: #fff;
+ font-size: 15px;
+ border: 0;
cursor: pointer;
text-decoration: underline;
}
+#cancel-upload:disabled {
+ text-decoration: none;
+ cursor: auto;
+}
+
/** share-link **/
#share-window {
margin: 0 auto;
@@ -624,7 +659,7 @@ tbody {
#update-firefox {
margin-bottom: 181px;
height: 80px;
- background: #12bc00;
+ background: #98e02b;
border-radius: 3px;
cursor: pointer;
border: 0;
diff --git a/public/resources/mozilla-logo.svg b/assets/mozilla-logo.svg
similarity index 100%
rename from public/resources/mozilla-logo.svg
rename to assets/mozilla-logo.svg
diff --git a/public/resources/send-fb.jpg b/assets/send-fb.jpg
similarity index 100%
rename from public/resources/send-fb.jpg
rename to assets/send-fb.jpg
diff --git a/public/resources/send-twitter.jpg b/assets/send-twitter.jpg
similarity index 100%
rename from public/resources/send-twitter.jpg
rename to assets/send-twitter.jpg
diff --git a/public/resources/send_bg.svg b/assets/send_bg.svg
similarity index 100%
rename from public/resources/send_bg.svg
rename to assets/send_bg.svg
diff --git a/public/resources/send_logo.svg b/assets/send_logo.svg
similarity index 100%
rename from public/resources/send_logo.svg
rename to assets/send_logo.svg
diff --git a/public/resources/twitter-icon.svg b/assets/twitter-icon.svg
similarity index 100%
rename from public/resources/twitter-icon.svg
rename to assets/twitter-icon.svg
diff --git a/public/resources/upload.svg b/assets/upload.svg
similarity index 100%
rename from public/resources/upload.svg
rename to assets/upload.svg
diff --git a/build/fluent_loader.js b/build/fluent_loader.js
new file mode 100644
index 00000000..8ba41928
--- /dev/null
+++ b/build/fluent_loader.js
@@ -0,0 +1,38 @@
+const { MessageContext } = require('fluent');
+
+function toJSON(map) {
+ return JSON.stringify(Array.from(map));
+}
+
+module.exports = function(source) {
+ const localeExp = this.options.locale || /([^/]+)\/[^/]+\.ftl$/;
+ const result = localeExp.exec(this.resourcePath);
+ const locale = result && result[1];
+ // pre-parse the ftl
+ const context = new MessageContext(locale);
+ context.addMessages(source);
+ if (!locale) {
+ throw new Error(`couldn't find locale in: ${this.resourcePath}`);
+ }
+ return `
+module.exports = \`
+if (typeof window === 'undefined') {
+ var fluent = require('fluent');
+}
+var ctx = new fluent.MessageContext('${locale}', {useIsolating: false});
+ctx._messages = new Map(${toJSON(context._messages)});
+function translate(id, data) {
+ var msg = ctx.getMessage(id);
+ if (typeof(msg) !== 'string' && !msg.val && msg.attrs) {
+ msg = msg.attrs.title || msg.attrs.alt
+ }
+ return ctx.format(msg, data);
+}
+if (typeof window === 'undefined') {
+ module.exports = translate;
+}
+else {
+ window.translate = translate;
+}
+\``;
+};
diff --git a/build/generate_asset_map.js b/build/generate_asset_map.js
new file mode 100644
index 00000000..d1efebb1
--- /dev/null
+++ b/build/generate_asset_map.js
@@ -0,0 +1,19 @@
+const fs = require('fs');
+const path = require('path');
+
+function kv(f) {
+ return `"${f}": require('../assets/${f}')`;
+}
+
+module.exports = function() {
+ const files = fs.readdirSync(path.join(__dirname, '..', 'assets'));
+ const code = `module.exports = {
+ "package.json": require('../package.json'),
+ ${files.map(kv).join(',\n')}
+ };`;
+ return {
+ code,
+ dependencies: files.map(f => require.resolve('../assets/' + f)),
+ cacheable: false
+ };
+};
diff --git a/build/generate_l10n_map.js b/build/generate_l10n_map.js
new file mode 100644
index 00000000..57f73ab4
--- /dev/null
+++ b/build/generate_l10n_map.js
@@ -0,0 +1,22 @@
+const fs = require('fs');
+const path = require('path');
+
+function kv(d) {
+ return `"${d}": require('../public/locales/${d}/send.ftl')`;
+}
+
+module.exports = function() {
+ const dirs = fs.readdirSync(path.join(__dirname, '..', 'public', 'locales'));
+ const code = `
+ module.exports = {
+ translate: function (id, data) { return window.translate(id, data) },
+ ${dirs.map(kv).join(',\n')}
+ };`;
+ return {
+ code,
+ dependencies: dirs.map(d =>
+ require.resolve(`../public/locales/${d}/send.ftl`)
+ ),
+ cacheable: false
+ };
+};
diff --git a/build/package_json_loader.js b/build/package_json_loader.js
new file mode 100644
index 00000000..a03678f5
--- /dev/null
+++ b/build/package_json_loader.js
@@ -0,0 +1,11 @@
+const commit = require('git-rev-sync').short();
+
+module.exports = function(source) {
+ const pkg = JSON.parse(source);
+ const version = {
+ commit,
+ source: pkg.homepage,
+ version: process.env.CIRCLE_TAG || `v${pkg.version}`
+ };
+ return `module.exports = '${JSON.stringify(version)}'`;
+};
diff --git a/common/assets.js b/common/assets.js
new file mode 100644
index 00000000..b1db9acf
--- /dev/null
+++ b/common/assets.js
@@ -0,0 +1,32 @@
+const genmap = require('../build/generate_asset_map');
+const isServer = typeof genmap === 'function';
+const prefix = isServer ? '/' : '';
+let manifest = {};
+try {
+ //eslint-disable-next-line node/no-missing-require
+ manifest = require('../dist/manifest.json');
+} catch (e) {
+ // use middleware
+}
+
+const assets = isServer ? manifest : genmap;
+
+function getAsset(name) {
+ return prefix + assets[name];
+}
+
+const instance = {
+ get: getAsset,
+ setMiddleware: function(middleware) {
+ if (middleware) {
+ instance.get = function getAssetWithMiddleware(name) {
+ const f = middleware.fileSystem.readFileSync(
+ middleware.getFilenameFromUrl('/manifest.json')
+ );
+ return prefix + JSON.parse(f)[name];
+ };
+ }
+ }
+};
+
+module.exports = instance;
diff --git a/common/locales.js b/common/locales.js
new file mode 100644
index 00000000..17eb9c2a
--- /dev/null
+++ b/common/locales.js
@@ -0,0 +1,51 @@
+const gen = require('../build/generate_l10n_map');
+
+const isServer = typeof gen === 'function';
+const prefix = isServer ? '/' : '';
+let manifest = {};
+try {
+ //eslint-disable-next-line node/no-missing-require
+ manifest = require('../dist/manifest.json');
+} catch (e) {
+ // use middleware
+}
+
+const locales = isServer ? manifest : gen;
+
+function getLocale(name) {
+ return prefix + locales[`public/locales/${name}/send.ftl`];
+}
+
+function serverTranslator(name) {
+ return require(`../dist/${locales[`public/locales/${name}/send.ftl`]}`);
+}
+
+function browserTranslator() {
+ return locales.translate;
+}
+
+const translator = isServer ? serverTranslator : browserTranslator;
+
+const instance = {
+ get: getLocale,
+ getTranslator: translator,
+ setMiddleware: function(middleware) {
+ if (middleware) {
+ const _eval = require('require-from-string');
+ instance.get = function getLocaleWithMiddleware(name) {
+ const f = middleware.fileSystem.readFileSync(
+ middleware.getFilenameFromUrl('/manifest.json')
+ );
+ return prefix + JSON.parse(f)[`public/locales/${name}/send.ftl`];
+ };
+ instance.getTranslator = function(name) {
+ const f = middleware.fileSystem.readFileSync(
+ middleware.getFilenameFromUrl(instance.get(name))
+ );
+ return _eval(f.toString());
+ };
+ }
+ }
+};
+
+module.exports = instance;
diff --git a/frontend/src/common.js b/frontend/src/common.js
deleted file mode 100644
index ddbbd7ca..00000000
--- a/frontend/src/common.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import Raven from 'raven-js';
-import { unsupported } from './metrics';
-
-if (navigator.doNotTrack !== '1' && window.RAVEN_CONFIG) {
- Raven.config(window.SENTRY_ID, window.RAVEN_CONFIG).install();
-}
-
-const ua = navigator.userAgent.toLowerCase();
-if (
- ua.indexOf('firefox') > -1 &&
- parseInt(ua.match(/firefox\/*([^\n\r]*)\./)[1], 10) <= 49
-) {
- unsupported({
- err: new Error('Firefox is outdated.')
- }).then(() => {
- location.replace('/unsupported/outdated');
- });
-}
-
-export { Raven };
diff --git a/frontend/src/download.js b/frontend/src/download.js
deleted file mode 100644
index 2d348cba..00000000
--- a/frontend/src/download.js
+++ /dev/null
@@ -1,119 +0,0 @@
-import { Raven } from './common';
-import FileReceiver from './fileReceiver';
-import { bytes, notify, gcmCompliant } from './utils';
-import Storage from './storage';
-import * as links from './links';
-import * as metrics from './metrics';
-import * as progress from './progress';
-
-const storage = new Storage();
-function onUnload(size) {
- metrics.cancelledDownload({ size });
-}
-
-async function download() {
- const downloadBtn = document.getElementById('download-btn');
- const downloadPanel = document.getElementById('download-page-one');
- const progressPanel = document.getElementById('download-progress');
- const file = document.getElementById('dl-file');
- const size = Number(file.getAttribute('data-size'));
- const ttl = Number(file.getAttribute('data-ttl'));
- const unloadHandler = onUnload.bind(null, size);
- const startTime = Date.now();
- const fileReceiver = new FileReceiver(
- '/assets' + location.pathname.slice(0, -1),
- location.hash.slice(1)
- );
-
- downloadBtn.disabled = true;
- downloadPanel.hidden = true;
- progressPanel.hidden = false;
- metrics.startedDownload({ size, ttl });
- links.setOpenInNewTab(true);
- window.addEventListener('unload', unloadHandler);
-
- fileReceiver.on('progress', data => {
- progress.setProgress({ complete: data[0], total: data[1] });
- });
-
- let downloadEnd;
- fileReceiver.on('decrypting', () => {
- downloadEnd = Date.now();
- window.removeEventListener('unload', unloadHandler);
- fileReceiver.removeAllListeners('progress');
- document.l10n.formatValue('decryptingFile').then(progress.setText);
- });
-
- try {
- const file = await fileReceiver.download();
- const endTime = Date.now();
- const time = endTime - startTime;
- const downloadTime = endTime - downloadEnd;
- const speed = size / (downloadTime / 1000);
-
- links.setOpenInNewTab(false);
- storage.totalDownloads += 1;
- metrics.completedDownload({ size, time, speed });
- progress.setText(' ');
- document.l10n
- .formatValues('downloadNotification', 'downloadFinish')
- .then(translated => {
- notify(translated[0]);
- document.getElementById('dl-title').textContent = translated[1];
- document.querySelector('#download-progress .description').textContent =
- ' ';
- });
- const dataView = new DataView(file.plaintext);
- const blob = new Blob([dataView], { type: file.type });
- const downloadUrl = URL.createObjectURL(blob);
-
- const a = document.createElement('a');
- a.href = downloadUrl;
- if (window.navigator.msSaveBlob) {
- window.navigator.msSaveBlob(blob, file.name);
- return;
- }
- a.download = file.name;
- document.body.appendChild(a);
- a.click();
- URL.revokeObjectURL(downloadUrl);
- } catch (err) {
- metrics.stoppedDownload({ size, err });
-
- if (err.message === 'notfound') {
- location.reload();
- } else {
- progressPanel.hidden = true;
- downloadPanel.hidden = true;
- document.getElementById('upload-error').hidden = false;
- }
- Raven.captureException(err);
- }
-}
-
-document.addEventListener('DOMContentLoaded', function() {
- const file = document.getElementById('dl-file');
- const filename = file.getAttribute('data-filename');
- const b = Number(file.getAttribute('data-size'));
- const size = bytes(b);
- document.l10n.formatValue('downloadFileSize', { size }).then(str => {
- document.getElementById('dl-filesize').textContent = str;
- });
- document.l10n
- .formatValue('downloadingPageProgress', { filename, size })
- .then(str => {
- document.getElementById('dl-title').textContent = str;
- });
-
- gcmCompliant()
- .then(() => {
- document
- .getElementById('download-btn')
- .addEventListener('click', download);
- })
- .catch(err => {
- metrics.unsupported({ err }).then(() => {
- location.replace('/unsupported/gcm');
- });
- });
-});
diff --git a/frontend/src/fileList.js b/frontend/src/fileList.js
deleted file mode 100644
index 436e7a5a..00000000
--- a/frontend/src/fileList.js
+++ /dev/null
@@ -1,163 +0,0 @@
-import FileSender from './fileSender';
-import Storage from './storage';
-import * as metrics from './metrics';
-import { allowedCopy, copyToClipboard, ONE_DAY_IN_MS } from './utils';
-import bel from 'bel';
-import copyImg from '../../public/resources/copy-16.svg';
-import closeImg from '../../public/resources/close-16.svg';
-
-const HOUR = 1000 * 60 * 60;
-const storage = new Storage();
-let fileList = null;
-
-document.addEventListener('DOMContentLoaded', function() {
- fileList = document.getElementById('file-list');
- toggleHeader();
- Promise.all(
- storage.files.map(file => {
- const id = file.fileId;
- return checkExistence(id).then(exists => {
- if (exists) {
- addFile(storage.getFileById(id));
- } else {
- storage.remove(id);
- }
- });
- })
- )
- .catch(err => console.error(err))
- .then(toggleHeader);
-});
-
-function toggleHeader() {
- fileList.hidden = storage.files.length === 0;
-}
-
-function timeLeft(milliseconds) {
- const minutes = Math.floor(milliseconds / 1000 / 60);
- const hours = Math.floor(minutes / 60);
- const seconds = Math.floor(milliseconds / 1000 % 60);
- if (hours >= 1) {
- return `${hours}h ${minutes % 60}m`;
- } else if (hours === 0) {
- return `${minutes}m ${seconds}s`;
- }
- return 'Expired';
-}
-
-function addFile(file) {
- if (!file) {
- return;
- }
- file.creationDate = new Date(file.creationDate);
- const url = `${file.url}#${file.secretKey}`;
- const future = new Date();
- future.setTime(file.creationDate.getTime() + file.expiry);
- const countdown = future.getTime() - Date.now();
-
- const row = bel`
-
- ${file.name} |
-
-
-
-
- |
- ${timeLeft(countdown)} |
-
-
-
-
- |
-
- `;
- const popup = row.querySelector('.popuptext');
- const timeCol = row.querySelectorAll('td')[2];
- if (!allowedCopy()) {
- row.querySelector('.icon-copy').disabled = true;
- }
-
- fileList.querySelector('tbody').appendChild(row);
- toggleHeader();
- poll();
-
- function copyClick(e) {
- metrics.copiedLink({ location: 'upload-list' });
- copyToClipboard(url);
- const icon = e.target;
- const text = e.target.nextSibling;
- icon.hidden = true;
- text.hidden = false;
- setTimeout(() => {
- icon.hidden = false;
- text.hidden = true;
- }, 500);
- }
-
- function poll() {
- const countdown = future.getTime() - Date.now();
- if (countdown <= 0) {
- storage.remove(file.fileId);
- row.parentNode.removeChild(row);
- toggleHeader();
- }
- timeCol.textContent = timeLeft(countdown);
- setTimeout(poll, countdown >= HOUR ? 60000 : 1000);
- }
-
- function deleteFile() {
- FileSender.delete(file.fileId, file.deleteToken);
- const ttl = ONE_DAY_IN_MS - (Date.now() - file.creationDate.getTime());
- metrics.deletedUpload({
- size: file.size,
- time: file.totalTime,
- speed: file.uploadSpeed,
- type: file.typeOfUpload,
- location: 'upload-list',
- ttl
- });
- row.parentNode.removeChild(row);
- storage.remove(file.fileId);
- toggleHeader();
- }
-
- function showPopup() {
- popup.classList.add('show');
- popup.focus();
- }
-
- function cancel(e) {
- e.stopPropagation();
- popup.classList.remove('show');
- }
-
- function stopProp(e) {
- e.stopPropagation();
- }
-}
-
-async function checkExistence(id) {
- return new Promise((resolve, reject) => {
- const xhr = new XMLHttpRequest();
- xhr.onreadystatechange = () => {
- if (xhr.readyState === XMLHttpRequest.HEADERS_RECEIVED) {
- resolve(xhr.status === 200);
- }
- };
- xhr.onerror = reject;
- xhr.ontimeout = reject;
- xhr.open('get', '/exists/' + id);
- xhr.timeout = 2000;
- xhr.send();
- });
-}
-
-export { addFile };
diff --git a/frontend/src/links.js b/frontend/src/links.js
deleted file mode 100644
index d27da908..00000000
--- a/frontend/src/links.js
+++ /dev/null
@@ -1,21 +0,0 @@
-let links = [];
-
-document.addEventListener('DOMContentLoaded', function() {
- links = Array.from(document.querySelectorAll('a:not([target])'));
-});
-
-function setOpenInNewTab(bool) {
- if (bool === false) {
- links.forEach(l => {
- l.removeAttribute('target');
- l.removeAttribute('rel');
- });
- } else {
- links.forEach(l => {
- l.setAttribute('target', '_blank');
- l.setAttribute('rel', 'noopener noreferrer');
- });
- }
-}
-
-export { setOpenInNewTab };
diff --git a/frontend/src/progress.js b/frontend/src/progress.js
deleted file mode 100644
index a7fdd1fe..00000000
--- a/frontend/src/progress.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import { bytes, percent } from './utils';
-
-let percentText = null;
-let text = null;
-let title = null;
-let bar = null;
-let updateTitle = false;
-
-const radius = 73;
-const circumference = 2 * Math.PI * radius;
-
-document.addEventListener('DOMContentLoaded', function() {
- percentText = document.querySelector('.percent-number');
- text = document.querySelector('.progress-text');
- bar = document.getElementById('bar');
- title = document.querySelector('title');
-});
-
-document.addEventListener('blur', function() {
- updateTitle = true;
-});
-
-document.addEventListener('focus', function() {
- updateTitle = false;
- return title && (title.textContent = 'Firefox Send');
-});
-
-function setProgress(params) {
- const ratio = params.complete / params.total;
- bar.setAttribute('stroke-dashoffset', (1 - ratio) * circumference);
- percentText.textContent = Math.floor(ratio * 100);
- if (updateTitle) {
- title.textContent = percent(ratio);
- }
- document.l10n
- .formatValue('fileSizeProgress', {
- partialSize: bytes(params.complete),
- totalSize: bytes(params.total)
- })
- .then(setText);
-}
-
-function setText(str) {
- text.textContent = str;
-}
-
-export { setProgress, setText };
diff --git a/frontend/src/upload.js b/frontend/src/upload.js
deleted file mode 100644
index 6133dd34..00000000
--- a/frontend/src/upload.js
+++ /dev/null
@@ -1,257 +0,0 @@
-/* global MAXFILESIZE EXPIRE_SECONDS */
-import { Raven } from './common';
-import FileSender from './fileSender';
-import {
- allowedCopy,
- bytes,
- copyToClipboard,
- notify,
- gcmCompliant,
- ONE_DAY_IN_MS
-} from './utils';
-import Storage from './storage';
-import * as metrics from './metrics';
-import * as progress from './progress';
-import * as fileList from './fileList';
-import checkImg from '../../public/resources/check-16.svg';
-
-const storage = new Storage();
-
-async function upload(event) {
- event.preventDefault();
- const pageOne = document.getElementById('page-one');
- const link = document.getElementById('link');
- const uploadWindow = document.querySelector('.upload-window');
- const uploadError = document.getElementById('upload-error');
- const uploadProgress = document.getElementById('upload-progress');
- const clickOrDrop = event.type === 'drop' ? 'drop' : 'click';
-
- // don't allow upload if not on upload page
- if (pageOne.hidden) {
- return;
- }
-
- storage.totalUploads += 1;
-
- let file = '';
- if (clickOrDrop === 'drop') {
- if (!event.dataTransfer.files[0]) {
- uploadWindow.classList.remove('ondrag');
- return;
- }
- if (
- event.dataTransfer.files.length > 1 ||
- event.dataTransfer.files[0].size === 0
- ) {
- uploadWindow.classList.remove('ondrag');
- document.l10n.formatValue('uploadPageMultipleFilesAlert').then(str => {
- alert(str);
- });
- return;
- }
- file = event.dataTransfer.files[0];
- } else {
- file = event.target.files[0];
- }
-
- if (file.size > MAXFILESIZE) {
- return document.l10n
- .formatValue('fileTooBig', { size: bytes(MAXFILESIZE) })
- .then(alert);
- }
-
- pageOne.hidden = true;
- uploadError.hidden = true;
- uploadProgress.hidden = false;
- document.l10n
- .formatValue('uploadingPageProgress', {
- size: bytes(file.size),
- filename: file.name
- })
- .then(str => {
- document.getElementById('upload-filename').textContent = str;
- });
- document.l10n.formatValue('importingFile').then(progress.setText);
- //don't allow drag and drop when not on page-one
- document.body.removeEventListener('drop', upload);
-
- const fileSender = new FileSender(file);
- document.getElementById('cancel-upload').addEventListener('click', () => {
- fileSender.cancel();
- metrics.cancelledUpload({
- size: file.size,
- type: clickOrDrop
- });
- location.reload();
- });
-
- let uploadStart;
- fileSender.on('progress', data => {
- uploadStart = uploadStart || Date.now();
- progress.setProgress({
- complete: data[0],
- total: data[1]
- });
- });
-
- fileSender.on('encrypting', () => {
- document.l10n.formatValue('encryptingFile').then(progress.setText);
- });
-
- let t;
- const startTime = Date.now();
- metrics.startedUpload({
- size: file.size,
- type: clickOrDrop
- });
- // For large files we need to give the ui a tick to breathe and update
- // before we kick off the FileSender
- setTimeout(() => {
- fileSender
- .upload()
- .then(info => {
- const endTime = Date.now();
- const time = endTime - startTime;
- const uploadTime = endTime - uploadStart;
- const speed = file.size / (uploadTime / 1000);
- const expiration = EXPIRE_SECONDS * 1000;
-
- link.setAttribute('value', `${info.url}#${info.secretKey}`);
-
- const copyText = document.getElementById('copy-text');
- copyText.setAttribute(
- 'data-l10n-args',
- JSON.stringify({ filename: file.name })
- );
- copyText.setAttribute('data-l10n-id', 'copyUrlFormLabelWithName');
-
- metrics.completedUpload({
- size: file.size,
- time,
- speed,
- type: clickOrDrop
- });
-
- const fileData = {
- name: file.name,
- size: file.size,
- fileId: info.fileId,
- url: info.url,
- secretKey: info.secretKey,
- deleteToken: info.deleteToken,
- creationDate: new Date(),
- expiry: expiration,
- totalTime: time,
- typeOfUpload: clickOrDrop,
- uploadSpeed: speed
- };
-
- document.getElementById('delete-file').addEventListener('click', () => {
- FileSender.delete(fileData.fileId, fileData.deleteToken).then(() => {
- const ttl =
- ONE_DAY_IN_MS - (Date.now() - fileData.creationDate.getTime());
- metrics
- .deletedUpload({
- size: fileData.size,
- time: fileData.totalTime,
- speed: fileData.uploadSpeed,
- type: fileData.typeOfUpload,
- location: 'success-screen',
- ttl
- })
- .then(() => {
- storage.remove(fileData.fileId);
- location.reload();
- });
- });
- });
-
- storage.addFile(info.fileId, fileData);
-
- pageOne.hidden = true;
- uploadProgress.hidden = true;
- uploadError.hidden = true;
- document.getElementById('share-link').hidden = false;
-
- fileList.addFile(fileData);
- document.l10n.formatValue('notifyUploadDone').then(str => {
- notify(str);
- });
- })
- .catch(err => {
- // err is 0 when coming from a cancel upload event
- if (err === 0) {
- return;
- }
- // only show error page when the error is anything other than user cancelling the upload
- Raven.captureException(err);
- pageOne.hidden = true;
- uploadProgress.hidden = true;
- uploadError.hidden = false;
- window.clearTimeout(t);
-
- metrics.stoppedUpload({
- size: file.size,
- type: clickOrDrop,
- err
- });
- });
- }, 10);
-}
-
-document.addEventListener('DOMContentLoaded', function() {
- gcmCompliant()
- .then(function() {
- const pageOne = document.getElementById('page-one');
- const copyBtn = document.getElementById('copy-btn');
- const link = document.getElementById('link');
- const uploadWindow = document.querySelector('.upload-window');
-
- pageOne.hidden = false;
- document.getElementById('file-upload').addEventListener('change', upload);
-
- document.body.addEventListener('dragover', allowDrop);
- document.body.addEventListener('drop', upload);
-
- // reset copy button
- copyBtn.disabled = !allowedCopy();
- copyBtn.setAttribute('data-l10n-id', 'copyUrlFormButton');
-
- link.disabled = false;
-
- // copy link to clipboard
- copyBtn.addEventListener('click', () => {
- if (allowedCopy() && copyToClipboard(link.getAttribute('value'))) {
- metrics.copiedLink({ location: 'success-screen' });
-
- //disable button for 3s
- copyBtn.disabled = true;
- link.disabled = true;
- copyBtn.innerHTML = ``;
- setTimeout(() => {
- copyBtn.disabled = !allowedCopy();
- copyBtn.setAttribute('data-l10n-id', 'copyUrlFormButton');
- link.disabled = false;
- }, 3000);
- }
- });
-
- uploadWindow.addEventListener('dragover', () =>
- uploadWindow.classList.add('ondrag')
- );
- uploadWindow.addEventListener('dragleave', () =>
- uploadWindow.classList.remove('ondrag')
- );
-
- // on file upload by browse or drag & drop
-
- function allowDrop(ev) {
- ev.preventDefault();
- }
- })
- .catch(err => {
- metrics.unsupported({ err }).then(() => {
- location.replace('/unsupported/gcm');
- });
- });
-});
diff --git a/package-lock.json b/package-lock.json
index 1923a1c6..573968a4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4,25 +4,56 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
- "@types/node": {
- "version": "7.0.39",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.39.tgz",
- "integrity": "sha512-KQHAZeVsk4UIT9XaR6cn4WpHZzimK6UBD1UomQKfQQFmTlUHaNBzeuov+TM4+kigLO0IJt4I5OOsshcCyA9gSA==",
+ "@f/has": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@f/has/-/has-1.0.1.tgz",
+ "integrity": "sha1-t08TK/OqpdwECe3+jucjN9bnP74=",
"dev": true
},
+ "@f/is-svg": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@f/is-svg/-/is-svg-1.0.0.tgz",
+ "integrity": "sha1-Q0fYy1VBkl+F9WMXSMwx3GRQ70Y=",
+ "dev": true,
+ "requires": {
+ "@f/has": "1.0.1",
+ "@f/svg-elements": "1.0.1"
+ }
+ },
+ "@f/svg-elements": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@f/svg-elements/-/svg-elements-1.0.1.tgz",
+ "integrity": "sha1-qNMKizODbJiISNKOs8RgXZI1gd0=",
+ "dev": true
+ },
+ "@f/svg-namespace": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@f/svg-namespace/-/svg-namespace-1.0.1.tgz",
+ "integrity": "sha1-9vGlzl05caSt6RoR0i1MRZrNN18=",
+ "dev": true
+ },
+ "accept-language": {
+ "version": "3.0.17",
+ "resolved": "https://registry.npmjs.org/accept-language/-/accept-language-3.0.17.tgz",
+ "integrity": "sha1-cTnStPmx6GDORg+qiz2w3x97aTE=",
+ "requires": {
+ "bcp47": "1.1.2",
+ "stable": "0.1.6"
+ }
+ },
"accepts": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz",
- "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz",
+ "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=",
"requires": {
"mime-types": "2.1.16",
"negotiator": "0.6.1"
}
},
"acorn": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
- "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.1.tgz",
+ "integrity": "sha512-vOk6uEMctu0vQrvuSqFdJyqj1Q0S5VTDL79qtjo+DhRr+1mmaD+tluFSCZqhvi/JUhXSzoZN2BhtstaPEeE8cw==",
"dev": true
},
"acorn-dynamic-import": {
@@ -32,6 +63,14 @@
"dev": true,
"requires": {
"acorn": "4.0.13"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
+ "dev": true
+ }
}
},
"acorn-jsx": {
@@ -61,17 +100,6 @@
"fast-deep-equal": "1.0.0",
"json-schema-traverse": "0.3.1",
"json-stable-stringify": "1.0.1"
- },
- "dependencies": {
- "json-stable-stringify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
- "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
- "dev": true,
- "requires": {
- "jsonify": "0.0.0"
- }
- }
}
},
"ajv-keywords": {
@@ -84,6 +112,7 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
"integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "dev": true,
"requires": {
"kind-of": "3.2.2",
"longest": "1.0.1",
@@ -96,17 +125,18 @@
"integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
"dev": true
},
- "amdefine": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
- "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
- },
"ansi-escapes": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz",
"integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=",
"dev": true
},
+ "ansi-html": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+ "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
+ "dev": true
+ },
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
@@ -125,6 +155,17 @@
"requires": {
"micromatch": "2.3.11",
"normalize-path": "2.1.1"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "1.1.0"
+ }
+ }
}
},
"app-root-path": {
@@ -133,6 +174,22 @@
"integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=",
"dev": true
},
+ "application-config": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/application-config/-/application-config-0.1.2.tgz",
+ "integrity": "sha1-MnJTO1+fg7MjqeXWQKNVi1Cls4U=",
+ "dev": true,
+ "requires": {
+ "application-config-path": "0.1.0",
+ "mkdirp": "0.5.1"
+ }
+ },
+ "application-config-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.0.tgz",
+ "integrity": "sha1-GTxfCoZUGkxm+6Hi3DhYM2LqXo8=",
+ "dev": true
+ },
"argparse": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
@@ -219,15 +276,10 @@
"integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
"dev": true
},
- "asap": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
- "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
- },
- "asmcrypto.js": {
- "version": "0.0.11",
- "resolved": "https://registry.npmjs.org/asmcrypto.js/-/asmcrypto.js-0.0.11.tgz",
- "integrity": "sha1-dLshuq/Z3OFoTcBvFShoOzUMHKA=",
+ "asn1": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz",
+ "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=",
"dev": true
},
"asn1.js": {
@@ -250,25 +302,23 @@
"util": "0.10.3"
}
},
+ "assert-plus": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz",
+ "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=",
+ "dev": true
+ },
"ast-types": {
"version": "0.9.6",
"resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz",
"integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=",
"dev": true
},
- "astw": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz",
- "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=",
- "dev": true,
- "requires": {
- "acorn": "4.0.13"
- }
- },
"async": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
+ "dev": true
},
"async-each": {
"version": "1.0.1",
@@ -288,18 +338,18 @@
"integrity": "sha1-++rwfUj9h44Ggr98vurecorbKxg=",
"dev": true,
"requires": {
- "browserslist": "2.3.0",
- "caniuse-lite": "1.0.30000712",
+ "browserslist": "2.3.3",
+ "caniuse-lite": "1.0.30000717",
"normalize-range": "0.1.2",
"num2fraction": "1.2.2",
- "postcss": "6.0.8",
+ "postcss": "6.0.9",
"postcss-value-parser": "3.3.0"
}
},
"aws-sdk": {
- "version": "2.98.0",
- "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.98.0.tgz",
- "integrity": "sha1-kK0CPXM4ndFex736+TLsq2VEVxE=",
+ "version": "2.103.0",
+ "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.103.0.tgz",
+ "integrity": "sha1-gJtzG+tlg/OmwLZYeMMso6aloRE=",
"requires": {
"buffer": "4.9.1",
"crypto-browserify": "1.0.9",
@@ -313,10 +363,16 @@
"xmlbuilder": "4.2.1"
}
},
+ "aws-sign": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/aws-sign/-/aws-sign-0.3.0.tgz",
+ "integrity": "sha1-PYHKabR0seFlGHKLUcJP8Lvtxuk=",
+ "dev": true
+ },
"babel-code-frame": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz",
- "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=",
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
"dev": true,
"requires": {
"chalk": "1.1.3",
@@ -325,62 +381,57 @@
}
},
"babel-core": {
- "version": "6.25.0",
- "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.25.0.tgz",
- "integrity": "sha1-fdQrBGPHQunVKW3rPsZ6kyLa1yk=",
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz",
+ "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=",
"dev": true,
"requires": {
- "babel-code-frame": "6.22.0",
- "babel-generator": "6.25.0",
+ "babel-code-frame": "6.26.0",
+ "babel-generator": "6.26.0",
"babel-helpers": "6.24.1",
"babel-messages": "6.23.0",
- "babel-register": "6.24.1",
- "babel-runtime": "6.25.0",
- "babel-template": "6.25.0",
- "babel-traverse": "6.25.0",
- "babel-types": "6.25.0",
- "babylon": "6.17.4",
+ "babel-register": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
"convert-source-map": "1.5.0",
- "debug": "2.6.7",
+ "debug": "2.6.8",
"json5": "0.5.1",
"lodash": "4.17.4",
"minimatch": "3.0.4",
"path-is-absolute": "1.0.1",
"private": "0.1.7",
"slash": "1.0.0",
- "source-map": "0.5.6"
+ "source-map": "0.5.7"
},
"dependencies": {
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
+ "debug": {
+ "version": "2.6.8",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+ "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
}
}
},
"babel-generator": {
- "version": "6.25.0",
- "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.25.0.tgz",
- "integrity": "sha1-M6GvcNXyiQrrRlpKd5PB32qeqfw=",
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz",
+ "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=",
"dev": true,
"requires": {
"babel-messages": "6.23.0",
- "babel-runtime": "6.25.0",
- "babel-types": "6.25.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
"detect-indent": "4.0.0",
"jsesc": "1.3.0",
"lodash": "4.17.4",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"trim-right": "1.0.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- }
}
},
"babel-helper-bindify-decorators": {
@@ -389,9 +440,9 @@
"integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0",
- "babel-traverse": "6.25.0",
- "babel-types": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
}
},
"babel-helper-builder-binary-assignment-operator-visitor": {
@@ -401,8 +452,8 @@
"dev": true,
"requires": {
"babel-helper-explode-assignable-expression": "6.24.1",
- "babel-runtime": "6.25.0",
- "babel-types": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
}
},
"babel-helper-call-delegate": {
@@ -412,20 +463,20 @@
"dev": true,
"requires": {
"babel-helper-hoist-variables": "6.24.1",
- "babel-runtime": "6.25.0",
- "babel-traverse": "6.25.0",
- "babel-types": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
}
},
"babel-helper-define-map": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz",
- "integrity": "sha1-epdH8ljYlH0y1RX2qhx70CIEoIA=",
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
"dev": true,
"requires": {
"babel-helper-function-name": "6.24.1",
- "babel-runtime": "6.25.0",
- "babel-types": "6.25.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
"lodash": "4.17.4"
}
},
@@ -435,9 +486,9 @@
"integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0",
- "babel-traverse": "6.25.0",
- "babel-types": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
}
},
"babel-helper-explode-class": {
@@ -447,9 +498,9 @@
"dev": true,
"requires": {
"babel-helper-bindify-decorators": "6.24.1",
- "babel-runtime": "6.25.0",
- "babel-traverse": "6.25.0",
- "babel-types": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
}
},
"babel-helper-function-name": {
@@ -459,10 +510,10 @@
"dev": true,
"requires": {
"babel-helper-get-function-arity": "6.24.1",
- "babel-runtime": "6.25.0",
- "babel-template": "6.25.0",
- "babel-traverse": "6.25.0",
- "babel-types": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
}
},
"babel-helper-get-function-arity": {
@@ -471,8 +522,8 @@
"integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0",
- "babel-types": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
}
},
"babel-helper-hoist-variables": {
@@ -481,8 +532,8 @@
"integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0",
- "babel-types": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
}
},
"babel-helper-optimise-call-expression": {
@@ -491,18 +542,18 @@
"integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0",
- "babel-types": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
}
},
"babel-helper-regex": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz",
- "integrity": "sha1-024i+rEAjXnYhkjjIRaGgShFbOg=",
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0",
- "babel-types": "6.25.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
"lodash": "4.17.4"
}
},
@@ -513,10 +564,10 @@
"dev": true,
"requires": {
"babel-helper-function-name": "6.24.1",
- "babel-runtime": "6.25.0",
- "babel-template": "6.25.0",
- "babel-traverse": "6.25.0",
- "babel-types": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
}
},
"babel-helper-replace-supers": {
@@ -527,10 +578,10 @@
"requires": {
"babel-helper-optimise-call-expression": "6.24.1",
"babel-messages": "6.23.0",
- "babel-runtime": "6.25.0",
- "babel-template": "6.25.0",
- "babel-traverse": "6.25.0",
- "babel-types": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
}
},
"babel-helpers": {
@@ -539,14 +590,14 @@
"integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0",
- "babel-template": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
}
},
"babel-loader": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.1.tgz",
- "integrity": "sha1-uHE0yLEuPkwqlOBUYIW8aAorhIg=",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.2.tgz",
+ "integrity": "sha512-jRwlFbINAeyDStqK6Dd5YuY0k5YuzQUvlz2ZamuXrXmxav3pNqe9vfJ402+2G+OmlJSXxCOpB6Uz0INM7RQe2A==",
"dev": true,
"requires": {
"find-cache-dir": "1.0.0",
@@ -560,7 +611,7 @@
"integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0"
+ "babel-runtime": "6.26.0"
}
},
"babel-plugin-check-es2015-constants": {
@@ -569,7 +620,7 @@
"integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0"
+ "babel-runtime": "6.26.0"
}
},
"babel-plugin-syntax-async-functions": {
@@ -628,7 +679,7 @@
"requires": {
"babel-helper-remap-async-to-generator": "6.24.1",
"babel-plugin-syntax-async-generators": "6.13.0",
- "babel-runtime": "6.25.0"
+ "babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-async-to-generator": {
@@ -639,7 +690,7 @@
"requires": {
"babel-helper-remap-async-to-generator": "6.24.1",
"babel-plugin-syntax-async-functions": "6.13.0",
- "babel-runtime": "6.25.0"
+ "babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-class-properties": {
@@ -650,8 +701,8 @@
"requires": {
"babel-helper-function-name": "6.24.1",
"babel-plugin-syntax-class-properties": "6.13.0",
- "babel-runtime": "6.25.0",
- "babel-template": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
}
},
"babel-plugin-transform-decorators": {
@@ -662,9 +713,9 @@
"requires": {
"babel-helper-explode-class": "6.24.1",
"babel-plugin-syntax-decorators": "6.13.0",
- "babel-runtime": "6.25.0",
- "babel-template": "6.25.0",
- "babel-types": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-types": "6.26.0"
}
},
"babel-plugin-transform-es2015-arrow-functions": {
@@ -673,7 +724,7 @@
"integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0"
+ "babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-es2015-block-scoped-functions": {
@@ -682,19 +733,19 @@
"integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0"
+ "babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-es2015-block-scoping": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz",
- "integrity": "sha1-dsKV3DpHQbFmWt/TFnIV3P8ypXY=",
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0",
- "babel-template": "6.25.0",
- "babel-traverse": "6.25.0",
- "babel-types": "6.25.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
"lodash": "4.17.4"
}
},
@@ -704,15 +755,15 @@
"integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
"dev": true,
"requires": {
- "babel-helper-define-map": "6.24.1",
+ "babel-helper-define-map": "6.26.0",
"babel-helper-function-name": "6.24.1",
"babel-helper-optimise-call-expression": "6.24.1",
"babel-helper-replace-supers": "6.24.1",
"babel-messages": "6.23.0",
- "babel-runtime": "6.25.0",
- "babel-template": "6.25.0",
- "babel-traverse": "6.25.0",
- "babel-types": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
}
},
"babel-plugin-transform-es2015-computed-properties": {
@@ -721,8 +772,8 @@
"integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0",
- "babel-template": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
}
},
"babel-plugin-transform-es2015-destructuring": {
@@ -731,7 +782,7 @@
"integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0"
+ "babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-es2015-duplicate-keys": {
@@ -740,8 +791,8 @@
"integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0",
- "babel-types": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
}
},
"babel-plugin-transform-es2015-for-of": {
@@ -750,7 +801,7 @@
"integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0"
+ "babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-es2015-function-name": {
@@ -760,8 +811,8 @@
"dev": true,
"requires": {
"babel-helper-function-name": "6.24.1",
- "babel-runtime": "6.25.0",
- "babel-types": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
}
},
"babel-plugin-transform-es2015-literals": {
@@ -770,7 +821,7 @@
"integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0"
+ "babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-es2015-modules-amd": {
@@ -779,21 +830,21 @@
"integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
"dev": true,
"requires": {
- "babel-plugin-transform-es2015-modules-commonjs": "6.24.1",
- "babel-runtime": "6.25.0",
- "babel-template": "6.25.0"
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
}
},
"babel-plugin-transform-es2015-modules-commonjs": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz",
- "integrity": "sha1-0+MQtA72ZKNmIiAAl8bUQCmPK/4=",
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz",
+ "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=",
"dev": true,
"requires": {
"babel-plugin-transform-strict-mode": "6.24.1",
- "babel-runtime": "6.25.0",
- "babel-template": "6.25.0",
- "babel-types": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-types": "6.26.0"
}
},
"babel-plugin-transform-es2015-modules-systemjs": {
@@ -803,8 +854,8 @@
"dev": true,
"requires": {
"babel-helper-hoist-variables": "6.24.1",
- "babel-runtime": "6.25.0",
- "babel-template": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
}
},
"babel-plugin-transform-es2015-modules-umd": {
@@ -814,8 +865,8 @@
"dev": true,
"requires": {
"babel-plugin-transform-es2015-modules-amd": "6.24.1",
- "babel-runtime": "6.25.0",
- "babel-template": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
}
},
"babel-plugin-transform-es2015-object-super": {
@@ -825,7 +876,7 @@
"dev": true,
"requires": {
"babel-helper-replace-supers": "6.24.1",
- "babel-runtime": "6.25.0"
+ "babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-es2015-parameters": {
@@ -836,10 +887,10 @@
"requires": {
"babel-helper-call-delegate": "6.24.1",
"babel-helper-get-function-arity": "6.24.1",
- "babel-runtime": "6.25.0",
- "babel-template": "6.25.0",
- "babel-traverse": "6.25.0",
- "babel-types": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
}
},
"babel-plugin-transform-es2015-shorthand-properties": {
@@ -848,8 +899,8 @@
"integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0",
- "babel-types": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
}
},
"babel-plugin-transform-es2015-spread": {
@@ -858,7 +909,7 @@
"integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0"
+ "babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-es2015-sticky-regex": {
@@ -867,9 +918,9 @@
"integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
"dev": true,
"requires": {
- "babel-helper-regex": "6.24.1",
- "babel-runtime": "6.25.0",
- "babel-types": "6.25.0"
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
}
},
"babel-plugin-transform-es2015-template-literals": {
@@ -878,7 +929,7 @@
"integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0"
+ "babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-es2015-typeof-symbol": {
@@ -887,7 +938,7 @@
"integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0"
+ "babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-es2015-unicode-regex": {
@@ -896,8 +947,8 @@
"integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
"dev": true,
"requires": {
- "babel-helper-regex": "6.24.1",
- "babel-runtime": "6.25.0",
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
"regexpu-core": "2.0.0"
}
},
@@ -909,26 +960,26 @@
"requires": {
"babel-helper-builder-binary-assignment-operator-visitor": "6.24.1",
"babel-plugin-syntax-exponentiation-operator": "6.13.0",
- "babel-runtime": "6.25.0"
+ "babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-object-rest-spread": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz",
- "integrity": "sha1-h11ryb52HFiirj/u5dxIldjH+SE=",
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
+ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
"dev": true,
"requires": {
"babel-plugin-syntax-object-rest-spread": "6.13.0",
- "babel-runtime": "6.25.0"
+ "babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-regenerator": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz",
- "integrity": "sha1-uNowWtQ8PJm0hI5P5AN7dw0jxBg=",
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
"dev": true,
"requires": {
- "regenerator-transform": "0.9.11"
+ "regenerator-transform": "0.10.1"
}
},
"babel-plugin-transform-strict-mode": {
@@ -937,19 +988,81 @@
"integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0",
- "babel-types": "6.25.0"
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-yo-yoify": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-yo-yoify/-/babel-plugin-yo-yoify-0.7.0.tgz",
+ "integrity": "sha512-Uidvqj9fHDEVcZ+U5ITRI/lh2C5/miBQSgD+B6NFBduTWKMvJbVARJ8GvYGPJaV5qYwQrbaO7GInQ/i63IDCVQ==",
+ "dev": true,
+ "requires": {
+ "@f/is-svg": "1.0.0",
+ "@f/svg-namespace": "1.0.1",
+ "camel-case": "3.0.0",
+ "hyperx": "2.3.0",
+ "is-boolean-attribute": "0.0.1",
+ "normalize-html-whitespace": "0.2.0",
+ "on-load": "3.2.0",
+ "yo-yoify": "3.7.3"
}
},
"babel-polyfill": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz",
- "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=",
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
+ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0",
+ "babel-runtime": "6.26.0",
"core-js": "2.5.0",
"regenerator-runtime": "0.10.5"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
+ "dev": true
+ }
+ }
+ },
+ "babel-preset-env": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.0.tgz",
+ "integrity": "sha512-OVgtQRuOZKckrILgMA5rvctvFZPv72Gua9Rt006AiPoB0DJKGN07UmaQA+qRrYgK71MVct8fFhT0EyNWYorVew==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-check-es2015-constants": "6.22.0",
+ "babel-plugin-syntax-trailing-function-commas": "6.22.0",
+ "babel-plugin-transform-async-to-generator": "6.24.1",
+ "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "6.26.0",
+ "babel-plugin-transform-es2015-classes": "6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "6.23.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
+ "babel-plugin-transform-es2015-for-of": "6.23.0",
+ "babel-plugin-transform-es2015-function-name": "6.24.1",
+ "babel-plugin-transform-es2015-literals": "6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
+ "babel-plugin-transform-es2015-modules-umd": "6.24.1",
+ "babel-plugin-transform-es2015-object-super": "6.24.1",
+ "babel-plugin-transform-es2015-parameters": "6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
+ "babel-plugin-transform-es2015-spread": "6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
+ "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
+ "babel-plugin-transform-exponentiation-operator": "6.24.1",
+ "babel-plugin-transform-regenerator": "6.26.0",
+ "browserslist": "2.3.3",
+ "invariant": "2.2.2",
+ "semver": "5.4.1"
}
},
"babel-preset-es2015": {
@@ -961,7 +1074,7 @@
"babel-plugin-check-es2015-constants": "6.22.0",
"babel-plugin-transform-es2015-arrow-functions": "6.22.0",
"babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
- "babel-plugin-transform-es2015-block-scoping": "6.24.1",
+ "babel-plugin-transform-es2015-block-scoping": "6.26.0",
"babel-plugin-transform-es2015-classes": "6.24.1",
"babel-plugin-transform-es2015-computed-properties": "6.24.1",
"babel-plugin-transform-es2015-destructuring": "6.23.0",
@@ -970,7 +1083,7 @@
"babel-plugin-transform-es2015-function-name": "6.24.1",
"babel-plugin-transform-es2015-literals": "6.22.0",
"babel-plugin-transform-es2015-modules-amd": "6.24.1",
- "babel-plugin-transform-es2015-modules-commonjs": "6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
"babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
"babel-plugin-transform-es2015-modules-umd": "6.24.1",
"babel-plugin-transform-es2015-object-super": "6.24.1",
@@ -981,7 +1094,7 @@
"babel-plugin-transform-es2015-template-literals": "6.22.0",
"babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
"babel-plugin-transform-es2015-unicode-regex": "6.24.1",
- "babel-plugin-transform-regenerator": "6.24.1"
+ "babel-plugin-transform-regenerator": "6.26.0"
}
},
"babel-preset-stage-2": {
@@ -1006,97 +1119,119 @@
"babel-plugin-transform-async-generator-functions": "6.24.1",
"babel-plugin-transform-async-to-generator": "6.24.1",
"babel-plugin-transform-exponentiation-operator": "6.24.1",
- "babel-plugin-transform-object-rest-spread": "6.23.0"
+ "babel-plugin-transform-object-rest-spread": "6.26.0"
}
},
"babel-register": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.24.1.tgz",
- "integrity": "sha1-fhDhOi9xBlvfrVoXh7pFvKbe118=",
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
"dev": true,
"requires": {
- "babel-core": "6.25.0",
- "babel-runtime": "6.25.0",
+ "babel-core": "6.26.0",
+ "babel-runtime": "6.26.0",
"core-js": "2.5.0",
"home-or-tmp": "2.0.0",
"lodash": "4.17.4",
"mkdirp": "0.5.1",
- "source-map-support": "0.4.15"
+ "source-map-support": "0.4.16"
}
},
"babel-runtime": {
- "version": "6.25.0",
- "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.25.0.tgz",
- "integrity": "sha1-M7mOql1IK7AajRqmtDetKwGuxBw=",
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
"core-js": "2.5.0",
- "regenerator-runtime": "0.10.5"
+ "regenerator-runtime": "0.11.0"
}
},
"babel-template": {
- "version": "6.25.0",
- "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz",
- "integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=",
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0",
- "babel-traverse": "6.25.0",
- "babel-types": "6.25.0",
- "babylon": "6.17.4",
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
"lodash": "4.17.4"
}
},
"babel-traverse": {
- "version": "6.25.0",
- "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz",
- "integrity": "sha1-IldJfi/NGbie3BPEyROB+VEklvE=",
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
"dev": true,
"requires": {
- "babel-code-frame": "6.22.0",
+ "babel-code-frame": "6.26.0",
"babel-messages": "6.23.0",
- "babel-runtime": "6.25.0",
- "babel-types": "6.25.0",
- "babylon": "6.17.4",
- "debug": "2.6.7",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.8",
"globals": "9.18.0",
"invariant": "2.2.2",
"lodash": "4.17.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.8",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+ "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
}
},
"babel-types": {
- "version": "6.25.0",
- "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz",
- "integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=",
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0",
+ "babel-runtime": "6.26.0",
"esutils": "2.0.2",
"lodash": "4.17.4",
"to-fast-properties": "1.0.3"
}
},
"babylon": {
- "version": "6.17.4",
- "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.17.4.tgz",
- "integrity": "sha512-kChlV+0SXkjE0vUn9OZ7pBMWRFd8uq3mZe8x1K6jhuNcAFAtEnjchFAqB+dYEXKyd+JpT6eppRR78QAr5gTsUw==",
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
"dev": true
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
},
"base64-js": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz",
"integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw=="
},
+ "batch": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+ "dev": true
+ },
+ "bcp47": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/bcp47/-/bcp47-1.1.2.tgz",
+ "integrity": "sha1-NUvjMH/9CEM6ePXh4glYRfifx/4="
+ },
"bel": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/bel/-/bel-5.0.3.tgz",
"integrity": "sha512-bMLvUOrKBM2zWp3Ab6UugjCjFmsZtIeKH3oMNWaUr9RA94sNeicajzptZHQWU3K8KNIL8o6JwAmKG1W3mUiwXw==",
- "dev": true,
"requires": {
"hyperx": "2.3.0",
"is-electron": "2.1.0",
@@ -1110,15 +1245,44 @@
"dev": true
},
"binary-extensions": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.9.0.tgz",
- "integrity": "sha1-ZlBsFs5vTWkopbPNajPKQelB43s=",
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz",
+ "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=",
"dev": true
},
+ "bl": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz",
+ "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=",
+ "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"
+ }
+ }
+ }
+ },
"bluebird": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz",
- "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.0.3.tgz",
+ "integrity": "sha1-xLRBGEgC47ZKYe7tRXgnG0yL9qw=",
"dev": true
},
"bn.js": {
@@ -1144,16 +1308,50 @@
"type-is": "1.6.15"
}
},
- "boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
- "dev": true
+ "bonjour": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
+ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+ "dev": true,
+ "requires": {
+ "array-flatten": "2.1.1",
+ "deep-equal": "1.0.1",
+ "dns-equal": "1.0.0",
+ "dns-txt": "2.0.2",
+ "multicast-dns": "6.1.1",
+ "multicast-dns-service-types": "1.1.0"
+ },
+ "dependencies": {
+ "array-flatten": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz",
+ "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=",
+ "dev": true
+ }
+ }
+ },
+ "boom": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz",
+ "integrity": "sha1-emNune1O/O+xnO9JR6PGffrukRs=",
+ "dev": true,
+ "requires": {
+ "hoek": "0.9.1"
+ },
+ "dependencies": {
+ "hoek": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz",
+ "integrity": "sha1-PTIkYrrfB3Fup+uFuviAec3c5QU=",
+ "dev": true
+ }
+ }
},
"brace-expansion": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
"integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
"requires": {
"balanced-match": "1.0.0",
"concat-map": "0.0.1"
@@ -1176,175 +1374,12 @@
"integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
"dev": true
},
- "browser-pack": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.2.tgz",
- "integrity": "sha1-+GzWzvT1MAyOY+B6TVEvZfv/RTE=",
- "dev": true,
- "requires": {
- "combine-source-map": "0.7.2",
- "defined": "1.0.0",
- "JSONStream": "1.3.1",
- "through2": "2.0.3",
- "umd": "3.0.1"
- }
- },
- "browser-resolve": {
- "version": "1.11.2",
- "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz",
- "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=",
- "dev": true,
- "requires": {
- "resolve": "1.1.7"
- },
- "dependencies": {
- "resolve": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
- "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
- "dev": true
- }
- }
- },
"browser-stdout": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz",
"integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=",
"dev": true
},
- "browserify": {
- "version": "14.4.0",
- "resolved": "https://registry.npmjs.org/browserify/-/browserify-14.4.0.tgz",
- "integrity": "sha1-CJo0Y69Y0OSNjNQHCz90ZU1avKk=",
- "dev": true,
- "requires": {
- "assert": "1.4.1",
- "browser-pack": "6.0.2",
- "browser-resolve": "1.11.2",
- "browserify-zlib": "0.1.4",
- "buffer": "5.0.7",
- "cached-path-relative": "1.0.1",
- "concat-stream": "1.5.2",
- "console-browserify": "1.1.0",
- "constants-browserify": "1.0.0",
- "crypto-browserify": "3.11.1",
- "defined": "1.0.0",
- "deps-sort": "2.0.0",
- "domain-browser": "1.1.7",
- "duplexer2": "0.1.4",
- "events": "1.1.1",
- "glob": "7.1.2",
- "has": "1.0.1",
- "htmlescape": "1.1.1",
- "https-browserify": "1.0.0",
- "inherits": "2.0.3",
- "insert-module-globals": "7.0.1",
- "JSONStream": "1.3.1",
- "labeled-stream-splicer": "2.0.0",
- "module-deps": "4.1.1",
- "os-browserify": "0.1.2",
- "parents": "1.0.1",
- "path-browserify": "0.0.0",
- "process": "0.11.10",
- "punycode": "1.3.2",
- "querystring-es3": "0.2.1",
- "read-only-stream": "2.0.0",
- "readable-stream": "2.3.3",
- "resolve": "1.4.0",
- "shasum": "1.0.2",
- "shell-quote": "1.6.1",
- "stream-browserify": "2.0.1",
- "stream-http": "2.7.2",
- "string_decoder": "1.0.3",
- "subarg": "1.0.0",
- "syntax-error": "1.3.0",
- "through2": "2.0.3",
- "timers-browserify": "1.4.2",
- "tty-browserify": "0.0.0",
- "url": "0.11.0",
- "util": "0.10.3",
- "vm-browserify": "0.0.4",
- "xtend": "4.0.1"
- },
- "dependencies": {
- "buffer": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.7.tgz",
- "integrity": "sha512-NeeHXWh5pCbPQCt2/6rLvXqapZfVsqw/YgRgaHpT3H9Uzgs+S0lSg5SQzouIuDvcmlQRqBe8hOO2scKCu3cxrg==",
- "dev": true,
- "requires": {
- "base64-js": "1.2.1",
- "ieee754": "1.1.8"
- }
- },
- "crypto-browserify": {
- "version": "3.11.1",
- "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz",
- "integrity": "sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==",
- "dev": true,
- "requires": {
- "browserify-cipher": "1.0.0",
- "browserify-sign": "4.0.4",
- "create-ecdh": "4.0.0",
- "create-hash": "1.1.3",
- "create-hmac": "1.1.6",
- "diffie-hellman": "5.0.2",
- "inherits": "2.0.3",
- "pbkdf2": "3.0.13",
- "public-encrypt": "4.0.0",
- "randombytes": "2.0.5"
- }
- },
- "glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
- }
- },
- "readable-stream": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
- "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
- "dev": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "1.0.7",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
- }
- },
- "string_decoder": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
- "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "5.1.1"
- }
- },
- "url": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
- "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
- "dev": true,
- "requires": {
- "punycode": "1.3.2",
- "querystring": "0.2.0"
- }
- }
- }
- },
"browserify-aes": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz",
@@ -1354,7 +1389,7 @@
"buffer-xor": "1.0.3",
"cipher-base": "1.0.4",
"create-hash": "1.1.3",
- "evp_bytestokey": "1.0.0",
+ "evp_bytestokey": "1.0.2",
"inherits": "2.0.3"
}
},
@@ -1366,7 +1401,7 @@
"requires": {
"browserify-aes": "1.0.6",
"browserify-des": "1.0.0",
- "evp_bytestokey": "1.0.0"
+ "evp_bytestokey": "1.0.2"
}
},
"browserify-des": {
@@ -1412,16 +1447,24 @@
"dev": true,
"requires": {
"pako": "0.2.9"
+ },
+ "dependencies": {
+ "pako": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
+ "dev": true
+ }
}
},
"browserslist": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.3.0.tgz",
- "integrity": "sha512-jDr9Mea+n+FwI+kR0ce7rXCFBoM7hbL80G/th7oPxuNSK4V5J3LPMHB5vykjeI2h7fgSihBbSdoJPmzUC0606Q==",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.3.3.tgz",
+ "integrity": "sha512-p9hz6FA2H1w1ZUAXKfK3MlIA4Z9fEd56hnZSOecBIITb5j0oZk/tZRwhdE0xG56RGx2x8cc1c5AWJKWVjMLOEQ==",
"dev": true,
"requires": {
- "caniuse-lite": "1.0.30000712",
- "electron-to-chromium": "1.3.17"
+ "caniuse-lite": "1.0.30000717",
+ "electron-to-chromium": "1.3.18"
}
},
"buffer": {
@@ -1434,6 +1477,12 @@
"isarray": "1.0.0"
}
},
+ "buffer-indexof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
+ "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==",
+ "dev": true
+ },
"buffer-xor": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
@@ -1466,12 +1515,6 @@
"resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz",
"integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk="
},
- "cached-path-relative": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz",
- "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=",
- "dev": true
- },
"caller-path": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
@@ -1498,9 +1541,10 @@
}
},
"camelcase": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
- "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
},
"camelcase-keys": {
"version": "2.1.0",
@@ -1532,7 +1576,7 @@
"dev": true,
"requires": {
"browserslist": "1.7.7",
- "caniuse-db": "1.0.30000712",
+ "caniuse-db": "1.0.30000717",
"lodash.memoize": "4.1.2",
"lodash.uniq": "4.5.0"
},
@@ -1543,34 +1587,29 @@
"integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
"dev": true,
"requires": {
- "caniuse-db": "1.0.30000712",
- "electron-to-chromium": "1.3.17"
+ "caniuse-db": "1.0.30000717",
+ "electron-to-chromium": "1.3.18"
}
- },
- "lodash.memoize": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
- "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
- "dev": true
}
}
},
"caniuse-db": {
- "version": "1.0.30000712",
- "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000712.tgz",
- "integrity": "sha1-iXSDlvnXQZ1fon3ztIhy2tv4MYo=",
+ "version": "1.0.30000717",
+ "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000717.tgz",
+ "integrity": "sha1-J931/szdM4yZpiyXiMJpT5n2ftc=",
"dev": true
},
"caniuse-lite": {
- "version": "1.0.30000712",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000712.tgz",
- "integrity": "sha1-tHMt7yRZIk8/eMapuhA6v8xwVnA=",
+ "version": "1.0.30000717",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000717.tgz",
+ "integrity": "sha1-RTmxJq94fB1IUZRN4isr2HgNNhI=",
"dev": true
},
"center-align": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
"integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "dev": true,
"requires": {
"align-text": "0.1.4",
"lazy-cache": "1.0.4"
@@ -1605,6 +1644,36 @@
"readdirp": "2.1.0"
}
},
+ "choo": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/choo/-/choo-6.0.0.tgz",
+ "integrity": "sha512-bwBnTuZCZlHHTDJNqbBCdKmnLnApkJcaw6wYK6NRrS+wL1L4GXz1Athe6FiOGw15leisW+XhSGgF3WBT8E8Bmg==",
+ "requires": {
+ "bel": "5.0.3",
+ "document-ready": "2.0.1",
+ "nanobus": "4.2.0",
+ "nanohref": "3.0.0",
+ "nanolocation": "1.0.0",
+ "nanomorph": "5.1.2",
+ "nanoquery": "1.1.0",
+ "nanoraf": "3.0.1",
+ "nanorouter": "2.1.0",
+ "nanotiming": "6.1.3",
+ "scroll-to-anchor": "1.1.0",
+ "xtend": "4.0.1"
+ }
+ },
+ "choo-log": {
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/choo-log/-/choo-log-7.2.1.tgz",
+ "integrity": "sha1-sTrCLcKTzUvu94GdxWhMAOwVqoM=",
+ "dev": true,
+ "requires": {
+ "nanologger": "1.3.0",
+ "on-idle": "3.1.2",
+ "on-performance": "1.0.1"
+ }
+ },
"ci-info": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.0.0.tgz",
@@ -1642,15 +1711,7 @@
"integrity": "sha1-ua6k+FZ5iJzz6ui0A0nsTr390DI=",
"dev": true,
"requires": {
- "source-map": "0.5.6"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- }
+ "source-map": "0.5.7"
}
},
"cli-cursor": {
@@ -1663,9 +1724,9 @@
}
},
"cli-spinners": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.0.0.tgz",
- "integrity": "sha1-75h+09SDkaw9q5GAtAanQhgNbmo=",
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz",
+ "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=",
"dev": true
},
"cli-truncate": {
@@ -1701,25 +1762,41 @@
}
},
"cli-width": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz",
- "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
"dev": true
},
"cliui": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
- "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
"requires": {
- "center-align": "0.1.3",
- "right-align": "0.1.3",
- "wordwrap": "0.0.2"
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.1.0"
},
"dependencies": {
- "wordwrap": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
- "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
+ "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"
+ }
+ },
+ "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"
+ }
}
}
},
@@ -1812,49 +1889,20 @@
"integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
"dev": true
},
- "combine-source-map": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz",
- "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=",
- "dev": true,
- "requires": {
- "convert-source-map": "1.1.3",
- "inline-source-map": "0.6.2",
- "lodash.memoize": "3.0.4",
- "source-map": "0.5.6"
- },
- "dependencies": {
- "convert-source-map": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
- "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=",
- "dev": true
- },
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- }
- }
- },
"combined-stream": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
- "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz",
+ "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=",
"dev": true,
"requires": {
- "delayed-stream": "1.0.0"
+ "delayed-stream": "0.0.5"
}
},
"commander": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
- "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
- "dev": true,
- "requires": {
- "graceful-readlink": "1.0.1"
- }
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
+ "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
+ "dev": true
},
"commondir": {
"version": "1.0.1",
@@ -1868,35 +1916,87 @@
"integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
"dev": true
},
+ "compressible": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.11.tgz",
+ "integrity": "sha1-FnGKdd4oPtjmBAQWJaIGRYZ5fYo=",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.29.0"
+ }
+ },
+ "compression": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.0.tgz",
+ "integrity": "sha1-AwyfGY8WQ6BX13anOOki2kNzAS0=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.4",
+ "bytes": "2.5.0",
+ "compressible": "2.0.11",
+ "debug": "2.6.8",
+ "on-headers": "1.0.1",
+ "safe-buffer": "5.1.1",
+ "vary": "1.1.1"
+ },
+ "dependencies": {
+ "bytes": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.5.0.tgz",
+ "integrity": "sha1-TJQj6i0lLCcMQbK97+/5u2tiwGo=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.8",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+ "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
},
"concat-stream": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
- "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
+ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
"dev": true,
"requires": {
"inherits": "2.0.3",
- "readable-stream": "2.0.6",
+ "readable-stream": "2.3.3",
"typedarray": "0.0.6"
},
"dependencies": {
"readable-stream": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
- "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
"dev": true,
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "1.0.0",
"process-nextick-args": "1.0.7",
- "string_decoder": "0.10.31",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
"util-deprecate": "1.0.2"
}
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
}
}
},
@@ -1935,6 +2035,12 @@
"busboy": "0.2.14"
}
},
+ "connect-history-api-fallback": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz",
+ "integrity": "sha1-5R0X+PDvDbkKZP20feMFFVbp8Wk=",
+ "dev": true
+ },
"console-browserify": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
@@ -1975,9 +2081,9 @@
"dev": true
},
"convict": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/convict/-/convict-3.0.0.tgz",
- "integrity": "sha1-JZ8wv7h+4JRIYEhiA1GdRntNUbU=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/convict/-/convict-4.0.0.tgz",
+ "integrity": "sha1-c1B/0Lc3DRA70NCFBNu2ok8vwJ8=",
"requires": {
"depd": "1.1.0",
"json5": "0.5.1",
@@ -1992,66 +2098,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz",
"integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM="
- },
- "json5": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
- "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
- },
- "lodash.clonedeep": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
- },
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
- },
- "moment": {
- "version": "2.17.1",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.17.1.tgz",
- "integrity": "sha1-/tlQYGPzaxDwZsi1mhRNf66+HYI="
- },
- "validator": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/validator/-/validator-7.0.0.tgz",
- "integrity": "sha1-x03rgGNRL6w1VHk45vCxUEooL9I="
- },
- "varify": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/varify/-/varify-0.2.0.tgz",
- "integrity": "sha1-GR2p/p3EzWjQ0USY1OKpEP9OZRY=",
- "optional": true,
- "requires": {
- "redeyed": "1.0.1",
- "through": "2.3.8"
- },
- "dependencies": {
- "redeyed": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-1.0.1.tgz",
- "integrity": "sha1-6WwZO0DAgWsArshCaY5hGF5VSYo=",
- "optional": true,
- "requires": {
- "esprima": "3.0.0"
- },
- "dependencies": {
- "esprima": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.0.0.tgz",
- "integrity": "sha1-U88kes2ncxPlUcOqLnM0LT+099k=",
- "optional": true
- }
- }
- },
- "through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
- "optional": true
- }
- }
}
}
},
@@ -2060,6 +2106,12 @@
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
"integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
},
+ "cookie-jar": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/cookie-jar/-/cookie-jar-0.3.0.tgz",
+ "integrity": "sha1-vJon1OK5fhhs1XyeIGPLmfpozMw=",
+ "dev": true
+ },
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
@@ -2106,6 +2158,19 @@
"rimraf": "2.6.1"
}
},
+ "glob": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
+ "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+ "dev": true,
+ "requires": {
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -2121,15 +2186,6 @@
"is-extglob": "2.1.1"
}
},
- "jsonfile": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
- "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
- "dev": true,
- "requires": {
- "graceful-fs": "4.1.11"
- }
- },
"loader-utils": {
"version": "0.2.17",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
@@ -2156,26 +2212,19 @@
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"cosmiconfig": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz",
- "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-1.1.0.tgz",
+ "integrity": "sha1-DeoPmATv37kp+7GxiOJVU+oFPTc=",
"dev": true,
"requires": {
- "is-directory": "0.3.1",
+ "graceful-fs": "4.1.11",
"js-yaml": "3.7.0",
"minimist": "1.2.0",
"object-assign": "4.1.1",
"os-homedir": "1.0.2",
"parse-json": "2.2.0",
+ "pinkie-promise": "2.0.1",
"require-from-string": "1.2.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- }
}
},
"create-ecdh": {
@@ -2235,6 +2284,15 @@
"which": "1.3.0"
}
},
+ "cryptiles": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz",
+ "integrity": "sha1-7ZH/HxetE9N0gohZT4pIoNJvMlw=",
+ "dev": true,
+ "requires": {
+ "boom": "0.4.2"
+ }
+ },
"crypto-browserify": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-1.0.9.tgz",
@@ -2247,12 +2305,12 @@
"dev": true
},
"css-loader": {
- "version": "0.28.4",
- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.4.tgz",
- "integrity": "sha1-bPNXkZLONV6LONX0Ldeh8uyJjQ8=",
+ "version": "0.28.5",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.5.tgz",
+ "integrity": "sha512-/FJmsDD8e6xZOBHMFShN/BCjnrEybq0spYaTZ1QoZ10/jhUa1LDDojQELu/JJ1ykZZjt0nSwkYrb2Mfx3bZx3Q==",
"dev": true,
"requires": {
- "babel-code-frame": "6.22.0",
+ "babel-code-frame": "6.26.0",
"css-selector-tokenizer": "0.7.0",
"cssnano": "3.10.0",
"icss-utils": "2.1.0",
@@ -2265,7 +2323,7 @@
"postcss-modules-scope": "1.1.0",
"postcss-modules-values": "1.3.0",
"postcss-value-parser": "3.3.0",
- "source-list-map": "0.1.8"
+ "source-list-map": "2.0.0"
},
"dependencies": {
"has-flag": {
@@ -2282,22 +2340,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-list-map": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz",
- "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=",
- "dev": true
- },
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -2316,15 +2362,7 @@
"dev": true,
"requires": {
"minimist": "1.2.0",
- "postcss": "6.0.8"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- }
+ "postcss": "6.0.9"
}
},
"css-rule-stream": {
@@ -2339,21 +2377,24 @@
"through2": "0.6.5"
},
"dependencies": {
- "duplexer2": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
- "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
- "dev": true,
- "requires": {
- "readable-stream": "1.1.14"
- }
- },
"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"
+ }
+ },
"through2": {
"version": "0.6.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
@@ -2362,36 +2403,10 @@
"requires": {
"readable-stream": "1.0.34",
"xtend": "4.0.1"
- },
- "dependencies": {
- "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"
- }
- }
}
}
}
},
- "css-select": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
- "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
- "dev": true,
- "requires": {
- "boolbase": "1.0.0",
- "css-what": "2.1.0",
- "domutils": "1.5.1",
- "nth-check": "1.0.1"
- }
- },
"css-selector-tokenizer": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz",
@@ -2426,12 +2441,6 @@
"readable-stream": "1.1.14"
}
},
- "css-what": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz",
- "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=",
- "dev": true
- },
"cssesc": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz",
@@ -2485,7 +2494,7 @@
"dev": true,
"requires": {
"browserslist": "1.7.7",
- "caniuse-db": "1.0.30000712",
+ "caniuse-db": "1.0.30000717",
"normalize-range": "0.1.2",
"num2fraction": "1.2.2",
"postcss": "5.2.17",
@@ -2498,8 +2507,8 @@
"integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
"dev": true,
"requires": {
- "caniuse-db": "1.0.30000712",
- "electron-to-chromium": "1.3.17"
+ "caniuse-db": "1.0.30000717",
+ "electron-to-chromium": "1.3.18"
}
},
"has-flag": {
@@ -2516,16 +2525,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -2544,17 +2547,15 @@
"dev": true,
"requires": {
"clap": "1.2.0",
- "source-map": "0.5.6"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- }
+ "source-map": "0.5.7"
}
},
+ "ctype": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz",
+ "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=",
+ "dev": true
+ },
"currently-unhandled": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
@@ -2570,7 +2571,7 @@
"integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
"dev": true,
"requires": {
- "es5-ext": "0.10.27"
+ "es5-ext": "0.10.29"
}
},
"dasherize": {
@@ -2611,7 +2612,14 @@
"decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "deep-equal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
+ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
+ "dev": true
},
"deep-is": {
"version": "0.1.3",
@@ -2623,6 +2631,7 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
"integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
+ "dev": true,
"requires": {
"foreach": "2.0.5",
"object-keys": "1.0.11"
@@ -2650,9 +2659,9 @@
}
},
"delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz",
+ "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=",
"dev": true
},
"depd": {
@@ -2660,24 +2669,6 @@
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
"integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k="
},
- "dependency-graph": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.5.0.tgz",
- "integrity": "sha1-ce33lF27qGwbGayYK2r7ZHa1bdU=",
- "dev": true
- },
- "deps-sort": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz",
- "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=",
- "dev": true,
- "requires": {
- "JSONStream": "1.3.1",
- "shasum": "1.0.2",
- "subarg": "1.0.0",
- "through2": "2.0.3"
- }
- },
"des.js": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
@@ -2702,15 +2693,11 @@
"repeating": "2.0.1"
}
},
- "detective": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/detective/-/detective-4.5.0.tgz",
- "integrity": "sha1-blqMaybmx6JUsca210kNmOyR7dE=",
- "dev": true,
- "requires": {
- "acorn": "4.0.13",
- "defined": "1.0.0"
- }
+ "detect-node": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz",
+ "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=",
+ "dev": true
},
"dicer": {
"version": "0.2.5",
@@ -2738,11 +2725,36 @@
"randombytes": "2.0.5"
}
},
+ "dns-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
+ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+ "dev": true
+ },
+ "dns-packet": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.2.2.tgz",
+ "integrity": "sha512-kN+DjfGF7dJGUL7nWRktL9Z18t1rWP3aQlyZdY8XlpvU3Nc6GeFTQApftcjtWKxAZfiggZSGrCEoszNgvnpwDg==",
+ "dev": true,
+ "requires": {
+ "ip": "1.1.5",
+ "safe-buffer": "5.1.1"
+ }
+ },
"dns-prefetch-control": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/dns-prefetch-control/-/dns-prefetch-control-0.1.0.tgz",
"integrity": "sha1-YN20V3dOF48flBXwyrsOhbCzALI="
},
+ "dns-txt": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
+ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+ "dev": true,
+ "requires": {
+ "buffer-indexof": "1.1.1"
+ }
+ },
"doctrine": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz",
@@ -2753,85 +2765,48 @@
"isarray": "1.0.0"
}
},
+ "document-ready": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/document-ready/-/document-ready-2.0.1.tgz",
+ "integrity": "sha1-PjvzHTI1uU4jLnssX6GmNOhzuuQ="
+ },
"doiuse": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/doiuse/-/doiuse-3.0.0.tgz",
"integrity": "sha1-4Nhm/9fFMP2luUSa+XCWxKrIlPY=",
"dev": true,
"requires": {
- "browserslist": "2.3.0",
- "caniuse-lite": "1.0.30000712",
+ "browserslist": "2.3.3",
+ "caniuse-lite": "1.0.30000717",
"css-rule-stream": "1.1.0",
"duplexer2": "0.0.2",
"jsonfilter": "1.1.2",
"ldjson-stream": "1.2.1",
"lodash": "4.17.4",
"multimatch": "2.1.0",
- "postcss": "6.0.8",
- "source-map": "0.5.6",
+ "postcss": "6.0.9",
+ "source-map": "0.5.7",
"through2": "0.6.5",
"yargs": "8.0.2"
},
"dependencies": {
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- },
- "cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
- "dev": true,
- "requires": {
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1",
- "wrap-ansi": "2.1.0"
- },
- "dependencies": {
- "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"
- }
- }
- }
- },
- "duplexer2": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
- "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
- "dev": true,
- "requires": {
- "readable-stream": "1.1.14"
- }
- },
- "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"
- }
- },
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
"dev": true
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "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"
+ }
},
"through2": {
"version": "0.6.5",
@@ -2841,79 +2816,15 @@
"requires": {
"readable-stream": "1.0.34",
"xtend": "4.0.1"
- },
- "dependencies": {
- "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"
- }
- }
- }
- },
- "yargs": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
- "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
- "dev": true,
- "requires": {
- "camelcase": "4.1.0",
- "cliui": "3.2.0",
- "decamelize": "1.2.0",
- "get-caller-file": "1.0.2",
- "os-locale": "2.1.0",
- "read-pkg-up": "2.0.0",
- "require-directory": "2.1.1",
- "require-main-filename": "1.0.1",
- "set-blocking": "2.0.0",
- "string-width": "2.1.1",
- "which-module": "2.0.0",
- "y18n": "3.2.1",
- "yargs-parser": "7.0.0"
}
}
}
},
- "dom-converter": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz",
- "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=",
- "dev": true,
- "requires": {
- "utila": "0.3.3"
- },
- "dependencies": {
- "utila": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz",
- "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=",
- "dev": true
- }
- }
- },
- "dom-serializer": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
- "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
- "dev": true,
- "requires": {
- "domelementtype": "1.1.3",
- "entities": "1.1.1"
- },
- "dependencies": {
- "domelementtype": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
- "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
- "dev": true
- }
- }
+ "dom-walk": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz",
+ "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=",
+ "dev": true
},
"domain-browser": {
"version": "1.1.7",
@@ -2921,31 +2832,6 @@
"integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=",
"dev": true
},
- "domelementtype": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
- "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
- "dev": true
- },
- "domhandler": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz",
- "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=",
- "dev": true,
- "requires": {
- "domelementtype": "1.3.0"
- }
- },
- "domutils": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
- "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
- "dev": true,
- "requires": {
- "dom-serializer": "0.1.0",
- "domelementtype": "1.3.0"
- }
- },
"dont-sniff-mimetype": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.0.0.tgz",
@@ -2963,38 +2849,12 @@
"dev": true
},
"duplexer2": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
- "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
+ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
"dev": true,
"requires": {
- "readable-stream": "2.3.3"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
- "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
- "dev": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "1.0.7",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
- }
- },
- "string_decoder": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
- "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "5.1.1"
- }
- }
+ "readable-stream": "1.1.14"
}
},
"ee-first": {
@@ -3003,9 +2863,9 @@
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"electron-to-chromium": {
- "version": "1.3.17",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.17.tgz",
- "integrity": "sha1-QcE0V8xxZsXBXnZ65h2GqMrN7l0=",
+ "version": "1.3.18",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.18.tgz",
+ "integrity": "sha1-PcyZ2j5rZl9qu8ccKK1Ros1zGpw=",
"dev": true
},
"elegant-spinner": {
@@ -3052,12 +2912,6 @@
"tapable": "0.2.8"
}
},
- "entities": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
- "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
- "dev": true
- },
"errno": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz",
@@ -3101,9 +2955,9 @@
}
},
"es5-ext": {
- "version": "0.10.27",
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.27.tgz",
- "integrity": "sha512-3KXJRYzKXTd7xfFy5uZsJCXue55fAYQ035PRjyYk2PicllxIwcW9l3AbM/eGaw3vgVAUW4tl4xg9AXDEI6yw0w==",
+ "version": "0.10.29",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.29.tgz",
+ "integrity": "sha512-KXla9NXo5sdaEkGSmbFPYgjH6m75kxsthL6GDRSug/Y2OiMoYm0I9giL39j4cgmaFmAbkIFJ6gG+SGKnLSmOvA==",
"dev": true,
"requires": {
"es6-iterator": "2.0.1",
@@ -3117,7 +2971,7 @@
"dev": true,
"requires": {
"d": "1.0.0",
- "es5-ext": "0.10.27",
+ "es5-ext": "0.10.29",
"es6-symbol": "3.1.1"
}
},
@@ -3128,7 +2982,7 @@
"dev": true,
"requires": {
"d": "1.0.0",
- "es5-ext": "0.10.27",
+ "es5-ext": "0.10.29",
"es6-iterator": "2.0.1",
"es6-set": "0.1.5",
"es6-symbol": "3.1.1",
@@ -3148,7 +3002,7 @@
"dev": true,
"requires": {
"d": "1.0.0",
- "es5-ext": "0.10.27",
+ "es5-ext": "0.10.29",
"es6-iterator": "2.0.1",
"es6-symbol": "3.1.1",
"event-emitter": "0.3.5"
@@ -3161,7 +3015,7 @@
"dev": true,
"requires": {
"d": "1.0.0",
- "es5-ext": "0.10.27"
+ "es5-ext": "0.10.29"
}
},
"es6-templates": {
@@ -3181,7 +3035,7 @@
"dev": true,
"requires": {
"d": "1.0.0",
- "es5-ext": "0.10.27",
+ "es5-ext": "0.10.29",
"es6-iterator": "2.0.1",
"es6-symbol": "3.1.1"
}
@@ -3209,14 +3063,14 @@
}
},
"eslint": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.4.1.tgz",
- "integrity": "sha1-mc1+r8/8ov+Zpcj18qR01jZLS9M=",
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.5.0.tgz",
+ "integrity": "sha1-u3XTuL3pf7XhPvzVOXRGd/6wGcM=",
"dev": true,
"requires": {
"ajv": "5.2.2",
- "babel-code-frame": "6.22.0",
- "chalk": "1.1.3",
+ "babel-code-frame": "6.26.0",
+ "chalk": "2.1.0",
"concat-stream": "1.6.0",
"cross-spawn": "5.1.0",
"debug": "2.6.8",
@@ -3232,7 +3086,7 @@
"globals": "9.18.0",
"ignore": "3.3.3",
"imurmurhash": "0.1.4",
- "inquirer": "3.2.1",
+ "inquirer": "3.2.2",
"is-resolvable": "1.0.0",
"js-yaml": "3.9.1",
"json-stable-stringify": "1.0.1",
@@ -3247,20 +3101,36 @@
"progress": "2.0.0",
"require-uncached": "1.0.3",
"semver": "5.4.1",
+ "strip-ansi": "4.0.0",
"strip-json-comments": "2.0.1",
"table": "4.0.1",
"text-table": "0.2.0"
},
"dependencies": {
- "concat-stream": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
- "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.3",
- "typedarray": "0.0.6"
+ "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.2.1"
}
},
"debug": {
@@ -3278,20 +3148,6 @@
"integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
"dev": true
},
- "glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
- }
- },
"js-yaml": {
"version": "3.9.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.1.tgz",
@@ -3302,37 +3158,22 @@
"esprima": "4.0.0"
}
},
- "json-stable-stringify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
- "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+ "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": {
- "jsonify": "0.0.0"
+ "ansi-regex": "3.0.0"
}
},
- "readable-stream": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
- "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "supports-color": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz",
+ "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "1.0.7",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
- }
- },
- "string_decoder": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
- "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "5.1.1"
+ "has-flag": "2.0.0"
}
}
}
@@ -3393,21 +3234,13 @@
"requires": {
"acorn": "5.1.1",
"acorn-jsx": "3.0.1"
- },
- "dependencies": {
- "acorn": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.1.tgz",
- "integrity": "sha512-vOk6uEMctu0vQrvuSqFdJyqj1Q0S5VTDL79qtjo+DhRr+1mmaD+tluFSCZqhvi/JUhXSzoZN2BhtstaPEeE8cw==",
- "dev": true
- }
}
},
"esprima": {
- "version": "2.7.3",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
- "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
- "dev": true
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.0.0.tgz",
+ "integrity": "sha1-U88kes2ncxPlUcOqLnM0LT+099k=",
+ "optional": true
},
"esquery": {
"version": "1.0.0",
@@ -3452,7 +3285,7 @@
"dev": true,
"requires": {
"d": "1.0.0",
- "es5-ext": "0.10.27"
+ "es5-ext": "0.10.29"
}
},
"event-stream": {
@@ -3470,24 +3303,40 @@
"through": "2.3.8"
}
},
+ "eventemitter3": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz",
+ "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=",
+ "dev": true
+ },
"events": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
"integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
},
- "evp_bytestokey": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz",
- "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=",
+ "eventsource": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz",
+ "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=",
"dev": true,
"requires": {
- "create-hash": "1.1.3"
+ "original": "1.0.0"
+ }
+ },
+ "evp_bytestokey": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.2.tgz",
+ "integrity": "sha512-ni0r0lrm7AOzsh2qC5mi9sj8S0gmj5fLNjfFpxN05FB4tAVZEKotbkjOtLPqTCX/CXT7NsUr6juZb4IFJeNNdA==",
+ "dev": true,
+ "requires": {
+ "md5.js": "1.3.4",
+ "safe-buffer": "5.1.1"
}
},
"execa": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
- "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz",
+ "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
"dev": true,
"requires": {
"cross-spawn": "5.1.0",
@@ -3537,12 +3386,18 @@
"resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.1.0.tgz",
"integrity": "sha1-UnNWeN4YUwiQ2Ne5XwrGNkCVgJQ="
},
+ "expose-loader": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-0.7.3.tgz",
+ "integrity": "sha1-NfvTZZeJ5PqoH1nei36fw55GbVE=",
+ "dev": true
+ },
"express": {
"version": "4.15.4",
"resolved": "https://registry.npmjs.org/express/-/express-4.15.4.tgz",
"integrity": "sha1-Ay4iU0ic+PzgJma+yj0R7XotrtE=",
"requires": {
- "accepts": "1.3.3",
+ "accepts": "1.3.4",
"array-flatten": "1.1.1",
"content-disposition": "0.5.2",
"content-type": "1.0.2",
@@ -3587,16 +3442,13 @@
}
}
},
- "express-handlebars": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-3.0.0.tgz",
- "integrity": "sha1-gKBwu4GbCeSvLKbQeA91zgXnXC8=",
+ "express-request-language": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/express-request-language/-/express-request-language-1.1.12.tgz",
+ "integrity": "sha1-u/gj7wsR6M68B9Ql8N+dXgkAH0Q=",
"requires": {
- "glob": "6.0.4",
- "graceful-fs": "4.1.11",
- "handlebars": "4.0.10",
- "object.assign": "4.0.4",
- "promise": "7.3.1"
+ "accept-language": "3.0.17",
+ "bcp47": "1.1.2"
}
},
"extend": {
@@ -3634,14 +3486,34 @@
}
},
"extract-loader": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/extract-loader/-/extract-loader-1.0.0.tgz",
- "integrity": "sha512-NEWbK3OHP2csbg35pXPbnRP8rmSxSSisROK+SN2m+UloWL5COgtj+/YuX4o6KSK3PLYFNdF6j3BxyboCbSvSMg==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/extract-loader/-/extract-loader-1.0.1.tgz",
+ "integrity": "sha512-As/KL9XEi3O4gpJsP3qvYFXy8yN9hqsDNY8/VCN0iEAPV7OieMx44jib1M8Ba0Y/t6MOEvJMyvWJQqFxcMZ14w==",
"dev": true,
"requires": {
"loader-utils": "1.1.0"
}
},
+ "falafel": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.1.0.tgz",
+ "integrity": "sha1-lrsXdh2rqU9G0AFzizzt86Z/4Gw=",
+ "dev": true,
+ "requires": {
+ "acorn": "5.1.1",
+ "foreach": "2.0.5",
+ "isarray": "0.0.1",
+ "object-keys": "1.0.11"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ }
+ }
+ },
"fast-deep-equal": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
@@ -3660,6 +3532,15 @@
"integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=",
"dev": true
},
+ "faye-websocket": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
+ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+ "dev": true,
+ "requires": {
+ "websocket-driver": "0.6.5"
+ }
+ },
"figures": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
@@ -3702,6 +3583,14 @@
"requires": {
"is-object": "1.0.1",
"merge-descriptors": "1.0.1"
+ },
+ "dependencies": {
+ "is-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz",
+ "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=",
+ "dev": true
+ }
}
},
"fill-range": {
@@ -3780,25 +3669,14 @@
"dev": true
},
"fluent": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/fluent/-/fluent-0.3.1.tgz",
- "integrity": "sha1-f6TOw/9X1wjI4me3sMSjTXog7nI=",
- "dev": true
- },
- "fluent-intl-polyfill": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/fluent-intl-polyfill/-/fluent-intl-polyfill-0.1.0.tgz",
- "integrity": "sha1-ETOUSrJHeINHOZVZaIPg05z4hc8=",
- "dev": true,
- "requires": {
- "intl-pluralrules": "github:projectfluent/IntlPluralRules#94cb0fa1c23ad943bc5aafef43cea132fa51d68b"
- }
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/fluent/-/fluent-0.4.1.tgz",
+ "integrity": "sha512-vatFe36jVjXclCYPRopLVB6oR5ceuKWnn6oVLIuLCnkdCb49RGuTznPdd51xATo+S83N9zLD1xsYf1Ma4s2VoQ=="
},
"fluent-langneg": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/fluent-langneg/-/fluent-langneg-0.0.3.tgz",
- "integrity": "sha512-atYae9PGcLqa3ckStk3IPDjpdkkqzSzsR86viQB0y1kMhajR2tCAf6nmHTOvfKsV8WB9ZotWPrDpcLVLwD9/gA==",
- "dev": true
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/fluent-langneg/-/fluent-langneg-0.1.0.tgz",
+ "integrity": "sha512-SzRtXNaIcCyRabIpcv+AQd0gn+tXv1wfDDvej3wtBo1/XV0iDnCw5XzbARRRmZMW+IEg+Q26jup6vYgnDam4dg=="
},
"for-in": {
"version": "1.0.2",
@@ -3818,17 +3696,32 @@
"foreach": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
- "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k="
+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
+ "dev": true
+ },
+ "forever-agent": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz",
+ "integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=",
+ "dev": true
},
"form-data": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.2.0.tgz",
- "integrity": "sha1-ml47kpX5gLJiPPZPojixTOvKcHs=",
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.0.8.tgz",
+ "integrity": "sha1-CJDNEAXFzOzAudJKiAUskkQtDbU=",
"dev": true,
"requires": {
- "asynckit": "0.4.0",
- "combined-stream": "1.0.5",
- "mime-types": "2.1.16"
+ "async": "0.2.10",
+ "combined-stream": "0.0.7",
+ "mime": "1.2.11"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "1.2.11",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
+ "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=",
+ "dev": true
+ }
}
},
"formatio": {
@@ -3868,14 +3761,16 @@
"dev": true
},
"fs-extra": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
- "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=",
+ "version": "0.30.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
+ "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
"dev": true,
"requires": {
"graceful-fs": "4.1.11",
- "jsonfile": "3.0.1",
- "universalify": "0.1.1"
+ "jsonfile": "2.4.0",
+ "klaw": "1.3.1",
+ "path-is-absolute": "1.0.1",
+ "rimraf": "2.6.1"
}
},
"fs.realpath": {
@@ -4786,7 +4681,8 @@
"function-bind": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz",
- "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E="
+ "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=",
+ "dev": true
},
"functional-red-black-tree": {
"version": "1.0.1",
@@ -4812,6 +4708,20 @@
"integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
"dev": true
},
+ "ghauth": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ghauth/-/ghauth-3.0.0.tgz",
+ "integrity": "sha1-gpKiTvR4mfGAo5x4DEgJVhKUvbw=",
+ "dev": true,
+ "requires": {
+ "application-config": "0.1.2",
+ "bl": "0.9.5",
+ "hyperquest": "1.2.0",
+ "mkdirp": "0.5.1",
+ "read": "1.0.7",
+ "xtend": "4.0.1"
+ }
+ },
"git-rev-sync": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/git-rev-sync/-/git-rev-sync-1.9.1.tgz",
@@ -4823,11 +4733,62 @@
"shelljs": "0.7.7"
}
},
- "glob": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
- "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+ "github": {
+ "version": "0.1.16",
+ "resolved": "https://registry.npmjs.org/github/-/github-0.1.16.tgz",
+ "integrity": "sha1-iV0qhbD+t5gNiawM5PRNyqA/F7U=",
+ "dev": true
+ },
+ "github-changes": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/github-changes/-/github-changes-1.1.0.tgz",
+ "integrity": "sha1-1Oi5i8N7Mv4nKuABcUFtbN9r/+4=",
+ "dev": true,
"requires": {
+ "bluebird": "1.0.3",
+ "ghauth": "3.0.0",
+ "github": "0.1.16",
+ "github-commit-stream": "0.1.0",
+ "lodash": "2.4.1",
+ "moment-timezone": "0.5.5",
+ "nomnom": "1.6.2",
+ "parse-link-header": "0.1.0",
+ "semver": "2.2.1"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz",
+ "integrity": "sha1-W3cjA03aTSYuWkb7LFjXzCL3FCA=",
+ "dev": true
+ },
+ "semver": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-2.2.1.tgz",
+ "integrity": "sha1-eUEYKz/8xYC/8cF5QqzfeVHA0hM=",
+ "dev": true
+ }
+ }
+ },
+ "github-commit-stream": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/github-commit-stream/-/github-commit-stream-0.1.0.tgz",
+ "integrity": "sha1-2823smeWcYa3DMc2ORgw2mNo16E=",
+ "dev": true,
+ "requires": {
+ "async": "0.2.10",
+ "parse-link-header": "0.1.0",
+ "request": "2.22.0",
+ "through": "2.3.8"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
"inflight": "1.0.6",
"inherits": "2.0.3",
"minimatch": "3.0.4",
@@ -4854,6 +4815,16 @@
"is-glob": "2.0.1"
}
},
+ "global": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz",
+ "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=",
+ "dev": true,
+ "requires": {
+ "min-document": "2.19.0",
+ "process": "0.5.2"
+ }
+ },
"globals": {
"version": "9.18.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
@@ -4872,22 +4843,6 @@
"object-assign": "4.1.1",
"pify": "2.3.0",
"pinkie-promise": "2.0.1"
- },
- "dependencies": {
- "glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
- }
- }
}
},
"globjoin": {
@@ -4899,7 +4854,8 @@
"graceful-fs": {
"version": "4.1.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
},
"graceful-readlink": {
"version": "1.0.1",
@@ -4913,16 +4869,11 @@
"integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=",
"dev": true
},
- "handlebars": {
- "version": "4.0.10",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz",
- "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=",
- "requires": {
- "async": "1.5.2",
- "optimist": "0.6.1",
- "source-map": "0.4.4",
- "uglify-js": "2.8.29"
- }
+ "handle-thing": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz",
+ "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=",
+ "dev": true
},
"has": {
"version": "1.0.1",
@@ -4966,6 +4917,18 @@
"minimalistic-assert": "1.0.0"
}
},
+ "hawk": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-0.13.1.tgz",
+ "integrity": "sha1-NheViCH1gxHk1/beKR/KZitBLvQ=",
+ "dev": true,
+ "requires": {
+ "boom": "0.4.2",
+ "cryptiles": "0.2.2",
+ "hoek": "0.8.5",
+ "sntp": "0.2.4"
+ }
+ },
"he": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
@@ -5020,6 +4983,12 @@
"minimalistic-crypto-utils": "1.0.1"
}
},
+ "hoek": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.8.5.tgz",
+ "integrity": "sha1-Hp/XcO9+vgJ0rfy1sIBqAlpeTp8=",
+ "dev": true
+ },
"home-or-tmp": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
@@ -5036,6 +5005,44 @@
"integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==",
"dev": true
},
+ "hpack.js": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "obuf": "1.1.1",
+ "readable-stream": "2.3.3",
+ "wbuf": "1.7.2"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
"hpkp": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/hpkp/-/hpkp-2.0.0.tgz",
@@ -5052,6 +5059,12 @@
"integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=",
"dev": true
},
+ "html-entities": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
+ "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=",
+ "dev": true
+ },
"html-loader": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.5.1.tgz",
@@ -5078,31 +5091,7 @@
"ncname": "1.0.0",
"param-case": "2.1.1",
"relateurl": "0.2.7",
- "uglify-js": "3.0.27"
- },
- "dependencies": {
- "commander": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
- "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
- "dev": true
- },
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
- "uglify-js": {
- "version": "3.0.27",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.27.tgz",
- "integrity": "sha512-HD8CmxPXUI62v5tweiulMcP/apAtx1DXGcNZkhKQZyC+MTrTsoCBb8yPAwVrbvpgw3EpRU76bRe6axjIiCYcQg==",
- "dev": true,
- "requires": {
- "commander": "2.11.0",
- "source-map": "0.5.6"
- }
- }
+ "uglify-js": "3.0.28"
}
},
"html-tags": {
@@ -5111,61 +5100,100 @@
"integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=",
"dev": true
},
- "html-webpack-plugin": {
- "version": "2.30.1",
- "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz",
- "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=",
+ "http-deceiver": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
+ "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
+ "requires": {
+ "depd": "1.1.1",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.3",
+ "statuses": "1.3.1"
+ }
+ },
+ "http-proxy": {
+ "version": "1.16.2",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz",
+ "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=",
"dev": true,
"requires": {
- "bluebird": "3.5.0",
- "html-minifier": "3.5.3",
- "loader-utils": "0.2.17",
+ "eventemitter3": "1.2.0",
+ "requires-port": "1.0.0"
+ }
+ },
+ "http-proxy-middleware": {
+ "version": "0.17.4",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz",
+ "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=",
+ "dev": true,
+ "requires": {
+ "http-proxy": "1.16.2",
+ "is-glob": "3.1.0",
"lodash": "4.17.4",
- "pretty-error": "2.1.1",
- "toposort": "1.0.3"
+ "micromatch": "2.3.11"
},
"dependencies": {
- "loader-utils": {
- "version": "0.2.17",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
- "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+ "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": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
"dev": true,
"requires": {
- "big.js": "3.1.3",
- "emojis-list": "2.1.0",
- "json5": "0.5.1",
- "object-assign": "4.1.1"
+ "is-extglob": "2.1.1"
}
}
}
},
- "htmlescape": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz",
- "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=",
- "dev": true
- },
- "htmlparser2": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz",
- "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=",
+ "http-signature": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz",
+ "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=",
"dev": true,
"requires": {
- "domelementtype": "1.3.0",
- "domhandler": "2.1.0",
- "domutils": "1.1.6",
- "readable-stream": "1.0.34"
+ "asn1": "0.1.11",
+ "assert-plus": "0.1.5",
+ "ctype": "0.5.3"
+ }
+ },
+ "https-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz",
+ "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=",
+ "dev": true
+ },
+ "husky": {
+ "version": "0.14.3",
+ "resolved": "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz",
+ "integrity": "sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA==",
+ "dev": true,
+ "requires": {
+ "is-ci": "1.0.10",
+ "normalize-path": "1.0.0",
+ "strip-indent": "2.0.0"
+ }
+ },
+ "hyperquest": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/hyperquest/-/hyperquest-1.2.0.tgz",
+ "integrity": "sha1-OeH+9miI3Hzg3sbA3YFPb8iUStU=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "0.0.2",
+ "through2": "0.6.5"
},
"dependencies": {
- "domutils": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz",
- "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=",
- "dev": true,
- "requires": {
- "domelementtype": "1.3.0"
- }
- },
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
@@ -5183,62 +5211,28 @@
"isarray": "0.0.1",
"string_decoder": "0.10.31"
}
- }
- }
- },
- "http-errors": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
- "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
- "requires": {
- "depd": "1.1.1",
- "inherits": "2.0.3",
- "setprototypeof": "1.0.3",
- "statuses": "1.3.1"
- }
- },
- "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
- },
- "husky": {
- "version": "0.14.3",
- "resolved": "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz",
- "integrity": "sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA==",
- "dev": true,
- "requires": {
- "is-ci": "1.0.10",
- "normalize-path": "1.0.0",
- "strip-indent": "2.0.0"
- },
- "dependencies": {
- "normalize-path": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz",
- "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=",
- "dev": true
},
- "strip-indent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
- "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
- "dev": true
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "xtend": "4.0.1"
+ }
}
}
},
"hyperscript-attribute-to-property": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/hyperscript-attribute-to-property/-/hyperscript-attribute-to-property-1.0.0.tgz",
- "integrity": "sha1-glMI1Ju44pV5I/cxmBvMgRytev8=",
- "dev": true
+ "integrity": "sha1-glMI1Ju44pV5I/cxmBvMgRytev8="
},
"hyperx": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/hyperx/-/hyperx-2.3.0.tgz",
"integrity": "sha1-cPRz1m1K1VDd0cg+S+JlEna78eI=",
- "dev": true,
"requires": {
"hyperscript-attribute-to-property": "1.0.0"
}
@@ -5260,7 +5254,7 @@
"integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=",
"dev": true,
"requires": {
- "postcss": "6.0.8"
+ "postcss": "6.0.9"
}
},
"ieee754": {
@@ -5316,6 +5310,7 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
"requires": {
"once": "1.4.0",
"wrappy": "1.0.2"
@@ -5326,33 +5321,16 @@
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
- "inline-source-map": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz",
- "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=",
- "dev": true,
- "requires": {
- "source-map": "0.5.6"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- }
- }
- },
"inquirer": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.1.tgz",
- "integrity": "sha512-QgW3eiPN8gpj/K5vVpHADJJgrrF0ho/dZGylikGX7iqAdRgC9FVKYKWFLx6hZDBFcOLEoSqINYrVPeFAeG/PdA==",
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.2.tgz",
+ "integrity": "sha512-bTKLzEHJVATimZO/YFdLrom0lRx1BHfRYskFHfIMVkGdp8+dIZaxuU+4yrsS1lcu6YWywVQVVsfvdwESzbeqHw==",
"dev": true,
"requires": {
"ansi-escapes": "2.0.0",
"chalk": "2.1.0",
"cli-cursor": "2.1.0",
- "cli-width": "2.1.0",
+ "cli-width": "2.2.0",
"external-editor": "2.0.4",
"figures": "2.0.0",
"lodash": "4.17.4",
@@ -5411,22 +5389,6 @@
}
}
},
- "insert-module-globals": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz",
- "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=",
- "dev": true,
- "requires": {
- "combine-source-map": "0.7.2",
- "concat-stream": "1.5.2",
- "is-buffer": "1.1.5",
- "JSONStream": "1.3.1",
- "lexical-scope": "1.2.0",
- "process": "0.11.10",
- "through2": "2.0.3",
- "xtend": "4.0.1"
- }
- },
"intel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/intel/-/intel-1.2.0.tgz",
@@ -5440,16 +5402,21 @@
"utcstring": "0.1.0"
}
},
+ "internal-ip": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz",
+ "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=",
+ "dev": true,
+ "requires": {
+ "meow": "3.7.0"
+ }
+ },
"interpret": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz",
"integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=",
"dev": true
},
- "intl-pluralrules": {
- "version": "github:projectfluent/IntlPluralRules#94cb0fa1c23ad943bc5aafef43cea132fa51d68b",
- "dev": true
- },
"invariant": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
@@ -5465,11 +5432,23 @@
"integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
"dev": true
},
+ "ip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+ "dev": true
+ },
"ipaddr.js": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz",
"integrity": "sha1-KWrKh4qCGBbluF0KKFqZvP9FgvA="
},
+ "is": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz",
+ "integrity": "sha1-OzSixI81mXLzUEKEkZOucmS2NWI=",
+ "dev": true
+ },
"is-absolute-url": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz",
@@ -5488,13 +5467,20 @@
"integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
"dev": true,
"requires": {
- "binary-extensions": "1.9.0"
+ "binary-extensions": "1.10.0"
}
},
+ "is-boolean-attribute": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/is-boolean-attribute/-/is-boolean-attribute-0.0.1.tgz",
+ "integrity": "sha1-JKtZt9y52jYSx3PmDGVlZeWgmAw=",
+ "dev": true
+ },
"is-buffer": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz",
- "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw="
+ "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=",
+ "dev": true
},
"is-builtin-module": {
"version": "1.0.0",
@@ -5541,8 +5527,7 @@
"is-electron": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.1.0.tgz",
- "integrity": "sha512-dkg5xT383+M6zIbbXW/z7n2nz4SFUi2OSyhntnFYkRdtV+HVEfdjEK+5AWisfYgkpe3WYjTIuh7toaKmSfFVWw==",
- "dev": true
+ "integrity": "sha512-dkg5xT383+M6zIbbXW/z7n2nz4SFUi2OSyhntnFYkRdtV+HVEfdjEK+5AWisfYgkpe3WYjTIuh7toaKmSfFVWw=="
},
"is-equal-shallow": {
"version": "0.1.3",
@@ -5599,9 +5584,9 @@
}
},
"is-object": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz",
- "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=",
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz",
+ "integrity": "sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc=",
"dev": true
},
"is-path-cwd": {
@@ -5760,6 +5745,14 @@
"requires": {
"argparse": "1.0.9",
"esprima": "2.7.3"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "dev": true
+ }
}
},
"jschardet": {
@@ -5787,9 +5780,9 @@
"dev": true
},
"json-stable-stringify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz",
- "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
"dev": true,
"requires": {
"jsonify": "0.0.0"
@@ -5809,13 +5802,12 @@
"json5": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
- "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
- "dev": true
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
},
"jsonfile": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
- "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
+ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
"dev": true,
"requires": {
"graceful-fs": "4.1.11"
@@ -5839,28 +5831,6 @@
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
"dev": true
},
- "jsonparse": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz",
- "integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=",
- "dev": true
- },
- "JSONStream": {
- "version": "0.8.4",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz",
- "integrity": "sha1-kWV9/m/4V0gwZhMrRhi2Lo9Ih70=",
- "dev": true,
- "requires": {
- "jsonparse": "0.0.5",
- "through": "2.3.8"
- }
- },
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- },
"readable-stream": {
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
@@ -5902,25 +5872,25 @@
"dev": true
},
"jsonparse": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz",
+ "integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=",
"dev": true
},
"JSONStream": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz",
- "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=",
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz",
+ "integrity": "sha1-kWV9/m/4V0gwZhMrRhi2Lo9Ih70=",
"dev": true,
"requires": {
- "jsonparse": "1.3.1",
+ "jsonparse": "0.0.5",
"through": "2.3.8"
}
},
"jszip": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.3.tgz",
- "integrity": "sha1-ipIEA7KxZRwPwSa+kBktkICVfDc=",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.4.tgz",
+ "integrity": "sha512-z6w8iYIxZ/fcgul0j/OerkYnkomH8BZigvzbxVmr2h5HkZUrPtk2kjYtLkqR9wwQxEP6ecKNoKLsbhd18jfnGA==",
"dev": true,
"requires": {
"core-js": "2.3.0",
@@ -5936,12 +5906,6 @@
"integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=",
"dev": true
},
- "pako": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.5.tgz",
- "integrity": "sha1-0iBd/ludqK95fnwWPbTR+E5GALw=",
- "dev": true
- },
"readable-stream": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
@@ -5958,10 +5922,17 @@
}
}
},
+ "just-extend": {
+ "version": "1.1.22",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-1.1.22.tgz",
+ "integrity": "sha1-MzCvdWyralQnAMZLLk5KoGLVL/8=",
+ "dev": true
+ },
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
"requires": {
"is-buffer": "1.1.5"
}
@@ -5981,40 +5952,11 @@
"integrity": "sha512-UTCzU28rRI9wkb8qSGoZa9pgWvxr4LjP2MEhi9XHb/1XMOJy0uTnIxaxzj8My/PORG+kQG6VzAcGvRw66eIOfA==",
"dev": true
},
- "l20n": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/l20n/-/l20n-5.0.0.tgz",
- "integrity": "sha1-XfkVSyCgrPAdTIsMRa8wuXpzGjM=",
- "dev": true,
- "requires": {
- "fluent": "0.3.1",
- "fluent-intl-polyfill": "0.1.0",
- "fluent-langneg": "0.0.3"
- }
- },
- "labeled-stream-splicer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz",
- "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=",
- "dev": true,
- "requires": {
- "inherits": "2.0.3",
- "isarray": "0.0.1",
- "stream-splicer": "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
- }
- }
- },
"lazy-cache": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
- "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+ "dev": true
},
"lcid": {
"version": "1.0.0",
@@ -6075,15 +6017,6 @@
"type-check": "0.3.2"
}
},
- "lexical-scope": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz",
- "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=",
- "dev": true,
- "requires": {
- "astw": "2.2.0"
- }
- },
"lie": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz",
@@ -6094,9 +6027,9 @@
}
},
"lint-staged": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-4.0.3.tgz",
- "integrity": "sha1-HOVVkbwsg6eBqQtpoKDIqg/GNws=",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-4.0.4.tgz",
+ "integrity": "sha1-nKaWizDfv+gTZbenY81PSZKJZVM=",
"dev": true,
"requires": {
"app-root-path": "2.0.1",
@@ -6108,45 +6041,6 @@
"npm-which": "3.0.1",
"p-map": "1.1.1",
"staged-git-files": "0.0.4"
- },
- "dependencies": {
- "cosmiconfig": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-1.1.0.tgz",
- "integrity": "sha1-DeoPmATv37kp+7GxiOJVU+oFPTc=",
- "dev": true,
- "requires": {
- "graceful-fs": "4.1.11",
- "js-yaml": "3.7.0",
- "minimist": "1.2.0",
- "object-assign": "4.1.1",
- "os-homedir": "1.0.2",
- "parse-json": "2.2.0",
- "pinkie-promise": "2.0.1",
- "require-from-string": "1.2.1"
- }
- },
- "execa": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz",
- "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
- "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"
- }
- },
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- }
}
},
"listr": {
@@ -6173,21 +6067,6 @@
"strip-ansi": "3.0.1"
},
"dependencies": {
- "cli-cursor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
- "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
- "dev": true,
- "requires": {
- "restore-cursor": "1.0.1"
- }
- },
- "cli-spinners": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz",
- "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=",
- "dev": true
- },
"figures": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
@@ -6197,34 +6076,6 @@
"escape-string-regexp": "1.0.5",
"object-assign": "4.1.1"
}
- },
- "onetime": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
- "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
- "dev": true
- },
- "ora": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz",
- "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=",
- "dev": true,
- "requires": {
- "chalk": "1.1.3",
- "cli-cursor": "1.0.2",
- "cli-spinners": "0.1.2",
- "object-assign": "4.1.1"
- }
- },
- "restore-cursor": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
- "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
- "dev": true,
- "requires": {
- "exit-hook": "1.1.1",
- "onetime": "1.1.0"
- }
}
}
},
@@ -6407,6 +6258,11 @@
"integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=",
"dev": true
},
+ "lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
+ },
"lodash.create": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz",
@@ -6442,9 +6298,9 @@
}
},
"lodash.memoize": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
- "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
"dev": true
},
"lodash.reduce": {
@@ -6510,16 +6366,23 @@
}
}
},
+ "loglevel": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.4.1.tgz",
+ "integrity": "sha1-lbOD+Ro8J1b9SrCTZn5DCRYfK80=",
+ "dev": true
+ },
"lolex": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz",
- "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.1.2.tgz",
+ "integrity": "sha1-JpS5U8nqTQE+W4v7qJHJkQJbJik=",
"dev": true
},
"longest": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
- "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+ "dev": true
},
"loose-envify": {
"version": "1.3.1",
@@ -6600,6 +6463,28 @@
"integrity": "sha1-jUEmgWi/htEQK5gQnijlMeejRXg=",
"dev": true
},
+ "md5.js": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
+ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
+ "dev": true,
+ "requires": {
+ "hash-base": "3.0.4",
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -6691,12 +6576,6 @@
"strip-bom": "2.0.0"
}
},
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- },
"path-exists": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
@@ -6783,6 +6662,17 @@
"object.omit": "2.0.1",
"parse-glob": "3.0.4",
"regex-cache": "0.4.3"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "1.1.0"
+ }
+ }
}
},
"miller-rabin": {
@@ -6819,6 +6709,15 @@
"integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=",
"dev": true
},
+ "min-document": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
+ "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
+ "dev": true,
+ "requires": {
+ "dom-walk": "0.1.1"
+ }
+ },
"minimalistic-assert": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz",
@@ -6835,14 +6734,15 @@
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
"requires": {
"brace-expansion": "1.1.8"
}
},
"minimist": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
- "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
},
"mkdirp": {
"version": "0.5.1",
@@ -6880,6 +6780,15 @@
"supports-color": "3.1.2"
},
"dependencies": {
+ "commander": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
+ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+ "dev": true,
+ "requires": {
+ "graceful-readlink": "1.0.1"
+ }
+ },
"debug": {
"version": "2.6.8",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
@@ -6920,61 +6829,26 @@
}
}
},
- "module-deps": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz",
- "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=",
- "dev": true,
- "requires": {
- "browser-resolve": "1.11.2",
- "cached-path-relative": "1.0.1",
- "concat-stream": "1.5.2",
- "defined": "1.0.0",
- "detective": "4.5.0",
- "duplexer2": "0.1.4",
- "inherits": "2.0.3",
- "JSONStream": "1.3.1",
- "parents": "1.0.1",
- "readable-stream": "2.3.3",
- "resolve": "1.4.0",
- "stream-combiner2": "1.1.1",
- "subarg": "1.0.0",
- "through2": "2.0.3",
- "xtend": "4.0.1"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
- "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
- "dev": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "1.0.7",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
- }
- },
- "string_decoder": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
- "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "5.1.1"
- }
- }
- }
- },
"module-not-found-error": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz",
"integrity": "sha1-z4tP9PKWQGdNbN0CsOO8UjwrvcA=",
"dev": true
},
+ "moment": {
+ "version": "2.17.1",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.17.1.tgz",
+ "integrity": "sha1-/tlQYGPzaxDwZsi1mhRNf66+HYI="
+ },
+ "moment-timezone": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.5.tgz",
+ "integrity": "sha1-odVBCnLBil8pPyouYocKgK1DLa4=",
+ "dev": true,
+ "requires": {
+ "moment": "2.17.1"
+ }
+ },
"mozlog": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/mozlog/-/mozlog-2.1.1.tgz",
@@ -6989,6 +6863,22 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
+ "multicast-dns": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.1.1.tgz",
+ "integrity": "sha1-bn3oalcIcqsXBYrepxYLvsqBTd4=",
+ "dev": true,
+ "requires": {
+ "dns-packet": "1.2.2",
+ "thunky": "0.1.0"
+ }
+ },
+ "multicast-dns-service-types": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
+ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+ "dev": true
+ },
"multimatch": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz",
@@ -7014,6 +6904,65 @@
"dev": true,
"optional": true
},
+ "nanobus": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/nanobus/-/nanobus-4.2.0.tgz",
+ "integrity": "sha1-T/6wNlsDPXp8xPDI7lyMGqmzK6w=",
+ "requires": {
+ "nanotiming": "6.1.3",
+ "remove-array-items": "1.0.0"
+ }
+ },
+ "nanohref": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/nanohref/-/nanohref-3.0.0.tgz",
+ "integrity": "sha1-wysD4KJY+1/pELtqT+yoESC5RHI="
+ },
+ "nanolocation": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/nanolocation/-/nanolocation-1.0.0.tgz",
+ "integrity": "sha1-FbXHrwWJXRqfIfDRNkldmURQaGs="
+ },
+ "nanologger": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/nanologger/-/nanologger-1.3.0.tgz",
+ "integrity": "sha1-BRKOJDLv9dh369hVYQNp+22NljI=",
+ "dev": true,
+ "requires": {
+ "xtend": "4.0.1"
+ }
+ },
+ "nanomorph": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/nanomorph/-/nanomorph-5.1.2.tgz",
+ "integrity": "sha1-ZtElCYco5UsOyqDISYA205XT8l0="
+ },
+ "nanoquery": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/nanoquery/-/nanoquery-1.1.0.tgz",
+ "integrity": "sha1-g6giCTNAygU9aW7IYKEKWsTDtEI="
+ },
+ "nanoraf": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/nanoraf/-/nanoraf-3.0.1.tgz",
+ "integrity": "sha1-q5+5wle5rcxx2CmCy1jY+jUDdko="
+ },
+ "nanorouter": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/nanorouter/-/nanorouter-2.1.0.tgz",
+ "integrity": "sha1-T8r5YgOgCJjaiRiLG/9aj8Bu9P8=",
+ "requires": {
+ "wayfarer": "6.6.2"
+ }
+ },
+ "nanotiming": {
+ "version": "6.1.3",
+ "resolved": "https://registry.npmjs.org/nanotiming/-/nanotiming-6.1.3.tgz",
+ "integrity": "sha512-1PaTW4nyeYVKhPdydxl5u0tQn33C5Raf48lOKFKrKTUWmVlWdJkJKsqyYzGQ4jU43Da6NpyvAUzdZlfVs7RhPA==",
+ "requires": {
+ "on-idle": "3.1.2"
+ }
+ },
"native-promise-only": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz",
@@ -7040,6 +6989,41 @@
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
"integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
},
+ "nise": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-1.0.1.tgz",
+ "integrity": "sha1-DakrEKhU6XwPSW9sKEWjASgLPu8=",
+ "dev": true,
+ "requires": {
+ "formatio": "1.2.0",
+ "just-extend": "1.1.22",
+ "lolex": "1.6.0",
+ "path-to-regexp": "1.7.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
+ },
+ "lolex": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz",
+ "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
+ "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
+ "dev": true,
+ "requires": {
+ "isarray": "0.0.1"
+ }
+ }
+ }
+ },
"no-case": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.1.tgz",
@@ -7063,6 +7047,12 @@
"minimatch": "3.0.4"
}
},
+ "node-forge": {
+ "version": "0.6.33",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.6.33.tgz",
+ "integrity": "sha1-RjgRh59XPUUVWtap9D3ClujoXrw=",
+ "dev": true
+ },
"node-libs-browser": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.0.0.tgz",
@@ -7112,16 +7102,10 @@
"randombytes": "2.0.5"
}
},
- "https-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz",
- "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=",
- "dev": true
- },
- "os-browserify": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz",
- "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=",
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
"dev": true
},
"readable-stream": {
@@ -7150,15 +7134,6 @@
}
}
},
- "timers-browserify": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz",
- "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==",
- "dev": true,
- "requires": {
- "setimmediate": "1.0.5"
- }
- },
"url": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
@@ -7171,6 +7146,30 @@
}
}
},
+ "nomnom": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.6.2.tgz",
+ "integrity": "sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE=",
+ "dev": true,
+ "requires": {
+ "colors": "0.5.1",
+ "underscore": "1.4.4"
+ },
+ "dependencies": {
+ "colors": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz",
+ "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=",
+ "dev": true
+ }
+ }
+ },
+ "normalize-html-whitespace": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/normalize-html-whitespace/-/normalize-html-whitespace-0.2.0.tgz",
+ "integrity": "sha1-EBci9kI1Ucdc24+dEE/4UNrx4Q4=",
+ "dev": true
+ },
"normalize-package-data": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
@@ -7184,13 +7183,10 @@
}
},
"normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
- "dev": true,
- "requires": {
- "remove-trailing-separator": "1.0.2"
- }
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz",
+ "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=",
+ "dev": true
},
"normalize-range": {
"version": "0.1.2",
@@ -7255,20 +7251,11 @@
"integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=",
"dev": true,
"requires": {
- "commander": "2.9.0",
+ "commander": "2.11.0",
"npm-path": "2.0.3",
"which": "1.3.0"
}
},
- "nth-check": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz",
- "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=",
- "dev": true,
- "requires": {
- "boolbase": "1.0.0"
- }
- },
"num2fraction": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
@@ -7281,6 +7268,12 @@
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
"dev": true
},
+ "oauth-sign": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz",
+ "integrity": "sha1-y1QPk7srIqfVlBaRoojWDo6pOG4=",
+ "dev": true
+ },
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -7290,17 +7283,8 @@
"object-keys": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
- "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0="
- },
- "object.assign": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.0.4.tgz",
- "integrity": "sha1-scnMBE7xuf5jYG/BQau7MuFHMMw=",
- "requires": {
- "define-properties": "1.1.2",
- "function-bind": "1.1.0",
- "object-keys": "1.0.11"
- }
+ "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=",
+ "dev": true
},
"object.omit": {
"version": "2.0.1",
@@ -7312,6 +7296,12 @@
"is-extendable": "0.1.1"
}
},
+ "obuf": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz",
+ "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=",
+ "dev": true
+ },
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -7320,10 +7310,40 @@
"ee-first": "1.1.1"
}
},
+ "on-headers": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
+ "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=",
+ "dev": true
+ },
+ "on-idle": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/on-idle/-/on-idle-3.1.2.tgz",
+ "integrity": "sha512-NRB0PAuE8LvWBtaN5b65U/vEWVLQPqUfSDOK6gf5BgfXa2WelSopZj4NkSR0MoqYsk28ugYpcdDpaYANV2WKEA=="
+ },
+ "on-load": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/on-load/-/on-load-3.2.0.tgz",
+ "integrity": "sha1-3TFF06XC+qVmaSDR32dLafDC9m8=",
+ "dev": true,
+ "requires": {
+ "global": "4.3.2"
+ }
+ },
+ "on-performance": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/on-performance/-/on-performance-1.0.1.tgz",
+ "integrity": "sha1-4RckEg5lpXVigimj94m4rj3T4Wc=",
+ "dev": true,
+ "requires": {
+ "on-idle": "3.1.2"
+ }
+ },
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
"requires": {
"wrappy": "1.0.2"
}
@@ -7337,13 +7357,14 @@
"mimic-fn": "1.1.0"
}
},
- "optimist": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
- "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "opn": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz",
+ "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=",
+ "dev": true,
"requires": {
- "minimist": "0.0.10",
- "wordwrap": "0.0.3"
+ "object-assign": "4.1.1",
+ "pinkie-promise": "2.0.1"
}
},
"optionator": {
@@ -7358,32 +7379,72 @@
"prelude-ls": "1.1.2",
"type-check": "0.3.2",
"wordwrap": "1.0.0"
- },
- "dependencies": {
- "wordwrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
- "dev": true
- }
}
},
"ora": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/ora/-/ora-1.3.0.tgz",
- "integrity": "sha1-gAeN0rkqk0r2ajrXKluRBpTt5Ro=",
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz",
+ "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=",
"dev": true,
"requires": {
"chalk": "1.1.3",
- "cli-cursor": "2.1.0",
- "cli-spinners": "1.0.0",
- "log-symbols": "1.0.2"
+ "cli-cursor": "1.0.2",
+ "cli-spinners": "0.1.2",
+ "object-assign": "4.1.1"
+ },
+ "dependencies": {
+ "cli-cursor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
+ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "1.0.1"
+ }
+ },
+ "onetime": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
+ "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
+ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
+ "dev": true,
+ "requires": {
+ "exit-hook": "1.1.1",
+ "onetime": "1.1.0"
+ }
+ }
+ }
+ },
+ "original": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz",
+ "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=",
+ "dev": true,
+ "requires": {
+ "url-parse": "1.0.5"
+ },
+ "dependencies": {
+ "url-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz",
+ "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=",
+ "dev": true,
+ "requires": {
+ "querystringify": "0.0.4",
+ "requires-port": "1.0.0"
+ }
+ }
}
},
"os-browserify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz",
- "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=",
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz",
+ "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=",
"dev": true
},
"os-homedir": {
@@ -7401,6 +7462,23 @@
"execa": "0.7.0",
"lcid": "1.0.0",
"mem": "1.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"
+ }
+ }
}
},
"os-tmpdir": {
@@ -7437,9 +7515,9 @@
"dev": true
},
"pako": {
- "version": "0.2.9",
- "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
- "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.5.tgz",
+ "integrity": "sha1-0iBd/ludqK95fnwWPbTR+E5GALw=",
"dev": true
},
"param-case": {
@@ -7451,15 +7529,6 @@
"no-case": "2.3.1"
}
},
- "parents": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz",
- "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=",
- "dev": true,
- "requires": {
- "path-platform": "0.11.15"
- }
- },
"parse-asn1": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz",
@@ -7469,7 +7538,7 @@
"asn1.js": "4.9.1",
"browserify-aes": "1.0.6",
"create-hash": "1.1.3",
- "evp_bytestokey": "1.0.0",
+ "evp_bytestokey": "1.0.2",
"pbkdf2": "3.0.13"
}
},
@@ -7494,6 +7563,38 @@
"error-ex": "1.3.1"
}
},
+ "parse-link-header": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/parse-link-header/-/parse-link-header-0.1.0.tgz",
+ "integrity": "sha1-VQP6f7LzVLsjQlXBxCHaPrBbkYU=",
+ "dev": true,
+ "requires": {
+ "xtend": "2.0.6"
+ },
+ "dependencies": {
+ "object-keys": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.2.0.tgz",
+ "integrity": "sha1-zd7AKZiwkb5CvxA1rjLknxy26mc=",
+ "dev": true,
+ "requires": {
+ "foreach": "2.0.5",
+ "indexof": "0.0.1",
+ "is": "0.2.7"
+ }
+ },
+ "xtend": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.0.6.tgz",
+ "integrity": "sha1-XqZXptukRwacLlnFihE4ywxebO4=",
+ "dev": true,
+ "requires": {
+ "is-object": "0.1.2",
+ "object-keys": "0.2.0"
+ }
+ }
+ }
+ },
"parseurl": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz",
@@ -7514,7 +7615,8 @@
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
},
"path-is-inside": {
"version": "1.0.2",
@@ -7534,12 +7636,6 @@
"integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
"dev": true
},
- "path-platform": {
- "version": "0.11.15",
- "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz",
- "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=",
- "dev": true
- },
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
@@ -7579,8 +7675,7 @@
"pelo": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/pelo/-/pelo-0.0.3.tgz",
- "integrity": "sha1-+2smsGEgNtsCuRj+qrPowMTLWXw=",
- "dev": true
+ "integrity": "sha1-+2smsGEgNtsCuRj+qrPowMTLWXw="
},
"pify": {
"version": "2.3.0",
@@ -7623,14 +7718,33 @@
"integrity": "sha1-WbcIwcAZCi9pLxx2GMRGsFL9F2I=",
"dev": true
},
+ "portfinder": {
+ "version": "1.0.13",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz",
+ "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "debug": "2.6.7",
+ "mkdirp": "0.5.1"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
"postcss": {
- "version": "6.0.8",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz",
- "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==",
+ "version": "6.0.9",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.9.tgz",
+ "integrity": "sha512-bBE2AHNEBhF23TfET6AA/lFP8ah+qHOZoFJEflFG+HgvVLdTmMOrocx/4LVVDIn3w6jUssw1q2Exk1cc9UOI8w==",
"dev": true,
"requires": {
"chalk": "2.1.0",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "4.2.1"
},
"dependencies": {
@@ -7654,12 +7768,6 @@
"supports-color": "4.2.1"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz",
@@ -7696,16 +7804,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -7717,115 +7819,6 @@
}
}
},
- "postcss-cli": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-4.1.0.tgz",
- "integrity": "sha1-j2gDZ4rNek8hSD8aQDkTb24cIU8=",
- "dev": true,
- "requires": {
- "chalk": "1.1.3",
- "chokidar": "1.7.0",
- "dependency-graph": "0.5.0",
- "fs-extra": "3.0.1",
- "get-stdin": "5.0.1",
- "globby": "6.1.0",
- "ora": "1.3.0",
- "postcss": "6.0.8",
- "postcss-load-config": "1.2.0",
- "postcss-reporter": "4.0.0",
- "read-cache": "1.0.0",
- "yargs": "8.0.2"
- },
- "dependencies": {
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- },
- "cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
- "dev": true,
- "requires": {
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1",
- "wrap-ansi": "2.1.0"
- },
- "dependencies": {
- "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"
- }
- }
- }
- },
- "glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
- }
- },
- "globby": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
- "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
- "dev": true,
- "requires": {
- "array-union": "1.0.2",
- "glob": "7.1.2",
- "object-assign": "4.1.1",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1"
- }
- },
- "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"
- }
- },
- "yargs": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
- "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
- "dev": true,
- "requires": {
- "camelcase": "4.1.0",
- "cliui": "3.2.0",
- "decamelize": "1.2.0",
- "get-caller-file": "1.0.2",
- "os-locale": "2.1.0",
- "read-pkg-up": "2.0.0",
- "require-directory": "2.1.1",
- "require-main-filename": "1.0.1",
- "set-blocking": "2.0.0",
- "string-width": "2.1.1",
- "which-module": "2.0.0",
- "y18n": "3.2.1",
- "yargs-parser": "7.0.0"
- }
- }
- }
- },
"postcss-colormin": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz",
@@ -7851,16 +7844,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -7896,16 +7883,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -7940,16 +7921,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -7984,16 +7959,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -8028,16 +7997,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -8072,16 +8035,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -8117,16 +8074,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -8162,16 +8113,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -8206,16 +8151,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -8237,6 +8176,23 @@
"object-assign": "4.1.1",
"postcss-load-options": "1.2.0",
"postcss-load-plugins": "2.3.0"
+ },
+ "dependencies": {
+ "cosmiconfig": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz",
+ "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==",
+ "dev": true,
+ "requires": {
+ "is-directory": "0.3.1",
+ "js-yaml": "3.7.0",
+ "minimist": "1.2.0",
+ "object-assign": "4.1.1",
+ "os-homedir": "1.0.2",
+ "parse-json": "2.2.0",
+ "require-from-string": "1.2.1"
+ }
+ }
}
},
"postcss-load-options": {
@@ -8247,6 +8203,23 @@
"requires": {
"cosmiconfig": "2.2.2",
"object-assign": "4.1.1"
+ },
+ "dependencies": {
+ "cosmiconfig": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz",
+ "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==",
+ "dev": true,
+ "requires": {
+ "is-directory": "0.3.1",
+ "js-yaml": "3.7.0",
+ "minimist": "1.2.0",
+ "object-assign": "4.1.1",
+ "os-homedir": "1.0.2",
+ "parse-json": "2.2.0",
+ "require-from-string": "1.2.1"
+ }
+ }
}
},
"postcss-load-plugins": {
@@ -8257,6 +8230,23 @@
"requires": {
"cosmiconfig": "2.2.2",
"object-assign": "4.1.1"
+ },
+ "dependencies": {
+ "cosmiconfig": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz",
+ "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==",
+ "dev": true,
+ "requires": {
+ "is-directory": "0.3.1",
+ "js-yaml": "3.7.0",
+ "minimist": "1.2.0",
+ "object-assign": "4.1.1",
+ "os-homedir": "1.0.2",
+ "parse-json": "2.2.0",
+ "require-from-string": "1.2.1"
+ }
+ }
}
},
"postcss-loader": {
@@ -8266,7 +8256,7 @@
"dev": true,
"requires": {
"loader-utils": "1.1.0",
- "postcss": "6.0.8",
+ "postcss": "6.0.9",
"postcss-load-config": "1.2.0",
"schema-utils": "0.3.0"
}
@@ -8302,16 +8292,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -8346,16 +8330,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -8386,8 +8364,8 @@
"integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
"dev": true,
"requires": {
- "caniuse-db": "1.0.30000712",
- "electron-to-chromium": "1.3.17"
+ "caniuse-db": "1.0.30000717",
+ "electron-to-chromium": "1.3.18"
}
},
"has-flag": {
@@ -8404,16 +8382,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -8456,16 +8428,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -8501,16 +8467,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -8548,16 +8508,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -8595,16 +8549,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -8622,7 +8570,7 @@
"integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=",
"dev": true,
"requires": {
- "postcss": "6.0.8"
+ "postcss": "6.0.9"
}
},
"postcss-modules-local-by-default": {
@@ -8632,7 +8580,7 @@
"dev": true,
"requires": {
"css-selector-tokenizer": "0.7.0",
- "postcss": "6.0.8"
+ "postcss": "6.0.9"
}
},
"postcss-modules-scope": {
@@ -8642,7 +8590,7 @@
"dev": true,
"requires": {
"css-selector-tokenizer": "0.7.0",
- "postcss": "6.0.8"
+ "postcss": "6.0.9"
}
},
"postcss-modules-values": {
@@ -8652,7 +8600,7 @@
"dev": true,
"requires": {
"icss-replace-symbols": "1.1.0",
- "postcss": "6.0.8"
+ "postcss": "6.0.9"
}
},
"postcss-normalize-charset": {
@@ -8678,16 +8626,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -8725,16 +8667,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -8770,16 +8706,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -8815,16 +8745,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -8859,16 +8783,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -8905,16 +8823,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -8949,7 +8861,7 @@
"integrity": "sha1-/0XPM1S4ee6JpOtoaA9GrJuxT5Q=",
"dev": true,
"requires": {
- "postcss": "6.0.8"
+ "postcss": "6.0.9"
}
},
"postcss-selector-parser": {
@@ -8989,16 +8901,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -9035,16 +8941,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -9087,16 +8987,10 @@
"requires": {
"chalk": "1.1.3",
"js-base64": "2.1.9",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "3.2.3"
}
},
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -9132,16 +9026,6 @@
"integrity": "sha1-WdrcaDNF7GuI+IuU7Urn4do5S/4=",
"dev": true
},
- "pretty-error": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz",
- "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
- "dev": true,
- "requires": {
- "renderkid": "2.0.1",
- "utila": "0.4.0"
- }
- },
"private": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz",
@@ -9149,9 +9033,9 @@
"dev": true
},
"process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz",
+ "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=",
"dev": true
},
"process-nextick-args": {
@@ -9166,14 +9050,6 @@
"integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
"dev": true
},
- "promise": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
- "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
- "requires": {
- "asap": "2.0.6"
- }
- },
"proxy-addr": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz",
@@ -9273,6 +9149,12 @@
"integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
"dev": true
},
+ "querystringify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz",
+ "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=",
+ "dev": true
+ },
"ramda": {
"version": "0.24.1",
"resolved": "https://registry.npmjs.org/ramda/-/ramda-0.24.1.tgz",
@@ -9335,9 +9217,9 @@
"integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
},
"raven": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/raven/-/raven-2.1.1.tgz",
- "integrity": "sha1-s6l0xsKTFcZ3wHnhaENerRllJc0=",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/raven/-/raven-2.1.2.tgz",
+ "integrity": "sha512-pBopqPVAuzEP5jyyqEPxJvXg788dAJ9p8NXoHVLF598Ih7MApu2AWT/QHNk2Fa4Rx/xV9yTYDEtAujLXX1FvRg==",
"requires": {
"cookie": "0.3.1",
"json-stringify-safe": "5.0.1",
@@ -9375,48 +9257,13 @@
"unpipe": "1.0.0"
}
},
- "read-cache": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
- "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=",
+ "read": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
+ "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=",
"dev": true,
"requires": {
- "pify": "2.3.0"
- }
- },
- "read-only-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz",
- "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=",
- "dev": true,
- "requires": {
- "readable-stream": "2.3.3"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
- "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
- "dev": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "1.0.7",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
- }
- },
- "string_decoder": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
- "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "5.1.1"
- }
- }
+ "mute-stream": "0.0.7"
}
},
"read-pkg": {
@@ -9505,7 +9352,7 @@
"ast-types": "0.9.6",
"esprima": "3.1.3",
"private": "0.1.7",
- "source-map": "0.5.6"
+ "source-map": "0.5.7"
},
"dependencies": {
"esprima": {
@@ -9513,12 +9360,6 @@
"resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
"integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
"dev": true
- },
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
}
}
},
@@ -9539,6 +9380,32 @@
"requires": {
"indent-string": "2.1.0",
"strip-indent": "1.0.1"
+ },
+ "dependencies": {
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "4.0.1"
+ }
+ }
+ }
+ },
+ "redeyed": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-1.0.1.tgz",
+ "integrity": "sha1-6WwZO0DAgWsArshCaY5hGF5VSYo=",
+ "optional": true,
+ "requires": {
+ "esprima": "3.0.0"
}
},
"redis": {
@@ -9609,19 +9476,19 @@
"dev": true
},
"regenerator-runtime": {
- "version": "0.10.5",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
- "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz",
+ "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==",
"dev": true
},
"regenerator-transform": {
- "version": "0.9.11",
- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.9.11.tgz",
- "integrity": "sha1-On0GdSDLe3F2dp61/4aGkb7+EoM=",
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
"dev": true,
"requires": {
- "babel-runtime": "6.25.0",
- "babel-types": "6.25.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
"private": "0.1.7"
}
},
@@ -9675,32 +9542,16 @@
"integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
"dev": true
},
- "remove-trailing-separator": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz",
- "integrity": "sha1-abBi2XhyetFNxrVrpKt3L9jXBRE=",
- "dev": true
+ "remove-array-items": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/remove-array-items/-/remove-array-items-1.0.0.tgz",
+ "integrity": "sha1-B79CyzMvTPboXq2DteToltIyayE="
},
- "renderkid": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz",
- "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=",
- "dev": true,
- "requires": {
- "css-select": "1.2.0",
- "dom-converter": "0.1.4",
- "htmlparser2": "3.3.0",
- "strip-ansi": "3.0.1",
- "utila": "0.3.3"
- },
- "dependencies": {
- "utila": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz",
- "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=",
- "dev": true
- }
- }
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
},
"repeat-element": {
"version": "1.1.2",
@@ -9711,7 +9562,8 @@
"repeat-string": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
},
"repeating": {
"version": "2.0.1",
@@ -9722,6 +9574,52 @@
"is-finite": "1.0.2"
}
},
+ "request": {
+ "version": "2.22.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.22.0.tgz",
+ "integrity": "sha1-uIOnacxKkJVx61AEs0TEPPflFZI=",
+ "dev": true,
+ "requires": {
+ "aws-sign": "0.3.0",
+ "cookie-jar": "0.3.0",
+ "forever-agent": "0.5.2",
+ "form-data": "0.0.8",
+ "hawk": "0.13.1",
+ "http-signature": "0.10.1",
+ "json-stringify-safe": "4.0.0",
+ "mime": "1.2.11",
+ "node-uuid": "1.4.8",
+ "oauth-sign": "0.3.0",
+ "qs": "0.6.6",
+ "tunnel-agent": "0.3.0"
+ },
+ "dependencies": {
+ "json-stringify-safe": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-4.0.0.tgz",
+ "integrity": "sha1-d8JxqupUMC5o7+rMtWq78GqbGlQ=",
+ "dev": true
+ },
+ "mime": {
+ "version": "1.2.11",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
+ "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=",
+ "dev": true
+ },
+ "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
+ },
+ "qs": {
+ "version": "0.6.6",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz",
+ "integrity": "sha1-bgFQmP9RlouKPIGQAdXyyJvEsQc=",
+ "dev": true
+ }
+ }
+ },
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -9750,6 +9648,12 @@
"resolve-from": "1.0.1"
}
},
+ "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.4.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz",
@@ -9776,15 +9680,16 @@
}
},
"ret": {
- "version": "0.1.14",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.14.tgz",
- "integrity": "sha1-WMY2g3sS4WH4o4DPCBxqIw/RZk4=",
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
"dev": true
},
"right-align": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
"integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "dev": true,
"requires": {
"align-text": "0.1.4"
}
@@ -9796,22 +9701,6 @@
"dev": true,
"requires": {
"glob": "7.1.2"
- },
- "dependencies": {
- "glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
- }
- }
}
},
"ripemd160": {
@@ -9869,7 +9758,7 @@
"integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
"dev": true,
"requires": {
- "ret": "0.1.14"
+ "ret": "0.1.15"
}
},
"samsam": {
@@ -9892,13 +9781,24 @@
"ajv": "5.2.2"
}
},
+ "scroll-to-anchor": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/scroll-to-anchor/-/scroll-to-anchor-1.1.0.tgz",
+ "integrity": "sha1-yZuNLl2VBWdSeHyngJWrdbUgs/0="
+ },
+ "select-hose": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
+ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+ "dev": true
+ },
"selenium-webdriver": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.5.0.tgz",
"integrity": "sha512-1bCZYRfDy7vsu1dkLrclTLvWPxSo6rOIkxZXvB2wnzeWkEoiTKpw612EUGA3jRZxPzAzI9OlxuULJV8ge1vVXQ==",
"dev": true,
"requires": {
- "jszip": "3.1.3",
+ "jszip": "3.1.4",
"rimraf": "2.6.1",
"tmp": "0.0.30",
"xml2js": "0.4.17"
@@ -9915,6 +9815,15 @@
}
}
},
+ "selfsigned": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.1.tgz",
+ "integrity": "sha1-v4y3uDJWxFUeMTR8YxF3jbme7FI=",
+ "dev": true,
+ "requires": {
+ "node-forge": "0.6.33"
+ }
+ },
"semver": {
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
@@ -9951,6 +9860,32 @@
}
}
},
+ "serve-index": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.0.tgz",
+ "integrity": "sha1-0rKA/FYNYW7oG0i/D6gqvtJIXOc=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.4",
+ "batch": "0.6.1",
+ "debug": "2.6.8",
+ "escape-html": "1.0.3",
+ "http-errors": "1.6.2",
+ "mime-types": "2.1.16",
+ "parseurl": "1.3.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.8",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+ "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
"serve-static": {
"version": "1.12.4",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.4.tgz",
@@ -9994,16 +9929,6 @@
"inherits": "2.0.3"
}
},
- "shasum": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz",
- "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=",
- "dev": true,
- "requires": {
- "json-stable-stringify": "0.0.1",
- "sha.js": "2.4.8"
- }
- },
"shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
@@ -10040,22 +9965,6 @@
"glob": "7.1.2",
"interpret": "1.0.3",
"rechoir": "0.6.2"
- },
- "dependencies": {
- "glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
- }
- }
}
},
"signal-exit": {
@@ -10065,15 +9974,16 @@
"dev": true
},
"sinon": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-2.4.1.tgz",
- "integrity": "sha512-vFTrO9Wt0ECffDYIPSP/E5bBugt0UjcBQOfQUMh66xzkyPEnhl/vM2LRZi2ajuTdkH07sA6DzrM6KvdvGIH8xw==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-3.2.1.tgz",
+ "integrity": "sha512-KY3OLOWpek/I4NGAMHetuutVgS2aRgMR5g5/1LSYvPJ3qo2BopIvk3esFztPxF40RWf/NNNJzdFPriSkXUVK3A==",
"dev": true,
"requires": {
"diff": "3.2.0",
"formatio": "1.2.0",
- "lolex": "1.6.0",
+ "lolex": "2.1.2",
"native-promise-only": "0.8.1",
+ "nise": "1.0.1",
"path-to-regexp": "1.7.0",
"samsam": "1.2.1",
"text-encoding": "0.6.4",
@@ -10109,6 +10019,66 @@
"integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
"dev": true
},
+ "sntp": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz",
+ "integrity": "sha1-+4hfGLDzqtGJ+CSGJTa87ux1CQA=",
+ "dev": true,
+ "requires": {
+ "hoek": "0.9.1"
+ },
+ "dependencies": {
+ "hoek": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz",
+ "integrity": "sha1-PTIkYrrfB3Fup+uFuviAec3c5QU=",
+ "dev": true
+ }
+ }
+ },
+ "sockjs": {
+ "version": "0.3.18",
+ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.18.tgz",
+ "integrity": "sha1-2bKJMWyn33dZXvKZ4HXw+TfrQgc=",
+ "dev": true,
+ "requires": {
+ "faye-websocket": "0.10.0",
+ "uuid": "2.0.3"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
+ "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
+ "dev": true
+ }
+ }
+ },
+ "sockjs-client": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz",
+ "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.7",
+ "eventsource": "0.1.6",
+ "faye-websocket": "0.11.1",
+ "inherits": "2.0.3",
+ "json3": "3.3.2",
+ "url-parse": "1.1.9"
+ },
+ "dependencies": {
+ "faye-websocket": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz",
+ "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
+ "dev": true,
+ "requires": {
+ "websocket-driver": "0.6.5"
+ }
+ }
+ }
+ },
"sort-keys": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
@@ -10125,28 +10095,18 @@
"dev": true
},
"source-map": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
- "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
- "requires": {
- "amdefine": "1.0.1"
- }
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
},
"source-map-support": {
- "version": "0.4.15",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz",
- "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=",
+ "version": "0.4.16",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.16.tgz",
+ "integrity": "sha512-A6vlydY7H/ljr4L2UOhDSajQdZQ6dMD7cLH0pzwcmwLyc9u8PNI4WGtnfDDzX7uzGL6c/T+ORL97Zlh+S4iOrg==",
"dev": true,
"requires": {
- "source-map": "0.5.6"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- }
+ "source-map": "0.5.7"
}
},
"spdx-correct": {
@@ -10170,6 +10130,81 @@
"integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=",
"dev": true
},
+ "spdy": {
+ "version": "3.4.7",
+ "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz",
+ "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.8",
+ "handle-thing": "1.2.5",
+ "http-deceiver": "1.2.7",
+ "safe-buffer": "5.1.1",
+ "select-hose": "2.0.0",
+ "spdy-transport": "2.0.20"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.8",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+ "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "spdy-transport": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz",
+ "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.8",
+ "detect-node": "2.0.3",
+ "hpack.js": "2.1.6",
+ "obuf": "1.1.1",
+ "readable-stream": "2.3.3",
+ "safe-buffer": "5.1.1",
+ "wbuf": "1.7.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.8",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+ "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
"specificity": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/specificity/-/specificity-0.3.1.tgz",
@@ -10230,6 +10265,11 @@
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
},
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA="
+ },
"stack-trace": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
@@ -10291,42 +10331,6 @@
"duplexer": "0.1.1"
}
},
- "stream-combiner2": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
- "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=",
- "dev": true,
- "requires": {
- "duplexer2": "0.1.4",
- "readable-stream": "2.3.3"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
- "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
- "dev": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "1.0.7",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
- }
- },
- "string_decoder": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
- "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "5.1.1"
- }
- }
- }
- },
"stream-http": {
"version": "2.7.2",
"resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz",
@@ -10366,42 +10370,6 @@
}
}
},
- "stream-splicer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz",
- "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=",
- "dev": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.3"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
- "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
- "dev": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "1.0.7",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
- }
- },
- "string_decoder": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
- "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "5.1.1"
- }
- }
- }
- },
"stream-to-observable": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.1.0.tgz",
@@ -10488,21 +10456,10 @@
"dev": true
},
"strip-indent": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
- "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
- "dev": true,
- "requires": {
- "get-stdin": "4.0.1"
- },
- "dependencies": {
- "get-stdin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
- "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
- "dev": true
- }
- }
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
},
"strip-json-comments": {
"version": "2.0.1",
@@ -10543,7 +10500,7 @@
"micromatch": "2.3.11",
"normalize-selector": "0.2.0",
"pify": "3.0.0",
- "postcss": "6.0.8",
+ "postcss": "6.0.9",
"postcss-less": "1.1.0",
"postcss-media-query-parser": "0.2.3",
"postcss-reporter": "4.0.0",
@@ -10580,6 +10537,21 @@
"supports-color": "4.2.1"
}
},
+ "cosmiconfig": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz",
+ "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==",
+ "dev": true,
+ "requires": {
+ "is-directory": "0.3.1",
+ "js-yaml": "3.7.0",
+ "minimist": "1.2.0",
+ "object-assign": "4.1.1",
+ "os-homedir": "1.0.2",
+ "parse-json": "2.2.0",
+ "require-from-string": "1.2.1"
+ }
+ },
"debug": {
"version": "2.6.8",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
@@ -10589,20 +10561,6 @@
"ms": "2.0.0"
}
},
- "glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
- }
- },
"globby": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
@@ -10670,54 +10628,69 @@
"requires": {
"doiuse": "3.0.0",
"lodash": "4.17.4",
- "postcss": "6.0.8",
+ "postcss": "6.0.9",
"stylelint": "8.0.0"
}
},
- "subarg": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz",
- "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=",
- "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
- }
- }
- },
"sugarss": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/sugarss/-/sugarss-1.0.0.tgz",
"integrity": "sha1-ZeUbOVhDL7cNVFGmi7M+MtDPHvc=",
"dev": true,
"requires": {
- "postcss": "6.0.8"
+ "postcss": "6.0.9"
}
},
"superagent": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.5.2.tgz",
- "integrity": "sha1-M2GjlxVnUEw1EGOr6q4PqiPb8/g=",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.6.0.tgz",
+ "integrity": "sha512-oWsu4mboo8sVxagp4bNwZIR1rUmypeAJDmNIwT9mF4k06hSu6P92aOjEWLaIj7vsX3fOUp+cRH/04tao+q5Q7A==",
"dev": true,
"requires": {
"component-emitter": "1.2.1",
"cookiejar": "2.1.1",
"debug": "2.6.7",
"extend": "3.0.1",
- "form-data": "2.2.0",
+ "form-data": "2.3.1",
"formidable": "1.1.1",
"methods": "1.1.2",
- "mime": "1.3.4",
+ "mime": "1.3.6",
"qs": "6.4.0",
"readable-stream": "2.3.3"
},
"dependencies": {
+ "combined-stream": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
+ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz",
+ "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=",
+ "dev": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.5",
+ "mime-types": "2.1.16"
+ }
+ },
+ "mime": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz",
+ "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=",
+ "dev": true
+ },
"readable-stream": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
@@ -10751,7 +10724,7 @@
"dev": true,
"requires": {
"methods": "1.1.2",
- "superagent": "3.5.2"
+ "superagent": "3.6.0"
}
},
"supports-color": {
@@ -10791,15 +10764,6 @@
"integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0=",
"dev": true
},
- "syntax-error": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz",
- "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=",
- "dev": true,
- "requires": {
- "acorn": "4.0.13"
- }
- },
"table": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/table/-/table-4.0.1.tgz",
@@ -10823,15 +10787,6 @@
"co": "4.6.0",
"json-stable-stringify": "1.0.1"
}
- },
- "json-stable-stringify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
- "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
- "dev": true,
- "requires": {
- "jsonify": "0.0.0"
- }
}
}
},
@@ -10862,8 +10817,7 @@
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
- "dev": true
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
},
"through2": {
"version": "2.0.3",
@@ -10901,6 +10855,12 @@
}
}
},
+ "thunky": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/thunky/-/thunky-0.1.0.tgz",
+ "integrity": "sha1-vzAUaCTituZ7Dy16Ssi+smkIaE4=",
+ "dev": true
+ },
"time-stamp": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz",
@@ -10913,12 +10873,12 @@
"integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8="
},
"timers-browserify": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz",
- "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz",
+ "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==",
"dev": true,
"requires": {
- "process": "0.11.10"
+ "setimmediate": "1.0.5"
}
},
"tmp": {
@@ -10942,12 +10902,6 @@
"integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
"dev": true
},
- "toposort": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.3.tgz",
- "integrity": "sha1-8CzYp0vYvi/A6YYRw7rLlaFxhpw=",
- "dev": true
- },
"trim-newlines": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
@@ -10966,18 +10920,18 @@
"integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=",
"dev": true
},
- "tslib": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.7.1.tgz",
- "integrity": "sha1-vIAEFkaRkjp5/oN4u+s9ogF1OOw=",
- "dev": 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.3.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.3.0.tgz",
+ "integrity": "sha1-rWgbaPUyGtKCfEz7G31d8s/pQu4=",
+ "dev": true
+ },
"type-check": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
@@ -11008,33 +10962,21 @@
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
"dev": true
},
- "typescript": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.3.4.tgz",
- "integrity": "sha1-PTgyGCgjHkNPKHUUlZw3qCtin0I=",
- "dev": true
- },
"uglify-js": {
- "version": "2.8.29",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
- "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+ "version": "3.0.28",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.28.tgz",
+ "integrity": "sha512-0h/qGay016GG2lVav3Kz174F3T2Vjlz2v6HCt+WDQpoXfco0hWwF5gHK9yh88mUYvIC+N7Z8NT8WpjSp1yoqGA==",
+ "dev": true,
"requires": {
- "source-map": "0.5.6",
- "uglify-to-browserify": "1.0.2",
- "yargs": "3.10.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI="
- }
+ "commander": "2.11.0",
+ "source-map": "0.5.7"
}
},
"uglify-to-browserify": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
"integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "dev": true,
"optional": true
},
"uglifyjs-webpack-plugin": {
@@ -11043,23 +10985,63 @@
"integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=",
"dev": true,
"requires": {
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"uglify-js": "2.8.29",
"webpack-sources": "1.0.1"
},
"dependencies": {
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
"dev": true
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "dev": true,
+ "requires": {
+ "center-align": "0.1.3",
+ "right-align": "0.1.3",
+ "wordwrap": "0.0.2"
+ }
+ },
+ "uglify-js": {
+ "version": "2.8.29",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.10.0"
+ }
+ },
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "dev": true,
+ "requires": {
+ "camelcase": "1.2.1",
+ "cliui": "2.1.0",
+ "decamelize": "1.2.0",
+ "window-size": "0.1.0"
+ }
}
}
},
- "umd": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz",
- "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=",
+ "underscore": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
+ "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=",
"dev": true
},
"uniq": {
@@ -11083,12 +11065,6 @@
"integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
"dev": true
},
- "universalify": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
- "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
- "dev": true
- },
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -11109,6 +11085,24 @@
"querystring": "0.2.0"
}
},
+ "url-parse": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.1.9.tgz",
+ "integrity": "sha1-xn8dd11R8KGJEd17P/rSe7nlvRk=",
+ "dev": true,
+ "requires": {
+ "querystringify": "1.0.0",
+ "requires-port": "1.0.0"
+ },
+ "dependencies": {
+ "querystringify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz",
+ "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=",
+ "dev": true
+ }
+ }
+ },
"utcstring": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/utcstring/-/utcstring-0.1.0.tgz",
@@ -11137,12 +11131,6 @@
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true
},
- "utila": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
- "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=",
- "dev": true
- },
"utils-merge": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz",
@@ -11153,6 +11141,15 @@
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz",
"integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE="
},
+ "val-loader": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/val-loader/-/val-loader-1.0.2.tgz",
+ "integrity": "sha1-eQkZgJOzfLoKlr9PbSnelw0JnT0=",
+ "dev": true,
+ "requires": {
+ "loader-utils": "1.1.0"
+ }
+ },
"validate-npm-package-license": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
@@ -11163,6 +11160,21 @@
"spdx-expression-parse": "1.0.4"
}
},
+ "validator": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/validator/-/validator-7.0.0.tgz",
+ "integrity": "sha1-x03rgGNRL6w1VHk45vCxUEooL9I="
+ },
+ "varify": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/varify/-/varify-0.2.0.tgz",
+ "integrity": "sha1-GR2p/p3EzWjQ0USY1OKpEP9OZRY=",
+ "optional": true,
+ "requires": {
+ "redeyed": "1.0.1",
+ "through": "2.3.8"
+ }
+ },
"vary": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz",
@@ -11205,41 +11217,27 @@
}
}
},
- "webcrypto-core": {
- "version": "0.1.16",
- "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-0.1.16.tgz",
- "integrity": "sha1-3kkUtZFI23Moe8T45hz0+y9W8CA=",
- "dev": true,
+ "wayfarer": {
+ "version": "6.6.2",
+ "resolved": "https://registry.npmjs.org/wayfarer/-/wayfarer-6.6.2.tgz",
+ "integrity": "sha512-jwIufUN6EYfMeCJYBA8r0YytqHaSGACLtOddMeBtdq5gTo2F2XgK+t7eEXSPUBF9vm+hdI/iPOtSz1EJOd01dQ==",
"requires": {
- "@types/node": "6.0.85",
- "tslib": "1.7.1"
- },
- "dependencies": {
- "@types/node": {
- "version": "6.0.85",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.85.tgz",
- "integrity": "sha512-6qLZpfQFO/g5Ns2e7RsW6brk0Q6Xzwiw7kVVU/XiQNOiJXSojhX76GP457PBYIsNMH2WfcGgcnZB4awFDHrwpA==",
- "dev": true
- }
+ "xtend": "4.0.1"
}
},
- "webcrypto-liner": {
- "version": "0.1.26",
- "resolved": "https://registry.npmjs.org/webcrypto-liner/-/webcrypto-liner-0.1.26.tgz",
- "integrity": "sha512-bXnI0TwuAJEqhtKUNsSaiw7cCcE7LxlazFZv9R3BWjKPgRdd8Wbv5CUE1UFOlc7KvRlFMyw85DHq8mZ3KBx1gg==",
+ "wbuf": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz",
+ "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=",
"dev": true,
"requires": {
- "@types/node": "7.0.39",
- "asmcrypto.js": "0.0.11",
- "elliptic": "6.4.0",
- "typescript": "2.3.4",
- "webcrypto-core": "0.1.16"
+ "minimalistic-assert": "1.0.0"
}
},
"webpack": {
- "version": "3.5.4",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.5.4.tgz",
- "integrity": "sha1-VYPrJj7Se3i1vRe/37DrGxzRv4E=",
+ "version": "3.5.5",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.5.5.tgz",
+ "integrity": "sha512-qeUx4nIbeLL53qqNTs3kObPBMkUVDrOjEfp/hTvMlx21qL2MsGNr8/tXCoX/lS12dLl9qtZaXv2qfBEctPScDg==",
"dev": true,
"requires": {
"acorn": "5.1.1",
@@ -11257,7 +11255,7 @@
"memory-fs": "0.4.1",
"mkdirp": "0.5.1",
"node-libs-browser": "2.0.0",
- "source-map": "0.5.6",
+ "source-map": "0.5.7",
"supports-color": "4.2.1",
"tapable": "0.2.8",
"uglifyjs-webpack-plugin": "0.4.6",
@@ -11266,12 +11264,6 @@
"yargs": "8.0.2"
},
"dependencies": {
- "acorn": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.1.tgz",
- "integrity": "sha512-vOk6uEMctu0vQrvuSqFdJyqj1Q0S5VTDL79qtjo+DhRr+1mmaD+tluFSCZqhvi/JUhXSzoZN2BhtstaPEeE8cw==",
- "dev": true
- },
"ajv-keywords": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.0.tgz",
@@ -11287,51 +11279,6 @@
"lodash": "4.17.4"
}
},
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- },
- "cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
- "dev": true,
- "requires": {
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1",
- "wrap-ansi": "2.1.0"
- },
- "dependencies": {
- "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"
- }
- }
- }
- },
- "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"
- }
- },
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- },
"supports-color": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz",
@@ -11340,27 +11287,6 @@
"requires": {
"has-flag": "2.0.0"
}
- },
- "yargs": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
- "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
- "dev": true,
- "requires": {
- "camelcase": "4.1.0",
- "cliui": "3.2.0",
- "decamelize": "1.2.0",
- "get-caller-file": "1.0.2",
- "os-locale": "2.1.0",
- "read-pkg-up": "2.0.0",
- "require-directory": "2.1.1",
- "require-main-filename": "1.0.1",
- "set-blocking": "2.0.0",
- "string-width": "2.1.1",
- "which-module": "2.0.0",
- "y18n": "3.2.1",
- "yargs-parser": "7.0.0"
- }
}
}
},
@@ -11377,6 +11303,265 @@
"time-stamp": "2.0.0"
}
},
+ "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=",
+ "dev": true,
+ "requires": {
+ "ansi-html": "0.0.7",
+ "bonjour": "3.5.0",
+ "chokidar": "1.7.0",
+ "compression": "1.7.0",
+ "connect-history-api-fallback": "1.3.0",
+ "del": "3.0.0",
+ "express": "4.15.4",
+ "html-entities": "1.2.1",
+ "http-proxy-middleware": "0.17.4",
+ "internal-ip": "1.2.0",
+ "ip": "1.1.5",
+ "loglevel": "1.4.1",
+ "opn": "4.0.2",
+ "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",
+ "webpack-dev-middleware": "1.12.0",
+ "yargs": "6.6.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true
+ },
+ "del": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
+ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
+ "dev": true,
+ "requires": {
+ "globby": "6.1.0",
+ "is-path-cwd": "1.0.0",
+ "is-path-in-cwd": "1.0.0",
+ "p-map": "1.1.1",
+ "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"
+ }
+ },
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "glob": "7.1.2",
+ "object-assign": "4.1.1",
+ "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
+ }
+ }
+ },
+ "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=",
+ "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"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "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"
+ }
+ }
+ }
+ },
+ "webpack-manifest-plugin": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-1.3.1.tgz",
+ "integrity": "sha512-OW7in/4VksQVnQcDJClv7YnOs/ruOqzPriT46z+qe6i1qINfZkmCNoxNG3r5J19VBSmO0KF1vn3Ute0yTKaeHQ==",
+ "dev": true,
+ "requires": {
+ "fs-extra": "0.30.0",
+ "lodash": "4.17.4"
+ }
+ },
"webpack-sources": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.1.tgz",
@@ -11384,17 +11569,24 @@
"dev": true,
"requires": {
"source-list-map": "2.0.0",
- "source-map": "0.5.6"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
- "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
- "dev": true
- }
+ "source-map": "0.5.7"
}
},
+ "websocket-driver": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz",
+ "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=",
+ "dev": true,
+ "requires": {
+ "websocket-extensions": "0.1.1"
+ }
+ },
+ "websocket-extensions": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz",
+ "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=",
+ "dev": true
+ },
"whet.extend": {
"version": "0.9.9",
"resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
@@ -11419,12 +11611,14 @@
"window-size": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
- "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+ "dev": true
},
"wordwrap": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
- "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
},
"wrap-ansi": {
"version": "2.1.0",
@@ -11461,7 +11655,8 @@
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
},
"write": {
"version": "0.2.1",
@@ -11503,8 +11698,7 @@
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
- "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
- "dev": true
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
},
"y18n": {
"version": "3.2.1",
@@ -11519,14 +11713,24 @@
"dev": true
},
"yargs": {
- "version": "3.10.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
- "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
+ "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
+ "dev": true,
"requires": {
- "camelcase": "1.2.1",
- "cliui": "2.1.0",
+ "camelcase": "4.1.0",
+ "cliui": "3.2.0",
"decamelize": "1.2.0",
- "window-size": "0.1.0"
+ "get-caller-file": "1.0.2",
+ "os-locale": "2.1.0",
+ "read-pkg-up": "2.0.0",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "2.1.1",
+ "which-module": "2.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "7.0.0"
}
},
"yargs-parser": {
@@ -11536,14 +11740,19 @@
"dev": true,
"requires": {
"camelcase": "4.1.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- }
+ }
+ },
+ "yo-yoify": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/yo-yoify/-/yo-yoify-3.7.3.tgz",
+ "integrity": "sha1-yNGoBL4J+lFbJRksH33lAIpmMBE=",
+ "dev": true,
+ "requires": {
+ "acorn": "5.1.1",
+ "falafel": "2.1.0",
+ "hyperx": "2.3.0",
+ "on-load": "3.2.0",
+ "through2": "2.0.3"
}
}
}
diff --git a/package.json b/package.json
index 6ca4fc0a..c358edd2 100644
--- a/package.json
+++ b/package.json
@@ -3,73 +3,109 @@
"description": "File Sharing Experiment",
"version": "1.1.2",
"author": "Mozilla (https://mozilla.org)",
- "dependencies": {
- "aws-sdk": "^2.98.0",
- "body-parser": "^1.17.2",
- "connect-busboy": "0.0.2",
- "convict": "^3.0.0",
- "express": "^4.15.3",
- "express-handlebars": "^3.0.0",
- "helmet": "^3.8.0",
- "mozlog": "^2.1.1",
- "raven": "^2.1.0",
- "redis": "^2.8.0"
+ "repository": "mozilla/send",
+ "homepage": "https://github.com/mozilla/send/",
+ "license": "MPL-2.0",
+ "private": true,
+ "scripts": {
+ "precommit": "lint-staged",
+ "clean": "rimraf dist",
+ "build": "npm run clean && webpack -p",
+ "lint": "npm-run-all lint:*",
+ "lint:css": "stylelint 'assets/*.css'",
+ "lint:js": "eslint .",
+ "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",
+ "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",
+ "contributors": "git shortlog -s | awk -F\\t '{print $2}' > CONTRIBUTORS",
+ "release": "npm-run-all contributors changelog",
+ "test": "mocha test/unit",
+ "start": "cross-env NODE_ENV=development webpack-dev-server",
+ "prod": "node server/prod.js"
},
- "devDependencies": {
- "asmcrypto.js": "0.0.11",
- "autoprefixer": "^7.1.2",
- "babel-core": "^6.25.0",
- "babel-loader": "^7.1.1",
- "babel-polyfill": "^6.23.0",
- "babel-preset-es2015": "^6.24.1",
- "babel-preset-stage-2": "^6.24.1",
- "bel": "^5.0.3",
- "browserify": "^14.4.0",
- "copy-webpack-plugin": "^4.0.1",
- "cross-env": "^5.0.5",
- "css-loader": "^0.28.4",
- "css-mqpacker": "^6.0.1",
- "cssnano": "^3.10.0",
- "eslint": "^4.3.0",
- "eslint-plugin-mocha": "^4.11.0",
- "eslint-plugin-node": "^5.1.1",
- "eslint-plugin-security": "^1.4.0",
- "extract-loader": "^1.0.0",
- "file-loader": "^0.11.2",
- "git-rev-sync": "^1.9.1",
- "github-changes": "^1.1.0",
- "html-loader": "^0.5.1",
- "html-webpack-plugin": "^2.30.1",
- "husky": "^0.14.3",
- "l20n": "^5.0.0",
- "lint-staged": "^4.0.3",
- "mkdirp": "^0.5.1",
- "mocha": "^3.4.2",
- "npm-run-all": "^4.0.2",
- "postcss-cli": "^4.1.0",
- "postcss-loader": "^2.0.6",
- "prettier": "^1.5.3",
- "proxyquire": "^1.8.0",
- "raven-js": "^3.17.0",
- "rimraf": "^2.6.1",
- "selenium-webdriver": "^3.5.0",
- "sinon": "^2.3.8",
- "stylelint": "^8.0.0",
- "stylelint-config-standard": "^17.0.0",
- "stylelint-no-unsupported-browser-features": "^1.0.0",
- "supertest": "^3.0.0",
- "testpilot-ga": "^0.3.0",
- "webcrypto-liner": "^0.1.25",
- "webpack": "^3.5.4",
- "webpack-dev-middleware": "^1.12.0"
+ "lint-staged": {
+ "*.js": [
+ "prettier --single-quote --write",
+ "eslint",
+ "git add"
+ ],
+ "*.css": [
+ "prettier --single-quote --write",
+ "stylelint",
+ "git add"
+ ]
},
"engines": {
"node": ">=8.2.0"
},
- "homepage": "https://github.com/mozilla/send/",
- "license": "MPL-2.0",
- "repository": "mozilla/send",
+ "devDependencies": {
+ "autoprefixer": "^7.1.2",
+ "babel-core": "^6.26.0",
+ "babel-loader": "^7.1.2",
+ "babel-plugin-yo-yoify": "^0.7.0",
+ "babel-polyfill": "^6.26.0",
+ "babel-preset-env": "^1.6.0",
+ "babel-preset-es2015": "^6.24.1",
+ "babel-preset-stage-2": "^6.24.1",
+ "choo-log": "^7.2.1",
+ "copy-webpack-plugin": "^4.0.1",
+ "cross-env": "^5.0.5",
+ "css-loader": "^0.28.5",
+ "css-mqpacker": "^6.0.1",
+ "cssnano": "^3.10.0",
+ "eslint": "^4.5.0",
+ "eslint-plugin-mocha": "^4.11.0",
+ "eslint-plugin-node": "^5.1.1",
+ "eslint-plugin-security": "^1.4.0",
+ "expose-loader": "^0.7.3",
+ "extract-loader": "^1.0.1",
+ "file-loader": "^0.11.2",
+ "git-rev-sync": "^1.9.1",
+ "github-changes": "^1.1.0",
+ "html-loader": "^0.5.1",
+ "husky": "^0.14.3",
+ "lint-staged": "^4.0.4",
+ "mocha": "^3.5.0",
+ "nanobus": "^4.2.0",
+ "npm-run-all": "^4.0.2",
+ "postcss-loader": "^2.0.6",
+ "prettier": "^1.5.3",
+ "proxyquire": "^1.8.0",
+ "raven-js": "^3.17.0",
+ "require-from-string": "^1.2.1",
+ "rimraf": "^2.6.1",
+ "selenium-webdriver": "^3.5.0",
+ "sinon": "^3.2.1",
+ "stylelint-config-standard": "^17.0.0",
+ "stylelint-no-unsupported-browser-features": "^1.0.0",
+ "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-manifest-plugin": "^1.3.1"
+ },
+ "dependencies": {
+ "aws-sdk": "^2.103.0",
+ "body-parser": "^1.17.2",
+ "choo": "^6.0.0",
+ "connect-busboy": "0.0.2",
+ "convict": "^4.0.0",
+ "express": "^4.15.4",
+ "express-request-language": "^1.1.12",
+ "fluent": "^0.4.1",
+ "fluent-langneg": "^0.1.0",
+ "helmet": "^3.8.1",
+ "mozlog": "^2.1.1",
+ "raven": "^2.1.2",
+ "redis": "^2.8.0"
+ },
"availableLanguages": [
+ "en-US",
"ast",
"az",
"ca",
@@ -78,7 +114,6 @@
"de",
"dsb",
"el",
- "en-US",
"es-AR",
"es-CL",
"es-ES",
@@ -108,42 +143,5 @@
"vi",
"zh-CN",
"zh-TW"
- ],
- "scripts": {
- "precommit": "lint-staged",
- "clean": "rimraf dist",
- "build": "npm-run-all build:*",
- "build:js": "webpack -p",
- "build:version": "node scripts/version",
- "changelog": "github-changes -o mozilla -r send --only-pulls --use-commit-body --no-merges",
- "contributors": "git shortlog -s | awk -F\\t '{print $2}' > CONTRIBUTORS",
- "dev": "npm run clean && npm run build && npm start",
- "format": "prettier '{,frontend/src/,scripts/,server/,test/**/!(bundle)}*.{js,css}' --single-quote --write",
- "get-prod-locales": "node scripts/get-prod-locales",
- "get-prod-locales:write": "npm run get-prod-locales -- --write",
- "lint": "npm-run-all lint:*",
- "lint:css": "stylelint 'frontend/src/*.css'",
- "lint:js": "eslint .",
- "lint-locales": "node scripts/lint-locales",
- "lint-locales:dev": "npm run lint-locales",
- "lint-locales:prod": "npm run lint-locales -- --production",
- "release": "npm-run-all contributors changelog",
- "start": "node server/server",
- "test": "cross-env NODE_ENV=test npm-run-all test:*",
- "test:unit": "mocha test/unit",
- "test:server": "mocha test/server",
- "test--browser": "browserify test/frontend/frontend.bundle.js -o test/frontend/bundle.js -d && node test/frontend/driver.js"
- },
- "lint-staged": {
- "*.js": [
- "prettier --single-quote --write",
- "eslint",
- "git add"
- ],
- "*.css": [
- "prettier --single-quote --write",
- "stylelint",
- "git add"
- ]
- }
+ ]
}
diff --git a/postcss.config.js b/postcss.config.js
index c96732f3..86125684 100644
--- a/postcss.config.js
+++ b/postcss.config.js
@@ -2,13 +2,13 @@ const autoprefixer = require('autoprefixer');
const cssnano = require('cssnano');
const mqpacker = require('css-mqpacker');
-const conf = require('./server/config');
+const config = require('./server/config');
const options = {
plugins: [autoprefixer, mqpacker, cssnano]
};
-if (conf.env === 'development') {
+if (config.env === 'development') {
options.map = { inline: true };
}
diff --git a/public/favicon.ico b/public/favicon.ico
deleted file mode 100644
index 6afb7ed7..00000000
Binary files a/public/favicon.ico and /dev/null differ
diff --git a/scripts/version.js b/scripts/version.js
deleted file mode 100755
index 6d236caa..00000000
--- a/scripts/version.js
+++ /dev/null
@@ -1,21 +0,0 @@
-const fs = require('fs');
-const path = require('path');
-const pkg = require('../package.json');
-const mkdirp = require('mkdirp');
-
-let commit;
-
-try {
- commit = require('git-rev-sync').short();
-} catch (err) {
- // Whatever...
-}
-
-const filename = path.join(__dirname, '..', 'dist', 'public', 'version.json');
-const filedata = {
- commit,
- source: pkg.homepage,
- version: process.env.CIRCLE_TAG || `v${pkg.version}`
-};
-mkdirp.sync(path.dirname(filename));
-fs.writeFileSync(filename, JSON.stringify(filedata, null, 2) + '\n');
diff --git a/server/dev.js b/server/dev.js
new file mode 100644
index 00000000..a21bb65d
--- /dev/null
+++ b/server/dev.js
@@ -0,0 +1,13 @@
+const assets = require('../common/assets');
+const locales = require('../common/locales');
+const routes = require('./routes');
+const pages = require('./routes/pages');
+
+module.exports = function(app, devServer) {
+ assets.setMiddleware(devServer.middleware);
+ locales.setMiddleware(devServer.middleware);
+ routes(app);
+ // webpack-dev-server routes haven't been added yet
+ // so wait for next tick to add 404 handler
+ process.nextTick(() => app.use(pages.notfound));
+};
diff --git a/server/languages.js b/server/languages.js
new file mode 100644
index 00000000..3447c580
--- /dev/null
+++ b/server/languages.js
@@ -0,0 +1,16 @@
+const { availableLanguages } = require('../package.json');
+const config = require('./config');
+const fs = require('fs');
+const path = require('path');
+
+function allLangs() {
+ const langs = fs.readdirSync(path.join(__dirname, '..', 'public', 'locales'));
+ langs.unshift('en-US'); // default first, TODO change for fluent-langneg
+ return langs;
+}
+
+if (config.l10n_dev) {
+ module.exports = allLangs();
+} else {
+ module.exports = availableLanguages;
+}
diff --git a/server/layout.js b/server/layout.js
new file mode 100644
index 00000000..8ba5329c
--- /dev/null
+++ b/server/layout.js
@@ -0,0 +1,98 @@
+const html = require('choo/html');
+const assets = require('../common/assets');
+const locales = require('../common/locales');
+
+module.exports = function(state, body = '') {
+ const firaTag = state.fira
+ ? html``
+ : '';
+ return html`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${state.title}
+
+
+
+ ${firaTag}
+
+
+
+
+
+
+
+
+
+
+
+
+ `;
+};
diff --git a/server/log.js b/server/log.js
index 2164412b..ea6318ab 100644
--- a/server/log.js
+++ b/server/log.js
@@ -1,4 +1,4 @@
-const conf = require('./config.js');
+const conf = require('./config');
const isProduction = conf.env === 'production';
diff --git a/server/prod.js b/server/prod.js
new file mode 100644
index 00000000..020d3e4b
--- /dev/null
+++ b/server/prod.js
@@ -0,0 +1,26 @@
+const express = require('express');
+const path = require('path');
+const Raven = require('raven');
+const config = require('./config');
+const routes = require('./routes');
+const pages = require('./routes/pages');
+
+if (config.sentry_dsn) {
+ Raven.config(config.sentry_dsn).install();
+}
+
+const app = express();
+
+app.use(
+ express.static(path.resolve(__dirname, '../dist/'), {
+ setHeaders: function(res) {
+ res.set('Cache-Control', 'public, max-age=31536000, immutable');
+ }
+ })
+);
+
+routes(app);
+
+app.use(pages.notfound);
+
+app.listen(1443);
diff --git a/server/routes/delete.js b/server/routes/delete.js
new file mode 100644
index 00000000..00fac3e2
--- /dev/null
+++ b/server/routes/delete.js
@@ -0,0 +1,30 @@
+const storage = require('../storage');
+
+function validateID(route_id) {
+ return route_id.match(/^[0-9a-fA-F]{10}$/) !== null;
+}
+
+module.exports = async function(req, res) {
+ const id = req.params.id;
+
+ if (!validateID(id)) {
+ res.sendStatus(404);
+ return;
+ }
+
+ const delete_token = req.body.delete_token;
+
+ if (!delete_token) {
+ res.sendStatus(404);
+ return;
+ }
+
+ try {
+ const err = await storage.delete(id, delete_token);
+ if (!err) {
+ res.sendStatus(200);
+ }
+ } catch (e) {
+ res.sendStatus(404);
+ }
+};
diff --git a/server/routes/download.js b/server/routes/download.js
new file mode 100644
index 00000000..f574b850
--- /dev/null
+++ b/server/routes/download.js
@@ -0,0 +1,38 @@
+const storage = require('../storage');
+const mozlog = require('../log');
+const log = mozlog('send.download');
+
+function validateID(route_id) {
+ return route_id.match(/^[0-9a-fA-F]{10}$/) !== null;
+}
+
+module.exports = async function(req, res) {
+ const id = req.params.id;
+ if (!validateID(id)) {
+ return res.sendStatus(404);
+ }
+
+ try {
+ const meta = await storage.metadata(id);
+ const contentLength = await storage.length(id);
+ res.writeHead(200, {
+ 'Content-Disposition': `attachment; filename=${meta.filename}`,
+ 'Content-Type': 'application/octet-stream',
+ 'Content-Length': contentLength,
+ 'X-File-Metadata': JSON.stringify(meta)
+ });
+ const file_stream = storage.get(id);
+
+ file_stream.on('end', async () => {
+ try {
+ await storage.forceDelete(id);
+ } catch (e) {
+ log.info('DeleteError:', id);
+ }
+ });
+
+ file_stream.pipe(res);
+ } catch (e) {
+ res.sendStatus(404);
+ }
+};
diff --git a/server/routes/exists.js b/server/routes/exists.js
new file mode 100644
index 00000000..e22bf21f
--- /dev/null
+++ b/server/routes/exists.js
@@ -0,0 +1,19 @@
+const storage = require('../storage');
+
+function validateID(route_id) {
+ return route_id.match(/^[0-9a-fA-F]{10}$/) !== null;
+}
+
+module.exports = async (req, res) => {
+ const id = req.params.id;
+ if (!validateID(id)) {
+ return res.sendStatus(404);
+ }
+
+ try {
+ await storage.exists(id);
+ res.sendStatus(200);
+ } catch (e) {
+ res.sendStatus(404);
+ }
+};
diff --git a/server/routes/index.js b/server/routes/index.js
new file mode 100644
index 00000000..baafffe9
--- /dev/null
+++ b/server/routes/index.js
@@ -0,0 +1,80 @@
+const busboy = require('connect-busboy');
+const helmet = require('helmet');
+const bodyParser = require('body-parser');
+const requestLanguage = require('express-request-language');
+const languages = require('../languages');
+const storage = require('../storage');
+const config = require('../config');
+const pages = require('./pages');
+// const lang = require('fluent-langneg')
+
+module.exports = function(app) {
+ app.use(
+ requestLanguage({
+ languages
+ })
+ );
+ app.use(helmet());
+ app.use(
+ helmet.hsts({
+ maxAge: 31536000,
+ force: config.env === 'production'
+ })
+ );
+ app.use(
+ helmet.contentSecurityPolicy({
+ directives: {
+ defaultSrc: ["'self'"],
+ connectSrc: [
+ "'self'",
+ 'https://sentry.prod.mozaws.net',
+ 'https://www.google-analytics.com'
+ ],
+ imgSrc: ["'self'", 'https://www.google-analytics.com'],
+ scriptSrc: ["'self'"],
+ styleSrc: ["'self'", 'https://code.cdn.mozilla.net'],
+ fontSrc: ["'self'", 'https://code.cdn.mozilla.net'],
+ formAction: ["'none'"],
+ frameAncestors: ["'none'"],
+ objectSrc: ["'none'"],
+ reportUri: '/__cspreport__'
+ }
+ })
+ );
+ app.use(
+ busboy({
+ limits: {
+ fileSize: config.max_file_size
+ }
+ })
+ );
+ app.use(bodyParser.json());
+ app.get('/', pages.index);
+ app.get('/legal', pages.legal);
+ app.get('/jsconfig.js', require('./jsconfig'));
+ app.get('/share/:id', pages.blank);
+ app.get('/download/:id', pages.download);
+ app.get('/completed', pages.blank);
+ app.get('/unsupported/:reason', pages.unsupported);
+ app.post('/api/upload', require('./upload'));
+ app.get('/api/download/:id', require('./download'));
+ app.get('/api/exists/:id', require('./exists'));
+ app.post('/api/delete/:id', require('./delete'));
+
+ app.get('/__version__', function(req, res) {
+ res.sendFile(require.resolve('../../dist/version.json'));
+ });
+
+ app.get('/__lbheartbeat__', function(req, res) {
+ res.sendStatus(200);
+ });
+
+ app.get('__heartbeat__', async (req, res) => {
+ try {
+ await storage.ping();
+ res.sendStatus(200);
+ } catch (e) {
+ res.sendStatus(500);
+ }
+ });
+};
diff --git a/server/routes/jsconfig.js b/server/routes/jsconfig.js
new file mode 100644
index 00000000..15d4b3e0
--- /dev/null
+++ b/server/routes/jsconfig.js
@@ -0,0 +1,46 @@
+const config = require('../config');
+
+let sentry = '';
+if (config.sentry_id) {
+ //eslint-disable-next-line node/no-missing-require
+ const version = require('../../dist/version.json');
+ sentry = `
+var RAVEN_CONFIG = {
+ release: '${version.version}',
+ tags: {
+ commit: '${version.commit}'
+ },
+ dataCallback: function (data) {
+ var hash = window.location.hash;
+ if (hash) {
+ return JSON.parse(JSON.stringify(data).replace(new RegExp(hash.slice(1), 'g'), ''));
+ }
+ return data;
+ }
+}
+var SENTRY_ID = '${config.sentry_id}';
+`;
+}
+
+let ga = '';
+if (config.analytics_id) {
+ ga = `var GOOGLE_ANALYTICS_ID = ${config.analytics_id};`;
+}
+
+/* eslint-disable no-useless-escape */
+const jsconfig = `
+var isIE = /trident\\\/7\.|msie/i.test(navigator.userAgent);
+var isUnsupportedPage = /\\\/unsupported/.test(location.pathname);
+if (isIE && !isUnsupportedPage) {
+ window.location.replace('/unsupported/ie');
+}
+var MAXFILESIZE = ${config.max_file_size};
+var EXPIRE_SECONDS = ${config.expire_seconds};
+${ga}
+${sentry}
+`;
+
+module.exports = function(req, res) {
+ res.set('Content-Type', 'application/javascript');
+ res.send(jsconfig);
+};
diff --git a/server/routes/pages.js b/server/routes/pages.js
new file mode 100644
index 00000000..5266d19a
--- /dev/null
+++ b/server/routes/pages.js
@@ -0,0 +1,68 @@
+const routes = require('../../app/routes');
+const storage = require('../storage');
+const state = require('../state');
+
+function validateID(route_id) {
+ return route_id.match(/^[0-9a-fA-F]{10}$/) !== null;
+}
+
+function stripEvents(str) {
+ // For CSP we need to remove all the event handler placeholders.
+ // It's ok, app.js will add them when it attaches to the DOM.
+ return str.replace(/\son\w+=""/g, '');
+}
+
+module.exports = {
+ index: function(req, res) {
+ res.send(stripEvents(routes.toString('/', state(req))));
+ },
+
+ blank: function(req, res) {
+ res.send(stripEvents(routes.toString('/blank', state(req))));
+ },
+
+ download: async function(req, res, next) {
+ const id = req.params.id;
+ if (!validateID(id)) {
+ return next();
+ }
+
+ try {
+ const efilename = await storage.filename(id);
+ const name = decodeURIComponent(efilename);
+ const size = await storage.length(id);
+ const ttl = await storage.ttl(id);
+ res.send(
+ stripEvents(
+ routes.toString(
+ `/download/${req.params.id}`,
+ Object.assign(state(req), {
+ fileInfo: { name, size, ttl }
+ })
+ )
+ )
+ );
+ } catch (e) {
+ next();
+ }
+ },
+
+ unsupported: function(req, res) {
+ res.send(
+ stripEvents(
+ routes.toString(
+ `/unsupported/${req.params.reason}`,
+ Object.assign(state(req), { fira: true })
+ )
+ )
+ );
+ },
+
+ legal: function(req, res) {
+ res.send(stripEvents(routes.toString('/legal', state(req))));
+ },
+
+ notfound: function(req, res) {
+ res.status(404).send(stripEvents(routes.toString('/404', state(req))));
+ }
+};
diff --git a/server/routes/upload.js b/server/routes/upload.js
new file mode 100644
index 00000000..28d6112e
--- /dev/null
+++ b/server/routes/upload.js
@@ -0,0 +1,65 @@
+const crypto = require('crypto');
+const storage = require('../storage');
+const config = require('../config');
+const mozlog = require('../log');
+
+const log = mozlog('send.upload');
+
+const validateIV = route_id => {
+ return route_id.match(/^[0-9a-fA-F]{24}$/) !== null;
+};
+
+module.exports = function(req, res) {
+ const newId = crypto.randomBytes(5).toString('hex');
+ let meta;
+
+ try {
+ meta = JSON.parse(req.header('X-File-Metadata'));
+ } catch (e) {
+ res.sendStatus(400);
+ return;
+ }
+
+ if (
+ !meta.hasOwnProperty('id') ||
+ !meta.hasOwnProperty('filename') ||
+ !validateIV(meta.id)
+ ) {
+ res.sendStatus(404);
+ return;
+ }
+
+ meta.delete = crypto.randomBytes(10).toString('hex');
+ req.pipe(req.busboy);
+
+ req.busboy.on(
+ 'file',
+ async (fieldname, file, filename, encoding, mimeType) => {
+ try {
+ meta.mimeType = mimeType || 'application/octet-stream';
+ await storage.set(newId, file, filename, meta);
+ const protocol = config.env === 'production' ? 'https' : req.protocol;
+ const url = `${protocol}://${req.get('host')}/download/${newId}/`;
+ res.json({
+ url,
+ delete: meta.delete,
+ id: newId
+ });
+ } catch (e) {
+ log.error('upload', e);
+ if (e.message === 'limit') {
+ return res.sendStatus(413);
+ }
+ res.sendStatus(500);
+ }
+ }
+ );
+
+ req.on('close', async err => {
+ try {
+ await storage.forceDelete(newId);
+ } catch (e) {
+ log.info('DeleteError:', newId);
+ }
+ });
+};
diff --git a/server/server.js b/server/server.js
deleted file mode 100644
index c3c97a47..00000000
--- a/server/server.js
+++ /dev/null
@@ -1,328 +0,0 @@
-const express = require('express');
-const exphbs = require('express-handlebars');
-const busboy = require('connect-busboy');
-const path = require('path');
-const bodyParser = require('body-parser');
-const helmet = require('helmet');
-const conf = require('./config.js');
-const storage = require('./storage.js');
-const Raven = require('raven');
-const crypto = require('crypto');
-const fs = require('fs');
-const version = require('../dist/public/version.json');
-
-if (conf.sentry_dsn) {
- Raven.config(conf.sentry_dsn).install();
-}
-
-const mozlog = require('./log.js');
-
-const log = mozlog('send.server');
-
-const STATIC_PATH = path.join(__dirname, '../dist/public');
-
-const app = express();
-
-function allLangs() {
- return fs
- .readdirSync(path.join(STATIC_PATH, 'locales'))
- .map(function(f) {
- return f.split('.')[0];
- })
- .join(',');
-}
-
-function prodLangs() {
- return require('../package.json').availableLanguages.join(',');
-}
-
-const availableLanguages = conf.l10n_dev ? allLangs() : prodLangs();
-
-// dev middleware is broken at the moment because of how webpack builds the
-// handlebars templates. Leaving the commented code here as a mark of shame.
-
-// if (conf.env === 'development') {
-// const webpack = require('webpack');
-// const webpackDevMiddleware = require('webpack-dev-middleware');
-// const config = require('../webpack.config.js');
-// config.devtool = 'inline-source-map';
-// const compiler = webpack(config);
-// const wdm = webpackDevMiddleware(compiler, {
-// publicPath: config.output.publicPath
-// });
-// app.use(wdm);
-// }
-app.set('views', 'dist/views/');
-app.engine(
- 'handlebars',
- exphbs({
- defaultLayout: 'main',
- layoutsDir: 'dist/views/layouts',
- helpers: {
- availableLanguages,
- baseUrl: conf.base_url,
- title: 'Firefox Send',
- description:
- 'Encrypt and send files with a link that automatically expires to ensure your important documents don’t stay online forever.'
- }
- })
-);
-app.set('view engine', 'handlebars');
-
-app.use(helmet());
-app.use(
- helmet.hsts({
- maxAge: 31536000,
- force: conf.env === 'production'
- })
-);
-app.use(
- helmet.contentSecurityPolicy({
- directives: {
- defaultSrc: ["'self'"],
- connectSrc: [
- "'self'",
- 'https://sentry.prod.mozaws.net',
- 'https://www.google-analytics.com'
- ],
- imgSrc: ["'self'", 'https://www.google-analytics.com'],
- scriptSrc: ["'self'"],
- styleSrc: ["'self'", 'https://code.cdn.mozilla.net'],
- fontSrc: ["'self'", 'https://code.cdn.mozilla.net'],
- formAction: ["'none'"],
- frameAncestors: ["'none'"],
- objectSrc: ["'none'"],
- reportUri: '/__cspreport__'
- }
- })
-);
-app.use(
- busboy({
- limits: {
- fileSize: conf.max_file_size
- }
- })
-);
-app.use(bodyParser.json());
-app.use(
- '/resources',
- express.static(path.join(STATIC_PATH, 'resources'), {
- setHeaders: function(res) {
- res.set('Cache-Control', 'public, max-age=31536000, immutable');
- }
- })
-);
-app.use(express.static(STATIC_PATH));
-
-app.get('/', (req, res) => {
- res.render('index');
-});
-
-app.get('/unsupported/:reason', (req, res) => {
- const outdated = req.params.reason === 'outdated';
- res.render('unsupported', {
- outdated,
- fira: true
- });
-});
-
-app.get('/legal', (req, res) => {
- res.render('legal');
-});
-
-app.get('/jsconfig.js', (req, res) => {
- res.set('Content-Type', 'application/javascript');
- res.render('jsconfig', {
- googleAnalyticsId: conf.analytics_id,
- sentryId: conf.sentry_id,
- version: version.version,
- commit: version.commit,
- maxFileSize: conf.max_file_size,
- expireSeconds: conf.expire_seconds,
- layout: false
- });
-});
-
-app.get('/exists/:id', async (req, res) => {
- const id = req.params.id;
- if (!validateID(id)) {
- res.sendStatus(404);
- return;
- }
-
- try {
- await storage.exists(id);
- res.sendStatus(200);
- } catch (e) {
- res.sendStatus(404);
- }
-});
-
-app.get('/download/:id', async (req, res) => {
- const id = req.params.id;
- if (!validateID(id)) {
- res.status(404).render('notfound');
- return;
- }
-
- try {
- const efilename = await storage.filename(id);
- const filename = decodeURIComponent(efilename);
- const filenameJson = JSON.stringify({ filename });
- const sizeInBytes = await storage.length(id);
- const ttl = await storage.ttl(id);
- res.render('download', {
- filename,
- filenameJson,
- sizeInBytes,
- ttl
- });
- } catch (e) {
- res.status(404).render('notfound');
- }
-});
-
-app.get('/assets/download/:id', async (req, res) => {
- const id = req.params.id;
- if (!validateID(id)) {
- res.sendStatus(404);
- return;
- }
-
- try {
- const meta = await storage.metadata(id);
- const contentLength = await storage.length(id);
- res.writeHead(200, {
- 'Content-Disposition': `attachment; filename=${meta.filename}`,
- 'Content-Type': 'application/octet-stream',
- 'Content-Length': contentLength,
- 'X-File-Metadata': JSON.stringify(meta)
- });
- const file_stream = storage.get(id);
-
- file_stream.on('end', async () => {
- try {
- await storage.forceDelete(id);
- } catch (e) {
- log.info('DeleteError:', id);
- }
- });
-
- file_stream.pipe(res);
- } catch (e) {
- res.sendStatus(404);
- }
-});
-
-app.post('/delete/:id', async (req, res) => {
- const id = req.params.id;
-
- if (!validateID(id)) {
- res.sendStatus(404);
- return;
- }
-
- const delete_token = req.body.delete_token;
-
- if (!delete_token) {
- res.sendStatus(404);
- return;
- }
-
- try {
- const err = await storage.delete(id, delete_token);
- if (!err) {
- res.sendStatus(200);
- }
- } catch (e) {
- res.sendStatus(404);
- }
-});
-
-app.post('/upload', (req, res, next) => {
- const newId = crypto.randomBytes(5).toString('hex');
- let meta;
-
- try {
- meta = JSON.parse(req.header('X-File-Metadata'));
- } catch (e) {
- res.sendStatus(400);
- return;
- }
-
- if (
- !meta.hasOwnProperty('id') ||
- !meta.hasOwnProperty('filename') ||
- !validateIV(meta.id)
- ) {
- res.sendStatus(404);
- return;
- }
-
- meta.delete = crypto.randomBytes(10).toString('hex');
- req.pipe(req.busboy);
-
- req.busboy.on(
- 'file',
- async (fieldname, file, filename, encoding, mimeType) => {
- try {
- meta.mimeType = mimeType || 'application/octet-stream';
- await storage.set(newId, file, filename, meta);
- const protocol = conf.env === 'production' ? 'https' : req.protocol;
- const url = `${protocol}://${req.get('host')}/download/${newId}/`;
- res.json({
- url,
- delete: meta.delete,
- id: newId
- });
- } catch (e) {
- if (e.message === 'limit') {
- return res.sendStatus(413);
- }
- res.sendStatus(500);
- }
- }
- );
-
- req.on('close', async err => {
- try {
- await storage.forceDelete(newId);
- } catch (e) {
- log.info('DeleteError:', newId);
- }
- });
-});
-
-app.get('/__lbheartbeat__', (req, res) => {
- res.sendStatus(200);
-});
-
-app.get('/__heartbeat__', async (req, res) => {
- try {
- await storage.ping();
- res.sendStatus(200);
- } catch (e) {
- res.sendStatus(500);
- }
-});
-
-app.get('/__version__', (req, res) => {
- res.sendFile(path.join(STATIC_PATH, 'version.json'));
-});
-
-const server = app.listen(conf.listen_port, () => {
- log.info('startServer:', `Send app listening on port ${conf.listen_port}!`);
-});
-
-const validateID = route_id => {
- return route_id.match(/^[0-9a-fA-F]{10}$/) !== null;
-};
-
-const validateIV = route_id => {
- return route_id.match(/^[0-9a-fA-F]{24}$/) !== null;
-};
-
-module.exports = {
- server: server,
- storage: storage
-};
diff --git a/server/state.js b/server/state.js
new file mode 100644
index 00000000..6dc889ed
--- /dev/null
+++ b/server/state.js
@@ -0,0 +1,20 @@
+const config = require('./config');
+const layout = require('./layout');
+const locales = require('../common/locales');
+
+module.exports = function(req) {
+ const locale = req.language || 'en-US';
+ return {
+ locale,
+ translate: locales.getTranslator(locale),
+ title: 'Firefox Send',
+ description:
+ 'Encrypt and send files with a link that automatically expires to ensure your important documents don’t stay online forever.',
+ baseUrl: config.base_url,
+ ui: {},
+ storage: {
+ files: []
+ },
+ layout
+ };
+};
diff --git a/server/storage.js b/server/storage.js
index 8bac8e30..36b040af 100644
--- a/server/storage.js
+++ b/server/storage.js
@@ -1,17 +1,18 @@
const AWS = require('aws-sdk');
const s3 = new AWS.S3();
-const conf = require('./config.js');
+const config = require('./config');
+const { tmpdir } = require('os');
const fs = require('fs');
const path = require('path');
-const mozlog = require('./log.js');
+const mozlog = require('./log');
const log = mozlog('send.storage');
const redis = require('redis');
const redis_client = redis.createClient({
- host: conf.redis_host,
+ host: config.redis_host,
connect_timeout: 10000
});
@@ -19,7 +20,9 @@ redis_client.on('error', err => {
log.error('Redis:', err);
});
-if (conf.s3_bucket) {
+let tempDir = null;
+
+if (config.s3_bucket) {
module.exports = {
filename: filename,
exists: exists,
@@ -36,6 +39,8 @@ if (conf.s3_bucket) {
metadata
};
} else {
+ tempDir = fs.mkdtempSync(`${tmpdir()}${path.sep}send-`);
+ log.info('tempDir', tempDir);
module.exports = {
filename: filename,
exists: exists,
@@ -113,7 +118,7 @@ function setField(id, key, value) {
function localLength(id) {
return new Promise((resolve, reject) => {
try {
- resolve(fs.statSync(path.join(__dirname, '../static', id)).size);
+ resolve(fs.statSync(path.join(tempDir, id)).size);
} catch (err) {
reject();
}
@@ -121,12 +126,12 @@ function localLength(id) {
}
function localGet(id) {
- return fs.createReadStream(path.join(__dirname, '../static', id));
+ return fs.createReadStream(path.join(tempDir, id));
}
function localSet(newId, file, filename, meta) {
return new Promise((resolve, reject) => {
- const filepath = path.join(__dirname, '../static', newId);
+ const filepath = path.join(tempDir, newId);
const fstream = fs.createWriteStream(filepath);
file.pipe(fstream);
file.on('limit', () => {
@@ -135,7 +140,7 @@ function localSet(newId, file, filename, meta) {
});
fstream.on('finish', () => {
redis_client.hmset(newId, meta);
- redis_client.expire(newId, conf.expire_seconds);
+ redis_client.expire(newId, config.expire_seconds);
log.info('localSet:', 'Upload Finished of ' + newId);
resolve(meta.delete);
});
@@ -156,7 +161,7 @@ function localDelete(id, delete_token) {
} else {
redis_client.del(id);
log.info('Deleted:', id);
- resolve(fs.unlinkSync(path.join(__dirname, '../static', id)));
+ resolve(fs.unlinkSync(path.join(tempDir, id)));
}
});
});
@@ -165,7 +170,7 @@ function localDelete(id, delete_token) {
function localForceDelete(id) {
return new Promise((resolve, reject) => {
redis_client.del(id);
- resolve(fs.unlinkSync(path.join(__dirname, '../static', id)));
+ resolve(fs.unlinkSync(path.join(tempDir, id)));
});
}
@@ -179,7 +184,7 @@ function localPing() {
function awsLength(id) {
const params = {
- Bucket: conf.s3_bucket,
+ Bucket: config.s3_bucket,
Key: id
};
return new Promise((resolve, reject) => {
@@ -195,7 +200,7 @@ function awsLength(id) {
function awsGet(id) {
const params = {
- Bucket: conf.s3_bucket,
+ Bucket: config.s3_bucket,
Key: id
};
@@ -208,7 +213,7 @@ function awsGet(id) {
function awsSet(newId, file, filename, meta) {
const params = {
- Bucket: conf.s3_bucket,
+ Bucket: config.s3_bucket,
Key: newId,
Body: file
};
@@ -221,7 +226,7 @@ function awsSet(newId, file, filename, meta) {
return upload.promise().then(
() => {
redis_client.hmset(newId, meta);
- redis_client.expire(newId, conf.expire_seconds);
+ redis_client.expire(newId, config.expire_seconds);
},
err => {
if (hitLimit) {
@@ -240,7 +245,7 @@ function awsDelete(id, delete_token) {
reject();
} else {
const params = {
- Bucket: conf.s3_bucket,
+ Bucket: config.s3_bucket,
Key: id
};
@@ -256,7 +261,7 @@ function awsDelete(id, delete_token) {
function awsForceDelete(id) {
return new Promise((resolve, reject) => {
const params = {
- Bucket: conf.s3_bucket,
+ Bucket: config.s3_bucket,
Key: id
};
@@ -269,6 +274,6 @@ function awsForceDelete(id) {
function awsPing() {
return localPing().then(() =>
- s3.headBucket({ Bucket: conf.s3_bucket }).promise()
+ s3.headBucket({ Bucket: config.s3_bucket }).promise()
);
}
diff --git a/static/info.txt b/static/info.txt
deleted file mode 100644
index b3119bbf..00000000
--- a/static/info.txt
+++ /dev/null
@@ -1 +0,0 @@
-This is where downloaded files are stored.
diff --git a/test/frontend/frontend.bundle.js b/test/frontend/frontend.bundle.js
index af584d1b..eea32c79 100644
--- a/test/frontend/frontend.bundle.js
+++ b/test/frontend/frontend.bundle.js
@@ -12,11 +12,11 @@ window.Raven = {
};
window.FakeFile = FakeFile;
-window.FileSender = require('../../frontend/src/fileSender');
-window.FileReceiver = require('../../frontend/src/fileReceiver');
+window.FileSender = require('../../app/fileSender');
+window.FileReceiver = require('../../app/fileReceiver');
window.sinon = require('sinon');
window.server = window.sinon.fakeServer.create();
window.assert = require('assert');
-const utils = require('../../frontend/src/utils');
+const utils = require('../../app/utils');
window.hexToArray = utils.hexToArray;
window.arrayToHex = utils.arrayToHex;
diff --git a/test/unit/aws.storage.test.js b/test/unit/aws.storage.test.js
index d9c142e2..8c4d8b19 100644
--- a/test/unit/aws.storage.test.js
+++ b/test/unit/aws.storage.test.js
@@ -46,11 +46,11 @@ const awsStub = {
const storage = proxyquire('../../server/storage', {
redis: redisStub,
fs: fsStub,
- './log.js': function() {
+ './log': function() {
return logStub;
},
'aws-sdk': awsStub,
- './config.js': {
+ './config': {
s3_bucket: 'test'
}
});
diff --git a/test/unit/local.storage.test.js b/test/unit/local.storage.test.js
index 48836433..ae94ba95 100644
--- a/test/unit/local.storage.test.js
+++ b/test/unit/local.storage.test.js
@@ -2,8 +2,6 @@ const assert = require('assert');
const sinon = require('sinon');
const proxyquire = require('proxyquire');
-// const conf = require('../server/config.js');
-
const redisStub = {};
const exists = sinon.stub();
const hget = sinon.stub();
@@ -35,7 +33,7 @@ logStub.error = sinon.stub();
const storage = proxyquire('../../server/storage', {
redis: redisStub,
fs: fsStub,
- './log.js': function() {
+ './log': function() {
return logStub;
}
});
diff --git a/views/jsconfig.handlebars b/views/jsconfig.handlebars
deleted file mode 100644
index 7a24eb2b..00000000
--- a/views/jsconfig.handlebars
+++ /dev/null
@@ -1,28 +0,0 @@
-{{!-- This file should be es5 only --}}
-var isIE = /trident\/7\.|msie/i.test(navigator.userAgent);
-var isUnsupportedPage = /\/unsupported/.test(location.pathname);
-if (isIE && !isUnsupportedPage) {
- window.location.replace('/unsupported/ie');
-}
-
-{{#if sentryId}}
-var RAVEN_CONFIG = {
- release: '{{{version}}}',
- tags: {
- commit: '{{{commit}}}'
- },
- dataCallback: function (data) {
- var hash = window.location.hash;
- if (hash) {
- return JSON.parse(JSON.stringify(data).replace(new RegExp(hash.slice(1), 'g'), ''));
- }
- return data;
- }
-}
-var SENTRY_ID = '{{{sentryId}}}';
-{{/if}}
-{{#if googleAnalyticsId}}
-var GOOGLE_ANALYTICS_ID = '{{{googleAnalyticsId}}}';
-{{/if}}
-var MAXFILESIZE = {{{maxFileSize}}};
-var EXPIRE_SECONDS = {{{expireSeconds}}};
diff --git a/webpack.config.js b/webpack.config.js
index de5ab1a1..4c40bdd1 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -1,17 +1,16 @@
const path = require('path');
const webpack = require('webpack');
-const HtmlPlugin = require('html-webpack-plugin');
const CopyPlugin = require('copy-webpack-plugin');
+const ManifestPlugin = require('webpack-manifest-plugin');
module.exports = {
entry: {
- vendor: ['babel-polyfill', 'raven-js'],
- upload: ['./frontend/src/upload.js'],
- download: ['./frontend/src/download.js']
+ vendor: ['babel-polyfill', 'raven-js', 'fluent', 'choo'],
+ app: ['./app/main.js']
},
output: {
- filename: 'resources/[name].[chunkhash].js',
- path: path.resolve(__dirname, 'dist/public'),
+ filename: '[name].[chunkhash:8].js',
+ path: path.resolve(__dirname, 'dist'),
publicPath: '/'
},
module: {
@@ -20,19 +19,48 @@ module.exports = {
test: /\.js$/,
loader: 'babel-loader',
include: [
- path.resolve(__dirname, 'frontend'),
+ path.resolve(__dirname, 'app'),
+ path.resolve(__dirname, 'common'),
path.resolve(__dirname, 'node_modules/testpilot-ga/src')
],
options: {
babelrc: false,
- presets: [['es2015', { modules: false }], 'stage-2']
+ presets: [['env', { modules: false }], 'stage-2'],
+ plugins: ['yo-yoify']
}
},
+ {
+ test: /\.js$/,
+ include: [path.dirname(require.resolve('fluent'))],
+ use: [
+ {
+ loader: 'expose-loader',
+ options: 'fluent'
+ },
+ {
+ loader: 'babel-loader',
+ options: {
+ presets: [['env', { modules: false }]]
+ }
+ }
+ ]
+ },
+ {
+ test: require.resolve('./assets/cryptofill'),
+ use: [
+ {
+ loader: 'file-loader',
+ options: {
+ name: '[name].[hash:8].[ext]'
+ }
+ }
+ ]
+ },
{
test: /\.(svg|png|jpg)$/,
loader: 'file-loader',
options: {
- name: 'resources/[name].[hash].[ext]'
+ name: '[name].[hash:8].[ext]'
}
},
{
@@ -41,7 +69,7 @@ module.exports = {
{
loader: 'file-loader',
options: {
- name: 'resources/[name].[hash].[ext]'
+ name: '[name].[hash:8].[ext]'
}
},
'extract-loader',
@@ -50,75 +78,64 @@ module.exports = {
]
},
{
- test: /\.hbs$/,
+ test: require.resolve('./package.json'),
use: [
{
- loader: 'html-loader',
+ loader: 'file-loader',
options: {
- interpolate: 'require',
- minimize: false
+ name: 'version.json'
}
- }
+ },
+ 'extract-loader',
+ './build/package_json_loader'
]
+ },
+ {
+ test: /\.ftl$/,
+ use: [
+ {
+ loader: 'file-loader',
+ options: {
+ name: '[path][name].[hash:8].js'
+ }
+ },
+ 'extract-loader',
+ './build/fluent_loader'
+ ]
+ },
+ {
+ test: require.resolve('./build/generate_asset_map.js'),
+ use: ['babel-loader', 'val-loader']
+ },
+ {
+ test: require.resolve('./build/generate_l10n_map.js'),
+ use: ['babel-loader', 'val-loader']
}
]
},
plugins: [
new CopyPlugin([
- {
- context: 'public',
- from: 'locales/**/*.ftl'
- },
{
context: 'public',
from: '*.*'
- },
- {
- from: 'views/**',
- to: '../'
- },
- {
- context: 'node_modules/l20n/dist/web',
- from: 'l20n.min.js'
}
]),
- new HtmlPlugin({
- filename: '../views/index.handlebars',
- template: 'webpack/upload.hbs',
- chunks: ['upload']
- }),
- new HtmlPlugin({
- filename: '../views/download.handlebars',
- template: 'webpack/download.hbs',
- chunks: ['download']
- }),
- new HtmlPlugin({
- filename: '../views/legal.handlebars',
- template: 'webpack/legal.hbs',
- inject: false
- }),
- new HtmlPlugin({
- filename: '../views/notfound.handlebars',
- template: 'webpack/notfound.hbs',
- inject: false
- }),
- new HtmlPlugin({
- filename: '../views/layouts/main.handlebars',
- template: 'webpack/layout.hbs',
- inject: 'head',
- excludeChunks: ['upload', 'download']
- }),
- new HtmlPlugin({
- filename: '../views/unsupported.handlebars',
- template: 'webpack/unsupported.hbs',
- inject: false
- }),
+ new webpack.IgnorePlugin(/dist/),
+ new webpack.IgnorePlugin(/require-from-string/),
new webpack.HashedModuleIdsPlugin(),
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor'
}),
new webpack.optimize.CommonsChunkPlugin({
name: 'runtime'
- })
- ]
+ }),
+ new ManifestPlugin()
+ ],
+ devServer: {
+ compress: true,
+ setup:
+ process.env.NODE_ENV === 'development'
+ ? require('./server/dev')
+ : undefined
+ }
};
diff --git a/webpack/download.hbs b/webpack/download.hbs
deleted file mode 100644
index b94f501c..00000000
--- a/webpack/download.hbs
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/webpack/layout.hbs b/webpack/layout.hbs
deleted file mode 100644
index 9b9f8e50..00000000
--- a/webpack/layout.hbs
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{title}}
-
-
- {{#if fira}}
-
- {{/if}}
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/webpack/legal.hbs b/webpack/legal.hbs
deleted file mode 100644
index 023ebf8e..00000000
--- a/webpack/legal.hbs
+++ /dev/null
@@ -1,12 +0,0 @@
-
diff --git a/webpack/notfound.hbs b/webpack/notfound.hbs
deleted file mode 100644
index 04bc54ed..00000000
--- a/webpack/notfound.hbs
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/webpack/unsupported.hbs b/webpack/unsupported.hbs
deleted file mode 100644
index 08d8b75a..00000000
--- a/webpack/unsupported.hbs
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
Your browser is not supported.
- {{#if outdated}}
-
Unfortunately this version of Firefox does not support the web technology that powers Firefox Send. You’ll need to update your browser.
-
-
- Update Firefox
-
- {{else}}
-
Unfortunately this browser does not support the web technology that powers Firefox Send. You’ll need to try another browser. We recommend Firefox!
-
-
-
- Firefox
- Free Download
-
-
- {{/if}}
-
Send files through a safe, private, and encrypted link that automatically expires to ensure your stuff does not remain online forever.
-
diff --git a/webpack/upload.hbs b/webpack/upload.hbs
deleted file mode 100644
index 331add23..00000000
--- a/webpack/upload.hbs
+++ /dev/null
@@ -1,75 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- |
- |
- |
- |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-