From 3b74837020b15a6c7ef74677f78bcab01a7466a9 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Tue, 19 Feb 2019 09:24:19 +0000 Subject: [PATCH] refactor: Split 'Event' docs/types into more specific Event types (#17038) * Event = Base event type (with preventDefault) * IpcMainEvent = Event that ipcMain emits (with sender, reply, etc.) * IpcRendererEvent = Event that ipcRenderer emits (with sender, senderId, etc.) * KeyboardEvent = Event that we emit with keyboard flags (ctrlKey, altKey, etc.) This will dramatically improve peoples TS experience with IPC events --- build/tsc.gni | 3 + docs/api/ipc-main.md | 30 +- docs/api/ipc-renderer.md | 17 +- docs/api/menu-item.md | 2 +- docs/api/structures/event.md | 6 - docs/api/structures/ipc-main-event.md | 8 + docs/api/structures/ipc-renderer-event.md | 6 + docs/api/structures/keyboard-event.md | 6 + docs/api/tray.md | 36 +- filenames.auto.gni | 3 + lib/browser/ipc-main-internal-utils.ts | 2 +- lib/browser/ipc-main-internal.ts | 2 +- lib/renderer/content-scripts-injector.ts | 2 +- lib/renderer/ipc-renderer-internal-utils.ts | 2 +- lib/renderer/web-frame-init.ts | 4 +- lib/renderer/window-setup.ts | 4 +- package-lock.json | 644 ++++++++++++++------ package.json | 4 +- spec/ts-smoke/electron/main.ts | 6 +- spec/ts-smoke/electron/renderer.ts | 2 +- typings/internal-electron.d.ts | 10 + typings/internal-helpers.d.ts | 1 + 22 files changed, 515 insertions(+), 285 deletions(-) create mode 100644 docs/api/structures/ipc-main-event.md create mode 100644 docs/api/structures/ipc-renderer-event.md create mode 100644 docs/api/structures/keyboard-event.md create mode 100644 typings/internal-helpers.d.ts diff --git a/build/tsc.gni b/build/tsc.gni index e58ba428dd..d1001e864f 100644 --- a/build/tsc.gni +++ b/build/tsc.gni @@ -22,6 +22,9 @@ template("typescript_build") { invoker.tsconfig, "//electron/tsconfig.json", "//electron/package-lock.json", + "//electron/typings/internal-ambient.d.ts", + "//electron/typings/internal-electron.d.ts", + "//electron/typings/internal-helpers.d.ts", ] type_roots = "node_modules/@types,typings" diff --git a/docs/api/ipc-main.md b/docs/api/ipc-main.md index ec6a712c84..006fd9bcb8 100644 --- a/docs/api/ipc-main.md +++ b/docs/api/ipc-main.md @@ -58,6 +58,8 @@ The `ipcMain` module has the following method to listen for events: * `channel` String * `listener` Function + * `event` IpcMainEvent + * `...args` any[] Listens to `channel`, when a new message arrives `listener` would be called with `listener(event, args...)`. @@ -66,6 +68,8 @@ Listens to `channel`, when a new message arrives `listener` would be called with * `channel` String * `listener` Function + * `event` IpcMainEvent + * `...args` any[] Adds a one time `listener` function for the event. This `listener` is invoked only the next time a message is sent to `channel`, after which it is removed. @@ -86,27 +90,5 @@ Removes listeners of the specified `channel`. ## Event object -The `event` object passed to the `callback` has the following methods: - -### `event.frameId` - -An `Integer` representing the ID of the renderer frame that sent this message. - -### `event.returnValue` - -Set this to the value to be returned in a synchronous message. - -### `event.sender` - -Returns the `webContents` that sent the message, you can call -`event.sender.send` to reply to the asynchronous message, see -[webContents.send][web-contents-send] for more information. - -[web-contents-send]: web-contents.md#contentssendchannel-arg1-arg2- - -### `event.reply` - -A function that will send an IPC message to the renderer frane that sent -the original message that you are currently handling. You should use this -method to "reply" to the sent message in order to guaruntee the reply will go -to the correct process and frame. +The documentation for the `event` object passed to the `callback` can be found +in the [`ipc-main-event`](structures/ipc-main-event.md) structure docs. diff --git a/docs/api/ipc-renderer.md b/docs/api/ipc-renderer.md index bbed6c48b6..f92886d178 100644 --- a/docs/api/ipc-renderer.md +++ b/docs/api/ipc-renderer.md @@ -20,6 +20,8 @@ The `ipcRenderer` module has the following method to listen for events and send * `channel` String * `listener` Function + * `event` IpcRendererEvent + * `...args` any[] Listens to `channel`, when a new message arrives `listener` would be called with `listener(event, args...)`. @@ -28,6 +30,8 @@ Listens to `channel`, when a new message arrives `listener` would be called with * `channel` String * `listener` Function + * `event` IpcRendererEvent + * `...args` any[] Adds a one time `listener` function for the event. This `listener` is invoked only the next time a message is sent to `channel`, after which it is removed. @@ -92,14 +96,5 @@ the host page instead of the main process. ## Event object -The `event` object passed to the `callback` has the following methods: - -### `event.senderId` - -Returns the `webContents.id` that sent the message, you can call -`event.sender.sendTo(event.senderId, ...)` to reply to the message, see -[ipcRenderer.sendTo][ipc-renderer-sendto] for more information. -This only applies to messages sent from a different renderer. -Messages sent directly from the main process set `event.senderId` to `0`. - -[ipc-renderer-sendto]: #ipcrenderersendtowindowid-channel--arg1-arg2- +The documentation for the `event` object passed to the `callback` can be found +in the [`ipc-renderer-event`](structures/ipc-renderer-event.md) structure docs. diff --git a/docs/api/menu-item.md b/docs/api/menu-item.md index a4c5eff7dc..8aebbf524d 100644 --- a/docs/api/menu-item.md +++ b/docs/api/menu-item.md @@ -13,7 +13,7 @@ See [`Menu`](menu.md) for examples. `click(menuItem, browserWindow, event)` when the menu item is clicked. * `menuItem` MenuItem * `browserWindow` [BrowserWindow](browser-window.md) - * `event` Event + * `event` [KeyboardEvent](structures/keyboard-event.md) * `role` String (optional) - Can be `undo`, `redo`, `cut`, `copy`, `paste`, `pasteandmatchstyle`, `delete`, `selectall`, `reload`, `forcereload`, `toggledevtools`, `resetzoom`, `zoomin`, `zoomout`, `togglefullscreen`, `window`, `minimize`, `close`, `help`, `about`, `services`, `hide`, `hideothers`, `unhide`, `quit`, `startspeaking`, `stopspeaking`, `close`, `minimize`, `zoom`, `front`, `appMenu`, `fileMenu`, `editMenu`, `viewMenu` or `windowMenu` - Define the action of the menu item, when specified the `click` property will be ignored. See [roles](#roles). * `type` String (optional) - Can be `normal`, `separator`, `submenu`, `checkbox` or diff --git a/docs/api/structures/event.md b/docs/api/structures/event.md index e1b99c22cd..415d269fee 100644 --- a/docs/api/structures/event.md +++ b/docs/api/structures/event.md @@ -1,9 +1,3 @@ # Event Object extends `GlobalEvent` * `preventDefault` VoidFunction -* `sender` WebContents -* `returnValue` any -* `ctrlKey` Boolean (optional) - whether the Control key was used in an accelerator to trigger the Event -* `metaKey` Boolean (optional) - whether a meta key was used in an accelerator to trigger the Event -* `shiftKey` Boolean (optional) - whether a Shift key was used in an accelerator to trigger the Event -* `altKey` Boolean (optional) - whether an Alt key was used in an accelerator to trigger the Event diff --git a/docs/api/structures/ipc-main-event.md b/docs/api/structures/ipc-main-event.md new file mode 100644 index 0000000000..2f49e01f37 --- /dev/null +++ b/docs/api/structures/ipc-main-event.md @@ -0,0 +1,8 @@ +# IpcMainEvent Object extends `Event` + +* `frameId` Integer - The ID of the renderer frame that sent this message +* `returnValue` any - Set this to the value to be returned in a syncronous message +* `sender` WebContents - Returns the `webContents` that sent the message +* `reply` Function - A function that will send an IPC message to the renderer frane that sent the original message that you are currently handling. You should use this method to "reply" to the sent message in order to guaruntee the reply will go to the correct process and frame. + * `...args` any[] +IpcRenderer \ No newline at end of file diff --git a/docs/api/structures/ipc-renderer-event.md b/docs/api/structures/ipc-renderer-event.md new file mode 100644 index 0000000000..6f56d8cf3f --- /dev/null +++ b/docs/api/structures/ipc-renderer-event.md @@ -0,0 +1,6 @@ +# IpcRendererEvent Object extends `Event` + +* `sender` IpcRenderer - The `IpcRenderer` instance that emitted the event originally +* `senderId` Integer - The `webContents.id` that sent the message, you can call `event.sender.sendTo(event.senderId, ...)` to reply to the message, see [ipcRenderer.sendTo][ipc-renderer-sendto] for more information. This only applies to messages sent from a different renderer. Messages sent directly from the main process set `event.senderId` to `0`. + +[ipc-renderer-sendto]: #ipcrenderersendtowindowid-channel--arg1-arg2- diff --git a/docs/api/structures/keyboard-event.md b/docs/api/structures/keyboard-event.md new file mode 100644 index 0000000000..f8b463fd38 --- /dev/null +++ b/docs/api/structures/keyboard-event.md @@ -0,0 +1,6 @@ +# KeyboardEvent Object extends `Event` + +* `ctrlKey` Boolean (optional) - whether the Control key was used in an accelerator to trigger the Event +* `metaKey` Boolean (optional) - whether a meta key was used in an accelerator to trigger the Event +* `shiftKey` Boolean (optional) - whether a Shift key was used in an accelerator to trigger the Event +* `altKey` Boolean (optional) - whether an Alt key was used in an accelerator to trigger the Event diff --git a/docs/api/tray.md b/docs/api/tray.md index b9671676ae..8457e3b1d1 100644 --- a/docs/api/tray.md +++ b/docs/api/tray.md @@ -70,11 +70,7 @@ The `Tray` module emits the following events: #### Event: 'click' -* `event` Event - * `altKey` Boolean - * `shiftKey` Boolean - * `ctrlKey` Boolean - * `metaKey` Boolean +* `event` [KeyboardEvent](structures/keyboard-event.md) * `bounds` [Rectangle](structures/rectangle.md) - The bounds of tray icon. * `position` [Point](structures/point.md) - The position of the event. @@ -82,22 +78,14 @@ Emitted when the tray icon is clicked. #### Event: 'right-click' _macOS_ _Windows_ -* `event` Event - * `altKey` Boolean - * `shiftKey` Boolean - * `ctrlKey` Boolean - * `metaKey` Boolean +* `event` [KeyboardEvent](structures/keyboard-event.md) * `bounds` [Rectangle](structures/rectangle.md) - The bounds of tray icon. Emitted when the tray icon is right clicked. #### Event: 'double-click' _macOS_ _Windows_ -* `event` Event - * `altKey` Boolean - * `shiftKey` Boolean - * `ctrlKey` Boolean - * `metaKey` Boolean +* `event` [KeyboardEvent](structures/keyboard-event.md) * `bounds` [Rectangle](structures/rectangle.md) - The bounds of tray icon. Emitted when the tray icon is double clicked. @@ -147,33 +135,21 @@ Emitted when a drag operation ends on the tray or ends at another location. #### Event: 'mouse-enter' _macOS_ -* `event` Event - * `altKey` Boolean - * `shiftKey` Boolean - * `ctrlKey` Boolean - * `metaKey` Boolean +* `event` [KeyboardEvent](structures/keyboard-event.md) * `position` [Point](structures/point.md) - The position of the event. Emitted when the mouse enters the tray icon. #### Event: 'mouse-leave' _macOS_ -* `event` Event - * `altKey` Boolean - * `shiftKey` Boolean - * `ctrlKey` Boolean - * `metaKey` Boolean +* `event` [KeyboardEvent](structures/keyboard-event.md) * `position` [Point](structures/point.md) - The position of the event. Emitted when the mouse exits the tray icon. #### Event: 'mouse-move' _macOS_ -* `event` Event - * `altKey` Boolean - * `shiftKey` Boolean - * `ctrlKey` Boolean - * `metaKey` Boolean +* `event` [KeyboardEvent](structures/keyboard-event.md) * `position` [Point](structures/point.md) - The position of the event. Emitted when the mouse moves in the tray icon. diff --git a/filenames.auto.gni b/filenames.auto.gni index bbff60b9d6..e9262c6a0e 100644 --- a/filenames.auto.gni +++ b/filenames.auto.gni @@ -75,8 +75,11 @@ auto_filenames = { "docs/api/structures/file-filter.md", "docs/api/structures/gpu-feature-status.md", "docs/api/structures/io-counters.md", + "docs/api/structures/ipc-main-event.md", + "docs/api/structures/ipc-renderer-event.md", "docs/api/structures/jump-list-category.md", "docs/api/structures/jump-list-item.md", + "docs/api/structures/keyboard-event.md", "docs/api/structures/memory-info.md", "docs/api/structures/memory-usage-details.md", "docs/api/structures/mime-typed-buffer.md", diff --git a/lib/browser/ipc-main-internal-utils.ts b/lib/browser/ipc-main-internal-utils.ts index adb17bca01..1bf22b4ff5 100644 --- a/lib/browser/ipc-main-internal-utils.ts +++ b/lib/browser/ipc-main-internal-utils.ts @@ -3,7 +3,7 @@ import * as errorUtils from '@electron/internal/common/error-utils' type IPCHandler = (...args: any[]) => any -const callHandler = async function (handler: IPCHandler, event: Electron.Event, args: any[], reply: (args: any[]) => void) { +const callHandler = async function (handler: IPCHandler, event: ElectronInternal.IpcMainInternalEvent, args: any[], reply: (args: any[]) => void) { try { const result = await handler(event, ...args) reply([null, result]) diff --git a/lib/browser/ipc-main-internal.ts b/lib/browser/ipc-main-internal.ts index 0a162bd017..3f1a9f4205 100644 --- a/lib/browser/ipc-main-internal.ts +++ b/lib/browser/ipc-main-internal.ts @@ -5,4 +5,4 @@ const emitter = new EventEmitter() // Do not throw exception when channel name is "error". emitter.on('error', () => {}) -export const ipcMainInternal = emitter +export const ipcMainInternal = emitter as ElectronInternal.IpcMainInternal diff --git a/lib/renderer/content-scripts-injector.ts b/lib/renderer/content-scripts-injector.ts index 1df98b2d7f..3d762d52d3 100644 --- a/lib/renderer/content-scripts-injector.ts +++ b/lib/renderer/content-scripts-injector.ts @@ -84,7 +84,7 @@ const injectContentScript = function (extensionId: string, script: Electron.Cont // Handle the request of chrome.tabs.executeJavaScript. ipcRendererInternal.on('CHROME_TABS_EXECUTESCRIPT', function ( - event: Electron.Event, + event, senderWebContentsId: number, requestId: number, extensionId: string, diff --git a/lib/renderer/ipc-renderer-internal-utils.ts b/lib/renderer/ipc-renderer-internal-utils.ts index 821f548cf8..a8d4e3d4cf 100644 --- a/lib/renderer/ipc-renderer-internal-utils.ts +++ b/lib/renderer/ipc-renderer-internal-utils.ts @@ -7,7 +7,7 @@ export function invoke (command: string, ...args: any[]) { return new Promise((resolve, reject) => { const requestId = ++nextId ipcRendererInternal.once(`${command}_RESPONSE_${requestId}`, ( - _event: Electron.Event, error: Electron.SerializedError, result: any + _event, error: Electron.SerializedError, result: any ) => { if (error) { reject(errorUtils.deserialize(error)) diff --git a/lib/renderer/web-frame-init.ts b/lib/renderer/web-frame-init.ts index a67f81e7fa..2af2dfd7a7 100644 --- a/lib/renderer/web-frame-init.ts +++ b/lib/renderer/web-frame-init.ts @@ -11,7 +11,7 @@ type WebFrameMethod = { export const webFrameInit = () => { // Call webFrame method ipcRendererInternal.on('ELECTRON_INTERNAL_RENDERER_WEB_FRAME_METHOD', ( - _event: Electron.Event, method: keyof WebFrameMethod, args: any[] + _event, method: keyof WebFrameMethod, args: any[] ) => { // The TypeScript compiler cannot handle the sheer number of // call signatures here and simply gives up. Incorrect invocations @@ -20,7 +20,7 @@ export const webFrameInit = () => { }) ipcRendererInternal.on('ELECTRON_INTERNAL_RENDERER_ASYNC_WEB_FRAME_METHOD', ( - event: Electron.Event, requestId: number, method: keyof WebFrameMethod, args: any[] + event, requestId: number, method: keyof WebFrameMethod, args: any[] ) => { new Promise(resolve => // The TypeScript compiler cannot handle the sheer number of diff --git a/lib/renderer/window-setup.ts b/lib/renderer/window-setup.ts index 326dce2fdf..544cfab9c2 100644 --- a/lib/renderer/window-setup.ts +++ b/lib/renderer/window-setup.ts @@ -206,7 +206,7 @@ export const windowSetup = ( } ipcRendererInternal.on('ELECTRON_GUEST_WINDOW_POSTMESSAGE', function ( - _event: Electron.Event, sourceId: number, message: any, sourceOrigin: string + _event, sourceId: number, message: any, sourceOrigin: string ) { // Manually dispatch event instead of using postMessage because we also need to // set event.source. @@ -253,7 +253,7 @@ export const windowSetup = ( let cachedVisibilityState = isHiddenPage ? 'hidden' : 'visible' // Subscribe to visibilityState changes. - ipcRendererInternal.on('ELECTRON_GUEST_INSTANCE_VISIBILITY_CHANGE', function (_event: Electron.Event, visibilityState: VisibilityState) { + ipcRendererInternal.on('ELECTRON_GUEST_INSTANCE_VISIBILITY_CHANGE', function (_event, visibilityState: VisibilityState) { if (cachedVisibilityState !== visibilityState) { cachedVisibilityState = visibilityState document.dispatchEvent(new Event('visibilitychange')) diff --git a/package-lock.json b/package-lock.json index 653ddf13d8..73e50ac272 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1531,27 +1531,17 @@ } }, "cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", + "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", "dev": true, "requires": { "css-select": "~1.2.0", "dom-serializer": "~0.1.0", "entities": "~1.1.1", "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" + "lodash": "^4.15.0", + "parse5": "^3.0.1" } }, "chokidar": { @@ -2313,15 +2303,15 @@ } }, "css-what": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", "dev": true }, "cssom": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz", - "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz", + "integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==", "dev": true }, "cssstyle": { @@ -2446,9 +2436,9 @@ } }, "dedent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.6.0.tgz", - "integrity": "sha1-Dm2o8M5Sg471zsXI+TlrDBtko8s=", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", "dev": true }, "deep-extend": { @@ -2714,21 +2704,13 @@ } }, "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", "dev": true, "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } + "domelementtype": "^1.3.0", + "entities": "^1.1.1" } }, "domain-browser": { @@ -2738,9 +2720,9 @@ "dev": true }, "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", "dev": true }, "domhandler": { @@ -2848,9 +2830,9 @@ "dev": true }, "duplexify": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", - "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "requires": { "end-of-stream": "^1.0.0", @@ -2909,9 +2891,9 @@ "dev": true }, "electron-docs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/electron-docs/-/electron-docs-2.0.1.tgz", - "integrity": "sha1-ARI6T8y2vieswSgAJ7/LJAxUsdI=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/electron-docs/-/electron-docs-3.0.2.tgz", + "integrity": "sha1-NA1X5sDb+GqXJJ/UUd/2IhAhdUo=", "dev": true, "requires": { "got": "^6.3.0", @@ -2945,48 +2927,63 @@ } }, "electron-docs-linter": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/electron-docs-linter/-/electron-docs-linter-2.4.0.tgz", - "integrity": "sha512-WvxXsk6kl4x0nrQOqMYAXsMMbSouSwa8VeNd+Bps9HM7QXuNNNVPFB1UEdykq06HWS60lUt4VUiAjQjAJJpcSg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/electron-docs-linter/-/electron-docs-linter-3.0.0.tgz", + "integrity": "sha512-XA+cVmPcpEDGsVn+eUZtee1Dp5JHWWT3Ll9f1rERTJUvT6wN63mJxRQII73sm3qIhBD5gCTXKk7vCf4MKr/0JQ==", "dev": true, "requires": { - "cheerio": "^0.22.0", + "cheerio": "^1.0.0-rc.2", "clean-deep": "^2.0.1", - "decamelize": "^1.2.0", - "dedent": "^0.6.0", - "electron-docs": "^2.0.1", - "entities": "^1.1.1", + "decamelize": "^2.0.0", + "dedent": "^0.7.0", + "electron-docs": "^3.0.2", + "entities": "^1.1.2", "keyed-array": "^2.1.2", "lodash.merge": "^4.6.0", "lodash.pick": "^4.2.1", "marky-markdown-lite": "^1.2.0", "minimist": "^1.2.0", - "ora": "^0.3.0", + "ora": "^3.0.0", "path-exists": "^3.0.0", - "pify": "^2.3.0", + "pify": "^4.0.1", "revalidator": "^0.3.1", - "semver": "^5.3.0" + "semver": "^5.6.0" }, "dependencies": { + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "dev": true, + "requires": { + "xregexp": "4.0.0" + } + }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true } } }, "electron-typescript-definitions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/electron-typescript-definitions/-/electron-typescript-definitions-7.0.0.tgz", - "integrity": "sha512-9/BkCl/sJdVn09fn42+bihGsYymBKxzaFM2VY/LYoPe4/7B+3TPhgQyunOgWRaPT1Kx+ZJBgJbYj+rQYEUFR2w==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/electron-typescript-definitions/-/electron-typescript-definitions-8.2.1.tgz", + "integrity": "sha512-fysIldZ7Z8D7JtMK9dyGTQgmHqEvGrnDpbjf9ko570rdBR2bmLsNoyeOCZIa2Pg+S1NYayOkdojtpPX0Q6IPMw==", "dev": true, "requires": { "@types/node": "^7.0.18", "colors": "^1.1.2", "debug": "^2.6.3", "electron-docs": "^2.0.0", - "electron-docs-linter": "^2.4.0", + "electron-docs-linter": "^3.0.0", "lodash": "^4.17.11", "mkdirp": "^0.5.1", "rimraf": "^2.5.4", @@ -3000,12 +2997,230 @@ "integrity": "sha512-HeyK+csRk7Khhg9krpMGJeT9pLzjsmiJFHYRzYpPv/dQ5tPclQsbvceiX/HKynRt/9lMLorWUYTbBHC3hRI4sg==", "dev": true }, + "ansi-regex": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", + "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "dev": true, + "requires": { + "xregexp": "4.0.0" + } + }, + "electron-docs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/electron-docs/-/electron-docs-2.0.1.tgz", + "integrity": "sha1-ARI6T8y2vieswSgAJ7/LJAxUsdI=", + "dev": true, + "requires": { + "got": "^6.3.0", + "gunzip-maybe": "^1.3.1", + "node-dir": "^0.1.12", + "ora": "^0.2.3", + "path-exists": "^3.0.0", + "pify": "^2.3.0", + "semver": "^5.1.0", + "tar-fs": "^1.13.0" + } + }, + "electron-docs-linter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/electron-docs-linter/-/electron-docs-linter-3.0.0.tgz", + "integrity": "sha512-XA+cVmPcpEDGsVn+eUZtee1Dp5JHWWT3Ll9f1rERTJUvT6wN63mJxRQII73sm3qIhBD5gCTXKk7vCf4MKr/0JQ==", + "dev": true, + "requires": { + "cheerio": "^1.0.0-rc.2", + "clean-deep": "^2.0.1", + "decamelize": "^2.0.0", + "dedent": "^0.7.0", + "electron-docs": "^3.0.2", + "entities": "^1.1.2", + "keyed-array": "^2.1.2", + "lodash.merge": "^4.6.0", + "lodash.pick": "^4.2.1", + "marky-markdown-lite": "^1.2.0", + "minimist": "^1.2.0", + "ora": "^3.0.0", + "path-exists": "^3.0.0", + "pify": "^4.0.1", + "revalidator": "^0.3.1", + "semver": "^5.6.0" + }, + "dependencies": { + "electron-docs": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/electron-docs/-/electron-docs-3.0.2.tgz", + "integrity": "sha1-NA1X5sDb+GqXJJ/UUd/2IhAhdUo=", + "dev": true, + "requires": { + "got": "^6.3.0", + "gunzip-maybe": "^1.3.1", + "node-dir": "^0.1.12", + "ora": "^0.2.3", + "path-exists": "^3.0.0", + "pify": "^2.3.0", + "semver": "^5.1.0", + "tar-fs": "^1.13.0" + }, + "dependencies": { + "ora": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", + "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", + "dev": true, + "requires": { + "chalk": "^1.1.1", + "cli-cursor": "^1.0.2", + "cli-spinners": "^0.1.2", + "object-assign": "^4.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "ora": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.1.0.tgz", + "integrity": "sha512-vRBPaNCclUi8pUxRF/G8+5qEQkc6EgzKK1G2ZNJUIGu088Un5qIxFXeDgymvPRM9nmrcUOGzQgS1Vmtz+NtlMw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^1.3.1", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-spinners": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", + "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", + "dev": true + } + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, "lodash": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", "dev": true }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "ora": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", + "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", + "dev": true, + "requires": { + "chalk": "^1.1.1", + "cli-cursor": "^1.0.2", + "cli-spinners": "^0.1.2", + "object-assign": "^4.0.1" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "strip-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", + "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "dev": true, + "requires": { + "ansi-regex": "^4.0.0" + } + }, "typescript": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", @@ -3057,9 +3272,9 @@ "dev": true }, "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true }, "error-ex": { @@ -3108,28 +3323,25 @@ "dev": true }, "escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz", + "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", "dev": true, "optional": true, "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", + "esprima": "^3.1.3", + "estraverse": "^4.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", - "source-map": "~0.2.0" + "source-map": "~0.6.1" }, "dependencies": { "source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "optional": true, - "requires": { - "amdefine": ">=0.0.4" - } + "optional": true } } }, @@ -3647,9 +3859,9 @@ } }, "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", "dev": true, "optional": true }, @@ -3688,9 +3900,9 @@ } }, "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", "dev": true, "optional": true }, @@ -5332,7 +5544,7 @@ "gunzip-maybe": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.1.tgz", - "integrity": "sha1-Occu2J0bSbpwjhh3ZQBIiQKlICc=", + "integrity": "sha512-qtutIKMthNJJgeHQS7kZ9FqDq59/Wn0G2HYCRNjpup7yKfVI6/eqwpmroyZGFoCYaG+sW6psNVb4zoLADHpp2g==", "dev": true, "requires": { "browserify-zlib": "^0.1.4", @@ -5526,44 +5738,34 @@ "dev": true }, "htmlparser2": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", - "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "dev": true, "requires": { - "domelementtype": "^1.3.0", + "domelementtype": "^1.3.1", "domhandler": "^2.3.0", "domutils": "^1.5.1", "entities": "^1.1.1", "inherits": "^2.0.1", - "readable-stream": "^2.0.2" + "readable-stream": "^3.1.1" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", + "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", + "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -6466,6 +6668,13 @@ "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=", "dev": true, "optional": true + }, + "parse5": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", + "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=", + "dev": true, + "optional": true } } }, @@ -7314,42 +7523,12 @@ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", "dev": true }, - "lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=", - "dev": true - }, - "lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=", - "dev": true - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=", - "dev": true - }, "lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", "dev": true }, - "lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=", - "dev": true - }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -7368,12 +7547,6 @@ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", "dev": true }, - "lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", - "dev": true - }, "lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", @@ -7398,30 +7571,12 @@ "integrity": "sha1-9GHliPZmg/fq3q3lE+OKaaVloV0=", "dev": true }, - "lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=", - "dev": true - }, - "lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=", - "dev": true - }, "lodash.set": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=", "dev": true }, - "lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", - "dev": true - }, "lodash.template": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", @@ -8337,9 +8492,9 @@ } }, "nth-check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", "dev": true, "requires": { "boolbase": "~1.0.0" @@ -8549,22 +8704,96 @@ } }, "ora": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-0.3.0.tgz", - "integrity": "sha1-NnoHitJc+wltpQERXrW0AeB9dJU=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.1.0.tgz", + "integrity": "sha512-vRBPaNCclUi8pUxRF/G8+5qEQkc6EgzKK1G2ZNJUIGu088Un5qIxFXeDgymvPRM9nmrcUOGzQgS1Vmtz+NtlMw==", "dev": true, "requires": { - "chalk": "^1.1.1", - "cli-cursor": "^1.0.2", - "cli-spinners": "^0.2.0", - "log-symbols": "^1.0.2" + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^1.3.1", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.0.0", + "wcwidth": "^1.0.1" }, "dependencies": { - "cli-spinners": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.2.0.tgz", - "integrity": "sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8=", + "ansi-regex": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", + "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-spinners": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", + "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "strip-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", + "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "dev": true, + "requires": { + "ansi-regex": "^4.0.0" + } } } }, @@ -8765,11 +8994,13 @@ } }, "parse5": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", - "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", "dev": true, - "optional": true + "requires": { + "@types/node": "*" + } }, "pascalcase": { "version": "0.1.1", @@ -10451,7 +10682,7 @@ "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true, "optional": true }, @@ -10963,7 +11194,7 @@ "split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha1-YFvZvjA6pZ+zX5Ip++oN3snqB9k=", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, "requires": { "through": "2" @@ -10981,7 +11212,7 @@ "split2": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", - "integrity": "sha1-GGsldbz4PoW30YRldWI47k7kJJM=", + "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", "dev": true, "requires": { "through2": "^2.0.2" @@ -11990,17 +12221,17 @@ } }, "tar-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz", - "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", "dev": true, "requires": { "bl": "^1.0.0", - "buffer-alloc": "^1.1.0", + "buffer-alloc": "^1.2.0", "end-of-stream": "^1.0.0", "fs-constants": "^1.0.0", "readable-stream": "^2.3.0", - "to-buffer": "^1.1.0", + "to-buffer": "^1.1.1", "xtend": "^4.0.0" }, "dependencies": { @@ -12082,9 +12313,9 @@ } }, "text-extensions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.8.0.tgz", - "integrity": "sha512-mVzjRxuWnDKs/qH1rbOJEVHLlSX9kty9lpi7lMvLgU9S74mQ8/Ozg9UPcKxShh0qG2NZ+NyPOPpcZU4C1Eld9A==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true }, "text-table": { @@ -12257,14 +12488,23 @@ } }, "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, "optional": true, "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "optional": true + } } }, "tr46": { @@ -12470,9 +12710,9 @@ } }, "uc.micro": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.5.tgz", - "integrity": "sha512-JoLI4g5zv5qNyT09f4YAvEZIIV1oOjqnewYg5D38dkQljIzpPT296dbIGvKro3digYI1bkb7W6EP1y4uDlmzLg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", "dev": true }, "uglify-js": { @@ -13352,6 +13592,12 @@ "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=", "dev": true }, + "xregexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", + "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", + "dev": true + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", diff --git a/package.json b/package.json index eeb773b2ed..b11ac955c9 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,8 @@ "colors": "^1.1.2", "dotenv-safe": "^4.0.4", "dugite": "^1.45.0", - "electron-docs-linter": "^2.5.0", - "electron-typescript-definitions": "^8.1.0", + "electron-docs-linter": "^3.0.0", + "electron-typescript-definitions": "^8.2.1", "eslint": "^5.13.0", "eslint-config-standard": "^12.0.0", "eslint-plugin-mocha": "^5.2.0", diff --git a/spec/ts-smoke/electron/main.ts b/spec/ts-smoke/electron/main.ts index 3d509c263c..378c8bad0c 100644 --- a/spec/ts-smoke/electron/main.ts +++ b/spec/ts-smoke/electron/main.ts @@ -515,17 +515,17 @@ globalShortcut.unregisterAll() // ipcMain // https://github.com/atom/electron/blob/master/docs/api/ipc-main-process.md -ipcMain.on('asynchronous-message', (event: Electron.Event, arg: any) => { +ipcMain.on('asynchronous-message', (event, arg: any) => { console.log(arg) // prints "ping" event.sender.send('asynchronous-reply', 'pong') }) -ipcMain.on('synchronous-message', (event: Electron.Event, arg: any) => { +ipcMain.on('synchronous-message', (event, arg: any) => { console.log(arg) // prints "ping" event.returnValue = 'pong' }) -ipcMain.on('synchronous-message', (event: Event, arg: any) => { +ipcMain.on('synchronous-message', (event, arg: any) => { console.log("event isn't namespaced and refers to the correct type.") event.returnValue = 'pong' }) diff --git a/spec/ts-smoke/electron/renderer.ts b/spec/ts-smoke/electron/renderer.ts index 5bd601320d..28e812b081 100644 --- a/spec/ts-smoke/electron/renderer.ts +++ b/spec/ts-smoke/electron/renderer.ts @@ -16,7 +16,7 @@ import * as fs from 'fs' // https://github.com/atom/electron/blob/master/docs/api/ipc-renderer.md console.log(ipcRenderer.sendSync('synchronous-message', 'ping')) // prints "pong" -ipcRenderer.on('asynchronous-reply', (event: Electron.Event, arg: any) => { +ipcRenderer.on('asynchronous-reply', (event, arg: any) => { console.log(arg) // prints "pong" event.sender.send('another-message', 'Hello World!') }) diff --git a/typings/internal-electron.d.ts b/typings/internal-electron.d.ts index bcba63be43..c6bb3952cb 100644 --- a/typings/internal-electron.d.ts +++ b/typings/internal-electron.d.ts @@ -68,4 +68,14 @@ declare namespace ElectronInternal { promisify any>(fn: T): T; promisifyMultiArg any>(fn: T): T; } + + // Internal IPC has _replyInternal and NO reply method + interface IpcMainInternalEvent extends Omit { + _replyInternal(...args: any[]): void; + } + + interface IpcMainInternal extends Electron.EventEmitter { + on(channel: string, listener: (event: IpcMainInternalEvent, ...args: any[]) => void): this; + once(channel: string, listener: (event: IpcMainInternalEvent, ...args: any[]) => void): this; + } } diff --git a/typings/internal-helpers.d.ts b/typings/internal-helpers.d.ts new file mode 100644 index 0000000000..f9aca7222d --- /dev/null +++ b/typings/internal-helpers.d.ts @@ -0,0 +1 @@ +declare type Omit = Pick>;