├── .gitignore ├── .vscode └── settings.json ├── README.md ├── nodeos ├── host │ ├── src │ │ ├── index.ts │ │ └── xterm.d.ts │ └── tsconfig.json ├── node │ ├── src │ │ ├── app.ts │ │ └── binding.ts │ └── tsconfig.json └── types │ ├── env.ts │ └── vfs.ts ├── package-lock.json ├── package.json ├── test ├── browserRunner │ ├── app.js │ ├── index.js │ ├── package-lock.json │ └── package.json ├── fixtureRunner.js ├── fixtures │ └── basic │ │ ├── main.js │ │ └── package.json └── test.js └── www ├── index.html ├── mnt ├── .gitignore ├── package-lock.json └── package.json └── xterm ├── xterm.css ├── xterm.js └── xterm.js.map /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/* 2 | www/bin/* 3 | www/node/* 4 | www/mnt/node_modules/* 5 | test/browserRunner/node_modules/* 6 | npm-debug.log -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.exclude": { 3 | "node_modules/**": true, 4 | "package-lock.json": true 5 | }, 6 | "editor.detectIndentation": false, 7 | "editor.formatOnSave": true, 8 | "editor.formatOnPaste": true, 9 | "editor.tabSize": 2 10 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # node-in-browser 2 | An experiment to bootstrap Node.js (version 8.0.0) in the browser in order to run Node apps or npm libraries unmodified. 3 | 4 | **See my [blog post](https://blog.cloudboost.io/how-to-run-node-js-apps-in-the-browser-3f077f34f8a5) for more info. [Try it online](https://node-in-browser.pages.dev/).** 5 | 6 | ![real node vs browser node look alike](https://cdn-images-1.medium.com/max/2000/1*BJSZn_aK5CEZ14Uis5Q4Dg.gif) 7 | 8 | ## Contributor Quick Start 9 | 10 | ``` bash 11 | npm install 12 | npm run build 13 | # npm run build -- -- -w # to build in watch mode 14 | npm start 15 | ``` 16 | 17 | This will serve the REPL at http://localhost:8000/index.html 18 | -------------------------------------------------------------------------------- /nodeos/host/src/index.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | 6 | const terminal = new Terminal({ 7 | cursorBlink: true, 8 | cols: 120, rows: 30, 9 | convertEol: true, 10 | }); 11 | 12 | /** 13 | * Represents an execution environment, i.e. virtual OS with architecture, FS, etc. 14 | * Can host multiple workers that will have a consistent view of the FS, process.arch, etc. 15 | */ 16 | class VirtualMachine { 17 | public constructor(private fs: VirtualFileSystem, private terminal: Terminal) { 18 | 19 | } 20 | 21 | private syscall(origin: Worker, func: string, arg: any): void { 22 | switch (func) { 23 | case "stdout": 24 | this.terminal.write(arg); 25 | document.getElementById("stdout")!.textContent += arg; 26 | break; 27 | case "stderr": 28 | this.terminal.write(arg); 29 | document.getElementById("stderr")!.textContent += arg; 30 | break; 31 | case "error": 32 | this.terminal.write("[Runtime Error]\n"); 33 | this.terminal.write(arg + "\n"); 34 | if (arg.stack) 35 | this.terminal.write(arg.stack + "\n"); 36 | break; 37 | // case "__trace.fs": 38 | // case "__trace.require": 39 | // break; 40 | // case "__trace.fs": 41 | // console.log(JSON.stringify(arg, null, 2)); 42 | // break; 43 | case "WRITE": 44 | this.fs[arg.path] = arg.content; 45 | break; 46 | case "EXIT": 47 | const exitCode = arg; 48 | origin.terminate(); 49 | break; 50 | } 51 | } 52 | 53 | /** 54 | * Dummy entry point for "node" binary. Long term, this should be hooked into the FS somehow and resolved via $PATH etc. 55 | */ 56 | public node(args: string[], keepAlive: boolean = false): void { 57 | document.getElementById("stdout")!.textContent = ""; 58 | document.getElementById("stderr")!.textContent = ""; 59 | this.terminal.clear(); 60 | const vm = this; 61 | const worker = new Worker("/bin/node/app.js"); 62 | if (keepAlive) (self as any)._keepAlive = worker; 63 | worker.onmessage = function (ev: MessageEvent) { const { f, x } = ev.data; vm.syscall(this, f, x); }; 64 | // worker.onerror = function (ev: ErrorEvent) { console.error(JSON.stringify(ev, null, 2)); }; 65 | const env: Environment = { fs: this.fs, cwd: "/cwd" }; 66 | worker.postMessage({ type: "start", args, env }); 67 | 68 | this.terminal.onData((ch: string) => { 69 | if (ch.length > 8) { // assume paste (TODO: clean, see VSCode recent developments) 70 | worker.postMessage({ 71 | type: "stdin", 72 | ch: ch 73 | }); 74 | } 75 | if (ch.length === 1) { 76 | switch (ch.charCodeAt(0)) { 77 | case 3: // Ctrl + C 78 | break; 79 | case 22: // Ctrl + V 80 | break; 81 | } 82 | } 83 | }); 84 | this.terminal.onKey(({ key, domEvent }) => { 85 | // console.log(key, domEvent.key, domEvent.code); 86 | worker.postMessage({ 87 | type: "stdin", 88 | ch: key, 89 | key: { 90 | name: domEvent.key.toLowerCase().replace(/^arrow/, ""), 91 | ctrl: domEvent.ctrlKey, 92 | shift: domEvent.shiftKey, 93 | meta: domEvent.metaKey, 94 | alt: domEvent.altKey 95 | } 96 | }); 97 | }); 98 | } 99 | } 100 | 101 | function dragover_handler(ev: DragEvent) { 102 | ev.preventDefault(); 103 | ev.dataTransfer!.dropEffect = "link"; 104 | } 105 | 106 | async function drop_handler(ev: DragEvent) { 107 | ev.preventDefault(); 108 | 109 | const fs: VirtualFileSystem = {}; 110 | const todo = new Set(); 111 | const traverse = async (entry: any, path: string): Promise => { 112 | const name = path + entry.name; 113 | if (entry.isFile) { 114 | // Get file 115 | try { 116 | await new Promise((res, req) => entry.file( 117 | (f: File) => { 118 | todo.add(name); 119 | const reader = new FileReader(); 120 | reader.onloadend = () => { 121 | fs[name] = new Uint8Array(reader.result as ArrayBufferLike); 122 | todo.delete(name); 123 | console.log(name); 124 | res(); 125 | }; 126 | reader.onerror = () => console.error(name); 127 | reader.readAsArrayBuffer(f); 128 | }, 129 | req) 130 | ); 131 | } catch (e) { console.error(`Error loading '${name}'`) } 132 | } else if (entry.isDirectory) { 133 | fs[name] = null; 134 | // Get folder contents 135 | const dirReader = entry.createReader(); 136 | const jobs: Promise[] = []; 137 | await new Promise(res => dirReader.readEntries((entries: any) => { 138 | for (var i = 0; i < entries.length; i++) 139 | jobs.push(traverse(entries[i], name + "/")); 140 | res(); 141 | })); 142 | await Promise.all(jobs); 143 | } 144 | }; 145 | var items = ev.dataTransfer!.items; 146 | for (var i = 0; i < items.length; ++i) { 147 | const item = items[i]; 148 | if (item.kind != "file") 149 | continue; 150 | await traverse(item.webkitGetAsEntry(), "/"); 151 | } 152 | 153 | console.log("done loading"); 154 | const firstPath = Object.keys(fs)[0]; 155 | if (!firstPath) return; 156 | 157 | const vm = new VirtualMachine(fs, terminal); 158 | const start = (args: string[], keepAlive: boolean) => { console.log(args); vm.node(args, keepAlive); }; 159 | (self as any).node = (...args: string[]) => start(args, false); 160 | (self as any).nodeDebug = (...args: string[]) => start(args, true); 161 | start(["/" + firstPath.split('/')[1]], false); 162 | } 163 | function load() { 164 | const terminalDiv = document.getElementById("xterm") as HTMLElement; 165 | terminal.open(terminalDiv); 166 | const term = terminal as any; 167 | const resize = () => { 168 | const cw = term._core._renderService.dimensions.actualCellWidth; 169 | const ch = term._core._renderService.dimensions.actualCellHeight; 170 | if (cw && ch) 171 | terminal.resize(terminalDiv.clientWidth / cw | 0, terminalDiv.clientHeight / ch | 0); 172 | // TODO: need to communicate that to process! 173 | }; 174 | terminal.onTitleChange(title => document.title = title); // console.log(`${String.fromCharCode(27)}]0;${title}${String.fromCharCode(7)}`) 175 | (document.body as any).onresize = resize; 176 | setInterval(resize, 500); 177 | 178 | new VirtualMachine({ /* "/home/runner/.node_repl_history": new Uint8Array() // disabled via NODE_REPL_HISTORY */ }, terminal).node([], false) 179 | // new VirtualMachine({}, terminal).node(["node_modules/npm", "install", "--no-save", "semver"], false) 180 | // new VirtualMachine({}, terminal).node(["node_modules/npm", "help"], false) 181 | } 182 | -------------------------------------------------------------------------------- /nodeos/host/src/xterm.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | import { Terminal as T } from "xterm"; 4 | 5 | declare global { 6 | type Terminal = T; 7 | const Terminal: typeof T; 8 | } -------------------------------------------------------------------------------- /nodeos/host/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "alwaysStrict": true, 4 | "forceConsistentCasingInFileNames": true, 5 | "module": "amd", 6 | "moduleResolution": "node", 7 | "noEmitOnError": true, 8 | "noImplicitAny": true, 9 | "noImplicitReturns": true, 10 | "noImplicitThis": true, 11 | "skipLibCheck": true, 12 | "outFile": "../../www/bin/index.js", 13 | "sourceMap": false, 14 | "strict": true, 15 | "target": "ES2017", 16 | "typeRoots": [ 17 | "xterm" 18 | ], 19 | "lib": [ 20 | "ES2017", 21 | "dom", 22 | ], 23 | "newLine": "LF" 24 | } 25 | } -------------------------------------------------------------------------------- /nodeos/node/src/app.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | { 4 | // stack trace manipulation 5 | type StackFrame = { func?: string, file: string, line: number, column: number }; 6 | type StackTrace = {}; 7 | const getStackTrace = () => new Error().stack; 8 | 9 | const selfAny: any = self; 10 | let env: Environment; 11 | const errAny = (e: any): never => { throw e; }; 12 | const err = (message: string, code?: string): never => { 13 | const e = new Error(message); 14 | if (code) (e as any).code = code; 15 | throw e; 16 | }; 17 | const errNotImpl = (): never => err("not implemented"); 18 | 19 | // rescue required browser/worker-specific globals 20 | const URL = selfAny.URL; 21 | const Blob = selfAny.Blob; 22 | const postMessage = selfAny.postMessage; 23 | const XMLHttpRequest = selfAny.XMLHttpRequest; 24 | const exit = selfAny.close; 25 | const setInterval = selfAny.setInterval; 26 | const clearInterval = selfAny.clearInterval; 27 | const setTimeout = selfAny.setTimeout; 28 | const clearTimeout = selfAny.clearTimeout; 29 | const TextDecoder = selfAny.TextDecoder; 30 | const TextEncoder = selfAny.TextEncoder; 31 | const crypto = selfAny.crypto; 32 | const arr2str = (arr: ByteBuffer): string => new TextDecoder().decode(arr); 33 | const console = selfAny.console; 34 | 35 | const writeBack = (absolutePath: string, content: ByteBuffer | null | undefined) => { 36 | postMessage({ f: "WRITE", x: { path: absolutePath, content: content } }); 37 | } 38 | const isDirIndicator = (absolutePath: string) => `Index of ${absolutePath}`; 39 | const isDir = (absolutePath: string, buffer: ByteBuffer | undefined): boolean => !!buffer && arr2str(buffer).includes(isDirIndicator(absolutePath)); 40 | const rawReadHttpServer = (absolutePath: string): ByteBuffer | undefined => { 41 | const request = new XMLHttpRequest(); 42 | request.responseType = "arraybuffer"; 43 | request.open('GET', absolutePath, false); 44 | request.send(null); 45 | if (request.status === 200) { 46 | writeBack(absolutePath, request.response); 47 | return new Uint8Array(request.response); 48 | } 49 | return undefined; 50 | }; 51 | const throwENOENT = (absolutePath: string) => err(`ENOENT: no such file or directory, scandir '${absolutePath}'`, "ENOENT"); 52 | const throwENOTDIR = (absolutePath: string) => err(`ENOTDIR: not a directory, scandir '${absolutePath}'`, "ENOTDIR"); 53 | const readFileSync = (absolutePath: string): ByteBuffer => { 54 | // - try vfs 55 | { 56 | if (absolutePath in env.fs) 57 | return env.fs[absolutePath] === null 58 | ? err("TODO: correct message") 59 | : (env.fs[absolutePath] === undefined 60 | ? throwENOENT(absolutePath) 61 | : env.fs[absolutePath] as any); 62 | } 63 | // - try server 64 | if (!("__NOHTTP" in env.fs)) { 65 | const result = rawReadHttpServer(absolutePath) || throwENOENT(absolutePath); 66 | if (isDir(absolutePath, result)) err("TODO: correct message"); 67 | return env.fs[absolutePath] = result; 68 | } 69 | // - fail 70 | return throwENOENT(absolutePath); 71 | } 72 | const readDirSync = (absolutePath: string): string[] => { 73 | // evidence for file-ness? 74 | if (absolutePath in env.fs && env.fs[absolutePath] !== null && env.fs[absolutePath] !== undefined) 75 | throwENOTDIR(absolutePath); 76 | const envFsExists = Object.keys(env.fs).some(x => x.startsWith(absolutePath)); 77 | // known files? 78 | let files = Object.keys(env.fs) 79 | .filter(x => x.startsWith(absolutePath + '/')) 80 | .map(x => x.slice(absolutePath.length + 1)) 81 | .filter(x => !x.includes('/')); 82 | 83 | // - try server 84 | if (!("__NOHTTP" in env.fs)) { 85 | const result = rawReadHttpServer(absolutePath); 86 | if (result !== undefined) { 87 | if (!isDir(absolutePath, result)) 88 | throwENOTDIR(absolutePath); 89 | // add files 90 | const raw = arr2str(result); 91 | let matches = raw.match(/>[^<>]+<\/a><\/td>/g) || []; 92 | matches = matches.map(x => x.slice(1, -9)); 93 | matches = matches.map(x => x.endsWith('/') ? x.slice(0, -1) : x); 94 | matches = matches.filter(x => x !== ".."); 95 | files.push(...matches); 96 | } 97 | else if (!envFsExists) 98 | throwENOENT(absolutePath); 99 | } 100 | 101 | // normalize 102 | files = files.sort(); 103 | files = files.filter((f, i) => i === 0 || f !== files[i - 1]); 104 | return files; 105 | } 106 | const existsFolderSync = (absolutePath: string): boolean => { 107 | try { 108 | return Array.isArray(readDirSync(absolutePath)); 109 | } catch { 110 | return false; 111 | } 112 | } 113 | const existsSync = (absolutePath: string): boolean => { 114 | try { 115 | readFileSync(absolutePath); 116 | return true; 117 | } catch { 118 | return false; 119 | } 120 | }; 121 | const join = (basePath: string, relative: string) => { 122 | let path = basePath + '/' + relative; 123 | function normalizeArray(parts: string[]) { 124 | var up = 0; 125 | for (var i = parts.length - 1; i >= 0; i--) { 126 | var last = parts[i]; 127 | if (last === '.') { 128 | parts.splice(i, 1); 129 | } else if (last === '..') { 130 | parts.splice(i, 1); 131 | up++; 132 | } else if (up) { 133 | parts.splice(i, 1); 134 | up--; 135 | } 136 | } 137 | return parts; 138 | } 139 | path = normalizeArray(path.split('/').filter(p => !!p)).join('/'); 140 | return '/' + path; 141 | }; 142 | 143 | // ENTRY POINT 144 | selfAny.onmessage = function (msg: MessageEvent) { 145 | if (msg.data.type !== "start") return; 146 | env = msg.data.env; 147 | 148 | // BOOT 149 | const nativesKeys = [ 150 | 'internal/bootstrap_node', 151 | 'async_hooks', 152 | 'assert', 153 | 'buffer', 154 | 'child_process', 155 | 'console', 156 | 'constants', 157 | 'crypto', 158 | 'cluster', 159 | 'dgram', 160 | 'dns', 161 | 'domain', 162 | 'events', 163 | 'fs', 164 | 'http', 165 | '_http_agent', 166 | '_http_client', 167 | '_http_common', 168 | '_http_incoming', 169 | '_http_outgoing', 170 | '_http_server', 171 | 'https', 172 | 'inspector', 173 | 'module', 174 | 'net', 175 | 'os', 176 | 'path', 177 | 'perf_hooks', 178 | 'process', 179 | 'punycode', 180 | 'querystring', 181 | 'readline', 182 | 'repl', 183 | 'stream', 184 | '_stream_readable', 185 | '_stream_writable', 186 | '_stream_duplex', 187 | '_stream_transform', 188 | '_stream_passthrough', 189 | '_stream_wrap', 190 | 'string_decoder', 191 | 'sys', 192 | 'timers', 193 | 'tls', 194 | '_tls_common', 195 | '_tls_legacy', 196 | '_tls_wrap', 197 | 'tty', 198 | 'url', 199 | 'util', 200 | 'v8', 201 | 'vm', 202 | 'zlib', 203 | 'internal/buffer', 204 | 'internal/child_process', 205 | 'internal/cluster/child', 206 | 'internal/cluster/master', 207 | 'internal/cluster/round_robin_handle', 208 | 'internal/cluster/shared_handle', 209 | 'internal/cluster/utils', 210 | 'internal/cluster/worker', 211 | // 'internal/crypto/certificate', 212 | // 'internal/crypto/cipher', 213 | // 'internal/crypto/diffiehellman', 214 | // 'internal/crypto/hash', 215 | // 'internal/crypto/pbkdf2', 216 | // 'internal/crypto/random', 217 | // 'internal/crypto/sig', 218 | // 'internal/crypto/util', 219 | 'internal/encoding', 220 | 'internal/errors', 221 | 'internal/freelist', 222 | 'internal/fs', 223 | 'internal/http', 224 | 'internal/inspector_async_hook', 225 | 'internal/linkedlist', 226 | 'internal/loader/Loader', 227 | 'internal/loader/ModuleJob', 228 | 'internal/loader/ModuleMap', 229 | 'internal/loader/ModuleWrap', 230 | 'internal/loader/resolveRequestUrl', 231 | 'internal/loader/search', 232 | 'internal/net', 233 | 'internal/module', 234 | 'internal/os', 235 | 'internal/process', 236 | 'internal/process/next_tick', 237 | 'internal/process/promises', 238 | 'internal/process/stdio', 239 | 'internal/process/warning', 240 | 'internal/process/write-coverage', 241 | 'internal/querystring', 242 | 'internal/readline', 243 | 'internal/repl', 244 | 'internal/safe_globals', 245 | 'internal/socket_list', 246 | 'internal/test/unicode', 247 | 'internal/url', 248 | 'internal/util', 249 | 'internal/v8_prof_polyfill', 250 | 'internal/v8_prof_processor', 251 | 'internal/streams/lazy_transform', 252 | 'internal/streams/BufferList', 253 | 'internal/streams/legacy', 254 | 'internal/streams/destroy' 255 | ]; 256 | const natives: { [name: string]: string } = {}; 257 | for (const nativesKey of nativesKeys) 258 | natives[nativesKey] = arr2str(readFileSync(`/node/${nativesKey}.js`) || err(`missing native '${nativesKey}'`)); 259 | natives["config"] = '\n{"target_defaults":{"cflags":[],"default_configuration":"Release","defines":[],"include_dirs":[],"libraries":[]},"variables":{"asan":0,"coverage":false,"debug_devtools":"node","force_dynamic_crt":0,"host_arch":"x64","icu_data_file":"icudt59l.dat","icu_data_in":"..\\\\..\\\\deps/icu-small\\\\source/data/in\\\\icudt59l.dat","icu_endianness":"l","icu_gyp_path":"tools/icu/icu-generic.gyp","icu_locales":"en,root","icu_path":"deps/icu-small","icu_small":true,"icu_ver_major":"59","node_byteorder":"little","node_enable_d8":false,"node_enable_v8_vtunejit":false,"node_install_npm":true,"node_module_version":57,"node_no_browser_globals":false,"node_prefix":"/usr/local","node_release_urlbase":"https://nodejs.org/download/release/","node_shared":false,"node_shared_cares":false,"node_shared_http_parser":false,"node_shared_libuv":false,"node_shared_openssl":false,"node_shared_zlib":false,"node_tag":"","node_use_bundled_v8":true,"node_use_dtrace":false,"node_use_etw":true,"node_use_lttng":false,"node_use_openssl":true,"node_use_perfctr":true,"node_use_v8_platform":true,"node_without_node_options":false,"openssl_fips":"","openssl_no_asm":0,"shlib_suffix":"so.57","target_arch":"x64","v8_enable_gdbjit":0,"v8_enable_i18n_support":1,"v8_enable_inspector":1,"v8_no_strict_aliasing":1,"v8_optimized_debug":0,"v8_promise_internal_field_count":1,"v8_random_seed":0,"v8_use_snapshot":true,"want_separate_host_toolset":0,"want_separate_host_toolset_mkpeephole":0}}' 260 | .replace(/"/g, `'`); 261 | //env.fs["__NOHTTP"] = null; 262 | 263 | const newContext = (target: any = {}) => 264 | new Proxy(target, { 265 | has: () => true, 266 | get: (_, k) => { 267 | if (k in target) 268 | return target[k]; 269 | if (typeof k === "string" && /^[_a-zA-Z]+$/.test(k)) { 270 | try { 271 | return eval(k); 272 | } catch (e) { 273 | if (e instanceof ReferenceError) 274 | return undefined; // TODO: this is a workaround for `typeof ...` - would throw ReferenceError otherwise! :( 275 | throw e; 276 | } 277 | } 278 | return eval(k as string); 279 | } 280 | }); 281 | const theContext = newContext({}); 282 | 283 | class ContextifyScript { 284 | public constructor(private code: string, private options: { displayErrors: boolean, filename: string, lineOffset: number }) { 285 | } 286 | 287 | public runInThisContext(): any { 288 | // try { 289 | 290 | // sinful code 291 | return eval("(() => { with (theContext) { return eval(this.code + `\\n//# sourceURL=${this.options.filename}`); } })()"); 292 | 293 | // } catch (e) { 294 | // debugger; 295 | // } 296 | } 297 | } 298 | 299 | class ChannelWrap { 300 | public constructor() { 301 | 302 | } 303 | } 304 | 305 | class TTY { 306 | private _fd: number; 307 | private _unknown: boolean; 308 | 309 | public constructor(fd: number, unknown: boolean) { 310 | this._fd = fd; 311 | this._unknown = unknown; 312 | _handleWrapQueue.push(this); 313 | 314 | if (fd === 0) { 315 | // const onChar = (c: string) => { 316 | // //if (this.reading) { 317 | // const buffer = new TextEncoder().encode(c); 318 | // this.onread(buffer.length, buffer); 319 | // // } 320 | // }; 321 | selfAny.onmessage = (msg: MessageEvent) => { 322 | if (msg.data.type !== "stdin") return; 323 | // onChar(msg.data.ch); 324 | (this as any).owner.emit("keypress", msg.data.ch, msg.data.key); 325 | }; 326 | } 327 | } 328 | 329 | // public onread: (nread: number, buffer: Buffer) => void; 330 | // public reading: boolean; 331 | 332 | public getWindowSize(size: [number, number]): any /*error*/ { 333 | size[0] = 120; // cols 334 | size[1] = 30; // rows 335 | } 336 | 337 | public readStart(): any /*error?*/ { 338 | 339 | } 340 | 341 | public readStop(): any /*no clue*/ { 342 | 343 | } 344 | 345 | public setBlocking(blocking: boolean): void { 346 | 347 | } 348 | 349 | public setRawMode(rawMode: boolean): void { 350 | 351 | } 352 | 353 | public writeAsciiString(req: any, data: any) { errNotImpl(); } 354 | public writeBuffer(req: any, data: any) { errNotImpl(); } 355 | public writeLatin1String(req: any, data: any) { errNotImpl(); } 356 | public writeUcs2String(req: any, data: any) { errNotImpl(); } 357 | public writeUtf8String(req: any, data: string) { 358 | switch (this._fd) { 359 | case 1: // stdout 360 | postMessage({ f: "stdout", x: data }); 361 | break; 362 | case 2: // stderr 363 | postMessage({ f: "stderr", x: data }); 364 | break; 365 | } 366 | } 367 | 368 | public close(): void { 369 | _handleWrapQueue.splice(_handleWrapQueue.indexOf(this), 1); 370 | } 371 | } 372 | 373 | const _handleWrapQueue: any[] = []; 374 | 375 | const startTime = Date.now(); 376 | class Timer { 377 | public static get kOnTimeout(): number { 378 | return 0; 379 | } 380 | 381 | public static now(): number { 382 | return Date.now() - startTime; 383 | } 384 | 385 | public constructor() { 386 | this.__handle = null; 387 | _handleWrapQueue.push(this); 388 | } 389 | 390 | [k: number]: () => void; 391 | 392 | private __handle: number | null; 393 | 394 | public start(delay: number): void { 395 | if (this.__handle === null) this.__handle = setInterval(() => this[Timer.kOnTimeout](), delay); 396 | } 397 | 398 | public stop(): void { 399 | if (this.__handle !== null) clearInterval(this.__handle); 400 | } 401 | 402 | public close(): void { 403 | _handleWrapQueue.splice(_handleWrapQueue.indexOf(this), 1); 404 | } 405 | 406 | public unref(): void { 407 | // TODO 408 | } 409 | } 410 | 411 | class TCP { 412 | 413 | } 414 | 415 | class ShutdownWrap { 416 | 417 | } 418 | class WriteWrap { 419 | public constructor() { 420 | } 421 | 422 | 423 | } 424 | 425 | class PerformanceEntry { 426 | 427 | } 428 | 429 | class HTTPParser { 430 | public static readonly RESPONSE = 0; 431 | public reinitialize(_: number): void { 432 | 433 | } 434 | } 435 | 436 | class FSReqWrap { 437 | public oncomplete: Function = null as any; 438 | } 439 | 440 | let cwd = "/mnt"; 441 | 442 | const statValues = new Float64Array([ 443 | 1458881089, // device ID 444 | 33207, // mode | protection 445 | 1, // # hard links 446 | 0, // owner's user ID 447 | 0, // 4 - owner's group ID 448 | 0, // device ID if special file 449 | -1, // block size 450 | 8162774324649504, // iNode number 451 | 58232, // 8 - size 452 | -1, // # blocks 453 | 1484478676521.9932, // last access 454 | 1506412651257.9966, // last modification 455 | 1506412651257.9966, // last iNode modification? 456 | 1484478676521.9932, // creation time? 457 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); 458 | 459 | let global: NodeJS.Global = self as any; 460 | global.global = global; 461 | 462 | const runMicrotasks = () => { 463 | const proc: any = process; 464 | if (proc._needImmediateCallback) 465 | proc._immediateCallback(); 466 | else { 467 | if (_handleWrapQueue.length === 0) 468 | proc.exit(0); 469 | } 470 | }; 471 | 472 | type FileDescriptor = { s: ByteBuffer, isDir: boolean }; 473 | 474 | const nextTick = (cb: () => void): void => (process as any).nextTick(cb); 475 | const process = { 476 | _getActiveHandles: () => _handleWrapQueue.map((x: any) => x.owner || x), 477 | _getActiveRequests: () => [], // TODO 478 | _rawDebug: (x: any) => postMessage({ f: "error", x: { f: "_rawDebug", x: x } }), 479 | _setupDomainUse: (domain: any, stack: any) => [], 480 | _setupProcessObject: (pushValueToArrayFunction: Function) => { }, 481 | _setupPromises: () => { }, 482 | _setupNextTick: (_tickCallback: any, _runMicrotasks: any) => { 483 | _runMicrotasks.runMicrotasks = runMicrotasks; 484 | setInterval(_tickCallback, 1); // teardown implicit? 485 | return [0, 0]; 486 | }, 487 | argv: ["node", ...msg.data.args], 488 | binding: (name: string): any => { 489 | switch (name) { 490 | case "async_wrap": 491 | return { 492 | clearIdStack: () => { }, 493 | asyncIdStackSize: () => { }, 494 | pushAsyncIds: () => { }, 495 | popAsyncIds: () => { }, 496 | async_hook_fields: [0], 497 | async_uid_fields: [0], 498 | constants: { 499 | kInit: 0, 500 | kBefore: 1, 501 | kAfter: 2, 502 | kDestroy: 3, 503 | kPromiseResolve: 4, 504 | kTotals: 5, 505 | kFieldsCount: 6, 506 | kAsyncUidCntr: 0, 507 | kCurrentAsyncId: 0, 508 | kInitTriggerId: 0, 509 | }, 510 | setupHooks: () => { } 511 | }; // TODO 512 | case "buffer": 513 | return { 514 | byteLengthUtf8: (s: string) => { 515 | return s.length; // TODO 516 | }, 517 | setupBufferJS: (proto: any) => { 518 | proto.utf8Slice = function (this: Buffer, start: number, end: number) { 519 | const slice = this.slice(start, end); 520 | return new TextDecoder().decode(slice); 521 | }; 522 | proto.hexSlice = function (start: number, end: number) { 523 | const slice = this.slice(start, end); 524 | let result = ""; 525 | for (let i = 0; i < slice.byteLength; ++i) 526 | result += slice[i].toString(16); 527 | return result; 528 | }; 529 | proto.utf8Write = function (string: string, offset: number, length: number) { 530 | // TODO 531 | for (var i = 0; i < length && i < this.byteLength - offset; ++i) 532 | this[i + offset] = string.charCodeAt(i); 533 | return i; 534 | }; 535 | } 536 | }; // TODO 537 | case "cares_wrap": 538 | return { 539 | GetAddrInfoReqWrap: () => { }, 540 | GetNameInfoReqWrap: () => { }, 541 | QueryReqWrap: () => { }, 542 | ChannelWrap: ChannelWrap, 543 | isIP: () => { }, 544 | getaddrinfo: function (addr_info_wrap: { family: number, hostname: string, callback: Function, oncomplete: (result: { 0: number, 1: string[] }) => void }, hostname: string, family: number, hints: number, verbatim: boolean) { 545 | addr_info_wrap.oncomplete({ 0: 0, 1: [addr_info_wrap.hostname] }) 546 | return 0; // = success 547 | } 548 | };// TODO 549 | case "config": 550 | return {}; // TODO 551 | case "constants": 552 | return JSON.parse('{"os":{"UV_UDP_REUSEADDR":4,"errno":{"E2BIG":7,"EACCES":13,"EADDRINUSE":100,"EADDRNOTAVAIL":101,"EAFNOSUPPORT":102,"EAGAIN":11,"EALREADY":103,"EBADF":9,"EBADMSG":104,"EBUSY":16,"ECANCELED":105,"ECHILD":10,"ECONNABORTED":106,"ECONNREFUSED":107,"ECONNRESET":108,"EDEADLK":36,"EDESTADDRREQ":109,"EDOM":33,"EEXIST":17,"EFAULT":14,"EFBIG":27,"EHOSTUNREACH":110,"EIDRM":111,"EILSEQ":42,"EINPROGRESS":112,"EINTR":4,"EINVAL":22,"EIO":5,"EISCONN":113,"EISDIR":21,"ELOOP":114,"EMFILE":24,"EMLINK":31,"EMSGSIZE":115,"ENAMETOOLONG":38,"ENETDOWN":116,"ENETRESET":117,"ENETUNREACH":118,"ENFILE":23,"ENOBUFS":119,"ENODATA":120,"ENODEV":19,"ENOENT":2,"ENOEXEC":8,"ENOLCK":39,"ENOLINK":121,"ENOMEM":12,"ENOMSG":122,"ENOPROTOOPT":123,"ENOSPC":28,"ENOSR":124,"ENOSTR":125,"ENOSYS":40,"ENOTCONN":126,"ENOTDIR":20,"ENOTEMPTY":41,"ENOTSOCK":128,"ENOTSUP":129,"ENOTTY":25,"ENXIO":6,"EOPNOTSUPP":130,"EOVERFLOW":132,"EPERM":1,"EPIPE":32,"EPROTO":134,"EPROTONOSUPPORT":135,"EPROTOTYPE":136,"ERANGE":34,"EROFS":30,"ESPIPE":29,"ESRCH":3,"ETIME":137,"ETIMEDOUT":138,"ETXTBSY":139,"EWOULDBLOCK":140,"EXDEV":18,"WSAEINTR":10004,"WSAEBADF":10009,"WSAEACCES":10013,"WSAEFAULT":10014,"WSAEINVAL":10022,"WSAEMFILE":10024,"WSAEWOULDBLOCK":10035,"WSAEINPROGRESS":10036,"WSAEALREADY":10037,"WSAENOTSOCK":10038,"WSAEDESTADDRREQ":10039,"WSAEMSGSIZE":10040,"WSAEPROTOTYPE":10041,"WSAENOPROTOOPT":10042,"WSAEPROTONOSUPPORT":10043,"WSAESOCKTNOSUPPORT":10044,"WSAEOPNOTSUPP":10045,"WSAEPFNOSUPPORT":10046,"WSAEAFNOSUPPORT":10047,"WSAEADDRINUSE":10048,"WSAEADDRNOTAVAIL":10049,"WSAENETDOWN":10050,"WSAENETUNREACH":10051,"WSAENETRESET":10052,"WSAECONNABORTED":10053,"WSAECONNRESET":10054,"WSAENOBUFS":10055,"WSAEISCONN":10056,"WSAENOTCONN":10057,"WSAESHUTDOWN":10058,"WSAETOOMANYREFS":10059,"WSAETIMEDOUT":10060,"WSAECONNREFUSED":10061,"WSAELOOP":10062,"WSAENAMETOOLONG":10063,"WSAEHOSTDOWN":10064,"WSAEHOSTUNREACH":10065,"WSAENOTEMPTY":10066,"WSAEPROCLIM":10067,"WSAEUSERS":10068,"WSAEDQUOT":10069,"WSAESTALE":10070,"WSAEREMOTE":10071,"WSASYSNOTREADY":10091,"WSAVERNOTSUPPORTED":10092,"WSANOTINITIALISED":10093,"WSAEDISCON":10101,"WSAENOMORE":10102,"WSAECANCELLED":10103,"WSAEINVALIDPROCTABLE":10104,"WSAEINVALIDPROVIDER":10105,"WSAEPROVIDERFAILEDINIT":10106,"WSASYSCALLFAILURE":10107,"WSASERVICE_NOT_FOUND":10108,"WSATYPE_NOT_FOUND":10109,"WSA_E_NO_MORE":10110,"WSA_E_CANCELLED":10111,"WSAEREFUSED":10112},"signals":{"SIGHUP":1,"SIGINT":2,"SIGILL":4,"SIGABRT":22,"SIGFPE":8,"SIGKILL":9,"SIGSEGV":11,"SIGTERM":15,"SIGBREAK":21,"SIGWINCH":28}},"fs":{"O_RDONLY":0,"O_WRONLY":1,"O_RDWR":2,"S_IFMT":61440,"S_IFREG":32768,"S_IFDIR":16384,"S_IFCHR":8192,"S_IFLNK":40960,"O_CREAT":256,"O_EXCL":1024,"O_TRUNC":512,"O_APPEND":8,"F_OK":0,"R_OK":4,"W_OK":2,"X_OK":1},"crypto":{"SSL_OP_ALL":2147486719,"SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION":262144,"SSL_OP_CIPHER_SERVER_PREFERENCE":4194304,"SSL_OP_CISCO_ANYCONNECT":32768,"SSL_OP_COOKIE_EXCHANGE":8192,"SSL_OP_CRYPTOPRO_TLSEXT_BUG":2147483648,"SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS":2048,"SSL_OP_EPHEMERAL_RSA":0,"SSL_OP_LEGACY_SERVER_CONNECT":4,"SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER":32,"SSL_OP_MICROSOFT_SESS_ID_BUG":1,"SSL_OP_MSIE_SSLV2_RSA_PADDING":0,"SSL_OP_NETSCAPE_CA_DN_BUG":536870912,"SSL_OP_NETSCAPE_CHALLENGE_BUG":2,"SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG":1073741824,"SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG":8,"SSL_OP_NO_COMPRESSION":131072,"SSL_OP_NO_QUERY_MTU":4096,"SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION":65536,"SSL_OP_NO_SSLv2":16777216,"SSL_OP_NO_SSLv3":33554432,"SSL_OP_NO_TICKET":16384,"SSL_OP_NO_TLSv1":67108864,"SSL_OP_NO_TLSv1_1":268435456,"SSL_OP_NO_TLSv1_2":134217728,"SSL_OP_PKCS1_CHECK_1":0,"SSL_OP_PKCS1_CHECK_2":0,"SSL_OP_SINGLE_DH_USE":1048576,"SSL_OP_SINGLE_ECDH_USE":524288,"SSL_OP_SSLEAY_080_CLIENT_DH_BUG":128,"SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG":0,"SSL_OP_TLS_BLOCK_PADDING_BUG":512,"SSL_OP_TLS_D5_BUG":256,"SSL_OP_TLS_ROLLBACK_BUG":8388608,"ENGINE_METHOD_RSA":1,"ENGINE_METHOD_DSA":2,"ENGINE_METHOD_DH":4,"ENGINE_METHOD_RAND":8,"ENGINE_METHOD_ECDH":16,"ENGINE_METHOD_ECDSA":32,"ENGINE_METHOD_CIPHERS":64,"ENGINE_METHOD_DIGESTS":128,"ENGINE_METHOD_STORE":256,"ENGINE_METHOD_PKEY_METHS":512,"ENGINE_METHOD_PKEY_ASN1_METHS":1024,"ENGINE_METHOD_ALL":65535,"ENGINE_METHOD_NONE":0,"DH_CHECK_P_NOT_SAFE_PRIME":2,"DH_CHECK_P_NOT_PRIME":1,"DH_UNABLE_TO_CHECK_GENERATOR":4,"DH_NOT_SUITABLE_GENERATOR":8,"NPN_ENABLED":1,"ALPN_ENABLED":1,"RSA_PKCS1_PADDING":1,"RSA_SSLV23_PADDING":2,"RSA_NO_PADDING":3,"RSA_PKCS1_OAEP_PADDING":4,"RSA_X931_PADDING":5,"RSA_PKCS1_PSS_PADDING":6,"RSA_PSS_SALTLEN_DIGEST":-1,"RSA_PSS_SALTLEN_MAX_SIGN":-2,"RSA_PSS_SALTLEN_AUTO":-2,"POINT_CONVERSION_COMPRESSED":2,"POINT_CONVERSION_UNCOMPRESSED":4,"POINT_CONVERSION_HYBRID":6,"defaultCoreCipherList":"ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA256:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!CAMELLIA","defaultCipherList":"ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA256:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!CAMELLIA"},"zlib":{"Z_NO_FLUSH":0,"Z_PARTIAL_FLUSH":1,"Z_SYNC_FLUSH":2,"Z_FULL_FLUSH":3,"Z_FINISH":4,"Z_BLOCK":5,"Z_OK":0,"Z_STREAM_END":1,"Z_NEED_DICT":2,"Z_ERRNO":-1,"Z_STREAM_ERROR":-2,"Z_DATA_ERROR":-3,"Z_MEM_ERROR":-4,"Z_BUF_ERROR":-5,"Z_VERSION_ERROR":-6,"Z_NO_COMPRESSION":0,"Z_BEST_SPEED":1,"Z_BEST_COMPRESSION":9,"Z_DEFAULT_COMPRESSION":-1,"Z_FILTERED":1,"Z_HUFFMAN_ONLY":2,"Z_RLE":3,"Z_FIXED":4,"Z_DEFAULT_STRATEGY":0,"ZLIB_VERNUM":4784,"DEFLATE":1,"INFLATE":2,"GZIP":3,"GUNZIP":4,"DEFLATERAW":5,"INFLATERAW":6,"UNZIP":7,"Z_MIN_WINDOWBITS":8,"Z_MAX_WINDOWBITS":15,"Z_DEFAULT_WINDOWBITS":15,"Z_MIN_CHUNK":64,"Z_MAX_CHUNK":null,"Z_DEFAULT_CHUNK":16384,"Z_MIN_MEMLEVEL":1,"Z_MAX_MEMLEVEL":9,"Z_DEFAULT_MEMLEVEL":8,"Z_MIN_LEVEL":-1,"Z_MAX_LEVEL":9,"Z_DEFAULT_LEVEL":-1}}'); 553 | case "contextify": 554 | return { 555 | ContextifyScript 556 | }; // TODO 557 | case "crypto": 558 | return { 559 | randomBytes: (size: number, cb?: Function) => { 560 | var rawBytes = new Uint8Array(size); 561 | if (size > 0) crypto.getRandomValues(rawBytes); 562 | var bytes = Buffer.from(rawBytes.buffer); 563 | if (typeof cb === 'function') 564 | return global.process.nextTick(() => cb(null, bytes)); 565 | return bytes; 566 | }, 567 | randomFill: (bytes: Buffer, offset: number, size: number, cb?: Function) => { 568 | var rawBytes = new Uint8Array(size); 569 | if (size > 0) crypto.getRandomValues(rawBytes); 570 | for (let i = 0; i < size; ++i) 571 | bytes[offset + i] = rawBytes[i]; 572 | if (typeof cb === 'function') 573 | return global.process.nextTick(() => cb(null, bytes)); // guess 574 | return bytes; 575 | }, 576 | }; // TODO 577 | case "fs": 578 | const wrap = <T>(f: () => T, req: FSReqWrap | undefined): T => { 579 | let result: T | undefined = undefined; 580 | let err: Error | undefined = undefined; 581 | try { result = f(); } catch (e) { err = e as Error; } 582 | if (req) nextTick(() => req.oncomplete(err, result)); 583 | else if (err) throw err; 584 | return result as any; 585 | }; 586 | const fstat = (fd: FileDescriptor | undefined, req?: FSReqWrap): void => { 587 | if (fd !== undefined) { 588 | statValues[1] = 589 | (0xF000 & ((fd.isDir ? 0b0100 : 0b1000) << 12)) | 590 | (0x0FFF & 0x1B7 /*no clue*/) 591 | statValues[8] = fd.s.byteLength; 592 | } 593 | // TODO 594 | if (req) nextTick(() => req.oncomplete(/*error, if one happened*/)); 595 | }; 596 | return { 597 | getStatValues: () => statValues, 598 | internalModuleReadFile: (path: string): string | undefined => { 599 | try { 600 | const res = readFileSync(path); 601 | return arr2str(res); 602 | } catch { 603 | return undefined; 604 | } 605 | }, 606 | internalModuleStat: (path: string) => { 607 | // dir 608 | if (existsFolderSync(path)) return 1; 609 | // file 610 | if (existsSync(path)) return 0; 611 | return -4058; 612 | }, 613 | fstat: fstat, 614 | lstat: (path: string, req?: FSReqWrap) => { 615 | try { 616 | try { let buffer = readFileSync(path); if (buffer) return fstat({ s: buffer, isDir: false }, req); } catch { } 617 | if (readDirSync(path)) return fstat({ s: new Uint8Array(0), isDir: true }, req); 618 | err("TODO: correct error treatment"); 619 | } catch { 620 | fstat(undefined, req); 621 | return; 622 | } 623 | }, 624 | stat: (path: string, req?: FSReqWrap) => { 625 | try { 626 | try { let buffer = readFileSync(path); if (buffer) return fstat({ s: buffer, isDir: false }, req); } catch { } 627 | if (readDirSync(path)) return fstat({ s: new Uint8Array(0), isDir: true }, req); 628 | err("TODO: correct error treatment"); 629 | } catch { 630 | fstat(undefined, req); 631 | return; 632 | } 633 | }, 634 | ftruncate: (fd: FileDescriptor, len: number, req?: FSReqWrap) => { 635 | // TODO 636 | wrap<undefined>(() => undefined, req); 637 | }, 638 | open: (path: string, flags: number, mode: number, req?: FSReqWrap): FileDescriptor => { 639 | return wrap<FileDescriptor>(() => { 640 | if (flags === 0) return { s: readFileSync(path), isDir: false }; 641 | if (flags === 2) return { s: readFileSync(path), isDir: false }; 642 | if (flags === 266) return { s: readFileSync(path), isDir: false }; 643 | // debugger; 644 | return errNotImpl(); 645 | }, req); 646 | }, 647 | close: (fd: FileDescriptor, req?: FSReqWrap) => { 648 | wrap<undefined>(() => undefined, req); 649 | }, 650 | read: (fd: FileDescriptor, buffer: any, offset: number, length: number, position: number, req?: FSReqWrap): number => { 651 | return wrap<number>(() => { 652 | const s = fd.s; 653 | const copy = Math.min(s.length, length); 654 | for (let i = 0; i < copy; ++i) 655 | buffer[offset + i] = s[i]; 656 | fd.s = s.slice(copy); 657 | return copy; 658 | }, req); 659 | }, 660 | readdir: (path: string, encoding: any, req?: FSReqWrap): string[] | any => { 661 | return wrap<string[]>(() => readDirSync(path), req); 662 | }, 663 | mkdir: (path: string, mode: number, req?: FSReqWrap): undefined => { 664 | return wrap<undefined>(() => { 665 | try { 666 | readDirSync(path); 667 | } 668 | catch { 669 | env.fs[path] = null; 670 | return undefined; 671 | } 672 | return err("EEXISTS"); 673 | }, req); 674 | }, 675 | FSReqWrap: FSReqWrap 676 | };// TODO 677 | case "fs_event_wrap": 678 | return {};// TODO 679 | case "http_parser": 680 | return { 681 | methods: [], 682 | HTTPParser: HTTPParser 683 | };// TODO 684 | case "inspector": 685 | return {};// TODO 686 | case "os": 687 | return { 688 | getCPUs: () => errNotImpl(), 689 | getFreeMem: () => errNotImpl(), 690 | getHomeDirectory: () => '/home/runner', 691 | getHostname: () => errNotImpl(), 692 | getInterfaceAddresses: () => errNotImpl(), 693 | getLoadAvg: () => errNotImpl(), 694 | getOSRelease: () => "4.4.0-66-generic", 695 | getOSType: () => "Linux", 696 | getTotalMem: () => errNotImpl(), 697 | getUserInfo: () => [{ 698 | uid: 1001, 699 | gid: 1001, 700 | username: 'runner', 701 | homedir: '/home/runner', 702 | shell: '/bin/bash' 703 | }][0], 704 | getUptime: () => errNotImpl(), 705 | isBigEndian: false 706 | };// TODO 707 | case "performance": 708 | return { 709 | constants: { 710 | NODE_PERFORMANCE_ENTRY_TYPE_NODE: 0, 711 | NODE_PERFORMANCE_ENTRY_TYPE_MARK: 0, 712 | NODE_PERFORMANCE_ENTRY_TYPE_MEASURE: 0, 713 | NODE_PERFORMANCE_ENTRY_TYPE_GC: 0, 714 | NODE_PERFORMANCE_ENTRY_TYPE_FUNCTION: 0, 715 | NODE_PERFORMANCE_MILESTONE_NODE_START: 0, 716 | NODE_PERFORMANCE_MILESTONE_V8_START: 0, 717 | NODE_PERFORMANCE_MILESTONE_LOOP_START: 0, 718 | NODE_PERFORMANCE_MILESTONE_LOOP_EXIT: 0, 719 | NODE_PERFORMANCE_MILESTONE_BOOTSTRAP_COMPLETE: 0, 720 | NODE_PERFORMANCE_MILESTONE_ENVIRONMENT: 0, 721 | NODE_PERFORMANCE_MILESTONE_THIRD_PARTY_MAIN_START: 0, 722 | NODE_PERFORMANCE_MILESTONE_THIRD_PARTY_MAIN_END: 0, 723 | NODE_PERFORMANCE_MILESTONE_CLUSTER_SETUP_START: 0, 724 | NODE_PERFORMANCE_MILESTONE_CLUSTER_SETUP_END: 0, 725 | NODE_PERFORMANCE_MILESTONE_MODULE_LOAD_START: 0, 726 | NODE_PERFORMANCE_MILESTONE_MODULE_LOAD_END: 0, 727 | NODE_PERFORMANCE_MILESTONE_PRELOAD_MODULE_LOAD_START: 0, 728 | NODE_PERFORMANCE_MILESTONE_PRELOAD_MODULE_LOAD_END: 0 729 | }, 730 | // mark: _mark, 731 | markMilestone: () => { }, 732 | // measure: _measure, 733 | // milestones, 734 | observerCounts: {}, 735 | PerformanceEntry: PerformanceEntry, 736 | setupObservers: () => { }, 737 | // timeOrigin, 738 | // timerify, 739 | };// TODO 740 | case "pipe_wrap": 741 | return {};// TODO 742 | case "process_wrap": 743 | return {};// TODO 744 | case "module_wrap": 745 | return {};// TODO 746 | case "natives": 747 | return natives; 748 | case "spawn_sync": 749 | return { 750 | spawn: () => errNotImpl() 751 | }; 752 | case "stream_wrap": 753 | return { 754 | ShutdownWrap: ShutdownWrap, 755 | WriteWrap: WriteWrap 756 | };// TODO 757 | case "tcp_wrap": 758 | return { 759 | TCP: TCP 760 | };// TODO 761 | case "timer_wrap": 762 | return { 763 | Timer: Timer 764 | }; // TODO 765 | case "tty_wrap": 766 | return { 767 | isTTY: () => true, 768 | guessHandleType: (fs: number): string => "TTY", 769 | TTY: TTY 770 | };// TODO 771 | case "udp_wrap": 772 | return {};// TODO 773 | case "url": 774 | return { 775 | parse: () => { }, 776 | encodeAuth: () => { }, 777 | toUSVString: () => { }, 778 | domainToASCII: () => { }, 779 | domainToUnicode: () => { }, 780 | setURLConstructor: () => { }, 781 | URL_FLAGS_NONE: 0, URL_FLAGS_FAILED: 1, URL_FLAGS_CANNOT_BE_BASE: 2, URL_FLAGS_INVALID_PARSE_STATE: 4, URL_FLAGS_TERMINATED: 8, URL_FLAGS_SPECIAL: 16, URL_FLAGS_HAS_USERNAME: 32, URL_FLAGS_HAS_PASSWORD: 64, URL_FLAGS_HAS_HOST: 128, URL_FLAGS_HAS_PATH: 256, URL_FLAGS_HAS_QUERY: 512, URL_FLAGS_HAS_FRAGMENT: 1024, 782 | kSchemeStart: 0, kScheme: 1, kNoScheme: 2, kSpecialRelativeOrAuthority: 3, kPathOrAuthority: 4, kRelative: 5, kRelativeSlash: 6, kSpecialAuthoritySlashes: 7, kSpecialAuthorityIgnoreSlashes: 8, kAuthority: 9, kHost: 10, kHostname: 11, kPort: 12, kFile: 13, kFileSlash: 14, kFileHost: 15, kPathStart: 16, kPath: 17, kCannotBeBase: 18, kQuery: 19, kFragment: 20 783 | }; 784 | case "util": 785 | return { 786 | getPromiseDetails: (x: Promise<any>) => x && x.toString(), // TODO 787 | getProxyDetails: (x: Promise<any>) => x && x.toString(), // TODO 788 | isAnyArrayBuffer: (x: any) => x instanceof ArrayBuffer, 789 | isUint8Array: (x: any) => x instanceof Uint8Array, 790 | isDataView: (x: any) => x instanceof DataView, 791 | isExternal: (x: any) => false, // TODO: ??? 792 | isMap: (x: any) => x instanceof Map, 793 | isMapIterator: (x: any) => (x || {}).constructor === new Map().entries().constructor, 794 | isPromise: (x: any) => x instanceof Promise, 795 | isSet: (x: any) => x instanceof Set, 796 | isSetIterator: (x: any) => (x || {}).constructor === new Set().entries().constructor, 797 | isTypedArray: (x: any) => 798 | x instanceof Int8Array || 799 | x instanceof Uint8Array || 800 | x instanceof Uint8ClampedArray || 801 | x instanceof Int16Array || 802 | x instanceof Uint16Array || 803 | x instanceof Int32Array || 804 | x instanceof Uint32Array || 805 | x instanceof Float32Array || 806 | x instanceof Float64Array, 807 | isRegExp: (x: any) => x instanceof RegExp, 808 | isDate: (x: any) => x instanceof Date, 809 | // kPending, 810 | // kRejected, 811 | startSigintWatchdog: () => { }, 812 | stopSigintWatchdog: () => { }, 813 | getHiddenValue: (error: any, noIdea: any): boolean => false 814 | }; // TODO 815 | case "uv": 816 | return { 817 | errname: function () { return `errname(${arguments})`; }, 818 | UV_E2BIG: -4093, UV_EACCES: -4092, UV_EADDRINUSE: -4091, UV_EADDRNOTAVAIL: -4090, UV_EAFNOSUPPORT: -4089, UV_EAGAIN: -4088, UV_EAI_ADDRFAMILY: -3000, UV_EAI_AGAIN: -3001, UV_EAI_BADFLAGS: -3002, UV_EAI_BADHINTS: -3013, UV_EAI_CANCELED: -3003, UV_EAI_FAIL: -3004, UV_EAI_FAMILY: -3005, UV_EAI_MEMORY: -3006, UV_EAI_NODATA: -3007, UV_EAI_NONAME: -3008, UV_EAI_OVERFLOW: -3009, UV_EAI_PROTOCOL: -3014, UV_EAI_SERVICE: -3010, UV_EAI_SOCKTYPE: -3011, UV_EALREADY: -4084, UV_EBADF: -4083, UV_EBUSY: -4082, UV_ECANCELED: -4081, UV_ECHARSET: -4080, UV_ECONNABORTED: -4079, UV_ECONNREFUSED: -4078, UV_ECONNRESET: -4077, UV_EDESTADDRREQ: -4076, UV_EEXIST: -4075, UV_EFAULT: -4074, UV_EFBIG: -4036, UV_EHOSTUNREACH: -4073, UV_EINTR: -4072, UV_EINVAL: -4071, UV_EIO: -4070, UV_EISCONN: -4069, UV_EISDIR: -4068, UV_ELOOP: -4067, UV_EMFILE: -4066, UV_EMSGSIZE: -4065, UV_ENAMETOOLONG: -4064, UV_ENETDOWN: -4063, UV_ENETUNREACH: -4062, UV_ENFILE: -4061, UV_ENOBUFS: -4060, UV_ENODEV: -4059, UV_ENOENT: -4058, UV_ENOMEM: -4057, UV_ENONET: -4056, UV_ENOPROTOOPT: -4035, UV_ENOSPC: -4055, UV_ENOSYS: -4054, UV_ENOTCONN: -4053, UV_ENOTDIR: -4052, UV_ENOTEMPTY: -4051, UV_ENOTSOCK: -4050, UV_ENOTSUP: -4049, UV_EPERM: -4048, UV_EPIPE: -4047, UV_EPROTO: -4046, UV_EPROTONOSUPPORT: -4045, UV_EPROTOTYPE: -4044, UV_ERANGE: -4034, UV_EROFS: -4043, UV_ESHUTDOWN: -4042, UV_ESPIPE: -4041, UV_ESRCH: -4040, UV_ETIMEDOUT: -4039, UV_ETXTBSY: -4038, UV_EXDEV: -4037, UV_UNKNOWN: -4094, UV_EOF: -4095, UV_ENXIO: -4033, UV_EMLINK: -4032, UV_EHOSTDOWN: -4031 819 | } 820 | default: 821 | throw new Error(`missing binding '${name}'`); 822 | } 823 | }, 824 | chdir: (target: string) => { cwd = require("path").resolve(cwd, target) }, 825 | cwd: () => cwd, 826 | env: { 827 | // TODO: make specifyable from outside, like vfs 828 | // NODE_DEBUG: "repl,timer,stream,esm,module,net" 829 | NODE_REPL_HISTORY: "" 830 | }, 831 | execPath: "/bin/node/app.js", 832 | moduleLoadList: [] as string[], 833 | pid: 42, 834 | reallyExit: (exitCode: number) => { 835 | postMessage({ f: "EXIT", x: exitCode }); 836 | while (true) 837 | ; // TODO smarter spin wait? maybe some sync-IO stuff? 838 | // don't allow any further execution (not caller, but also no timers etc.) 839 | }, 840 | release: { 841 | name: "node-box" 842 | }, 843 | umask: () => 0, 844 | version: "v8.0.0", 845 | versions: { 846 | http_parser: '2.7.0', 847 | node: '8.0.0', 848 | v8: '5.8.283.41', 849 | uv: '1.11.0', 850 | zlib: '1.2.11', 851 | ares: '1.10.1-DEV', 852 | modules: '57', 853 | openssl: '1.0.2k', 854 | icu: '59.1', 855 | unicode: '9.0', 856 | cldr: '31.0.1', 857 | tz: '2017b' 858 | } 859 | }; 860 | Object.setPrototypeOf(process, {}); 861 | 862 | const bootstrapper = new ContextifyScript(natives["internal/bootstrap_node"], { displayErrors: true, filename: "internal/bootstrap_node", lineOffset: 0 }); 863 | const bootstrap = bootstrapper.runInThisContext(); 864 | try { 865 | bootstrap(process); 866 | } catch (e) { console.error(e); } 867 | }; 868 | 869 | selfAny.onerror = function (ev: any) { postMessage({ f: "error", x: ev }); }; 870 | } 871 | -------------------------------------------------------------------------------- /nodeos/node/src/binding.ts: -------------------------------------------------------------------------------- 1 | // function -------------------------------------------------------------------------------- /nodeos/node/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "alwaysStrict": false, 4 | "forceConsistentCasingInFileNames": true, 5 | "noImplicitUseStrict": true, 6 | "module": "amd", 7 | "noEmitOnError": true, 8 | "noImplicitAny": true, 9 | "noImplicitReturns": true, 10 | "noImplicitThis": true, 11 | "skipLibCheck": true, 12 | "outFile": "../../www/bin/node/app.js", 13 | "sourceMap": false, 14 | "strict": true, 15 | "target": "ES5", // max. for which with-statement in eval works 16 | "types": [ 17 | "node" 18 | ], 19 | "lib": [ 20 | "ES2017", 21 | "webworker" 22 | ], 23 | "newLine": "LF" 24 | }, 25 | "exclude": [ 26 | "dist", 27 | "../types" 28 | ] 29 | } -------------------------------------------------------------------------------- /nodeos/types/env.ts: -------------------------------------------------------------------------------- 1 | /// <reference path="./vfs.ts" /> 2 | 3 | interface Environment { 4 | fs: VirtualFileSystem; 5 | cwd: string; 6 | } -------------------------------------------------------------------------------- /nodeos/types/vfs.ts: -------------------------------------------------------------------------------- 1 | 2 | type ByteBuffer = Uint8Array; 3 | 4 | interface VirtualFileSystem { 5 | [path: string]: ByteBuffer | null | undefined; // TODO: do right 6 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node.box", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "postinstall": "shx rm -rf www/xterm && shx cp -r node_modules/xterm/lib www/xterm && shx cp node_modules/xterm/css/xterm.css www/xterm && cd \"test/browserRunner\" && npm install && cd ../.. && git config --global core.longpaths true && shx rm -rf www/node && git clone --depth 1 https://github.com/olydis/node www/node && cd \"www/node\" && git filter-branch --prune-empty --subdirectory-filter lib HEAD && shx rm -rf .git && cd ../..", 8 | "start": "http-server www -p 8000 -i false -c-1\"", 9 | "test": "mocha test --timeout 60000", 10 | "build": "concurrently --passthrough-arguments \"cd nodeos/host && tsc {@}\" \"cd nodeos/node && tsc {@}\"" 11 | }, 12 | "author": "Johannes Bader", 13 | "license": "MIT", 14 | "devDependencies": { 15 | "@types/node": "^8.0.28", 16 | "concurrently": "^7.4.0", 17 | "http-server": "^14.1.1", 18 | "mocha": "^10.0.0", 19 | "shx": "^0.3.4", 20 | "typescript": "^4.8.3", 21 | "xterm": "^5.0.0" 22 | } 23 | } -------------------------------------------------------------------------------- /test/browserRunner/app.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const { BrowserWindow, dialog, app } = require("electron"); 4 | const { createReadStream, createWriteStream, readdirSync, statSync, readFileSync } = require("fs"); 5 | 6 | const parent_stdin = createReadStream(null, { fd: 3 }); 7 | const parent_stdout = createWriteStream(null, { fd: 4 }); 8 | const parent_stderr = createWriteStream(null, { fd: 5 }); 9 | 10 | const testCase = process.argv[2]; 11 | 12 | // package 13 | const packageJson = require(`../${testCase}/package.json`); 14 | 15 | // browser init 16 | const win = new BrowserWindow({ show: false }); 17 | // win.webContents.toggleDevTools(); 18 | // win.maximize(); 19 | // win.setMenu(null); 20 | 21 | win.loadURL("http://localhost:8000/index.html"); 22 | const page = win.webContents; 23 | 24 | page.once("did-finish-load", async () => { 25 | // page.property("onConsoleMessage", function (msg, lineNum, sourceId) { 26 | // console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")'); 27 | // }); 28 | try { 29 | // upload test case 30 | const baseDir = `${__dirname}/..`; 31 | const copyFolder = async relPath => { 32 | const dirPath = `${baseDir}${relPath}`; 33 | const entries = readdirSync(dirPath); 34 | for (const entry of entries) { 35 | const stat = statSync(`${dirPath}/${entry}`); 36 | const relEntityPath = `${relPath}/${entry}`; 37 | if (stat.isDirectory()) 38 | await copyFolder(relEntityPath); 39 | else 40 | await copyFile(relEntityPath); 41 | } 42 | await page.executeJavaScript(`self.fs[${JSON.stringify(relPath)}] = null;`); 43 | }; 44 | const copyFile = async relPath => { 45 | const filePath = `${baseDir}${relPath}`; 46 | const contents = readFileSync(filePath); 47 | await page.executeJavaScript(`self.fs[${JSON.stringify(relPath)}] = ${JSON.stringify(contents.toString())};`); 48 | }; 49 | await page.executeJavaScript("self.fs = {};"); 50 | await copyFolder(`/${testCase}`); 51 | 52 | // launch 53 | await page.executeJavaScript(`new VirtualMachine(self.fs).node(["/" + ${JSON.stringify(testCase)}]);`); 54 | 55 | // wait for results 56 | while (true) { 57 | const stdout = await page.executeJavaScript(`document.getElementById("stdout").textContent`); 58 | const stderr = await page.executeJavaScript(`document.getElementById("stderr").textContent`); 59 | if (stdout.includes(packageJson.marker) || stderr.includes(packageJson.marker)) { 60 | parent_stdout.end(stdout); 61 | parent_stderr.end(stderr); 62 | app.exit(0); 63 | } 64 | await new Promise(res => setTimeout(res, 1000)); 65 | } 66 | } catch (e) { 67 | dialog.showErrorBox("error running test script", "" + e); 68 | } 69 | }); -------------------------------------------------------------------------------- /test/browserRunner/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | const electron = require("electron"); 3 | const { spawn } = require("child_process"); 4 | if (typeof electron === "string") 5 | spawn(electron, [__filename, ...process.argv.slice(2)], { stdio: ["ignore", "ignore", "ignore", process.stdin, process.stdout, process.stderr] }); 6 | else 7 | electron.app.on("ready", () => require("./app")); -------------------------------------------------------------------------------- /test/browserRunner/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "browserRunner", 3 | "lockfileVersion": 2, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "dependencies": { 8 | "electron": "^2.0.0" 9 | } 10 | }, 11 | "node_modules/@types/node": { 12 | "version": "8.10.12", 13 | "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.12.tgz", 14 | "integrity": "sha512-aRFUGj/f9JVA0qSQiCK9ebaa778mmqMIcy1eKnPktgfm9O6VsnIzzB5wJnjp9/jVrfm7fX1rr3OR1nndppGZUg==" 15 | }, 16 | "node_modules/ajv": { 17 | "version": "5.5.2", 18 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", 19 | "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", 20 | "dependencies": { 21 | "co": "^4.6.0", 22 | "fast-deep-equal": "^1.0.0", 23 | "fast-json-stable-stringify": "^2.0.0", 24 | "json-schema-traverse": "^0.3.0" 25 | } 26 | }, 27 | "node_modules/ansi-regex": { 28 | "version": "2.1.1", 29 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 30 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 31 | "engines": { 32 | "node": ">=0.10.0" 33 | } 34 | }, 35 | "node_modules/array-find-index": { 36 | "version": "1.0.2", 37 | "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", 38 | "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", 39 | "engines": { 40 | "node": ">=0.10.0" 41 | } 42 | }, 43 | "node_modules/asn1": { 44 | "version": "0.2.3", 45 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 46 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" 47 | }, 48 | "node_modules/assert-plus": { 49 | "version": "1.0.0", 50 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 51 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 52 | "engines": { 53 | "node": ">=0.8" 54 | } 55 | }, 56 | "node_modules/asynckit": { 57 | "version": "0.4.0", 58 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 59 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 60 | }, 61 | "node_modules/aws-sign2": { 62 | "version": "0.7.0", 63 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 64 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", 65 | "engines": { 66 | "node": "*" 67 | } 68 | }, 69 | "node_modules/aws4": { 70 | "version": "1.7.0", 71 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", 72 | "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" 73 | }, 74 | "node_modules/balanced-match": { 75 | "version": "1.0.0", 76 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 77 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 78 | }, 79 | "node_modules/bcrypt-pbkdf": { 80 | "version": "1.0.1", 81 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", 82 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", 83 | "optional": true, 84 | "dependencies": { 85 | "tweetnacl": "^0.14.3" 86 | } 87 | }, 88 | "node_modules/boom": { 89 | "version": "4.3.1", 90 | "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", 91 | "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", 92 | "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", 93 | "dependencies": { 94 | "hoek": "4.x.x" 95 | }, 96 | "engines": { 97 | "node": ">=4.0.0" 98 | } 99 | }, 100 | "node_modules/brace-expansion": { 101 | "version": "1.1.11", 102 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 103 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 104 | "dependencies": { 105 | "balanced-match": "^1.0.0", 106 | "concat-map": "0.0.1" 107 | } 108 | }, 109 | "node_modules/builtin-modules": { 110 | "version": "1.1.1", 111 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", 112 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", 113 | "engines": { 114 | "node": ">=0.10.0" 115 | } 116 | }, 117 | "node_modules/camelcase": { 118 | "version": "2.1.1", 119 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", 120 | "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", 121 | "engines": { 122 | "node": ">=0.10.0" 123 | } 124 | }, 125 | "node_modules/camelcase-keys": { 126 | "version": "2.1.0", 127 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", 128 | "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", 129 | "dependencies": { 130 | "camelcase": "^2.0.0", 131 | "map-obj": "^1.0.0" 132 | }, 133 | "engines": { 134 | "node": ">=0.10.0" 135 | } 136 | }, 137 | "node_modules/caseless": { 138 | "version": "0.12.0", 139 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 140 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 141 | }, 142 | "node_modules/co": { 143 | "version": "4.6.0", 144 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 145 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", 146 | "engines": { 147 | "iojs": ">= 1.0.0", 148 | "node": ">= 0.12.0" 149 | } 150 | }, 151 | "node_modules/code-point-at": { 152 | "version": "1.1.0", 153 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 154 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", 155 | "engines": { 156 | "node": ">=0.10.0" 157 | } 158 | }, 159 | "node_modules/combined-stream": { 160 | "version": "1.0.6", 161 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", 162 | "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", 163 | "dependencies": { 164 | "delayed-stream": "~1.0.0" 165 | }, 166 | "engines": { 167 | "node": ">= 0.8" 168 | } 169 | }, 170 | "node_modules/concat-map": { 171 | "version": "0.0.1", 172 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 173 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 174 | }, 175 | "node_modules/concat-stream": { 176 | "version": "1.6.0", 177 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", 178 | "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", 179 | "engines": [ 180 | "node >= 0.8" 181 | ], 182 | "dependencies": { 183 | "inherits": "^2.0.3", 184 | "readable-stream": "^2.2.2", 185 | "typedarray": "^0.0.6" 186 | } 187 | }, 188 | "node_modules/concat-stream/node_modules/isarray": { 189 | "version": "1.0.0", 190 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 191 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 192 | }, 193 | "node_modules/concat-stream/node_modules/readable-stream": { 194 | "version": "2.3.6", 195 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 196 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 197 | "dependencies": { 198 | "core-util-is": "~1.0.0", 199 | "inherits": "~2.0.3", 200 | "isarray": "~1.0.0", 201 | "process-nextick-args": "~2.0.0", 202 | "safe-buffer": "~5.1.1", 203 | "string_decoder": "~1.1.1", 204 | "util-deprecate": "~1.0.1" 205 | } 206 | }, 207 | "node_modules/concat-stream/node_modules/string_decoder": { 208 | "version": "1.1.1", 209 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 210 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 211 | "dependencies": { 212 | "safe-buffer": "~5.1.0" 213 | } 214 | }, 215 | "node_modules/core-util-is": { 216 | "version": "1.0.2", 217 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 218 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 219 | }, 220 | "node_modules/cryptiles": { 221 | "version": "3.1.2", 222 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", 223 | "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", 224 | "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", 225 | "dependencies": { 226 | "boom": "5.x.x" 227 | }, 228 | "engines": { 229 | "node": ">=4.0.0" 230 | } 231 | }, 232 | "node_modules/cryptiles/node_modules/boom": { 233 | "version": "5.2.0", 234 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 235 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 236 | "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", 237 | "dependencies": { 238 | "hoek": "4.x.x" 239 | }, 240 | "engines": { 241 | "node": ">=4.0.0" 242 | } 243 | }, 244 | "node_modules/currently-unhandled": { 245 | "version": "0.4.1", 246 | "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", 247 | "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", 248 | "dependencies": { 249 | "array-find-index": "^1.0.1" 250 | }, 251 | "engines": { 252 | "node": ">=0.10.0" 253 | } 254 | }, 255 | "node_modules/dashdash": { 256 | "version": "1.14.1", 257 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 258 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 259 | "dependencies": { 260 | "assert-plus": "^1.0.0" 261 | }, 262 | "engines": { 263 | "node": ">=0.10" 264 | } 265 | }, 266 | "node_modules/debug": { 267 | "version": "2.6.9", 268 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 269 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 270 | "dependencies": { 271 | "ms": "2.0.0" 272 | } 273 | }, 274 | "node_modules/decamelize": { 275 | "version": "1.2.0", 276 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 277 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 278 | "engines": { 279 | "node": ">=0.10.0" 280 | } 281 | }, 282 | "node_modules/deep-extend": { 283 | "version": "0.5.1", 284 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", 285 | "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", 286 | "engines": { 287 | "iojs": ">=1.0.0", 288 | "node": ">=0.10.0" 289 | } 290 | }, 291 | "node_modules/delayed-stream": { 292 | "version": "1.0.0", 293 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 294 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 295 | "engines": { 296 | "node": ">=0.4.0" 297 | } 298 | }, 299 | "node_modules/ecc-jsbn": { 300 | "version": "0.1.1", 301 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", 302 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", 303 | "optional": true, 304 | "dependencies": { 305 | "jsbn": "~0.1.0" 306 | } 307 | }, 308 | "node_modules/electron": { 309 | "version": "2.0.0", 310 | "resolved": "https://registry.npmjs.org/electron/-/electron-2.0.0.tgz", 311 | "integrity": "sha512-FCcVzHgoBmNTPUEhKN7yUxjluCRNAQsHNOfdtFEWKL3DPYEdLdyQW8CpmJEMqIXha5qZ+qdKVAtwvvuJs+b/PQ==", 312 | "hasInstallScript": true, 313 | "dependencies": { 314 | "@types/node": "^8.0.24", 315 | "electron-download": "^3.0.1", 316 | "extract-zip": "^1.0.3" 317 | }, 318 | "bin": { 319 | "electron": "cli.js" 320 | } 321 | }, 322 | "node_modules/electron-download": { 323 | "version": "3.3.0", 324 | "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-3.3.0.tgz", 325 | "integrity": "sha1-LP1U1pZsAZxNSa1l++Zcyc3vaMg=", 326 | "dependencies": { 327 | "debug": "^2.2.0", 328 | "fs-extra": "^0.30.0", 329 | "home-path": "^1.0.1", 330 | "minimist": "^1.2.0", 331 | "nugget": "^2.0.0", 332 | "path-exists": "^2.1.0", 333 | "rc": "^1.1.2", 334 | "semver": "^5.3.0", 335 | "sumchecker": "^1.2.0" 336 | }, 337 | "bin": { 338 | "electron-download": "build/cli.js" 339 | } 340 | }, 341 | "node_modules/error-ex": { 342 | "version": "1.3.1", 343 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", 344 | "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", 345 | "dependencies": { 346 | "is-arrayish": "^0.2.1" 347 | } 348 | }, 349 | "node_modules/es6-promise": { 350 | "version": "4.2.4", 351 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", 352 | "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==" 353 | }, 354 | "node_modules/extend": { 355 | "version": "3.0.1", 356 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 357 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" 358 | }, 359 | "node_modules/extract-zip": { 360 | "version": "1.6.6", 361 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz", 362 | "integrity": "sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=", 363 | "dependencies": { 364 | "concat-stream": "1.6.0", 365 | "debug": "2.6.9", 366 | "mkdirp": "0.5.0", 367 | "yauzl": "2.4.1" 368 | }, 369 | "bin": { 370 | "extract-zip": "cli.js" 371 | } 372 | }, 373 | "node_modules/extsprintf": { 374 | "version": "1.3.0", 375 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 376 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", 377 | "engines": [ 378 | "node >=0.6.0" 379 | ] 380 | }, 381 | "node_modules/fast-deep-equal": { 382 | "version": "1.1.0", 383 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", 384 | "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" 385 | }, 386 | "node_modules/fast-json-stable-stringify": { 387 | "version": "2.0.0", 388 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 389 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" 390 | }, 391 | "node_modules/fd-slicer": { 392 | "version": "1.0.1", 393 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", 394 | "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", 395 | "dependencies": { 396 | "pend": "~1.2.0" 397 | } 398 | }, 399 | "node_modules/find-up": { 400 | "version": "1.1.2", 401 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", 402 | "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", 403 | "dependencies": { 404 | "path-exists": "^2.0.0", 405 | "pinkie-promise": "^2.0.0" 406 | }, 407 | "engines": { 408 | "node": ">=0.10.0" 409 | } 410 | }, 411 | "node_modules/forever-agent": { 412 | "version": "0.6.1", 413 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 414 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 415 | "engines": { 416 | "node": "*" 417 | } 418 | }, 419 | "node_modules/form-data": { 420 | "version": "2.3.2", 421 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", 422 | "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", 423 | "dependencies": { 424 | "asynckit": "^0.4.0", 425 | "combined-stream": "1.0.6", 426 | "mime-types": "^2.1.12" 427 | }, 428 | "engines": { 429 | "node": ">= 0.12" 430 | } 431 | }, 432 | "node_modules/fs-extra": { 433 | "version": "0.30.0", 434 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", 435 | "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", 436 | "dependencies": { 437 | "graceful-fs": "^4.1.2", 438 | "jsonfile": "^2.1.0", 439 | "klaw": "^1.0.0", 440 | "path-is-absolute": "^1.0.0", 441 | "rimraf": "^2.2.8" 442 | } 443 | }, 444 | "node_modules/fs.realpath": { 445 | "version": "1.0.0", 446 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 447 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 448 | }, 449 | "node_modules/get-stdin": { 450 | "version": "4.0.1", 451 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", 452 | "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", 453 | "engines": { 454 | "node": ">=0.10.0" 455 | } 456 | }, 457 | "node_modules/getpass": { 458 | "version": "0.1.7", 459 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 460 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 461 | "dependencies": { 462 | "assert-plus": "^1.0.0" 463 | } 464 | }, 465 | "node_modules/glob": { 466 | "version": "7.1.2", 467 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 468 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 469 | "dependencies": { 470 | "fs.realpath": "^1.0.0", 471 | "inflight": "^1.0.4", 472 | "inherits": "2", 473 | "minimatch": "^3.0.4", 474 | "once": "^1.3.0", 475 | "path-is-absolute": "^1.0.0" 476 | }, 477 | "engines": { 478 | "node": "*" 479 | } 480 | }, 481 | "node_modules/graceful-fs": { 482 | "version": "4.1.11", 483 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 484 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 485 | "engines": { 486 | "node": ">=0.4.0" 487 | } 488 | }, 489 | "node_modules/har-schema": { 490 | "version": "2.0.0", 491 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 492 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", 493 | "engines": { 494 | "node": ">=4" 495 | } 496 | }, 497 | "node_modules/har-validator": { 498 | "version": "5.0.3", 499 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", 500 | "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", 501 | "deprecated": "this library is no longer supported", 502 | "dependencies": { 503 | "ajv": "^5.1.0", 504 | "har-schema": "^2.0.0" 505 | }, 506 | "engines": { 507 | "node": ">=4" 508 | } 509 | }, 510 | "node_modules/hawk": { 511 | "version": "6.0.2", 512 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", 513 | "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", 514 | "deprecated": "This module moved to @hapi/hawk. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.", 515 | "dependencies": { 516 | "boom": "4.x.x", 517 | "cryptiles": "3.x.x", 518 | "hoek": "4.x.x", 519 | "sntp": "2.x.x" 520 | }, 521 | "engines": { 522 | "node": ">=4.5.0" 523 | } 524 | }, 525 | "node_modules/hoek": { 526 | "version": "4.2.1", 527 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", 528 | "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", 529 | "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", 530 | "engines": { 531 | "node": ">=4.0.0" 532 | } 533 | }, 534 | "node_modules/home-path": { 535 | "version": "1.0.5", 536 | "resolved": "https://registry.npmjs.org/home-path/-/home-path-1.0.5.tgz", 537 | "integrity": "sha1-eIspgVsS1Tus9XVkhHbm+QQdEz8=" 538 | }, 539 | "node_modules/hosted-git-info": { 540 | "version": "2.6.0", 541 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", 542 | "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", 543 | "engines": { 544 | "node": ">=4" 545 | } 546 | }, 547 | "node_modules/http-signature": { 548 | "version": "1.2.0", 549 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 550 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 551 | "dependencies": { 552 | "assert-plus": "^1.0.0", 553 | "jsprim": "^1.2.2", 554 | "sshpk": "^1.7.0" 555 | }, 556 | "engines": { 557 | "node": ">=0.8", 558 | "npm": ">=1.3.7" 559 | } 560 | }, 561 | "node_modules/indent-string": { 562 | "version": "2.1.0", 563 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", 564 | "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", 565 | "dependencies": { 566 | "repeating": "^2.0.0" 567 | }, 568 | "engines": { 569 | "node": ">=0.10.0" 570 | } 571 | }, 572 | "node_modules/inflight": { 573 | "version": "1.0.6", 574 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 575 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 576 | "dependencies": { 577 | "once": "^1.3.0", 578 | "wrappy": "1" 579 | } 580 | }, 581 | "node_modules/inherits": { 582 | "version": "2.0.3", 583 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 584 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 585 | }, 586 | "node_modules/ini": { 587 | "version": "1.3.5", 588 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 589 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", 590 | "deprecated": "Please update to ini >=1.3.6 to avoid a prototype pollution issue", 591 | "engines": { 592 | "node": "*" 593 | } 594 | }, 595 | "node_modules/is-arrayish": { 596 | "version": "0.2.1", 597 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 598 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" 599 | }, 600 | "node_modules/is-builtin-module": { 601 | "version": "1.0.0", 602 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", 603 | "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", 604 | "dependencies": { 605 | "builtin-modules": "^1.0.0" 606 | }, 607 | "engines": { 608 | "node": ">=0.10.0" 609 | } 610 | }, 611 | "node_modules/is-finite": { 612 | "version": "1.0.2", 613 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", 614 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", 615 | "dependencies": { 616 | "number-is-nan": "^1.0.0" 617 | }, 618 | "engines": { 619 | "node": ">=0.10.0" 620 | } 621 | }, 622 | "node_modules/is-fullwidth-code-point": { 623 | "version": "1.0.0", 624 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 625 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 626 | "dependencies": { 627 | "number-is-nan": "^1.0.0" 628 | }, 629 | "engines": { 630 | "node": ">=0.10.0" 631 | } 632 | }, 633 | "node_modules/is-typedarray": { 634 | "version": "1.0.0", 635 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 636 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 637 | }, 638 | "node_modules/is-utf8": { 639 | "version": "0.2.1", 640 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", 641 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" 642 | }, 643 | "node_modules/isarray": { 644 | "version": "0.0.1", 645 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 646 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 647 | }, 648 | "node_modules/isstream": { 649 | "version": "0.1.2", 650 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 651 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 652 | }, 653 | "node_modules/jsbn": { 654 | "version": "0.1.1", 655 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 656 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 657 | "optional": true 658 | }, 659 | "node_modules/json-schema": { 660 | "version": "0.2.3", 661 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 662 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 663 | }, 664 | "node_modules/json-schema-traverse": { 665 | "version": "0.3.1", 666 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 667 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" 668 | }, 669 | "node_modules/json-stringify-safe": { 670 | "version": "5.0.1", 671 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 672 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 673 | }, 674 | "node_modules/jsonfile": { 675 | "version": "2.4.0", 676 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", 677 | "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", 678 | "optionalDependencies": { 679 | "graceful-fs": "^4.1.6" 680 | } 681 | }, 682 | "node_modules/jsprim": { 683 | "version": "1.4.1", 684 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 685 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 686 | "engines": [ 687 | "node >=0.6.0" 688 | ], 689 | "dependencies": { 690 | "assert-plus": "1.0.0", 691 | "extsprintf": "1.3.0", 692 | "json-schema": "0.2.3", 693 | "verror": "1.10.0" 694 | } 695 | }, 696 | "node_modules/klaw": { 697 | "version": "1.3.1", 698 | "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", 699 | "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", 700 | "optionalDependencies": { 701 | "graceful-fs": "^4.1.9" 702 | } 703 | }, 704 | "node_modules/load-json-file": { 705 | "version": "1.1.0", 706 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", 707 | "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", 708 | "dependencies": { 709 | "graceful-fs": "^4.1.2", 710 | "parse-json": "^2.2.0", 711 | "pify": "^2.0.0", 712 | "pinkie-promise": "^2.0.0", 713 | "strip-bom": "^2.0.0" 714 | }, 715 | "engines": { 716 | "node": ">=0.10.0" 717 | } 718 | }, 719 | "node_modules/loud-rejection": { 720 | "version": "1.6.0", 721 | "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", 722 | "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", 723 | "dependencies": { 724 | "currently-unhandled": "^0.4.1", 725 | "signal-exit": "^3.0.0" 726 | }, 727 | "engines": { 728 | "node": ">=0.10.0" 729 | } 730 | }, 731 | "node_modules/map-obj": { 732 | "version": "1.0.1", 733 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", 734 | "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", 735 | "engines": { 736 | "node": ">=0.10.0" 737 | } 738 | }, 739 | "node_modules/meow": { 740 | "version": "3.7.0", 741 | "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", 742 | "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", 743 | "dependencies": { 744 | "camelcase-keys": "^2.0.0", 745 | "decamelize": "^1.1.2", 746 | "loud-rejection": "^1.0.0", 747 | "map-obj": "^1.0.1", 748 | "minimist": "^1.1.3", 749 | "normalize-package-data": "^2.3.4", 750 | "object-assign": "^4.0.1", 751 | "read-pkg-up": "^1.0.1", 752 | "redent": "^1.0.0", 753 | "trim-newlines": "^1.0.0" 754 | }, 755 | "engines": { 756 | "node": ">=0.10.0" 757 | } 758 | }, 759 | "node_modules/mime-db": { 760 | "version": "1.33.0", 761 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", 762 | "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", 763 | "engines": { 764 | "node": ">= 0.6" 765 | } 766 | }, 767 | "node_modules/mime-types": { 768 | "version": "2.1.18", 769 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", 770 | "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", 771 | "dependencies": { 772 | "mime-db": "~1.33.0" 773 | }, 774 | "engines": { 775 | "node": ">= 0.6" 776 | } 777 | }, 778 | "node_modules/minimatch": { 779 | "version": "3.0.4", 780 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 781 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 782 | "dependencies": { 783 | "brace-expansion": "^1.1.7" 784 | }, 785 | "engines": { 786 | "node": "*" 787 | } 788 | }, 789 | "node_modules/minimist": { 790 | "version": "1.2.0", 791 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 792 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 793 | }, 794 | "node_modules/mkdirp": { 795 | "version": "0.5.0", 796 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", 797 | "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", 798 | "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", 799 | "dependencies": { 800 | "minimist": "0.0.8" 801 | }, 802 | "bin": { 803 | "mkdirp": "bin/cmd.js" 804 | } 805 | }, 806 | "node_modules/mkdirp/node_modules/minimist": { 807 | "version": "0.0.8", 808 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 809 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 810 | }, 811 | "node_modules/ms": { 812 | "version": "2.0.0", 813 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 814 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 815 | }, 816 | "node_modules/normalize-package-data": { 817 | "version": "2.4.0", 818 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", 819 | "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", 820 | "dependencies": { 821 | "hosted-git-info": "^2.1.4", 822 | "is-builtin-module": "^1.0.0", 823 | "semver": "2 || 3 || 4 || 5", 824 | "validate-npm-package-license": "^3.0.1" 825 | } 826 | }, 827 | "node_modules/nugget": { 828 | "version": "2.0.1", 829 | "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz", 830 | "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=", 831 | "dependencies": { 832 | "debug": "^2.1.3", 833 | "minimist": "^1.1.0", 834 | "pretty-bytes": "^1.0.2", 835 | "progress-stream": "^1.1.0", 836 | "request": "^2.45.0", 837 | "single-line-log": "^1.1.2", 838 | "throttleit": "0.0.2" 839 | }, 840 | "bin": { 841 | "nugget": "bin.js" 842 | } 843 | }, 844 | "node_modules/number-is-nan": { 845 | "version": "1.0.1", 846 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 847 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 848 | "engines": { 849 | "node": ">=0.10.0" 850 | } 851 | }, 852 | "node_modules/oauth-sign": { 853 | "version": "0.8.2", 854 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 855 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", 856 | "engines": { 857 | "node": "*" 858 | } 859 | }, 860 | "node_modules/object-assign": { 861 | "version": "4.1.1", 862 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 863 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 864 | "engines": { 865 | "node": ">=0.10.0" 866 | } 867 | }, 868 | "node_modules/object-keys": { 869 | "version": "0.4.0", 870 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", 871 | "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" 872 | }, 873 | "node_modules/once": { 874 | "version": "1.4.0", 875 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 876 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 877 | "dependencies": { 878 | "wrappy": "1" 879 | } 880 | }, 881 | "node_modules/parse-json": { 882 | "version": "2.2.0", 883 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 884 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 885 | "dependencies": { 886 | "error-ex": "^1.2.0" 887 | }, 888 | "engines": { 889 | "node": ">=0.10.0" 890 | } 891 | }, 892 | "node_modules/path-exists": { 893 | "version": "2.1.0", 894 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", 895 | "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", 896 | "dependencies": { 897 | "pinkie-promise": "^2.0.0" 898 | }, 899 | "engines": { 900 | "node": ">=0.10.0" 901 | } 902 | }, 903 | "node_modules/path-is-absolute": { 904 | "version": "1.0.1", 905 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 906 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 907 | "engines": { 908 | "node": ">=0.10.0" 909 | } 910 | }, 911 | "node_modules/path-type": { 912 | "version": "1.1.0", 913 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", 914 | "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", 915 | "dependencies": { 916 | "graceful-fs": "^4.1.2", 917 | "pify": "^2.0.0", 918 | "pinkie-promise": "^2.0.0" 919 | }, 920 | "engines": { 921 | "node": ">=0.10.0" 922 | } 923 | }, 924 | "node_modules/pend": { 925 | "version": "1.2.0", 926 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 927 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" 928 | }, 929 | "node_modules/performance-now": { 930 | "version": "2.1.0", 931 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 932 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 933 | }, 934 | "node_modules/pify": { 935 | "version": "2.3.0", 936 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 937 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 938 | "engines": { 939 | "node": ">=0.10.0" 940 | } 941 | }, 942 | "node_modules/pinkie": { 943 | "version": "2.0.4", 944 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 945 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", 946 | "engines": { 947 | "node": ">=0.10.0" 948 | } 949 | }, 950 | "node_modules/pinkie-promise": { 951 | "version": "2.0.1", 952 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 953 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 954 | "dependencies": { 955 | "pinkie": "^2.0.0" 956 | }, 957 | "engines": { 958 | "node": ">=0.10.0" 959 | } 960 | }, 961 | "node_modules/pretty-bytes": { 962 | "version": "1.0.4", 963 | "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", 964 | "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", 965 | "dependencies": { 966 | "get-stdin": "^4.0.1", 967 | "meow": "^3.1.0" 968 | }, 969 | "bin": { 970 | "pretty-bytes": "cli.js" 971 | }, 972 | "engines": { 973 | "node": ">=0.10.0" 974 | } 975 | }, 976 | "node_modules/process-nextick-args": { 977 | "version": "2.0.0", 978 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 979 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" 980 | }, 981 | "node_modules/progress-stream": { 982 | "version": "1.2.0", 983 | "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", 984 | "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", 985 | "dependencies": { 986 | "speedometer": "~0.1.2", 987 | "through2": "~0.2.3" 988 | } 989 | }, 990 | "node_modules/punycode": { 991 | "version": "1.4.1", 992 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 993 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 994 | }, 995 | "node_modules/qs": { 996 | "version": "6.5.2", 997 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 998 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", 999 | "engines": { 1000 | "node": ">=0.6" 1001 | } 1002 | }, 1003 | "node_modules/rc": { 1004 | "version": "1.2.7", 1005 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz", 1006 | "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", 1007 | "dependencies": { 1008 | "deep-extend": "^0.5.1", 1009 | "ini": "~1.3.0", 1010 | "minimist": "^1.2.0", 1011 | "strip-json-comments": "~2.0.1" 1012 | }, 1013 | "bin": { 1014 | "rc": "cli.js" 1015 | } 1016 | }, 1017 | "node_modules/read-pkg": { 1018 | "version": "1.1.0", 1019 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", 1020 | "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", 1021 | "dependencies": { 1022 | "load-json-file": "^1.0.0", 1023 | "normalize-package-data": "^2.3.2", 1024 | "path-type": "^1.0.0" 1025 | }, 1026 | "engines": { 1027 | "node": ">=0.10.0" 1028 | } 1029 | }, 1030 | "node_modules/read-pkg-up": { 1031 | "version": "1.0.1", 1032 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", 1033 | "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", 1034 | "dependencies": { 1035 | "find-up": "^1.0.0", 1036 | "read-pkg": "^1.0.0" 1037 | }, 1038 | "engines": { 1039 | "node": ">=0.10.0" 1040 | } 1041 | }, 1042 | "node_modules/readable-stream": { 1043 | "version": "1.1.14", 1044 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 1045 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", 1046 | "dependencies": { 1047 | "core-util-is": "~1.0.0", 1048 | "inherits": "~2.0.1", 1049 | "isarray": "0.0.1", 1050 | "string_decoder": "~0.10.x" 1051 | } 1052 | }, 1053 | "node_modules/redent": { 1054 | "version": "1.0.0", 1055 | "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", 1056 | "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", 1057 | "dependencies": { 1058 | "indent-string": "^2.1.0", 1059 | "strip-indent": "^1.0.1" 1060 | }, 1061 | "engines": { 1062 | "node": ">=0.10.0" 1063 | } 1064 | }, 1065 | "node_modules/repeating": { 1066 | "version": "2.0.1", 1067 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", 1068 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", 1069 | "dependencies": { 1070 | "is-finite": "^1.0.0" 1071 | }, 1072 | "engines": { 1073 | "node": ">=0.10.0" 1074 | } 1075 | }, 1076 | "node_modules/request": { 1077 | "version": "2.85.0", 1078 | "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", 1079 | "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", 1080 | "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", 1081 | "dependencies": { 1082 | "aws-sign2": "~0.7.0", 1083 | "aws4": "^1.6.0", 1084 | "caseless": "~0.12.0", 1085 | "combined-stream": "~1.0.5", 1086 | "extend": "~3.0.1", 1087 | "forever-agent": "~0.6.1", 1088 | "form-data": "~2.3.1", 1089 | "har-validator": "~5.0.3", 1090 | "hawk": "~6.0.2", 1091 | "http-signature": "~1.2.0", 1092 | "is-typedarray": "~1.0.0", 1093 | "isstream": "~0.1.2", 1094 | "json-stringify-safe": "~5.0.1", 1095 | "mime-types": "~2.1.17", 1096 | "oauth-sign": "~0.8.2", 1097 | "performance-now": "^2.1.0", 1098 | "qs": "~6.5.1", 1099 | "safe-buffer": "^5.1.1", 1100 | "stringstream": "~0.0.5", 1101 | "tough-cookie": "~2.3.3", 1102 | "tunnel-agent": "^0.6.0", 1103 | "uuid": "^3.1.0" 1104 | }, 1105 | "engines": { 1106 | "node": ">= 4" 1107 | } 1108 | }, 1109 | "node_modules/rimraf": { 1110 | "version": "2.6.2", 1111 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", 1112 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", 1113 | "dependencies": { 1114 | "glob": "^7.0.5" 1115 | }, 1116 | "bin": { 1117 | "rimraf": "bin.js" 1118 | } 1119 | }, 1120 | "node_modules/safe-buffer": { 1121 | "version": "5.1.2", 1122 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1123 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1124 | }, 1125 | "node_modules/semver": { 1126 | "version": "5.5.0", 1127 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", 1128 | "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", 1129 | "bin": { 1130 | "semver": "bin/semver" 1131 | } 1132 | }, 1133 | "node_modules/signal-exit": { 1134 | "version": "3.0.2", 1135 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 1136 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" 1137 | }, 1138 | "node_modules/single-line-log": { 1139 | "version": "1.1.2", 1140 | "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz", 1141 | "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=", 1142 | "dependencies": { 1143 | "string-width": "^1.0.1" 1144 | } 1145 | }, 1146 | "node_modules/sntp": { 1147 | "version": "2.1.0", 1148 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", 1149 | "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", 1150 | "deprecated": "This module moved to @hapi/sntp. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.", 1151 | "dependencies": { 1152 | "hoek": "4.x.x" 1153 | }, 1154 | "engines": { 1155 | "node": ">=4.0.0" 1156 | } 1157 | }, 1158 | "node_modules/spdx-correct": { 1159 | "version": "3.0.0", 1160 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", 1161 | "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", 1162 | "dependencies": { 1163 | "spdx-expression-parse": "^3.0.0", 1164 | "spdx-license-ids": "^3.0.0" 1165 | } 1166 | }, 1167 | "node_modules/spdx-exceptions": { 1168 | "version": "2.1.0", 1169 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", 1170 | "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" 1171 | }, 1172 | "node_modules/spdx-expression-parse": { 1173 | "version": "3.0.0", 1174 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", 1175 | "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", 1176 | "dependencies": { 1177 | "spdx-exceptions": "^2.1.0", 1178 | "spdx-license-ids": "^3.0.0" 1179 | } 1180 | }, 1181 | "node_modules/spdx-license-ids": { 1182 | "version": "3.0.0", 1183 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", 1184 | "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" 1185 | }, 1186 | "node_modules/speedometer": { 1187 | "version": "0.1.4", 1188 | "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", 1189 | "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=" 1190 | }, 1191 | "node_modules/sshpk": { 1192 | "version": "1.14.1", 1193 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", 1194 | "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", 1195 | "dependencies": { 1196 | "asn1": "~0.2.3", 1197 | "assert-plus": "^1.0.0", 1198 | "dashdash": "^1.12.0", 1199 | "getpass": "^0.1.1" 1200 | }, 1201 | "bin": { 1202 | "sshpk-conv": "bin/sshpk-conv", 1203 | "sshpk-sign": "bin/sshpk-sign", 1204 | "sshpk-verify": "bin/sshpk-verify" 1205 | }, 1206 | "engines": { 1207 | "node": ">=0.10.0" 1208 | }, 1209 | "optionalDependencies": { 1210 | "bcrypt-pbkdf": "^1.0.0", 1211 | "ecc-jsbn": "~0.1.1", 1212 | "jsbn": "~0.1.0", 1213 | "tweetnacl": "~0.14.0" 1214 | } 1215 | }, 1216 | "node_modules/string_decoder": { 1217 | "version": "0.10.31", 1218 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 1219 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" 1220 | }, 1221 | "node_modules/string-width": { 1222 | "version": "1.0.2", 1223 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 1224 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 1225 | "dependencies": { 1226 | "code-point-at": "^1.0.0", 1227 | "is-fullwidth-code-point": "^1.0.0", 1228 | "strip-ansi": "^3.0.0" 1229 | }, 1230 | "engines": { 1231 | "node": ">=0.10.0" 1232 | } 1233 | }, 1234 | "node_modules/stringstream": { 1235 | "version": "0.0.5", 1236 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", 1237 | "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" 1238 | }, 1239 | "node_modules/strip-ansi": { 1240 | "version": "3.0.1", 1241 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1242 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1243 | "dependencies": { 1244 | "ansi-regex": "^2.0.0" 1245 | }, 1246 | "engines": { 1247 | "node": ">=0.10.0" 1248 | } 1249 | }, 1250 | "node_modules/strip-bom": { 1251 | "version": "2.0.0", 1252 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", 1253 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", 1254 | "dependencies": { 1255 | "is-utf8": "^0.2.0" 1256 | }, 1257 | "engines": { 1258 | "node": ">=0.10.0" 1259 | } 1260 | }, 1261 | "node_modules/strip-indent": { 1262 | "version": "1.0.1", 1263 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", 1264 | "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", 1265 | "dependencies": { 1266 | "get-stdin": "^4.0.1" 1267 | }, 1268 | "bin": { 1269 | "strip-indent": "cli.js" 1270 | }, 1271 | "engines": { 1272 | "node": ">=0.10.0" 1273 | } 1274 | }, 1275 | "node_modules/strip-json-comments": { 1276 | "version": "2.0.1", 1277 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1278 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 1279 | "engines": { 1280 | "node": ">=0.10.0" 1281 | } 1282 | }, 1283 | "node_modules/sumchecker": { 1284 | "version": "1.3.1", 1285 | "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-1.3.1.tgz", 1286 | "integrity": "sha1-ebs7RFbdBPGOvbwNcDodHa7FEF0=", 1287 | "dependencies": { 1288 | "debug": "^2.2.0", 1289 | "es6-promise": "^4.0.5" 1290 | } 1291 | }, 1292 | "node_modules/throttleit": { 1293 | "version": "0.0.2", 1294 | "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", 1295 | "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=" 1296 | }, 1297 | "node_modules/through2": { 1298 | "version": "0.2.3", 1299 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", 1300 | "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", 1301 | "dependencies": { 1302 | "readable-stream": "~1.1.9", 1303 | "xtend": "~2.1.1" 1304 | } 1305 | }, 1306 | "node_modules/tough-cookie": { 1307 | "version": "2.3.4", 1308 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", 1309 | "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", 1310 | "dependencies": { 1311 | "punycode": "^1.4.1" 1312 | }, 1313 | "engines": { 1314 | "node": ">=0.8" 1315 | } 1316 | }, 1317 | "node_modules/trim-newlines": { 1318 | "version": "1.0.0", 1319 | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", 1320 | "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", 1321 | "engines": { 1322 | "node": ">=0.10.0" 1323 | } 1324 | }, 1325 | "node_modules/tunnel-agent": { 1326 | "version": "0.6.0", 1327 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1328 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1329 | "dependencies": { 1330 | "safe-buffer": "^5.0.1" 1331 | }, 1332 | "engines": { 1333 | "node": "*" 1334 | } 1335 | }, 1336 | "node_modules/tweetnacl": { 1337 | "version": "0.14.5", 1338 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1339 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 1340 | "optional": true 1341 | }, 1342 | "node_modules/typedarray": { 1343 | "version": "0.0.6", 1344 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 1345 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" 1346 | }, 1347 | "node_modules/util-deprecate": { 1348 | "version": "1.0.2", 1349 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1350 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1351 | }, 1352 | "node_modules/uuid": { 1353 | "version": "3.2.1", 1354 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", 1355 | "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", 1356 | "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", 1357 | "bin": { 1358 | "uuid": "bin/uuid" 1359 | } 1360 | }, 1361 | "node_modules/validate-npm-package-license": { 1362 | "version": "3.0.3", 1363 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", 1364 | "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", 1365 | "dependencies": { 1366 | "spdx-correct": "^3.0.0", 1367 | "spdx-expression-parse": "^3.0.0" 1368 | } 1369 | }, 1370 | "node_modules/verror": { 1371 | "version": "1.10.0", 1372 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1373 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 1374 | "engines": [ 1375 | "node >=0.6.0" 1376 | ], 1377 | "dependencies": { 1378 | "assert-plus": "^1.0.0", 1379 | "core-util-is": "1.0.2", 1380 | "extsprintf": "^1.2.0" 1381 | } 1382 | }, 1383 | "node_modules/wrappy": { 1384 | "version": "1.0.2", 1385 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1386 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1387 | }, 1388 | "node_modules/xtend": { 1389 | "version": "2.1.2", 1390 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", 1391 | "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", 1392 | "dependencies": { 1393 | "object-keys": "~0.4.0" 1394 | }, 1395 | "engines": { 1396 | "node": ">=0.4" 1397 | } 1398 | }, 1399 | "node_modules/yauzl": { 1400 | "version": "2.4.1", 1401 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", 1402 | "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", 1403 | "dependencies": { 1404 | "fd-slicer": "~1.0.1" 1405 | } 1406 | } 1407 | }, 1408 | "dependencies": { 1409 | "@types/node": { 1410 | "version": "8.10.12", 1411 | "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.12.tgz", 1412 | "integrity": "sha512-aRFUGj/f9JVA0qSQiCK9ebaa778mmqMIcy1eKnPktgfm9O6VsnIzzB5wJnjp9/jVrfm7fX1rr3OR1nndppGZUg==" 1413 | }, 1414 | "ajv": { 1415 | "version": "5.5.2", 1416 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", 1417 | "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", 1418 | "requires": { 1419 | "co": "^4.6.0", 1420 | "fast-deep-equal": "^1.0.0", 1421 | "fast-json-stable-stringify": "^2.0.0", 1422 | "json-schema-traverse": "^0.3.0" 1423 | } 1424 | }, 1425 | "ansi-regex": { 1426 | "version": "2.1.1", 1427 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 1428 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 1429 | }, 1430 | "array-find-index": { 1431 | "version": "1.0.2", 1432 | "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", 1433 | "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" 1434 | }, 1435 | "asn1": { 1436 | "version": "0.2.3", 1437 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 1438 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" 1439 | }, 1440 | "assert-plus": { 1441 | "version": "1.0.0", 1442 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1443 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 1444 | }, 1445 | "asynckit": { 1446 | "version": "0.4.0", 1447 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 1448 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 1449 | }, 1450 | "aws-sign2": { 1451 | "version": "0.7.0", 1452 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 1453 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 1454 | }, 1455 | "aws4": { 1456 | "version": "1.7.0", 1457 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", 1458 | "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" 1459 | }, 1460 | "balanced-match": { 1461 | "version": "1.0.0", 1462 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 1463 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 1464 | }, 1465 | "bcrypt-pbkdf": { 1466 | "version": "1.0.1", 1467 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", 1468 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", 1469 | "optional": true, 1470 | "requires": { 1471 | "tweetnacl": "^0.14.3" 1472 | } 1473 | }, 1474 | "boom": { 1475 | "version": "4.3.1", 1476 | "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", 1477 | "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", 1478 | "requires": { 1479 | "hoek": "4.x.x" 1480 | } 1481 | }, 1482 | "brace-expansion": { 1483 | "version": "1.1.11", 1484 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1485 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1486 | "requires": { 1487 | "balanced-match": "^1.0.0", 1488 | "concat-map": "0.0.1" 1489 | } 1490 | }, 1491 | "builtin-modules": { 1492 | "version": "1.1.1", 1493 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", 1494 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" 1495 | }, 1496 | "camelcase": { 1497 | "version": "2.1.1", 1498 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", 1499 | "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" 1500 | }, 1501 | "camelcase-keys": { 1502 | "version": "2.1.0", 1503 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", 1504 | "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", 1505 | "requires": { 1506 | "camelcase": "^2.0.0", 1507 | "map-obj": "^1.0.0" 1508 | } 1509 | }, 1510 | "caseless": { 1511 | "version": "0.12.0", 1512 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 1513 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 1514 | }, 1515 | "co": { 1516 | "version": "4.6.0", 1517 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 1518 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" 1519 | }, 1520 | "code-point-at": { 1521 | "version": "1.1.0", 1522 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 1523 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" 1524 | }, 1525 | "combined-stream": { 1526 | "version": "1.0.6", 1527 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", 1528 | "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", 1529 | "requires": { 1530 | "delayed-stream": "~1.0.0" 1531 | } 1532 | }, 1533 | "concat-map": { 1534 | "version": "0.0.1", 1535 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1536 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 1537 | }, 1538 | "concat-stream": { 1539 | "version": "1.6.0", 1540 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", 1541 | "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", 1542 | "requires": { 1543 | "inherits": "^2.0.3", 1544 | "readable-stream": "^2.2.2", 1545 | "typedarray": "^0.0.6" 1546 | }, 1547 | "dependencies": { 1548 | "isarray": { 1549 | "version": "1.0.0", 1550 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1551 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1552 | }, 1553 | "readable-stream": { 1554 | "version": "2.3.6", 1555 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 1556 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 1557 | "requires": { 1558 | "core-util-is": "~1.0.0", 1559 | "inherits": "~2.0.3", 1560 | "isarray": "~1.0.0", 1561 | "process-nextick-args": "~2.0.0", 1562 | "safe-buffer": "~5.1.1", 1563 | "string_decoder": "~1.1.1", 1564 | "util-deprecate": "~1.0.1" 1565 | } 1566 | }, 1567 | "string_decoder": { 1568 | "version": "1.1.1", 1569 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1570 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1571 | "requires": { 1572 | "safe-buffer": "~5.1.0" 1573 | } 1574 | } 1575 | } 1576 | }, 1577 | "core-util-is": { 1578 | "version": "1.0.2", 1579 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 1580 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 1581 | }, 1582 | "cryptiles": { 1583 | "version": "3.1.2", 1584 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", 1585 | "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", 1586 | "requires": { 1587 | "boom": "5.x.x" 1588 | }, 1589 | "dependencies": { 1590 | "boom": { 1591 | "version": "5.2.0", 1592 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 1593 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 1594 | "requires": { 1595 | "hoek": "4.x.x" 1596 | } 1597 | } 1598 | } 1599 | }, 1600 | "currently-unhandled": { 1601 | "version": "0.4.1", 1602 | "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", 1603 | "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", 1604 | "requires": { 1605 | "array-find-index": "^1.0.1" 1606 | } 1607 | }, 1608 | "dashdash": { 1609 | "version": "1.14.1", 1610 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 1611 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 1612 | "requires": { 1613 | "assert-plus": "^1.0.0" 1614 | } 1615 | }, 1616 | "debug": { 1617 | "version": "2.6.9", 1618 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1619 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1620 | "requires": { 1621 | "ms": "2.0.0" 1622 | } 1623 | }, 1624 | "decamelize": { 1625 | "version": "1.2.0", 1626 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 1627 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" 1628 | }, 1629 | "deep-extend": { 1630 | "version": "0.5.1", 1631 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", 1632 | "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" 1633 | }, 1634 | "delayed-stream": { 1635 | "version": "1.0.0", 1636 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 1637 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 1638 | }, 1639 | "ecc-jsbn": { 1640 | "version": "0.1.1", 1641 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", 1642 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", 1643 | "optional": true, 1644 | "requires": { 1645 | "jsbn": "~0.1.0" 1646 | } 1647 | }, 1648 | "electron": { 1649 | "version": "2.0.0", 1650 | "resolved": "https://registry.npmjs.org/electron/-/electron-2.0.0.tgz", 1651 | "integrity": "sha512-FCcVzHgoBmNTPUEhKN7yUxjluCRNAQsHNOfdtFEWKL3DPYEdLdyQW8CpmJEMqIXha5qZ+qdKVAtwvvuJs+b/PQ==", 1652 | "requires": { 1653 | "@types/node": "^8.0.24", 1654 | "electron-download": "^3.0.1", 1655 | "extract-zip": "^1.0.3" 1656 | } 1657 | }, 1658 | "electron-download": { 1659 | "version": "3.3.0", 1660 | "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-3.3.0.tgz", 1661 | "integrity": "sha1-LP1U1pZsAZxNSa1l++Zcyc3vaMg=", 1662 | "requires": { 1663 | "debug": "^2.2.0", 1664 | "fs-extra": "^0.30.0", 1665 | "home-path": "^1.0.1", 1666 | "minimist": "^1.2.0", 1667 | "nugget": "^2.0.0", 1668 | "path-exists": "^2.1.0", 1669 | "rc": "^1.1.2", 1670 | "semver": "^5.3.0", 1671 | "sumchecker": "^1.2.0" 1672 | } 1673 | }, 1674 | "error-ex": { 1675 | "version": "1.3.1", 1676 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", 1677 | "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", 1678 | "requires": { 1679 | "is-arrayish": "^0.2.1" 1680 | } 1681 | }, 1682 | "es6-promise": { 1683 | "version": "4.2.4", 1684 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", 1685 | "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==" 1686 | }, 1687 | "extend": { 1688 | "version": "3.0.1", 1689 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 1690 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" 1691 | }, 1692 | "extract-zip": { 1693 | "version": "1.6.6", 1694 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz", 1695 | "integrity": "sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=", 1696 | "requires": { 1697 | "concat-stream": "1.6.0", 1698 | "debug": "2.6.9", 1699 | "mkdirp": "0.5.0", 1700 | "yauzl": "2.4.1" 1701 | } 1702 | }, 1703 | "extsprintf": { 1704 | "version": "1.3.0", 1705 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 1706 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 1707 | }, 1708 | "fast-deep-equal": { 1709 | "version": "1.1.0", 1710 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", 1711 | "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" 1712 | }, 1713 | "fast-json-stable-stringify": { 1714 | "version": "2.0.0", 1715 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 1716 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" 1717 | }, 1718 | "fd-slicer": { 1719 | "version": "1.0.1", 1720 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", 1721 | "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", 1722 | "requires": { 1723 | "pend": "~1.2.0" 1724 | } 1725 | }, 1726 | "find-up": { 1727 | "version": "1.1.2", 1728 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", 1729 | "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", 1730 | "requires": { 1731 | "path-exists": "^2.0.0", 1732 | "pinkie-promise": "^2.0.0" 1733 | } 1734 | }, 1735 | "forever-agent": { 1736 | "version": "0.6.1", 1737 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 1738 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 1739 | }, 1740 | "form-data": { 1741 | "version": "2.3.2", 1742 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", 1743 | "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", 1744 | "requires": { 1745 | "asynckit": "^0.4.0", 1746 | "combined-stream": "1.0.6", 1747 | "mime-types": "^2.1.12" 1748 | } 1749 | }, 1750 | "fs-extra": { 1751 | "version": "0.30.0", 1752 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", 1753 | "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", 1754 | "requires": { 1755 | "graceful-fs": "^4.1.2", 1756 | "jsonfile": "^2.1.0", 1757 | "klaw": "^1.0.0", 1758 | "path-is-absolute": "^1.0.0", 1759 | "rimraf": "^2.2.8" 1760 | } 1761 | }, 1762 | "fs.realpath": { 1763 | "version": "1.0.0", 1764 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1765 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 1766 | }, 1767 | "get-stdin": { 1768 | "version": "4.0.1", 1769 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", 1770 | "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" 1771 | }, 1772 | "getpass": { 1773 | "version": "0.1.7", 1774 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 1775 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 1776 | "requires": { 1777 | "assert-plus": "^1.0.0" 1778 | } 1779 | }, 1780 | "glob": { 1781 | "version": "7.1.2", 1782 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 1783 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 1784 | "requires": { 1785 | "fs.realpath": "^1.0.0", 1786 | "inflight": "^1.0.4", 1787 | "inherits": "2", 1788 | "minimatch": "^3.0.4", 1789 | "once": "^1.3.0", 1790 | "path-is-absolute": "^1.0.0" 1791 | } 1792 | }, 1793 | "graceful-fs": { 1794 | "version": "4.1.11", 1795 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 1796 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" 1797 | }, 1798 | "har-schema": { 1799 | "version": "2.0.0", 1800 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 1801 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 1802 | }, 1803 | "har-validator": { 1804 | "version": "5.0.3", 1805 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", 1806 | "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", 1807 | "requires": { 1808 | "ajv": "^5.1.0", 1809 | "har-schema": "^2.0.0" 1810 | } 1811 | }, 1812 | "hawk": { 1813 | "version": "6.0.2", 1814 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", 1815 | "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", 1816 | "requires": { 1817 | "boom": "4.x.x", 1818 | "cryptiles": "3.x.x", 1819 | "hoek": "4.x.x", 1820 | "sntp": "2.x.x" 1821 | } 1822 | }, 1823 | "hoek": { 1824 | "version": "4.2.1", 1825 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", 1826 | "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" 1827 | }, 1828 | "home-path": { 1829 | "version": "1.0.5", 1830 | "resolved": "https://registry.npmjs.org/home-path/-/home-path-1.0.5.tgz", 1831 | "integrity": "sha1-eIspgVsS1Tus9XVkhHbm+QQdEz8=" 1832 | }, 1833 | "hosted-git-info": { 1834 | "version": "2.6.0", 1835 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", 1836 | "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==" 1837 | }, 1838 | "http-signature": { 1839 | "version": "1.2.0", 1840 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 1841 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 1842 | "requires": { 1843 | "assert-plus": "^1.0.0", 1844 | "jsprim": "^1.2.2", 1845 | "sshpk": "^1.7.0" 1846 | } 1847 | }, 1848 | "indent-string": { 1849 | "version": "2.1.0", 1850 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", 1851 | "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", 1852 | "requires": { 1853 | "repeating": "^2.0.0" 1854 | } 1855 | }, 1856 | "inflight": { 1857 | "version": "1.0.6", 1858 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1859 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1860 | "requires": { 1861 | "once": "^1.3.0", 1862 | "wrappy": "1" 1863 | } 1864 | }, 1865 | "inherits": { 1866 | "version": "2.0.3", 1867 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1868 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 1869 | }, 1870 | "ini": { 1871 | "version": "1.3.5", 1872 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 1873 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" 1874 | }, 1875 | "is-arrayish": { 1876 | "version": "0.2.1", 1877 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1878 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" 1879 | }, 1880 | "is-builtin-module": { 1881 | "version": "1.0.0", 1882 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", 1883 | "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", 1884 | "requires": { 1885 | "builtin-modules": "^1.0.0" 1886 | } 1887 | }, 1888 | "is-finite": { 1889 | "version": "1.0.2", 1890 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", 1891 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", 1892 | "requires": { 1893 | "number-is-nan": "^1.0.0" 1894 | } 1895 | }, 1896 | "is-fullwidth-code-point": { 1897 | "version": "1.0.0", 1898 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 1899 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 1900 | "requires": { 1901 | "number-is-nan": "^1.0.0" 1902 | } 1903 | }, 1904 | "is-typedarray": { 1905 | "version": "1.0.0", 1906 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1907 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 1908 | }, 1909 | "is-utf8": { 1910 | "version": "0.2.1", 1911 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", 1912 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" 1913 | }, 1914 | "isarray": { 1915 | "version": "0.0.1", 1916 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 1917 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 1918 | }, 1919 | "isstream": { 1920 | "version": "0.1.2", 1921 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 1922 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 1923 | }, 1924 | "jsbn": { 1925 | "version": "0.1.1", 1926 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 1927 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 1928 | "optional": true 1929 | }, 1930 | "json-schema": { 1931 | "version": "0.2.3", 1932 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 1933 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 1934 | }, 1935 | "json-schema-traverse": { 1936 | "version": "0.3.1", 1937 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 1938 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" 1939 | }, 1940 | "json-stringify-safe": { 1941 | "version": "5.0.1", 1942 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1943 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 1944 | }, 1945 | "jsonfile": { 1946 | "version": "2.4.0", 1947 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", 1948 | "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", 1949 | "requires": { 1950 | "graceful-fs": "^4.1.6" 1951 | } 1952 | }, 1953 | "jsprim": { 1954 | "version": "1.4.1", 1955 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 1956 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 1957 | "requires": { 1958 | "assert-plus": "1.0.0", 1959 | "extsprintf": "1.3.0", 1960 | "json-schema": "0.2.3", 1961 | "verror": "1.10.0" 1962 | } 1963 | }, 1964 | "klaw": { 1965 | "version": "1.3.1", 1966 | "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", 1967 | "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", 1968 | "requires": { 1969 | "graceful-fs": "^4.1.9" 1970 | } 1971 | }, 1972 | "load-json-file": { 1973 | "version": "1.1.0", 1974 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", 1975 | "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", 1976 | "requires": { 1977 | "graceful-fs": "^4.1.2", 1978 | "parse-json": "^2.2.0", 1979 | "pify": "^2.0.0", 1980 | "pinkie-promise": "^2.0.0", 1981 | "strip-bom": "^2.0.0" 1982 | } 1983 | }, 1984 | "loud-rejection": { 1985 | "version": "1.6.0", 1986 | "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", 1987 | "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", 1988 | "requires": { 1989 | "currently-unhandled": "^0.4.1", 1990 | "signal-exit": "^3.0.0" 1991 | } 1992 | }, 1993 | "map-obj": { 1994 | "version": "1.0.1", 1995 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", 1996 | "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" 1997 | }, 1998 | "meow": { 1999 | "version": "3.7.0", 2000 | "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", 2001 | "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", 2002 | "requires": { 2003 | "camelcase-keys": "^2.0.0", 2004 | "decamelize": "^1.1.2", 2005 | "loud-rejection": "^1.0.0", 2006 | "map-obj": "^1.0.1", 2007 | "minimist": "^1.1.3", 2008 | "normalize-package-data": "^2.3.4", 2009 | "object-assign": "^4.0.1", 2010 | "read-pkg-up": "^1.0.1", 2011 | "redent": "^1.0.0", 2012 | "trim-newlines": "^1.0.0" 2013 | } 2014 | }, 2015 | "mime-db": { 2016 | "version": "1.33.0", 2017 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", 2018 | "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" 2019 | }, 2020 | "mime-types": { 2021 | "version": "2.1.18", 2022 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", 2023 | "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", 2024 | "requires": { 2025 | "mime-db": "~1.33.0" 2026 | } 2027 | }, 2028 | "minimatch": { 2029 | "version": "3.0.4", 2030 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2031 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2032 | "requires": { 2033 | "brace-expansion": "^1.1.7" 2034 | } 2035 | }, 2036 | "minimist": { 2037 | "version": "1.2.0", 2038 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 2039 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 2040 | }, 2041 | "mkdirp": { 2042 | "version": "0.5.0", 2043 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", 2044 | "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", 2045 | "requires": { 2046 | "minimist": "0.0.8" 2047 | }, 2048 | "dependencies": { 2049 | "minimist": { 2050 | "version": "0.0.8", 2051 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 2052 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 2053 | } 2054 | } 2055 | }, 2056 | "ms": { 2057 | "version": "2.0.0", 2058 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2059 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 2060 | }, 2061 | "normalize-package-data": { 2062 | "version": "2.4.0", 2063 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", 2064 | "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", 2065 | "requires": { 2066 | "hosted-git-info": "^2.1.4", 2067 | "is-builtin-module": "^1.0.0", 2068 | "semver": "2 || 3 || 4 || 5", 2069 | "validate-npm-package-license": "^3.0.1" 2070 | } 2071 | }, 2072 | "nugget": { 2073 | "version": "2.0.1", 2074 | "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz", 2075 | "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=", 2076 | "requires": { 2077 | "debug": "^2.1.3", 2078 | "minimist": "^1.1.0", 2079 | "pretty-bytes": "^1.0.2", 2080 | "progress-stream": "^1.1.0", 2081 | "request": "^2.45.0", 2082 | "single-line-log": "^1.1.2", 2083 | "throttleit": "0.0.2" 2084 | } 2085 | }, 2086 | "number-is-nan": { 2087 | "version": "1.0.1", 2088 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 2089 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 2090 | }, 2091 | "oauth-sign": { 2092 | "version": "0.8.2", 2093 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 2094 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" 2095 | }, 2096 | "object-assign": { 2097 | "version": "4.1.1", 2098 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2099 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 2100 | }, 2101 | "object-keys": { 2102 | "version": "0.4.0", 2103 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", 2104 | "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" 2105 | }, 2106 | "once": { 2107 | "version": "1.4.0", 2108 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2109 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2110 | "requires": { 2111 | "wrappy": "1" 2112 | } 2113 | }, 2114 | "parse-json": { 2115 | "version": "2.2.0", 2116 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 2117 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 2118 | "requires": { 2119 | "error-ex": "^1.2.0" 2120 | } 2121 | }, 2122 | "path-exists": { 2123 | "version": "2.1.0", 2124 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", 2125 | "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", 2126 | "requires": { 2127 | "pinkie-promise": "^2.0.0" 2128 | } 2129 | }, 2130 | "path-is-absolute": { 2131 | "version": "1.0.1", 2132 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2133 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 2134 | }, 2135 | "path-type": { 2136 | "version": "1.1.0", 2137 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", 2138 | "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", 2139 | "requires": { 2140 | "graceful-fs": "^4.1.2", 2141 | "pify": "^2.0.0", 2142 | "pinkie-promise": "^2.0.0" 2143 | } 2144 | }, 2145 | "pend": { 2146 | "version": "1.2.0", 2147 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 2148 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" 2149 | }, 2150 | "performance-now": { 2151 | "version": "2.1.0", 2152 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 2153 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 2154 | }, 2155 | "pify": { 2156 | "version": "2.3.0", 2157 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 2158 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" 2159 | }, 2160 | "pinkie": { 2161 | "version": "2.0.4", 2162 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 2163 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" 2164 | }, 2165 | "pinkie-promise": { 2166 | "version": "2.0.1", 2167 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 2168 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 2169 | "requires": { 2170 | "pinkie": "^2.0.0" 2171 | } 2172 | }, 2173 | "pretty-bytes": { 2174 | "version": "1.0.4", 2175 | "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", 2176 | "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", 2177 | "requires": { 2178 | "get-stdin": "^4.0.1", 2179 | "meow": "^3.1.0" 2180 | } 2181 | }, 2182 | "process-nextick-args": { 2183 | "version": "2.0.0", 2184 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 2185 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" 2186 | }, 2187 | "progress-stream": { 2188 | "version": "1.2.0", 2189 | "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", 2190 | "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", 2191 | "requires": { 2192 | "speedometer": "~0.1.2", 2193 | "through2": "~0.2.3" 2194 | } 2195 | }, 2196 | "punycode": { 2197 | "version": "1.4.1", 2198 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 2199 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 2200 | }, 2201 | "qs": { 2202 | "version": "6.5.2", 2203 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 2204 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 2205 | }, 2206 | "rc": { 2207 | "version": "1.2.7", 2208 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz", 2209 | "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", 2210 | "requires": { 2211 | "deep-extend": "^0.5.1", 2212 | "ini": "~1.3.0", 2213 | "minimist": "^1.2.0", 2214 | "strip-json-comments": "~2.0.1" 2215 | } 2216 | }, 2217 | "read-pkg": { 2218 | "version": "1.1.0", 2219 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", 2220 | "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", 2221 | "requires": { 2222 | "load-json-file": "^1.0.0", 2223 | "normalize-package-data": "^2.3.2", 2224 | "path-type": "^1.0.0" 2225 | } 2226 | }, 2227 | "read-pkg-up": { 2228 | "version": "1.0.1", 2229 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", 2230 | "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", 2231 | "requires": { 2232 | "find-up": "^1.0.0", 2233 | "read-pkg": "^1.0.0" 2234 | } 2235 | }, 2236 | "readable-stream": { 2237 | "version": "1.1.14", 2238 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 2239 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", 2240 | "requires": { 2241 | "core-util-is": "~1.0.0", 2242 | "inherits": "~2.0.1", 2243 | "isarray": "0.0.1", 2244 | "string_decoder": "~0.10.x" 2245 | } 2246 | }, 2247 | "redent": { 2248 | "version": "1.0.0", 2249 | "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", 2250 | "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", 2251 | "requires": { 2252 | "indent-string": "^2.1.0", 2253 | "strip-indent": "^1.0.1" 2254 | } 2255 | }, 2256 | "repeating": { 2257 | "version": "2.0.1", 2258 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", 2259 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", 2260 | "requires": { 2261 | "is-finite": "^1.0.0" 2262 | } 2263 | }, 2264 | "request": { 2265 | "version": "2.85.0", 2266 | "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", 2267 | "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", 2268 | "requires": { 2269 | "aws-sign2": "~0.7.0", 2270 | "aws4": "^1.6.0", 2271 | "caseless": "~0.12.0", 2272 | "combined-stream": "~1.0.5", 2273 | "extend": "~3.0.1", 2274 | "forever-agent": "~0.6.1", 2275 | "form-data": "~2.3.1", 2276 | "har-validator": "~5.0.3", 2277 | "hawk": "~6.0.2", 2278 | "http-signature": "~1.2.0", 2279 | "is-typedarray": "~1.0.0", 2280 | "isstream": "~0.1.2", 2281 | "json-stringify-safe": "~5.0.1", 2282 | "mime-types": "~2.1.17", 2283 | "oauth-sign": "~0.8.2", 2284 | "performance-now": "^2.1.0", 2285 | "qs": "~6.5.1", 2286 | "safe-buffer": "^5.1.1", 2287 | "stringstream": "~0.0.5", 2288 | "tough-cookie": "~2.3.3", 2289 | "tunnel-agent": "^0.6.0", 2290 | "uuid": "^3.1.0" 2291 | } 2292 | }, 2293 | "rimraf": { 2294 | "version": "2.6.2", 2295 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", 2296 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", 2297 | "requires": { 2298 | "glob": "^7.0.5" 2299 | } 2300 | }, 2301 | "safe-buffer": { 2302 | "version": "5.1.2", 2303 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2304 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 2305 | }, 2306 | "semver": { 2307 | "version": "5.5.0", 2308 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", 2309 | "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" 2310 | }, 2311 | "signal-exit": { 2312 | "version": "3.0.2", 2313 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 2314 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" 2315 | }, 2316 | "single-line-log": { 2317 | "version": "1.1.2", 2318 | "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz", 2319 | "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=", 2320 | "requires": { 2321 | "string-width": "^1.0.1" 2322 | } 2323 | }, 2324 | "sntp": { 2325 | "version": "2.1.0", 2326 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", 2327 | "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", 2328 | "requires": { 2329 | "hoek": "4.x.x" 2330 | } 2331 | }, 2332 | "spdx-correct": { 2333 | "version": "3.0.0", 2334 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", 2335 | "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", 2336 | "requires": { 2337 | "spdx-expression-parse": "^3.0.0", 2338 | "spdx-license-ids": "^3.0.0" 2339 | } 2340 | }, 2341 | "spdx-exceptions": { 2342 | "version": "2.1.0", 2343 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", 2344 | "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" 2345 | }, 2346 | "spdx-expression-parse": { 2347 | "version": "3.0.0", 2348 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", 2349 | "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", 2350 | "requires": { 2351 | "spdx-exceptions": "^2.1.0", 2352 | "spdx-license-ids": "^3.0.0" 2353 | } 2354 | }, 2355 | "spdx-license-ids": { 2356 | "version": "3.0.0", 2357 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", 2358 | "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" 2359 | }, 2360 | "speedometer": { 2361 | "version": "0.1.4", 2362 | "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", 2363 | "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=" 2364 | }, 2365 | "sshpk": { 2366 | "version": "1.14.1", 2367 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", 2368 | "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", 2369 | "requires": { 2370 | "asn1": "~0.2.3", 2371 | "assert-plus": "^1.0.0", 2372 | "bcrypt-pbkdf": "^1.0.0", 2373 | "dashdash": "^1.12.0", 2374 | "ecc-jsbn": "~0.1.1", 2375 | "getpass": "^0.1.1", 2376 | "jsbn": "~0.1.0", 2377 | "tweetnacl": "~0.14.0" 2378 | } 2379 | }, 2380 | "string_decoder": { 2381 | "version": "0.10.31", 2382 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 2383 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" 2384 | }, 2385 | "string-width": { 2386 | "version": "1.0.2", 2387 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 2388 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 2389 | "requires": { 2390 | "code-point-at": "^1.0.0", 2391 | "is-fullwidth-code-point": "^1.0.0", 2392 | "strip-ansi": "^3.0.0" 2393 | } 2394 | }, 2395 | "stringstream": { 2396 | "version": "0.0.5", 2397 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", 2398 | "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" 2399 | }, 2400 | "strip-ansi": { 2401 | "version": "3.0.1", 2402 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 2403 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 2404 | "requires": { 2405 | "ansi-regex": "^2.0.0" 2406 | } 2407 | }, 2408 | "strip-bom": { 2409 | "version": "2.0.0", 2410 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", 2411 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", 2412 | "requires": { 2413 | "is-utf8": "^0.2.0" 2414 | } 2415 | }, 2416 | "strip-indent": { 2417 | "version": "1.0.1", 2418 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", 2419 | "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", 2420 | "requires": { 2421 | "get-stdin": "^4.0.1" 2422 | } 2423 | }, 2424 | "strip-json-comments": { 2425 | "version": "2.0.1", 2426 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 2427 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" 2428 | }, 2429 | "sumchecker": { 2430 | "version": "1.3.1", 2431 | "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-1.3.1.tgz", 2432 | "integrity": "sha1-ebs7RFbdBPGOvbwNcDodHa7FEF0=", 2433 | "requires": { 2434 | "debug": "^2.2.0", 2435 | "es6-promise": "^4.0.5" 2436 | } 2437 | }, 2438 | "throttleit": { 2439 | "version": "0.0.2", 2440 | "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", 2441 | "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=" 2442 | }, 2443 | "through2": { 2444 | "version": "0.2.3", 2445 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", 2446 | "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", 2447 | "requires": { 2448 | "readable-stream": "~1.1.9", 2449 | "xtend": "~2.1.1" 2450 | } 2451 | }, 2452 | "tough-cookie": { 2453 | "version": "2.3.4", 2454 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", 2455 | "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", 2456 | "requires": { 2457 | "punycode": "^1.4.1" 2458 | } 2459 | }, 2460 | "trim-newlines": { 2461 | "version": "1.0.0", 2462 | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", 2463 | "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" 2464 | }, 2465 | "tunnel-agent": { 2466 | "version": "0.6.0", 2467 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 2468 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 2469 | "requires": { 2470 | "safe-buffer": "^5.0.1" 2471 | } 2472 | }, 2473 | "tweetnacl": { 2474 | "version": "0.14.5", 2475 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 2476 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 2477 | "optional": true 2478 | }, 2479 | "typedarray": { 2480 | "version": "0.0.6", 2481 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 2482 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" 2483 | }, 2484 | "util-deprecate": { 2485 | "version": "1.0.2", 2486 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2487 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 2488 | }, 2489 | "uuid": { 2490 | "version": "3.2.1", 2491 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", 2492 | "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" 2493 | }, 2494 | "validate-npm-package-license": { 2495 | "version": "3.0.3", 2496 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", 2497 | "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", 2498 | "requires": { 2499 | "spdx-correct": "^3.0.0", 2500 | "spdx-expression-parse": "^3.0.0" 2501 | } 2502 | }, 2503 | "verror": { 2504 | "version": "1.10.0", 2505 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 2506 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 2507 | "requires": { 2508 | "assert-plus": "^1.0.0", 2509 | "core-util-is": "1.0.2", 2510 | "extsprintf": "^1.2.0" 2511 | } 2512 | }, 2513 | "wrappy": { 2514 | "version": "1.0.2", 2515 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2516 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 2517 | }, 2518 | "xtend": { 2519 | "version": "2.1.2", 2520 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", 2521 | "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", 2522 | "requires": { 2523 | "object-keys": "~0.4.0" 2524 | } 2525 | }, 2526 | "yauzl": { 2527 | "version": "2.4.1", 2528 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", 2529 | "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", 2530 | "requires": { 2531 | "fd-slicer": "~1.0.1" 2532 | } 2533 | } 2534 | } 2535 | } 2536 | -------------------------------------------------------------------------------- /test/browserRunner/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "description": "loads given test case folder into browser and executes it as if the folder was passed to Node.js", 3 | "main": "index.js", 4 | "dependencies": { 5 | "electron": "^2.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /test/fixtureRunner.js: -------------------------------------------------------------------------------- 1 | const { exec } = require("child_process"); 2 | 3 | module.exports.run = async (fixtureName, browser) => { 4 | // package 5 | const package = require(`./fixtures/${fixtureName}/package.json`); 6 | 7 | const result = await new Promise(res => exec(`node ${browser ? "browserRunner" : ""} fixtures/${fixtureName}`, { cwd: __dirname, }, (err, stdout, stderr) => res({ stdout, stderr }))); 8 | if (!result.stdout.includes(package.marker) && !result.stderr.includes(package.marker)) 9 | throw new Error("End marker not found."); 10 | return result; 11 | }; 12 | 13 | module.exports.compare = async (fixtureName) => { 14 | const expected = await module.exports.run(fixtureName, false); 15 | const actual = await module.exports.run(fixtureName, true); 16 | return { expected, actual }; 17 | }; 18 | 19 | // entry point 20 | if (require.main === module) 21 | if (process.argv[3]) 22 | (async () => console.log(JSON.stringify(await module.exports.run(process.argv[2], process.argv[3] === "true"), null, 2)))(); 23 | else 24 | (async () => console.log(JSON.stringify(await module.exports.compare(process.argv[2]), null, 2)))(); -------------------------------------------------------------------------------- /test/fixtures/basic/main.js: -------------------------------------------------------------------------------- 1 | console.log(1 / 3); 2 | console.log("asd"); 3 | console.log(true); 4 | console.log([1, 2, 3]); 5 | console.log({ a: 3, b: 4, o: { c: "s", d: [] } }); 6 | console.log(__filename); 7 | __filename = 42; 8 | console.log(__filename); 9 | console.log(__dirname); 10 | 11 | console.log("Error/Stack"); 12 | console.log(new Error("asd").stack); 13 | 14 | console.log("global"); 15 | var x = 3; 16 | global.y = 4; 17 | console.log(typeof y); 18 | console.log(typeof z); 19 | console.log(typeof global); 20 | console.log(typeof global.self); 21 | console.log(typeof self); 22 | console.log(Object.keys(global)); 23 | console.log(Object.getOwnPropertyNames(global)); 24 | console.log(global.require); 25 | 26 | console.log("path"); 27 | console.log(require("path").join("asd", "qwe")); 28 | const req = require; 29 | console.log(require("path").dirname("/asd/qwe/foo")); 30 | 31 | console.log("process"); 32 | console.log(process.cwd()); 33 | console.log(process.domain); 34 | console.log(process.execArgv); 35 | console.log(process.execPath); 36 | console.log(process.pid); 37 | console.log(process.platform); 38 | console.log(process.arch); 39 | 40 | throw new Error(require("./package.json").marker); -------------------------------------------------------------------------------- /test/fixtures/basic/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "description": "Probing basic Node.js functionalities", 3 | "main": "main.js", 4 | "marker": "===END===" 5 | } -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | const assert = require('assert'); 2 | const { readdirSync } = require("fs"); 3 | const { join } = require("path"); 4 | const { compare } = require("./fixtureRunner"); 5 | 6 | RegExp.escape = function (string) { 7 | return string.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') 8 | }; 9 | 10 | function assertEqualModuloPlatformSpecifics(actual, expected, message) { 11 | // sanitize electron's real paths 12 | expected = expected.replace(new RegExp(RegExp.escape(__dirname), "g"), "").replace(/\\/g, "/"); 13 | 14 | assert.equal(actual, expected, message); 15 | } 16 | 17 | describe('fixtures', () => { 18 | const fixtureDir = join(__dirname, "fixtures"); 19 | for (const fixture of readdirSync(fixtureDir)) 20 | it(fixture, async () => { 21 | const result = await compare(fixture); 22 | assertEqualModuloPlatformSpecifics(result.actual.stdout, result.expected.stdout, "stdout should match"); 23 | assertEqualModuloPlatformSpecifics(result.actual.stderr, result.expected.stderr, "stderr should match"); 24 | }); 25 | }); -------------------------------------------------------------------------------- /www/index.html: -------------------------------------------------------------------------------- 1 | <!DOCTYPE html> 2 | <html> 3 | 4 | <head> 5 | <!--for stdio--> 6 | <link rel="stylesheet" href="xterm/xterm.css" /> 7 | <script src="xterm/xterm.js"></script> 8 | <!--for stdio--> 9 | 10 | <script src="./bin/index.js" type="text/javascript"></script> 11 | <style> 12 | #stderr { 13 | color: darkred; 14 | } 15 | 16 | #stdout, 17 | #stderr { 18 | display: none; 19 | } 20 | 21 | body { 22 | padding: 0; 23 | margin: 0; 24 | overflow: hidden; 25 | background: black; 26 | display: grid; 27 | grid-template-rows: 3em auto; 28 | } 29 | 30 | body>div:first-child { 31 | color: lightgray; 32 | font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; 33 | text-align: center; 34 | } 35 | 36 | a, 37 | a:visited { 38 | color: cornflowerblue; 39 | text-decoration: none; 40 | } 41 | 42 | body>* { 43 | border: 1em solid transparent; 44 | } 45 | 46 | #xterm { 47 | width: 100%; 48 | height: 100%; 49 | box-sizing: border-box; 50 | } 51 | </style> 52 | </head> 53 | 54 | <body ondrop="drop_handler(event)" ondragover="dragover_handler(event)" onload="load()"> 55 | <div>Node.js 8.0.0 bootstrapped in your browser. Experimental. Have fun. 56 | <a href="https://blog.cloudboost.io/how-to-run-node-js-apps-in-the-browser-3f077f34f8a5">Blog post</a>. 57 | <a href="https://github.com/olydis/node-in-browser">Contribute</a>. 58 | </div> 59 | <div id="xterm"></div> 60 | 61 | <!-- for Electron tests --> 62 | <pre id="stdout"></pre> 63 | <pre id="stderr"></pre> 64 | </body> 65 | 66 | </html> -------------------------------------------------------------------------------- /www/mnt/.gitignore: -------------------------------------------------------------------------------- 1 | npm/ -------------------------------------------------------------------------------- /www/mnt/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "requires": true, 3 | "lockfileVersion": 1, 4 | "dependencies": { 5 | "ansi-regex": { 6 | "version": "3.0.0", 7 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 8 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" 9 | }, 10 | "ansi-styles": { 11 | "version": "3.2.0", 12 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", 13 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", 14 | "requires": { 15 | "color-convert": "1.9.1" 16 | } 17 | }, 18 | "chalk": { 19 | "version": "2.3.0", 20 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", 21 | "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", 22 | "requires": { 23 | "ansi-styles": "3.2.0", 24 | "escape-string-regexp": "1.0.5", 25 | "supports-color": "4.5.0" 26 | } 27 | }, 28 | "color-convert": { 29 | "version": "1.9.1", 30 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", 31 | "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", 32 | "requires": { 33 | "color-name": "1.1.3" 34 | } 35 | }, 36 | "color-name": { 37 | "version": "1.1.3", 38 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 39 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 40 | }, 41 | "colors": { 42 | "version": "1.1.2", 43 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", 44 | "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" 45 | }, 46 | "cowsay": { 47 | "version": "1.2.1", 48 | "resolved": "https://registry.npmjs.org/cowsay/-/cowsay-1.2.1.tgz", 49 | "integrity": "sha1-O96fF7pkBJvTWf9XuJFuyB0DMv4=", 50 | "requires": { 51 | "get-stdin": "5.0.1", 52 | "optimist": "0.6.1", 53 | "string-width": "2.1.1" 54 | } 55 | }, 56 | "escape-string-regexp": { 57 | "version": "1.0.5", 58 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 59 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 60 | }, 61 | "get-stdin": { 62 | "version": "5.0.1", 63 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", 64 | "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=" 65 | }, 66 | "has-flag": { 67 | "version": "2.0.0", 68 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", 69 | "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" 70 | }, 71 | "is-fullwidth-code-point": { 72 | "version": "2.0.0", 73 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 74 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" 75 | }, 76 | "minimist": { 77 | "version": "0.0.10", 78 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", 79 | "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" 80 | }, 81 | "optimist": { 82 | "version": "0.6.1", 83 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", 84 | "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", 85 | "requires": { 86 | "minimist": "0.0.10", 87 | "wordwrap": "0.0.3" 88 | } 89 | }, 90 | "string-width": { 91 | "version": "2.1.1", 92 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 93 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 94 | "requires": { 95 | "is-fullwidth-code-point": "2.0.0", 96 | "strip-ansi": "4.0.0" 97 | } 98 | }, 99 | "strip-ansi": { 100 | "version": "4.0.0", 101 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 102 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 103 | "requires": { 104 | "ansi-regex": "3.0.0" 105 | } 106 | }, 107 | "supports-color": { 108 | "version": "4.5.0", 109 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", 110 | "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", 111 | "requires": { 112 | "has-flag": "2.0.0" 113 | } 114 | }, 115 | "wordwrap": { 116 | "version": "0.0.3", 117 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", 118 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" 119 | } 120 | } 121 | } 122 | -------------------------------------------------------------------------------- /www/mnt/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "devDependencies": { 3 | "npm": "5.5.0" 4 | }, 5 | "dependencies": { 6 | "chalk": "^2.3.0", 7 | "colors": "^1.1.2", 8 | "cowsay": "^1.2.1" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /www/xterm/xterm.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2014 The xterm.js authors. All rights reserved. 3 | * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License) 4 | * https://github.com/chjj/term.js 5 | * @license MIT 6 | * 7 | * Permission is hereby granted, free of charge, to any person obtaining a copy 8 | * of this software and associated documentation files (the "Software"), to deal 9 | * in the Software without restriction, including without limitation the rights 10 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | * copies of the Software, and to permit persons to whom the Software is 12 | * furnished to do so, subject to the following conditions: 13 | * 14 | * The above copyright notice and this permission notice shall be included in 15 | * all copies or substantial portions of the Software. 16 | * 17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 | * THE SOFTWARE. 24 | * 25 | * Originally forked from (with the author's permission): 26 | * Fabrice Bellard's javascript vt100 for jslinux: 27 | * http://bellard.org/jslinux/ 28 | * Copyright (c) 2011 Fabrice Bellard 29 | * The original design remains. The terminal itself 30 | * has been extended to include xterm CSI codes, among 31 | * other features. 32 | */ 33 | 34 | /** 35 | * Default styles for xterm.js 36 | */ 37 | 38 | .xterm { 39 | cursor: text; 40 | position: relative; 41 | user-select: none; 42 | -ms-user-select: none; 43 | -webkit-user-select: none; 44 | } 45 | 46 | .xterm.focus, 47 | .xterm:focus { 48 | outline: none; 49 | } 50 | 51 | .xterm .xterm-helpers { 52 | position: absolute; 53 | top: 0; 54 | /** 55 | * The z-index of the helpers must be higher than the canvases in order for 56 | * IMEs to appear on top. 57 | */ 58 | z-index: 5; 59 | } 60 | 61 | .xterm .xterm-helper-textarea { 62 | padding: 0; 63 | border: 0; 64 | margin: 0; 65 | /* Move textarea out of the screen to the far left, so that the cursor is not visible */ 66 | position: absolute; 67 | opacity: 0; 68 | left: -9999em; 69 | top: 0; 70 | width: 0; 71 | height: 0; 72 | z-index: -5; 73 | /** Prevent wrapping so the IME appears against the textarea at the correct position */ 74 | white-space: nowrap; 75 | overflow: hidden; 76 | resize: none; 77 | } 78 | 79 | .xterm .composition-view { 80 | /* TODO: Composition position got messed up somewhere */ 81 | background: #000; 82 | color: #FFF; 83 | display: none; 84 | position: absolute; 85 | white-space: nowrap; 86 | z-index: 1; 87 | } 88 | 89 | .xterm .composition-view.active { 90 | display: block; 91 | } 92 | 93 | .xterm .xterm-viewport { 94 | /* On OS X this is required in order for the scroll bar to appear fully opaque */ 95 | background-color: #000; 96 | overflow-y: scroll; 97 | cursor: default; 98 | position: absolute; 99 | right: 0; 100 | left: 0; 101 | top: 0; 102 | bottom: 0; 103 | } 104 | 105 | .xterm .xterm-screen { 106 | position: relative; 107 | } 108 | 109 | .xterm .xterm-screen canvas { 110 | position: absolute; 111 | left: 0; 112 | top: 0; 113 | } 114 | 115 | .xterm .xterm-scroll-area { 116 | visibility: hidden; 117 | } 118 | 119 | .xterm-char-measure-element { 120 | display: inline-block; 121 | visibility: hidden; 122 | position: absolute; 123 | top: 0; 124 | left: -9999em; 125 | line-height: normal; 126 | } 127 | 128 | .xterm.enable-mouse-events { 129 | /* When mouse events are enabled (eg. tmux), revert to the standard pointer cursor */ 130 | cursor: default; 131 | } 132 | 133 | .xterm.xterm-cursor-pointer, 134 | .xterm .xterm-cursor-pointer { 135 | cursor: pointer; 136 | } 137 | 138 | .xterm.column-select.focus { 139 | /* Column selection mode */ 140 | cursor: crosshair; 141 | } 142 | 143 | .xterm .xterm-accessibility, 144 | .xterm .xterm-message { 145 | position: absolute; 146 | left: 0; 147 | top: 0; 148 | bottom: 0; 149 | right: 0; 150 | z-index: 10; 151 | color: transparent; 152 | } 153 | 154 | .xterm .live-region { 155 | position: absolute; 156 | left: -9999px; 157 | width: 1px; 158 | height: 1px; 159 | overflow: hidden; 160 | } 161 | 162 | .xterm-dim { 163 | opacity: 0.5; 164 | } 165 | 166 | .xterm-underline-1 { text-decoration: underline; } 167 | .xterm-underline-2 { text-decoration: double underline; } 168 | .xterm-underline-3 { text-decoration: wavy underline; } 169 | .xterm-underline-4 { text-decoration: dotted underline; } 170 | .xterm-underline-5 { text-decoration: dashed underline; } 171 | 172 | .xterm-strikethrough { 173 | text-decoration: line-through; 174 | } 175 | 176 | .xterm-screen .xterm-decoration-container .xterm-decoration { 177 | z-index: 6; 178 | position: absolute; 179 | } 180 | 181 | .xterm-decoration-overview-ruler { 182 | z-index: 7; 183 | position: absolute; 184 | top: 0; 185 | right: 0; 186 | pointer-events: none; 187 | } 188 | 189 | .xterm-decoration-top { 190 | z-index: 2; 191 | position: relative; 192 | } 193 | --------------------------------------------------------------------------------