From a1f4b22bec08fb3a891762170458852b21d75b2c Mon Sep 17 00:00:00 2001 From: ste Date: Mon, 31 Jul 2017 14:00:34 +0100 Subject: [PATCH 01/28] GPII-2212: Added restart/shutdown applications --- .../WindowsUtilities/WindowsUtilities.js | 107 ++++++ .../processHandling/processHandling.js | 253 +++++++++++- .../processHandling/test/test-window.c | 26 +- .../test/testProcessHandling.js | 362 ++++++++++++++++++ 4 files changed, 739 insertions(+), 9 deletions(-) diff --git a/gpii/node_modules/WindowsUtilities/WindowsUtilities.js b/gpii/node_modules/WindowsUtilities/WindowsUtilities.js index 72f56072d..7635ea079 100644 --- a/gpii/node_modules/WindowsUtilities/WindowsUtilities.js +++ b/gpii/node_modules/WindowsUtilities/WindowsUtilities.js @@ -104,6 +104,15 @@ windows.kernel32 = ffi.Library("kernel32", { // https://msdn.microsoft.com/en-us/library/windows/desktop/ms684139.aspx "IsWow64Process": [ t.BOOL, [t.INT, t.PBOOL ] + ], + // https://msdn.microsoft.com/library/ms683223 + "GetProcessTimes": [ + t.BOOL, [ t.HANDLE, "void*", "void*", "void*", "void*" ] + ], + // https://msdn.microsoft.com/library/aa373344 + "GetApplicationRestartSettings": [ + //t.HANDLE, [ t.HANDLE, "char*", t.LPDWORD, t.LPDWORD ] + t.HANDLE, [ t.HANDLE, t.HANDLE, t.LPDWORD, t.HANDLE] ] }); @@ -119,6 +128,48 @@ windows.user32 = ffi.Library("user32", { // https://msdn.microsoft.com/library/windows/desktop/ms644944 "PostMessageW": [ t.BOOL, [t.HANDLE, t.UINT, t.UINT, t.HANDLE ] + ], + // https://msdn.microsoft.com/library/ms633499 + "FindWindowW": [ + t.HANDLE, ["char*", "char*" ] + ] +}); + + +// https://msdn.microsoft.com/library/ms724284 +windows.FILETIME = new Struct([ + [t.DWORD, "dwLowDateTime"], + [t.DWORD, "dwHighDateTime"] +]); + +// https://msdn.microsoft.com/library/aa373677 +windows.RM_UNIQUE_PROCESS = new Struct([ + [t.DWORD, "dwProcessId"], + [windows.FILETIME, "ProcessStartTime"] +]); +windows.RM_UNIQUE_PROCESSES = arrayType(windows.RM_UNIQUE_PROCESS); + +// Restart Manager API: https://msdn.microsoft.com/library/aa373524 +windows.restartManager = ffi.Library("rstrtmgr", { + // https://msdn.microsoft.com/library/aa373668 + "RmStartSession": [ + t.DWORD, [ t.LPDWORD, t.DWORD, "char*" ] + ], + // https://msdn.microsoft.com/library/aa373663 + "RmRegisterResources": [ + t.DWORD, [ t.DWORD, t.UINT, "char*", t.UINT, windows.RM_UNIQUE_PROCESSES, t.UINT, "void*" ] + ], + // https://msdn.microsoft.com/library/aa373665 + "RmRestart": [ + t.DWORD, [ t.DWORD, t.DWORD, "void*" ] + ], + // https://msdn.microsoft.com/library/aa373667 + "RmShutdown": [ + t.DWORD, [ t.DWORD, t.ULONG, "void*" ] + ], + // https://msdn.microsoft.com/library/aa373659 + "RmEndSession": [ + t.DWORD, [ t.DWORD ] ] }); @@ -156,6 +207,8 @@ windows.API_constants = { // https://msdn.microsoft.com/en-us/library/windows/desktop/ms684880%28v=vs.85%29.aspx PROCESS_TERMINATE: 0x0001, + PROCESS_QUERY_INFORMATION: 0x0400, + PROCESS_VM_READ: 0x0010, // http://stackoverflow.com/questions/23452271/is-max-path-always-same-size-even-if-unicode-macro-is-defined MAX_PATH: 260, @@ -167,6 +220,11 @@ windows.API_constants = { TRUE: 1, // https://msdn.microsoft.com/library/windows/desktop/ms632641 WM_QUIT: 0x12, + // https://msdn.microsoft.com/library/aa376890 + WM_QUERYENDSESSION: 0x11, + ENDSESSION_CLOSEAPP: 1, + // https://msdn.microsoft.com/library/aa376889 + WM_ENDSESSION: 0x16, // The AccessibilityTemp values; https://msdn.microsoft.com/library/windows/desktop/bb879984.aspx disableAT: 2, @@ -210,6 +268,18 @@ windows.PROCESSENTRY32 = new Struct([ [arrayType("char", c.MAX_PATH), "szExeFile"] ]); +// // https://msdn.microsoft.com/library/ms724284 +// windows.FILETIME = new Struct([ +// [t.DWORD, "dwLowDateTime"], +// [t.DWORD, "dwHighDateTime"] +// ]); +// +// // windows.RM_UNIQUE_PROCESS = new Struct([ +// [t.DWORD, "dwProcessId"], +// [windows.FILETIME, "ProcessStartTime"] +// ]); + + // http://msdn.microsoft.com/en-us/library/windows/desktop/dd318112(v=vs.85).aspx windows.HighContrast = new Struct({ "cbSize": "uint32", @@ -532,6 +602,10 @@ windows.createEmptyStructure = function (structName) { return struct; }; +windows.createStructArray = function (itemType, itemCount) { + return new (arrayType(itemType))(itemCount); +}; + /** * Takes an array of flag names, applies binary OR among them and returns the result. * Used to supply the "dwFlags" argument of some structures. @@ -669,6 +743,39 @@ windows.enumerateWindows = function (callback) { gpii.windows.user32.EnumWindows(proc, 0); }; +/** + * Get the process ID that owns the given window. + * + * @param hwnd {Number} The window handle. + * @return {Number} The process ID. + */ +windows.getWindowProcess = function (hwnd) { + var pid = null; + if (hwnd) { + var buf = ref.alloc(windows.types.DWORD); + windows.user32.GetWindowThreadProcessId(hwnd, buf); + pid = buf.deref(); + } + + return pid; +}; + +/** + * Posts a message to one or more windows (doesn't wait for the response). + * + * See PostMessage (https://msdn.microsoft.com/library/ms644944). + * + * @param hwnd {Number|Number[]} The recipient window handle(s). + * @param msg {Number} The message to post. + * @param wParam {Number} Message specific data. + * @param lParam {Number} Message specific data. + */ +windows.postMessage = function (hwnd, msg, wParam, lParam) { + fluid.each(fluid.makeArray(hwnd), function (w) { + windows.user32.PostMessageW(w, msg, wParam, lParam); + }); +}; + /** * Determines whether this process is running under WoW64. That is, 32-bit node on 64-bit Windows. * diff --git a/gpii/node_modules/processHandling/processHandling.js b/gpii/node_modules/processHandling/processHandling.js index b8fa6a5bc..9c87d5390 100644 --- a/gpii/node_modules/processHandling/processHandling.js +++ b/gpii/node_modules/processHandling/processHandling.js @@ -54,7 +54,7 @@ gpii.windows.killProcessByName = function (filename) { * The CreateToolhelp32Snapshot Windows API call captures the running processes, and the Process32First/Next * functions are used to enumerate them. * - * @param filename The exe file name to search for. + * @param filename The exe file name to search for. null to match all. * @param all {boolean?} Set to true to return an array containing all matching processes. * @returns {?number|number[]} The Process ID of the matching processes, otherwise null. */ @@ -68,7 +68,7 @@ gpii.windows.findProcessByName = function (filename, all) { } var matches = []; - var filenameLower = filename.toLowerCase(); + var filenameLower = filename ? filename.toLowerCase() : ""; try { // Create the structure for the return parameter of Process32First/Next. @@ -79,7 +79,7 @@ gpii.windows.findProcessByName = function (filename, all) { var hRes = windows.kernel32.Process32First(hSnapShot, pEntry.ref()); while (hRes) { var buf = new Buffer(pEntry.szExeFile); - var processName = ref.readCString(buf, 0); + var processName = filename ? ref.readCString(buf, 0) : ""; if (processName.toLowerCase() === filenameLower) { if (all) { @@ -274,6 +274,253 @@ gpii.windows.closeProcessByName = function (filename, options) { return promiseTogo; }; +/** + * Gets the windows that each process owns. + * + * @param pids {Number[]} [Optional] Only return these processes. + * @return {Object} Hash of processes and the array of owned windows. + */ +gpii.windows.getProcessWindows = function (pids) { + var processWindows = {}; + + windows.enumerateWindows(function (hwnd) { + var pid = windows.getWindowProcess(hwnd); + if (!pids || pids.indexOf(pid) > -1) { + if (processWindows[pid]) { + processWindows[pid].push(hwnd); + } else { + processWindows[pid] = [hwnd]; + } + } + }); + return processWindows; +}; + +/** + * Gets an array of processes that can be restarted using the Restart Manager API. + * + * @param pids {Number} [Optional] A list of pids to check against (default is all processes). + */ +gpii.windows.getRestartableProcesses = function (pids) { + pids = pids || windows.findProcessByName(null, true); + + return fluid.transform(pids, function (pid) { + + var hProcess = gpii.windows.kernel32.OpenProcess( + windows.API_constants.PROCESS_VM_READ | windows.API_constants.PROCESS_QUERY_INFORMATION, 0, pid); + + var restartable; + if (hProcess) { + var chSize = ref.alloc(windows.types.DWORD); + chSize.fill(0); + restartable = !windows.kernel32.GetApplicationRestartSettings(hProcess, 0, chSize, 0); + } + + var process = null; + if (restartable) { + // Get the create time of each process. The pid and process start time is used to uniquely identify a process + // (considering pid re-use). + var creation = new gpii.windows.FILETIME(), + exit = new gpii.windows.FILETIME(), + kernel = new gpii.windows.FILETIME(), + user = new gpii.windows.FILETIME(); + + var success = windows.kernel32.GetProcessTimes( + hProcess, creation.ref(), exit.ref(), kernel.ref(), user.ref()); + process = success && {pid: pid, time: creation}; + } + + return process; + + }).filter(fluid.identity); +}; + +/** + * Restart restartable processes. + * + * A process is deemed as restartable if it's explicitly stated it's restartable, by calling RegisterApplicationRestart + * (https://msdn.microsoft.com/library/aa373347). This check is performed in getRestartableProcesses. + * + * @param pids {Number[]} [Optional] The processes to try to restart. Default is all. + * @param options {Object} [Optional] + * @param options.updatePids {Boolean} If true, remove elements from the pids argument that will be restarted. + * @param options.shutdownOnly {Boolean} True to only shutdown and don't restart (applications may not expect this). + * @param options.sessionId {Number} If not undefined, this will be set to the Restart Manager session ID upon return. + * @return {Promise} A promise that will resolve when it's done. + */ +gpii.windows.restartProcesses = function (pids, options) { + options = options || {}; + var updatePids = pids && options.updatePids; + pids = pids || windows.findProcessByName(null, true); + + // Only interested in the processes that can be restarted, otherwise RmShutdown will pause for 30 seconds then kill + // them abruptly. + var restartableProcesses = gpii.windows.getRestartableProcesses(pids); + + // Put them into a RM_UNIQUE_PROCESS array. + var processArray = new windows.RM_UNIQUE_PROCESSES(restartableProcesses.length); + var index = 0; + fluid.each(restartableProcesses, function (process) { + processArray[index].dwProcessId = process.pid; + processArray[index].ProcessStartTime = process.time; + index++; + + if (updatePids) { + var n = pids.indexOf(process.pid); + if (n > -1) { + pids.splice(n, 1); + } + } + }); + + var promise = fluid.promise(); + var ret; + var rm = windows.restartManager; + + // RestartManager.h: + var CCH_RM_SESSION_KEY = 16 * 2 + 1; // sizeof(GUID) * 2 + 1 + + // Wrapper to reject if there's an error. + var reject = function (func, ret) { + return promise.reject({ + isError: true, + message: func + " returned " + ret + ", win32 error:" + windows.kernel32.GetLastError() + }); + }; + + // Create the "restart session". + var session = null; + var sessionBuf = ref.alloc(gpii.windows.types.DWORD); + var sessionKey = new Buffer(CCH_RM_SESSION_KEY * 2); + sessionKey.fill(0); + + ret = rm.RmStartSession(sessionBuf, 0, sessionKey); + if (ret) { + return reject("RmStartSession", ret); + } + + session = sessionBuf.deref(); + if (options.sessionId !== undefined) { + options.sessionId = session; + } + + // Close the session at the end. + promise.then(function () { + rm.RmEndSession(session); + }, function () { + rm.RmEndSession(session); + }); + + // Add the processes to restart. + ret = rm.RmRegisterResources(session, 0, ref.NULL, processArray.length, processArray, 0, ref.NULL); + if (ret) { + return reject("RmRegisterResources", ret); + } + + // Close the processes. This waits for them to shutdown nicely, so it takes a few seconds. + var RmShutdownOnlyRegistered = 10; + rm.RmShutdown.async(session, RmShutdownOnlyRegistered, ref.NULL, function (err, result) { + if (result) { + reject("RmShutdown", result); + return gpii.windows.restartProcesses(pids, options); + } else { + if (!options.shutdownOnly) { + // Re-start the processes again. + var ret = rm.RmRestart(session, 0, ref.NULL); + if (ret) { + return reject("RmRestart", ret); + } + } + promise.resolve(); + } + }); + + return promise; +}; + +/** + * Close all GUI applications (gracefully), and restarts those that are able to be restarted. + * A GUI application is a process that owns a Window. + * + * These are the levels that indicate how aggressively applications are closed: + * + * low: Only the applications that have registered themselves as restartable (see restartProcesses()). These are then + * restarted. + * medium: Also notify other windows that a shutdown/logout is imminent (sends WM_QUERYENDSESSION then WM_ENDSESSION). + * They have the option to close themselves. "Any data should be saved automatically without prompting the user" + * high: For the windows that didn't respond to the "medium" level, send WM_QUIT. Most applications will close, or ask + * the user to save changes. (see closeProcessByName()) + * + * @param level {String} Level of force to use (low, medium, or high). + * @param options {Object} [Optional] + * @param options.restart {boolean} True to attempt to restart the restartable applications. + * @param options.pids {Number[]} Only affect these processes. + * @param options.quitDelay {Number} How long (ms) to send WM_QUIT after sending WM_ENDSESSION (default: 3000). + * @return {Promise} Resolves when the close requests have been made (but not acted upon). + */ +gpii.windows.closeApplications = function (level, options) { + options = options || {}; + var levels = { + low: 1, + medium: 2, + high: 3 + }; + var levelNum = levels[level] || levels.low; + + var promise = fluid.promise(); + + // Get the processes and the windows they own. + var processWindows = windows.getProcessWindows(options.pids); + + // Make sure this process doesn't get affected (that would be embarrassing). + // TODO: Need to detect other GPII-related processes. + delete processWindows[process.pid]; + + // Restart applications that have it implemented. + var pids = fluid.transform(fluid.keys(processWindows), function (key) { return parseInt(key); }); + if (levelNum >= levels.low) { + // The restarting processes will be removed from the pids array. + gpii.windows.restartProcesses(pids, {updatePids: true, shutdownOnly: !options.restart}); + } + + var hwnds = []; + + // Pretend the Windows session is about to end. + if (levelNum >= levels.medium) { + // Get the Windows of the processes that couldn't be restarted. + fluid.each(pids, function (pid) { + hwnds.push.apply(hwnds, processWindows[pid]); + }); + + // Send the WM_QUERYENDSESSION then WM_ENDSESSION messages to each window. + windows.postMessage( + hwnds, windows.API_constants.WM_QUERYENDSESSION, 0, windows.API_constants.ENDSESSION_CLOSEAPP); + windows.postMessage( + hwnds, windows.API_constants.WM_ENDSESSION, true, windows.API_constants.ENDSESSION_CLOSEAPP); + } + + if (levelNum >= levels.high) { + // Send WM_QUIT to any Window that's still running, after a delay to give them a chance to process the previous + // messages. + setTimeout(function () { + windows.postMessage(hwnds, windows.API_constants.WM_QUIT, 0, 0); + promise.resolve(); + }, options.quitDelay || 3000); + } else { + promise.resolve(); + } + + return promise; +}; + +fluid.defaults("gpii.windows.closeApplications", { + gradeNames: "fluid.function", + argumentMap: { + "level": 0, + "options": 1 + } +}); + fluid.defaults("gpii.windows.killProcessByName", { gradeNames: "fluid.function", argumentMap: { diff --git a/gpii/node_modules/processHandling/test/test-window.c b/gpii/node_modules/processHandling/test/test-window.c index f0f98acd9..13970cddf 100644 --- a/gpii/node_modules/processHandling/test/test-window.c +++ b/gpii/node_modules/processHandling/test/test-window.c @@ -39,7 +39,7 @@ int window() { #define TIMER_ID 2 SetTimer(wnd, TIMER_ID, 60000, NULL); - puts("test-window: Window created"); + printf("test-window: Window created (hwnd:%u, pid:%u)\n", (unsigned int)wnd, GetCurrentProcessId()); // Flush the output - the unit test is waiting for this text. fflush(stdout); @@ -55,13 +55,27 @@ int window() { TranslateMessage(&msg); DispatchMessage(&msg); - if (msg.message == WM_TIMER && msg.wParam == TIMER_ID) { - puts("test-window: Timeout"); - KillTimer(wnd, TIMER_ID); - PostQuitMessage(0); + if (msg.hwnd == wnd) { + switch (msg.message) { + case WM_TIMER: + if (msg.wParam == TIMER_ID) { + puts("test-window: Timeout"); + KillTimer(wnd, TIMER_ID); + PostQuitMessage(0); + } + break; + case WM_QUERYENDSESSION: + puts("message: WM_QUERYENDSESSION"); + break; + case WM_ENDSESSION: + puts("message: WM_ENDSESSION"); + break; + } } + fflush(stdout); } + puts("message: WM_QUIT"); puts("test-window: Ended"); return msg.wParam; } @@ -73,7 +87,7 @@ int main(int argc, char **argv) } puts("A simple application that creates a window that lasts 60 seconds.\n"); - puts(" -window Create a Window."); + puts(" -window Create a Window."); return 0; } diff --git a/gpii/node_modules/processHandling/test/testProcessHandling.js b/gpii/node_modules/processHandling/test/testProcessHandling.js index 99a88ff1e..c2e10a521 100644 --- a/gpii/node_modules/processHandling/test/testProcessHandling.js +++ b/gpii/node_modules/processHandling/test/testProcessHandling.js @@ -24,12 +24,17 @@ var shelljs = require("shelljs"); var path = require("path"); var child_process = require("child_process"); +var ffi = require("ffi"); +var arrayType = require("ref-array"); +var Struct = require("ref-struct"); + require("../processHandling.js"); fluid.registerNamespace("gpii.tests.windows.processHandling"); var waitExe = "gpii-process-handling-test.exe"; var waitExePath = null; +var teardowns = []; jqUnit.module("gpii.tests.windows.processHandling", { setup: function () { @@ -39,6 +44,9 @@ jqUnit.module("gpii.tests.windows.processHandling", { shelljs.cp(path.join(process.env.SystemRoot, "/System32/waitfor.exe"), waitExePath); }, teardown: function () { + while (teardowns.length) { + teardowns.pop()(); + } if (waitExePath !== null) { gpii.windows.killProcessByName(waitExe); shelljs.rm(waitExePath); @@ -46,6 +54,42 @@ jqUnit.module("gpii.tests.windows.processHandling", { } }); +/** + * Starts test-window.exe, returning a promise that resolves with an object containing the window handle, pid, and + * the ChildProcess returned from cp.spawn. + * @param {Array} output {Optional} Empty array to contain the output lines. + * @return {Promise} Resolves with {hwnd, pid, child} when ready. + */ +gpii.tests.windows.processHandling.startTestProcess = function (output) { + var promise = fluid.promise(); + output = output || []; + + // Starts a process which is known to create a window. + var exeName = "test-window.exe"; + var exePath = path.join(__dirname, exeName); + var args = ["-window"]; + + fluid.log("Executing ", exePath, args.join(" ")); + var child = child_process.spawn(exePath, args, {encoding:"utf8"}); + + child.stdout.on("data", function (buf) { + var data = buf.toString(); + output.push.apply(output, data.split(/[\r\n]+/)); + // Wait for the window to be created + var match = data.match(/Window created.*\bhwnd:([0-9]+).*\bpid:([0-9]+)/); + if (match) { + var value = { + hwnd: parseInt(match[1]), + pid: parseInt(match[2]), + child: child + }; + promise.resolve(value); + } + }); + return promise; +}; + + jqUnit.test("Testing findProcessByName", function () { // Find a process that isn't running. var pid = gpii.windows.findProcessByName("a non-matching process.exe"); @@ -58,6 +102,12 @@ jqUnit.test("Testing findProcessByName", function () { // Find multiple processes. There's always more than one svchost.exe running on Windows. var pids = gpii.windows.findProcessByName("svchost.exe", true); jqUnit.assertTrue("Should have found several matching process.", pids.length > 1); + + // Find all processes. + var allPids = gpii.windows.findProcessByName(null, true); + jqUnit.assertTrue("Should be several running processes.", allPids.length > 1); + jqUnit.assertTrue("Should be more processes than svchost.", allPids.length > pids.length); + }); jqUnit.asyncTest("Testing timeout waiting for processes start", function () { @@ -207,3 +257,315 @@ jqUnit.asyncTest("Testing closeProcessByName (window-less process)", function () fluid.log("Executing " + command); child_process.exec(command); }); + +jqUnit.asyncTest("Test getProcessWindows", function () { + + gpii.tests.windows.processHandling.startTestProcess().then(function (child) { + + var runningPids = gpii.windows.findProcessByName(null, true); + var processWindows = gpii.windows.getProcessWindows(); + + jqUnit.assertNotNull("processWindows should not be null", processWindows); + jqUnit.assertNotEquals("processWindows should return something", 0, processWindows.length); + + var pids = fluid.keys(processWindows); + fluid.each(pids, function (pid) { + pid = parseInt(pid); + jqUnit.assertFalse("processWindows should only contain numeric keys", isNaN(pid)); + + var isRunning = runningPids.indexOf(pid) > -1; + jqUnit.assertTrue("processWindows should only contain running processes", isRunning); + }); + + // Assumes this node process doesn't create a window. + jqUnit.assertFalse("processWindows should only return processes with a window", + processWindows.hasOwnProperty(process.pid)); + + var testProcess = processWindows[child.pid]; + jqUnit.assertTrue("processWindows should contain the test process", !!testProcess); + jqUnit.assertTrue("The test process should have a window", testProcess.length > 0); + jqUnit.assertEquals("The test process window should be returned", child.hwnd, testProcess[0]); + + child.child.kill(); + jqUnit.start(); + }); +}); + +jqUnit.test("Test getRestartableProcesses", function () { + + var procs = gpii.windows.getRestartableProcesses(); + + // Find windows explorer (at least one is restartable) + var explorerPids = gpii.windows.findProcessByName("explorer.exe", true); + var found = fluid.find(procs,function (p) { + if (explorerPids.indexOf(p.pid) > -1) { + return true; + } + }); + + jqUnit.assertTrue("Explorer should be restartable", found); + + // Don't find this process + found = fluid.find(procs,function (p) { + return p.pid === process.pid; + }); + + jqUnit.assertFalse("This process should not be restartable", found); +}); + +var t = gpii.windows.types; + +// https://msdn.microsoft.com/library/aa373674 +var CCH_RM_MAX_SVC_NAME = 63; +var CCH_RM_MAX_APP_NAME = 255; +gpii.tests.windows.processHandling.RM_PROCESS_INFO = new Struct([ + [ gpii.windows.RM_UNIQUE_PROCESS, "Process"], + [ arrayType("char", (CCH_RM_MAX_APP_NAME + 1) * 2), "strAppName"], + [ arrayType("char", (CCH_RM_MAX_SVC_NAME + 1) * 2), "strServiceShortName"], + [ "int32", "ApplicationType"], + [ "uint32", "AppStatus"], + [ "uint32", "TSSessionId"], + [ "int32", "bRestartable"] +]); +gpii.tests.windows.processHandling.RM_PROCESS_INFOS = + arrayType(gpii.tests.windows.processHandling.RM_PROCESS_INFO); + +gpii.tests.windows.processHandling.restartManager = ffi.Library("rstrtmgr", { + // https://msdn.microsoft.com/library/aa373661 + "RmGetList": [ + t.DWORD, [ t.DWORD, "uint*", "uint*", gpii.tests.windows.processHandling.RM_PROCESS_INFOS, t.LPDWORD ] + ] +}); + +/** + * Check if the restart manager session has been set up correctly by inspecting the result of RmGetList. + * + * @param sessionHandle {Number} The session handle. + * @return {boolean} true if it has. + */ +gpii.tests.windows.processHandling.checkRestartManager = function (stage, sessionHandle, pids) { + jqUnit.expect(6); + + var messagePrefix = "After " + stage + ": "; + + // RM_APP_STATUS: https://msdn.microsoft.com/library/aa373669 + var RmStatusRunning = 1; + + var procCount = pids.length; + var procInfoNeededBuf = (new Buffer(4)).fill(0); + var procInfoCountBuf = new Buffer(4); + procInfoCountBuf.writeUInt32LE(procCount); + + var procInfos = new gpii.tests.windows.processHandling.RM_PROCESS_INFOS(procCount); + + var rebootReasons = new Buffer(4); + + var result = gpii.tests.windows.processHandling.restartManager.RmGetList( + sessionHandle, procInfoNeededBuf, procInfoCountBuf, procInfos, rebootReasons); + + jqUnit.assertEquals(messagePrefix + "RmGetList should return 0 (ERROR_SUCCESS)", 0, result); + + var procInfoCount = procInfoCountBuf.readUInt32LE(); + jqUnit.assertEquals(messagePrefix + "Number of procInfos returned by RmGetList should be the same number of pids", + pids.length, procInfoCount); + + var pidsFound = []; + for (var n = 0; n < procInfoCount; n++) { + var p = procInfos[n]; + pidsFound.push(p.Process.dwProcessId); + + var index = pids.indexOf(p.Process.dwProcessId); + jqUnit.assertTrue(messagePrefix + "RmGetList should only return expected pids", index > -1); + + jqUnit.assertEquals(messagePrefix + "Process should be running (AppStatus = RmStatusRunning)", + RmStatusRunning, p.AppStatus); + jqUnit.assertTrue(messagePrefix + "Process should be restartable", + RmStatusRunning, !!p.bRestartable); + } + + jqUnit.assertDeepEq(messagePrefix + "RmGetList should return all pids", + pids.sort(), pidsFound.sort()); +}; + +/** + * Replaces RmShutdown and RmRestart with an implementation that just checks if they have been called properly. + * + * @param expectedPids {Number[]} The processes that should have been restarted. + * @param restart {boolean} True if a call to RmRestart is expected. + */ +gpii.tests.windows.processHandling.mockRestartManager = function (expectedPids, restart) { + jqUnit.expect(4); + if (restart) { + jqUnit.expect(3); + } + + expectedPids = fluid.copy(expectedPids); + + var rmShutdown = gpii.windows.restartManager.RmShutdown.async; + var rmRestart = gpii.windows.restartManager.RmRestart; + teardowns.push(function () { + gpii.windows.restartManager.RmShutdown = rmShutdown; + gpii.windows.restartManager.RmRestart = rmRestart; + }); + + gpii.windows.restartManager.RmShutdown.async = function (dwSessionHandle, lActionFlags, fnStatus, callback) { + var RmShutdownOnlyRegistered = 10; + jqUnit.assertFalse("RmShutdown dwSessionHandle must be a number", isNaN(dwSessionHandle)); + jqUnit.assertEquals( + "RmShutdown lActionFlags must be RmShutdownOnlyRegistered", RmShutdownOnlyRegistered, lActionFlags); + // For some reason, ref doesn't like being required from this script. + jqUnit.assertEquals("RmShutdown fnStatus must be ref.NULL", 0, fnStatus && fnStatus.length); + jqUnit.assertEquals("RmShutdown callback must be a function", "function", typeof(callback)); + + gpii.tests.windows.processHandling.checkRestartManager("RmShutdown", dwSessionHandle, expectedPids); + + // Invoke the callback with a successful return. + callback(gpii.windows.API_constants.returnCodes.ERROR_SUCCESS); + }; + gpii.windows.restartManager.RmRestart = function (dwSessionHandle, dwRestartFlags, fnStatus) { + if (restart) { + jqUnit.assertFalse("RmShutdown dwSessionHandle must be a number", isNaN(dwSessionHandle)); + // "Reserved. This parameter should be 0." + jqUnit.assertEquals("RmShutdown dwRestartFlags must be 0", 0, dwRestartFlags); + jqUnit.assertEquals("RmShutdown fnStatus must be ref.NULL", 0, fnStatus && fnStatus.length); + + gpii.tests.windows.processHandling.checkRestartManager("RmRestart", dwSessionHandle, expectedPids); + } else { + jqUnit.fail("Call to RmRestart was not expected."); + } + }; +}; + +jqUnit.asyncTest("Test restartProcesses", function () { + jqUnit.expect(2); + + // Windows explorer does register as restartable, but restarting it (and potentially failing, because it's a test) + // doesn't feel right. Adding /s to explorer.exe opens an explorer window in a separate process however that process + // doesn't register itself as restartable. + // An attempt was made to make test-window.c register for auto-restart, but for some unknown reason the the call to + // RmShutdown timed out when the process was started by this one (via spawn or exec). + // So, the RmShutdown and RmRestart functions are mocked to check they're being called correctly. + + var exeFile = "explorer.exe"; + var pids = gpii.windows.findProcessByName(exeFile, true); + var explorerPids = fluid.transform(gpii.windows.getRestartableProcesses(pids), function (proc) { + return proc.pid; + }); + + gpii.tests.windows.processHandling.mockRestartManager(explorerPids, true); + + var promise = gpii.windows.restartProcesses(explorerPids); + jqUnit.assertTrue("restartProcesses must return a promise", fluid.isPromise(promise)); + + promise.then(function () { + jqUnit.assert("restartProcesses promise resolved"); + jqUnit.start(); + }, function (e) { + fluid.log(e); + jqUnit.fail("restartProcesses promise rejected"); + }); +}); + +jqUnit.asyncTest("Test closeApplications", function () { + + // Get the restartable explorer process(es) + var explorerPids = gpii.windows.findProcessByName("explorer.exe", true); + explorerPids = fluid.transform(gpii.windows.getRestartableProcesses(explorerPids), function (proc) { + return proc.pid; + }); + + var tests = [ + { + level: "low", + restart: true, + expectedMessages: [] + }, + { + level: "low", + restart: false, + expectedMessages: [] + }, + { + level: "medium", + restart: true, + expectedMessages: [ + "WM_QUERYENDSESSION", + "WM_ENDSESSION" + ] + }, + { + level: "medium", + restart: false, + expectedMessages: [ + "WM_QUERYENDSESSION", + "WM_ENDSESSION" + ] + }, + { + level: "high", + restart: true, + expectedMessages: [ + // medium: + "WM_QUERYENDSESSION", + "WM_ENDSESSION", + // high: + "WM_QUIT" + ] + }, + { + level: "high", + restart: false, + expectedMessages: [ + // medium: + "WM_QUERYENDSESSION", + "WM_ENDSESSION", + // high: + "WM_QUIT" + ] + } + ]; + + jqUnit.expect(tests.length); + + var currentTest; + var runTest = function (testIndex) { + if (testIndex >= tests.length) { + jqUnit.start(); + return; + } + + currentTest = tests[testIndex]; + var output = []; + gpii.tests.windows.processHandling.startTestProcess(output).then(function (child) { + child.child.on("exit", function () { + var messages = fluid.transform(output, function (line) { + var m = line.match(/^message: (WM_((QUERY)?ENDSESSION|QUIT))$/); + return m && m[1]; + }).filter(fluid.identity); + + jqUnit.assertDeepEq("test: " + currentTest.level + ": Expected messages must be received", + currentTest.expectedMessages, messages); + + runTest(testIndex + 1); + }); + + // Expect only explorer to be restarted by restart manager. + gpii.tests.windows.processHandling.mockRestartManager(explorerPids, currentTest.restart); + + var restartPids = [child.pid]; + restartPids.push.apply(restartPids, explorerPids); + + gpii.windows.closeApplications(currentTest.level, { + pids: restartPids, quitDelay: 1, restart: currentTest.restart + }).then(function () { + setTimeout(function () { + child.child.kill(); + }, 500); + }, jqUnit.fail); + + }, jqUnit.fail); + + }; + + runTest(0); +}); From 24ba1f9aa01e894e482d3cad5dc0192dc6dd90df Mon Sep 17 00:00:00 2001 From: ste Date: Mon, 31 Jul 2017 14:49:54 +0100 Subject: [PATCH 02/28] GPII-2212: Pointing universal to the branch that works with this. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2d6ad48f0..53f4636ab 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "ref": "1", "ref-struct": "1", "ref-array": "1.1.2", - "universal": "gpii/universal#a9d56aa6dfc67e9430c9175826fe9d3e3bbc6c93" + "universal": "stegru/universal#GPII-2212" }, "devDependencies": { "grunt": "1.0.1", From e4320c87fc7bd40aefb5894d840b3163a63e7144 Mon Sep 17 00:00:00 2001 From: ste Date: Mon, 17 Jul 2017 16:51:56 +0100 Subject: [PATCH 03/28] GPII-2495: Made SPI tests work again. --- gpii/node_modules/spiSettingsHandler/test/testAPI.json | 10 +++++----- .../spiSettingsHandler/test/testMouse.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gpii/node_modules/spiSettingsHandler/test/testAPI.json b/gpii/node_modules/spiSettingsHandler/test/testAPI.json index b5e606b12..cdf9b7d41 100644 --- a/gpii/node_modules/spiSettingsHandler/test/testAPI.json +++ b/gpii/node_modules/spiSettingsHandler/test/testAPI.json @@ -76,7 +76,7 @@ }, "settings": { "MouseAcceleration": { - "value": 3, + "value": 0, "path": "pvParam.2" } } @@ -108,11 +108,11 @@ "settings": { "MouseAcceleration": { "oldValue": { - "value": 2, + "value": 1, "path": "pvParam.2" }, "newValue": { - "value": 3, + "value": 0, "path": "pvParam.2" } } @@ -156,7 +156,7 @@ }, "settings": { "MouseAcceleration": { - "value": 3, + "value": 1, "path": "pvParam.2" } } @@ -178,7 +178,7 @@ }, { "settings": { "MouseAcceleration": { - "value": 2, + "value": 1, "path": "pvParam.2" } } diff --git a/gpii/node_modules/spiSettingsHandler/test/testMouse.json b/gpii/node_modules/spiSettingsHandler/test/testMouse.json index 4cee3c0a0..ded3c72e3 100644 --- a/gpii/node_modules/spiSettingsHandler/test/testMouse.json +++ b/gpii/node_modules/spiSettingsHandler/test/testMouse.json @@ -12,7 +12,7 @@ "settings": { "MouseAcceleration": { - "value": 2, + "value": 0, "path": "pvParam.2" } } From 62279135b6a1044bb93588af347fed13371f355f Mon Sep 17 00:00:00 2001 From: ste Date: Fri, 5 Jan 2018 13:52:13 +0000 Subject: [PATCH 04/28] GPII-2212: MAde the teardowns global a member of the test module --- gpii/node_modules/processHandling/processHandling.js | 3 +++ .../processHandling/test/testProcessHandling.js | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/gpii/node_modules/processHandling/processHandling.js b/gpii/node_modules/processHandling/processHandling.js index 1820bdffa..f46ae118a 100644 --- a/gpii/node_modules/processHandling/processHandling.js +++ b/gpii/node_modules/processHandling/processHandling.js @@ -518,6 +518,9 @@ gpii.windows.restartProcesses = function (pids, options) { * Close all GUI applications (gracefully), and restarts those that are able to be restarted. * A GUI application is a process that owns a Window. * + * The purpose of this is to simulate a logout/in, when a change to the system (such as the language) requires all + * applications to restart. + * * These are the levels that indicate how aggressively applications are closed: * * low: Only the applications that have registered themselves as restartable (see restartProcesses()). These are then diff --git a/gpii/node_modules/processHandling/test/testProcessHandling.js b/gpii/node_modules/processHandling/test/testProcessHandling.js index b1107e585..6bbbe8eb9 100644 --- a/gpii/node_modules/processHandling/test/testProcessHandling.js +++ b/gpii/node_modules/processHandling/test/testProcessHandling.js @@ -34,7 +34,7 @@ fluid.registerNamespace("gpii.tests.windows.processHandling"); var waitExe = "gpii-process-handling-test.exe"; var waitExePath = null; -var teardowns = []; +gpii.tests.windows.processHandling.teardowns = []; jqUnit.module("gpii.tests.windows.processHandling", { setup: function () { @@ -44,8 +44,8 @@ jqUnit.module("gpii.tests.windows.processHandling", { shelljs.cp(path.join(process.env.SystemRoot, "/System32/waitfor.exe"), waitExePath); }, teardown: function () { - while (teardowns.length) { - teardowns.pop()(); + while (gpii.tests.windows.processHandling.teardowns.length) { + gpii.tests.windows.processHandling.teardowns.pop()(); } if (waitExePath !== null) { gpii.windows.killProcessByName(waitExe); @@ -466,7 +466,7 @@ gpii.tests.windows.processHandling.mockRestartManager = function (expectedPids, var rmShutdown = gpii.windows.restartManager.RmShutdown.async; var rmRestart = gpii.windows.restartManager.RmRestart; - teardowns.push(function () { + gpii.tests.windows.processHandling.teardowns.push(function () { gpii.windows.restartManager.RmShutdown = rmShutdown; gpii.windows.restartManager.RmRestart = rmRestart; }); From 733c0e79e455407aa39d472c0e9140fcc43e3f87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Jaramago=20Fern=C3=A1ndez?= Date: Fri, 12 Jan 2018 18:41:26 +0100 Subject: [PATCH 05/28] GPII-2212: Fixed tests execution --- gpii/node_modules/processHandling/test/testProcessHandling.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gpii/node_modules/processHandling/test/testProcessHandling.js b/gpii/node_modules/processHandling/test/testProcessHandling.js index 6bbbe8eb9..912611046 100644 --- a/gpii/node_modules/processHandling/test/testProcessHandling.js +++ b/gpii/node_modules/processHandling/test/testProcessHandling.js @@ -67,10 +67,10 @@ gpii.tests.windows.processHandling.startTestProcess = function (output) { // Starts a process which is known to create a window. var exeName = "test-window.exe"; var exePath = path.join(__dirname, exeName); - var args = ["-window"]; + var args = [" -window"]; fluid.log("Executing ", exePath, args.join(" ")); - var child = child_process.spawn(exePath, args, {encoding:"utf8"}); + var child = child_process.exec(exePath + args); child.stdout.on("data", function (buf) { var data = buf.toString(); From 473b62ce04db83e2e11cd1329eac45a1b3668487 Mon Sep 17 00:00:00 2001 From: Steve Grundell Date: Sat, 13 Jan 2018 11:44:30 +0000 Subject: [PATCH 06/28] GPII-2212 Completed array to string change. --- gpii/node_modules/processHandling/test/testProcessHandling.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gpii/node_modules/processHandling/test/testProcessHandling.js b/gpii/node_modules/processHandling/test/testProcessHandling.js index 912611046..e95865e37 100644 --- a/gpii/node_modules/processHandling/test/testProcessHandling.js +++ b/gpii/node_modules/processHandling/test/testProcessHandling.js @@ -67,9 +67,9 @@ gpii.tests.windows.processHandling.startTestProcess = function (output) { // Starts a process which is known to create a window. var exeName = "test-window.exe"; var exePath = path.join(__dirname, exeName); - var args = [" -window"]; + var args = " -window"; - fluid.log("Executing ", exePath, args.join(" ")); + fluid.log("Executing ", exePath, args); var child = child_process.exec(exePath + args); child.stdout.on("data", function (buf) { From 1495e3459f5a19c55e20b9f8d17dcd877bfa8bb6 Mon Sep 17 00:00:00 2001 From: ste Date: Mon, 15 Jan 2018 11:54:02 +0000 Subject: [PATCH 07/28] GPII-2212: Fixed incorrect teardown --- gpii/node_modules/processHandling/test/testProcessHandling.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gpii/node_modules/processHandling/test/testProcessHandling.js b/gpii/node_modules/processHandling/test/testProcessHandling.js index e95865e37..88cb07eaa 100644 --- a/gpii/node_modules/processHandling/test/testProcessHandling.js +++ b/gpii/node_modules/processHandling/test/testProcessHandling.js @@ -467,7 +467,7 @@ gpii.tests.windows.processHandling.mockRestartManager = function (expectedPids, var rmShutdown = gpii.windows.restartManager.RmShutdown.async; var rmRestart = gpii.windows.restartManager.RmRestart; gpii.tests.windows.processHandling.teardowns.push(function () { - gpii.windows.restartManager.RmShutdown = rmShutdown; + gpii.windows.restartManager.RmShutdown.async = rmShutdown; gpii.windows.restartManager.RmRestart = rmRestart; }); From 5fbdd5a3daf3d6a88acf1e09724426b44eb0f987 Mon Sep 17 00:00:00 2001 From: ste Date: Mon, 12 Mar 2018 21:01:51 +0000 Subject: [PATCH 08/28] GPII-2578: killProcessByName using process bridge --- .../processHandling/processHandling.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/gpii/node_modules/processHandling/processHandling.js b/gpii/node_modules/processHandling/processHandling.js index 505a9d9ee..792b110ff 100644 --- a/gpii/node_modules/processHandling/processHandling.js +++ b/gpii/node_modules/processHandling/processHandling.js @@ -23,23 +23,28 @@ var ref = require("ref"); var gpii = fluid.registerNamespace("gpii"); var windows = fluid.registerNamespace("gpii.windows"); + +fluid.require("%gpii-windows/gpii/node_modules/processReporter"); + require("../WindowsUtilities/WindowsUtilities.js"); var c = windows.API_constants; +var processesBridge = gpii.processes.windows(); /** * Kills any windows processes with a given application filename. * http://stackoverflow.com/questions/7956519/how-to-kill-processes-by-name-win32-api * - * @param {String} The filename of the application. For example, the Windows on + * @param filename {String} The filename of the application. For example, the Windows on * screen keyboard is "osk.exe". Other examples include "Magnify.exe" and * "firefox.exe". */ gpii.windows.killProcessByName = function (filename) { - var pids = gpii.windows.findProcessByName(filename, true); - if (pids) { - for (var n = 0, len = pids.length; n < len; n++) { - var hProcess = windows.kernel32.OpenProcess(c.PROCESS_TERMINATE, 0, pids[n]); + var procs = processesBridge.findProcessesByCommand(filename); + + if (procs) { + for (var n = 0, len = procs.length; n < len; n++) { + var hProcess = windows.kernel32.OpenProcess(c.PROCESS_TERMINATE, 0, procs[n].pid); if (hProcess !== ref.NULL) { windows.kernel32.TerminateProcess(hProcess, 9); windows.kernel32.CloseHandle(hProcess); From 19285fdcd0a77a4e8bd82897b5a6686f48f4d339 Mon Sep 17 00:00:00 2001 From: ste Date: Mon, 12 Mar 2018 21:30:28 +0000 Subject: [PATCH 09/28] GPII-2578: isProcessRunning using process bridge --- gpii/node_modules/processHandling/processHandling.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gpii/node_modules/processHandling/processHandling.js b/gpii/node_modules/processHandling/processHandling.js index 792b110ff..28729b578 100644 --- a/gpii/node_modules/processHandling/processHandling.js +++ b/gpii/node_modules/processHandling/processHandling.js @@ -128,7 +128,7 @@ gpii.windows.findProcessByName = function (filename, all, fullInfo) { gpii.windows.isProcessRunning = function (proc) { var togo = false; if (isNaN(proc)) { - togo = gpii.windows.findProcessByName(proc) !== null; + togo = gpii.processReporter.find(proc); } else { try { process.kill(proc, 0); From 25d2f43b0a7ff3ad6c057c25861c6e2ddd77f6c5 Mon Sep 17 00:00:00 2001 From: ste Date: Thu, 15 Mar 2018 13:25:47 +0000 Subject: [PATCH 10/28] GPII-2578: Made findProcessesByCommand case-insensitive for Windows. --- .../processReporter/dotNetProcesses.csx | 3 ++- .../test/processesBridge_tests.js | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/gpii/node_modules/processReporter/dotNetProcesses.csx b/gpii/node_modules/processReporter/dotNetProcesses.csx index 6eeec6232..da64d4a1b 100644 --- a/gpii/node_modules/processReporter/dotNetProcesses.csx +++ b/gpii/node_modules/processReporter/dotNetProcesses.csx @@ -51,7 +51,8 @@ public class Startup } } else { ManagementObject[] someProcesses = Array.FindAll( - processes, p => p.GetPropertyValue("Name").ToString() == input + processes, + p => string.Equals(p.GetPropertyValue("Name").ToString(), input, StringComparison.OrdinalIgnoreCase) ); foreach (ManagementObject p in someProcesses) { makeAndAppendProcInfo(p, result); diff --git a/gpii/node_modules/processReporter/test/processesBridge_tests.js b/gpii/node_modules/processReporter/test/processesBridge_tests.js index 914364904..24d498bb6 100644 --- a/gpii/node_modules/processReporter/test/processesBridge_tests.js +++ b/gpii/node_modules/processReporter/test/processesBridge_tests.js @@ -129,6 +129,25 @@ jqUnit.test( } ); +jqUnit.test( + "Test findProcessesByCmd()/findFirstProcessByCmd() with nodejs itself - ignoring case", + function () { + var nodeProcInfos = processesBridge.findProcessesByCommand("NoDE.eXe"); + jqUnit.assertNotEquals( + "Getting all 'NoDE.eXe' processes", 0, nodeProcInfos.length + ); + nodeProcInfos.forEach(function (aProcInfo) { + jqUnit.assertEquals( + "Node commmand name", "node.exe", aProcInfo.command + ); + }); + var procInfo = processesBridge.findFirstProcessByCommand("NoDE.eXe"); + jqUnit.assertNotNull( + "Looking for first 'NoDE.eXe' processes", procInfo); + jqUnit.assertEquals("Node commmand name", "node.exe", procInfo.command); + } +); + jqUnit.test( "Test initProcInfoNotRunning()", function () { From a53322d3fea842a145c1a2b2c4e26be4f45667e0 Mon Sep 17 00:00:00 2001 From: ste Date: Mon, 19 Mar 2018 19:15:25 +0000 Subject: [PATCH 11/28] GPII-2578: Replaced gpii.windows.findProcessByName --- .../processHandling/processHandling.js | 85 +- .../test/testProcessHandling.js | 29 +- .../registeredAT/test/testRegisteredAT.js | 4 +- package-lock.json | 9203 +++++++++-------- 4 files changed, 4690 insertions(+), 4631 deletions(-) diff --git a/gpii/node_modules/processHandling/processHandling.js b/gpii/node_modules/processHandling/processHandling.js index 28729b578..8b2312896 100644 --- a/gpii/node_modules/processHandling/processHandling.js +++ b/gpii/node_modules/processHandling/processHandling.js @@ -23,10 +23,8 @@ var ref = require("ref"); var gpii = fluid.registerNamespace("gpii"); var windows = fluid.registerNamespace("gpii.windows"); - -fluid.require("%gpii-windows/gpii/node_modules/processReporter"); - require("../WindowsUtilities/WindowsUtilities.js"); +require("../processReporter/processReporter.js"); var c = windows.API_constants; var processesBridge = gpii.processes.windows(); @@ -53,72 +51,6 @@ gpii.windows.killProcessByName = function (filename) { } }; -/** - * Finds a running process with the given name. - * - * The CreateToolhelp32Snapshot Windows API call captures the running processes, and the Process32First/Next - * functions are used to enumerate them. - * - * @param filename The exe file name to search for, null to match any. - * @param all {boolean?} Set to true to return an array containing all matching processes. - * @param fullInfo {boolean?} Set to true to return the pid, ppid, and exe name of matching processes. - * @returns {?number|number[]} The Process ID of the matching processes, otherwise null. - */ -gpii.windows.findProcessByName = function (filename, all, fullInfo) { - - // Get a snapshot of the processes. - var hSnapShot = windows.kernel32.CreateToolhelp32Snapshot(windows.API_constants.TH32CS_SNAPPROCESS, null); - if (hSnapShot === windows.API_constants.INVALID_HANDLE_VALUE) { - console.error("CreateToolhelp32Snapshot failed. Win32 error: " + windows.GetLastError()); - return null; - } - - var matches = []; - var filenameLower = filename && filename.toLowerCase(); - - try { - // Create the structure for the return parameter of Process32First/Next. - var pEntry = new windows.PROCESSENTRY32(); - pEntry.dwSize = windows.PROCESSENTRY32.size; - - // Enumerate the processes. - var hRes = windows.kernel32.Process32First(hSnapShot, pEntry.ref()); - while (hRes) { - var buf = new Buffer(pEntry.szExeFile); - var processName = ref.readCString(buf, 0); - - if (!filename || processName.toLowerCase() === filenameLower) { - var proc; - if (fullInfo) { - proc = { - pid: pEntry.th32ProcessID, - ppid: pEntry.th32ParentProcessID, - exeFile: processName - }; - } else { - proc = pEntry.th32ProcessID; - } - if (all) { - // Add it to the array of matches. - matches.push(proc); - } else { - // Only want the first one - return it. - return proc; - } - } - - hRes = windows.kernel32.Process32Next(hSnapShot, pEntry.ref()); - } - } finally { - // Make sure the snapshot is closed. - if (hSnapShot) { - windows.kernel32.CloseHandle(hSnapShot); - } - } - - return all ? matches : null; -}; - /** * Determines if a given process is running, returning true if it is. * @@ -239,7 +171,9 @@ gpii.windows.closeProcessByName = function (filename, options) { options = fluid.extend(defaultOptions, options); - var pids = gpii.windows.findProcessByName(filename, true); + var pids = fluid.transform(processesBridge.findProcessesByCommand(filename), function (proc) { + return proc.pid; + }); if (!pids) { // Process is not running. return fluid.toPromise(true); @@ -340,17 +274,6 @@ gpii.windows.getProcessPath = function (pid, processHandle) { } } - if (!togo) { - // OpenProcess or QueryFullProcessImageName failed (usually due to permissions). Get the file name from the - // process list instead. - var all = gpii.windows.findProcessByName(null, true, true); - var process = all.find(function (p) { - return p.pid === pid; - }); - if (process) { - togo = process.exeFile; - } - } return togo; }; diff --git a/gpii/node_modules/processHandling/test/testProcessHandling.js b/gpii/node_modules/processHandling/test/testProcessHandling.js index 24e692e94..c20b0acf1 100644 --- a/gpii/node_modules/processHandling/test/testProcessHandling.js +++ b/gpii/node_modules/processHandling/test/testProcessHandling.js @@ -46,27 +46,6 @@ jqUnit.module("gpii.tests.windows.processHandling", { } }); -jqUnit.test("Testing findProcessByName", function () { - // Find a process that isn't running. - var pid = gpii.windows.findProcessByName("a non-matching process.exe"); - jqUnit.assertEquals("Process should not have been found running", null, pid); - - // Find a process that is running. - pid = gpii.windows.findProcessByName("node.exe"); - jqUnit.assertNotEquals("Process should have been found running", null, pid); - - // Find a process that is running, full details - var details = gpii.windows.findProcessByName("node.exe", false, true); - jqUnit.assertNotEquals("Process should have been found running (fullInfo)", null, details); - jqUnit.assertTrue("pid should be a number", typeof(details.pid) === "number"); - jqUnit.assertTrue("ppid should be a number", typeof(details.ppid) === "number"); - jqUnit.assertEquals("exeFile should be node.exe", "node.exe", details.exeFile.toLowerCase()); - - // Find multiple processes. There's always more than one svchost.exe running on Windows. - var pids = gpii.windows.findProcessByName("svchost.exe", true); - jqUnit.assertTrue("Should have found several matching process.", pids.length > 1); -}); - jqUnit.test("Testing isProcessRunning", function () { // Check a PID that isn't running. var running = gpii.windows.isProcessRunning(-1); @@ -118,8 +97,8 @@ jqUnit.asyncTest("Testing timeout waiting for processes termination", function ( jqUnit.asyncTest("Testing waiting for processes start and end", function () { jqUnit.expect(3); - var pid = gpii.windows.findProcessByName(waitExe); - jqUnit.assertEquals("The process should not already be running.", null, pid); + var running = gpii.processReporter.find(waitExe); + jqUnit.assertFalse("The process should not already be running.", running); // Timeout waiting for the process start/end after 10 seconds. var options = { timeout: 10000 }; @@ -151,8 +130,8 @@ jqUnit.asyncTest("Testing waiting for processes start and end", function () { jqUnit.asyncTest("Testing Killing Processes", function () { jqUnit.expect(3); - var pid = gpii.windows.findProcessByName(waitExe); - jqUnit.assertEquals("The process should not already be running.", null, pid); + var running = gpii.processReporter.find(waitExe); + jqUnit.assertFalse("The process should not already be running.", running); // On the call below, async is true because if it is false shelljs will // wait around until it is manually killed before continuing with the diff --git a/gpii/node_modules/registeredAT/test/testRegisteredAT.js b/gpii/node_modules/registeredAT/test/testRegisteredAT.js index 134d1765b..326d2bc07 100644 --- a/gpii/node_modules/registeredAT/test/testRegisteredAT.js +++ b/gpii/node_modules/registeredAT/test/testRegisteredAT.js @@ -140,8 +140,8 @@ jqUnit.asyncTest("Testing AT start and stop", function () { }); }); - var pid = gpii.windows.findProcessByName(testData.ATExe); - jqUnit.assertEquals("The process should not already be running.", null, pid); + var running = gpii.processReporter.find(testData.ATExe); + jqUnit.assertFalse("The process should not already be running.", running); gpii.windows.startRegisteredAT(testData.appName, {atInfo: testData}); diff --git a/package-lock.json b/package-lock.json index e7cc582f8..3002741b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,34 +7,14 @@ "JSV": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", - "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=" + "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=", + "dev": true }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "abstract-leveldown": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", - "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", - "requires": { - "xtend": "4.0.1" - } - }, - "accepts": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", - "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", - "requires": { - "mime-types": "2.1.18", - "negotiator": "0.6.1" - } - }, - "acorn": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz", - "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==" + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true }, "acorn-jsx": { "version": "3.0.1", @@ -53,15 +33,11 @@ } } }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" - }, "ajv": { "version": "4.11.8", "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" @@ -73,16 +49,6 @@ "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", "dev": true }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" - }, - "ansi": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", - "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" - }, "ansi-escapes": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", @@ -98,50 +64,8 @@ "ansi-styles": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", - "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=" - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.4" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", - "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "5.1.1" - } - } - } + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "dev": true }, "argparse": { "version": "1.0.10", @@ -152,31 +76,12 @@ "sprintf-js": "1.0.3" } }, - "argsarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz", - "integrity": "sha1-bnIHtOzbObCviDA/pa4ivajfYcs=" - }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "array-index": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-index/-/array-index-1.0.0.tgz", - "integrity": "sha1-7FanSe4QPk4Ix5C5w1PfFgVbl/k=", - "requires": { - "debug": "2.6.9", - "es6-symbol": "3.1.1" - } - }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -198,215 +103,33 @@ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" - }, - "ast-types": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", - "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=" - }, - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "attempt-x": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/attempt-x/-/attempt-x-1.1.1.tgz", - "integrity": "sha512-hIp37ojJRRW8ExWSxxLpkDHUufk/DFfsb7/cUC1cVbBg7JV4gJTkCTRa44dlL9e5jx1P3VNrjL7QOQfi4MyltA==" - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base62": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/base62/-/base62-0.1.1.tgz", - "integrity": "sha1-e0F0wvlESXU7EcJlHAg9qEGnsIQ=" - }, - "base64url": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-1.0.6.tgz", - "integrity": "sha1-1k03XWinxkDZEuI1jRcNylu1RoE=", - "requires": { - "concat-stream": "1.4.10", - "meow": "2.0.0" - } - }, - "basic-auth": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz", - "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=", - "requires": { - "safe-buffer": "5.1.1" - } - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, "bindings": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz", "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=" }, - "bl": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", - "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", - "requires": { - "readable-stream": "2.3.4" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", - "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "requires": { - "inherits": "2.0.3" - } - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "body-parser": { - "version": "1.17.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", - "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", - "requires": { - "bytes": "2.4.0", - "content-type": "1.0.4", - "debug": "2.6.7", - "depd": "1.1.2", - "http-errors": "1.6.2", - "iconv-lite": "0.4.15", - "on-finished": "2.3.0", - "qs": "6.4.0", - "raw-body": "2.2.0", - "type-is": "1.6.16" - }, - "dependencies": { - "debug": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", - "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "requires": { - "hoek": "2.16.3" - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, - "buffer-from": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.1.tgz", - "integrity": "sha1-V7GLHaChnsBvM4N6UnWiQjUb114=", - "requires": { - "is-array-buffer-x": "1.7.0" - } - }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, - "bytes": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", - "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=" - }, - "cached-constructors-x": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cached-constructors-x/-/cached-constructors-x-1.0.0.tgz", - "integrity": "sha512-JVP0oilYlPgBTD8bkQ+of7hSIJRtydCCJiMtzdRMXVQ98gdj0NyrJTZzbu5wtlO26Ev/1HXRTtbBNsVlLJ3+3A==" - }, "caller-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", @@ -422,50 +145,17 @@ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", "dev": true }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" - }, - "camelcase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-1.0.0.tgz", - "integrity": "sha1-vRoRv5sxoc5JNJOpMN4aC69K1+w=", - "requires": { - "camelcase": "1.2.1", - "map-obj": "1.0.1" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chai": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", - "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", - "requires": { - "assertion-error": "1.1.0", - "deep-eql": "0.1.3", - "type-detect": "1.0.0" - } - }, "chalk": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "dev": true, "requires": { "ansi-styles": "1.0.0", "has-color": "0.1.7", "strip-ansi": "0.1.1" } }, - "chownr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" - }, "circular-json": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", @@ -487,15 +177,11 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" - }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true }, "code-point-at": { "version": "1.1.0", @@ -515,87 +201,17 @@ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", - "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==" - }, - "commoner": { - "version": "0.10.8", - "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz", - "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=", - "requires": { - "commander": "2.14.1", - "detective": "4.7.1", - "glob": "5.0.15", - "graceful-fs": "4.1.11", - "iconv-lite": "0.4.15", - "mkdirp": "0.5.1", - "private": "0.1.8", - "q": "1.5.1", - "recast": "0.11.23" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "compressible": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz", - "integrity": "sha1-DRAgq5JLL9tNYnmHXH1tq6a6p6k=", - "requires": { - "mime-db": "1.33.0" - } - }, - "compression": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.1.tgz", - "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=", - "requires": { - "accepts": "1.3.4", - "bytes": "3.0.0", - "compressible": "2.0.13", - "debug": "2.6.9", - "on-headers": "1.0.1", - "safe-buffer": "5.1.1", - "vary": "1.1.2" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - } - } - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "concat-stream": { "version": "1.4.10", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.10.tgz", "integrity": "sha1-rMO79WAsuMyYDGrIQPp9hgPj7zY=", + "dev": true, "requires": { "inherits": "2.0.3", "readable-stream": "1.1.14", @@ -606,6 +222,7 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", @@ -615,231 +232,51 @@ } } }, - "connect-ensure-login": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/connect-ensure-login/-/connect-ensure-login-0.1.1.tgz", - "integrity": "sha1-F03MUSQ7nqwj+NmCFa62aU4uihI=" - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-parser": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz", - "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=", - "requires": { - "cookie": "0.3.1", - "cookie-signature": "1.0.6" - } - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, - "couchdb-calculate-session-id": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/couchdb-calculate-session-id/-/couchdb-calculate-session-id-1.1.2.tgz", - "integrity": "sha1-NkoVao23thIDleo+IQ8k7wwlWhw=", + "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, "requires": { - "aproba": "1.2.0", - "base64url": "2.0.0", - "crypto-lite": "0.2.0" - }, - "dependencies": { - "base64url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", - "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=" - }, - "crypto-lite": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/crypto-lite/-/crypto-lite-0.2.0.tgz", - "integrity": "sha1-OhTPYwOEYaXrhZRd54vwTeTar3M=" - } + "array-find-index": "1.0.2" } }, - "couchdb-eval": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/couchdb-eval/-/couchdb-eval-1.0.6.tgz", - "integrity": "sha1-A85qFNpijJ+XtgJpBTv7/+nLNTk=", + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, "requires": { - "extend": "1.3.0", - "pouchdb-plugin-error": "1.0.1" - }, - "dependencies": { - "extend": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", - "integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=" - } + "es5-ext": "0.10.39" } }, - "couchdb-objects": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/couchdb-objects/-/couchdb-objects-1.0.7.tgz", - "integrity": "sha1-Cn5AZ96eCMocV244IhQtKqVYBNg=", + "dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true, "requires": { - "extend": "1.3.0", - "header-case-normalizer": "1.0.3", - "is-empty": "0.0.1", - "pouchdb-promise": "0.0.0", - "random-uuid-v4": "0.0.4" + "get-stdin": "4.0.1", + "meow": "3.7.0" }, "dependencies": { - "bluebird": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.2.4.tgz", - "integrity": "sha1-WYXsI8tv8aWDTMZEezxe8BD9Mho=" - }, - "extend": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", - "integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=" + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true }, - "lie": { - "version": "2.7.7", - "resolved": "https://registry.npmjs.org/lie/-/lie-2.7.7.tgz", - "integrity": "sha1-fPlZvtSJWbBi8Drka7vzqsMCark=", - "requires": { - "immediate": "3.0.6" - } - }, - "pouchdb-promise": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-0.0.0.tgz", - "integrity": "sha1-PAFOYndm2UW+PycOB5p9tNLRmCc=", - "requires": { - "bluebird": "1.2.4", - "lie": "2.7.7" - } - } - } - }, - "couchdb-render": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/couchdb-render/-/couchdb-render-1.0.1.tgz", - "integrity": "sha1-iS5aQEDb3A0HuODKEsD1erG7EC8=", - "requires": { - "couchdb-eval": "1.0.6", - "couchdb-resp-completer": "1.0.3", - "extend": "1.3.0", - "is-empty": "0.0.1", - "pouchdb-plugin-error": "1.0.1" - }, - "dependencies": { - "extend": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", - "integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=" - } - } - }, - "couchdb-resp-completer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/couchdb-resp-completer/-/couchdb-resp-completer-1.0.3.tgz", - "integrity": "sha1-qksMAr8JBv33Nn+/i96OCsUy0hM=", - "requires": { - "extend": "1.3.0", - "is-empty": "0.0.1", - "pouchdb-plugin-error": "1.0.1" - }, - "dependencies": { - "extend": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", - "integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=" - } - } - }, - "crc": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", - "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms=" - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "requires": { - "boom": "2.10.1" - } - }, - "crypto-lite": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/crypto-lite/-/crypto-lite-0.1.0.tgz", - "integrity": "sha1-l2ug9uu3PrWAZEvwjVPqhKxAxJA=" - }, - "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, - "requires": { - "array-find-index": "1.0.2" - } - }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "requires": { - "es5-ext": "0.10.39" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true, - "requires": { - "get-stdin": "4.0.1", - "meow": "3.7.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, "requires": { "camelcase": "2.1.1", "map-obj": "1.0.1" @@ -891,60 +328,12 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, - "deep-eql": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", - "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", - "requires": { - "type-detect": "0.1.1" - }, - "dependencies": { - "type-detect": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", - "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=" - } - } - }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" - }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" - }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "deferred-leveldown": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", - "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", - "requires": { - "abstract-leveldown": "2.6.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", - "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", - "requires": { - "xtend": "4.0.1" - } - } - } - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" - }, "del": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", @@ -968,35 +357,6 @@ } } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "detective": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", - "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", - "requires": { - "acorn": "5.4.1", - "defined": "1.0.0" - } - }, "doctrine": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", @@ -1015,41 +375,6 @@ } } }, - "double-ended-queue": { - "version": "2.1.0-0", - "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", - "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=" - }, - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "requires": { - "readable-stream": "1.1.14" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - } - } - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, "edge-cs": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/edge-cs/-/edge-cs-1.2.1.tgz", @@ -1064,48 +389,6 @@ "nan": "2.9.2" } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "1.4.0" - } - }, - "end-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/end-stream/-/end-stream-0.1.0.tgz", - "integrity": "sha1-MgA/P0OKKwFDFoE3+PpumGbIHtU=", - "requires": { - "write-stream": "0.4.3" - } - }, - "equals": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/equals/-/equals-1.0.5.tgz", - "integrity": "sha1-ISBi3eXhpRDZVfE1mO/MamIbas4=", - "requires": { - "jkroso-type": "1.1.1" - } - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "requires": { - "prr": "1.0.1" - } - }, "error-ex": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", @@ -1115,20 +398,11 @@ "is-arrayish": "0.2.1" } }, - "es3ify": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/es3ify/-/es3ify-0.1.4.tgz", - "integrity": "sha1-rZ+l3xrjTz8x4SEbWBiy1RB439E=", - "requires": { - "esprima-fb": "3001.1.0-dev-harmony-fb", - "jstransform": "3.0.0", - "through": "2.3.8" - } - }, "es5-ext": { "version": "0.10.39", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.39.tgz", "integrity": "sha512-AlaXZhPHl0po/uxMx1tyrlt1O86M6D5iVaDH8UgLfgek4kXTX6vzsRfJQWC2Ku+aG8pkw1XWzh9eTkwfVrsD5g==", + "dev": true, "requires": { "es6-iterator": "2.0.3", "es6-symbol": "3.1.1" @@ -1138,6 +412,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, "requires": { "d": "1.0.0", "es5-ext": "0.10.39", @@ -1175,6 +450,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, "requires": { "d": "1.0.0", "es5-ext": "0.10.39" @@ -1192,11 +468,6 @@ "es6-symbol": "3.1.1" } }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -1221,11 +492,6 @@ "integrity": "sha1-V+UrApkA+AxGLhBUTwG8mglk0AU=", "dev": true }, - "esmangle-evaluator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esmangle-evaluator/-/esmangle-evaluator-1.0.1.tgz", - "integrity": "sha1-Yg2GbvSGGzMR91dm1SqFcrs8YzY=" - }, "espree": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/espree/-/espree-3.1.4.tgz", @@ -1244,11 +510,6 @@ } } }, - "esprima-fb": { - "version": "3001.1.0-dev-harmony-fb", - "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz", - "integrity": "sha1-t303q8046gt3Qmu4vCkizmtCZBE=" - }, "esrecurse": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", @@ -1279,11 +540,6 @@ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, "event-emitter": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", @@ -1300,14 +556,6 @@ "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", "dev": true }, - "execspawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/execspawn/-/execspawn-1.0.1.tgz", - "integrity": "sha1-gob53efOzeeQX73ATiTzaPI/jaY=", - "requires": { - "util-extend": "1.0.3" - } - }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -1320,211 +568,12 @@ "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", "dev": true }, - "expand-template": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.0.tgz", - "integrity": "sha512-kkjwkMqj0h4w/sb32ERCDxCQkREMCAgS39DscDnSwDsbxnwwM1BTZySdC3Bn1lhY7vL08n9GoO/fVTynjDgRyQ==" - }, - "express": { - "version": "4.15.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.15.4.tgz", - "integrity": "sha1-Ay4iU0ic+PzgJma+yj0R7XotrtE=", - "requires": { - "accepts": "1.3.4", - "array-flatten": "1.1.1", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.8", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.0.6", - "fresh": "0.5.0", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "1.1.5", - "qs": "6.5.0", - "range-parser": "1.2.0", - "send": "0.15.4", - "serve-static": "1.12.4", - "setprototypeof": "1.0.3", - "statuses": "1.3.1", - "type-is": "1.6.16", - "utils-merge": "1.0.0", - "vary": "1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "requires": { - "ms": "2.0.0" - } - }, - "qs": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.0.tgz", - "integrity": "sha512-fjVFjW9yhqMhVGwRExCXLhJKrLlkYSaxNWdyc9rmHlrVZbk35YHH312dFd7191uQeXkI3mKLZTIbSvIeFwFemg==" - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" - } - } - }, - "express-pouchdb": { - "version": "git://github.com/the-t-in-rtf/express-pouchdb.git#299582cd5bbe33e4057135413c34b72c2c8a7167", - "requires": { - "basic-auth": "2.0.0", - "bluebird": "3.5.1", - "body-parser": "1.18.2", - "compression": "1.7.1", - "cookie-parser": "1.4.3", - "extend": "3.0.1", - "header-case-normalizer": "1.0.3", - "mkdirp": "0.5.1", - "multiparty": "4.1.3", - "node-uuid": "1.4.8", - "on-finished": "2.3.0", - "pouchdb-all-dbs": "git://github.com/the-t-in-rtf/pouchdb-all-dbs.git#010173f4afa7b752787885ee8606eda4c1f047bb", - "pouchdb-auth": "2.1.1", - "pouchdb-find": "0.10.3", - "pouchdb-list": "1.1.0", - "pouchdb-replicator": "2.1.3", - "pouchdb-rewrite": "1.0.7", - "pouchdb-security": "1.2.6", - "pouchdb-show": "1.0.8", - "pouchdb-size": "1.2.2", - "pouchdb-update": "1.0.8", - "pouchdb-validation": "1.2.1", - "pouchdb-vhost": "1.0.2", - "pouchdb-wrappers": "1.3.6", - "raw-body": "2.3.2" - }, - "dependencies": { - "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "1.6.16" - } - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" - }, - "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "unpipe": "1.0.0" - } - } - } - }, - "express-session": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.15.6.tgz", - "integrity": "sha512-r0nrHTCYtAMrFwZ0kBzZEXa1vtPVrw0dKvGSrKP4dahwBQ1BJpF2/y1Pp4sCD/0kvxV4zZeclyvfmw0B4RMJQA==", - "requires": { - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "crc": "3.4.4", - "debug": "2.6.9", - "depd": "1.1.2", - "on-headers": "1.0.1", - "parseurl": "1.3.2", - "uid-safe": "2.1.5", - "utils-merge": "1.0.1" - }, - "dependencies": { - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - } - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "falafel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/falafel/-/falafel-1.2.0.tgz", - "integrity": "sha1-wY0k71CRF0pJfzGM0ksCaiXN2rQ=", - "requires": { - "acorn": "1.2.2", - "foreach": "2.0.5", - "isarray": "0.0.1", - "object-keys": "1.0.11" - }, - "dependencies": { - "acorn": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", - "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ=" - } - } - }, - "fast-future": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fast-future/-/fast-future-1.0.2.tgz", - "integrity": "sha1-hDWpqqAteSSNF9cE52JZMB2ZKAo=" - }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "requires": { - "pend": "1.2.0" - } - }, "ffi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ffi/-/ffi-2.0.0.tgz", @@ -1573,27 +622,6 @@ } } }, - "finalhandler": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", - "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" - } - } - }, "find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", @@ -1765,70 +793,14 @@ "fluid-resolve": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/fluid-resolve/-/fluid-resolve-1.3.0.tgz", - "integrity": "sha1-ODAp6xphlpgCvYVoTI4obm0sDf0=" - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.18" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fresh": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz", - "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44=" + "integrity": "sha1-ODAp6xphlpgCvYVoTI4obm0sDf0=", + "dev": true }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - }, - "gauge": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", - "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", - "requires": { - "ansi": "0.3.1", - "has-unicode": "2.0.1", - "lodash.pad": "4.5.1", - "lodash.padend": "4.6.1", - "lodash.padstart": "4.6.1" - } + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "generate-function": { "version": "2.0.0", @@ -1845,26 +817,11 @@ "is-property": "1.0.2" } }, - "get-folder-size": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/get-folder-size/-/get-folder-size-0.1.1.tgz", - "integrity": "sha1-0bhMUQC/lqfFE4DqPOBAAiEIqKA=", - "requires": { - "async": "0.9.2", - "minimist": "0.1.0" - }, - "dependencies": { - "minimist": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", - "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=" - } - } - }, "get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true }, "getobject": { "version": "0.1.0", @@ -1872,60 +829,11 @@ "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "ghreleases": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/ghreleases/-/ghreleases-1.0.7.tgz", - "integrity": "sha512-1lFGyLLF38Q6cFCDyebN5vzQ2P9DEaAgxPIDLmQwQDVDmUe2Wgv+6dhAIoHeA+My4HLpaJ+dKF73xtuykN2cbQ==", - "requires": { - "after": "0.8.2", - "ghrepos": "2.1.0", - "ghutils": "3.2.2", - "simple-mime": "0.1.0", - "url-template": "2.0.8", - "xtend": "4.0.1" - } - }, - "ghrepos": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ghrepos/-/ghrepos-2.1.0.tgz", - "integrity": "sha512-6GM0ohSDTAv7xD6GsKfxJiV/CajoofRyUwu0E8l29d1o6lFAUxmmyMP/FH33afA20ZrXzxxcTtN6TsYvudMoAg==", - "requires": { - "ghutils": "3.2.2" - } - }, - "ghutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/ghutils/-/ghutils-3.2.2.tgz", - "integrity": "sha512-6SqTlzs89EtYRlafY8oavTnn/vEErgRSnMsuFDwOzNgK34mpHXTBinh6rTx6xwqei3d3BWyrSTQ8uN9kPpEQtg==", - "requires": { - "jsonist": "2.1.0", - "xtend": "4.0.1" - } - }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" - }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", @@ -1963,2989 +871,4893 @@ } } }, - "gpii-express": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/gpii-express/-/gpii-express-1.0.12.tgz", - "integrity": "sha1-UgcfZyS/7QcgQdlgFk2oDTwWymI=", + "gpii-universal": { + "version": "file:../universal", "requires": { - "body-parser": "1.18.2", - "cookie-parser": "1.4.3", - "express": "4.16.2", - "express-session": "1.15.6", - "infusion": "3.0.0-dev.20171117T095227Z.67ff934" + "body-parser": "1.17.2", + "connect-ensure-login": "0.1.1", + "express": "4.15.4", + "fluid-resolve": "1.3.0", + "glob": "7.1.2", + "gpii-pouchdb": "1.0.9", + "infusion": "3.0.0-dev.20180222T160835Z.6e1311a", + "ini": "git://github.com/GPII/ini.git#be8a04aa22f5ad9321ebcbba7740314a53bc8ab2", + "json5": "0.5.1", + "kettle": "1.7.1", + "mkdirp": "0.5.1", + "ndef": "0.1.3", + "nock": "9.1.0", + "node-jqunit": "1.1.8", + "node-uuid": "1.4.8", + "oauth2orize": "1.8.0", + "passport": "0.3.2", + "passport-oauth2-client-password": "0.1.2", + "rimraf": "2.6.1", + "semver": "5.4.1", + "write-file-atomic": "2.3.0", + "xml-mapping": "1.7.1" }, "dependencies": { - "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "1.6.16" - } + "JSV": { + "version": "4.0.2", + "bundled": true }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + "abbrev": { + "version": "1.1.1", + "bundled": true }, - "express": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", - "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "abstract-leveldown": { + "version": "2.7.2", + "bundled": true, "requires": { - "accepts": "1.3.4", - "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.0", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.3", - "qs": "6.5.1", - "range-parser": "1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.1", - "serve-static": "1.13.1", - "setprototypeof": "1.1.0", - "statuses": "1.3.1", - "type-is": "1.6.16", - "utils-merge": "1.0.1", - "vary": "1.1.2" + "xtend": "4.0.1" } }, - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "accepts": { + "version": "1.3.5", + "bundled": true, "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" + "mime-types": "2.1.18", + "negotiator": "0.6.1" } }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "acorn": { + "version": "5.5.3", + "bundled": true }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + "after": { + "version": "0.8.2", + "bundled": true }, - "infusion": { - "version": "3.0.0-dev.20171117T095227Z.67ff934", - "resolved": "https://registry.npmjs.org/infusion/-/infusion-3.0.0-dev.20171117T095227Z.67ff934.tgz", - "integrity": "sha1-0Ng2s0OqbbiMDez+rnHmJ11BQg4=", + "ajv": { + "version": "4.11.8", + "bundled": true, "requires": { - "fluid-resolve": "1.3.0" + "co": "4.6.0", + "json-stable-stringify": "1.0.1" } }, - "ipaddr.js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", - "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" + "amdefine": { + "version": "1.0.1", + "bundled": true }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + "ansi": { + "version": "0.3.1", + "bundled": true }, - "proxy-addr": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", - "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "ansi-styles": { + "version": "1.0.0", + "bundled": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.6.0" + "delegates": "1.0.0", + "readable-stream": "2.3.5" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", + "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } + } } }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + "argsarray": { + "version": "0.0.1", + "bundled": true }, - "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "array-flatten": { + "version": "1.1.1", + "bundled": true + }, + "array-index": { + "version": "1.0.0", + "bundled": true, "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "unpipe": "1.0.0" + "debug": "2.6.7", + "es6-symbol": "3.1.1" } }, - "send": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", - "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "asn1": { + "version": "0.2.3", + "bundled": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true + }, + "assertion-error": { + "version": "1.1.0", + "bundled": true + }, + "ast-types": { + "version": "0.9.6", + "bundled": true + }, + "async": { + "version": "0.9.2", + "bundled": true + }, + "async-limiter": { + "version": "1.0.0", + "bundled": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true + }, + "attempt-x": { + "version": "1.1.3", + "bundled": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "base62": { + "version": "0.1.1", + "bundled": true + }, + "base64url": { + "version": "1.0.6", + "bundled": true, "requires": { - "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.3.1" + "concat-stream": "1.4.11", + "meow": "2.0.0" } }, - "serve-static": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", - "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "basic-auth": { + "version": "2.0.0", + "bundled": true, "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.1" + "safe-buffer": "5.1.1" } }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" - }, - "utils-merge": { + "bcrypt-pbkdf": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - } - } - }, - "gpii-pouchdb": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/gpii-pouchdb/-/gpii-pouchdb-1.0.9.tgz", - "integrity": "sha512-fmmKxRdTAaf4/iEndqIEUDWuCtm/fRoCttD3Z9tXFjvwxnlCEhKawHvtw0zxDtbeRR+BcT4l8K+EK4jyPqJgwg==", - "requires": { - "body-parser": "1.18.2", - "express": "4.16.2", - "express-pouchdb": "git://github.com/the-t-in-rtf/express-pouchdb.git#299582cd5bbe33e4057135413c34b72c2c8a7167", - "gpii-express": "1.0.12", - "graceful-fs": "4.1.11", - "infusion": "3.0.0-dev.20171117T095227Z.67ff934", - "lie": "3.1.1", - "memdown": "1.4.1", - "pouchdb": "6.3.4", - "underscore-node": "0.1.2" - }, - "dependencies": { - "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "bundled": true, + "optional": true, "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "1.6.16" + "tweetnacl": "0.14.5" } }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + "bindings": { + "version": "1.2.1", + "bundled": true }, - "express": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", - "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "bl": { + "version": "1.2.1", + "bundled": true, "requires": { - "accepts": "1.3.4", - "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "content-disposition": "0.5.2", + "readable-stream": "2.3.5" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", + "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "2.0.3" + } + }, + "bluebird": { + "version": "3.5.1", + "bundled": true + }, + "body-parser": { + "version": "1.17.2", + "bundled": true, + "requires": { + "bytes": "2.4.0", "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", + "debug": "2.6.7", "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.0", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", + "http-errors": "1.6.2", + "iconv-lite": "0.4.15", "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.3", - "qs": "6.5.1", - "range-parser": "1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.1", - "serve-static": "1.13.1", - "setprototypeof": "1.1.0", - "statuses": "1.3.1", - "type-is": "1.6.16", - "utils-merge": "1.0.1", - "vary": "1.1.2" + "qs": "6.4.0", + "raw-body": "2.2.0", + "type-is": "1.6.16" } }, - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "boom": { + "version": "2.10.1", + "bundled": true, "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" + "hoek": "2.16.3" } }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } }, - "infusion": { - "version": "3.0.0-dev.20171117T095227Z.67ff934", - "resolved": "https://registry.npmjs.org/infusion/-/infusion-3.0.0-dev.20171117T095227Z.67ff934.tgz", - "integrity": "sha1-0Ng2s0OqbbiMDez+rnHmJ11BQg4=", + "buffer-from": { + "version": "0.1.1", + "bundled": true, "requires": { - "fluid-resolve": "1.3.0" + "is-array-buffer-x": "1.7.0" } }, - "ipaddr.js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", - "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" + "bytes": { + "version": "2.4.0", + "bundled": true }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + "cached-constructors-x": { + "version": "1.0.2", + "bundled": true }, - "proxy-addr": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", - "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "camelcase": { + "version": "1.2.1", + "bundled": true + }, + "camelcase-keys": { + "version": "1.0.0", + "bundled": true, "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.6.0" + "camelcase": "1.2.1", + "map-obj": "1.0.1" } }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + "caseless": { + "version": "0.12.0", + "bundled": true }, - "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "chai": { + "version": "3.5.0", + "bundled": true, "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "unpipe": "1.0.0" + "assertion-error": "1.1.0", + "deep-eql": "0.1.3", + "type-detect": "1.0.0" } }, - "send": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", - "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "chalk": { + "version": "0.4.0", + "bundled": true, "requires": { - "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.3.1" + "ansi-styles": "1.0.0", + "has-color": "0.1.7", + "strip-ansi": "0.1.1" } }, - "serve-static": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", - "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "chownr": { + "version": "1.0.1", + "bundled": true + }, + "clone-buffer": { + "version": "1.0.0", + "bundled": true + }, + "co": { + "version": "4.6.0", + "bundled": true + }, + "combined-stream": { + "version": "1.0.6", + "bundled": true, "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.1" + "delayed-stream": "1.0.0" } }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + "commander": { + "version": "2.15.0", + "bundled": true }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + "commoner": { + "version": "0.10.8", + "bundled": true, + "requires": { + "commander": "2.15.0", + "detective": "4.7.1", + "glob": "5.0.15", + "graceful-fs": "4.1.11", + "iconv-lite": "0.4.15", + "mkdirp": "0.5.1", + "private": "0.1.8", + "q": "1.5.1", + "recast": "0.11.23" + }, + "dependencies": { + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + } + } }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - } - } - }, - "gpii-universal": { - "version": "0.3.0-dev.20180222T171713Z.7fe2b3b", - "resolved": "https://registry.npmjs.org/gpii-universal/-/gpii-universal-0.3.0-dev.20180222T171713Z.7fe2b3b.tgz", - "integrity": "sha512-JBgQgk4xxCdnkOAWkBQvrTQk9y+kB7k1KGWE9H92ed1zo5/6JtOb7/bZpp3tbXERIJOt7L3mMQ9W0zXBPuk46Q==", - "requires": { - "body-parser": "1.17.2", - "connect-ensure-login": "0.1.1", - "express": "4.15.4", - "fluid-resolve": "1.3.0", - "glob": "7.1.2", - "gpii-pouchdb": "1.0.9", - "infusion": "3.0.0-dev.20180222T160835Z.6e1311a", - "ini": "git://github.com/GPII/ini.git#be8a04aa22f5ad9321ebcbba7740314a53bc8ab2", - "json5": "0.5.1", - "kettle": "1.7.1", - "mkdirp": "0.5.1", - "nock": "9.1.0", - "node-jqunit": "1.1.8", - "node-uuid": "1.4.8", - "oauth2orize": "1.8.0", - "passport": "0.3.2", - "passport-oauth2-client-password": "0.1.2", - "rimraf": "2.6.1", - "semver": "5.4.1", - "write-file-atomic": "2.3.0", - "xml-mapping": "1.7.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "grunt": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.2.tgz", - "integrity": "sha1-TmpeaVtwRy/VME9fqeNCNoNqc7w=", - "dev": true, - "requires": { - "coffeescript": "1.10.0", - "dateformat": "1.0.12", - "eventemitter2": "0.4.14", - "exit": "0.1.2", - "findup-sync": "0.3.0", - "glob": "7.0.6", - "grunt-cli": "1.2.0", - "grunt-known-options": "1.1.0", - "grunt-legacy-log": "1.0.0", - "grunt-legacy-util": "1.0.0", - "iconv-lite": "0.4.15", - "js-yaml": "3.5.5", - "minimatch": "3.0.4", - "nopt": "3.0.6", - "path-is-absolute": "1.0.1", - "rimraf": "2.2.8" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true + "compressible": { + "version": "2.0.13", + "bundled": true, + "requires": { + "mime-db": "1.33.0" + } }, - "glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", - "dev": true, + "compression": { + "version": "1.7.1", + "bundled": 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" + "accepts": "1.3.5", + "bytes": "3.0.0", + "compressible": "2.0.13", + "debug": "2.6.9", + "on-headers": "1.0.1", + "safe-buffer": "5.1.1", + "vary": "1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } } }, - "grunt-cli": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", - "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", - "dev": true, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "concat-stream": { + "version": "1.4.11", + "bundled": true, "requires": { - "findup-sync": "0.3.0", - "grunt-known-options": "1.1.0", - "nopt": "3.0.6", - "resolve": "1.1.7" + "inherits": "2.0.3", + "readable-stream": "1.1.14", + "typedarray": "0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + } } }, - "js-yaml": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz", - "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=", - "dev": true, + "connect-ensure-login": { + "version": "0.1.1", + "bundled": true + }, + "content-disposition": { + "version": "0.5.2", + "bundled": true + }, + "content-type": { + "version": "1.0.4", + "bundled": true + }, + "cookie": { + "version": "0.3.1", + "bundled": true + }, + "cookie-parser": { + "version": "1.4.3", + "bundled": true, "requires": { - "argparse": "1.0.10", - "esprima": "2.7.3" + "cookie": "0.3.1", + "cookie-signature": "1.0.6" } }, - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "dev": true - } - } - }, - "grunt-jsonlint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grunt-jsonlint/-/grunt-jsonlint-1.1.0.tgz", - "integrity": "sha1-ox7pckCu4/NDyiY8Rb1TIGMSfbI=", - "dev": true, - "requires": { - "jsonlint": "1.6.2", - "strip-json-comments": "2.0.1" - } - }, - "grunt-known-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz", - "integrity": "sha1-pCdO6zL6dl2lp6OxcSYXzjsUQUk=", - "dev": true - }, - "grunt-legacy-log": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.0.tgz", - "integrity": "sha1-+4bxgJhHvAfcR4Q/ns1srLYt8tU=", - "dev": true, - "requires": { - "colors": "1.1.2", - "grunt-legacy-log-utils": "1.0.0", - "hooker": "0.2.3", - "lodash": "3.10.1", - "underscore.string": "3.2.3" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } - } - }, - "grunt-legacy-log-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz", - "integrity": "sha1-p7ji0Ps1taUPSvmG/BEnSevJbz0=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "lodash": "4.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true + "cookie-signature": { + "version": "1.0.6", + "bundled": true }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "couchdb-calculate-session-id": { + "version": "1.1.2", + "bundled": 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" + "aproba": "1.2.0", + "base64url": "2.0.0", + "crypto-lite": "0.2.0" + }, + "dependencies": { + "base64url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", + "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=" + }, + "crypto-lite": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/crypto-lite/-/crypto-lite-0.2.0.tgz", + "integrity": "sha1-OhTPYwOEYaXrhZRd54vwTeTar3M=" + } } }, - "lodash": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", - "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", - "dev": true + "couchdb-eval": { + "version": "1.0.6", + "bundled": true, + "requires": { + "extend": "1.3.0", + "pouchdb-plugin-error": "1.0.1" + }, + "dependencies": { + "extend": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", + "integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=" + } + } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, + "couchdb-objects": { + "version": "1.0.7", + "bundled": true, "requires": { - "ansi-regex": "2.1.1" + "extend": "1.3.0", + "header-case-normalizer": "1.0.3", + "is-empty": "0.0.1", + "pouchdb-promise": "0.0.0", + "random-uuid-v4": "0.0.4" + }, + "dependencies": { + "bluebird": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.2.4.tgz", + "integrity": "sha1-WYXsI8tv8aWDTMZEezxe8BD9Mho=" + }, + "extend": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", + "integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=" + }, + "lie": { + "version": "2.7.7", + "resolved": "https://registry.npmjs.org/lie/-/lie-2.7.7.tgz", + "integrity": "sha1-fPlZvtSJWbBi8Drka7vzqsMCark=", + "requires": { + "immediate": "3.0.6" + } + }, + "pouchdb-promise": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-0.0.0.tgz", + "integrity": "sha1-PAFOYndm2UW+PycOB5p9tNLRmCc=", + "requires": { + "bluebird": "1.2.4", + "lie": "2.7.7" + } + } } - } - } - }, - "grunt-legacy-util": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz", - "integrity": "sha1-OGqnjcbtUJhsKxiVcmWxtIq7m4Y=", - "dev": true, - "requires": { - "async": "1.5.2", - "exit": "0.1.2", - "getobject": "0.1.0", - "hooker": "0.2.3", - "lodash": "4.3.0", - "underscore.string": "3.2.3", - "which": "1.2.14" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true }, - "lodash": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", - "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", - "dev": true + "couchdb-render": { + "version": "1.0.1", + "bundled": true, + "requires": { + "couchdb-eval": "1.0.6", + "couchdb-resp-completer": "1.0.3", + "extend": "1.3.0", + "is-empty": "0.0.1", + "pouchdb-plugin-error": "1.0.1" + }, + "dependencies": { + "extend": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", + "integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=" + } + } }, - "which": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", - "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", - "dev": true, + "couchdb-resp-completer": { + "version": "1.0.3", + "bundled": true, "requires": { - "isexe": "2.0.0" + "extend": "1.3.0", + "is-empty": "0.0.1", + "pouchdb-plugin-error": "1.0.1" + }, + "dependencies": { + "extend": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", + "integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=" + } } - } - } - }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "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, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-color": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", - "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=" - }, - "has-own-property-x": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/has-own-property-x/-/has-own-property-x-3.2.0.tgz", - "integrity": "sha512-HtRQTYpRFz/YVaQ7jh2mU5iorMAxFcML9FNOLMI1f8VNJ2K0hpOlXoi1a+nmVl6oUcGnhd6zYOFAVe7NUFStyQ==", - "requires": { - "cached-constructors-x": "1.0.0", - "to-object-x": "1.5.0", - "to-property-key-x": "2.0.2" - } - }, - "has-symbol-support-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.1.tgz", - "integrity": "sha512-JkaetveU7hFbqnAC1EV1sF4rlojU2D4Usc5CmS69l6NfmPDnpnFUegzFg33eDkkpNCxZ0mQp65HwUDrNFS/8MA==" - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "requires": { - "has-symbol-support-x": "1.4.1" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "header-case-normalizer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/header-case-normalizer/-/header-case-normalizer-1.0.3.tgz", - "integrity": "sha1-+x1MjQxhadyrT3x+IbGGpqIqwME=" - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" - }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", - "dev": true - }, - "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", - "dev": true - }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.4.0" - }, - "dependencies": { + }, + "crc": { + "version": "3.4.4", + "bundled": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "requires": { + "boom": "2.10.1" + } + }, + "crypto-lite": { + "version": "0.1.0", + "bundled": true + }, + "d": { + "version": "1.0.0", + "bundled": true, + "requires": { + "es5-ext": "0.10.41" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "debug": { + "version": "2.6.7", + "bundled": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-eql": { + "version": "0.1.3", + "bundled": true, + "requires": { + "type-detect": "0.1.1" + }, + "dependencies": { + "type-detect": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", + "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=" + } + } + }, + "deep-equal": { + "version": "1.0.1", + "bundled": true + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true + }, + "deferred-leveldown": { + "version": "1.2.2", + "bundled": true, + "requires": { + "abstract-leveldown": "2.6.3" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", + "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", + "requires": { + "xtend": "4.0.1" + } + } + } + }, + "defined": { + "version": "1.0.0", + "bundled": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true + }, "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" - } - } - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" - } - }, - "hyperquest": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/hyperquest/-/hyperquest-2.1.3.tgz", - "integrity": "sha512-fUuDOrB47PqNK/BAMOS13v41UoaqIxqSLHX6CAbOD7OfT+/GCWO1/vPLfTNutOeXrv1ikuaZ3yux+33Z9vh+rw==", - "requires": { - "buffer-from": "0.1.1", - "duplexer2": "0.0.2", - "through2": "0.6.5" - } - }, - "iconv-lite": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", - "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=" - }, - "ignore": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", - "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", - "dev": true - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "indent-string": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-1.2.2.tgz", - "integrity": "sha1-25m8xYPrarux5I3LsZmamGBBy2s=", - "requires": { - "get-stdin": "4.0.1", - "minimist": "1.2.0", - "repeating": "1.1.3" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } - }, - "infinity-x": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/infinity-x/-/infinity-x-1.0.0.tgz", - "integrity": "sha512-wjy2TupBtZ+aAniKt+xs/PO0xOkuaL6wBysUKbgD7aL1PMW/qY5xXDG59zXZ7dU+gk3zwXOu4yIEWPCEFBTgHQ==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "infusion": { - "version": "3.0.0-dev.20180222T160835Z.6e1311a", - "resolved": "https://registry.npmjs.org/infusion/-/infusion-3.0.0-dev.20180222T160835Z.6e1311a.tgz", - "integrity": "sha512-k6TIR8mTns3p35Q5knx+HZZpr3748S7nMiZqkAb4zg+xR1c2vRYSMegi5wWeYuBLe14AP0yTmamYu9eQsnCBDw==", - "requires": { - "fluid-resolve": "1.3.0" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "git://github.com/GPII/ini.git#be8a04aa22f5ad9321ebcbba7740314a53bc8ab2" - }, - "inline-process-browser": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/inline-process-browser/-/inline-process-browser-1.0.0.tgz", - "integrity": "sha1-RqYbFT3TybFiSxoAYm7bT39BTyI=", - "requires": { - "falafel": "1.2.0", - "through2": "0.6.5" - } - }, - "inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "dev": true, - "requires": { - "ansi-escapes": "1.4.0", - "ansi-regex": "2.1.1", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-width": "2.2.0", - "figures": "1.7.0", - "lodash": "4.17.5", - "readline2": "1.0.1", - "run-async": "0.1.0", - "rx-lite": "3.1.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "through": "2.3.8" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true + "version": "1.1.2", + "bundled": true }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, + "destroy": { + "version": "1.0.4", + "bundled": true + }, + "detective": { + "version": "4.7.1", + "bundled": 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" + "acorn": "5.5.3", + "defined": "1.0.0" } }, - "strip-ansi": { + "double-ended-queue": { + "version": "2.1.0-0", + "bundled": true + }, + "duplexer2": { + "version": "0.0.2", + "bundled": true, + "requires": { + "readable-stream": "1.1.14" + }, + "dependencies": { + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + } + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "ee-first": { + "version": "1.1.1", + "bundled": true + }, + "encodeurl": { + "version": "1.0.2", + "bundled": true + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "requires": { + "once": "1.4.0" + } + }, + "end-stream": { + "version": "0.1.0", + "bundled": true, + "requires": { + "write-stream": "0.4.3" + } + }, + "equals": { + "version": "1.0.5", + "bundled": true, + "requires": { + "jkroso-type": "1.1.1" + } + }, + "errno": { + "version": "0.1.7", + "bundled": true, + "requires": { + "prr": "1.0.1" + } + }, + "es3ify": { + "version": "0.1.4", + "bundled": true, + "requires": { + "esprima-fb": "3001.1.0-dev-harmony-fb", + "jstransform": "3.0.0", + "through": "2.3.8" + } + }, + "es5-ext": { + "version": "0.10.41", + "bundled": true, + "requires": { + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "next-tick": "1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "bundled": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.41", + "es6-symbol": "3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.1", + "bundled": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.41" + } + }, + "escape-html": { + "version": "1.0.3", + "bundled": true + }, + "esmangle-evaluator": { + "version": "1.0.1", + "bundled": true + }, + "esprima-fb": { + "version": "3001.1.0-dev-harmony-fb", + "bundled": true + }, + "etag": { + "version": "1.8.1", + "bundled": true + }, + "execspawn": { + "version": "1.0.1", + "bundled": true, + "requires": { + "util-extend": "1.0.3" + } + }, + "expand-template": { + "version": "1.1.0", + "bundled": true + }, + "express": { + "version": "4.15.4", + "bundled": true, + "requires": { + "accepts": "1.3.5", + "array-flatten": "1.1.1", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.8", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.0.6", + "fresh": "0.5.0", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "1.1.5", + "qs": "6.5.0", + "range-parser": "1.2.0", + "send": "0.15.4", + "serve-static": "1.12.4", + "setprototypeof": "1.0.3", + "statuses": "1.3.1", + "type-is": "1.6.16", + "utils-merge": "1.0.0", + "vary": "1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "requires": { + "ms": "2.0.0" + } + }, + "qs": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.0.tgz", + "integrity": "sha512-fjVFjW9yhqMhVGwRExCXLhJKrLlkYSaxNWdyc9rmHlrVZbk35YHH312dFd7191uQeXkI3mKLZTIbSvIeFwFemg==" + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + } + } + }, + "express-pouchdb": { + "version": "git://github.com/the-t-in-rtf/express-pouchdb.git#299582cd5bbe33e4057135413c34b72c2c8a7167", + "bundled": true, + "requires": { + "basic-auth": "2.0.0", + "bluebird": "3.5.1", + "body-parser": "1.18.2", + "compression": "1.7.1", + "cookie-parser": "1.4.3", + "extend": "3.0.1", + "header-case-normalizer": "1.0.3", + "mkdirp": "0.5.1", + "multiparty": "4.1.3", + "node-uuid": "1.4.8", + "on-finished": "2.3.0", + "pouchdb-all-dbs": "git://github.com/the-t-in-rtf/pouchdb-all-dbs.git#010173f4afa7b752787885ee8606eda4c1f047bb", + "pouchdb-auth": "2.1.1", + "pouchdb-find": "0.10.3", + "pouchdb-list": "1.1.0", + "pouchdb-replicator": "2.1.3", + "pouchdb-rewrite": "1.0.7", + "pouchdb-security": "1.2.6", + "pouchdb-show": "1.0.8", + "pouchdb-size": "1.2.2", + "pouchdb-update": "1.0.8", + "pouchdb-validation": "1.2.1", + "pouchdb-vhost": "1.0.2", + "pouchdb-wrappers": "1.3.6", + "raw-body": "2.3.2" + }, + "dependencies": { + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.16" + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + } + } + } + }, + "express-session": { + "version": "1.15.6", + "bundled": true, + "requires": { + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "crc": "3.4.4", + "debug": "2.6.9", + "depd": "1.1.2", + "on-headers": "1.0.1", + "parseurl": "1.3.2", + "uid-safe": "2.1.5", + "utils-merge": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + } + } + }, + "extend": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, + "bundled": true + }, + "extsprintf": { + "version": "1.3.0", + "bundled": true + }, + "falafel": { + "version": "1.2.0", + "bundled": true, "requires": { - "ansi-regex": "2.1.1" + "acorn": "1.2.2", + "foreach": "2.0.5", + "isarray": "0.0.1", + "object-keys": "1.0.11" + }, + "dependencies": { + "acorn": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", + "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ=" + } } - } - } - }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", - "dev": true - }, - "ipaddr.js": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz", - "integrity": "sha1-KWrKh4qCGBbluF0KKFqZvP9FgvA=" - }, - "is-array": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-array/-/is-array-1.0.1.tgz", - "integrity": "sha1-6YUMwsyGDDvAl36EzPDdRkWEJ5o=" - }, - "is-array-buffer-x": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/is-array-buffer-x/-/is-array-buffer-x-1.7.0.tgz", - "integrity": "sha512-ufSZRMY2WZX5xyNvk0NOZAG7cgi35B/sGQDGqv8w0X7MoQ2GC9vedanJhuYTPaC4PUCqLQsda1w7NF+dPZmAJw==", - "requires": { - "attempt-x": "1.1.1", - "has-to-string-tag-x": "1.4.1", - "is-object-like-x": "1.6.0", - "object-get-own-property-descriptor-x": "3.2.0", - "to-string-tag-x": "1.4.2" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-builtin-module": { - "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-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=" - }, - "is-empty": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/is-empty/-/is-empty-0.0.1.tgz", - "integrity": "sha1-Cf3D1kndpZaRVsCFOpt2vXgcWjM=" - }, - "is-falsey-x": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-falsey-x/-/is-falsey-x-1.0.1.tgz", - "integrity": "sha512-XWNZC4A+3FX1ECoMjspuEFgSdio82IWjqY/suE0gZ10QA7nzHd/KraRq7Tc5VEHtFRgTRyTdY6W+ykPrDnyoAQ==", - "requires": { - "to-boolean-x": "1.0.1" - } - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-finite-x": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-finite-x/-/is-finite-x-3.0.2.tgz", - "integrity": "sha512-HyFrxJZsgmP5RtR1PVlVvHSP4VslZOqr4uoq4x3rDrSOFaYp4R9tfmiWtAzQxPzixXhac3cYEno3NuVn0OHk2Q==", - "requires": { - "infinity-x": "1.0.0", - "is-nan-x": "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, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-function-x": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/is-function-x/-/is-function-x-3.3.0.tgz", - "integrity": "sha512-SreSSU1dlgYaXR5c0mm4qJHKYHIiGiEY+7Cd8/aRLLoMP/VvofD2XcWgBnP833ajpU5XzXbUSpfysnfKZLJFlg==", - "requires": { - "attempt-x": "1.1.1", - "has-to-string-tag-x": "1.4.1", - "is-falsey-x": "1.0.1", - "is-primitive": "2.0.0", - "normalize-space-x": "3.0.0", - "replace-comments-x": "2.0.0", - "to-boolean-x": "1.0.1", - "to-string-tag-x": "1.4.2" - } - }, - "is-index-x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-index-x/-/is-index-x-1.1.0.tgz", - "integrity": "sha512-qULKLMepQLGC8rSVdi8uF2vI4LiDrU9XSDg1D+Aa657GIB7GV1jHpga7uXgQvkt/cpQ5mVBHUFTpSehYSqT6+A==", - "requires": { - "math-clamp-x": "1.2.0", - "max-safe-integer": "1.0.1", - "to-integer-x": "3.0.0", - "to-number-x": "2.0.0", - "to-string-symbols-supported-x": "1.0.0" - } - }, - "is-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", - "dev": true - }, - "is-my-json-valid": { - "version": "2.17.2", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", - "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", - "dev": true, - "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "is-my-ip-valid": "1.0.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" - } - }, - "is-nan-x": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-nan-x/-/is-nan-x-1.0.1.tgz", - "integrity": "sha512-VfNJgfuT8USqKCYQss8g7sFvCzDnL+OOVMQoXhVoulZAyp0ZTj3oyZaaPrn2dxepAkKSQI2BiKHbBabX1DqVtw==" - }, - "is-nil-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/is-nil-x/-/is-nil-x-1.4.1.tgz", - "integrity": "sha512-cfTKWI5iSR04SSCzzugTH5tS2rYG7kwI8yl/AqWkyuxZ7k55cbA47Y7Lezdg1N9aaELd+UxLg628bdQeNQ6BUw==", - "requires": { - "lodash.isnull": "3.0.0", - "validate.io-undefined": "1.0.3" - } - }, - "is-object-like-x": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/is-object-like-x/-/is-object-like-x-1.6.0.tgz", - "integrity": "sha512-mc3dBMv1jEOdk0f1i2RkJFsZDux0MuHqGwHOoRo770ShUOf4VE6tWThAW8dAZARr9a5RN+iNX1yzMDA5ad1clQ==", - "requires": { - "is-function-x": "3.3.0", - "is-primitive": "2.0.0" - } - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, - "requires": { - "is-path-inside": "1.0.1" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-string": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", - "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=" - }, - "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "jkroso-type": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/jkroso-type/-/jkroso-type-1.1.1.tgz", - "integrity": "sha1-vEztbWxF/gdFKCuvyGqfjE/JzmE=" - }, - "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", - "dev": true, - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true - } - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "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=", - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "jsonist": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/jsonist/-/jsonist-2.1.0.tgz", - "integrity": "sha1-RHek0WzTd/rsWNjPhwt+OS9tf+k=", - "requires": { - "bl": "1.2.1", - "hyperquest": "2.1.3", - "json-stringify-safe": "5.0.1", - "xtend": "4.0.1" - } - }, - "jsonlint": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.2.tgz", - "integrity": "sha1-VzcEUIX1XrRVxosf9OvAG9UOiDA=", - "requires": { - "JSV": "4.0.2", - "nomnom": "1.8.1" - } - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "jstransform": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-3.0.0.tgz", - "integrity": "sha1-olkats7o2XvzvoMNv6IxO4fNZAs=", - "requires": { - "base62": "0.1.1", - "esprima-fb": "3001.1.0-dev-harmony-fb", - "source-map": "0.1.31" - } - }, - "kettle": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/kettle/-/kettle-1.7.1.tgz", - "integrity": "sha1-T0UJs9ymqjufG99tTucI/+C9P74=", - "requires": { - "body-parser": "1.18.2", - "cookie-parser": "1.4.3", - "express": "4.16.2", - "express-session": "1.15.6", - "fluid-resolve": "1.3.0", - "infusion": "3.0.0-dev.20171117T095227Z.67ff934", - "json5": "0.5.1", - "jsonlint": "1.6.2", - "path-to-regexp": "1.7.0", - "serve-static": "1.13.1", - "ws": "3.3.1" - }, - "dependencies": { - "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + }, + "fast-future": { + "version": "1.0.2", + "bundled": true + }, + "fd-slicer": { + "version": "1.0.1", + "bundled": true, "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "1.6.16" + "pend": "1.2.0" } }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "express": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", - "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "finalhandler": { + "version": "1.0.6", + "bundled": true, "requires": { - "accepts": "1.3.4", - "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.2", "encodeurl": "1.0.2", "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.0", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", "on-finished": "2.3.0", "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.3", - "qs": "6.5.1", - "range-parser": "1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.1", - "serve-static": "1.13.1", - "setprototypeof": "1.1.0", "statuses": "1.3.1", - "type-is": "1.6.16", - "utils-merge": "1.0.1", - "vary": "1.1.2" + "unpipe": "1.0.0" }, "dependencies": { - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" } } }, - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "fluid-resolve": { + "version": "1.3.0", + "bundled": true + }, + "foreach": { + "version": "2.0.5", + "bundled": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" } }, + "forwarded": { + "version": "0.1.2", + "bundled": true + }, "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "version": "0.5.0", + "bundled": true }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + "fs.realpath": { + "version": "1.0.0", + "bundled": true }, - "infusion": { - "version": "3.0.0-dev.20171117T095227Z.67ff934", - "resolved": "https://registry.npmjs.org/infusion/-/infusion-3.0.0-dev.20171117T095227Z.67ff934.tgz", - "integrity": "sha1-0Ng2s0OqbbiMDez+rnHmJ11BQg4=", + "fstream": { + "version": "1.0.11", + "bundled": true, "requires": { - "fluid-resolve": "1.3.0" + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" } }, - "ipaddr.js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", - "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" + "functional-red-black-tree": { + "version": "1.0.1", + "bundled": true }, - "mime": { + "gauge": { + "version": "1.2.7", + "bundled": true, + "requires": { + "ansi": "0.3.1", + "has-unicode": "2.0.1", + "lodash.pad": "4.5.1", + "lodash.padend": "4.6.1", + "lodash.padstart": "4.6.1" + } + }, + "get-folder-size": { + "version": "0.1.1", + "bundled": true, + "requires": { + "async": "0.9.2", + "minimist": "0.1.0" + }, + "dependencies": { + "minimist": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", + "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=" + } + } + }, + "get-stdin": { + "version": "4.0.1", + "bundled": true + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "ghreleases": { + "version": "1.0.7", + "bundled": true, + "requires": { + "after": "0.8.2", + "ghrepos": "2.1.0", + "ghutils": "3.2.2", + "simple-mime": "0.1.0", + "url-template": "2.0.8", + "xtend": "4.0.1" + } + }, + "ghrepos": { + "version": "2.1.0", + "bundled": true, + "requires": { + "ghutils": "3.2.2" + } + }, + "ghutils": { + "version": "3.2.2", + "bundled": true, + "requires": { + "jsonist": "2.1.0", + "xtend": "4.0.1" + } + }, + "github-from-package": { + "version": "0.0.0", + "bundled": true + }, + "glob": { + "version": "7.1.2", + "bundled": 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" + } + }, + "gpii-express": { + "version": "1.0.12", + "bundled": true, + "requires": { + "body-parser": "1.18.2", + "cookie-parser": "1.4.3", + "express": "4.16.2", + "express-session": "1.15.6", + "infusion": "3.0.0-dev.20171117T095227Z.67ff934" + }, + "dependencies": { + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.16" + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "express": { + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", + "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "requires": { + "accepts": "1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.0", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.3", + "qs": "6.5.1", + "range-parser": "1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.1", + "serve-static": "1.13.1", + "setprototypeof": "1.1.0", + "statuses": "1.3.1", + "type-is": "1.6.16", + "utils-merge": "1.0.1", + "vary": "1.1.2" + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "infusion": { + "version": "3.0.0-dev.20171117T095227Z.67ff934", + "resolved": "https://registry.npmjs.org/infusion/-/infusion-3.0.0-dev.20171117T095227Z.67ff934.tgz", + "integrity": "sha1-0Ng2s0OqbbiMDez+rnHmJ11BQg4=", + "requires": { + "fluid-resolve": "1.3.0" + } + }, + "ipaddr.js": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", + "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "proxy-addr": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", + "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.6.0" + } + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + } + }, + "send": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", + "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + } + }, + "serve-static": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", + "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.1" + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + } + } + }, + "gpii-pouchdb": { + "version": "1.0.9", + "bundled": true, + "requires": { + "body-parser": "1.18.2", + "express": "4.16.2", + "express-pouchdb": "git://github.com/the-t-in-rtf/express-pouchdb.git#299582cd5bbe33e4057135413c34b72c2c8a7167", + "gpii-express": "1.0.12", + "graceful-fs": "4.1.11", + "infusion": "3.0.0-dev.20171117T095227Z.67ff934", + "lie": "3.1.1", + "memdown": "1.4.1", + "pouchdb": "6.3.4", + "underscore-node": "0.1.2" + }, + "dependencies": { + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.16" + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "express": { + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", + "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "requires": { + "accepts": "1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.0", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.3", + "qs": "6.5.1", + "range-parser": "1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.1", + "serve-static": "1.13.1", + "setprototypeof": "1.1.0", + "statuses": "1.3.1", + "type-is": "1.6.16", + "utils-merge": "1.0.1", + "vary": "1.1.2" + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "infusion": { + "version": "3.0.0-dev.20171117T095227Z.67ff934", + "resolved": "https://registry.npmjs.org/infusion/-/infusion-3.0.0-dev.20171117T095227Z.67ff934.tgz", + "integrity": "sha1-0Ng2s0OqbbiMDez+rnHmJ11BQg4=", + "requires": { + "fluid-resolve": "1.3.0" + } + }, + "ipaddr.js": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", + "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "proxy-addr": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", + "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.6.0" + } + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + } + }, + "send": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", + "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + } + }, + "serve-static": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", + "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.1" + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + } + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-color": { + "version": "0.1.7", + "bundled": true + }, + "has-own-property-x": { + "version": "3.2.0", + "bundled": true, + "requires": { + "cached-constructors-x": "1.0.2", + "to-object-x": "1.5.0", + "to-property-key-x": "2.0.2" + } + }, + "has-symbol-support-x": { + "version": "1.4.2", + "bundled": true + }, + "has-to-string-tag-x": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + "bundled": true, + "requires": { + "has-symbol-support-x": "1.4.2" + } }, - "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "has-unicode": { + "version": "2.0.1", + "bundled": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, "requires": { - "isarray": "0.0.1" + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" } }, - "proxy-addr": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", - "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "header-case-normalizer": { + "version": "1.0.3", + "bundled": true + }, + "hoek": { + "version": "2.16.3", + "bundled": true + }, + "http-errors": { + "version": "1.6.2", + "bundled": true, "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.6.0" + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + } } }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + "http-signature": { + "version": "1.1.1", + "bundled": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" + } }, - "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "hyperquest": { + "version": "2.1.3", + "bundled": true, "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "unpipe": "1.0.0" + "buffer-from": "0.1.1", + "duplexer2": "0.0.2", + "through2": "0.6.5" } }, - "send": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", - "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "iconv-lite": { + "version": "0.4.15", + "bundled": true + }, + "immediate": { + "version": "3.0.6", + "bundled": true + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true + }, + "indent-string": { + "version": "1.2.2", + "bundled": true, "requires": { - "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.3.1" + "get-stdin": "4.0.1", + "minimist": "1.2.0", + "repeating": "1.1.3" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } } }, - "serve-static": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", - "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "infinity-x": { + "version": "1.0.2", + "bundled": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + "infusion": { + "version": "3.0.0-dev.20180222T160835Z.6e1311a", + "bundled": true, + "requires": { + "fluid-resolve": "1.3.0" + } }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + "inherits": { + "version": "2.0.3", + "bundled": true }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - } - } - }, - "level-codec": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.0.tgz", - "integrity": "sha1-x1W2jQ1E/6Cxy6BEuPgaVaFK05s=" - }, - "level-errors": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", - "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", - "requires": { - "errno": "0.1.7" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", - "integrity": "sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0=", - "requires": { - "inherits": "2.0.3", - "level-errors": "1.0.5", - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - }, - "level-write-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/level-write-stream/-/level-write-stream-1.0.0.tgz", - "integrity": "sha1-P3+7Z5pVE3wP6zA97nZuEu4Twdw=", - "requires": { - "end-stream": "0.1.0" - } - }, - "leveldown": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-1.5.0.tgz", - "integrity": "sha1-a408vqekqJqkdERgfXNYIT5vy4E=", - "requires": { - "abstract-leveldown": "2.6.3", - "bindings": "1.2.1", - "fast-future": "1.0.2", - "nan": "2.4.0", - "prebuild": "4.5.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", - "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", + "ini": { + "version": "git://github.com/GPII/ini.git#be8a04aa22f5ad9321ebcbba7740314a53bc8ab2", + "bundled": true + }, + "inline-process-browser": { + "version": "1.0.0", + "bundled": true, "requires": { - "xtend": "4.0.1" + "falafel": "1.2.0", + "through2": "0.6.5" } }, - "nan": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", - "integrity": "sha1-+zxZ1F/k7/4hXwuJD4rfbrMtIjI=" - } - } - }, - "levelup": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.8.tgz", - "integrity": "sha1-+0QsSI776hBD9+uZKaeSp0+9HaY=", - "requires": { - "deferred-leveldown": "1.2.2", - "level-codec": "6.1.0", - "level-errors": "1.0.5", - "level-iterator-stream": "1.3.1", - "prr": "1.0.1", - "semver": "5.1.1", - "xtend": "4.0.1" - }, - "dependencies": { - "level-codec": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-6.1.0.tgz", - "integrity": "sha1-9d8KmVgvdtrEOFUVGrb05NDWAEU=" + "ipaddr.js": { + "version": "1.4.0", + "bundled": true + }, + "is-array": { + "version": "1.0.1", + "bundled": true + }, + "is-array-buffer-x": { + "version": "1.7.0", + "bundled": true, + "requires": { + "attempt-x": "1.1.3", + "has-to-string-tag-x": "1.4.1", + "is-object-like-x": "1.7.1", + "object-get-own-property-descriptor-x": "3.2.0", + "to-string-tag-x": "1.4.3" + } + }, + "is-date-object": { + "version": "1.0.1", + "bundled": true + }, + "is-empty": { + "version": "0.0.1", + "bundled": true + }, + "is-falsey-x": { + "version": "1.0.3", + "bundled": true, + "requires": { + "to-boolean-x": "1.0.3" + } + }, + "is-finite": { + "version": "1.0.2", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-finite-x": { + "version": "3.0.4", + "bundled": true, + "requires": { + "infinity-x": "1.0.2", + "is-nan-x": "1.0.3" + } + }, + "is-function-x": { + "version": "3.3.0", + "bundled": true, + "requires": { + "attempt-x": "1.1.3", + "has-to-string-tag-x": "1.4.1", + "is-falsey-x": "1.0.3", + "is-primitive": "2.0.0", + "normalize-space-x": "3.0.0", + "replace-comments-x": "2.0.0", + "to-boolean-x": "1.0.3", + "to-string-tag-x": "1.4.3" + }, + "dependencies": { + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + } + } + }, + "is-index-x": { + "version": "1.1.0", + "bundled": true, + "requires": { + "math-clamp-x": "1.2.0", + "max-safe-integer": "1.0.1", + "to-integer-x": "3.0.0", + "to-number-x": "2.0.0", + "to-string-symbols-supported-x": "1.0.2" + } + }, + "is-nan-x": { + "version": "1.0.3", + "bundled": true + }, + "is-nil-x": { + "version": "1.4.2", + "bundled": true, + "requires": { + "lodash.isnull": "3.0.0", + "validate.io-undefined": "1.0.3" + } + }, + "is-object-like-x": { + "version": "1.7.1", + "bundled": true, + "requires": { + "is-function-x": "3.3.0", + "is-primitive": "3.0.0" + } + }, + "is-primitive": { + "version": "3.0.0", + "bundled": true + }, + "is-string": { + "version": "1.0.4", + "bundled": true + }, + "is-symbol": { + "version": "1.0.1", + "bundled": true + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true + }, + "isarray": { + "version": "0.0.1", + "bundled": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true + }, + "jkroso-type": { + "version": "1.1.1", + "bundled": true + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true + }, + "json5": { + "version": "0.5.1", + "bundled": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true + }, + "jsonist": { + "version": "2.1.0", + "bundled": true, + "requires": { + "bl": "1.2.1", + "hyperquest": "2.1.3", + "json-stringify-safe": "5.0.1", + "xtend": "4.0.1" + } + }, + "jsonlint": { + "version": "1.6.2", + "bundled": true, + "requires": { + "JSV": "4.0.2", + "nomnom": "1.8.1" + } + }, + "jsprim": { + "version": "1.4.1", + "bundled": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "jstransform": { + "version": "3.0.0", + "bundled": true, + "requires": { + "base62": "0.1.1", + "esprima-fb": "3001.1.0-dev-harmony-fb", + "source-map": "0.1.31" + } + }, + "kettle": { + "version": "1.7.1", + "bundled": true, + "requires": { + "body-parser": "1.18.2", + "cookie-parser": "1.4.3", + "express": "4.16.2", + "express-session": "1.15.6", + "fluid-resolve": "1.3.0", + "infusion": "3.0.0-dev.20171117T095227Z.67ff934", + "json5": "0.5.1", + "jsonlint": "1.6.2", + "path-to-regexp": "1.7.0", + "serve-static": "1.13.1", + "ws": "3.3.1" + }, + "dependencies": { + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.16" + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "express": { + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", + "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "requires": { + "accepts": "1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.0", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.3", + "qs": "6.5.1", + "range-parser": "1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.1", + "serve-static": "1.13.1", + "setprototypeof": "1.1.0", + "statuses": "1.3.1", + "type-is": "1.6.16", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + } + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "infusion": { + "version": "3.0.0-dev.20171117T095227Z.67ff934", + "resolved": "https://registry.npmjs.org/infusion/-/infusion-3.0.0-dev.20171117T095227Z.67ff934.tgz", + "integrity": "sha1-0Ng2s0OqbbiMDez+rnHmJ11BQg4=", + "requires": { + "fluid-resolve": "1.3.0" + } + }, + "ipaddr.js": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", + "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "path-to-regexp": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "requires": { + "isarray": "0.0.1" + } + }, + "proxy-addr": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", + "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.6.0" + } + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + } + }, + "send": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", + "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + } + }, + "serve-static": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", + "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.1" + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + } + } + }, + "level-codec": { + "version": "7.0.0", + "bundled": true + }, + "level-errors": { + "version": "1.0.5", + "bundled": true, + "requires": { + "errno": "0.1.7" + } + }, + "level-iterator-stream": { + "version": "1.3.1", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "level-errors": "1.0.5", + "readable-stream": "1.0.34", + "xtend": "4.0.1" + } + }, + "level-write-stream": { + "version": "1.0.0", + "bundled": true, + "requires": { + "end-stream": "0.1.0" + } + }, + "leveldown": { + "version": "1.5.0", + "bundled": true, + "requires": { + "abstract-leveldown": "2.6.3", + "bindings": "1.2.1", + "fast-future": "1.0.2", + "nan": "2.4.0", + "prebuild": "4.5.0" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", + "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", + "requires": { + "xtend": "4.0.1" + } + } + } + }, + "levelup": { + "version": "1.3.8", + "bundled": true, + "requires": { + "deferred-leveldown": "1.2.2", + "level-codec": "6.1.0", + "level-errors": "1.0.5", + "level-iterator-stream": "1.3.1", + "prr": "1.0.1", + "semver": "5.1.1", + "xtend": "4.0.1" + }, + "dependencies": { + "level-codec": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-6.1.0.tgz", + "integrity": "sha1-9d8KmVgvdtrEOFUVGrb05NDWAEU=" + }, + "semver": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.1.1.tgz", + "integrity": "sha1-oykqNz5vPgeY2gsgZBuanFvEfhk=" + } + } + }, + "lie": { + "version": "3.1.1", + "bundled": true, + "requires": { + "immediate": "3.0.6" + } + }, + "lodash": { + "version": "4.17.5", + "bundled": true + }, + "lodash.isnull": { + "version": "3.0.0", + "bundled": true + }, + "lodash.pad": { + "version": "4.5.1", + "bundled": true + }, + "lodash.padend": { + "version": "4.6.1", + "bundled": true + }, + "lodash.padstart": { + "version": "4.6.1", + "bundled": true + }, + "ltgt": { + "version": "2.2.0", + "bundled": true + }, + "map-obj": { + "version": "1.0.1", + "bundled": true + }, + "math-clamp-x": { + "version": "1.2.0", + "bundled": true, + "requires": { + "to-number-x": "2.0.0" + } + }, + "math-sign-x": { + "version": "3.0.0", + "bundled": true, + "requires": { + "is-nan-x": "1.0.3", + "to-number-x": "2.0.0" + } + }, + "max-safe-integer": { + "version": "1.0.1", + "bundled": true + }, + "media-typer": { + "version": "0.3.0", + "bundled": true + }, + "memdown": { + "version": "1.4.1", + "bundled": true, + "requires": { + "abstract-leveldown": "2.7.2", + "functional-red-black-tree": "1.0.1", + "immediate": "3.2.3", + "inherits": "2.0.3", + "ltgt": "2.2.0", + "safe-buffer": "5.1.1" + }, + "dependencies": { + "immediate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=" + } + } + }, + "meow": { + "version": "2.0.0", + "bundled": true, + "requires": { + "camelcase-keys": "1.0.0", + "indent-string": "1.2.2", + "minimist": "1.2.0", + "object-assign": "1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "object-assign": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-1.0.0.tgz", + "integrity": "sha1-5l3Idm07R7S4MHRlyDEdoDCwcKY=" + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "bundled": true + }, + "methods": { + "version": "1.1.2", + "bundled": true + }, + "mime": { + "version": "1.3.4", + "bundled": true + }, + "mime-db": { + "version": "1.33.0", + "bundled": true + }, + "mime-types": { + "version": "2.1.18", + "bundled": true, + "requires": { + "mime-db": "1.33.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.11" + } }, - "semver": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.1.1.tgz", - "integrity": "sha1-oykqNz5vPgeY2gsgZBuanFvEfhk=" - } - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", - "requires": { - "immediate": "3.0.6" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, - "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" - }, - "lodash.isnull": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash.isnull/-/lodash.isnull-3.0.0.tgz", - "integrity": "sha1-+vvlnqHcon7teGU0A53YTC4HxW4=" - }, - "lodash.pad": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz", - "integrity": "sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=" - }, - "lodash.padend": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", - "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=" - }, - "lodash.padstart": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", - "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" - } - }, - "ltgt": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.0.tgz", - "integrity": "sha1-tlul/LNJopkkyOMz98alVi8uSEI=" - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" - }, - "math-clamp-x": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/math-clamp-x/-/math-clamp-x-1.2.0.tgz", - "integrity": "sha512-tqpjpBcIf9UulApz3EjWXqTZpMlr2vLN9PryC9ghoyCuRmqZaf3JJhPddzgQpJnKLi2QhoFnvKBFtJekAIBSYg==", - "requires": { - "to-number-x": "2.0.0" - } - }, - "math-sign-x": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/math-sign-x/-/math-sign-x-3.0.0.tgz", - "integrity": "sha512-OzPas41Pn4d16KHnaXmGxxY3/l3zK4OIXtmIwdhgZsxz4FDDcNnbrABYPg2vGfxIkaT9ezGnzDviRH7RfF44jQ==", - "requires": { - "is-nan-x": "1.0.1", - "to-number-x": "2.0.0" - } - }, - "max-safe-integer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/max-safe-integer/-/max-safe-integer-1.0.1.tgz", - "integrity": "sha1-84BgvixWPYwC5tSK85Ei/YO29BA=" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "memdown": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", - "integrity": "sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=", - "requires": { - "abstract-leveldown": "2.7.2", - "functional-red-black-tree": "1.0.1", - "immediate": "3.2.3", - "inherits": "2.0.3", - "ltgt": "2.2.0", - "safe-buffer": "5.1.1" - }, - "dependencies": { - "immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=" - } - } - }, - "meow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-2.0.0.tgz", - "integrity": "sha1-j1MKjs9dQNP0tN+Tw0cpAPuiqPE=", - "requires": { - "camelcase-keys": "1.0.0", - "indent-string": "1.2.2", - "minimist": "1.2.0", - "object-assign": "1.0.0" - }, - "dependencies": { "minimist": { + "version": "0.0.8", + "bundled": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true + }, + "multiparty": { + "version": "4.1.3", + "bundled": true, + "requires": { + "fd-slicer": "1.0.1" + } + }, + "nan": { + "version": "2.4.0", + "bundled": true + }, + "nan-x": { + "version": "1.0.2", + "bundled": true + }, + "ndef": { + "version": "0.1.3", + "bundled": true + }, + "negotiator": { + "version": "0.6.1", + "bundled": true + }, + "next-tick": { + "version": "1.0.0", + "bundled": true + }, + "nock": { + "version": "9.1.0", + "bundled": true, + "requires": { + "chai": "3.5.0", + "debug": "2.6.7", + "deep-equal": "1.0.1", + "json-stringify-safe": "5.0.1", + "lodash": "4.17.5", + "mkdirp": "0.5.1", + "propagate": "0.4.0", + "qs": "6.4.0", + "semver": "5.4.1" + } + }, + "node-gyp": { + "version": "3.6.2", + "bundled": 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": "2.0.4", + "osenv": "0.1.5", + "request": "2.80.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "which": "1.3.0" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" + } + } + }, + "node-jqunit": { + "version": "1.1.8", + "bundled": true, + "requires": { + "infusion": "3.0.0-dev.20171117T095227Z.67ff934" + }, + "dependencies": { + "infusion": { + "version": "3.0.0-dev.20171117T095227Z.67ff934", + "resolved": "https://registry.npmjs.org/infusion/-/infusion-3.0.0-dev.20171117T095227Z.67ff934.tgz", + "integrity": "sha1-0Ng2s0OqbbiMDez+rnHmJ11BQg4=", + "requires": { + "fluid-resolve": "1.3.0" + } + } + } + }, + "node-ninja": { + "version": "1.0.2", + "bundled": 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": "2.0.4", + "osenv": "0.1.5", + "path-array": "1.0.1", + "request": "2.80.0", + "rimraf": "2.6.1", + "semver": "5.4.1", + "tar": "2.2.1", + "which": "1.3.0" + } + }, + "node-uuid": { + "version": "1.4.8", + "bundled": true + }, + "nomnom": { + "version": "1.8.1", + "bundled": true, + "requires": { + "chalk": "0.4.0", + "underscore": "1.6.0" + } + }, + "noop-logger": { + "version": "0.1.1", + "bundled": true + }, + "nopt": { + "version": "3.0.6", + "bundled": true, + "requires": { + "abbrev": "1.1.1" + } + }, + "normalize-space-x": { + "version": "3.0.0", + "bundled": true, + "requires": { + "cached-constructors-x": "1.0.2", + "trim-x": "3.0.0", + "white-space-x": "3.0.1" + } + }, + "npmlog": { + "version": "2.0.4", + "bundled": true, + "requires": { + "ansi": "0.3.1", + "are-we-there-yet": "1.1.4", + "gauge": "1.2.7" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true + }, + "oauth2orize": { + "version": "1.8.0", + "bundled": true, + "requires": { + "debug": "2.6.7", + "uid2": "0.0.3", + "utils-merge": "1.0.0" + } + }, + "object-assign": { + "version": "2.1.1", + "bundled": true + }, + "object-get-own-property-descriptor-x": { + "version": "3.2.0", + "bundled": true, + "requires": { + "attempt-x": "1.1.3", + "has-own-property-x": "3.2.0", + "has-symbol-support-x": "1.4.2", + "is-falsey-x": "1.0.3", + "is-index-x": "1.1.0", + "is-primitive": "2.0.0", + "is-string": "1.0.4", + "property-is-enumerable-x": "1.1.0", + "to-object-x": "1.5.0", + "to-property-key-x": "2.0.2" + }, + "dependencies": { + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + } + } + }, + "object-keys": { + "version": "1.0.11", + "bundled": true + }, + "on-finished": { + "version": "2.3.0", + "bundled": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "bundled": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "parse-int-x": { + "version": "2.0.0", + "bundled": true, + "requires": { + "cached-constructors-x": "1.0.2", + "nan-x": "1.0.2", + "to-string-x": "1.4.5", + "trim-left-x": "3.0.0" + } + }, + "parseurl": { + "version": "1.3.2", + "bundled": true + }, + "passport": { + "version": "0.3.2", + "bundled": true, + "requires": { + "passport-strategy": "1.0.0", + "pause": "0.0.1" + } + }, + "passport-oauth2-client-password": { + "version": "0.1.2", + "bundled": true, + "requires": { + "passport-strategy": "1.0.0" + } + }, + "passport-strategy": { + "version": "1.0.0", + "bundled": true + }, + "path-array": { + "version": "1.0.1", + "bundled": true, + "requires": { + "array-index": "1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "path-to-regexp": { + "version": "0.1.7", + "bundled": true + }, + "pause": { + "version": "0.0.1", + "bundled": true + }, + "pend": { + "version": "1.2.0", + "bundled": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true + }, + "pouchdb": { + "version": "6.3.4", + "bundled": true, + "requires": { + "argsarray": "0.0.1", + "buffer-from": "0.1.1", + "clone-buffer": "1.0.0", + "debug": "2.6.4", + "double-ended-queue": "2.1.0-0", + "immediate": "3.0.6", + "inherits": "2.0.3", + "level-codec": "7.0.0", + "level-write-stream": "1.0.0", + "leveldown": "1.5.0", + "levelup": "1.3.8", + "lie": "3.1.1", + "ltgt": "2.2.0", + "readable-stream": "1.0.33", + "request": "2.80.0", + "spark-md5": "3.0.0", + "through2": "2.0.3", + "uuid": "3.2.1", + "vuvuzela": "1.0.3" + }, + "dependencies": { + "debug": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.4.tgz", + "integrity": "sha1-dYaps8OXQcAoKuM0RcTorHRzT+A=", + "requires": { + "ms": "0.7.3" + } + }, + "ms": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", + "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=" + }, + "readable-stream": { + "version": "1.0.33", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz", + "integrity": "sha1-OjYN1mwbHX/UcFOJhg7aHQ9hEmw=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "spark-md5": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz", + "integrity": "sha1-NyIifFTi+vJLHcbZM8wUTm9xv+8=" + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "requires": { + "readable-stream": "2.3.5", + "xtend": "4.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", + "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" + } + } + }, + "pouchdb-all-dbs": { + "version": "git://github.com/the-t-in-rtf/pouchdb-all-dbs.git#010173f4afa7b752787885ee8606eda4c1f047bb", + "bundled": true, + "requires": { + "argsarray": "0.0.1", + "es3ify": "0.1.4", + "infusion": "3.0.0-dev.20171102T191539Z.c0636b395", + "inherits": "2.0.3", + "pouchdb-promise": "5.4.3", + "tiny-queue": "0.2.1" + }, + "dependencies": { + "infusion": { + "version": "3.0.0-dev.20171102T191539Z.c0636b395", + "resolved": "https://registry.npmjs.org/infusion/-/infusion-3.0.0-dev.20171102T191539Z.c0636b395.tgz", + "integrity": "sha1-5SYGaY+VFWIB39mJUf5wBKpzntk=", + "requires": { + "fluid-resolve": "1.3.0" + } + } + } + }, + "pouchdb-auth": { + "version": "2.1.1", + "bundled": true, + "requires": { + "base64url": "1.0.6", + "couchdb-calculate-session-id": "1.1.2", + "crypto-lite": "0.1.0", + "pouchdb-bulkdocs-wrapper": "1.0.2", + "pouchdb-plugin-error": "1.0.1", + "pouchdb-promise": "5.4.3", + "pouchdb-req-http-query": "1.0.4", + "pouchdb-system-db": "1.0.4", + "pouchdb-validation": "1.2.1", + "pouchdb-wrappers": "1.3.6", + "promise-nodify": "1.0.2", + "secure-random": "1.1.1" + } + }, + "pouchdb-bulkdocs-wrapper": { + "version": "1.0.2", + "bundled": true, + "requires": { + "pouchdb-promise": "0.0.0" + }, + "dependencies": { + "bluebird": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.2.4.tgz", + "integrity": "sha1-WYXsI8tv8aWDTMZEezxe8BD9Mho=" + }, + "lie": { + "version": "2.7.7", + "resolved": "https://registry.npmjs.org/lie/-/lie-2.7.7.tgz", + "integrity": "sha1-fPlZvtSJWbBi8Drka7vzqsMCark=", + "requires": { + "immediate": "3.0.6" + } + }, + "pouchdb-promise": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-0.0.0.tgz", + "integrity": "sha1-PAFOYndm2UW+PycOB5p9tNLRmCc=", + "requires": { + "bluebird": "1.2.4", + "lie": "2.7.7" + } + } + } + }, + "pouchdb-changeslike-wrapper": { + "version": "1.0.1", + "bundled": true + }, + "pouchdb-collate": { + "version": "1.2.0", + "bundled": true + }, + "pouchdb-extend": { + "version": "0.1.2", + "bundled": true + }, + "pouchdb-find": { + "version": "0.10.3", + "bundled": true, + "requires": { + "argsarray": "0.0.1", + "debug": "2.6.7", + "inherits": "2.0.3", + "is-array": "1.0.1", + "pouchdb-collate": "1.2.0", + "pouchdb-extend": "0.1.2", + "pouchdb-promise": "5.4.0", + "pouchdb-upsert": "2.0.2", + "spark-md5": "0.0.5" + }, + "dependencies": { + "base62": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/base62/-/base62-1.2.7.tgz", + "integrity": "sha512-ck0nDbXLEq2nD5jIcEzdpk07sYQ5P6z4NMTIgeQCFr5CCRZzmgUPlOes4o0k5pvEUQJnKO/D079ybzjpjIKf2Q==" + }, + "es3ify": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/es3ify/-/es3ify-0.2.2.tgz", + "integrity": "sha1-Xa4+ZQ5b42hLiAZlE9Uo0JJimGI=", + "requires": { + "esprima": "2.7.3", + "jstransform": "11.0.3", + "through": "2.3.8" + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" + }, + "jstransform": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-11.0.3.tgz", + "integrity": "sha1-CaeJk+CuTU70SH9hVakfYZDLQiM=", + "requires": { + "base62": "1.2.7", + "commoner": "0.10.8", + "esprima-fb": "15001.1.0-dev-harmony-fb", + "object-assign": "2.1.1", + "source-map": "0.4.4" + }, + "dependencies": { + "esprima-fb": { + "version": "15001.1.0-dev-harmony-fb", + "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz", + "integrity": "sha1-MKlHMDxrjV6VW+4rmbHSMyBqaQE=" + } + } + }, + "lie": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.0.4.tgz", + "integrity": "sha1-vHrh6+fxyN45r9zU94kHa0ew9jQ=", + "requires": { + "es3ify": "0.2.2", + "immediate": "3.0.6", + "inline-process-browser": "1.0.0", + "unreachable-branch-transform": "0.3.0" + } + }, + "pouchdb-promise": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-5.4.0.tgz", + "integrity": "sha1-4nesa9oayFBFl6u1xDp8Op5Whm8=", + "requires": { + "lie": "3.0.4" + } + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "pouchdb-list": { + "version": "1.1.0", + "bundled": true, + "requires": { + "couchdb-objects": "1.0.7", + "couchdb-render": "1.0.1", + "extend": "3.0.1", + "pouchdb-plugin-error": "1.0.1", + "pouchdb-promise": "0.0.0", + "pouchdb-req-http-query": "1.0.4", + "promise-nodify": "1.0.2" + }, + "dependencies": { + "bluebird": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.2.4.tgz", + "integrity": "sha1-WYXsI8tv8aWDTMZEezxe8BD9Mho=" + }, + "lie": { + "version": "2.7.7", + "resolved": "https://registry.npmjs.org/lie/-/lie-2.7.7.tgz", + "integrity": "sha1-fPlZvtSJWbBi8Drka7vzqsMCark=", + "requires": { + "immediate": "3.0.6" + } + }, + "pouchdb-promise": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-0.0.0.tgz", + "integrity": "sha1-PAFOYndm2UW+PycOB5p9tNLRmCc=", + "requires": { + "bluebird": "1.2.4", + "lie": "2.7.7" + } + } + } + }, + "pouchdb-plugin-error": { + "version": "1.0.1", + "bundled": true + }, + "pouchdb-promise": { + "version": "5.4.3", + "bundled": true, + "requires": { + "lie": "3.0.4" + }, + "dependencies": { + "base62": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/base62/-/base62-1.2.7.tgz", + "integrity": "sha512-ck0nDbXLEq2nD5jIcEzdpk07sYQ5P6z4NMTIgeQCFr5CCRZzmgUPlOes4o0k5pvEUQJnKO/D079ybzjpjIKf2Q==" + }, + "es3ify": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/es3ify/-/es3ify-0.2.2.tgz", + "integrity": "sha1-Xa4+ZQ5b42hLiAZlE9Uo0JJimGI=", + "requires": { + "esprima": "2.7.3", + "jstransform": "11.0.3", + "through": "2.3.8" + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" + }, + "jstransform": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-11.0.3.tgz", + "integrity": "sha1-CaeJk+CuTU70SH9hVakfYZDLQiM=", + "requires": { + "base62": "1.2.7", + "commoner": "0.10.8", + "esprima-fb": "15001.1.0-dev-harmony-fb", + "object-assign": "2.1.1", + "source-map": "0.4.4" + }, + "dependencies": { + "esprima-fb": { + "version": "15001.1.0-dev-harmony-fb", + "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz", + "integrity": "sha1-MKlHMDxrjV6VW+4rmbHSMyBqaQE=" + } + } + }, + "lie": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.0.4.tgz", + "integrity": "sha1-vHrh6+fxyN45r9zU94kHa0ew9jQ=", + "requires": { + "es3ify": "0.2.2", + "immediate": "3.0.6", + "inline-process-browser": "1.0.0", + "unreachable-branch-transform": "0.3.0" + } + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "pouchdb-replicator": { + "version": "2.1.3", + "bundled": true, + "requires": { + "equals": "1.0.5", + "extend": "1.3.0", + "pouchdb-plugin-error": "1.0.1", + "pouchdb-promise": "0.0.0", + "pouchdb-system-db": "1.0.4", + "pouchdb-validation": "1.2.1", + "promise-nodify": "1.0.2", + "random-uuid-v4": "0.0.4" + }, + "dependencies": { + "bluebird": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.2.4.tgz", + "integrity": "sha1-WYXsI8tv8aWDTMZEezxe8BD9Mho=" + }, + "extend": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", + "integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=" + }, + "lie": { + "version": "2.7.7", + "resolved": "https://registry.npmjs.org/lie/-/lie-2.7.7.tgz", + "integrity": "sha1-fPlZvtSJWbBi8Drka7vzqsMCark=", + "requires": { + "immediate": "3.0.6" + } + }, + "pouchdb-promise": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-0.0.0.tgz", + "integrity": "sha1-PAFOYndm2UW+PycOB5p9tNLRmCc=", + "requires": { + "bluebird": "1.2.4", + "lie": "2.7.7" + } + } + } + }, + "pouchdb-req-http-query": { + "version": "1.0.4", + "bundled": true, + "requires": { + "extend": "1.3.0", + "header-case-normalizer": "1.0.3", + "pouchdb-plugin-error": "1.0.1", + "pouchdb-promise": "0.0.0", + "xmlhttprequest-cookie": "0.9.5" + }, + "dependencies": { + "bluebird": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.2.4.tgz", + "integrity": "sha1-WYXsI8tv8aWDTMZEezxe8BD9Mho=" + }, + "extend": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", + "integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=" + }, + "lie": { + "version": "2.7.7", + "resolved": "https://registry.npmjs.org/lie/-/lie-2.7.7.tgz", + "integrity": "sha1-fPlZvtSJWbBi8Drka7vzqsMCark=", + "requires": { + "immediate": "3.0.6" + } + }, + "pouchdb-promise": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-0.0.0.tgz", + "integrity": "sha1-PAFOYndm2UW+PycOB5p9tNLRmCc=", + "requires": { + "bluebird": "1.2.4", + "lie": "2.7.7" + } + } + } + }, + "pouchdb-rewrite": { + "version": "1.0.7", + "bundled": true, + "requires": { + "couchdb-objects": "1.0.7", + "extend": "1.3.0", + "pouchdb-plugin-error": "1.0.1", + "pouchdb-req-http-query": "1.0.4", + "pouchdb-route": "1.0.3", + "promise-nodify": "1.0.2" + }, + "dependencies": { + "extend": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", + "integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=" + } + } + }, + "pouchdb-route": { + "version": "1.0.3", + "bundled": true, + "requires": { + "extend": "1.3.0", + "pouchdb-plugin-error": "1.0.1" + }, + "dependencies": { + "extend": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", + "integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=" + } + } + }, + "pouchdb-security": { + "version": "1.2.6", + "bundled": true, + "requires": { + "extend": "1.3.0", + "pouchdb-bulkdocs-wrapper": "1.0.2", + "pouchdb-changeslike-wrapper": "1.0.1", + "pouchdb-plugin-error": "1.0.1", + "pouchdb-promise": "0.0.0", + "pouchdb-req-http-query": "1.0.4", + "pouchdb-wrappers": "1.3.6", + "promise-nodify": "1.0.2" + }, + "dependencies": { + "bluebird": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.2.4.tgz", + "integrity": "sha1-WYXsI8tv8aWDTMZEezxe8BD9Mho=" + }, + "extend": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", + "integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=" + }, + "lie": { + "version": "2.7.7", + "resolved": "https://registry.npmjs.org/lie/-/lie-2.7.7.tgz", + "integrity": "sha1-fPlZvtSJWbBi8Drka7vzqsMCark=", + "requires": { + "immediate": "3.0.6" + } + }, + "pouchdb-promise": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-0.0.0.tgz", + "integrity": "sha1-PAFOYndm2UW+PycOB5p9tNLRmCc=", + "requires": { + "bluebird": "1.2.4", + "lie": "2.7.7" + } + } + } + }, + "pouchdb-show": { + "version": "1.0.8", + "bundled": true, + "requires": { + "couchdb-objects": "1.0.7", + "couchdb-render": "1.0.1", + "pouchdb-plugin-error": "1.0.1", + "pouchdb-promise": "0.0.0", + "pouchdb-req-http-query": "1.0.4", + "promise-nodify": "1.0.2" + }, + "dependencies": { + "bluebird": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.2.4.tgz", + "integrity": "sha1-WYXsI8tv8aWDTMZEezxe8BD9Mho=" + }, + "lie": { + "version": "2.7.7", + "resolved": "https://registry.npmjs.org/lie/-/lie-2.7.7.tgz", + "integrity": "sha1-fPlZvtSJWbBi8Drka7vzqsMCark=", + "requires": { + "immediate": "3.0.6" + } + }, + "pouchdb-promise": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-0.0.0.tgz", + "integrity": "sha1-PAFOYndm2UW+PycOB5p9tNLRmCc=", + "requires": { + "bluebird": "1.2.4", + "lie": "2.7.7" + } + } + } + }, + "pouchdb-size": { + "version": "1.2.2", + "bundled": true, + "requires": { + "bluebird": "2.11.0", + "get-folder-size": "0.1.1", + "pouchdb-wrappers": "1.3.6", + "promise-nodify": "1.0.2" + }, + "dependencies": { + "bluebird": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" + } + } + }, + "pouchdb-system-db": { + "version": "1.0.4", + "bundled": true, + "requires": { + "pouchdb-changeslike-wrapper": "1.0.1", + "pouchdb-plugin-error": "1.0.1", + "pouchdb-security": "1.2.6", + "pouchdb-wrappers": "1.3.6" + } + }, + "pouchdb-update": { + "version": "1.0.8", + "bundled": true, + "requires": { + "couchdb-eval": "1.0.6", + "couchdb-objects": "1.0.7", + "couchdb-resp-completer": "1.0.3", + "pouchdb-plugin-error": "1.0.1", + "pouchdb-promise": "0.0.0", + "pouchdb-req-http-query": "1.0.4", + "promise-nodify": "1.0.2" + }, + "dependencies": { + "bluebird": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.2.4.tgz", + "integrity": "sha1-WYXsI8tv8aWDTMZEezxe8BD9Mho=" + }, + "lie": { + "version": "2.7.7", + "resolved": "https://registry.npmjs.org/lie/-/lie-2.7.7.tgz", + "integrity": "sha1-fPlZvtSJWbBi8Drka7vzqsMCark=", + "requires": { + "immediate": "3.0.6" + } + }, + "pouchdb-promise": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-0.0.0.tgz", + "integrity": "sha1-PAFOYndm2UW+PycOB5p9tNLRmCc=", + "requires": { + "bluebird": "1.2.4", + "lie": "2.7.7" + } + } + } + }, + "pouchdb-upsert": { + "version": "2.0.2", + "bundled": true, + "requires": { + "pouchdb-promise": "5.4.3" + } + }, + "pouchdb-validation": { + "version": "1.2.1", + "bundled": true, + "requires": { + "couchdb-eval": "1.0.6", + "couchdb-objects": "1.0.7", + "pouchdb-bulkdocs-wrapper": "1.0.2", + "pouchdb-plugin-error": "1.0.1", + "pouchdb-promise": "0.0.0", + "pouchdb-wrappers": "1.3.6", + "random-uuid-v4": "0.0.4" + }, + "dependencies": { + "bluebird": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.2.4.tgz", + "integrity": "sha1-WYXsI8tv8aWDTMZEezxe8BD9Mho=" + }, + "lie": { + "version": "2.7.7", + "resolved": "https://registry.npmjs.org/lie/-/lie-2.7.7.tgz", + "integrity": "sha1-fPlZvtSJWbBi8Drka7vzqsMCark=", + "requires": { + "immediate": "3.0.6" + } + }, + "pouchdb-promise": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-0.0.0.tgz", + "integrity": "sha1-PAFOYndm2UW+PycOB5p9tNLRmCc=", + "requires": { + "bluebird": "1.2.4", + "lie": "2.7.7" + } + } + } + }, + "pouchdb-vhost": { + "version": "1.0.2", + "bundled": true, + "requires": { + "pouchdb-route": "1.0.3", + "promise-nodify": "1.0.2" + } + }, + "pouchdb-wrappers": { + "version": "1.3.6", + "bundled": true, + "requires": { + "promise-nodify": "1.0.2" + } + }, + "prebuild": { + "version": "4.5.0", + "bundled": true, + "requires": { + "async": "1.5.2", + "execspawn": "1.0.1", + "expand-template": "1.1.0", + "ghreleases": "1.0.7", + "github-from-package": "0.0.0", + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "node-gyp": "3.6.2", + "node-ninja": "1.0.2", + "noop-logger": "0.1.1", + "npmlog": "2.0.4", + "os-homedir": "1.0.2", + "pump": "1.0.3", + "rc": "1.2.6", + "simple-get": "1.4.3", + "tar-fs": "1.16.0", + "tar-stream": "1.5.5", + "xtend": "4.0.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "private": { + "version": "0.1.8", + "bundled": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true + }, + "promise-nodify": { + "version": "1.0.2", + "bundled": true + }, + "propagate": { + "version": "0.4.0", + "bundled": true + }, + "property-is-enumerable-x": { + "version": "1.1.0", + "bundled": true, + "requires": { + "to-object-x": "1.5.0", + "to-property-key-x": "2.0.2" + } + }, + "proxy-addr": { + "version": "1.1.5", + "bundled": true, + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.4.0" + } + }, + "prr": { + "version": "1.0.1", + "bundled": true + }, + "pump": { + "version": "1.0.3", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "punycode": { + "version": "1.4.1", + "bundled": true + }, + "q": { + "version": "1.5.1", + "bundled": true + }, + "qs": { + "version": "6.4.0", + "bundled": true + }, + "random-bytes": { + "version": "1.0.0", + "bundled": true + }, + "random-uuid-v4": { + "version": "0.0.4", + "bundled": true + }, + "range-parser": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "bundled": true + }, + "raw-body": { + "version": "2.2.0", + "bundled": true, + "requires": { + "bytes": "2.4.0", + "iconv-lite": "0.4.15", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.6", + "bundled": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "readable-stream": { + "version": "1.0.34", + "bundled": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "recast": { + "version": "0.11.23", + "bundled": true, + "requires": { + "ast-types": "0.9.6", + "esprima": "3.1.3", + "private": "0.1.8", + "source-map": "0.5.7" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "repeating": { + "version": "1.1.3", + "bundled": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "replace-comments-x": { + "version": "2.0.0", + "bundled": true, + "requires": { + "require-coercible-to-string-x": "1.0.2", + "to-string-x": "1.4.5" + } + }, + "request": { + "version": "2.80.0", + "bundled": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "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.18", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.3.2", + "stringstream": "0.0.5", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.4.3", + "uuid": "3.2.1" + }, + "dependencies": { + "qs": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", + "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=" + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" + } + } + }, + "require-coercible-to-string-x": { + "version": "1.0.2", + "bundled": true, + "requires": { + "require-object-coercible-x": "1.4.3", + "to-string-x": "1.4.5" + } + }, + "require-object-coercible-x": { + "version": "1.4.3", + "bundled": true, + "requires": { + "is-nil-x": "1.4.2" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true + }, + "sax": { + "version": "0.4.2", + "bundled": true + }, + "secure-random": { + "version": "1.1.1", + "bundled": true + }, + "semver": { + "version": "5.4.1", + "bundled": true + }, + "send": { + "version": "0.15.4", + "bundled": true, + "requires": { + "debug": "2.6.8", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.0", + "http-errors": "1.6.2", + "mime": "1.3.4", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + }, + "dependencies": { + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "requires": { + "ms": "2.0.0" + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + } + } + }, + "serve-static": { + "version": "1.12.4", + "bundled": true, + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.15.4" + } + }, + "setprototypeof": { + "version": "1.0.3", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "simple-get": { + "version": "1.4.3", + "bundled": true, + "requires": { + "once": "1.4.0", + "unzip-response": "1.0.2", + "xtend": "4.0.1" + } + }, + "simple-mime": { + "version": "0.1.0", + "bundled": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "source-map": { + "version": "0.1.31", + "bundled": true, + "requires": { + "amdefine": "1.0.1" + } + }, + "spark-md5": { + "version": "0.0.5", + "bundled": true + }, + "sshpk": { + "version": "1.14.1", + "bundled": 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", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "statuses": { + "version": "1.4.0", + "bundled": true + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true + }, + "stringstream": { + "version": "0.0.5", + "bundled": true + }, + "strip-ansi": { + "version": "0.1.1", + "bundled": true + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-fs": { + "version": "1.16.0", + "bundled": true, + "requires": { + "chownr": "1.0.1", + "mkdirp": "0.5.1", + "pump": "1.0.3", + "tar-stream": "1.5.5" + } + }, + "tar-stream": { + "version": "1.5.5", + "bundled": true, + "requires": { + "bl": "1.2.1", + "end-of-stream": "1.4.1", + "readable-stream": "2.3.5", + "xtend": "4.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", + "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "through": { + "version": "2.3.8", + "bundled": true + }, + "through2": { + "version": "0.6.5", + "bundled": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + } + }, + "tiny-queue": { + "version": "0.2.1", + "bundled": true + }, + "to-boolean-x": { + "version": "1.0.3", + "bundled": true + }, + "to-integer-x": { + "version": "3.0.0", + "bundled": true, + "requires": { + "is-finite-x": "3.0.4", + "is-nan-x": "1.0.3", + "math-sign-x": "3.0.0", + "to-number-x": "2.0.0" + } + }, + "to-number-x": { + "version": "2.0.0", + "bundled": true, + "requires": { + "cached-constructors-x": "1.0.2", + "nan-x": "1.0.2", + "parse-int-x": "2.0.0", + "to-primitive-x": "1.1.0", + "trim-x": "3.0.0" + } + }, + "to-object-x": { + "version": "1.5.0", + "bundled": true, + "requires": { + "cached-constructors-x": "1.0.2", + "require-object-coercible-x": "1.4.3" + } + }, + "to-primitive-x": { + "version": "1.1.0", + "bundled": true, + "requires": { + "has-symbol-support-x": "1.4.2", + "is-date-object": "1.0.1", + "is-function-x": "3.3.0", + "is-nil-x": "1.4.2", + "is-primitive": "2.0.0", + "is-symbol": "1.0.1", + "require-object-coercible-x": "1.4.3", + "validate.io-undefined": "1.0.3" + }, + "dependencies": { + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + } + } }, - "object-assign": { + "to-property-key-x": { + "version": "2.0.2", + "bundled": true, + "requires": { + "has-symbol-support-x": "1.4.2", + "to-primitive-x": "1.1.0", + "to-string-x": "1.4.5" + } + }, + "to-string-symbols-supported-x": { + "version": "1.0.2", + "bundled": true, + "requires": { + "cached-constructors-x": "1.0.2", + "has-symbol-support-x": "1.4.2", + "is-symbol": "1.0.1" + } + }, + "to-string-tag-x": { + "version": "1.4.3", + "bundled": true, + "requires": { + "lodash.isnull": "3.0.0", + "validate.io-undefined": "1.0.3" + } + }, + "to-string-x": { + "version": "1.4.5", + "bundled": true, + "requires": { + "cached-constructors-x": "1.0.2", + "is-symbol": "1.0.1" + } + }, + "tough-cookie": { + "version": "2.3.4", + "bundled": true, + "requires": { + "punycode": "1.4.1" + } + }, + "trim-left-x": { + "version": "3.0.0", + "bundled": true, + "requires": { + "cached-constructors-x": "1.0.2", + "require-coercible-to-string-x": "1.0.2", + "white-space-x": "3.0.1" + } + }, + "trim-right-x": { + "version": "3.0.0", + "bundled": true, + "requires": { + "cached-constructors-x": "1.0.2", + "require-coercible-to-string-x": "1.0.2", + "white-space-x": "3.0.1" + } + }, + "trim-x": { + "version": "3.0.0", + "bundled": true, + "requires": { + "trim-left-x": "3.0.0", + "trim-right-x": "3.0.0" + } + }, + "tunnel-agent": { + "version": "0.4.3", + "bundled": true + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + }, + "type-detect": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-1.0.0.tgz", - "integrity": "sha1-5l3Idm07R7S4MHRlyDEdoDCwcKY=" - } - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "mime": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "requires": { - "mime-db": "1.33.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "1.1.11" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "multiparty": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-4.1.3.tgz", - "integrity": "sha1-PEPH/LGJbhdGBDap3Qtu8WaOT5Q=", - "requires": { - "fd-slicer": "1.0.1" - } - }, - "mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", - "dev": true - }, - "nan": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.9.2.tgz", - "integrity": "sha512-ltW65co7f3PQWBDbqVvaU1WtFJUsNW7sWWm4HINhbMQIyVyzIeyZ8toX5TC5eeooE6piZoaEh4cZkueSKG3KYw==" - }, - "nan-x": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nan-x/-/nan-x-1.0.0.tgz", - "integrity": "sha512-yw4Fhe2/UTzanQ4f0yHWkRnfTuHZFAi4GZDjXS4G+qv5BqXTqPJBbSxpa7MyyW9v4Y4ZySZQik1vcbNkhdnIOg==" - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" - }, - "nock": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/nock/-/nock-9.1.0.tgz", - "integrity": "sha512-u9QOLOZP0DlcKzmAzCuX5PRsIhbiRJupR7hJn1cCCT7VW3ZKUrEH/oxGEtVA8Xbu4EmzH9d/VK0x/3FxCGRrRg==", - "requires": { - "chai": "3.5.0", - "debug": "2.6.9", - "deep-equal": "1.0.1", - "json-stringify-safe": "5.0.1", - "lodash": "4.17.5", - "mkdirp": "0.5.1", - "propagate": "0.4.0", - "qs": "6.4.0", - "semver": "5.4.1" - } - }, - "node-gyp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", - "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", - "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": "2.0.4", - "osenv": "0.1.5", - "request": "2.80.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "which": "1.3.0" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" - } - } - }, - "node-jqunit": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/node-jqunit/-/node-jqunit-1.1.8.tgz", - "integrity": "sha1-Wq1LJ5hHVMoPZ1AmNPEwAt6+GNM=", - "requires": { - "infusion": "3.0.0-dev.20171117T095227Z.67ff934" - }, - "dependencies": { - "infusion": { - "version": "3.0.0-dev.20171117T095227Z.67ff934", - "resolved": "https://registry.npmjs.org/infusion/-/infusion-3.0.0-dev.20171117T095227Z.67ff934.tgz", - "integrity": "sha1-0Ng2s0OqbbiMDez+rnHmJ11BQg4=", + "bundled": true + }, + "type-is": { + "version": "1.6.16", + "bundled": true, "requires": { - "fluid-resolve": "1.3.0" + "media-typer": "0.3.0", + "mime-types": "2.1.18" } - } - } - }, - "node-ninja": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/node-ninja/-/node-ninja-1.0.2.tgz", - "integrity": "sha1-IKCeV7kuLfWRmT1L8JisPnJwYrY=", - "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": "2.0.4", - "osenv": "0.1.5", - "path-array": "1.0.1", - "request": "2.80.0", - "rimraf": "2.6.1", - "semver": "5.4.1", - "tar": "2.2.1", - "which": "1.3.0" - } - }, - "node-uuid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", - "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=" - }, - "nomnom": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", - "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", - "requires": { - "chalk": "0.4.0", - "underscore": "1.6.0" - } - }, - "noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "requires": { - "abbrev": "1.1.1" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.4.1", - "validate-npm-package-license": "3.0.1" - } - }, - "normalize-space-x": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-space-x/-/normalize-space-x-3.0.0.tgz", - "integrity": "sha512-tbCJerqZCCHPst4rRKgsTanLf45fjOyeAU5zE3mhDxJtFJKt66q39g2XArWhXelgTFVib8mNBUm6Wrd0LxYcfQ==", - "requires": { - "cached-constructors-x": "1.0.0", - "trim-x": "3.0.0", - "white-space-x": "3.0.0" - } - }, - "npmlog": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", - "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=", - "requires": { - "ansi": "0.3.1", - "are-we-there-yet": "1.1.4", - "gauge": "1.2.7" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" - }, - "oauth2orize": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/oauth2orize/-/oauth2orize-1.8.0.tgz", - "integrity": "sha1-8t3AEV1jXQSAdGJJwA8OoanFG6g=", - "requires": { - "debug": "2.6.9", - "uid2": "0.0.3", - "utils-merge": "1.0.0" - } - }, - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=" - }, - "object-get-own-property-descriptor-x": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/object-get-own-property-descriptor-x/-/object-get-own-property-descriptor-x-3.2.0.tgz", - "integrity": "sha512-Z/0fIrptD9YuzN+SNK/1kxAEaBcPQM4gSrtOSMSi9eplnL/AbyQcAyAlreAoAzmBon+DQ1Z+AdhxyQSvav5Fyg==", - "requires": { - "attempt-x": "1.1.1", - "has-own-property-x": "3.2.0", - "has-symbol-support-x": "1.4.1", - "is-falsey-x": "1.0.1", - "is-index-x": "1.1.0", - "is-primitive": "2.0.0", - "is-string": "1.0.4", - "property-is-enumerable-x": "1.1.0", - "to-object-x": "1.5.0", - "to-property-key-x": "2.0.2" + }, + "typedarray": { + "version": "0.0.6", + "bundled": true + }, + "uid-safe": { + "version": "2.1.5", + "bundled": true, + "requires": { + "random-bytes": "1.0.0" + } + }, + "uid2": { + "version": "0.0.3", + "bundled": true + }, + "ultron": { + "version": "1.1.1", + "bundled": true + }, + "underscore": { + "version": "1.6.0", + "bundled": true + }, + "underscore-node": { + "version": "0.1.2", + "bundled": true + }, + "unpipe": { + "version": "1.0.0", + "bundled": true + }, + "unreachable-branch-transform": { + "version": "0.3.0", + "bundled": true, + "requires": { + "esmangle-evaluator": "1.0.1", + "recast": "0.10.43", + "through2": "0.6.5" + }, + "dependencies": { + "ast-types": { + "version": "0.8.15", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.15.tgz", + "integrity": "sha1-ju8IJ/BN/w7IhXupJavj/qYZTlI=" + }, + "esprima-fb": { + "version": "15001.1001.0-dev-harmony-fb", + "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", + "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=" + }, + "recast": { + "version": "0.10.43", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.10.43.tgz", + "integrity": "sha1-uV1Q9tYHYaX2JS4V2AZ4FoSRzn8=", + "requires": { + "ast-types": "0.8.15", + "esprima-fb": "15001.1001.0-dev-harmony-fb", + "private": "0.1.8", + "source-map": "0.5.7" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "unzip-response": { + "version": "1.0.2", + "bundled": true + }, + "url-template": { + "version": "2.0.8", + "bundled": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "util-extend": { + "version": "1.0.3", + "bundled": true + }, + "utils-merge": { + "version": "1.0.0", + "bundled": true + }, + "validate.io-undefined": { + "version": "1.0.3", + "bundled": true + }, + "vary": { + "version": "1.1.2", + "bundled": true + }, + "verror": { + "version": "1.10.0", + "bundled": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "vuvuzela": { + "version": "1.0.3", + "bundled": true + }, + "which": { + "version": "1.3.0", + "bundled": true, + "requires": { + "isexe": "2.0.0" + } + }, + "white-space-x": { + "version": "3.0.1", + "bundled": true + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "write-file-atomic": { + "version": "2.3.0", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "signal-exit": "3.0.2" + } + }, + "write-stream": { + "version": "0.4.3", + "bundled": true, + "requires": { + "readable-stream": "0.0.4" + }, + "dependencies": { + "readable-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-0.0.4.tgz", + "integrity": "sha1-8y124/uGM0SlSNeZIwBxc2ZbO40=" + } + } + }, + "ws": { + "version": "3.3.1", + "bundled": true, + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.1", + "ultron": "1.1.1" + } + }, + "xml-mapping": { + "version": "1.7.1", + "bundled": true, + "requires": { + "sax": "0.4.2", + "xml-writer": "1.7.0" + } + }, + "xml-writer": { + "version": "1.7.0", + "bundled": true + }, + "xmlhttprequest": { + "version": "1.8.0", + "bundled": true + }, + "xmlhttprequest-cookie": { + "version": "0.9.5", + "bundled": true, + "requires": { + "xmlhttprequest": "1.8.0" + } + }, + "xtend": { + "version": "4.0.1", + "bundled": true + } } }, - "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=" + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "grunt": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.2.tgz", + "integrity": "sha1-TmpeaVtwRy/VME9fqeNCNoNqc7w=", + "dev": true, "requires": { - "ee-first": "1.1.1" + "coffeescript": "1.10.0", + "dateformat": "1.0.12", + "eventemitter2": "0.4.14", + "exit": "0.1.2", + "findup-sync": "0.3.0", + "glob": "7.0.6", + "grunt-cli": "1.2.0", + "grunt-known-options": "1.1.0", + "grunt-legacy-log": "1.0.0", + "grunt-legacy-util": "1.0.0", + "iconv-lite": "0.4.15", + "js-yaml": "3.5.5", + "minimatch": "3.0.4", + "nopt": "3.0.6", + "path-is-absolute": "1.0.1", + "rimraf": "2.2.8" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "glob": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "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" + } + }, + "grunt-cli": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", + "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", + "dev": true, + "requires": { + "findup-sync": "0.3.0", + "grunt-known-options": "1.1.0", + "nopt": "3.0.6", + "resolve": "1.1.7" + } + }, + "js-yaml": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz", + "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=", + "dev": true, + "requires": { + "argparse": "1.0.10", + "esprima": "2.7.3" + } + }, + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "dev": true + } } }, - "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "grunt-jsonlint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-jsonlint/-/grunt-jsonlint-1.1.0.tgz", + "integrity": "sha1-ox7pckCu4/NDyiY8Rb1TIGMSfbI=", + "dev": true, "requires": { - "wrappy": "1.0.2" + "jsonlint": "1.6.2", + "strip-json-comments": "2.0.1" } }, - "onetime": { + "grunt-known-options": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz", + "integrity": "sha1-pCdO6zL6dl2lp6OxcSYXzjsUQUk=", "dev": true }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "grunt-legacy-log": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.0.tgz", + "integrity": "sha1-+4bxgJhHvAfcR4Q/ns1srLYt8tU=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "parse-int-x": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-int-x/-/parse-int-x-2.0.0.tgz", - "integrity": "sha512-NIMm52gmd1+0qxJK8lV3OZ4zzWpRH1xcz9xCHXl+DNzddwUdS4NEtd7BmTeK7iCIXoaK5e6BoDMHgieH2eNIhg==", - "requires": { - "cached-constructors-x": "1.0.0", - "nan-x": "1.0.0", - "to-string-x": "1.4.2", - "trim-left-x": "3.0.0" + "colors": "1.1.2", + "grunt-legacy-log-utils": "1.0.0", + "hooker": "0.2.3", + "lodash": "3.10.1", + "underscore.string": "3.2.3" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } } }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "grunt-legacy-log-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz", + "integrity": "sha1-p7ji0Ps1taUPSvmG/BEnSevJbz0=", "dev": true, "requires": { - "error-ex": "1.3.1" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" - }, - "passport": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.3.2.tgz", - "integrity": "sha1-ndAJ+RXo/glbASSgG4+C2gdRAQI=", - "requires": { - "passport-strategy": "1.0.0", - "pause": "0.0.1" - } - }, - "passport-oauth2-client-password": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/passport-oauth2-client-password/-/passport-oauth2-client-password-0.1.2.tgz", - "integrity": "sha1-TzeLZ4uS0W270jOmxwZSAJPlYbo=", - "requires": { - "passport-strategy": "1.0.0" + "chalk": "1.1.3", + "lodash": "4.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "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" + } + }, + "lodash": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", + "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + } } }, - "passport-strategy": { + "grunt-legacy-util": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", - "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" - }, - "path-array": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-array/-/path-array-1.0.1.tgz", - "integrity": "sha1-fi8PNfB6IBUSK4aLfqwOssT+wnE=", - "requires": { - "array-index": "1.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz", + "integrity": "sha1-OGqnjcbtUJhsKxiVcmWxtIq7m4Y=", "dev": true, "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "async": "1.5.2", + "exit": "0.1.2", + "getobject": "0.1.0", + "hooker": "0.2.3", + "lodash": "4.3.0", + "underscore.string": "3.2.3", + "which": "1.2.14" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "lodash": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", + "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", + "dev": true + }, + "which": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + } + } }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "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, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "ansi-regex": "2.1.1" } }, - "pause": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", - "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" + "has-color": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", + "dev": true }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + "hooker": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", + "dev": true }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "dev": true }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "iconv-lite": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", "dev": true }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "ignore": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", "dev": true }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "pinkie": "2.0.4" + "once": "1.4.0", + "wrappy": "1.0.2" } }, - "pluralize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, - "pouchdb": { - "version": "6.3.4", - "resolved": "https://registry.npmjs.org/pouchdb/-/pouchdb-6.3.4.tgz", - "integrity": "sha512-+DSs6ipqj/SCIbEmIE6GZXYzem6YLkXPd2WBkoss5kM8P6VyNy8HUiQiYm6+NhLfchby941duXSWsejlqCuEYw==", + "inquirer": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", + "dev": true, "requires": { - "argsarray": "0.0.1", - "buffer-from": "0.1.1", - "clone-buffer": "1.0.0", - "debug": "2.6.4", - "double-ended-queue": "2.1.0-0", - "immediate": "3.0.6", - "inherits": "2.0.3", - "level-codec": "7.0.0", - "level-write-stream": "1.0.0", - "leveldown": "1.5.0", - "levelup": "1.3.8", - "lie": "3.1.1", - "ltgt": "2.2.0", - "readable-stream": "1.0.33", - "request": "2.80.0", - "spark-md5": "3.0.0", - "through2": "2.0.3", - "uuid": "3.2.1", - "vuvuzela": "1.0.3" + "ansi-escapes": "1.4.0", + "ansi-regex": "2.1.1", + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-width": "2.2.0", + "figures": "1.7.0", + "lodash": "4.17.5", + "readline2": "1.0.1", + "run-async": "0.1.0", + "rx-lite": "3.1.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "through": "2.3.8" }, "dependencies": { - "debug": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.4.tgz", - "integrity": "sha1-dYaps8OXQcAoKuM0RcTorHRzT+A=", - "requires": { - "ms": "0.7.3" - } - }, - "ms": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", - "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=" + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true }, - "readable-stream": { - "version": "1.0.33", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz", - "integrity": "sha1-OjYN1mwbHX/UcFOJhg7aHQ9hEmw=", + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" + "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" } }, - "spark-md5": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz", - "integrity": "sha1-NyIifFTi+vJLHcbZM8wUTm9xv+8=" - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, "requires": { - "readable-stream": "2.3.4", - "xtend": "4.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", - "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "5.1.1" - } - } + "ansi-regex": "2.1.1" } - }, - "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" } } }, - "pouchdb-all-dbs": { - "version": "git://github.com/the-t-in-rtf/pouchdb-all-dbs.git#010173f4afa7b752787885ee8606eda4c1f047bb", - "requires": { - "argsarray": "0.0.1", - "es3ify": "0.1.4", - "infusion": "3.0.0-dev.20171102T191539Z.c0636b395", - "inherits": "2.0.3", - "pouchdb-promise": "5.4.3", - "tiny-queue": "0.2.1" - }, - "dependencies": { - "infusion": { - "version": "3.0.0-dev.20171102T191539Z.c0636b395", - "resolved": "https://registry.npmjs.org/infusion/-/infusion-3.0.0-dev.20171102T191539Z.c0636b395.tgz", - "integrity": "sha1-5SYGaY+VFWIB39mJUf5wBKpzntk=", - "requires": { - "fluid-resolve": "1.3.0" - } - } - } + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true }, - "pouchdb-auth": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pouchdb-auth/-/pouchdb-auth-2.1.1.tgz", - "integrity": "sha1-X04iFvQk3h1cpQ9LTOt2Jc1YllQ=", + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-builtin-module": { + "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": { - "base64url": "1.0.6", - "couchdb-calculate-session-id": "1.1.2", - "crypto-lite": "0.1.0", - "pouchdb-bulkdocs-wrapper": "1.0.2", - "pouchdb-plugin-error": "1.0.1", - "pouchdb-promise": "5.4.3", - "pouchdb-req-http-query": "1.0.4", - "pouchdb-system-db": "1.0.4", - "pouchdb-validation": "1.2.1", - "pouchdb-wrappers": "1.3.6", - "promise-nodify": "1.0.2", - "secure-random": "1.1.1" + "builtin-modules": "1.1.1" } }, - "pouchdb-bulkdocs-wrapper": { + "is-finite": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pouchdb-bulkdocs-wrapper/-/pouchdb-bulkdocs-wrapper-1.0.2.tgz", - "integrity": "sha1-DDYlGVg3F5IAYDKIEslHtqGvwhE=", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, "requires": { - "pouchdb-promise": "0.0.0" - }, - "dependencies": { - "bluebird": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.2.4.tgz", - "integrity": "sha1-WYXsI8tv8aWDTMZEezxe8BD9Mho=" - }, - "lie": { - "version": "2.7.7", - "resolved": "https://registry.npmjs.org/lie/-/lie-2.7.7.tgz", - "integrity": "sha1-fPlZvtSJWbBi8Drka7vzqsMCark=", - "requires": { - "immediate": "3.0.6" - } - }, - "pouchdb-promise": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-0.0.0.tgz", - "integrity": "sha1-PAFOYndm2UW+PycOB5p9tNLRmCc=", - "requires": { - "bluebird": "1.2.4", - "lie": "2.7.7" - } - } + "number-is-nan": "1.0.1" } }, - "pouchdb-changeslike-wrapper": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pouchdb-changeslike-wrapper/-/pouchdb-changeslike-wrapper-1.0.1.tgz", - "integrity": "sha1-OQuapX/hfyL/OmKBRh9q8OBAcTU=" - }, - "pouchdb-collate": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pouchdb-collate/-/pouchdb-collate-1.2.0.tgz", - "integrity": "sha1-yuO4MPyhJLf5fSMEbk+qMR7Dgow=" - }, - "pouchdb-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/pouchdb-extend/-/pouchdb-extend-0.1.2.tgz", - "integrity": "sha1-0c5RG/cE7S4p979CikFqz/+hJLg=" - }, - "pouchdb-find": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/pouchdb-find/-/pouchdb-find-0.10.3.tgz", - "integrity": "sha1-tg1B4doSPGMlzp1/P4bMOGQgt6Y=", + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, "requires": { - "argsarray": "0.0.1", - "debug": "2.6.9", - "inherits": "2.0.3", - "is-array": "1.0.1", - "pouchdb-collate": "1.2.0", - "pouchdb-extend": "0.1.2", - "pouchdb-promise": "5.4.0", - "pouchdb-upsert": "2.0.2", - "spark-md5": "0.0.5" - }, - "dependencies": { - "base62": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/base62/-/base62-1.2.7.tgz", - "integrity": "sha512-ck0nDbXLEq2nD5jIcEzdpk07sYQ5P6z4NMTIgeQCFr5CCRZzmgUPlOes4o0k5pvEUQJnKO/D079ybzjpjIKf2Q==" - }, - "es3ify": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/es3ify/-/es3ify-0.2.2.tgz", - "integrity": "sha1-Xa4+ZQ5b42hLiAZlE9Uo0JJimGI=", - "requires": { - "esprima": "2.7.3", - "jstransform": "11.0.3", - "through": "2.3.8" - } - }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" - }, - "jstransform": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-11.0.3.tgz", - "integrity": "sha1-CaeJk+CuTU70SH9hVakfYZDLQiM=", - "requires": { - "base62": "1.2.7", - "commoner": "0.10.8", - "esprima-fb": "15001.1.0-dev-harmony-fb", - "object-assign": "2.1.1", - "source-map": "0.4.4" - }, - "dependencies": { - "esprima-fb": { - "version": "15001.1.0-dev-harmony-fb", - "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz", - "integrity": "sha1-MKlHMDxrjV6VW+4rmbHSMyBqaQE=" - } - } - }, - "lie": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.0.4.tgz", - "integrity": "sha1-vHrh6+fxyN45r9zU94kHa0ew9jQ=", - "requires": { - "es3ify": "0.2.2", - "immediate": "3.0.6", - "inline-process-browser": "1.0.0", - "unreachable-branch-transform": "0.3.0" - } - }, - "pouchdb-promise": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-5.4.0.tgz", - "integrity": "sha1-4nesa9oayFBFl6u1xDp8Op5Whm8=", - "requires": { - "lie": "3.0.4" - } - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "requires": { - "amdefine": "1.0.1" - } - } + "number-is-nan": "1.0.1" } }, - "pouchdb-list": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pouchdb-list/-/pouchdb-list-1.1.0.tgz", - "integrity": "sha1-PkYZk33XaqiQnqyT/ynAe/C5tFE=", + "is-my-ip-valid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", + "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", + "dev": true + }, + "is-my-json-valid": { + "version": "2.17.2", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", + "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", + "dev": true, "requires": { - "couchdb-objects": "1.0.7", - "couchdb-render": "1.0.1", - "extend": "3.0.1", - "pouchdb-plugin-error": "1.0.1", - "pouchdb-promise": "0.0.0", - "pouchdb-req-http-query": "1.0.4", - "promise-nodify": "1.0.2" - }, - "dependencies": { - "bluebird": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.2.4.tgz", - "integrity": "sha1-WYXsI8tv8aWDTMZEezxe8BD9Mho=" - }, - "lie": { - "version": "2.7.7", - "resolved": "https://registry.npmjs.org/lie/-/lie-2.7.7.tgz", - "integrity": "sha1-fPlZvtSJWbBi8Drka7vzqsMCark=", - "requires": { - "immediate": "3.0.6" - } - }, - "pouchdb-promise": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-0.0.0.tgz", - "integrity": "sha1-PAFOYndm2UW+PycOB5p9tNLRmCc=", - "requires": { - "bluebird": "1.2.4", - "lie": "2.7.7" - } - } + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "is-my-ip-valid": "1.0.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" } }, - "pouchdb-plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pouchdb-plugin-error/-/pouchdb-plugin-error-1.0.1.tgz", - "integrity": "sha1-xy8GAUEkqfqQOPyO2ifFizSIBco=" + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true }, - "pouchdb-promise": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-5.4.3.tgz", - "integrity": "sha1-Mx1nCxmJ1aA/JogRIU8n9UFQyys=", + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true, "requires": { - "lie": "3.0.4" - }, - "dependencies": { - "base62": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/base62/-/base62-1.2.7.tgz", - "integrity": "sha512-ck0nDbXLEq2nD5jIcEzdpk07sYQ5P6z4NMTIgeQCFr5CCRZzmgUPlOes4o0k5pvEUQJnKO/D079ybzjpjIKf2Q==" - }, - "es3ify": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/es3ify/-/es3ify-0.2.2.tgz", - "integrity": "sha1-Xa4+ZQ5b42hLiAZlE9Uo0JJimGI=", - "requires": { - "esprima": "2.7.3", - "jstransform": "11.0.3", - "through": "2.3.8" - } - }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" - }, - "jstransform": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-11.0.3.tgz", - "integrity": "sha1-CaeJk+CuTU70SH9hVakfYZDLQiM=", - "requires": { - "base62": "1.2.7", - "commoner": "0.10.8", - "esprima-fb": "15001.1.0-dev-harmony-fb", - "object-assign": "2.1.1", - "source-map": "0.4.4" - }, - "dependencies": { - "esprima-fb": { - "version": "15001.1.0-dev-harmony-fb", - "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz", - "integrity": "sha1-MKlHMDxrjV6VW+4rmbHSMyBqaQE=" - } - } - }, - "lie": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.0.4.tgz", - "integrity": "sha1-vHrh6+fxyN45r9zU94kHa0ew9jQ=", - "requires": { - "es3ify": "0.2.2", - "immediate": "3.0.6", - "inline-process-browser": "1.0.0", - "unreachable-branch-transform": "0.3.0" - } - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "requires": { - "amdefine": "1.0.1" - } - } + "is-path-inside": "1.0.1" } }, - "pouchdb-replicator": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/pouchdb-replicator/-/pouchdb-replicator-2.1.3.tgz", - "integrity": "sha1-pIfk/sCW+FSA+D6aKh8PuMpMFbk=", + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, "requires": { - "equals": "1.0.5", - "extend": "1.3.0", - "pouchdb-plugin-error": "1.0.1", - "pouchdb-promise": "0.0.0", - "pouchdb-system-db": "1.0.4", - "pouchdb-validation": "1.2.1", - "promise-nodify": "1.0.2", - "random-uuid-v4": "0.0.4" - }, - "dependencies": { - "bluebird": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.2.4.tgz", - "integrity": "sha1-WYXsI8tv8aWDTMZEezxe8BD9Mho=" - }, - "extend": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", - "integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=" - }, - "lie": { - "version": "2.7.7", - "resolved": "https://registry.npmjs.org/lie/-/lie-2.7.7.tgz", - "integrity": "sha1-fPlZvtSJWbBi8Drka7vzqsMCark=", - "requires": { - "immediate": "3.0.6" - } - }, - "pouchdb-promise": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-0.0.0.tgz", - "integrity": "sha1-PAFOYndm2UW+PycOB5p9tNLRmCc=", - "requires": { - "bluebird": "1.2.4", - "lie": "2.7.7" - } - } + "path-is-inside": "1.0.2" } }, - "pouchdb-req-http-query": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pouchdb-req-http-query/-/pouchdb-req-http-query-1.0.4.tgz", - "integrity": "sha1-d+c1xBBvO5clx9VZWakyM2TdI3E=", + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-yaml": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", + "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "dev": true, "requires": { - "extend": "1.3.0", - "header-case-normalizer": "1.0.3", - "pouchdb-plugin-error": "1.0.1", - "pouchdb-promise": "0.0.0", - "xmlhttprequest-cookie": "0.9.5" + "argparse": "1.0.10", + "esprima": "4.0.0" }, "dependencies": { - "bluebird": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.2.4.tgz", - "integrity": "sha1-WYXsI8tv8aWDTMZEezxe8BD9Mho=" - }, - "extend": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", - "integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=" - }, - "lie": { - "version": "2.7.7", - "resolved": "https://registry.npmjs.org/lie/-/lie-2.7.7.tgz", - "integrity": "sha1-fPlZvtSJWbBi8Drka7vzqsMCark=", - "requires": { - "immediate": "3.0.6" - } - }, - "pouchdb-promise": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-0.0.0.tgz", - "integrity": "sha1-PAFOYndm2UW+PycOB5p9tNLRmCc=", - "requires": { - "bluebird": "1.2.4", - "lie": "2.7.7" - } + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true } } }, - "pouchdb-rewrite": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/pouchdb-rewrite/-/pouchdb-rewrite-1.0.7.tgz", - "integrity": "sha1-P5d+PfTJ5Uz3Xoct6ekR+HeQwtg=", + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, "requires": { - "couchdb-objects": "1.0.7", - "extend": "1.3.0", - "pouchdb-plugin-error": "1.0.1", - "pouchdb-req-http-query": "1.0.4", - "pouchdb-route": "1.0.3", - "promise-nodify": "1.0.2" - }, - "dependencies": { - "extend": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", - "integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=" - } + "jsonify": "0.0.0" } }, - "pouchdb-route": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pouchdb-route/-/pouchdb-route-1.0.3.tgz", - "integrity": "sha1-5QIbdorffh9HUNlNlQ9Uqf1rU0A=", + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonlint": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.2.tgz", + "integrity": "sha1-VzcEUIX1XrRVxosf9OvAG9UOiDA=", + "dev": true, "requires": { - "extend": "1.3.0", - "pouchdb-plugin-error": "1.0.1" - }, - "dependencies": { - "extend": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", - "integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=" - } + "JSV": "4.0.2", + "nomnom": "1.8.1" } }, - "pouchdb-security": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/pouchdb-security/-/pouchdb-security-1.2.6.tgz", - "integrity": "sha1-OE/SiagD5xqYhTULq7SsERBEOQQ=", + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, "requires": { - "extend": "1.3.0", - "pouchdb-bulkdocs-wrapper": "1.0.2", - "pouchdb-changeslike-wrapper": "1.0.1", - "pouchdb-plugin-error": "1.0.1", - "pouchdb-promise": "0.0.0", - "pouchdb-req-http-query": "1.0.4", - "pouchdb-wrappers": "1.3.6", - "promise-nodify": "1.0.2" - }, - "dependencies": { - "bluebird": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.2.4.tgz", - "integrity": "sha1-WYXsI8tv8aWDTMZEezxe8BD9Mho=" - }, - "extend": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extend/-/extend-1.3.0.tgz", - "integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=" - }, - "lie": { - "version": "2.7.7", - "resolved": "https://registry.npmjs.org/lie/-/lie-2.7.7.tgz", - "integrity": "sha1-fPlZvtSJWbBi8Drka7vzqsMCark=", - "requires": { - "immediate": "3.0.6" - } - }, - "pouchdb-promise": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-0.0.0.tgz", - "integrity": "sha1-PAFOYndm2UW+PycOB5p9tNLRmCc=", - "requires": { - "bluebird": "1.2.4", - "lie": "2.7.7" - } - } + "prelude-ls": "1.1.2", + "type-check": "0.3.2" } }, - "pouchdb-show": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/pouchdb-show/-/pouchdb-show-1.0.8.tgz", - "integrity": "sha1-lQz8KHcMCqLbrJbydcgJU/5aJeY=", + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, "requires": { - "couchdb-objects": "1.0.7", - "couchdb-render": "1.0.1", - "pouchdb-plugin-error": "1.0.1", - "pouchdb-promise": "0.0.0", - "pouchdb-req-http-query": "1.0.4", - "promise-nodify": "1.0.2" - }, - "dependencies": { - "bluebird": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.2.4.tgz", - "integrity": "sha1-WYXsI8tv8aWDTMZEezxe8BD9Mho=" - }, - "lie": { - "version": "2.7.7", - "resolved": "https://registry.npmjs.org/lie/-/lie-2.7.7.tgz", - "integrity": "sha1-fPlZvtSJWbBi8Drka7vzqsMCark=", - "requires": { - "immediate": "3.0.6" - } - }, - "pouchdb-promise": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-0.0.0.tgz", - "integrity": "sha1-PAFOYndm2UW+PycOB5p9tNLRmCc=", - "requires": { - "bluebird": "1.2.4", - "lie": "2.7.7" - } - } + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" } }, - "pouchdb-size": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/pouchdb-size/-/pouchdb-size-1.2.2.tgz", - "integrity": "sha1-EpFfE+nSQcsOcKZsGOfV/2mfEKg=", + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "dev": true + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, "requires": { - "bluebird": "2.11.0", - "get-folder-size": "0.1.1", - "pouchdb-wrappers": "1.3.6", - "promise-nodify": "1.0.2" - }, - "dependencies": { - "bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" - } + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" } }, - "pouchdb-system-db": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pouchdb-system-db/-/pouchdb-system-db-1.0.4.tgz", - "integrity": "sha1-FQGNhxnwK8/Zy2nnJDuLCUF0uqI=", + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { - "pouchdb-changeslike-wrapper": "1.0.1", - "pouchdb-plugin-error": "1.0.1", - "pouchdb-security": "1.2.6", - "pouchdb-wrappers": "1.3.6" + "brace-expansion": "1.1.11" } }, - "pouchdb-update": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/pouchdb-update/-/pouchdb-update-1.0.8.tgz", - "integrity": "sha1-l+k9W619jSg+DRTeZTvOJMNheLQ=", - "requires": { - "couchdb-eval": "1.0.6", - "couchdb-objects": "1.0.7", - "couchdb-resp-completer": "1.0.3", - "pouchdb-plugin-error": "1.0.1", - "pouchdb-promise": "0.0.0", - "pouchdb-req-http-query": "1.0.4", - "promise-nodify": "1.0.2" - }, - "dependencies": { - "bluebird": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.2.4.tgz", - "integrity": "sha1-WYXsI8tv8aWDTMZEezxe8BD9Mho=" - }, - "lie": { - "version": "2.7.7", - "resolved": "https://registry.npmjs.org/lie/-/lie-2.7.7.tgz", - "integrity": "sha1-fPlZvtSJWbBi8Drka7vzqsMCark=", - "requires": { - "immediate": "3.0.6" - } - }, - "pouchdb-promise": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-0.0.0.tgz", - "integrity": "sha1-PAFOYndm2UW+PycOB5p9tNLRmCc=", - "requires": { - "bluebird": "1.2.4", - "lie": "2.7.7" - } - } - } + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true }, - "pouchdb-upsert": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/pouchdb-upsert/-/pouchdb-upsert-2.0.2.tgz", - "integrity": "sha1-x0bMmUXlLYx45C9jreBmZ3eZZxI=", + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, "requires": { - "pouchdb-promise": "5.4.3" + "minimist": "0.0.8" } }, - "pouchdb-validation": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pouchdb-validation/-/pouchdb-validation-1.2.1.tgz", - "integrity": "sha1-YJISgmFbYNd/UYU3+QzAeRBpwCs=", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", + "dev": true + }, + "nan": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.9.2.tgz", + "integrity": "sha512-ltW65co7f3PQWBDbqVvaU1WtFJUsNW7sWWm4HINhbMQIyVyzIeyZ8toX5TC5eeooE6piZoaEh4cZkueSKG3KYw==" + }, + "node-jqunit": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/node-jqunit/-/node-jqunit-1.1.8.tgz", + "integrity": "sha1-Wq1LJ5hHVMoPZ1AmNPEwAt6+GNM=", + "dev": true, "requires": { - "couchdb-eval": "1.0.6", - "couchdb-objects": "1.0.7", - "pouchdb-bulkdocs-wrapper": "1.0.2", - "pouchdb-plugin-error": "1.0.1", - "pouchdb-promise": "0.0.0", - "pouchdb-wrappers": "1.3.6", - "random-uuid-v4": "0.0.4" + "infusion": "3.0.0-dev.20171117T095227Z.67ff934" }, "dependencies": { - "bluebird": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.2.4.tgz", - "integrity": "sha1-WYXsI8tv8aWDTMZEezxe8BD9Mho=" - }, - "lie": { - "version": "2.7.7", - "resolved": "https://registry.npmjs.org/lie/-/lie-2.7.7.tgz", - "integrity": "sha1-fPlZvtSJWbBi8Drka7vzqsMCark=", - "requires": { - "immediate": "3.0.6" - } - }, - "pouchdb-promise": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-0.0.0.tgz", - "integrity": "sha1-PAFOYndm2UW+PycOB5p9tNLRmCc=", + "infusion": { + "version": "3.0.0-dev.20171117T095227Z.67ff934", + "resolved": "https://registry.npmjs.org/infusion/-/infusion-3.0.0-dev.20171117T095227Z.67ff934.tgz", + "integrity": "sha1-0Ng2s0OqbbiMDez+rnHmJ11BQg4=", + "dev": true, "requires": { - "bluebird": "1.2.4", - "lie": "2.7.7" + "fluid-resolve": "1.3.0" } } } }, - "pouchdb-vhost": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pouchdb-vhost/-/pouchdb-vhost-1.0.2.tgz", - "integrity": "sha1-URUX2zx/X9WQ4+6LIOPvnolAD9Y=", + "nomnom": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", + "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", + "dev": true, "requires": { - "pouchdb-route": "1.0.3", - "promise-nodify": "1.0.2" + "chalk": "0.4.0", + "underscore": "1.6.0" } }, - "pouchdb-wrappers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/pouchdb-wrappers/-/pouchdb-wrappers-1.3.6.tgz", - "integrity": "sha1-8+EbZk6JqbMX54XJYVHMsXNvJdA=", + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, "requires": { - "promise-nodify": "1.0.2" + "abbrev": "1.1.1" } }, - "prebuild": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/prebuild/-/prebuild-4.5.0.tgz", - "integrity": "sha1-KqoN8gY7/4FKgDvU3JT/m2Tl3wA=", + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, "requires": { - "async": "1.5.2", - "execspawn": "1.0.1", - "expand-template": "1.1.0", - "ghreleases": "1.0.7", - "github-from-package": "0.0.0", - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "node-gyp": "3.6.2", - "node-ninja": "1.0.2", - "noop-logger": "0.1.1", - "npmlog": "2.0.4", - "os-homedir": "1.0.2", - "pump": "1.0.3", - "rc": "1.2.5", - "simple-get": "1.4.3", - "tar-fs": "1.16.0", - "tar-stream": "1.5.5", - "xtend": "4.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.4.1", + "validate-npm-package-license": "3.0.1" } }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } }, - "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "dev": true }, - "promise-nodify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/promise-nodify/-/promise-nodify-1.0.2.tgz", - "integrity": "sha1-DQ+xQ8M0ALAGG0flgSV1VwR9TFo=" + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + } }, - "propagate": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-0.4.0.tgz", - "integrity": "sha1-8/zKCm/gZzanulcpZgaWF8EwtIE=" + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true }, - "property-is-enumerable-x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/property-is-enumerable-x/-/property-is-enumerable-x-1.1.0.tgz", - "integrity": "sha512-22cKy3w3OpRswU6to9iKWDDlg+F9vF2REcwGlGW23jyLjHb1U/jJEWA44sWupOnkhGfDgotU6Lw+N2oyhNi+5A==", + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, "requires": { - "to-object-x": "1.5.0", - "to-property-key-x": "2.0.2" + "error-ex": "1.3.1" } }, - "proxy-addr": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz", - "integrity": "sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=", + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.4.0" + "pinkie-promise": "2.0.1" } }, - "prr": { + "path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, - "pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" } }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" - }, - "random-bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" - }, - "random-uuid-v4": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/random-uuid-v4/-/random-uuid-v4-0.0.4.tgz", - "integrity": "sha1-ShibBWkJjbt6Q1sJVAH4geNh62o=" + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true }, - "raw-body": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", - "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, "requires": { - "bytes": "2.4.0", - "iconv-lite": "0.4.15", - "unpipe": "1.0.0" + "pinkie": "2.0.4" } }, - "rc": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.5.tgz", - "integrity": "sha1-J1zWh/bjs2zHVrqibf7oCnkDAf0=", - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } + "pluralize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", + "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true }, "read-pkg": { "version": "1.1.0", @@ -4968,49 +5780,15 @@ "read-pkg": "1.1.0" } }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, "readline2": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "mute-stream": "0.0.5" - } - }, - "recast": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", - "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", - "requires": { - "ast-types": "0.9.6", - "esprima": "3.1.3", - "private": "0.1.8", - "source-map": "0.5.7" - }, - "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } + "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "mute-stream": "0.0.5" } }, "rechoir": { @@ -5091,80 +5869,6 @@ "ref": "1.3.4" } }, - "repeating": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", - "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", - "requires": { - "is-finite": "1.0.2" - } - }, - "replace-comments-x": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-comments-x/-/replace-comments-x-2.0.0.tgz", - "integrity": "sha512-+vMP4jqU+8HboLWms6YMNEiaZG5hh1oR6ENCnGYDF/UQ7aYiJUK/8tcl3+KZAHRCKKa3gqzrfiarlUBHQSgRlg==", - "requires": { - "require-coercible-to-string-x": "1.0.0", - "to-string-x": "1.4.2" - } - }, - "request": { - "version": "2.80.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.80.0.tgz", - "integrity": "sha1-jMFi1215OBze/dNQXXa4C2BYm9A=", - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "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.18", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.3.2", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.4.3", - "uuid": "3.2.1" - }, - "dependencies": { - "qs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=" - }, - "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" - } - } - }, - "require-coercible-to-string-x": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/require-coercible-to-string-x/-/require-coercible-to-string-x-1.0.0.tgz", - "integrity": "sha512-Rpfd4sMdflPAKecdKhfAtQHlZzzle4UMUgxJ01hXtTcNWMV8w9GeZnKhEyrT73kgrflBOP1zg41amUPZGcNspA==", - "requires": { - "require-object-coercible-x": "1.4.1", - "to-string-x": "1.4.2" - } - }, - "require-object-coercible-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/require-object-coercible-x/-/require-object-coercible-x-1.4.1.tgz", - "integrity": "sha512-0YHa2afepsLfQvwQ1P2XvDZnGOUia5sC07ZijIRU2dnsRxnuilXWF6B2CFaKGDA9eZl39lJHrXCDsnfgroRd6Q==", - "requires": { - "is-nil-x": "1.4.1" - } - }, "require-uncached": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", @@ -5201,6 +5905,7 @@ "version": "2.6.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "dev": true, "requires": { "glob": "7.1.2" } @@ -5220,76 +5925,11 @@ "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", "dev": true }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "sax": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/sax/-/sax-0.4.2.tgz", - "integrity": "sha1-OfO2AXM9a+yXEFskKipA/Wl4rDw=" - }, - "secure-random": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/secure-random/-/secure-random-1.1.1.tgz", - "integrity": "sha1-CIDy2MUYX0vLRoQFjINrTdsHFFo=" - }, "semver": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" - }, - "send": { - "version": "0.15.4", - "resolved": "https://registry.npmjs.org/send/-/send-0.15.4.tgz", - "integrity": "sha1-mF+qPihLAnPHkzZKNcZze9k5Bbk=", - "requires": { - "debug": "2.6.8", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.0", - "http-errors": "1.6.2", - "mime": "1.3.4", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.3.1" - }, - "dependencies": { - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "requires": { - "ms": "2.0.0" - } - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" - } - } - }, - "serve-static": { - "version": "1.12.4", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.4.tgz", - "integrity": "sha1-m2qpjutyU8Tu3Ewfb9vKYJkBqWE=", - "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.15.4" - } - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true }, "shelljs": { "version": "0.8.1", @@ -5305,22 +5945,8 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "simple-get": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-1.4.3.tgz", - "integrity": "sha1-6XVe2kB+ltpAxeUVjJ6jezO+y+s=", - "requires": { - "once": "1.4.0", - "unzip-response": "1.0.2", - "xtend": "4.0.1" - } - }, - "simple-mime": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/simple-mime/-/simple-mime-0.1.0.tgz", - "integrity": "sha1-lfUXxPRm18/1YacfydqyWW6p7y4=" + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true }, "slice-ansi": { "version": "0.0.4", @@ -5328,27 +5954,6 @@ "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", "dev": true }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "requires": { - "hoek": "2.16.3" - } - }, - "source-map": { - "version": "0.1.31", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.31.tgz", - "integrity": "sha1-n3BNDWnZ4TioG63267T94z0VHGE=", - "requires": { - "amdefine": "1.0.1" - } - }, - "spark-md5": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-0.0.5.tgz", - "integrity": "sha1-kx2l47lR0GUn6bfZDf/1eLb83I4=" - }, "spdx-correct": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", @@ -5376,33 +5981,6 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", - "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", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - }, "string-argv": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz", @@ -5433,17 +6011,14 @@ "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true }, "strip-ansi": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", - "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=" + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "dev": true }, "strip-bom": { "version": "2.0.0", @@ -5466,7 +6041,8 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true }, "supports-color": { "version": "2.0.0", @@ -5551,67 +6127,6 @@ } } }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-fs": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.0.tgz", - "integrity": "sha512-I9rb6v7mjWLtOfCau9eH5L7sLJyU2BnxtEZRQ5Mt+eRKmf1F0ohXmT/Jc3fr52kDvjJ/HV5MH3soQfPL5bQ0Yg==", - "requires": { - "chownr": "1.0.1", - "mkdirp": "0.5.1", - "pump": "1.0.3", - "tar-stream": "1.5.5" - } - }, - "tar-stream": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.5.tgz", - "integrity": "sha512-mQdgLPc/Vjfr3VWqWbfxW8yQNiJCbAZ+Gf6GDu1Cy0bdb33ofyiNGBtAY96jHFhDuivCwgW1H9DgTON+INiXgg==", - "requires": { - "bl": "1.2.1", - "end-of-stream": "1.4.1", - "readable-stream": "2.3.4", - "xtend": "4.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", - "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -5621,128 +6136,8 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - }, - "tiny-queue": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tiny-queue/-/tiny-queue-0.2.1.tgz", - "integrity": "sha1-JaZ/LG4lOyypQZd7XvdELvl6YEY=" - }, - "to-boolean-x": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-boolean-x/-/to-boolean-x-1.0.1.tgz", - "integrity": "sha512-PstxY3K6hVEHnY3FITs8XBoJbt0RI1e4MLIhAL9hWa3BtVLCrb86vU5z6lEKh7uZZjiPiLqIKMmfMro1nNgtXQ==" - }, - "to-integer-x": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/to-integer-x/-/to-integer-x-3.0.0.tgz", - "integrity": "sha512-794L2Lpwjtynm7RxahJi2YdbRY75gTxUW27TMuN26UgwPkmJb/+HPhkFEFbz+E4vNoiP0dxq5tq5fkXoXLaK/w==", - "requires": { - "is-finite-x": "3.0.2", - "is-nan-x": "1.0.1", - "math-sign-x": "3.0.0", - "to-number-x": "2.0.0" - } - }, - "to-number-x": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-number-x/-/to-number-x-2.0.0.tgz", - "integrity": "sha512-lGOnCoccUoSzjZ/9Uen8TC4+VFaQcFGhTroWTv2tYWxXgyJV1zqAZ8hEIMkez/Eo790fBMOjidTnQ/OJSCvAoQ==", - "requires": { - "cached-constructors-x": "1.0.0", - "nan-x": "1.0.0", - "parse-int-x": "2.0.0", - "to-primitive-x": "1.1.0", - "trim-x": "3.0.0" - } - }, - "to-object-x": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/to-object-x/-/to-object-x-1.5.0.tgz", - "integrity": "sha512-AKn5GQcdWky+s20vjWkt+Wa6y3dxQH3yQyMBhOfBOPldUwqwhgvlqcIg5H092ntNc+TX8/Cxzs1kMHH19pyCnA==", - "requires": { - "cached-constructors-x": "1.0.0", - "require-object-coercible-x": "1.4.1" - } - }, - "to-primitive-x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/to-primitive-x/-/to-primitive-x-1.1.0.tgz", - "integrity": "sha512-gyMY0gi3wjK3e4MUBKqv9Zl8QGcWguIkaUr2VJmoBEsOpDcpDZSEyljR773eVG4maS48uX7muLkoQoh/BA82OQ==", - "requires": { - "has-symbol-support-x": "1.4.1", - "is-date-object": "1.0.1", - "is-function-x": "3.3.0", - "is-nil-x": "1.4.1", - "is-primitive": "2.0.0", - "is-symbol": "1.0.1", - "require-object-coercible-x": "1.4.1", - "validate.io-undefined": "1.0.3" - } - }, - "to-property-key-x": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-property-key-x/-/to-property-key-x-2.0.2.tgz", - "integrity": "sha512-YISLpZFYIazNm0P8hLsKEEUEZ3m8U3+eDysJZqTu3+B9tQp+2TrMpaEGT8Agh4fZ5LSoums60/glNEzk5ozqrg==", - "requires": { - "has-symbol-support-x": "1.4.1", - "to-primitive-x": "1.1.0", - "to-string-x": "1.4.2" - } - }, - "to-string-symbols-supported-x": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-string-symbols-supported-x/-/to-string-symbols-supported-x-1.0.0.tgz", - "integrity": "sha512-HbVH673pybrUmhzESGHUm17BBJvqb7BU8HciOvuEYm9ipuDyjmddhvkVqpVW6sM/C5/zhJo17n7O7I/24loJIQ==", - "requires": { - "cached-constructors-x": "1.0.0", - "has-symbol-support-x": "1.4.1", - "is-symbol": "1.0.1" - } - }, - "to-string-tag-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/to-string-tag-x/-/to-string-tag-x-1.4.2.tgz", - "integrity": "sha512-ytO9eLigxsQQLGuab0C1iSSTzKdJNVSlBg0Spg4J/rGAVrQJ5y774mo0SSzgGeTT4RJGGyJNfObXaTMzX0XDOQ==", - "requires": { - "lodash.isnull": "3.0.0", - "validate.io-undefined": "1.0.3" - } - }, - "to-string-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/to-string-x/-/to-string-x-1.4.2.tgz", - "integrity": "sha512-/WP5arlwtCpAAexCCHiQBW0eXwse84osWyP1Qtaz71nsYSuUpOkT6tBm8nQ4IIUfSh5hji0hDupUCD2xbbOL6A==", - "requires": { - "is-symbol": "1.0.1" - } - }, - "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", - "requires": { - "punycode": "1.4.1" - } - }, - "trim-left-x": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/trim-left-x/-/trim-left-x-3.0.0.tgz", - "integrity": "sha512-+m6cqkppI+CxQBTwWEZliOHpOBnCArGyMnS1WCLb6IRgukhTkiQu/TNEN5Lj2eM9jk8ewJsc7WxFZfmwNpRXWQ==", - "requires": { - "cached-constructors-x": "1.0.0", - "require-coercible-to-string-x": "1.0.0", - "white-space-x": "3.0.0" - } + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true }, "trim-newlines": { "version": "1.0.0", @@ -5750,36 +6145,6 @@ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", "dev": true }, - "trim-right-x": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/trim-right-x/-/trim-right-x-3.0.0.tgz", - "integrity": "sha512-iIqEsWEbWVodqdixJHi4FoayJkUxhoL4AvSNGp4FF4FfQKRPGizt8++/RnyC9od75y7P/S6EfONoVqP+NddiKA==", - "requires": { - "cached-constructors-x": "1.0.0", - "require-coercible-to-string-x": "1.0.0", - "white-space-x": "3.0.0" - } - }, - "trim-x": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/trim-x/-/trim-x-3.0.0.tgz", - "integrity": "sha512-w8s38RAUScQ6t3XqMkS75iz5ZkIYLQpVnv2lp3IuTS36JdlVzC54oe6okOf4Wz3UH4rr3XAb2xR3kR5Xei82fw==", - "requires": { - "trim-left-x": "3.0.0", - "trim-right-x": "3.0.0" - } - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=" - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "optional": true - }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -5789,52 +6154,17 @@ "prelude-ls": "1.1.2" } }, - "type-detect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", - "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=" - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.18" - } - }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "uid-safe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", - "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", - "requires": { - "random-bytes": "1.0.0" - } - }, - "uid2": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz", - "integrity": "sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I=" - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true }, "underscore": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=" - }, - "underscore-node": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/underscore-node/-/underscore-node-0.1.2.tgz", - "integrity": "sha1-DOjHpXN8ptyOcTFdxNokaUnUgng=" + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true }, "underscore.string": { "version": "3.2.3", @@ -5842,59 +6172,6 @@ "integrity": "sha1-gGmSYzZl1eX8tNsfs6hi62jp5to=", "dev": true }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unreachable-branch-transform": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unreachable-branch-transform/-/unreachable-branch-transform-0.3.0.tgz", - "integrity": "sha1-2ZzExudG0mSSiEW2EdtUsPNHTKo=", - "requires": { - "esmangle-evaluator": "1.0.1", - "recast": "0.10.43", - "through2": "0.6.5" - }, - "dependencies": { - "ast-types": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.15.tgz", - "integrity": "sha1-ju8IJ/BN/w7IhXupJavj/qYZTlI=" - }, - "esprima-fb": { - "version": "15001.1001.0-dev-harmony-fb", - "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", - "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=" - }, - "recast": { - "version": "0.10.43", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.10.43.tgz", - "integrity": "sha1-uV1Q9tYHYaX2JS4V2AZ4FoSRzn8=", - "requires": { - "ast-types": "0.8.15", - "esprima-fb": "15001.1001.0-dev-harmony-fb", - "private": "0.1.8", - "source-map": "0.5.7" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "unzip-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", - "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=" - }, - "url-template": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", - "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=" - }, "user-home": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", @@ -5904,21 +6181,6 @@ "os-homedir": "1.0.2" } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "util-extend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", - "integrity": "sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=" - }, - "utils-merge": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" - }, "validate-npm-package-license": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", @@ -5929,51 +6191,6 @@ "spdx-expression-parse": "1.0.4" } }, - "validate.io-undefined": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/validate.io-undefined/-/validate.io-undefined-1.0.3.tgz", - "integrity": "sha1-fif8uzFbhB54JDQxiXZxkp4gt/Q=" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "vuvuzela": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/vuvuzela/-/vuvuzela-1.0.3.tgz", - "integrity": "sha1-O+FF5YJxxzylUnndhR8SpoIRSws=" - }, - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "requires": { - "isexe": "2.0.0" - } - }, - "white-space-x": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/white-space-x/-/white-space-x-3.0.0.tgz", - "integrity": "sha512-nMPVXGMdi/jQepXKryxqzEh/vCwdOYY/u6NZy40glMHvZfEr7/+vQKnDhEq4rZ1nniOFq9GWohQYB30uW/5Olg==" - }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -5983,7 +6200,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write": { "version": "0.2.1", @@ -5994,72 +6212,11 @@ "mkdirp": "0.5.1" } }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", - "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" - } - }, - "write-stream": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/write-stream/-/write-stream-0.4.3.tgz", - "integrity": "sha1-g8yMA0fQr2BXqThitOOuAd5cgcE=", - "requires": { - "readable-stream": "0.0.4" - }, - "dependencies": { - "readable-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-0.0.4.tgz", - "integrity": "sha1-8y124/uGM0SlSNeZIwBxc2ZbO40=" - } - } - }, - "ws": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.1.tgz", - "integrity": "sha512-8A/uRMnQy8KCQsmep1m7Bk+z/+LIkeF7w+TDMLtX1iZm5Hq9HsUDmgFGaW1ACW5Cj0b2Qo7wCvRhYN2ErUVp/A==", - "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.1", - "ultron": "1.1.1" - } - }, - "xml-mapping": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/xml-mapping/-/xml-mapping-1.7.1.tgz", - "integrity": "sha1-ZWiWWeUIWDPH0r7FfawoQsy7woY=", - "requires": { - "sax": "0.4.2", - "xml-writer": "1.7.0" - } - }, - "xml-writer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/xml-writer/-/xml-writer-1.7.0.tgz", - "integrity": "sha1-t28dWRwWomNOvbcDx729D9aBkGU=" - }, - "xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" - }, - "xmlhttprequest-cookie": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-cookie/-/xmlhttprequest-cookie-0.9.5.tgz", - "integrity": "sha512-22025VdbqwVoDs8szSGRcDAQxEoTMBbBTCd1H4wg/7zyFXz29EVzXUyLmx6tGuiX9SYK3pBBT5rLLn1hyLNX0Q==", - "requires": { - "xmlhttprequest": "1.8.0" - } - }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true } } } From 0d8d3fa43b45b9c66748c93ca48022c0aa2d1674 Mon Sep 17 00:00:00 2001 From: ste Date: Mon, 19 Mar 2018 19:28:46 +0000 Subject: [PATCH 12/28] GPII-2578: Replaced gpii.windows.getProcessPath --- .../processHandling/processHandling.js | 43 ------------------- .../test/testProcessHandling.js | 33 -------------- .../windowsMetrics/src/windowsMetrics.js | 8 +++- .../test/WindowsMetricsTests.js | 6 ++- 4 files changed, 11 insertions(+), 79 deletions(-) diff --git a/gpii/node_modules/processHandling/processHandling.js b/gpii/node_modules/processHandling/processHandling.js index 8b2312896..a3f4ea889 100644 --- a/gpii/node_modules/processHandling/processHandling.js +++ b/gpii/node_modules/processHandling/processHandling.js @@ -235,49 +235,6 @@ gpii.windows.closeProcessByName = function (filename, options) { return promiseTogo; }; -/** - * Gets the path to the executable of a running process. - * - * Provide the processHandle if it's available when calling, otherwise provide the pid. - * - * @param pid {Number} [Optional] The process ID. - * @param processHandle [Optional] The process handle. - * @return {String} The path to the executable. - */ -gpii.windows.getProcessPath = function (pid, processHandle) { - var hProcess; - var togo = null; - - if (processHandle) { - hProcess = processHandle; - } else if (pid) { - hProcess = - gpii.windows.kernel32.OpenProcess(gpii.windows.API_constants.PROCESS_QUERY_LIMITED_INFORMATION, 0, pid); - } else { - fluid.fail("Either pid or processHandle needs to be given."); - } - - if (hProcess) { - try { - var size = ref.alloc(gpii.windows.types.DWORD); - size.writeUInt32LE(gpii.windows.API_constants.MAX_PATH, 0); - var path = new Buffer(gpii.windows.API_constants.MAX_PATH); - - var success = gpii.windows.kernel32.QueryFullProcessImageNameW(hProcess, 0, path, size); - if (success) { - togo = gpii.windows.fromWideChar(path); - } - } finally { - if (hProcess !== processHandle) { - gpii.windows.kernel32.CloseHandle(hProcess); - } - } - } - - return togo; - -}; - fluid.defaults("gpii.windows.killProcessByName", { gradeNames: "fluid.function", argumentMap: { diff --git a/gpii/node_modules/processHandling/test/testProcessHandling.js b/gpii/node_modules/processHandling/test/testProcessHandling.js index c20b0acf1..deee3676a 100644 --- a/gpii/node_modules/processHandling/test/testProcessHandling.js +++ b/gpii/node_modules/processHandling/test/testProcessHandling.js @@ -216,36 +216,3 @@ jqUnit.asyncTest("Testing closeProcessByName (window-less process)", function () child_process.exec(command); }); -jqUnit.asyncTest("Testing getProcessPath", function () { - jqUnit.expect(3); - - var exeName = waitExe; - var exePath = waitExePath; - var args = [ "getProcessPathTest", "/T", "30"]; - - fluid.log("Executing " + exePath); - var child = child_process.spawn(exePath, args); - - gpii.windows.waitForProcessStart(exeName) - .then(function () { - jqUnit.assert("Process started"); - - // Test with the PID. - var result1 = gpii.windows.getProcessPath(child.pid); - jqUnit.assertEquals("The exe path should be correct (pid)", exePath, result1); - - // Test with the process handle. - var hProcess = gpii.windows.kernel32.OpenProcess( - gpii.windows.API_constants.PROCESS_QUERY_LIMITED_INFORMATION, 0, child.pid); - - try { - var result2 = gpii.windows.getProcessPath(null, hProcess); - jqUnit.assertEquals("The exe path should be correct (processHandle)", exePath, result2); - } finally { - gpii.windows.kernel32.CloseHandle(hProcess); - } - - child.kill(); - }); - child.on("close", jqUnit.start); -}); diff --git a/gpii/node_modules/windowsMetrics/src/windowsMetrics.js b/gpii/node_modules/windowsMetrics/src/windowsMetrics.js index 1a7aca1b2..b7e9b2e0b 100644 --- a/gpii/node_modules/windowsMetrics/src/windowsMetrics.js +++ b/gpii/node_modules/windowsMetrics/src/windowsMetrics.js @@ -22,7 +22,10 @@ var ffi = require("ffi"); var fluid = require("gpii-universal"); -var windows = fluid.registerNamespace("gpii.windows"); +var gpii = fluid.registerNamespace("gpii"), + windows = fluid.registerNamespace("gpii.windows"); + +var processesBridge = gpii.processes.windows(); fluid.require("%gpii-windows/gpii/node_modules/WindowsUtilities/WindowsUtilities.js"); @@ -253,7 +256,8 @@ windows.checkActiveWindow = function (that) { // Log how long the last window was active. windows.logAppActivate(that); - var exePath = windows.getProcessPath(activePid); + var proc = processesBridge.findProcessByPid(activePid); + var exePath = proc && proc.fullPath; that.state.application.currentProcess.pid = activePid; that.state.application.currentProcess.exe = exePath; diff --git a/gpii/node_modules/windowsMetrics/test/WindowsMetricsTests.js b/gpii/node_modules/windowsMetrics/test/WindowsMetricsTests.js index 03b3218d4..d5b4d4905 100644 --- a/gpii/node_modules/windowsMetrics/test/WindowsMetricsTests.js +++ b/gpii/node_modules/windowsMetrics/test/WindowsMetricsTests.js @@ -692,13 +692,17 @@ jqUnit.asyncTest("Testing application metrics", function () { windowsMetrics.config.application.precision = 1; + var processesBridge = gpii.processes.windows(); + // Pick three windows (owned by different processes) that already exist, and pretend they've became active by // mocking GetForegroundWindow. var windows = []; var exes = {}; gpii.windows.enumerateWindows(function (hwnd) { if (windows.length < 3) { - var exe = gpii.windows.getProcessPath(gpii.windows.getWindowProcessId(hwnd)); + + var proc = processesBridge.findProcessByPid(gpii.windows.getWindowProcessId(hwnd)); + var exe = proc && proc.fullPath; if (!exes[exe]) { exes[exe] = true; windows.push({ From ee1cafdc2dad3e880cbc25308b6fc58b4bb83ea7 Mon Sep 17 00:00:00 2001 From: ste Date: Tue, 20 Mar 2018 11:17:54 +0000 Subject: [PATCH 13/28] GPII-2578: Universal reference --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0eb848ea5..b6c527c31 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "edge-js": "8.8.1", "string-argv": "0.0.2", "@pokusew/pcsclite": "0.4.18", - "gpii-universal": "0.3.0-dev.20180314T153442Z.bcc35970" + "gpii-universal": "stegru/universal#GPII-2578" }, "devDependencies": { "grunt": "1.0.2", From fdfa4b172c904b84f9acd539c163309bd8128f59 Mon Sep 17 00:00:00 2001 From: ste Date: Tue, 20 Mar 2018 11:38:57 +0000 Subject: [PATCH 14/28] GPII-2578: Implemented the os detection the right way --- .../processReporter/processesBridge.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/gpii/node_modules/processReporter/processesBridge.js b/gpii/node_modules/processReporter/processesBridge.js index e461d5377..b4a7da390 100644 --- a/gpii/node_modules/processReporter/processesBridge.js +++ b/gpii/node_modules/processReporter/processesBridge.js @@ -35,6 +35,11 @@ fluid.defaults("gpii.processes.windows", { funcName: "gpii.processes.windows.getProcessList", args: ["{arguments}.0"] // process name or id, optional. + }, + compareProcessNames: { + funcName: "gpii.processes.windows.compareProcessNames", + args: ["{arguments}.0", "{arguments}.1"] + // process name A, process name B } } }); @@ -62,3 +67,13 @@ gpii.processes.windows.getProcessList = function (processIdentifier) { }); return procInfos; }; + +/** + * Compares the names of two processes, returning a boolean indicating whether or not they are equal, ignoring case. + * + * @param processA {String} Name of a process. + * @param processB {String} Name of another process. + */ +gpii.processes.windows.compareProcessNames = function (processA, processB) { + return processA.toLowerCase() === processB.toLowerCase(); +}; From e224fd5b4a74da4db42c827f1ffec91be41e0966 Mon Sep 17 00:00:00 2001 From: ste Date: Tue, 20 Mar 2018 17:21:22 +0000 Subject: [PATCH 15/28] GPII-2844: win32 error message --- .../WindowsUtilities/WindowsUtilities.js | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/gpii/node_modules/WindowsUtilities/WindowsUtilities.js b/gpii/node_modules/WindowsUtilities/WindowsUtilities.js index 1c078e93a..fcc4a6360 100644 --- a/gpii/node_modules/WindowsUtilities/WindowsUtilities.js +++ b/gpii/node_modules/WindowsUtilities/WindowsUtilities.js @@ -982,4 +982,35 @@ windows.waitForCondition = function (func, options) { return promise; }; +/** + * Returns an Error containing the arguments. + * + * @param message {String} The message. + * @param returnCode {String|Number} [optional] The return code of the function causing the error. + * @param errorCode {String|Number} [optional] The last win32 error (from GetLastError), if already known. + * @return {Error} The error. + */ +windows.win32error = function (message, returnCode, errorCode) { + var err = new Error(windows.errorText(message, returnCode, errorCode)); + err.returnCode = returnCode; + err.errorCode = errorCode; + err.isError = true; + return err; +}; + +/** + * Creates an error message for a win32 error. + * + * @param message {String} The message. + * @param returnCode {String|Number} [optional] The return code of the function causing the error. + * @param errorCode {String|Number} [optional] The last win32 error (from GetLastError), if already known. + * @return {Error} The error message. + */ +windows.win32errorText = function (message, returnCode, errorCode) { + var text = "win32 error: " + message; + text += (returnCode === undefined) ? "" : (" return:" + returnCode); + text += " win32:" + (errorCode || windows.kernel32.GetLastError()); + return text; +}; + exports.windows = windows; From 4b4544fd868fb1b5293f59a075e8401336318030 Mon Sep 17 00:00:00 2001 From: ste Date: Mon, 26 Mar 2018 15:31:40 +0100 Subject: [PATCH 16/28] GPII-2844: Explorer start and stop --- .../WindowsUtilities/WindowsUtilities.js | 65 ++++++ .../processHandling/processHandling.js | 150 ++++++++++++++ .../test/testProcessHandling.js | 185 +++++++++++++++++- 3 files changed, 398 insertions(+), 2 deletions(-) diff --git a/gpii/node_modules/WindowsUtilities/WindowsUtilities.js b/gpii/node_modules/WindowsUtilities/WindowsUtilities.js index fcc4a6360..2ff4d8160 100644 --- a/gpii/node_modules/WindowsUtilities/WindowsUtilities.js +++ b/gpii/node_modules/WindowsUtilities/WindowsUtilities.js @@ -113,6 +113,10 @@ windows.kernel32 = ffi.Library("kernel32", { // https://msdn.microsoft.com/library/ms683199 "GetModuleHandleW": [ t.HANDLE, ["int"] + ], + // https://msdn.microsoft.com/library/ms683223 + "GetProcessTimes": [ + t.BOOL, [ t.HANDLE, "void*", "void*", "void*", "void*" ] ] }); @@ -198,6 +202,10 @@ windows.user32 = ffi.Library("user32", { // https://msdn.microsoft.com/library/ms632682 "DestroyWindow": [ t.BOOL, [ t.HANDLE ] + ], + // https://msdn.microsoft.com/library/ms633499 + "FindWindowW": [ + gpii.windows.types.HANDLE, ["char*", "char*"] ] }); @@ -220,6 +228,44 @@ gpii.windows.advapi32 = new ffi.Library("advapi32", { ] }); + +// https://msdn.microsoft.com/library/ms724284 +windows.FILETIME = new Struct([ + [t.DWORD, "dwLowDateTime"], + [t.DWORD, "dwHighDateTime"] +]); + +// https://msdn.microsoft.com/library/aa373677 +windows.RM_UNIQUE_PROCESS = new Struct([ + [t.DWORD, "dwProcessId"], + [windows.FILETIME, "ProcessStartTime"] +]); +windows.RM_UNIQUE_PROCESSES = arrayType(windows.RM_UNIQUE_PROCESS); + +// Restart Manager API: https://msdn.microsoft.com/library/aa373524 +windows.restartManager = ffi.Library("rstrtmgr", { + // https://msdn.microsoft.com/library/aa373668 + "RmStartSession": [ + t.DWORD, [ t.LPDWORD, t.DWORD, "char*" ] + ], + // https://msdn.microsoft.com/library/aa373663 + "RmRegisterResources": [ + t.DWORD, [ t.DWORD, t.UINT, "char*", t.UINT, windows.RM_UNIQUE_PROCESSES, t.UINT, "void*" ] + ], + // https://msdn.microsoft.com/library/aa373665 + "RmRestart": [ + t.DWORD, [ t.DWORD, t.DWORD, "void*" ] + ], + // https://msdn.microsoft.com/library/aa373667 + "RmShutdown": [ + t.DWORD, [ t.DWORD, t.ULONG, "void*" ] + ], + // https://msdn.microsoft.com/library/aa373659 + "RmEndSession": [ + t.DWORD, [ t.DWORD ] + ] +}); + /** * Gets a function pointer for an EnumWindowsProc callback for EnumWindows. * @@ -257,6 +303,8 @@ windows.API_constants = { // https://msdn.microsoft.com/en-us/library/windows/desktop/ms684880%28v=vs.85%29.aspx PROCESS_TERMINATE: 0x0001, PROCESS_QUERY_LIMITED_INFORMATION: 0x1000, + PROCESS_QUERY_INFORMATION: 0x0400, + PROCESS_VM_READ: 0x0010, // https://msdn.microsoft.com/library/ms685981 SC_MANAGER_CONNECT: 0x0001, @@ -913,6 +961,23 @@ windows.getWindowProcessId = function (hwnd) { return ptr.deref(); }; +/** + * Get the process ID that owns the given window. + * + * @param hwnd {Number} The window handle. + * @return {Number} The process ID. + */ +windows.getWindowProcess = function (hwnd) { + var pid = null; + if (hwnd) { + var buf = ref.alloc(windows.types.DWORD); + windows.user32.GetWindowThreadProcessId(hwnd, buf); + pid = buf.deref(); + } + + return pid; +}; + /** * Waits for a condition, by polling a given function. A promise is returned, resolving when the condition is met or * rejecting upon timeout. If the condition is already met, then the returned promise will be resolved. diff --git a/gpii/node_modules/processHandling/processHandling.js b/gpii/node_modules/processHandling/processHandling.js index dc380ff3c..74bc8b189 100644 --- a/gpii/node_modules/processHandling/processHandling.js +++ b/gpii/node_modules/processHandling/processHandling.js @@ -289,6 +289,156 @@ gpii.windows.getServiceState = function (serviceName) { return state; }; +/** + * Gets the creation time of a process. + * @param pid {number} The process ID. + * @return {FILETIME} The creation time. + */ +gpii.windows.getProcessCreationTime = function (pid) { + var togo = null; + var hProcess = gpii.windows.kernel32.OpenProcess( + windows.API_constants.PROCESS_VM_READ | windows.API_constants.PROCESS_QUERY_INFORMATION, 0, pid); + + if (hProcess) { + var chSize = ref.alloc(windows.types.DWORD); + chSize.fill(0); + + var creation = new gpii.windows.FILETIME(), + exit = new gpii.windows.FILETIME(), + kernel = new gpii.windows.FILETIME(), + user = new gpii.windows.FILETIME(); + + var success = windows.kernel32.GetProcessTimes( + hProcess, creation.ref(), exit.ref(), kernel.ref(), user.ref()); + + if (success) { + togo = creation; + } + } + + return togo; +}; + +/** + * Gets the PID of the explorer process that owns the tasktray. + */ +gpii.windows.getExplorerProcess = function () { + var classname = windows.stringToWideChar("Shell_TrayWnd"); + var trayWindow = windows.user32.FindWindowW(classname, ref.NULL); + return windows.getWindowProcessId(trayWindow); +}; + +gpii.windows.currentRestartSession = null; + +/** + * Stops the Windows Explorer shell process. + * + * Use restartExplorer() to restart it. + */ +gpii.windows.stopExplorer = function () { + var promise = fluid.promise(); + var session = null; + var rm = windows.restartManager; + + // RestartManager.h: + var CCH_RM_SESSION_KEY = 16 * 2 + 1; // sizeof(GUID) * 2 + 1 + var RmShutdownOnlyRegistered = 10; + + // Get the explorer process that owns the task tray. + var explorerPid = windows.getExplorerProcess(); + if (explorerPid) { + var creationTime = gpii.windows.getProcessCreationTime(explorerPid); + var processArray = new windows.RM_UNIQUE_PROCESSES(1); + processArray[0].dwProcessId = explorerPid; + processArray[0].ProcessStartTime = creationTime; + + // Create the "restart session". + var sessionBuf = ref.alloc(gpii.windows.types.DWORD); + var sessionKey = new Buffer(CCH_RM_SESSION_KEY * 2); + sessionKey.fill(0); + var result = rm.RmStartSession(sessionBuf, 0, sessionKey); + + if (result) { + promise.reject(windows.win32error("RmStartSession", result)); + } else { + session = sessionBuf.deref(); + + // Close the session upon failure. + promise.then(null, function () { + rm.RmEndSession(session); + }); + + // Add the explorer process to the restart list. + result = rm.RmRegisterResources(session, 0, ref.NULL, processArray.length, processArray, 0, ref.NULL); + if (result) { + promise.reject(windows.win32error("RmRegisterResources", result)); + } else { + // Close the process. This waits for it to shutdown nicely, so it takes a few seconds. + rm.RmShutdown.async(session, RmShutdownOnlyRegistered, ref.NULL, function (err, ret) { + if (err) { + promise.reject({ + isError: true, + error: err + }); + } else if (ret) { + promise.reject(windows.win32error("RmShutdown", ret)); + } else { + gpii.windows.currentRestartSession = session; + promise.resolve(session); + } + }); + } + } + } else { + promise.reject({ + isError: true, + error: "Unable to find the Explorer process" + }); + } + + return promise; +}; + +/** + * Restarts the Windows Explorer shell process. + * + * If stopExplorer hasn't been called, then it gets called. + */ +gpii.windows.restartExplorer = function () { + var promiseTogo = fluid.promise(); + var rm = windows.restartManager; + + // Call stopExplorer if there's no current restart session. + var shutdownPromise = (gpii.windows.currentRestartSession === null) + ? gpii.windows.stopExplorer() + : fluid.toPromise(gpii.windows.currentRestartSession); + + shutdownPromise.then(function (session) { + try { + // Re-start the explorer process. + var result = rm.RmRestart(session, 0, ref.NULL); + if (result) { + throw windows.win32error("RmRestart", result); + } + + } finally { + rm.RmEndSession(session); + gpii.windows.currentRestartSession = null; + } + promiseTogo.resolve(); + }); + + return promiseTogo; +}; + +fluid.defaults("gpii.windows.stopExplorer", { + gradeNames: "fluid.function" +}); + +fluid.defaults("gpii.windows.restartExplorer", { + gradeNames: "fluid.function" +}); + fluid.defaults("gpii.windows.killProcessByName", { gradeNames: "fluid.function", argumentMap: { diff --git a/gpii/node_modules/processHandling/test/testProcessHandling.js b/gpii/node_modules/processHandling/test/testProcessHandling.js index 7f9ed792a..a3186a34c 100644 --- a/gpii/node_modules/processHandling/test/testProcessHandling.js +++ b/gpii/node_modules/processHandling/test/testProcessHandling.js @@ -22,15 +22,19 @@ var jqUnit = fluid.require("node-jqunit"); var gpii = fluid.registerNamespace("gpii"); var shelljs = require("shelljs"); var path = require("path"); -var child_process = require("child_process"); +var ffi = require("ffi"); +var arrayType = require("ref-array"); +var Struct = require("ref-struct"); require("../processHandling.js"); fluid.registerNamespace("gpii.tests.windows.processHandling"); + var waitExe = "gpii-process-handling-test.exe"; var waitExePath = null; +var teardowns = []; jqUnit.module("gpii.tests.windows.processHandling", { setup: function () { // Take a copy of the built-in "waitfor" command, to ensure a unique process name. @@ -39,6 +43,10 @@ jqUnit.module("gpii.tests.windows.processHandling", { shelljs.cp(path.join(process.env.SystemRoot, "/System32/waitfor.exe"), waitExePath); }, teardown: function () { + while (teardowns.length) { + teardowns.pop()(); + } + if (waitExePath !== null) { gpii.windows.killProcessByName(waitExe); shelljs.rm(waitExePath); @@ -46,6 +54,7 @@ jqUnit.module("gpii.tests.windows.processHandling", { } }); +/* jqUnit.test("Testing isProcessRunning", function () { // Check a PID that isn't running. var running = gpii.windows.isProcessRunning(-1); @@ -216,7 +225,6 @@ jqUnit.asyncTest("Testing closeProcessByName (window-less process)", function () child_process.exec(command); }); - jqUnit.test("Testing getServiceState", function () { // Local Session Manager will always be running. var state = gpii.windows.getServiceState("LSM"); @@ -229,3 +237,176 @@ jqUnit.test("Testing getServiceState", function () { state = gpii.windows.getServiceState("gpii-unknown"); jqUnit.assertEquals("gpii-unknown service should be unknown", "unknown", state); }); + +*/ + +// Check if getExplorerProcess returns an explorer.exe pid. +jqUnit.test("Testing getExplorerProcess", function () { + + var explorerPid = gpii.windows.getExplorerProcess(); + + jqUnit.assertFalse("explorer PID must be a number", isNaN(explorerPid)); + + var isRunning = gpii.windows.isProcessRunning(explorerPid); + jqUnit.assertTrue("explorer pid must be a running process", isRunning); + + var processes = gpii.processes.windows.getProcessList(explorerPid); + jqUnit.assertEquals("getProcessList should return 1 process", 1, processes.length); + jqUnit.assertEquals("process name should be explorer.exe", "explorer.exe", processes[0].command.toLowerCase()); +}); + + +var t = gpii.windows.types; +// https://msdn.microsoft.com/library/aa373674 +var CCH_RM_MAX_SVC_NAME = 63; +var CCH_RM_MAX_APP_NAME = 255; +gpii.tests.windows.processHandling.RM_PROCESS_INFO = new Struct([ + [ gpii.windows.RM_UNIQUE_PROCESS, "Process"], + [ arrayType("char", (CCH_RM_MAX_APP_NAME + 1) * 2), "strAppName"], + [ arrayType("char", (CCH_RM_MAX_SVC_NAME + 1) * 2), "strServiceShortName"], + [ "int32", "ApplicationType"], + [ "uint32", "AppStatus"], + [ "uint32", "TSSessionId"], + [ "int32", "bRestartable"] +]); +gpii.tests.windows.processHandling.RM_PROCESS_INFOS = + arrayType(gpii.tests.windows.processHandling.RM_PROCESS_INFO); + +gpii.tests.windows.processHandling.restartManager = ffi.Library("rstrtmgr", { + // https://msdn.microsoft.com/library/aa373661 + "RmGetList": [ + t.DWORD, [ t.DWORD, "uint*", "uint*", gpii.tests.windows.processHandling.RM_PROCESS_INFOS, t.LPDWORD ] + ] +}); + +/** + * Check if the restart manager session has been set up correctly by inspecting the result of RmGetList. + * + * @param stage {string} The stage of the restart process (for logging). + * @param sessionHandle {Number} The session handle. + * @param pids {Number[]} The process ids that are expected to be stopped/restarted. + */ +gpii.tests.windows.processHandling.checkRestartManager = function (stage, sessionHandle, pids) { + jqUnit.expect(3 + pids.length * 3); + + var messagePrefix = "After " + stage + ": "; + + // RM_APP_STATUS: https://msdn.microsoft.com/library/aa373669 + var RmStatusRunning = 1; + + var procCount = pids.length; + var procInfoNeededBuf = (new Buffer(4)).fill(0); + var procInfoCountBuf = new Buffer(4); + procInfoCountBuf.writeUInt32LE(procCount); + + var procInfos = new gpii.tests.windows.processHandling.RM_PROCESS_INFOS(procCount); + + var rebootReasons = new Buffer(4); + + var result = gpii.tests.windows.processHandling.restartManager.RmGetList( + sessionHandle, procInfoNeededBuf, procInfoCountBuf, procInfos, rebootReasons); + + jqUnit.assertEquals(messagePrefix + "RmGetList should return 0 (ERROR_SUCCESS)", 0, result); + + var procInfoCount = procInfoCountBuf.readUInt32LE(); + jqUnit.assertEquals(messagePrefix + "Number of procInfos returned by RmGetList should be the same number of pids", + pids.length, procInfoCount); + + var pidsFound = []; + for (var n = 0; n < procInfoCount; n++) { + var p = procInfos[n]; + pidsFound.push(p.Process.dwProcessId); + + var index = pids.indexOf(p.Process.dwProcessId); + jqUnit.assertTrue(messagePrefix + "RmGetList should only return expected pids", index > -1); + + jqUnit.assertEquals(messagePrefix + "Process should be running (AppStatus = RmStatusRunning)", + RmStatusRunning, p.AppStatus); + jqUnit.assertTrue(messagePrefix + "Process should be restartable", + RmStatusRunning, !!p.bRestartable); + } + + jqUnit.assertDeepEq(messagePrefix + "RmGetList should return all pids", + pids.sort(), pidsFound.sort()); +}; + +/** + * Replaces RmShutdown and RmRestart with an implementation that just checks if they have been called properly. + * + * @param expectedPids {Number[]} The processes that should have been restarted. + * @param restart {boolean} True if a call to RmRestart is expected. + */ +gpii.tests.windows.processHandling.mockRestartManager = function (expectedPids) { + jqUnit.expect(7); + + expectedPids = fluid.copy(expectedPids); + var rmShutdown = gpii.windows.restartManager.RmShutdown.async; + var rmRestart = gpii.windows.restartManager.RmRestart; + teardowns.push(function () { + gpii.windows.restartManager.RmShutdown = rmShutdown; + gpii.windows.restartManager.RmRestart = rmRestart; + }); + + gpii.windows.restartManager.RmShutdown.async = function (dwSessionHandle, lActionFlags, fnStatus, callback) { + var RmShutdownOnlyRegistered = 10; + jqUnit.assertFalse("RmShutdown dwSessionHandle must be a number", isNaN(dwSessionHandle)); + jqUnit.assertEquals( + "RmShutdown lActionFlags must be RmShutdownOnlyRegistered", RmShutdownOnlyRegistered, lActionFlags); + // For some reason, ref doesn't like being required from this script. + jqUnit.assertEquals("RmShutdown fnStatus must be ref.NULL", 0, fnStatus && fnStatus.length); + jqUnit.assertEquals("RmShutdown callback must be a function", "function", typeof(callback)); + + gpii.tests.windows.processHandling.checkRestartManager("RmShutdown", dwSessionHandle, expectedPids); + + // Invoke the callback with a successful return. + callback(gpii.windows.API_constants.returnCodes.ERROR_SUCCESS); + }; + gpii.windows.restartManager.RmRestart = function (dwSessionHandle, dwRestartFlags, fnStatus) { + jqUnit.assertFalse("RmShutdown dwSessionHandle must be a number", isNaN(dwSessionHandle)); + // "Reserved. This parameter should be 0." + jqUnit.assertEquals("RmShutdown dwRestartFlags must be 0", 0, dwRestartFlags); + jqUnit.assertEquals("RmShutdown fnStatus must be ref.NULL", 0, fnStatus && fnStatus.length); + }; +}; + +jqUnit.asyncTest("Testing stopExplorer + restartExplorer", function () { + + // Restarting explorer for real isn't a good idea, because it could fail - if it's guaranteed to succeed, then the + // test is not required. + // So, the "dangerous" functions (RmShutdown and RmRestart) are mocked to check they're being called correctly. + + jqUnit.expect(3); + var explorerPid = gpii.windows.getExplorerProcess(); + + gpii.tests.windows.processHandling.mockRestartManager([ explorerPid ], true); + + var stopPromise = gpii.windows.stopExplorer(); + + jqUnit.assertTrue("stopExplorer must return a promise", fluid.isPromise(stopPromise)); + + stopPromise.then(function () { + jqUnit.assert("restartProcesses promise resolved"); + + var restartPromise = gpii.windows.restartExplorer(); + + jqUnit.assertTrue("restartExplorer must return a promise", fluid.isPromise(restartPromise)); + + restartPromise.then(jqUnit.start, fluid.fail); + + }, jqUnit.fail); + +}); + +jqUnit.asyncTest("Testing restartExplorer", function () { + jqUnit.expect(1); + var explorerPid = gpii.windows.getExplorerProcess(); + + gpii.tests.windows.processHandling.mockRestartManager([ explorerPid ], true); + + var restartPromise = gpii.windows.restartExplorer(); + + jqUnit.assertTrue("restartExplorer must return a promise", fluid.isPromise(restartPromise)); + + restartPromise.then(jqUnit.start, fluid.fail); + +}); From 81c305351cd788907b0a564b3dfe5c7b754d56d5 Mon Sep 17 00:00:00 2001 From: ste Date: Mon, 26 Mar 2018 16:08:38 +0100 Subject: [PATCH 17/28] GPII-2578: Removed useless null check. --- gpii/node_modules/processHandling/processHandling.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/gpii/node_modules/processHandling/processHandling.js b/gpii/node_modules/processHandling/processHandling.js index dc380ff3c..4bae2b60c 100644 --- a/gpii/node_modules/processHandling/processHandling.js +++ b/gpii/node_modules/processHandling/processHandling.js @@ -40,13 +40,11 @@ var processesBridge = gpii.processes.windows(); gpii.windows.killProcessByName = function (filename) { var procs = processesBridge.findProcessesByCommand(filename); - if (procs) { - for (var n = 0, len = procs.length; n < len; n++) { - var hProcess = windows.kernel32.OpenProcess(c.PROCESS_TERMINATE, 0, procs[n].pid); - if (hProcess !== ref.NULL) { - windows.kernel32.TerminateProcess(hProcess, 9); - windows.kernel32.CloseHandle(hProcess); - } + for (var n = 0, len = procs.length; n < len; n++) { + var hProcess = windows.kernel32.OpenProcess(c.PROCESS_TERMINATE, 0, procs[n].pid); + if (hProcess !== ref.NULL) { + windows.kernel32.TerminateProcess(hProcess, 9); + windows.kernel32.CloseHandle(hProcess); } } }; From 040defd64fd84742d61cc754ef3ec2914a1ba413 Mon Sep 17 00:00:00 2001 From: ste Date: Mon, 26 Mar 2018 16:36:36 +0100 Subject: [PATCH 18/28] GPII-2578: Moved case-insensitive process match into universal --- .../processReporter/processesBridge.js | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/gpii/node_modules/processReporter/processesBridge.js b/gpii/node_modules/processReporter/processesBridge.js index b4a7da390..30d2db198 100644 --- a/gpii/node_modules/processReporter/processesBridge.js +++ b/gpii/node_modules/processReporter/processesBridge.js @@ -35,13 +35,9 @@ fluid.defaults("gpii.processes.windows", { funcName: "gpii.processes.windows.getProcessList", args: ["{arguments}.0"] // process name or id, optional. - }, - compareProcessNames: { - funcName: "gpii.processes.windows.compareProcessNames", - args: ["{arguments}.0", "{arguments}.1"] - // process name A, process name B } - } + }, + ignoreCase: true }); /** @@ -67,13 +63,3 @@ gpii.processes.windows.getProcessList = function (processIdentifier) { }); return procInfos; }; - -/** - * Compares the names of two processes, returning a boolean indicating whether or not they are equal, ignoring case. - * - * @param processA {String} Name of a process. - * @param processB {String} Name of another process. - */ -gpii.processes.windows.compareProcessNames = function (processA, processB) { - return processA.toLowerCase() === processB.toLowerCase(); -}; From c4fc23b6487aa1291ac8b70207a0d4760a71495f Mon Sep 17 00:00:00 2001 From: ste Date: Mon, 26 Mar 2018 16:41:19 +0100 Subject: [PATCH 19/28] GPII-2578: Implemented getProcessPath() --- gpii/node_modules/windowsMetrics/src/windowsMetrics.js | 3 +-- gpii/node_modules/windowsMetrics/test/WindowsMetricsTests.js | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/gpii/node_modules/windowsMetrics/src/windowsMetrics.js b/gpii/node_modules/windowsMetrics/src/windowsMetrics.js index b7e9b2e0b..e37be3499 100644 --- a/gpii/node_modules/windowsMetrics/src/windowsMetrics.js +++ b/gpii/node_modules/windowsMetrics/src/windowsMetrics.js @@ -256,8 +256,7 @@ windows.checkActiveWindow = function (that) { // Log how long the last window was active. windows.logAppActivate(that); - var proc = processesBridge.findProcessByPid(activePid); - var exePath = proc && proc.fullPath; + var exePath = processesBridge.getProcessPath(activePid); that.state.application.currentProcess.pid = activePid; that.state.application.currentProcess.exe = exePath; diff --git a/gpii/node_modules/windowsMetrics/test/WindowsMetricsTests.js b/gpii/node_modules/windowsMetrics/test/WindowsMetricsTests.js index d5b4d4905..ba2cccd56 100644 --- a/gpii/node_modules/windowsMetrics/test/WindowsMetricsTests.js +++ b/gpii/node_modules/windowsMetrics/test/WindowsMetricsTests.js @@ -701,8 +701,7 @@ jqUnit.asyncTest("Testing application metrics", function () { gpii.windows.enumerateWindows(function (hwnd) { if (windows.length < 3) { - var proc = processesBridge.findProcessByPid(gpii.windows.getWindowProcessId(hwnd)); - var exe = proc && proc.fullPath; + var exe = processesBridge.getProcessPath(gpii.windows.getWindowProcessId(hwnd)); if (!exes[exe]) { exes[exe] = true; windows.push({ From 88d332b6ff73310702a7baa0de9f6cd853f3e703 Mon Sep 17 00:00:00 2001 From: ste Date: Tue, 27 Mar 2018 11:54:16 +0100 Subject: [PATCH 20/28] GPII-2844: Handle process dying during information retrieval. --- gpii/node_modules/processReporter/dotNetProcesses.csx | 1 + 1 file changed, 1 insertion(+) diff --git a/gpii/node_modules/processReporter/dotNetProcesses.csx b/gpii/node_modules/processReporter/dotNetProcesses.csx index da64d4a1b..70c93be17 100644 --- a/gpii/node_modules/processReporter/dotNetProcesses.csx +++ b/gpii/node_modules/processReporter/dotNetProcesses.csx @@ -120,5 +120,6 @@ public class Startup } // Process no longer running -- nothing to add. catch (ArgumentException e) { } + catch (InvalidOperationException e) { } } } From 7a65d264799e5612cf65637e70d5865ce7e9da1d Mon Sep 17 00:00:00 2001 From: ste Date: Wed, 28 Mar 2018 14:04:45 +0100 Subject: [PATCH 21/28] TESTING --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 4a6c6c2c9..c2fe56a26 100644 --- a/README.md +++ b/README.md @@ -35,4 +35,3 @@ node tests\AcceptanceTests.js builtIn ``` *Note:* The [refreshenv](https://github.com/chocolatey/chocolatey/blob/a09e15896fbc5e790b17b6699cd6b50bc7eb14e4/src/redirects/RefreshEnv.cmd) command only needs to be used if you are about to issue commands after having just created the VM. If the VM has been restarted since its creation then the command is not required. - From 3840fdef8a691445bbe7efc29576c2c989f45518 Mon Sep 17 00:00:00 2001 From: ste Date: Wed, 4 Apr 2018 12:35:37 +0100 Subject: [PATCH 22/28] GPII-2844: No change --- gpii/node_modules/processHandling/processHandling.js | 1 - 1 file changed, 1 deletion(-) diff --git a/gpii/node_modules/processHandling/processHandling.js b/gpii/node_modules/processHandling/processHandling.js index b9265d251..0eb5e0286 100644 --- a/gpii/node_modules/processHandling/processHandling.js +++ b/gpii/node_modules/processHandling/processHandling.js @@ -70,7 +70,6 @@ gpii.windows.isProcessRunning = function (proc) { return togo; }; - /** * Waits for a process to either start or terminate, returning a promise which will resolve when the existence of a * process is in the desired state. From e35319e9dfb4823d451f273203e50cbd0707e0df Mon Sep 17 00:00:00 2001 From: ste Date: Wed, 4 Apr 2018 12:53:07 +0100 Subject: [PATCH 23/28] GPII-2212: Corrected universal reference --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b6c527c31..470c1d273 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "edge-js": "8.8.1", "string-argv": "0.0.2", "@pokusew/pcsclite": "0.4.18", - "gpii-universal": "stegru/universal#GPII-2578" + "gpii-universal": "stegru/universal#GPII-2212" }, "devDependencies": { "grunt": "1.0.2", From c27f00cf22da1a361786b2f4ff45f25ffa738f91 Mon Sep 17 00:00:00 2001 From: ste Date: Wed, 20 Jun 2018 15:12:42 +0100 Subject: [PATCH 24/28] GPII-2844: Comment improvements. --- gpii/node_modules/processHandling/processHandling.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gpii/node_modules/processHandling/processHandling.js b/gpii/node_modules/processHandling/processHandling.js index 0eb5e0286..1c029a5fb 100644 --- a/gpii/node_modules/processHandling/processHandling.js +++ b/gpii/node_modules/processHandling/processHandling.js @@ -328,9 +328,11 @@ gpii.windows.getExplorerProcess = function () { gpii.windows.currentRestartSession = null; /** - * Stops the Windows Explorer shell process. + * Stops the Windows Explorer shell process, in a way that it can be restarted again so the folder windows are restored. * * Use restartExplorer() to restart it. + * + * @return {Promise} Resolves when explorer has stopped. */ gpii.windows.stopExplorer = function () { var promise = fluid.promise(); @@ -399,7 +401,7 @@ gpii.windows.stopExplorer = function () { /** * Restarts the Windows Explorer shell process. * - * If stopExplorer hasn't been called, then it gets called. + * stopExplorer will be called if it hasn't been called already. */ gpii.windows.restartExplorer = function () { var promiseTogo = fluid.promise(); From 0eb54da4339f1081d6766054aad4e8561102f0b9 Mon Sep 17 00:00:00 2001 From: ste Date: Mon, 25 Jun 2018 10:59:06 +0100 Subject: [PATCH 25/28] GPII-2212: Restart explorer after language setting. --- gpii/node_modules/processHandling/processHandling.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gpii/node_modules/processHandling/processHandling.js b/gpii/node_modules/processHandling/processHandling.js index 1c029a5fb..76c205289 100644 --- a/gpii/node_modules/processHandling/processHandling.js +++ b/gpii/node_modules/processHandling/processHandling.js @@ -431,11 +431,13 @@ gpii.windows.restartExplorer = function () { }; fluid.defaults("gpii.windows.stopExplorer", { - gradeNames: "fluid.function" + gradeNames: "fluid.function", + argumentMap: {} }); fluid.defaults("gpii.windows.restartExplorer", { - gradeNames: "fluid.function" + gradeNames: "fluid.function", + argumentMap: {} }); fluid.defaults("gpii.windows.killProcessByName", { From 3a5d1cea56c4c8194e48e69663f1fe81ebaaec92 Mon Sep 17 00:00:00 2001 From: ste Date: Mon, 25 Jun 2018 16:30:06 +0100 Subject: [PATCH 26/28] GPII-2212: Made AT unit test use appropriate process detection. --- gpii/node_modules/processHandling/test/testProcessHandling.js | 4 +--- gpii/node_modules/registeredAT/test/testRegisteredAT.js | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/gpii/node_modules/processHandling/test/testProcessHandling.js b/gpii/node_modules/processHandling/test/testProcessHandling.js index 771b1a6a3..622063ccb 100644 --- a/gpii/node_modules/processHandling/test/testProcessHandling.js +++ b/gpii/node_modules/processHandling/test/testProcessHandling.js @@ -22,6 +22,7 @@ var jqUnit = fluid.require("node-jqunit"); var gpii = fluid.registerNamespace("gpii"); var shelljs = require("shelljs"); var path = require("path"); +var child_process = require("child_process"); var ffi = require("ffi"); var arrayType = require("ref-array"); var Struct = require("ref-struct"); @@ -54,7 +55,6 @@ jqUnit.module("gpii.tests.windows.processHandling", { } }); -/* jqUnit.test("Testing isProcessRunning", function () { // Check a PID that isn't running. var running = gpii.windows.isProcessRunning(-1); @@ -241,8 +241,6 @@ jqUnit.test("Testing getServiceState", function () { jqUnit.assertEquals("gpii-unknown service should be unknown", "unknown", state); }); -*/ - // Check if getExplorerProcess returns an explorer.exe pid. jqUnit.test("Testing getExplorerProcess", function () { diff --git a/gpii/node_modules/registeredAT/test/testRegisteredAT.js b/gpii/node_modules/registeredAT/test/testRegisteredAT.js index 2dde27426..49a80a58a 100644 --- a/gpii/node_modules/registeredAT/test/testRegisteredAT.js +++ b/gpii/node_modules/registeredAT/test/testRegisteredAT.js @@ -185,8 +185,8 @@ jqUnit.asyncTest("Testing enableRegisteredAT.set/get functions", function () { }); }); - var pid = gpii.windows.findProcessByName(testData.ATExe); - jqUnit.assertEquals("The process should not already be running.", null, pid); + var isRunning = gpii.windows.isProcessRunning(testData.ATExe); + jqUnit.assertFalse("The process should not already be running.", isRunning); gpii.windows.startRegisteredAT(testData.appName, {atInfo: testData}); From b38f1f11b526bd563903b1e98adf9d59ce73ab86 Mon Sep 17 00:00:00 2001 From: ste Date: Tue, 26 Jun 2018 10:45:19 +0100 Subject: [PATCH 27/28] GPII-2212: Fixed win32 error reporting. --- gpii/node_modules/WindowsUtilities/WindowsUtilities.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gpii/node_modules/WindowsUtilities/WindowsUtilities.js b/gpii/node_modules/WindowsUtilities/WindowsUtilities.js index b99b62fa2..b388e128f 100644 --- a/gpii/node_modules/WindowsUtilities/WindowsUtilities.js +++ b/gpii/node_modules/WindowsUtilities/WindowsUtilities.js @@ -1067,7 +1067,7 @@ windows.waitForCondition = function (func, options) { * @return {Error} The error. */ windows.win32error = function (message, returnCode, errorCode) { - var err = new Error(windows.errorText(message, returnCode, errorCode)); + var err = new Error(windows.win32errorText(message, returnCode, errorCode)); err.returnCode = returnCode; err.errorCode = errorCode; err.isError = true; From cd8cb937cdafb3fe09831832d0f1b983125f256b Mon Sep 17 00:00:00 2001 From: ste Date: Tue, 10 Jul 2018 13:26:34 +0100 Subject: [PATCH 28/28] GPII-2212: Nice hack to only restart explorer if the language has changed. --- .../processHandling/processHandling.js | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/gpii/node_modules/processHandling/processHandling.js b/gpii/node_modules/processHandling/processHandling.js index 76c205289..26e995f1f 100644 --- a/gpii/node_modules/processHandling/processHandling.js +++ b/gpii/node_modules/processHandling/processHandling.js @@ -25,6 +25,7 @@ var windows = fluid.registerNamespace("gpii.windows"); require("../WindowsUtilities/WindowsUtilities.js"); require("../processReporter/processReporter.js"); +require("../registryResolver"); var c = windows.API_constants; var processesBridge = gpii.processes.windows(); @@ -430,6 +431,22 @@ gpii.windows.restartExplorer = function () { return promiseTogo; }; +/** + * Updates the Windows display language, by restarting explorer if the language has changed since the last time + * this was called. + * + * @param {String} currentLanguage - The current (new) language. + */ +gpii.windows.updateLanguage = function (currentLanguage) { + if (gpii.windows.updateLanguage.lastLanguage !== currentLanguage) { + gpii.windows.updateLanguage.lastLanguage = currentLanguage; + return gpii.windows.restartExplorer(); + } +}; + +gpii.windows.updateLanguage.lastLanguage = + gpii.windows.readRegistryKey("HKEY_CURRENT_USER", "Control Panel\\Desktop", "PreferredUILanguages", "REG_SZ").value; + fluid.defaults("gpii.windows.stopExplorer", { gradeNames: "fluid.function", argumentMap: {} @@ -454,3 +471,10 @@ fluid.defaults("gpii.windows.closeProcessByName", { options: 1 } }); + +fluid.defaults("gpii.windows.updateLanguage", { + gradeNames: "fluid.function", + argumentMap: { + currentLanguage: 0 + } +});