From 819be60796d2b8b0b512a6d157533b5a1fe81873 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Sat, 19 Aug 2017 12:57:54 +0200 Subject: [PATCH 1/9] Switch to XMLHttpRequest for processDocuments() processDocuments() now uses an XHR 'document' request, wrapped to provide a 'location' property, and uses promises for a simpler call signature (though the old one will continue to work, for existing translators). 'done' and 'exception' can now be handled via promises, and in the translator sandbox an optional noCompleteOnError argument instructs it not to automatically cancel the translation process with an error (e.g., for supplementary materials). Since we do need a hidden browser in some situations (e.g., for saving snapshots), the old hidden-browser-based processDocuments() is still available as Zotero.HTTP.loadDocuments(). This hopefully also fixes various problems with document property access in translation-server. --- .../tools/testTranslators/translatorTester.js | 2 +- chrome/content/zotero/xpcom/attachments.js | 6 +- chrome/content/zotero/xpcom/data/feedItem.js | 10 +- chrome/content/zotero/xpcom/http.js | 85 +++++++-- .../content/zotero/xpcom/server_connector.js | 2 +- .../zotero/xpcom/translation/translate.js | 19 +- .../zotero/xpcom/utilities_translate.js | 177 ++++++++---------- chrome/content/zotero/zoteroPane.js | 7 +- test/tests/httpTest.js | 76 ++++++++ test/tests/translateTest.js | 159 +++++++++++++++- 10 files changed, 408 insertions(+), 135 deletions(-) create mode 100644 test/tests/httpTest.js diff --git a/chrome/content/zotero/tools/testTranslators/translatorTester.js b/chrome/content/zotero/tools/testTranslators/translatorTester.js index 298f168153..80a1a65ce6 100644 --- a/chrome/content/zotero/tools/testTranslators/translatorTester.js +++ b/chrome/content/zotero/tools/testTranslators/translatorTester.js @@ -416,7 +416,7 @@ Zotero_TranslatorTester.prototype.fetchPageAndRunTest = function(test, testDoneC testDoneCallback(obj, test, status, message); }); }; - var hiddenBrowser = Zotero.HTTP.processDocuments(test.url, + var hiddenBrowser = Zotero.HTTP.loadDocuments(test.url, function(doc) { if(test.defer) { me._debug(this, "TranslatorTesting: Waiting " diff --git a/chrome/content/zotero/xpcom/attachments.js b/chrome/content/zotero/xpcom/attachments.js index 84f839b095..eff18de43b 100644 --- a/chrome/content/zotero/xpcom/attachments.js +++ b/chrome/content/zotero/xpcom/attachments.js @@ -265,7 +265,7 @@ Zotero.Attachments = new function(){ // Save using a hidden browser var nativeHandlerImport = function () { return new Zotero.Promise(function (resolve, reject) { - var browser = Zotero.HTTP.processDocuments( + var browser = Zotero.HTTP.loadDocuments( url, Zotero.Promise.coroutine(function* () { let channel = browser.docShell.currentDocumentChannel; @@ -591,7 +591,9 @@ Zotero.Attachments = new function(){ } } - if (contentType === 'text/html' || contentType === 'application/xhtml+xml') { + if ((contentType === 'text/html' || contentType === 'application/xhtml+xml') + // Documents from XHR don't work here + && document instanceof Ci.nsIDOMDocument) { Zotero.debug('Saving document with saveDocument()'); yield Zotero.Utilities.Internal.saveDocument(document, tmpFile); } diff --git a/chrome/content/zotero/xpcom/data/feedItem.js b/chrome/content/zotero/xpcom/data/feedItem.js index 71644d938c..384e00f41e 100644 --- a/chrome/content/zotero/xpcom/data/feedItem.js +++ b/chrome/content/zotero/xpcom/data/feedItem.js @@ -234,10 +234,12 @@ Zotero.FeedItem.prototype.translate = Zotero.Promise.coroutine(function* (librar } // Load document - let hiddenBrowser = Zotero.HTTP.processDocuments( - this.getField('url'), - item => deferred.resolve(item), - ()=>{}, error, true + let hiddenBrowser = Zotero.HTTP.loadDocuments( + this.getField('url'), + doc => deferred.resolve(doc), + () => {}, + error, + true ); let doc = yield deferred.promise; diff --git a/chrome/content/zotero/xpcom/http.js b/chrome/content/zotero/xpcom/http.js index bb8bbfdd16..a22b87542c 100644 --- a/chrome/content/zotero/xpcom/http.js +++ b/chrome/content/zotero/xpcom/http.js @@ -797,20 +797,81 @@ Zotero.HTTP = new function() { .getService(Components.interfaces.nsIIOService).offline; } + + /** + * Load one or more documents using XMLHttpRequest + * + * This should stay in sync with the equivalent function in the connector + * + * @param {String|String[]} urls URL(s) of documents to load + * @param {Function} processor - Callback to be executed for each document loaded; if function returns + * a promise, it's waited for before continuing + * @param {Zotero.CookieSandbox} [cookieSandbox] Cookie sandbox object + * @return {Promise} - A promise for an array of results from the processor runs + */ + this.processDocuments = async function (urls, processor, cookieSandbox) { + // Handle old signature: urls, processor, onDone, onError, dontDelete, cookieSandbox + if (arguments.length > 3) { + Zotero.debug("Zotero.HTTP.processDocuments() now takes only 3 arguments -- update your code"); + var onDone = arguments[2]; + var onError = arguments[3]; + var cookieSandbox = arguments[5]; + } + + if (typeof urls == "string") urls = [urls]; + var funcs = urls.map(url => () => { + return Zotero.HTTP.request( + "GET", + url, + { + responseType: 'document' + } + ) + .then((xhr) => { + var doc = this.wrapDocument(xhr.response, url); + return processor(doc, url); + }); + }); + + // Run processes serially + // TODO: Add some concurrency? + var f; + var results = []; + while (f = funcs.shift()) { + try { + results.push(await f()); + } + catch (e) { + if (onError) { + onError(e); + } + throw e; + } + } + + // Deprecated + if (onDone) { + onDone(); + } + + return results; + }; + + /** * Load one or more documents in a hidden browser * * @param {String|String[]} urls URL(s) of documents to load * @param {Function} processor - Callback to be executed for each document loaded; if function returns * a promise, it's waited for before continuing - * @param {Function} done Callback to be executed after all documents have been loaded - * @param {Function} exception Callback to be executed if an exception occurs + * @param {Function} onDone - Callback to be executed after all documents have been loaded + * @param {Function} onError - Callback to be executed if an error occurs * @param {Boolean} dontDelete Don't delete the hidden browser upon completion; calling function * must call deleteHiddenBrowser itself. * @param {Zotero.CookieSandbox} [cookieSandbox] Cookie sandbox object * @return {browser} Hidden browser used for loading */ - this.processDocuments = function(urls, processor, done, exception, dontDelete, cookieSandbox) { + this.loadDocuments = function (urls, processor, onDone, onError, dontDelete, cookieSandbox) { // (Approximately) how many seconds to wait if the document is left in the loading state and // pageshow is called before we call pageshow with an incomplete document const LOADING_STATE_TIMEOUT = 120; @@ -827,11 +888,11 @@ Zotero.HTTP = new function() { firedLoadEvent = 0; currentURL++; try { - Zotero.debug("Zotero.HTTP.processDocuments: Loading "+url); + Zotero.debug("Zotero.HTTP.loadDocuments: Loading " + url); hiddenBrowser.loadURI(url); } catch(e) { - if(exception) { - exception(e); + if (onError) { + onError(e); return; } else { if(!dontDelete) Zotero.Browser.deleteHiddenBrowser(hiddenBrowsers); @@ -840,7 +901,7 @@ Zotero.HTTP = new function() { } } else { if(!dontDelete) Zotero.Browser.deleteHiddenBrowser(hiddenBrowsers); - if(done) done(); + if (onDone) onDone(); } }; @@ -861,7 +922,7 @@ Zotero.HTTP = new function() { return; } - Zotero.debug("Zotero.HTTP.processDocuments: "+url+" loaded"); + Zotero.debug("Zotero.HTTP.loadDocuments: " + url + " loaded"); hiddenBrowser.removeEventListener("pageshow", onLoad, true); hiddenBrowser.zotero_loaded = true; @@ -878,8 +939,8 @@ Zotero.HTTP = new function() { if (maybePromise && maybePromise.then) { maybePromise.then(() => doLoad()) .catch(e => { - if (exception) { - exception(e); + if (onError) { + onError(e); } else { throw e; @@ -890,8 +951,8 @@ Zotero.HTTP = new function() { try { if (error) { - if (exception) { - exception(error); + if (onError) { + onError(error); } else { throw error; diff --git a/chrome/content/zotero/xpcom/server_connector.js b/chrome/content/zotero/xpcom/server_connector.js index 77f7d81f28..29fea05854 100644 --- a/chrome/content/zotero/xpcom/server_connector.js +++ b/chrome/content/zotero/xpcom/server_connector.js @@ -505,7 +505,7 @@ Zotero.Server.Connector.SaveSnapshot.prototype = { } else { let deferred = Zotero.Promise.defer(); - Zotero.HTTP.processDocuments( + Zotero.HTTP.loadDocuments( ["zotero://connector/" + encodeURIComponent(data.url)], Zotero.Promise.coroutine(function* (doc) { delete Zotero.Server.Connector.Data[data.url]; diff --git a/chrome/content/zotero/xpcom/translation/translate.js b/chrome/content/zotero/xpcom/translation/translate.js index 4ab192d28a..1fff941cce 100644 --- a/chrome/content/zotero/xpcom/translation/translate.js +++ b/chrome/content/zotero/xpcom/translation/translate.js @@ -86,7 +86,7 @@ Zotero.Translate.Sandbox = { && translate.translator[0].configOptions && translate.translator[0].configOptions.async; - var run = function (resolve) { + var run = async function (async) { Zotero.debug("Translate: Saving item"); // warn if itemDone called after translation completed @@ -216,12 +216,9 @@ Zotero.Translate.Sandbox = { // For synchronous import (when Promise isn't available in the sandbox or the do* // function doesn't use it) and web translators, queue saves - if (!resolve || !asyncTranslator) { + if (!async || !asyncTranslator) { Zotero.debug("Translate: Saving via queue"); translate.saveQueue.push(item); - if (resolve) { - resolve(); - } } // For async import, save items immediately else { @@ -240,11 +237,9 @@ Zotero.Translate.Sandbox = { return new translate._sandboxManager.sandbox.Promise(function (resolve, reject) { try { - let maybePromise = run(resolve); - if (maybePromise) { - maybePromise - .then(resolve) - .catch(function (e) { + run(true).then( + resolve, + function (e) { // Fix wrapping error from sandbox when error is thrown from _saveItems() if (Zotero.isFx) { reject(translate._sandboxManager.copyObject(e)); @@ -252,8 +247,8 @@ Zotero.Translate.Sandbox = { else { reject(e); } - }); - } + } + ); } catch (e) { reject(e); diff --git a/chrome/content/zotero/xpcom/utilities_translate.js b/chrome/content/zotero/xpcom/utilities_translate.js index ccf7df127e..7a91fab46d 100644 --- a/chrome/content/zotero/xpcom/utilities_translate.js +++ b/chrome/content/zotero/xpcom/utilities_translate.js @@ -191,13 +191,22 @@ Zotero.Utilities.Translate.prototype.loadDocument = function(url, succeeded, fai } /** - * Already documented in Zotero.HTTP + * Already documented in Zotero.HTTP, except this optionally takes noCompleteOnError, which prevents + * the translation process from being cancelled automatically on error, as it is normally. The promise + * is still rejected on error for handling by the calling function. * @ignore */ -Zotero.Utilities.Translate.prototype.processDocuments = function(urls, processor, done, exception) { +Zotero.Utilities.Translate.prototype.processDocuments = async function (urls, processor, noCompleteOnError) { + // Handle old signature: urls, processor, onDone, onError + if (arguments.length > 3 || typeof arguments[2] == 'function') { + Zotero.debug("ZU.processDocuments() now takes only 3 arguments -- update your code"); + var onDone = arguments[2]; + var onError = arguments[3]; + } + var translate = this._translate; - if(typeof(urls) == "string") { + if (typeof urls == "string") { urls = [translate.resolveURL(urls)]; } else { for(var i in urls) { @@ -205,109 +214,89 @@ Zotero.Utilities.Translate.prototype.processDocuments = function(urls, processor } } - // Unless the translator has proposed some way to handle an error, handle it - // by throwing a "scraping error" message - if(exception) { - var myException = function(e) { - var browserDeleted; - try { - exception(e); - } catch(e) { - if(hiddenBrowser) { - try { - Zotero.Browser.deleteHiddenBrowser(hiddenBrowser); - } catch(e) {} - } - browserDeleted = true; - translate.complete(false, e); - } - - if(!browserDeleted) { - try { - Zotero.Browser.deleteHiddenBrowser(hiddenBrowser); - } catch(e) {} - } + var processDoc = function (doc) { + if (Zotero.isFx) { + let newLoc = doc.location; + let url = Services.io.newURI(newLoc.href, null, null); + return processor( + // Rewrap document for the sandbox + translate._sandboxManager.wrap( + Zotero.Translate.DOMWrapper.unwrap(doc), + null, + // Duplicate overrides from Zotero.HTTP.wrapDocument() + { + documentURI: newLoc.spec, + URL: newLoc.spec, + location: new Zotero.HTTP.Location(url), + defaultView: new Zotero.HTTP.Window(url) + } + ), + newLoc.href + ); } - } else { - var myException = function(e) { - if(hiddenBrowser) { - try { - Zotero.Browser.deleteHiddenBrowser(hiddenBrowser); - } catch(e) {} - } - translate.complete(false, e); - } - } + + return processor(doc, doc.location.href); + }; - if(Zotero.isFx) { - if(typeof translate._sandboxLocation === "object") { - var protocol = translate._sandboxLocation.location.protocol, - host = translate._sandboxLocation.location.host; - } else { - var url = Components.classes["@mozilla.org/network/io-service;1"] - .getService(Components.interfaces.nsIIOService) - .newURI(translate._sandboxLocation, null, null), - protocol = url.scheme+":", - host = url.host; - } - } - - for(var i=0; i processDoc(this._translate.document, urls[i])); urls.splice(i, 1); i--; } } translate.incrementAsyncProcesses("Zotero.Utilities.Translate#processDocuments"); - var hiddenBrowser = Zotero.HTTP.processDocuments(urls, function (doc, url) { - if(!processor) return; - - var newLoc = doc.location; - if((Zotero.isFx && !Zotero.isBookmarklet && (protocol != newLoc.protocol || host != newLoc.host)) - // This fixes document permissions issues in translation-server when translators call - // processDocuments() on same-domain URLs (e.g., some of the Code4Lib tests). - // DEBUG: Is there a better fix for this? - || Zotero.isServer) { - // Cross-site; need to wrap - processor(translate._sandboxManager.wrap(doc), url); - } else { - // Not cross-site; no need to wrap - processor(doc, url); - } - }, - function() { - if(done) done(); - var handler = function() { - if(hiddenBrowser) { - try { - Zotero.Browser.deleteHiddenBrowser(hiddenBrowser); - } catch(e) {} + + if (urls.length) { + funcs.push( + () => Zotero.HTTP.processDocuments( + urls, + function (doc) { + if (!processor) return; + return processDoc(doc); + }, + translate.cookieSandbox + ) + ); + } + + var f; + while (f = funcs.shift()) { + try { + let maybePromise = f(); + // The processor may or may not return a promise + if (maybePromise) { + await maybePromise; } - translate.removeHandler("done", handler); - }; - translate.setHandler("done", handler); - translate.decrementAsyncProcesses("Zotero.Utilities.Translate#processDocuments"); - }, myException, true, translate.cookieSandbox); + } + catch (e) { + if (onError) { + try { + onError(e); + } + catch (e) { + translate.complete(false, e); + } + } + // Unless instructed otherwise, end the translation on error + else if (!noCompleteOnError) { + translate.complete(false, e); + } + throw e; + } + } + + // Deprecated + if (onDone) { + onDone(); + } + + translate.decrementAsyncProcesses("Zotero.Utilities.Translate#processDocuments"); } /** diff --git a/chrome/content/zotero/zoteroPane.js b/chrome/content/zotero/zoteroPane.js index 9fa006b12f..6d24939d84 100644 --- a/chrome/content/zotero/zoteroPane.js +++ b/chrome/content/zotero/zoteroPane.js @@ -3885,18 +3885,17 @@ var ZoteroPane = new function() var deferred = Zotero.Promise.defer(); var processor = function (doc) { - ZoteroPane_Local.addItemFromDocument(doc, itemType, saveSnapshot, row) + return ZoteroPane_Local.addItemFromDocument(doc, itemType, saveSnapshot, row) .then(function () { deferred.resolve() - }) + }); }; - // TODO: processDocuments should wait for the processor promise to be resolved var done = function () {} var exception = function (e) { Zotero.debug(e, 1); deferred.reject(e); } - Zotero.HTTP.processDocuments([url], processor, done, exception); + Zotero.HTTP.loadDocuments([url], processor, done, exception); return deferred.promise; } diff --git a/test/tests/httpTest.js b/test/tests/httpTest.js new file mode 100644 index 0000000000..f60b81c1b2 --- /dev/null +++ b/test/tests/httpTest.js @@ -0,0 +1,76 @@ +describe("Zotero.HTTP", function () { + var httpd; + var port = 16213; + + before(function* () { + Components.utils.import("resource://zotero-unit/httpd.js"); + + httpd = new HttpServer(); + httpd.start(port); + httpd.registerPathHandler( + '/test.html', + { + handle: function (request, response) { + response.setStatusLine(null, 200, "OK"); + response.write("

Test

Test 2

"); + } + } + ); + }); + + after(function* () { + var defer = new Zotero.Promise.defer(); + httpd.stop(() => defer.resolve()); + yield defer.promise; + }); + + describe("#processDocuments()", function () { + it("should provide a document object", function* () { + var called = false; + var url = `http://127.0.0.1:${port}/test.html`; + yield Zotero.HTTP.processDocuments( + url, + function (doc) { + assert.equal(doc.location.href, url); + assert.equal(doc.querySelector('p').textContent, 'Test'); + var p = doc.evaluate('//p', doc, null, XPathResult.ANY_TYPE, null).iterateNext(); + assert.equal(p.textContent, 'Test'); + called = true; + } + ); + assert.isTrue(called); + }); + }); + + describe("#loadDocuments()", function () { + var win; + + before(function* () { + // TEMP: createHiddenBrowser currently needs a parent window + win = yield loadBrowserWindow(); + }); + + after(function* () { + win.close(); + }); + + it("should provide a document object", function* () { + var called = false; + var url = `http://127.0.0.1:${port}/test.html`; + yield new Zotero.Promise((resolve) => { + Zotero.HTTP.loadDocuments( + url, + function (doc) { + assert.equal(doc.location.href, url); + assert.equal(doc.querySelector('p').textContent, 'Test'); + var p = doc.evaluate('//p', doc, null, XPathResult.ANY_TYPE, null).iterateNext(); + assert.equal(p.textContent, 'Test'); + called = true; + }, + resolve + ); + }); + assert.isTrue(called); + }); + }); +}); diff --git a/test/tests/translateTest.js b/test/tests/translateTest.js index 8f5ea39372..3bad97e6f9 100644 --- a/test/tests/translateTest.js +++ b/test/tests/translateTest.js @@ -486,11 +486,15 @@ describe("Zotero.Translate", function() { checkTestTags(pdf, true); }); - it('web translators should save attachment from document', function* () { + it('web translators should save attachment from browser document', function* () { let deferred = Zotero.Promise.defer(); - let browser = Zotero.HTTP.processDocuments("http://127.0.0.1:23119/test/translate/test.html", - function (doc) { deferred.resolve(doc) }, undefined, - undefined, true); + let browser = Zotero.HTTP.loadDocuments( + "http://127.0.0.1:23119/test/translate/test.html", + doc => deferred.resolve(doc), + undefined, + undefined, + true + ); let doc = yield deferred.promise; let translate = new Zotero.Translate.Web(); @@ -510,7 +514,7 @@ describe("Zotero.Translate", function() { '}')); let newItems = yield translate.translate(); assert.equal(newItems.length, 1); - let containedAttachments = yield Zotero.Items.getAsync(newItems[0].getAttachments()); + let containedAttachments = Zotero.Items.get(newItems[0].getAttachments()); assert.equal(containedAttachments.length, 1); let snapshot = containedAttachments[0]; @@ -522,6 +526,40 @@ describe("Zotero.Translate", function() { Zotero.Browser.deleteHiddenBrowser(browser); }); + + it('web translators should save attachment from non-browser document', function* () { + return Zotero.HTTP.processDocuments( + "http://127.0.0.1:23119/test/translate/test.html", + async function (doc) { + let translate = new Zotero.Translate.Web(); + translate.setDocument(doc); + translate.setTranslator(buildDummyTranslator(4, + 'function detectWeb() {}\n'+ + 'function doWeb(doc) {\n'+ + ' var item = new Zotero.Item("book");\n'+ + ' item.title = "Container Item";\n'+ + ' item.attachments = [{\n'+ + ' "document":doc,\n'+ + ' "title":"Snapshot from Document",\n'+ + ' "note":"attachment note",\n'+ + ' "tags":'+JSON.stringify(TEST_TAGS)+'\n'+ + ' }];\n'+ + ' item.complete();\n'+ + '}')); + let newItems = await translate.translate(); + assert.equal(newItems.length, 1); + let containedAttachments = Zotero.Items.get(newItems[0].getAttachments()); + assert.equal(containedAttachments.length, 1); + + let snapshot = containedAttachments[0]; + assert.equal(snapshot.getField("url"), "http://127.0.0.1:23119/test/translate/test.html"); + assert.equal(snapshot.getNote(), "attachment note"); + assert.equal(snapshot.attachmentLinkMode, Zotero.Attachments.LINK_MODE_IMPORTED_URL); + assert.equal(snapshot.attachmentContentType, "text/html"); + checkTestTags(snapshot, true); + } + ); + }); it('web translators should ignore attachments that return error codes', function* () { this.timeout(60000); @@ -629,6 +667,117 @@ describe("Zotero.Translate", function() { }); + describe("#processDocuments()", function () { + var url = "http://127.0.0.1:23119/test/translate/test.html"; + var doc; + + beforeEach(function* () { + // This is the main processDocuments, not the translation sandbox one being tested + doc = (yield Zotero.HTTP.processDocuments(url, doc => doc))[0]; + }); + + it("should provide document object", async function () { + var translate = new Zotero.Translate.Web(); + translate.setDocument(doc); + translate.setTranslator( + buildDummyTranslator( + 4, + `function detectWeb() {} + function doWeb(doc) { + ZU.processDocuments( + doc.location.href + '?t', + function (doc) { + var item = new Zotero.Item("book"); + item.title = "Container Item"; + // document.location + item.url = doc.location.href; + // document.evaluate() + item.extra = doc + .evaluate('//p', doc, null, XPathResult.ANY_TYPE, null) + .iterateNext() + .textContent; + item.attachments = [{ + document: doc, + title: "Snapshot from Document", + note: "attachment note", + tags: ${JSON.stringify(TEST_TAGS)} + }]; + item.complete(); + } + ); + }` + ) + ); + var newItems = await translate.translate(); + assert.equal(newItems.length, 1); + + var item = newItems[0]; + assert.equal(item.getField('url'), url + '?t'); + assert.include(item.getField('extra'), 'your research sources'); + + var containedAttachments = Zotero.Items.get(newItems[0].getAttachments()); + assert.equal(containedAttachments.length, 1); + + var snapshot = containedAttachments[0]; + assert.equal(snapshot.getField("url"), url + '?t'); + assert.equal(snapshot.getNote(), "attachment note"); + assert.equal(snapshot.attachmentLinkMode, Zotero.Attachments.LINK_MODE_IMPORTED_URL); + assert.equal(snapshot.attachmentContentType, "text/html"); + checkTestTags(snapshot, true); + }); + + it("should use loaded document instead of reloading if possible", function* () { + var translate = new Zotero.Translate.Web(); + translate.setDocument(doc); + translate.setTranslator( + buildDummyTranslator( + 4, + `function detectWeb() {} + function doWeb(doc) { + ZU.processDocuments( + doc.location.href, + function (doc) { + var item = new Zotero.Item("book"); + item.title = "Container Item"; + // document.location + item.url = doc.location.href; + // document.evaluate() + item.extra = doc + .evaluate('//p', doc, null, XPathResult.ANY_TYPE, null) + .iterateNext() + .textContent; + item.attachments = [{ + document: doc, + title: "Snapshot from Document", + note: "attachment note", + tags: ${JSON.stringify(TEST_TAGS)} + }]; + item.complete(); + } + ); + }` + ) + ); + var newItems = yield translate.translate(); + assert.equal(newItems.length, 1); + + var item = newItems[0]; + assert.equal(item.getField('url'), url); + assert.include(item.getField('extra'), 'your research sources'); + + var containedAttachments = Zotero.Items.get(newItems[0].getAttachments()); + assert.equal(containedAttachments.length, 1); + + var snapshot = containedAttachments[0]; + assert.equal(snapshot.getField("url"), url); + assert.equal(snapshot.getNote(), "attachment note"); + assert.equal(snapshot.attachmentLinkMode, Zotero.Attachments.LINK_MODE_IMPORTED_URL); + assert.equal(snapshot.attachmentContentType, "text/html"); + checkTestTags(snapshot, true); + }); + }); + + describe("Translators", function () { it("should round-trip child attachment via BibTeX", function* () { var item = yield createDataObject('item'); From c44af1c7bd93d7f4fd8b28f6a22785acb09ca9c2 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Mon, 21 Aug 2017 22:16:58 +0200 Subject: [PATCH 2/9] Fix import translators in translation-server --- chrome/content/zotero/xpcom/translation/translate.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chrome/content/zotero/xpcom/translation/translate.js b/chrome/content/zotero/xpcom/translation/translate.js index 1fff941cce..733c992998 100644 --- a/chrome/content/zotero/xpcom/translation/translate.js +++ b/chrome/content/zotero/xpcom/translation/translate.js @@ -152,7 +152,7 @@ Zotero.Translate.Sandbox = { if(translate._libraryID === false || translate._parentTranslator) { translate.newItems.push(item); if(translate._parentTranslator && Zotero.isFx && !Zotero.isBookmarklet) { - // Copy object so it is accessible to child translator + // Copy object so it is accessible to parent translator item = translate._sandboxManager.copyObject(item); item.complete = oldItem.complete; } From d5261841be96f42521341da0413ab19f6c099c0c Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Tue, 22 Aug 2017 02:30:33 +0200 Subject: [PATCH 3/9] Allow substrings when filtering translator tests --- chrome/content/zotero/tools/testTranslators/translatorTester.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chrome/content/zotero/tools/testTranslators/translatorTester.js b/chrome/content/zotero/tools/testTranslators/translatorTester.js index 80a1a65ce6..a710724076 100644 --- a/chrome/content/zotero/tools/testTranslators/translatorTester.js +++ b/chrome/content/zotero/tools/testTranslators/translatorTester.js @@ -63,7 +63,7 @@ var Zotero_TranslatorTesters = new function() { try { for(var i=0; i translators[i].label.includes(x))) continue; if (skipTranslators && skipTranslators[translators[i].translatorID]) continue; testers.push(new Zotero_TranslatorTester(translators[i], type)); }; From 23cf6bd0078fb3c148dc10a2493710cb7e9c61eb Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Tue, 22 Aug 2017 02:31:08 +0200 Subject: [PATCH 4/9] Use new HTTP.processDocuments() in translatorTester --- .../tools/testTranslators/translatorTester.js | 63 +++++-------------- 1 file changed, 17 insertions(+), 46 deletions(-) diff --git a/chrome/content/zotero/tools/testTranslators/translatorTester.js b/chrome/content/zotero/tools/testTranslators/translatorTester.js index a710724076..7197134dc9 100644 --- a/chrome/content/zotero/tools/testTranslators/translatorTester.js +++ b/chrome/content/zotero/tools/testTranslators/translatorTester.js @@ -391,54 +391,25 @@ Zotero_TranslatorTester.prototype._runTestsRecursively = function(testDoneCallba /** * Fetches the page for a given test and runs it + * * This function is only applicable in Firefox; it is overridden in translator_global.js in Chrome - * and Safari - * @param {Object} test Test to execute - * @param {Document} doc DOM document to test against - * @param {Function} testDoneCallback A callback to be executed when test is complete + * and Safari. + * + * @param {Object} test - Test to execute + * @param {Function} testDoneCallback - A callback to be executed when test is complete */ -Zotero_TranslatorTester.prototype.fetchPageAndRunTest = function(test, testDoneCallback) { - var timer = Components.classes["@mozilla.org/timer;1"]. - createInstance(Components.interfaces.nsITimer); - timer.initWithCallback({"notify":function() { - try { - if (hiddenBrowser) Zotero.Browser.deleteHiddenBrowser(hiddenBrowser); - } catch(e) {} - }}, TEST_RUN_TIMEOUT, Components.interfaces.nsITimer.TYPE_ONE_SHOT); - - var me = this; - var runTest = function(doc) { - me.runTest(test, doc, function(obj, test, status, message) { - try { - timer.cancel(); - } catch(e) {}; - if(hiddenBrowser) Zotero.Browser.deleteHiddenBrowser(hiddenBrowser); - testDoneCallback(obj, test, status, message); - }); - }; - var hiddenBrowser = Zotero.HTTP.loadDocuments(test.url, - function(doc) { - if(test.defer) { - me._debug(this, "TranslatorTesting: Waiting " - + (Zotero_TranslatorTester.DEFER_DELAY/1000) - + " second(s) for page content to settle" - ); - Zotero.setTimeout(() => runTest(doc), Zotero_TranslatorTester.DEFER_DELAY); - } else { - runTest(doc); - } - }, - null, - function(e) { - testDoneCallback(this, test, "failed", "Translation failed to initialize: "+e); - }, - true - ); - - // No hidden browser returned from translation-server processDocuments() - if (hiddenBrowser) { - hiddenBrowser.docShell.allowMetaRedirects = true; - } +Zotero_TranslatorTester.prototype.fetchPageAndRunTest = function (test, testDoneCallback) { + Zotero.HTTP.processDocuments( + test.url, + (doc) => { + this.runTest(test, doc, function (obj, test, status, message) { + testDoneCallback(obj, test, status, message); + }); + } + ) + .catch(function (e) { + testDoneCallback(this, test, "failed", "Translation failed to initialize: " + e); + }.bind(this)) }; /** From 9209edd081172d1be85ecdadbeb5e320e15999b6 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Tue, 22 Aug 2017 02:32:05 +0200 Subject: [PATCH 5/9] Use object for translate() in translator tests --- .../zotero/tools/testTranslators/translatorTester.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/chrome/content/zotero/tools/testTranslators/translatorTester.js b/chrome/content/zotero/tools/testTranslators/translatorTester.js index 7197134dc9..ea5b3c421f 100644 --- a/chrome/content/zotero/tools/testTranslators/translatorTester.js +++ b/chrome/content/zotero/tools/testTranslators/translatorTester.js @@ -502,7 +502,9 @@ Zotero_TranslatorTester.prototype._runTestTranslate = function(translate, transl } translate.setTranslator(this.translator); - translate.translate(false); + translate.translate({ + libraryID: false + }); }; /** @@ -599,7 +601,9 @@ Zotero_TranslatorTester.prototype.newTest = function(doc, testReadyCallback) { }); translate.setHandler("done", function(obj, returnValue) { me._createTest(obj, multipleMode, returnValue, testReadyCallback) }); translate.capitalizeTitles = false; - translate.translate(false); + translate.translate({ + libraryID: false + }); }; /** From ffcf608de19719b0daff954df5a41aac96b8e55a Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Tue, 22 Aug 2017 02:32:43 +0200 Subject: [PATCH 6/9] Don't show "Running handler" for 'debug' handler during translation --- chrome/content/zotero/xpcom/translation/translate.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/chrome/content/zotero/xpcom/translation/translate.js b/chrome/content/zotero/xpcom/translation/translate.js index 733c992998..082b59212e 100644 --- a/chrome/content/zotero/xpcom/translation/translate.js +++ b/chrome/content/zotero/xpcom/translation/translate.js @@ -1101,7 +1101,9 @@ Zotero.Translate.Base.prototype = { var handlers = this._handlers[type].slice(); for(var i=0, n=handlers.length; i Date: Tue, 22 Aug 2017 02:45:33 +0200 Subject: [PATCH 7/9] Fix translator test mismatches due to 5.0 tag format --- .../tools/testTranslators/translatorTester.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/chrome/content/zotero/tools/testTranslators/translatorTester.js b/chrome/content/zotero/tools/testTranslators/translatorTester.js index ea5b3c421f..6734eee6ac 100644 --- a/chrome/content/zotero/tools/testTranslators/translatorTester.js +++ b/chrome/content/zotero/tools/testTranslators/translatorTester.js @@ -298,10 +298,18 @@ Zotero_TranslatorTester._sanitizeItem = function(item, testItem, keepValidFields // remove fields to be ignored if(!keepValidFields && "accessDate" in item) delete item.accessDate; - - //sort tags, if they're still there - if(item.tags && typeof item.tags === "object" && "sort" in item.tags) { - item.tags = Zotero.Utilities.arrayUnique(item.tags).sort(); + + // Sort tags + if (item.tags && Array.isArray(item.tags)) { + // Normalize tags -- necessary until tests are updated for 5.0 + if (testItem) { + item.tags = Zotero.Translate.Base.prototype._cleanTags(item.tags); + } + item.tags.sort((a, b) => { + if (a.tag < b.tag) return -1; + if (b.tag < a.tag) return 1; + return 0; + }); } return item; From e14b8f94bdbd5a8ee8f6c9df2af704e9cfd6d1c5 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Thu, 5 Oct 2017 03:06:20 -0400 Subject: [PATCH 8/9] Remove babel-plugin-transform-async-to-module-method Everything we support supports async/await now, so stop converting to Bluebird coroutine(). --- .babelrc | 7 - package-lock.json | 2162 ++++++++++++++++++++++++++++++++++++--------- package.json | 1 - 3 files changed, 1723 insertions(+), 447 deletions(-) diff --git a/.babelrc b/.babelrc index 57750d5035..cce453e8df 100644 --- a/.babelrc +++ b/.babelrc @@ -27,13 +27,6 @@ "syntax-object-rest-spread", "transform-react-jsx", "transform-react-display-name", - [ - "transform-async-to-module-method", - { - "module": "resource://zotero/bluebird.js", - "method": "coroutine" - } - ], [ "transform-es2015-modules-commonjs", { diff --git a/package-lock.json b/package-lock.json index e37059e499..8832d7f63d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2,6 +2,7 @@ "name": "zotero", "version": "5.0.0", "lockfileVersion": 1, + "requires": true, "dependencies": { "abbrev": { "version": "1.1.0", @@ -20,12 +21,19 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", "dev": true, + "requires": { + "co": "4.6.0", + "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 + "dev": true, + "requires": { + "jsonify": "0.0.0" + } } } }, @@ -51,7 +59,11 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", - "dev": true + "dev": true, + "requires": { + "arrify": "1.0.1", + "micromatch": "2.3.11" + } }, "aproba": { "version": "1.1.2", @@ -63,13 +75,20 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "dev": true + "dev": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.0" + } }, "arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true + "dev": true, + "requires": { + "arr-flatten": "1.0.3" + } }, "arr-flatten": { "version": "1.0.3", @@ -95,6 +114,16 @@ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.9.0" + } + }, "array-map": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", @@ -111,7 +140,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } }, "array-uniq": { "version": "1.0.3", @@ -146,13 +178,21 @@ "version": "4.9.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz", "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.6", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } }, "assert": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true + "dev": true, + "requires": { + "util": "0.10.3" + } }, "assert-plus": { "version": "0.2.0", @@ -170,7 +210,10 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", - "dev": true + "dev": true, + "requires": { + "acorn": "4.0.13" + } }, "async-each": { "version": "1.0.1", @@ -206,61 +249,85 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.1" + } }, "babel-core": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.25.0.tgz", "integrity": "sha1-fdQrBGPHQunVKW3rPsZ6kyLa1yk=", - "dev": true + "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "babel-generator": "6.25.0", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.17.4", + "convert-source-map": "1.5.0", + "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" + } }, "babel-generator": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.25.0.tgz", "integrity": "sha1-M6GvcNXyiQrrRlpKd5PB32qeqfw=", - "dev": true + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.6", + "trim-right": "1.0.1" + } }, "babel-helper-builder-react-jsx": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.24.1.tgz", "integrity": "sha1-CteRfjPI11HmRtrKTnfMGTd9LLw=", - "dev": true - }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true - }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "esutils": "2.0.2" + } }, "babel-helpers": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-template": "6.25.0" + } }, "babel-messages": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } }, "babel-plugin-syntax-async-generators": { "version": "6.13.0", @@ -310,71 +377,115 @@ "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", "dev": true }, - "babel-plugin-transform-async-to-module-method": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-module-method/-/babel-plugin-transform-async-to-module-method-6.24.1.tgz", - "integrity": "sha1-kQmgiYd5S0EcshOFDOk17C8CnNs=", - "dev": true - }, "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=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.23.0", + "babel-template": "6.25.0", + "babel-types": "6.25.0" + } }, "babel-plugin-transform-flow-strip-types": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-syntax-flow": "6.18.0", + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-react-display-name": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-react-jsx": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", - "dev": true + "dev": true, + "requires": { + "babel-helper-builder-react-jsx": "6.24.1", + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-react-jsx-self": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-react-jsx-source": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.23.0" + } }, "babel-plugin-transform-strict-mode": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-types": "6.25.0" + } }, "babel-preset-flow": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-transform-flow-strip-types": "6.22.0" + } }, "babel-preset-react": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-plugin-transform-react-display-name": "6.25.0", + "babel-plugin-transform-react-jsx": "6.24.1", + "babel-plugin-transform-react-jsx-self": "6.22.0", + "babel-plugin-transform-react-jsx-source": "6.22.0", + "babel-preset-flow": "6.23.0" + } }, "babel-register": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.24.1.tgz", "integrity": "sha1-fhDhOi9xBlvfrVoXh7pFvKbe118=", "dev": true, + "requires": { + "babel-core": "6.25.0", + "babel-runtime": "6.23.0", + "core-js": "2.4.1", + "home-or-tmp": "2.0.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "source-map-support": "0.4.15" + }, "dependencies": { "core-js": { "version": "2.4.1", @@ -389,6 +500,10 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=", "dev": true, + "requires": { + "core-js": "2.4.1", + "regenerator-runtime": "0.10.5" + }, "dependencies": { "core-js": { "version": "2.4.1", @@ -402,19 +517,43 @@ "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", "integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "babel-traverse": "6.25.0", + "babel-types": "6.25.0", + "babylon": "6.17.4", + "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=", - "dev": true + "dev": true, + "requires": { + "babel-code-frame": "6.22.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.23.0", + "babel-types": "6.25.0", + "babylon": "6.17.4", + "debug": "2.6.8", + "globals": "9.18.0", + "invariant": "2.2.2", + "lodash": "4.17.4" + } }, "babel-types": { "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz", "integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.23.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } }, "babylon": { "version": "6.17.4", @@ -439,7 +578,10 @@ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", "dev": true, - "optional": true + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } }, "binary-extensions": { "version": "1.8.0", @@ -451,12 +593,15 @@ "version": "0.0.9", "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3" + } }, "bluebird": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", - "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" }, "bn.js": { "version": "4.11.6", @@ -468,7 +613,10 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3" + } }, "bootstrap-sass": { "version": "3.3.7", @@ -479,13 +627,22 @@ "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } }, "braces": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } }, "brorand": { "version": "1.1.0", @@ -497,13 +654,23 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.2.tgz", "integrity": "sha1-+GzWzvT1MAyOY+B6TVEvZfv/RTE=", - "dev": true + "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", @@ -523,49 +690,135 @@ "version": "14.4.0", "resolved": "https://registry.npmjs.org/browserify/-/browserify-14.4.0.tgz", "integrity": "sha1-CJo0Y69Y0OSNjNQHCz90ZU1avKk=", - "dev": true + "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.6", + "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.0", + "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.4.1", + "querystring-es3": "0.2.1", + "read-only-stream": "2.0.0", + "readable-stream": "2.3.0", + "resolve": "1.3.3", + "shasum": "1.0.2", + "shell-quote": "1.6.1", + "stream-browserify": "2.0.1", + "stream-http": "2.7.2", + "string_decoder": "1.0.2", + "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" + } }, "browserify-aes": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz", "integrity": "sha1-Xncl297x/Vkw1OurSFZ85FHEigo=", - "dev": true + "dev": true, + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.3", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.0", + "inherits": "2.0.3" + } }, "browserify-cipher": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", - "dev": true + "dev": true, + "requires": { + "browserify-aes": "1.0.6", + "browserify-des": "1.0.0", + "evp_bytestokey": "1.0.0" + } }, "browserify-des": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", - "dev": true + "dev": true, + "requires": { + "cipher-base": "1.0.3", + "des.js": "1.0.0", + "inherits": "2.0.3" + } }, "browserify-rsa": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.6", + "randombytes": "2.0.5" + } }, "browserify-sign": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.6", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.0" + } }, "browserify-zlib": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", - "dev": true + "dev": true, + "requires": { + "pako": "0.2.9" + } }, "buffer": { "version": "5.0.6", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.6.tgz", "integrity": "sha1-LqZp9+7Atu2gWwj4tf9mGyhXNYg=", - "dev": true + "dev": true, + "requires": { + "base64-js": "1.2.0", + "ieee754": "1.1.8" + } }, "buffer-xor": { "version": "1.0.3", @@ -601,7 +854,11 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + } }, "caseless": { "version": "0.12.0", @@ -613,19 +870,34 @@ "version": "3.5.0", "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", - "dev": true + "dev": true, + "requires": { + "assertion-error": "1.0.2", + "deep-eql": "0.1.3", + "type-detect": "1.0.0" + } }, "chai-as-promised": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-6.0.0.tgz", "integrity": "sha1-GgKkM6byTa+sY7nJb6FoTbGqjaY=", - "dev": true + "dev": true, + "requires": { + "check-error": "1.0.2" + } }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } }, "check-error": { "version": "1.0.2", @@ -637,19 +909,38 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true + "dev": true, + "requires": { + "anymatch": "1.3.0", + "async-each": "1.0.1", + "fsevents": "1.1.2", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } }, "cipher-base": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.3.tgz", "integrity": "sha1-7qvxlEGc6QDaMBjCB9IS8qbfCgc=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3" + } }, "cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } }, "co": { "version": "4.6.0", @@ -661,7 +952,11 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/co-mocha/-/co-mocha-1.2.0.tgz", "integrity": "sha1-2b41oqLRb0sbDoP2lzQByktmYK8=", - "dev": true + "dev": true, + "requires": { + "co": "4.6.0", + "is-generator": "1.0.3" + } }, "code-point-at": { "version": "1.1.0", @@ -680,6 +975,12 @@ "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", @@ -693,13 +994,19 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } }, "commander": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } }, "concat-map": { "version": "0.0.1", @@ -712,12 +1019,25 @@ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6", + "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=", - "dev": true + "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", + "util-deprecate": "1.0.2" + } }, "string_decoder": { "version": "0.10.31", @@ -731,7 +1051,10 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true + "dev": true, + "requires": { + "date-now": "0.1.4" + } }, "console-control-strings": { "version": "1.1.0", @@ -766,54 +1089,102 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.6", + "elliptic": "6.4.0" + } }, "create-hash": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", - "dev": true + "dev": true, + "requires": { + "cipher-base": "1.0.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "sha.js": "2.4.8" + } }, "create-hmac": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", - "dev": true + "dev": true, + "requires": { + "cipher-base": "1.0.3", + "create-hash": "1.1.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.0", + "sha.js": "2.4.8" + } }, "create-react-class": { "version": "15.6.0", "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.0.tgz", - "integrity": "sha1-q0SEl8JlZuHilBPogyB9V8/nvtQ=" + "integrity": "sha1-q0SEl8JlZuHilBPogyB9V8/nvtQ=", + "requires": { + "fbjs": "0.8.12", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" + } }, "cross-spawn": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "which": "1.2.14" + } }, "cryptiles": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true + "dev": true, + "requires": { + "boom": "2.10.1" + } }, "crypto-browserify": { "version": "3.11.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.0.tgz", "integrity": "sha1-NlKgkGq5sqfgw85mpAjpV6JIVSI=", - "dev": true + "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.12", + "public-encrypt": "4.0.0", + "randombytes": "2.0.5" + } }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -833,7 +1204,10 @@ "version": "2.6.8", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } }, "decamelize": { "version": "1.2.0", @@ -851,6 +1225,9 @@ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", "dev": true, + "requires": { + "type-detect": "0.1.1" + }, "dependencies": { "type-detect": { "version": "0.1.1", @@ -865,6 +1242,16 @@ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" }, + "define-properties": { + "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" + } + }, "defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", @@ -887,25 +1274,42 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", - "dev": true + "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", "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } }, "detect-indent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true + "dev": true, + "requires": { + "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 + "dev": true, + "requires": { + "acorn": "4.0.13", + "defined": "1.0.0" + } }, "diff": { "version": "3.2.0", @@ -917,13 +1321,22 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.6", + "miller-rabin": "4.0.0", + "randombytes": "2.0.5" + } }, "doctrine": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", - "dev": true + "dev": true, + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } }, "domain-browser": { "version": "1.1.7", @@ -935,31 +1348,84 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "2.3.0" + } }, "ecc-jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "dev": true, - "optional": true + "optional": true, + "requires": { + "jsbn": "0.1.1" + } }, "elliptic": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.6", + "brorand": "1.1.0", + "hash.js": "1.1.1", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } }, "encoding": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=" + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "0.4.18" + } }, "error-ex": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "es-abstract": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.9.0.tgz", + "integrity": "sha512-kk3IJoKo7A3pWJc0OV8yZ/VEX2oSUytfekrJiqoxBlKJMFAJVJVpGdHClCCTdv+Fn2zHfpDHHIelMFhZVfef3Q==", + "dev": true, + "requires": { + "es-to-primitive": "1.1.1", + "function-bind": "1.1.1", + "has": "1.0.1", + "is-callable": "1.1.3", + "is-regex": "1.0.4" + }, + "dependencies": { + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + } + } + }, + "es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "dev": true, + "requires": { + "is-callable": "1.1.3", + "is-date-object": "1.0.1", + "is-symbol": "1.0.1" + } }, "es6-promise": { "version": "3.3.1", @@ -973,10 +1439,16 @@ "dev": true }, "eslint-plugin-react": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.1.0.tgz", - "integrity": "sha1-J3cKzzn1/UnNCvQIPOWBBOs5DUw=", - "dev": true + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.4.0.tgz", + "integrity": "sha512-tvjU9u3VqmW2vVuYnE8Qptq+6ji4JltjOjJ9u7VAOxVYkUkyBZWRvNYKbDv5fN+L6wiA+4we9+qQahZ0m63XEA==", + "dev": true, + "requires": { + "doctrine": "2.0.0", + "has": "1.0.1", + "jsx-ast-utils": "2.0.1", + "prop-types": "15.5.10" + } }, "esutils": { "version": "2.0.2", @@ -994,19 +1466,28 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz", "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=", - "dev": true + "dev": true, + "requires": { + "create-hash": "1.1.3" + } }, "expand-brackets": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } }, "expand-range": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true + "dev": true, + "requires": { + "fill-range": "2.2.3" + } }, "extend": { "version": "3.0.1", @@ -1018,7 +1499,10 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } }, "extsprintf": { "version": "1.0.2", @@ -1029,7 +1513,16 @@ "fbjs": { "version": "0.8.12", "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.12.tgz", - "integrity": "sha1-ELXZL3bUVXX9Y6IX1OoCvqL47QQ=" + "integrity": "sha1-ELXZL3bUVXX9Y6IX1OoCvqL47QQ=", + "requires": { + "core-js": "1.2.7", + "isomorphic-fetch": "2.2.1", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "promise": "7.3.1", + "setimmediate": "1.0.5", + "ua-parser-js": "0.7.12" + } }, "filename-regex": { "version": "2.0.1", @@ -1041,13 +1534,24 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.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 + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } }, "floatthead": { "version": "1.4.0", @@ -1057,7 +1561,10 @@ "flux-standard-action": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/flux-standard-action/-/flux-standard-action-0.6.1.tgz", - "integrity": "sha1-bzQhG5SDTqHDzDD056+tPQ+/caI=" + "integrity": "sha1-bzQhG5SDTqHDzDD056+tPQ+/caI=", + "requires": { + "lodash.isplainobject": "3.2.0" + } }, "for-in": { "version": "1.0.2", @@ -1069,6 +1576,15 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "dev": true }, "forever-agent": { @@ -1081,19 +1597,32 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } }, "formatio": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz", "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=", - "dev": true + "dev": true, + "requires": { + "samsam": "1.2.1" + } }, "fs-extra": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "3.0.0", + "universalify": "0.1.0" + } }, "fs.realpath": { "version": "1.0.0", @@ -1107,29 +1636,30 @@ "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", "dev": true, "optional": true, + "requires": { + "nan": "2.6.2", + "node-pre-gyp": "0.6.36" + }, "dependencies": { "abbrev": { "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "ajv": { "version": "4.11.8", "bundled": true, - "dev": true, - "optional": true + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } }, "ansi-regex": { "version": "2.1.1", - "bundled": true, - "dev": true + "bundled": true }, "aproba": { "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "are-we-there-yet": { "version": "1.1.4", @@ -1139,54 +1669,48 @@ }, "asn1": { "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "assert-plus": { "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "asynckit": { "version": "0.4.0", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "aws-sign2": { "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "aws4": { "version": "1.6.0", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "balanced-match": { "version": "0.4.2", - "bundled": true, - "dev": true + "bundled": true }, "bcrypt-pbkdf": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "requires": { + "tweetnacl": "0.14.5" + } }, "block-stream": { "version": "0.0.9", "bundled": true, - "dev": true + "requires": { + "inherits": "2.0.3" + } }, "boom": { "version": "2.10.1", "bundled": true, - "dev": true + "requires": { + "hoek": "2.16.3" + } }, "brace-expansion": { "version": "1.1.7", @@ -1195,8 +1719,7 @@ }, "buffer-shims": { "version": "1.0.0", - "bundled": true, - "dev": true + "bundled": true }, "caseless": { "version": "0.12.0", @@ -1206,52 +1729,48 @@ }, "co": { "version": "4.6.0", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "code-point-at": { "version": "1.1.0", - "bundled": true, - "dev": true + "bundled": true }, "combined-stream": { "version": "1.0.5", "bundled": true, - "dev": true + "requires": { + "delayed-stream": "1.0.0" + } }, "concat-map": { "version": "0.0.1", - "bundled": true, - "dev": true + "bundled": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true, - "dev": true + "bundled": true }, "core-util-is": { "version": "1.0.2", - "bundled": true, - "dev": true + "bundled": true }, "cryptiles": { "version": "2.0.5", "bundled": true, - "dev": true, - "optional": true + "requires": { + "boom": "2.10.1" + } }, "dashdash": { "version": "1.14.1", "bundled": true, - "dev": true, - "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true + "bundled": true } } }, @@ -1269,20 +1788,18 @@ }, "delayed-stream": { "version": "1.0.0", - "bundled": true, - "dev": true + "bundled": true }, "delegates": { "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "ecc-jsbn": { "version": "0.1.1", "bundled": true, - "dev": true, - "optional": true + "requires": { + "jsbn": "0.1.1" + } }, "extend": { "version": "3.0.1", @@ -1292,14 +1809,11 @@ }, "extsprintf": { "version": "1.0.2", - "bundled": true, - "dev": true + "bundled": true }, "forever-agent": { "version": "0.6.1", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "form-data": { "version": "2.1.4", @@ -1309,8 +1823,7 @@ }, "fs.realpath": { "version": "1.0.0", - "bundled": true, - "dev": true + "bundled": true }, "fstream": { "version": "1.0.11", @@ -1320,8 +1833,11 @@ "fstream-ignore": { "version": "1.0.5", "bundled": true, - "dev": true, - "optional": true + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } }, "gauge": { "version": "2.7.4", @@ -1350,14 +1866,11 @@ }, "graceful-fs": { "version": "4.1.11", - "bundled": true, - "dev": true + "bundled": true }, "har-schema": { "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "har-validator": { "version": "4.2.1", @@ -1367,100 +1880,95 @@ }, "has-unicode": { "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "hawk": { "version": "3.1.3", "bundled": true, - "dev": true, - "optional": true + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } }, "hoek": { "version": "2.16.3", - "bundled": true, - "dev": true + "bundled": true }, "http-signature": { "version": "1.1.1", "bundled": true, - "dev": true, - "optional": true + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } }, "inflight": { "version": "1.0.6", "bundled": true, - "dev": true + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } }, "inherits": { "version": "2.0.3", - "bundled": true, - "dev": true + "bundled": true }, "ini": { "version": "1.3.4", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, - "dev": true + "requires": { + "number-is-nan": "1.0.1" + } }, "is-typedarray": { "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "isarray": { "version": "1.0.0", - "bundled": true, - "dev": true + "bundled": true }, "isstream": { "version": "0.1.2", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "jodid25519": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "requires": { + "jsbn": "0.1.1" + } }, "jsbn": { "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "json-schema": { "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "json-stable-stringify": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "requires": { + "jsonify": "0.0.0" + } }, "json-stringify-safe": { "version": "5.0.1", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "jsonify": { "version": "0.0.0", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "jsprim": { "version": "1.4.0", @@ -1493,13 +2001,14 @@ }, "minimist": { "version": "0.0.8", - "bundled": true, - "dev": true + "bundled": true }, "mkdirp": { "version": "0.5.1", "bundled": true, - "dev": true + "requires": { + "minimist": "0.0.8" + } }, "ms": { "version": "2.0.0", @@ -1527,65 +2036,54 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true, - "dev": true + "bundled": true }, "oauth-sign": { "version": "0.8.2", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "object-assign": { "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "once": { "version": "1.4.0", "bundled": true, - "dev": true + "requires": { + "wrappy": "1.0.2" + } }, "os-homedir": { "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "os-tmpdir": { "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "osenv": { "version": "0.1.4", "bundled": true, - "dev": true, - "optional": true + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } }, "path-is-absolute": { "version": "1.0.1", - "bundled": true, - "dev": true + "bundled": true }, "performance-now": { "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "process-nextick-args": { "version": "1.0.7", - "bundled": true, - "dev": true + "bundled": true }, "punycode": { "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "qs": { "version": "6.4.0", @@ -1625,32 +2123,26 @@ }, "safe-buffer": { "version": "5.0.1", - "bundled": true, - "dev": true + "bundled": true }, "semver": { "version": "5.3.0", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "set-blocking": { "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "signal-exit": { "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "sntp": { "version": "1.0.9", "bundled": true, - "dev": true, - "optional": true + "requires": { + "hoek": "2.16.3" + } }, "sshpk": { "version": "1.13.0", @@ -1674,29 +2166,35 @@ "string-width": { "version": "1.0.2", "bundled": true, - "dev": true + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } }, "stringstream": { "version": "0.0.5", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "strip-ansi": { "version": "3.0.1", "bundled": true, - "dev": true + "requires": { + "ansi-regex": "2.1.1" + } }, "strip-json-comments": { "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "tar": { "version": "2.2.1", "bundled": true, - "dev": true + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } }, "tar-pack": { "version": "3.4.0", @@ -1707,8 +2205,9 @@ "tough-cookie": { "version": "2.3.2", "bundled": true, - "dev": true, - "optional": true + "requires": { + "punycode": "1.4.1" + } }, "tunnel-agent": { "version": "0.6.0", @@ -1718,32 +2217,26 @@ }, "tweetnacl": { "version": "0.14.5", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "uid-number": { "version": "0.0.6", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "util-deprecate": { "version": "1.0.2", - "bundled": true, - "dev": true + "bundled": true }, "uuid": { "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true + "bundled": true }, "verror": { "version": "1.3.6", "bundled": true, - "dev": true, - "optional": true + "requires": { + "extsprintf": "1.0.2" + } }, "wide-align": { "version": "1.1.2", @@ -1753,8 +2246,7 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true, - "dev": true + "bundled": true } } }, @@ -1762,7 +2254,13 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } }, "function-bind": { "version": "1.1.0", @@ -1774,13 +2272,26 @@ "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true + "dev": true, + "requires": { + "aproba": "1.1.2", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } }, "gaze": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", - "dev": true + "dev": true, + "requires": { + "globule": "1.2.0" + } }, "get-caller-file": { "version": "1.0.2", @@ -1799,6 +2310,9 @@ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -1812,19 +2326,34 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true + "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" + } }, "glob-base": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } }, "glob-parent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true + "dev": true, + "requires": { + "is-glob": "2.0.1" + } }, "globals": { "version": "9.18.0", @@ -1836,13 +2365,25 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true + "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" + } }, "globule": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", - "dev": true + "dev": true, + "requires": { + "glob": "7.1.2", + "lodash": "4.17.4", + "minimatch": "3.0.4" + } }, "graceful-fs": { "version": "4.1.11", @@ -1872,19 +2413,29 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "dev": true + "dev": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } }, "has": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true + "dev": true, + "requires": { + "function-bind": "1.1.0" + } }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "has-flag": { "version": "1.0.0", @@ -1902,30 +2453,54 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3" + } }, "hash.js": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.1.tgz", "integrity": "sha512-I2TYCUjYQMmqmRMCp6jKMC5bvdXxGIZ/heITRR/0F1u0OP920ImEj/cXt3WgcTKBnNYGn7enxUzdai3db829JA==", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } }, "hawk": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } }, "history": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/history/-/history-2.1.2.tgz", - "integrity": "sha1-SqLeiXoOSGfkU5hDvm7Nsphr/ew=" + "integrity": "sha1-SqLeiXoOSGfkU5hDvm7Nsphr/ew=", + "requires": { + "deep-equal": "1.0.1", + "invariant": "2.2.2", + "query-string": "3.0.3", + "warning": "2.1.0" + } }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true + "dev": true, + "requires": { + "hash.js": "1.1.1", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } }, "hoek": { "version": "2.16.3", @@ -1942,7 +2517,11 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } }, "hosted-git-info": { "version": "2.4.2", @@ -1960,7 +2539,12 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.1" + } }, "https-browserify": { "version": "1.0.0", @@ -1989,7 +2573,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true + "dev": true, + "requires": { + "repeating": "2.0.1" + } }, "indexof": { "version": "0.0.1", @@ -2001,7 +2588,11 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } }, "inherits": { "version": "2.0.3", @@ -2013,18 +2604,34 @@ "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 + "dev": true, + "requires": { + "source-map": "0.5.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 + "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" + } }, "invariant": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=" + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "requires": { + "loose-envify": "1.3.1" + } }, "invert-kv": { "version": "1.0.0", @@ -2042,7 +2649,10 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true + "dev": true, + "requires": { + "binary-extensions": "1.8.0" + } }, "is-buffer": { "version": "1.1.5", @@ -2054,6 +2664,21 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-callable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", + "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", + "dev": true + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "dev": true }, "is-dotfile": { @@ -2066,7 +2691,10 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } }, "is-extendable": { "version": "0.1.1", @@ -2084,13 +2712,19 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true + "dev": true, + "requires": { + "number-is-nan": "1.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 + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } }, "is-generator": { "version": "1.0.3", @@ -2102,13 +2736,19 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } }, "is-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true + "dev": true, + "requires": { + "kind-of": "3.2.2" + } }, "is-posix-bracket": { "version": "0.1.1", @@ -2122,11 +2762,26 @@ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", "dev": true }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "1.0.1" + } + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, + "is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -2155,12 +2810,19 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true + "dev": true, + "requires": { + "isarray": "1.0.0" + } }, "isomorphic-fetch": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=" + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "1.7.1", + "whatwg-fetch": "2.0.3" + } }, "isstream": { "version": "0.1.2", @@ -2207,7 +2869,10 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", - "dev": true + "dev": true, + "requires": { + "jsonify": "0.0.0" + } }, "json-stringify-safe": { "version": "5.0.1", @@ -2231,7 +2896,10 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.0.tgz", "integrity": "sha1-kufHRE5f/V+jLmqa6LhQNN+DR9A=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } }, "jsonify": { "version": "0.0.0", @@ -2249,13 +2917,23 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", - "dev": true + "dev": true, + "requires": { + "jsonparse": "1.3.1", + "through": "2.3.8" + } }, "jsprim": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -2266,22 +2944,33 @@ } }, "jsx-ast-utils": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", - "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", + "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", + "dev": true, + "requires": { + "array-includes": "3.0.3" + } }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } }, "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", @@ -2295,18 +2984,31 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } }, "lexical-scope": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", - "dev": true + "dev": true, + "requires": { + "astw": "2.2.0" + } }, "libzotero": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/libzotero/-/libzotero-0.1.13.tgz", "integrity": "sha1-QQhFtsHa9jmSZwIfnLw0t8SBuzI=", + "requires": { + "es6-promise": "3.3.1", + "node-fetch": "1.7.1", + "spark-md5": "2.0.2", + "striptags": "2.2.1", + "whatwg-fetch": "1.1.1" + }, "dependencies": { "whatwg-fetch": { "version": "1.1.1", @@ -2319,7 +3021,14 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true + "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" + } }, "lodash": { "version": "4.17.4", @@ -2335,7 +3044,11 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash.keys": "3.1.2" + } }, "lodash._basecopy": { "version": "3.0.1", @@ -2382,7 +3095,12 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", - "dev": true + "dev": true, + "requires": { + "lodash._baseassign": "3.2.0", + "lodash._basecreate": "3.0.3", + "lodash._isiterateecall": "3.0.9" + } }, "lodash.isarguments": { "version": "3.1.0", @@ -2397,18 +3115,32 @@ "lodash.isplainobject": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-3.2.0.tgz", - "integrity": "sha1-moI4rhayAEMpYM1zRlEtASP79MU=" + "integrity": "sha1-moI4rhayAEMpYM1zRlEtASP79MU=", + "requires": { + "lodash._basefor": "3.0.3", + "lodash.isarguments": "3.1.0", + "lodash.keysin": "3.0.8" + } }, "lodash.keys": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } }, "lodash.keysin": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/lodash.keysin/-/lodash.keysin-3.0.8.tgz", - "integrity": "sha1-IsRJPrvtsUJ5YqVLRFssinZ/tH8=" + "integrity": "sha1-IsRJPrvtsUJ5YqVLRFssinZ/tH8=", + "requires": { + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } }, "lodash.memoize": { "version": "3.0.4", @@ -2431,19 +3163,30 @@ "loose-envify": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=" + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "requires": { + "js-tokens": "3.0.1" + } }, "loud-rejection": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } }, "lru-cache": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "dev": true + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } }, "map-obj": { "version": "1.0.1", @@ -2456,6 +3199,18 @@ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.3.8", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + }, "dependencies": { "minimist": { "version": "1.2.0", @@ -2469,13 +3224,32 @@ "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.3" + } }, "miller-rabin": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.6", + "brorand": "1.1.0" + } }, "mime-db": { "version": "1.27.0", @@ -2487,7 +3261,10 @@ "version": "2.1.15", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", - "dev": true + "dev": true, + "requires": { + "mime-db": "1.27.0" + } }, "minimalistic-assert": { "version": "1.0.0", @@ -2505,7 +3282,10 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } }, "minimist": { "version": "0.0.8", @@ -2517,25 +3297,52 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } }, "mocha": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.4.2.tgz", "integrity": "sha1-0O9NMyEm2/GNDWQMmzgt1IvpdZQ=", "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.9.0", + "debug": "2.6.0", + "diff": "3.2.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.1", + "growl": "1.9.2", + "json3": "3.3.2", + "lodash.create": "3.1.1", + "mkdirp": "0.5.1", + "supports-color": "3.1.2" + }, "dependencies": { "debug": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.0.tgz", "integrity": "sha1-vFlryr52F/Edn6FTYe3tVgi4SZs=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.2" + } }, "glob": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", - "dev": true + "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" + } }, "ms": { "version": "0.7.2", @@ -2547,7 +3354,10 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", - "dev": true + "dev": true, + "requires": { + "has-flag": "1.0.0" + } } } }, @@ -2555,7 +3365,24 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", - "dev": true + "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.0", + "resolve": "1.3.3", + "stream-combiner2": "1.1.1", + "subarg": "1.0.0", + "through2": "2.0.3", + "xtend": "4.0.1" + } }, "ms": { "version": "2.0.0", @@ -2567,7 +3394,13 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", - "dev": true + "dev": true, + "requires": { + "array-differ": "1.0.0", + "array-union": "1.0.2", + "arrify": "1.0.1", + "minimatch": "3.0.4" + } }, "nan": { "version": "2.6.2", @@ -2584,43 +3417,100 @@ "node-fetch": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.1.tgz", - "integrity": "sha512-j8XsFGCLw79vWXkZtMSmmLaOk9z5SQ9bV/tkbZVCqvgwzrjAGq66igobLofHtF63NvMTp2WjytpsNTGKa+XRIQ==" + "integrity": "sha512-j8XsFGCLw79vWXkZtMSmmLaOk9z5SQ9bV/tkbZVCqvgwzrjAGq66igobLofHtF63NvMTp2WjytpsNTGKa+XRIQ==", + "requires": { + "encoding": "0.1.12", + "is-stream": "1.1.0" + } }, "node-gyp": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", - "dev": true + "dev": true, + "requires": { + "fstream": "1.0.11", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.1.0", + "osenv": "0.1.4", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "which": "1.2.14" + } }, "node-sass": { "version": "4.5.3", "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.5.3.tgz", "integrity": "sha1-0JydEXlkEjnRuX/8YjH9zsU+FWg=", - "dev": true + "dev": true, + "requires": { + "async-foreach": "0.1.3", + "chalk": "1.1.3", + "cross-spawn": "3.0.1", + "gaze": "1.1.2", + "get-stdin": "4.0.1", + "glob": "7.1.2", + "in-publish": "2.0.0", + "lodash.assign": "4.2.0", + "lodash.clonedeep": "4.5.0", + "lodash.mergewith": "4.6.0", + "meow": "3.7.0", + "mkdirp": "0.5.1", + "nan": "2.6.2", + "node-gyp": "3.6.2", + "npmlog": "4.1.0", + "request": "2.81.0", + "sass-graph": "2.2.4", + "stdout-stream": "1.4.0" + } }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true + "dev": true, + "requires": { + "abbrev": "1.1.0" + } }, "normalize-package-data": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.8.tgz", "integrity": "sha1-2Bntoqne29H/pWPqQHHZNngilbs=", - "dev": true + "dev": true, + "requires": { + "hosted-git-info": "2.4.2", + "is-builtin-module": "1.0.0", + "semver": "5.3.0", + "validate-npm-package-license": "3.0.1" + } }, "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 + "dev": true, + "requires": { + "remove-trailing-separator": "1.0.2" + } }, "npmlog": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz", "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==", - "dev": true + "dev": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } }, "number-is-nan": { "version": "1.0.1", @@ -2639,17 +3529,30 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, + "object-keys": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "dev": true + }, "object.omit": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true + "dev": true, + "requires": { + "wrappy": "1.0.2" + } }, "os-browserify": { "version": "0.1.2", @@ -2667,7 +3570,10 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true + "dev": true, + "requires": { + "lcid": "1.0.0" + } }, "os-tmpdir": { "version": "1.0.2", @@ -2679,7 +3585,11 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "dev": true + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } }, "pako": { "version": "0.2.9", @@ -2691,25 +3601,44 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", - "dev": true + "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", "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", - "dev": true + "dev": true, + "requires": { + "asn1.js": "4.9.1", + "browserify-aes": "1.0.6", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.0", + "pbkdf2": "3.0.12" + } }, "parse-glob": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true + "dev": true, + "requires": { + "error-ex": "1.3.1" + } }, "path-browserify": { "version": "0.0.0", @@ -2721,7 +3650,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } }, "path-is-absolute": { "version": "1.0.1", @@ -2746,6 +3678,9 @@ "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" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -2759,13 +3694,25 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } }, "pbkdf2": { "version": "3.0.12", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.12.tgz", "integrity": "sha1-vjZ4XFBn6kjYBv+SMojF91C2uKI=", - "dev": true + "dev": true, + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.0", + "sha.js": "2.4.8" + } }, "performance-now": { "version": "0.2.0", @@ -2789,7 +3736,10 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true + "dev": true, + "requires": { + "pinkie": "2.0.4" + } }, "preserve": { "version": "0.2.0", @@ -2818,12 +3768,19 @@ "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==" + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "2.0.5" + } }, "prop-types": { "version": "15.5.10", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.5.10.tgz", - "integrity": "sha1-J5ffwxJhguOpXj37suiT3ddFYVQ=" + "integrity": "sha1-J5ffwxJhguOpXj37suiT3ddFYVQ=", + "requires": { + "fbjs": "0.8.12", + "loose-envify": "1.3.1" + } }, "pseudomap": { "version": "1.0.2", @@ -2835,7 +3792,14 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.6", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "parse-asn1": "5.1.0", + "randombytes": "2.0.5" + } }, "punycode": { "version": "1.4.1", @@ -2852,7 +3816,10 @@ "query-string": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/query-string/-/query-string-3.0.3.tgz", - "integrity": "sha1-ri4UtNBQcdTpuetIc8NbDc1C5jg=" + "integrity": "sha1-ri4UtNBQcdTpuetIc8NbDc1C5jg=", + "requires": { + "strict-uri-encode": "1.1.0" + } }, "querystring": { "version": "0.2.0", @@ -2871,18 +3838,28 @@ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, "dependencies": { "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, + "requires": { + "kind-of": "3.2.2" + }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } } } }, @@ -2890,7 +3867,10 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } } } }, @@ -2898,32 +3878,66 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.1.0" + } }, "react": { "version": "15.6.1", "resolved": "https://registry.npmjs.org/react/-/react-15.6.1.tgz", - "integrity": "sha1-uqhDTsZ4C96ZfNw4C3nNM7ljk98=" + "integrity": "sha1-uqhDTsZ4C96ZfNw4C3nNM7ljk98=", + "requires": { + "create-react-class": "15.6.0", + "fbjs": "0.8.12", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "prop-types": "15.5.10" + } }, "react-dom": { "version": "15.6.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.1.tgz", - "integrity": "sha1-LLDtQZEDjlPCCes6eaI+Kkz5lHA=" + "integrity": "sha1-LLDtQZEDjlPCCes6eaI+Kkz5lHA=", + "requires": { + "fbjs": "0.8.12", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "prop-types": "15.5.10" + } }, "react-redux": { "version": "4.4.8", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-4.4.8.tgz", - "integrity": "sha1-57wd0QDotk6WrIIS2xEyObni4I8=" + "integrity": "sha1-57wd0QDotk6WrIIS2xEyObni4I8=", + "requires": { + "create-react-class": "15.6.0", + "hoist-non-react-statics": "1.2.0", + "invariant": "2.2.2", + "lodash": "4.17.4", + "loose-envify": "1.3.1", + "prop-types": "15.5.10" + } }, "react-router": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/react-router/-/react-router-2.8.1.tgz", "integrity": "sha1-c+lJH2zrMW0Pd5gpCBhj43juTtc=", + "requires": { + "history": "2.1.2", + "hoist-non-react-statics": "1.2.0", + "invariant": "2.2.2", + "loose-envify": "1.3.1", + "warning": "3.0.0" + }, "dependencies": { "warning": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=" + "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "requires": { + "loose-envify": "1.3.1" + } } } }, @@ -2931,57 +3945,103 @@ "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 + "dev": true, + "requires": { + "readable-stream": "2.3.0" + } }, "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 + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.3.8", + "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 + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } }, "readable-stream": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.0.tgz", "integrity": "sha512-c7KMXGd4b48nN3OJ1U9qOsn6pXNzf6kLd3kdZCkg2sxAcoiufInqF0XckwEnlrcwuaYwonlNK8GQUIOC/WC7sg==", - "dev": true + "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.0", + "string_decoder": "1.0.2", + "util-deprecate": "1.0.2" + } }, "readdirp": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.0", + "set-immediate-shim": "1.0.1" + } }, "redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } }, "redux": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.0.tgz", - "integrity": "sha512-GHjaOkEQtQnnuLoYPFkRKHIqs1i1tdTlisu/xUHfk2juzCobSy4STxs4Lz5bPkc07Owb6BeGKx/r76c9IVTkOw==" + "integrity": "sha512-GHjaOkEQtQnnuLoYPFkRKHIqs1i1tdTlisu/xUHfk2juzCobSy4STxs4Lz5bPkc07Owb6BeGKx/r76c9IVTkOw==", + "requires": { + "lodash": "4.17.4", + "lodash-es": "4.17.4", + "loose-envify": "1.3.1", + "symbol-observable": "1.0.4" + } }, "redux-logger": { "version": "2.10.2", "resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-2.10.2.tgz", - "integrity": "sha1-PFpfCm8yV3wd6t9mVfJX+CxsOTc=" + "integrity": "sha1-PFpfCm8yV3wd6t9mVfJX+CxsOTc=", + "requires": { + "deep-diff": "0.3.4" + } }, "redux-promise": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/redux-promise/-/redux-promise-0.5.3.tgz", - "integrity": "sha1-6X5snTvzdurLebq+bZBtogES1tg=" + "integrity": "sha1-6X5snTvzdurLebq+bZBtogES1tg=", + "requires": { + "flux-standard-action": "0.6.1" + } }, "redux-router": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/redux-router/-/redux-router-2.1.2.tgz", - "integrity": "sha1-A0ckutCPQbr3VNtNIuLYWK22TxE=" + "integrity": "sha1-A0ckutCPQbr3VNtNIuLYWK22TxE=", + "requires": { + "deep-equal": "1.0.1" + } }, "redux-thunk": { "version": "2.2.0", @@ -2998,7 +4058,11 @@ "version": "0.4.3", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", - "dev": true + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3", + "is-primitive": "2.0.0" + } }, "remove-trailing-separator": { "version": "1.0.2", @@ -3022,13 +4086,40 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true + "dev": true, + "requires": { + "is-finite": "1.0.2" + } }, "request": { "version": "2.81.0", "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dev": true + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.0", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + } }, "require-directory": { "version": "2.1.1", @@ -3046,19 +4137,29 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=", - "dev": true + "dev": true, + "requires": { + "path-parse": "1.0.5" + } }, "rimraf": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", - "dev": true + "dev": true, + "requires": { + "glob": "7.1.2" + } }, "ripemd160": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", - "dev": true + "dev": true, + "requires": { + "hash-base": "2.0.2", + "inherits": "2.0.3" + } }, "safe-buffer": { "version": "5.1.0", @@ -3076,19 +4177,32 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", - "dev": true + "dev": true, + "requires": { + "glob": "7.1.2", + "lodash": "4.17.4", + "scss-tokenizer": "0.2.3", + "yargs": "7.1.0" + } }, "scss-tokenizer": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", "dev": true, + "requires": { + "js-base64": "2.1.9", + "source-map": "0.4.4" + }, "dependencies": { "source-map": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true + "dev": true, + "requires": { + "amdefine": "1.0.1" + } } } }, @@ -3119,19 +4233,32 @@ "version": "2.4.8", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz", "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=", - "dev": true + "dev": true, + "requires": { + "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 + "dev": true, + "requires": { + "json-stable-stringify": "0.0.1", + "sha.js": "2.4.8" + } }, "shell-quote": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true + "dev": true, + "requires": { + "array-filter": "0.0.1", + "array-map": "0.0.0", + "array-reduce": "0.0.0", + "jsonify": "0.0.0" + } }, "signal-exit": { "version": "3.0.2", @@ -3144,6 +4271,16 @@ "resolved": "https://registry.npmjs.org/sinon/-/sinon-2.3.5.tgz", "integrity": "sha1-mi/A/41SbacW8wlTqixl1RiRf2w=", "dev": true, + "requires": { + "diff": "3.2.0", + "formatio": "1.2.0", + "lolex": "1.6.0", + "native-promise-only": "0.8.1", + "path-to-regexp": "1.7.0", + "samsam": "1.2.1", + "text-encoding": "0.6.4", + "type-detect": "4.0.3" + }, "dependencies": { "type-detect": { "version": "4.0.3", @@ -3163,7 +4300,10 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3" + } }, "source-map": { "version": "0.5.6", @@ -3175,7 +4315,10 @@ "version": "0.4.15", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz", "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=", - "dev": true + "dev": true, + "requires": { + "source-map": "0.5.6" + } }, "spark-md5": { "version": "2.0.2", @@ -3186,7 +4329,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "dev": true + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } }, "spdx-expression-parse": { "version": "1.0.4", @@ -3205,6 +4351,16 @@ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -3218,31 +4374,53 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "2.3.0" + } }, "stream-browserify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.0" + } }, "stream-combiner2": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", - "dev": true + "dev": true, + "requires": { + "duplexer2": "0.1.4", + "readable-stream": "2.3.0" + } }, "stream-http": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", - "dev": true + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.0", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } }, "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 + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.0" + } }, "strict-uri-encode": { "version": "1.1.0", @@ -3254,6 +4432,9 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", "dev": true, + "requires": { + "safe-buffer": "5.0.1" + }, "dependencies": { "safe-buffer": { "version": "5.0.1", @@ -3267,7 +4448,12 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } }, "stringstream": { "version": "0.0.5", @@ -3279,19 +4465,28 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.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 + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } }, "strip-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } }, "striptags": { "version": "2.2.1", @@ -3303,6 +4498,9 @@ "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", @@ -3327,13 +4525,21 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", - "dev": true + "dev": true, + "requires": { + "acorn": "4.0.13" + } }, "tar": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } }, "text-encoding": { "version": "0.6.4", @@ -3351,13 +4557,20 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "2.3.0", + "xtend": "4.0.1" + } }, "timers-browserify": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", - "dev": true + "dev": true, + "requires": { + "process": "0.11.10" + } }, "to-arraybuffer": { "version": "1.0.1", @@ -3375,7 +4588,10 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", - "dev": true + "dev": true, + "requires": { + "punycode": "1.4.1" + } }, "trim-newlines": { "version": "1.0.0", @@ -3399,7 +4615,10 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.1.0" + } }, "tweetnacl": { "version": "0.14.5", @@ -3442,6 +4661,10 @@ "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" + }, "dependencies": { "punycode": { "version": "1.3.2", @@ -3456,6 +4679,9 @@ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, + "requires": { + "inherits": "2.0.1" + }, "dependencies": { "inherits": { "version": "2.0.1", @@ -3481,19 +4707,29 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "dev": true + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } }, "verror": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", - "dev": true + "dev": true, + "requires": { + "extsprintf": "1.0.2" + } }, "vm-browserify": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true + "dev": true, + "requires": { + "indexof": "0.0.1" + } }, "w3c-xmlhttprequest": { "version": "2.1.2", @@ -3503,7 +4739,10 @@ "warning": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/warning/-/warning-2.1.0.tgz", - "integrity": "sha1-ISINnGOvx3qMkhEeARr3Bc4MaQE=" + "integrity": "sha1-ISINnGOvx3qMkhEeARr3Bc4MaQE=", + "requires": { + "loose-envify": "1.3.1" + } }, "whatwg-fetch": { "version": "2.0.3", @@ -3514,7 +4753,10 @@ "version": "1.2.14", "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", - "dev": true + "dev": true, + "requires": { + "isexe": "2.0.0" + } }, "which-module": { "version": "1.0.0", @@ -3526,13 +4768,20 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2" + } }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + } }, "wrappy": { "version": "1.0.2", @@ -3563,6 +4812,21 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", "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": "5.0.0" + }, "dependencies": { "camelcase": { "version": "3.0.0", @@ -3577,6 +4841,9 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", "dev": true, + "requires": { + "camelcase": "3.0.0" + }, "dependencies": { "camelcase": { "version": "3.0.0", @@ -3589,7 +4856,24 @@ "zotero-web-library": { "version": "0.9.4-alpha", "resolved": "https://registry.npmjs.org/zotero-web-library/-/zotero-web-library-0.9.4-alpha.tgz", - "integrity": "sha1-AbLMXXqmsDEbhNZeLsc6llBdqS4=" + "integrity": "sha1-AbLMXXqmsDEbhNZeLsc6llBdqS4=", + "requires": { + "bootstrap-sass": "3.3.7", + "floatthead": "1.4.0", + "history": "2.1.2", + "jquery": "2.2.4", + "libzotero": "0.1.13", + "react": "15.6.1", + "react-dom": "15.6.1", + "react-redux": "4.4.8", + "react-router": "2.8.1", + "redux": "3.7.0", + "redux-logger": "2.10.2", + "redux-promise": "0.5.3", + "redux-router": "2.1.2", + "redux-thunk": "2.2.0", + "w3c-xmlhttprequest": "2.1.2" + } } } } diff --git a/package.json b/package.json index 3e13c7aa3e..10bd3ccaf5 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,6 @@ "babel-plugin-syntax-flow": "^6.13.0", "babel-plugin-syntax-jsx": "^6.13.0", "babel-plugin-syntax-object-rest-spread": "^6.13.0", - "babel-plugin-transform-async-to-module-method": "^6.16.0", "babel-plugin-transform-es2015-modules-commonjs": "^6.18.0", "babel-preset-react": "^6.16.0", "browserify": "^14.3.0", From 492e7917b6fe88369c4a7c5b2b91ad5f9a2d9bd0 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Thu, 5 Oct 2017 16:58:19 -0400 Subject: [PATCH 9/9] Fix breakage in the connector from 365e58249dc --- chrome/content/zotero/xpcom/http.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/chrome/content/zotero/xpcom/http.js b/chrome/content/zotero/xpcom/http.js index a22b87542c..941508bb81 100644 --- a/chrome/content/zotero/xpcom/http.js +++ b/chrome/content/zotero/xpcom/http.js @@ -65,7 +65,10 @@ Zotero.HTTP = new function() { this[i] = options[i]; } }; - this.SecurityException.prototype = Object.create(Zotero.Error.prototype); + this.SecurityException.prototype = Object.create( + // Zotero.Error not available in the connector + Zotero.Error ? Zotero.Error.prototype : Error.prototype + ); this.promise = function () {