From 8acc4391b35027f86cadeac6eaa1da05e40309a0 Mon Sep 17 00:00:00 2001 From: Vlad Hashimoto Date: Wed, 22 May 2019 19:00:32 +0300 Subject: [PATCH] feat: Updates to search indices (#32) --- .gitignore | 3 +- dist/apis.json | 21776 +++++++++++++++++++++++++++++++++++++++-- dist/apps.json | 8766 +++++++++++++++-- dist/glossary.json | 214 + dist/tutorials.json | 200 +- electron-api.json | 5645 ++++++++--- indices/apis.js | 41 +- indices/apps.js | 2 +- indices/glossary.js | 29 + indices/packages.js | 6 +- indices/tutorials.js | 4 +- lib/algolia-index.js | 11 +- package-lock.json | 14542 +++++++++++++++++++++++++++ package.json | 4 +- test.js | 36 +- 15 files changed, 48395 insertions(+), 2884 deletions(-) create mode 100644 dist/glossary.json create mode 100644 indices/glossary.js create mode 100644 package-lock.json diff --git a/.gitignore b/.gitignore index 7f51c2f..2897065 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .env .npmrc -node_modules \ No newline at end of file +node_modules +*.log diff --git a/dist/apis.json b/dist/apis.json index b7e935f..f557fd7 100644 --- a/dist/apis.json +++ b/dist/apis.json @@ -1,22 +1,2246 @@ { "name": "apis", "records": [ + { + "objectID": "api-app#appispackaged", + "name": "isPackaged", + "description": "A Boolean property that returns true if the app is packaged, false otherwise. For many apps, this property can be used to distinguish development and production environments.", + "type": "Boolean", + "collection": false, + "apiType": "properties", + "fullSignature": "app.isPackaged", + "tldr": "A Boolean property that returns true if the app is packaged, false otherwise.", + "slug": "appispackaged", + "url": "https://electronjs.org/docs/api/app#appispackaged", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isPackaged", + "api:appispackaged", + "api:app.isPackaged", + "doc:isPackaged", + "doc:appispackaged", + "doc:app.isPackaged" + ] + }, + { + "objectID": "api-app#appcommandline", + "name": "commandLine", + "type": "Object", + "required": true, + "properties": [ + { + "name": "appendSwitch", + "signature": "(switch[, value])", + "description": "Append a switch (with optional value) to Chromium's command line. Note: This will not affect process.argv, and is mainly used by developers to control some low-level Chromium behaviors.", + "parameters": [ + { + "name": "switch", + "type": "String", + "collection": false, + "description": "A command-line switch", + "required": true + }, + { + "name": "value", + "type": "String", + "collection": false, + "description": "A value for the given switch", + "required": false + } + ], + "type": "Function" + }, + { + "name": "appendArgument", + "signature": "(value)", + "description": "Append an argument to Chromium's command line. The argument will be quoted correctly. Note: This will not affect process.argv.", + "parameters": [ + { + "name": "value", + "type": "String", + "collection": false, + "description": "The argument to append to the command line", + "required": true + } + ], + "type": "Function" + }, + { + "name": "hasSwitch", + "signature": "(switch)", + "parameters": [ + { + "name": "switch", + "type": "String", + "collection": false, + "description": "A command-line switch", + "required": true + } + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the command-line switch is present." + }, + "type": "Function" + }, + { + "name": "getSwitchValue", + "signature": "(switch)", + "description": "Note: When the switch is not present, it returns empty string.", + "parameters": [ + { + "name": "switch", + "type": "String", + "collection": false, + "description": "A command-line switch", + "required": true + } + ], + "returns": { + "type": "String", + "collection": false, + "description": "The command-line switch value." + }, + "type": "Function" + } + ], + "apiType": "properties", + "fullSignature": "app.commandLine", + "tldr": null, + "slug": "appcommandline", + "url": "https://electronjs.org/docs/api/app#appcommandline", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:commandLine", + "api:appcommandline", + "api:app.commandLine", + "doc:commandLine", + "doc:appcommandline", + "doc:app.commandLine" + ] + }, + { + "objectID": "api-app#appdock", + "name": "dock", + "type": "Object", + "required": true, + "properties": [ + { + "name": "bounce", + "signature": "([type])", + "platforms": [ + "macOS" + ], + "description": "When critical is passed, the dock icon will bounce until either the application becomes active or the request is canceled. When informational is passed, the dock icon will bounce for one second. However, the request remains active until either the application becomes active or the request is canceled.", + "parameters": [ + { + "name": "type", + "type": "String", + "collection": false, + "description": "Can be `critical` or `informational`. The default is `informational`", + "required": false, + "possibleValues": [ + { + "value": "critical" + }, + { + "value": "informational" + } + ] + } + ], + "returns": { + "type": "Integer", + "collection": false, + "description": "an ID representing the request." + }, + "type": "Function" + }, + { + "name": "cancelBounce", + "signature": "(id)", + "platforms": [ + "macOS" + ], + "description": "Cancel the bounce of id.", + "parameters": [ + { + "name": "id", + "type": "Integer", + "collection": false, + "required": true + } + ], + "type": "Function" + }, + { + "name": "downloadFinished", + "signature": "(filePath)", + "platforms": [ + "macOS" + ], + "description": "Bounces the Downloads stack if the filePath is inside the Downloads folder.", + "parameters": [ + { + "name": "filePath", + "type": "String", + "collection": false, + "required": true + } + ], + "type": "Function" + }, + { + "name": "setBadge", + "signature": "(text)", + "platforms": [ + "macOS" + ], + "description": "Sets the string to be displayed in the dock’s badging area.", + "parameters": [ + { + "name": "text", + "type": "String", + "collection": false, + "required": true + } + ], + "type": "Function" + }, + { + "name": "getBadge", + "signature": "()", + "platforms": [ + "macOS" + ], + "returns": { + "type": "String", + "collection": false, + "description": "The badge string of the dock." + }, + "type": "Function" + }, + { + "name": "hide", + "signature": "()", + "platforms": [ + "macOS" + ], + "description": "Hides the dock icon.", + "type": "Function" + }, + { + "name": "show", + "signature": "()", + "platforms": [ + "macOS" + ], + "description": "Shows the dock icon.", + "type": "Function" + }, + { + "name": "isVisible", + "signature": "()", + "platforms": [ + "macOS" + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the dock icon is visible. The app.dock.show() call is asynchronous so this method might not return true immediately after that call." + }, + "type": "Function" + }, + { + "name": "setMenu", + "signature": "(menu)", + "platforms": [ + "macOS" + ], + "description": "Sets the application's dock menu.", + "parameters": [ + { + "name": "menu", + "type": "Menu", + "collection": false, + "required": true + } + ], + "type": "Function" + }, + { + "name": "setIcon", + "signature": "(image)", + "platforms": [ + "macOS" + ], + "description": "Sets the image associated with this dock icon.", + "parameters": [ + { + "name": "image", + "type": [ + { + "typeName": "NativeImage", + "collection": false + }, + { + "typeName": "String", + "collection": false + } + ], + "collection": false, + "required": true + } + ], + "type": "Function" + } + ], + "apiType": "properties", + "fullSignature": "app.dock", + "tldr": null, + "slug": "appdock", + "url": "https://electronjs.org/docs/api/app#appdock", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:dock", + "api:appdock", + "api:app.dock", + "doc:dock", + "doc:appdock", + "doc:app.dock" + ] + }, + { + "objectID": "api-app#appquit", + "name": "quit", + "signature": "()", + "description": "Try to close all windows. The before-quit event will be emitted first. If all windows are successfully closed, the will-quit event will be emitted and by default the application will terminate. This method guarantees that all beforeunload and unload event handlers are correctly executed. It is possible that a window cancels the quitting by returning false in the beforeunload event handler.", + "apiType": "methods", + "fullSignature": "app.quit", + "tldr": "Try to close all windows.", + "slug": "appquit", + "url": "https://electronjs.org/docs/api/app#appquit", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:quit", + "api:appquit", + "api:app.quit", + "doc:quit", + "doc:appquit", + "doc:app.quit" + ] + }, + { + "objectID": "api-app#appexit", + "name": "exit", + "signature": "([exitCode])", + "description": "Exits immediately with exitCode. exitCode defaults to 0. All windows will be closed immediately without asking the user, and the before-quit and will-quit events will not be emitted.", + "parameters": [ + { + "name": "exitCode", + "type": "Integer", + "collection": false, + "required": false + } + ], + "apiType": "methods", + "fullSignature": "app.exit", + "tldr": "Exits immediately with exitCode.", + "slug": "appexit", + "url": "https://electronjs.org/docs/api/app#appexit", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:exit", + "api:appexit", + "api:app.exit", + "doc:exit", + "doc:appexit", + "doc:app.exit" + ] + }, + { + "objectID": "api-app#apprelaunch", + "name": "relaunch", + "signature": "([options])", + "description": "Relaunches the app when current instance exits. By default, the new instance will use the same working directory and command line arguments with current instance. When args is specified, the args will be passed as command line arguments instead. When execPath is specified, the execPath will be executed for relaunch instead of current app. Note that this method does not quit the app when executed, you have to call app.quit or app.exit after calling app.relaunch to make the app restart. When app.relaunch is called for multiple times, multiple instances will be started after current instance exited. An example of restarting current instance immediately and adding a new command line argument to the new instance:", + "parameters": [ + { + "name": "options", + "type": "Object", + "collection": false, + "required": false, + "properties": [ + { + "name": "args", + "type": "String", + "collection": true, + "description": "", + "required": false + }, + { + "name": "execPath", + "type": "String", + "collection": false, + "description": "", + "required": false + } + ] + } + ], + "apiType": "methods", + "fullSignature": "app.relaunch", + "tldr": "Relaunches the app when current instance exits.", + "slug": "apprelaunch", + "url": "https://electronjs.org/docs/api/app#apprelaunch", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:relaunch", + "api:apprelaunch", + "api:app.relaunch", + "doc:relaunch", + "doc:apprelaunch", + "doc:app.relaunch" + ] + }, + { + "objectID": "api-app#appisready", + "name": "isReady", + "signature": "()", + "returns": { + "type": "Boolean", + "collection": false, + "description": "true if Electron has finished initializing, false otherwise." + }, + "apiType": "methods", + "fullSignature": "app.isReady", + "tldr": "Returns true if Electron has finished initializing, false otherwise.", + "slug": "appisready", + "url": "https://electronjs.org/docs/api/app#appisready", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isReady", + "api:appisready", + "api:app.isReady", + "doc:isReady", + "doc:appisready", + "doc:app.isReady" + ] + }, + { + "objectID": "api-app#appwhenready", + "name": "whenReady", + "signature": "()", + "returns": { + "type": "Promise", + "collection": false, + "innerType": "void", + "description": "fulfilled when Electron is initialized. May be used as a convenient alternative to checking app.isReady() and subscribing to the ready event if the app is not ready yet." + }, + "apiType": "methods", + "fullSignature": "app.whenReady", + "tldr": "Returns fulfilled when Electron is initialized. May be used as a convenient alternative to checking app.isReady() and subscribing to the ready event if the app is not ready yet.", + "slug": "appwhenready", + "url": "https://electronjs.org/docs/api/app#appwhenready", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:whenReady", + "api:appwhenready", + "api:app.whenReady", + "doc:whenReady", + "doc:appwhenready", + "doc:app.whenReady" + ] + }, + { + "objectID": "api-app#appfocus", + "name": "focus", + "signature": "()", + "description": "On Linux, focuses on the first visible window. On macOS, makes the application the active app. On Windows, focuses on the application's first window.", + "apiType": "methods", + "fullSignature": "app.focus", + "tldr": "On Linux, focuses on the first visible window.", + "slug": "appfocus", + "url": "https://electronjs.org/docs/api/app#appfocus", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:focus", + "api:appfocus", + "api:app.focus", + "doc:focus", + "doc:appfocus", + "doc:app.focus" + ] + }, + { + "objectID": "api-app#apphide", + "name": "hide", + "signature": "()", + "platforms": [ + "macOS" + ], + "description": "Hides all application windows without minimizing them.", + "apiType": "methods", + "fullSignature": "app.hide", + "tldr": "Hides all application windows without minimizing them.", + "slug": "apphide", + "url": "https://electronjs.org/docs/api/app#apphide", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:hide", + "api:apphide", + "api:app.hide", + "doc:hide", + "doc:apphide", + "doc:app.hide" + ] + }, + { + "objectID": "api-app#appshow", + "name": "show", + "signature": "()", + "platforms": [ + "macOS" + ], + "description": "Shows application windows after they were hidden. Does not automatically focus them.", + "apiType": "methods", + "fullSignature": "app.show", + "tldr": "Shows application windows after they were hidden.", + "slug": "appshow", + "url": "https://electronjs.org/docs/api/app#appshow", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:show", + "api:appshow", + "api:app.show", + "doc:show", + "doc:appshow", + "doc:app.show" + ] + }, + { + "objectID": "api-app#appgetapppath", + "name": "getAppPath", + "signature": "()", + "returns": { + "type": "String", + "collection": false, + "description": "The current application directory." + }, + "apiType": "methods", + "fullSignature": "app.getAppPath", + "tldr": "Returns the current application directory.", + "slug": "appgetapppath", + "url": "https://electronjs.org/docs/api/app#appgetapppath", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getAppPath", + "api:appgetapppath", + "api:app.getAppPath", + "doc:getAppPath", + "doc:appgetapppath", + "doc:app.getAppPath" + ] + }, + { + "objectID": "api-app#appgetpath", + "name": "getPath", + "signature": "(name)", + "description": "You can request the following paths by the name:", + "parameters": [ + { + "name": "name", + "type": "String", + "collection": false, + "required": true + } + ], + "returns": { + "type": "String", + "collection": false, + "description": "A path to a special directory or file associated with name. On failure, an Error is thrown." + }, + "apiType": "methods", + "fullSignature": "app.getPath", + "tldr": "You can request the following paths by the name:.", + "slug": "appgetpath", + "url": "https://electronjs.org/docs/api/app#appgetpath", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getPath", + "api:appgetpath", + "api:app.getPath", + "doc:getPath", + "doc:appgetpath", + "doc:app.getPath" + ] + }, + { + "objectID": "api-app#appgetfileicon", + "name": "getFileIcon", + "signature": "(path[, options], callback)", + "description": "Fetches a path's associated icon. On Windows, there a 2 kinds of icons: On Linux and macOS, icons depend on the application associated with file mime type. Deprecated Soon", + "parameters": [ + { + "name": "path", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "options", + "type": "Object", + "collection": false, + "required": false, + "properties": [ + { + "name": "size", + "type": "String", + "collection": false, + "description": "", + "required": true, + "possibleValues": [ + { + "value": "small", + "description": "16x16" + }, + { + "value": "normal", + "description": "32x32" + }, + { + "value": "large", + "description": "48x48 on Linux, 32x32 on Windows, unsupported on macOS." + } + ] + } + ] + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "error", + "type": "Error", + "collection": false, + "description": "", + "required": true + }, + { + "name": "icon", + "type": "NativeImage", + "collection": false, + "description": "", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "app.getFileIcon", + "tldr": "Fetches a path's associated icon.", + "slug": "appgetfileicon", + "url": "https://electronjs.org/docs/api/app#appgetfileicon", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getFileIcon", + "api:appgetfileicon", + "api:app.getFileIcon", + "doc:getFileIcon", + "doc:appgetfileicon", + "doc:app.getFileIcon" + ] + }, + { + "objectID": "api-app#appgetfileicon-1", + "name": "getFileIcon", + "signature": "(path[, options])", + "description": "Fetches a path's associated icon. On Windows, there a 2 kinds of icons: On Linux and macOS, icons depend on the application associated with file mime type.", + "parameters": [ + { + "name": "path", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "options", + "type": "Object", + "collection": false, + "required": false, + "properties": [ + { + "name": "size", + "type": "String", + "collection": false, + "description": "", + "required": true, + "possibleValues": [ + { + "value": "small", + "description": "16x16" + }, + { + "value": "normal", + "description": "32x32" + }, + { + "value": "large", + "description": "48x48 on Linux, 32x32 on Windows, unsupported on macOS." + } + ] + } + ] + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "NativeImage", + "description": "fulfilled with the app's icon, which is a NativeImage." + }, + "apiType": "methods", + "fullSignature": "app.getFileIcon", + "tldr": "Fetches a path's associated icon.", + "slug": "appgetfileicon-1", + "url": "https://electronjs.org/docs/api/app#appgetfileicon-1", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getFileIcon", + "api:appgetfileicon-1", + "api:app.getFileIcon", + "doc:getFileIcon", + "doc:appgetfileicon-1", + "doc:app.getFileIcon" + ] + }, + { + "objectID": "api-app#appsetpath", + "name": "setPath", + "signature": "(name, path)", + "description": "Overrides the path to a special directory or file associated with name. If the path specifies a directory that does not exist, the directory will be created by this method. On failure an Error is thrown. You can only override paths of a name defined in app.getPath. By default, web pages' cookies and caches will be stored under the userData directory. If you want to change this location, you have to override the userData path before the ready event of the app module is emitted.", + "parameters": [ + { + "name": "name", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "path", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "app.setPath", + "tldr": "Overrides the path to a special directory or file associated with name.", + "slug": "appsetpath", + "url": "https://electronjs.org/docs/api/app#appsetpath", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setPath", + "api:appsetpath", + "api:app.setPath", + "doc:setPath", + "doc:appsetpath", + "doc:app.setPath" + ] + }, + { + "objectID": "api-app#appgetversion", + "name": "getVersion", + "signature": "()", + "returns": { + "type": "String", + "collection": false, + "description": "The version of the loaded application. If no version is found in the application's package.json file, the version of the current bundle or executable is returned." + }, + "apiType": "methods", + "fullSignature": "app.getVersion", + "tldr": "Returns the version of the loaded application. If no version is found in the application's package.json file, the version of the current bundle or executable is returned.", + "slug": "appgetversion", + "url": "https://electronjs.org/docs/api/app#appgetversion", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getVersion", + "api:appgetversion", + "api:app.getVersion", + "doc:getVersion", + "doc:appgetversion", + "doc:app.getVersion" + ] + }, + { + "objectID": "api-app#appgetname", + "name": "getName", + "signature": "()", + "description": "Usually the name field of package.json is a short lowercased name, according to the npm modules spec. You should usually also specify a productName field, which is your application's full capitalized name, and which will be preferred over name by Electron.", + "returns": { + "type": "String", + "collection": false, + "description": "The current application's name, which is the name in the application's package.json file." + }, + "apiType": "methods", + "fullSignature": "app.getName", + "tldr": "Usually the name field of package.json is a short lowercased name, according to the npm modules spec.", + "slug": "appgetname", + "url": "https://electronjs.org/docs/api/app#appgetname", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getName", + "api:appgetname", + "api:app.getName", + "doc:getName", + "doc:appgetname", + "doc:app.getName" + ] + }, + { + "objectID": "api-app#appsetname", + "name": "setName", + "signature": "(name)", + "description": "Overrides the current application's name.", + "parameters": [ + { + "name": "name", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "app.setName", + "tldr": "Overrides the current application's name.", + "slug": "appsetname", + "url": "https://electronjs.org/docs/api/app#appsetname", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setName", + "api:appsetname", + "api:app.setName", + "doc:setName", + "doc:appsetname", + "doc:app.setName" + ] + }, + { + "objectID": "api-app#appgetlocale", + "name": "getLocale", + "signature": "()", + "description": "To set the locale, you'll want to use a command line switch at app startup, which may be found here. Note: When distributing your packaged app, you have to also ship the locales folder. Note: On Windows, you have to call it after the ready events gets emitted.", + "returns": { + "type": "String", + "collection": false, + "description": "The current application locale. Possible return values are documented here." + }, + "apiType": "methods", + "fullSignature": "app.getLocale", + "tldr": "To set the locale, you'll want to use a command line switch at app startup, which may be found here.", + "slug": "appgetlocale", + "url": "https://electronjs.org/docs/api/app#appgetlocale", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getLocale", + "api:appgetlocale", + "api:app.getLocale", + "doc:getLocale", + "doc:appgetlocale", + "doc:app.getLocale" + ] + }, + { + "objectID": "api-app#appgetlocalecountrycode", + "name": "getLocaleCountryCode", + "signature": "()", + "description": "Note: When unable to detect locale country code, it returns empty string.", + "returns": { + "type": "string", + "collection": false, + "description": "User operating system's locale two-letter ISO 3166 country code. The value is taken from native OS APIs." + }, + "apiType": "methods", + "fullSignature": "app.getLocaleCountryCode", + "tldr": "Note: When unable to detect locale country code, it returns empty string.", + "slug": "appgetlocalecountrycode", + "url": "https://electronjs.org/docs/api/app#appgetlocalecountrycode", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getLocaleCountryCode", + "api:appgetlocalecountrycode", + "api:app.getLocaleCountryCode", + "doc:getLocaleCountryCode", + "doc:appgetlocalecountrycode", + "doc:app.getLocaleCountryCode" + ] + }, + { + "objectID": "api-app#appaddrecentdocument", + "name": "addRecentDocument", + "signature": "(path)", + "platforms": [ + "macOS", + "Windows" + ], + "description": "Adds path to the recent documents list. This list is managed by the OS. On Windows, you can visit the list from the task bar, and on macOS, you can visit it from dock menu.", + "parameters": [ + { + "name": "path", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "app.addRecentDocument", + "tldr": "Adds path to the recent documents list.", + "slug": "appaddrecentdocument", + "url": "https://electronjs.org/docs/api/app#appaddrecentdocument", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:addRecentDocument", + "api:appaddrecentdocument", + "api:app.addRecentDocument", + "doc:addRecentDocument", + "doc:appaddrecentdocument", + "doc:app.addRecentDocument" + ] + }, + { + "objectID": "api-app#appclearrecentdocuments", + "name": "clearRecentDocuments", + "signature": "()", + "platforms": [ + "macOS", + "Windows" + ], + "description": "Clears the recent documents list.", + "apiType": "methods", + "fullSignature": "app.clearRecentDocuments", + "tldr": "Clears the recent documents list.", + "slug": "appclearrecentdocuments", + "url": "https://electronjs.org/docs/api/app#appclearrecentdocuments", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:clearRecentDocuments", + "api:appclearrecentdocuments", + "api:app.clearRecentDocuments", + "doc:clearRecentDocuments", + "doc:appclearrecentdocuments", + "doc:app.clearRecentDocuments" + ] + }, + { + "objectID": "api-app#appsetasdefaultprotocolclient", + "name": "setAsDefaultProtocolClient", + "signature": "(protocol[, path, args])", + "description": "This method sets the current executable as the default handler for a protocol (aka URI scheme). It allows you to integrate your app deeper into the operating system. Once registered, all links with your-protocol:// will be opened with the current executable. The whole link, including protocol, will be passed to your application as a parameter. On Windows, you can provide optional parameters path, the path to your executable, and args, an array of arguments to be passed to your executable when it launches. Note: On macOS, you can only register protocols that have been added to your app's info.plist, which can not be modified at runtime. You can however change the file with a simple text editor or script during build time. Please refer to Apple's documentation for details. The API uses the Windows Registry and LSSetDefaultHandlerForURLScheme internally.", + "parameters": [ + { + "name": "protocol", + "type": "String", + "collection": false, + "description": "The name of your protocol, without `://`. If you want your app to handle `electron://` links, call this method with `electron` as the parameter.", + "required": true + }, + { + "name": "path", + "type": "String", + "collection": false, + "description": "Defaults to `process.execPath`", + "required": false + }, + { + "name": "args", + "type": "String", + "collection": true, + "description": "Defaults to an empty array", + "required": false + } + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the call succeeded." + }, + "apiType": "methods", + "fullSignature": "app.setAsDefaultProtocolClient", + "tldr": "This method sets the current executable as the default handler for a protocol (aka URI scheme).", + "slug": "appsetasdefaultprotocolclient", + "url": "https://electronjs.org/docs/api/app#appsetasdefaultprotocolclient", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setAsDefaultProtocolClient", + "api:appsetasdefaultprotocolclient", + "api:app.setAsDefaultProtocolClient", + "doc:setAsDefaultProtocolClient", + "doc:appsetasdefaultprotocolclient", + "doc:app.setAsDefaultProtocolClient" + ] + }, + { + "objectID": "api-app#appremoveasdefaultprotocolclient", + "name": "removeAsDefaultProtocolClient", + "signature": "(protocol[, path, args])", + "platforms": [ + "macOS", + "Windows" + ], + "description": "This method checks if the current executable as the default handler for a protocol (aka URI scheme). If so, it will remove the app as the default handler.", + "parameters": [ + { + "name": "protocol", + "type": "String", + "collection": false, + "description": "The name of your protocol, without `://`.", + "required": true + }, + { + "name": "path", + "type": "String", + "collection": false, + "description": "Defaults to `process.execPath`", + "required": false + }, + { + "name": "args", + "type": "String", + "collection": true, + "description": "Defaults to an empty array", + "required": false + } + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the call succeeded." + }, + "apiType": "methods", + "fullSignature": "app.removeAsDefaultProtocolClient", + "tldr": "This method checks if the current executable as the default handler for a protocol (aka URI scheme).", + "slug": "appremoveasdefaultprotocolclient", + "url": "https://electronjs.org/docs/api/app#appremoveasdefaultprotocolclient", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:removeAsDefaultProtocolClient", + "api:appremoveasdefaultprotocolclient", + "api:app.removeAsDefaultProtocolClient", + "doc:removeAsDefaultProtocolClient", + "doc:appremoveasdefaultprotocolclient", + "doc:app.removeAsDefaultProtocolClient" + ] + }, + { + "objectID": "api-app#appisdefaultprotocolclient", + "name": "isDefaultProtocolClient", + "signature": "(protocol[, path, args])", + "description": "This method checks if the current executable is the default handler for a protocol (aka URI scheme). If so, it will return true. Otherwise, it will return false. Note: On macOS, you can use this method to check if the app has been registered as the default protocol handler for a protocol. You can also verify this by checking ~/Library/Preferences/com.apple.LaunchServices.plist on the macOS machine. Please refer to Apple's documentation for details. The API uses the Windows Registry and LSCopyDefaultHandlerForURLScheme internally.", + "parameters": [ + { + "name": "protocol", + "type": "String", + "collection": false, + "description": "The name of your protocol, without `://`.", + "required": true + }, + { + "name": "path", + "type": "String", + "collection": false, + "description": "Defaults to `process.execPath`", + "required": false + }, + { + "name": "args", + "type": "String", + "collection": true, + "description": "Defaults to an empty array", + "required": false + } + ], + "returns": { + "type": "Boolean", + "collection": false + }, + "apiType": "methods", + "fullSignature": "app.isDefaultProtocolClient", + "tldr": "This method checks if the current executable is the default handler for a protocol (aka URI scheme).", + "slug": "appisdefaultprotocolclient", + "url": "https://electronjs.org/docs/api/app#appisdefaultprotocolclient", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isDefaultProtocolClient", + "api:appisdefaultprotocolclient", + "api:app.isDefaultProtocolClient", + "doc:isDefaultProtocolClient", + "doc:appisdefaultprotocolclient", + "doc:app.isDefaultProtocolClient" + ] + }, + { + "objectID": "api-app#appsetusertasks", + "name": "setUserTasks", + "signature": "(tasks)", + "platforms": [ + "Windows" + ], + "description": "Adds tasks to the Tasks category of the JumpList on Windows. tasks is an array of Task objects. Note: If you'd like to customize the Jump List even more use app.setJumpList(categories) instead.", + "parameters": [ + { + "name": "tasks", + "type": "Task", + "collection": true, + "description": "Array of `Task` objects", + "required": true + } + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the call succeeded." + }, + "apiType": "methods", + "fullSignature": "app.setUserTasks", + "tldr": "Adds tasks to the Tasks category of the JumpList on Windows.", + "slug": "appsetusertasks", + "url": "https://electronjs.org/docs/api/app#appsetusertasks", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setUserTasks", + "api:appsetusertasks", + "api:app.setUserTasks", + "doc:setUserTasks", + "doc:appsetusertasks", + "doc:app.setUserTasks" + ] + }, + { + "objectID": "api-app#appgetjumplistsettings", + "name": "getJumpListSettings", + "signature": "()", + "platforms": [ + "Windows" + ], + "returns": { + "type": "Object", + "collection": false, + "properties": [ + { + "name": "minItems", + "type": "Integer", + "collection": false, + "description": "The minimum number of items that will be shown in the Jump List (for a more detailed description of this value see the ).", + "required": true + }, + { + "name": "removedItems", + "type": "JumpListItem", + "collection": true, + "description": "Array of JumpListItem objects that correspond to items that the user has explicitly removed from custom categories in the Jump List. These items must not be re-added to the Jump List in the call to app.setJumpList(), Windows will not display any custom category that contains any of the removed items.", + "required": true + } + ] + }, + "apiType": "methods", + "fullSignature": "app.getJumpListSettings", + "tldr": null, + "slug": "appgetjumplistsettings", + "url": "https://electronjs.org/docs/api/app#appgetjumplistsettings", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getJumpListSettings", + "api:appgetjumplistsettings", + "api:app.getJumpListSettings", + "doc:getJumpListSettings", + "doc:appgetjumplistsettings", + "doc:app.getJumpListSettings" + ] + }, + { + "objectID": "api-app#appsetjumplist", + "name": "setJumpList", + "signature": "(categories)", + "platforms": [ + "Windows" + ], + "description": "Sets or removes a custom Jump List for the application, and returns one of the following strings: If categories is null the previously set custom Jump List (if any) will be replaced by the standard Jump List for the app (managed by Windows). Note: If a JumpListCategory object has neither the type nor the name property set then its type is assumed to be tasks. If the name property is set but the type property is omitted then the type is assumed to be custom. Note: Users can remove items from custom categories, and Windows will not allow a removed item to be added back into a custom category until after the next successful call to app.setJumpList(categories). Any attempt to re-add a removed item to a custom category earlier than that will result in the entire custom category being omitted from the Jump List. The list of removed items can be obtained using app.getJumpListSettings(). Here's a very simple example of creating a custom Jump List:", + "parameters": [ + { + "name": "categories", + "type": "JumpListCategory", + "collection": true, + "description": "or `null` Array of `JumpListCategory` objects.", + "required": true + } + ], + "apiType": "methods", + "fullSignature": "app.setJumpList", + "tldr": "Sets or removes a custom Jump List for the application, and returns one of the following strings: If categories is null the previously set custom Jump List (if any) will be replaced by the standard Jump List for the app (managed by Windows).", + "slug": "appsetjumplist", + "url": "https://electronjs.org/docs/api/app#appsetjumplist", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setJumpList", + "api:appsetjumplist", + "api:app.setJumpList", + "doc:setJumpList", + "doc:appsetjumplist", + "doc:app.setJumpList" + ] + }, + { + "objectID": "api-app#apprequestsingleinstancelock", + "name": "requestSingleInstanceLock", + "signature": "()", + "description": "This method makes your application a Single Instance Application - instead of allowing multiple instances of your app to run, this will ensure that only a single instance of your app is running, and other instances signal this instance and exit. The return value of this method indicates whether or not this instance of your application successfully obtained the lock. If it failed to obtain the lock, you can assume that another instance of your application is already running with the lock and exit immediately. I.e. This method returns true if your process is the primary instance of your application and your app should continue loading. It returns false if your process should immediately quit as it has sent its parameters to another instance that has already acquired the lock. On macOS, the system enforces single instance automatically when users try to open a second instance of your app in Finder, and the open-file and open-url events will be emitted for that. However when users start your app in command line, the system's single instance mechanism will be bypassed, and you have to use this method to ensure single instance. An example of activating the window of primary instance when a second instance starts:", + "returns": { + "type": "Boolean", + "collection": false + }, + "apiType": "methods", + "fullSignature": "app.requestSingleInstanceLock", + "tldr": "This method makes your application a Single Instance Application - instead of allowing multiple instances of your app to run, this will ensure that only a single instance of your app is running, and other instances signal this instance and exit.", + "slug": "apprequestsingleinstancelock", + "url": "https://electronjs.org/docs/api/app#apprequestsingleinstancelock", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:requestSingleInstanceLock", + "api:apprequestsingleinstancelock", + "api:app.requestSingleInstanceLock", + "doc:requestSingleInstanceLock", + "doc:apprequestsingleinstancelock", + "doc:app.requestSingleInstanceLock" + ] + }, + { + "objectID": "api-app#apphassingleinstancelock", + "name": "hasSingleInstanceLock", + "signature": "()", + "description": "This method returns whether or not this instance of your app is currently holding the single instance lock. You can request the lock with app.requestSingleInstanceLock() and release with app.releaseSingleInstanceLock()", + "returns": { + "type": "Boolean", + "collection": false + }, + "apiType": "methods", + "fullSignature": "app.hasSingleInstanceLock", + "tldr": "This method returns whether or not this instance of your app is currently holding the single instance lock.", + "slug": "apphassingleinstancelock", + "url": "https://electronjs.org/docs/api/app#apphassingleinstancelock", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:hasSingleInstanceLock", + "api:apphassingleinstancelock", + "api:app.hasSingleInstanceLock", + "doc:hasSingleInstanceLock", + "doc:apphassingleinstancelock", + "doc:app.hasSingleInstanceLock" + ] + }, + { + "objectID": "api-app#appreleasesingleinstancelock", + "name": "releaseSingleInstanceLock", + "signature": "()", + "description": "Releases all locks that were created by requestSingleInstanceLock. This will allow multiple instances of the application to once again run side by side.", + "apiType": "methods", + "fullSignature": "app.releaseSingleInstanceLock", + "tldr": "Releases all locks that were created by requestSingleInstanceLock.", + "slug": "appreleasesingleinstancelock", + "url": "https://electronjs.org/docs/api/app#appreleasesingleinstancelock", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:releaseSingleInstanceLock", + "api:appreleasesingleinstancelock", + "api:app.releaseSingleInstanceLock", + "doc:releaseSingleInstanceLock", + "doc:appreleasesingleinstancelock", + "doc:app.releaseSingleInstanceLock" + ] + }, + { + "objectID": "api-app#appsetuseractivity", + "name": "setUserActivity", + "signature": "(type, userInfo[, webpageURL])", + "platforms": [ + "macOS" + ], + "description": "Creates an NSUserActivity and sets it as the current activity. The activity is eligible for Handoff to another device afterward.", + "parameters": [ + { + "name": "type", + "type": "String", + "collection": false, + "description": "Uniquely identifies the activity. Maps to .", + "required": true + }, + { + "name": "userInfo", + "type": "Object", + "collection": false, + "description": "App-specific state to store for use by another device.", + "required": true + }, + { + "name": "webpageURL", + "type": "String", + "collection": false, + "description": "The webpage to load in a browser if no suitable app is installed on the resuming device. The scheme must be `http` or `https`.", + "required": false + } + ], + "apiType": "methods", + "fullSignature": "app.setUserActivity", + "tldr": "Creates an NSUserActivity and sets it as the current activity.", + "slug": "appsetuseractivity", + "url": "https://electronjs.org/docs/api/app#appsetuseractivity", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setUserActivity", + "api:appsetuseractivity", + "api:app.setUserActivity", + "doc:setUserActivity", + "doc:appsetuseractivity", + "doc:app.setUserActivity" + ] + }, + { + "objectID": "api-app#appgetcurrentactivitytype", + "name": "getCurrentActivityType", + "signature": "()", + "platforms": [ + "macOS" + ], + "returns": { + "type": "String", + "collection": false, + "description": "The type of the currently running activity." + }, + "apiType": "methods", + "fullSignature": "app.getCurrentActivityType", + "tldr": "Returns the type of the currently running activity.", + "slug": "appgetcurrentactivitytype", + "url": "https://electronjs.org/docs/api/app#appgetcurrentactivitytype", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getCurrentActivityType", + "api:appgetcurrentactivitytype", + "api:app.getCurrentActivityType", + "doc:getCurrentActivityType", + "doc:appgetcurrentactivitytype", + "doc:app.getCurrentActivityType" + ] + }, + { + "objectID": "api-app#appinvalidatecurrentactivity", + "name": "invalidateCurrentActivity", + "signature": "()", + "platforms": [ + "macOS" + ], + "description": "Invalidates the current Handoff user activity.", + "parameters": [ + { + "name": "type", + "type": "String", + "collection": false, + "description": "Uniquely identifies the activity. Maps to .", + "required": true + } + ], + "apiType": "methods", + "fullSignature": "app.invalidateCurrentActivity", + "tldr": "Invalidates the current Handoff user activity.", + "slug": "appinvalidatecurrentactivity", + "url": "https://electronjs.org/docs/api/app#appinvalidatecurrentactivity", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:invalidateCurrentActivity", + "api:appinvalidatecurrentactivity", + "api:app.invalidateCurrentActivity", + "doc:invalidateCurrentActivity", + "doc:appinvalidatecurrentactivity", + "doc:app.invalidateCurrentActivity" + ] + }, + { + "objectID": "api-app#appupdatecurrentactivity", + "name": "updateCurrentActivity", + "signature": "(type, userInfo)", + "platforms": [ + "macOS" + ], + "description": "Updates the current activity if its type matches type, merging the entries from userInfo into its current userInfo dictionary.", + "parameters": [ + { + "name": "type", + "type": "String", + "collection": false, + "description": "Uniquely identifies the activity. Maps to .", + "required": true + }, + { + "name": "userInfo", + "type": "Object", + "collection": false, + "description": "App-specific state to store for use by another device.", + "required": true + } + ], + "apiType": "methods", + "fullSignature": "app.updateCurrentActivity", + "tldr": "Updates the current activity if its type matches type, merging the entries from userInfo into its current userInfo dictionary.", + "slug": "appupdatecurrentactivity", + "url": "https://electronjs.org/docs/api/app#appupdatecurrentactivity", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:updateCurrentActivity", + "api:appupdatecurrentactivity", + "api:app.updateCurrentActivity", + "doc:updateCurrentActivity", + "doc:appupdatecurrentactivity", + "doc:app.updateCurrentActivity" + ] + }, + { + "objectID": "api-app#appsetappusermodelid", + "name": "setAppUserModelId", + "signature": "(id)", + "platforms": [ + "Windows" + ], + "description": "Changes the Application User Model ID to id.", + "parameters": [ + { + "name": "id", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "app.setAppUserModelId", + "tldr": "Changes the Application User Model ID to id.", + "slug": "appsetappusermodelid", + "url": "https://electronjs.org/docs/api/app#appsetappusermodelid", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setAppUserModelId", + "api:appsetappusermodelid", + "api:app.setAppUserModelId", + "doc:setAppUserModelId", + "doc:appsetappusermodelid", + "doc:app.setAppUserModelId" + ] + }, + { + "objectID": "api-app#appimportcertificate", + "name": "importCertificate", + "signature": "(options, callback)", + "platforms": [ + "LINUX" + ], + "description": "Imports the certificate in pkcs12 format into the platform certificate store. callback is called with the result of import operation, a value of 0 indicates success while any other value indicates failure according to Chromium net_error_list.", + "parameters": [ + { + "name": "options", + "type": "Object", + "collection": false, + "required": true, + "properties": [ + { + "name": "certificate", + "type": "String", + "collection": false, + "description": "Path for the pkcs12 file.", + "required": true + }, + { + "name": "password", + "type": "String", + "collection": false, + "description": "Passphrase for the certificate.", + "required": true + } + ] + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "result", + "type": "Integer", + "collection": false, + "description": "Result of import.", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "app.importCertificate", + "tldr": "Imports the certificate in pkcs12 format into the platform certificate store.", + "slug": "appimportcertificate", + "url": "https://electronjs.org/docs/api/app#appimportcertificate", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:importCertificate", + "api:appimportcertificate", + "api:app.importCertificate", + "doc:importCertificate", + "doc:appimportcertificate", + "doc:app.importCertificate" + ] + }, + { + "objectID": "api-app#appdisablehardwareacceleration", + "name": "disableHardwareAcceleration", + "signature": "()", + "description": "Disables hardware acceleration for current app. This method can only be called before app is ready.", + "apiType": "methods", + "fullSignature": "app.disableHardwareAcceleration", + "tldr": "Disables hardware acceleration for current app.", + "slug": "appdisablehardwareacceleration", + "url": "https://electronjs.org/docs/api/app#appdisablehardwareacceleration", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:disableHardwareAcceleration", + "api:appdisablehardwareacceleration", + "api:app.disableHardwareAcceleration", + "doc:disableHardwareAcceleration", + "doc:appdisablehardwareacceleration", + "doc:app.disableHardwareAcceleration" + ] + }, + { + "objectID": "api-app#appdisabledomainblockingfor3dapis", + "name": "disableDomainBlockingFor3DAPIs", + "signature": "()", + "description": "By default, Chromium disables 3D APIs (e.g. WebGL) until restart on a per domain basis if the GPU processes crashes too frequently. This function disables that behaviour. This method can only be called before app is ready.", + "apiType": "methods", + "fullSignature": "app.disableDomainBlockingFor3DAPIs", + "tldr": "By default, Chromium disables 3D APIs (e.g.", + "slug": "appdisabledomainblockingfor3dapis", + "url": "https://electronjs.org/docs/api/app#appdisabledomainblockingfor3dapis", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:disableDomainBlockingFor3DAPIs", + "api:appdisabledomainblockingfor3dapis", + "api:app.disableDomainBlockingFor3DAPIs", + "doc:disableDomainBlockingFor3DAPIs", + "doc:appdisabledomainblockingfor3dapis", + "doc:app.disableDomainBlockingFor3DAPIs" + ] + }, + { + "objectID": "api-app#appgetappmetrics", + "name": "getAppMetrics", + "signature": "()", + "returns": { + "type": "ProcessMetric", + "collection": true, + "description": "Array of ProcessMetric objects that correspond to memory and cpu usage statistics of all the processes associated with the app." + }, + "apiType": "methods", + "fullSignature": "app.getAppMetrics", + "tldr": "Returns array of ProcessMetric objects that correspond to memory and cpu usage statistics of all the processes associated with the app.", + "slug": "appgetappmetrics", + "url": "https://electronjs.org/docs/api/app#appgetappmetrics", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getAppMetrics", + "api:appgetappmetrics", + "api:app.getAppMetrics", + "doc:getAppMetrics", + "doc:appgetappmetrics", + "doc:app.getAppMetrics" + ] + }, + { + "objectID": "api-app#appgetgpufeaturestatus", + "name": "getGPUFeatureStatus", + "signature": "()", + "returns": { + "type": "GPUFeatureStatus", + "collection": false, + "description": "The Graphics Feature Status from chrome://gpu/." + }, + "apiType": "methods", + "fullSignature": "app.getGPUFeatureStatus", + "tldr": "Returns the Graphics Feature Status from chrome://gpu/.", + "slug": "appgetgpufeaturestatus", + "url": "https://electronjs.org/docs/api/app#appgetgpufeaturestatus", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getGPUFeatureStatus", + "api:appgetgpufeaturestatus", + "api:app.getGPUFeatureStatus", + "doc:getGPUFeatureStatus", + "doc:appgetgpufeaturestatus", + "doc:app.getGPUFeatureStatus" + ] + }, + { + "objectID": "api-app#appgetgpuinfo", + "name": "getGPUInfo", + "signature": "(infoType)", + "description": "For infoType equal to complete: Promise is fulfilled with Object containing all the GPU Information as in chromium's GPUInfo object. This includes the version and driver information that's shown on chrome://gpu page. For infoType equal to basic: Promise is fulfilled with Object containing fewer attributes than when requested with complete. Here's an example of basic response: Using basic should be preferred if only basic information like vendorId or driverId is needed.", + "parameters": [ + { + "name": "infoType", + "type": "String", + "collection": false, + "description": "Values can be either `basic` for basic info or `complete` for complete info.", + "required": true + } + ], + "returns": { + "type": "Promise", + "collection": false + }, + "apiType": "methods", + "fullSignature": "app.getGPUInfo", + "tldr": "For infoType equal to complete: Promise is fulfilled with Object containing all the GPU Information as in chromium's GPUInfo object.", + "slug": "appgetgpuinfo", + "url": "https://electronjs.org/docs/api/app#appgetgpuinfo", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getGPUInfo", + "api:appgetgpuinfo", + "api:app.getGPUInfo", + "doc:getGPUInfo", + "doc:appgetgpuinfo", + "doc:app.getGPUInfo" + ] + }, + { + "objectID": "api-app#appsetbadgecount", + "name": "setBadgeCount", + "signature": "(count)", + "platforms": [ + "Linux", + "macOS" + ], + "description": "Sets the counter badge for current app. Setting the count to 0 will hide the badge. On macOS, it shows on the dock icon. On Linux, it only works for Unity launcher. Note: Unity launcher requires the existence of a .desktop file to work, for more information please read Desktop Environment Integration.", + "parameters": [ + { + "name": "count", + "type": "Integer", + "collection": false, + "required": true + } + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the call succeeded." + }, + "apiType": "methods", + "fullSignature": "app.setBadgeCount", + "tldr": "Sets the counter badge for current app.", + "slug": "appsetbadgecount", + "url": "https://electronjs.org/docs/api/app#appsetbadgecount", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setBadgeCount", + "api:appsetbadgecount", + "api:app.setBadgeCount", + "doc:setBadgeCount", + "doc:appsetbadgecount", + "doc:app.setBadgeCount" + ] + }, + { + "objectID": "api-app#appgetbadgecount", + "name": "getBadgeCount", + "signature": "()", + "platforms": [ + "Linux", + "macOS" + ], + "returns": { + "type": "Integer", + "collection": false, + "description": "The current value displayed in the counter badge." + }, + "apiType": "methods", + "fullSignature": "app.getBadgeCount", + "tldr": "Returns the current value displayed in the counter badge.", + "slug": "appgetbadgecount", + "url": "https://electronjs.org/docs/api/app#appgetbadgecount", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getBadgeCount", + "api:appgetbadgecount", + "api:app.getBadgeCount", + "doc:getBadgeCount", + "doc:appgetbadgecount", + "doc:app.getBadgeCount" + ] + }, + { + "objectID": "api-app#appisunityrunning", + "name": "isUnityRunning", + "signature": "()", + "platforms": [ + "Linux" + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the current desktop environment is Unity launcher." + }, + "apiType": "methods", + "fullSignature": "app.isUnityRunning", + "tldr": "Returns whether the current desktop environment is Unity launcher.", + "slug": "appisunityrunning", + "url": "https://electronjs.org/docs/api/app#appisunityrunning", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isUnityRunning", + "api:appisunityrunning", + "api:app.isUnityRunning", + "doc:isUnityRunning", + "doc:appisunityrunning", + "doc:app.isUnityRunning" + ] + }, + { + "objectID": "api-app#appgetloginitemsettings", + "name": "getLoginItemSettings", + "signature": "([options])", + "platforms": [ + "macOS", + "Windows" + ], + "description": "If you provided path and args options to app.setLoginItemSettings, then you need to pass the same arguments here for openAtLogin to be set correctly.", + "parameters": [ + { + "name": "options", + "type": "Object", + "collection": false, + "required": false, + "properties": [ + { + "name": "path", + "type": "String", + "collection": false, + "description": "The executable path to compare against. Defaults to process.execPath.", + "required": false + }, + { + "name": "args", + "type": "String", + "collection": true, + "description": "The command-line arguments to compare against. Defaults to an empty array.", + "required": false + } + ] + } + ], + "returns": { + "type": "Object", + "collection": false, + "properties": [ + { + "name": "options", + "type": "Object", + "collection": false, + "description": "", + "required": false, + "properties": [ + { + "name": "path", + "type": "String", + "collection": false, + "description": "The executable path to compare against. Defaults to process.execPath.", + "required": false + }, + { + "name": "args", + "type": "String", + "collection": true, + "description": "The command-line arguments to compare against. Defaults to an empty array.", + "required": false + } + ] + }, + { + "name": "openAtLogin", + "type": "Boolean", + "collection": false, + "description": "true if the app is set to open at login.", + "required": true + }, + { + "name": "openAsHidden", + "type": "Boolean", + "collection": false, + "description": "true if the app is set to open as hidden at login. This setting is not available on .", + "required": true + }, + { + "name": "wasOpenedAtLogin", + "type": "Boolean", + "collection": false, + "description": "true if the app was opened at login automatically. This setting is not available on .", + "required": true + }, + { + "name": "wasOpenedAsHidden", + "type": "Boolean", + "collection": false, + "description": "true if the app was opened as a hidden login item. This indicates that the app should not open any windows at startup. This setting is not available on .", + "required": true + }, + { + "name": "restoreState", + "type": "Boolean", + "collection": false, + "description": "true if the app was opened as a login item that should restore the state from the previous session. This indicates that the app should restore the windows that were open the last time the app was closed. This setting is not available on .", + "required": true + } + ] + }, + "apiType": "methods", + "fullSignature": "app.getLoginItemSettings", + "tldr": "If you provided path and args options to app.setLoginItemSettings, then you need to pass the same arguments here for openAtLogin to be set correctly.", + "slug": "appgetloginitemsettings", + "url": "https://electronjs.org/docs/api/app#appgetloginitemsettings", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getLoginItemSettings", + "api:appgetloginitemsettings", + "api:app.getLoginItemSettings", + "doc:getLoginItemSettings", + "doc:appgetloginitemsettings", + "doc:app.getLoginItemSettings" + ] + }, + { + "objectID": "api-app#appsetloginitemsettings", + "name": "setLoginItemSettings", + "signature": "(settings)", + "platforms": [ + "macOS", + "Windows" + ], + "description": "Set the app's login item settings. To work with Electron's autoUpdater on Windows, which uses Squirrel, you'll want to set the launch path to Update.exe, and pass arguments that specify your application name. For example:", + "parameters": [ + { + "name": "settings", + "type": "Object", + "collection": false, + "required": true, + "properties": [ + { + "name": "openAtLogin", + "type": "Boolean", + "collection": false, + "description": "true to open the app at login, false to remove the app as a login item. Defaults to false.", + "required": false + }, + { + "name": "openAsHidden", + "type": "Boolean", + "collection": false, + "description": "true to open the app as hidden. Defaults to false. The user can edit this setting from the System Preferences so app.getLoginItemSettings().wasOpenedAsHidden should be checked when the app is opened to know the current value. This setting is not available on .", + "required": false + }, + { + "name": "path", + "type": "String", + "collection": false, + "description": "The executable to launch at login. Defaults to process.execPath.", + "required": false + }, + { + "name": "args", + "type": "String", + "collection": true, + "description": "The command-line arguments to pass to the executable. Defaults to an empty array. Take care to wrap paths in quotes.", + "required": false + } + ] + } + ], + "apiType": "methods", + "fullSignature": "app.setLoginItemSettings", + "tldr": "Set the app's login item settings.", + "slug": "appsetloginitemsettings", + "url": "https://electronjs.org/docs/api/app#appsetloginitemsettings", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setLoginItemSettings", + "api:appsetloginitemsettings", + "api:app.setLoginItemSettings", + "doc:setLoginItemSettings", + "doc:appsetloginitemsettings", + "doc:app.setLoginItemSettings" + ] + }, + { + "objectID": "api-app#appisaccessibilitysupportenabled", + "name": "isAccessibilitySupportEnabled", + "signature": "()", + "platforms": [ + "macOS", + "Windows" + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "true if Chrome's accessibility support is enabled, false otherwise. This API will return true if the use of assistive technologies, such as screen readers, has been detected. See https://www.chromium.org/developers/design-documents/accessibility for more details." + }, + "apiType": "methods", + "fullSignature": "app.isAccessibilitySupportEnabled", + "tldr": "Returns true if Chrome's accessibility support is enabled, false otherwise. This API will return true if the use of assistive technologies, such as screen readers, has been detected. See https://www.chromium.org/developers/design-documents/accessibility for more details.", + "slug": "appisaccessibilitysupportenabled", + "url": "https://electronjs.org/docs/api/app#appisaccessibilitysupportenabled", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isAccessibilitySupportEnabled", + "api:appisaccessibilitysupportenabled", + "api:app.isAccessibilitySupportEnabled", + "doc:isAccessibilitySupportEnabled", + "doc:appisaccessibilitysupportenabled", + "doc:app.isAccessibilitySupportEnabled" + ] + }, + { + "objectID": "api-app#appsetaccessibilitysupportenabled", + "name": "setAccessibilitySupportEnabled", + "signature": "(enabled)", + "platforms": [ + "macOS", + "Windows" + ], + "description": "Manually enables Chrome's accessibility support, allowing to expose accessibility switch to users in application settings. See Chromium's accessibility docs for more details. Disabled by default. This API must be called after the ready event is emitted. Note: Rendering accessibility tree can significantly affect the performance of your app. It should not be enabled by default.", + "parameters": [ + { + "name": "enabled", + "type": "Boolean", + "collection": false, + "description": "Enable or disable rendering", + "required": true + } + ], + "apiType": "methods", + "fullSignature": "app.setAccessibilitySupportEnabled", + "tldr": "Manually enables Chrome's accessibility support, allowing to expose accessibility switch to users in application settings.", + "slug": "appsetaccessibilitysupportenabled", + "url": "https://electronjs.org/docs/api/app#appsetaccessibilitysupportenabled", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setAccessibilitySupportEnabled", + "api:appsetaccessibilitysupportenabled", + "api:app.setAccessibilitySupportEnabled", + "doc:setAccessibilitySupportEnabled", + "doc:appsetaccessibilitysupportenabled", + "doc:app.setAccessibilitySupportEnabled" + ] + }, + { + "objectID": "api-app#appshowaboutpanel", + "name": "showAboutPanel", + "platforms": [ + "macOS", + "Linux" + ], + "description": "Show the app's about panel options. These options can be overridden with app.setAboutPanelOptions(options).", + "apiType": "methods", + "fullSignature": "app.showAboutPanel", + "tldr": "Show the app's about panel options.", + "slug": "appshowaboutpanel", + "url": "https://electronjs.org/docs/api/app#appshowaboutpanel", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:showAboutPanel", + "api:appshowaboutpanel", + "api:app.showAboutPanel", + "doc:showAboutPanel", + "doc:appshowaboutpanel", + "doc:app.showAboutPanel" + ] + }, + { + "objectID": "api-app#appsetaboutpaneloptions", + "name": "setAboutPanelOptions", + "signature": "(options)", + "platforms": [ + "macOS", + "Linux" + ], + "description": "Set the about panel options. This will override the values defined in the app's .plist file on MacOS. See the Apple docs for more details. On Linux, values must be set in order to be shown; there are no defaults.", + "parameters": [ + { + "name": "options", + "type": "Object", + "collection": false, + "required": true, + "properties": [ + { + "name": "applicationName", + "type": "String", + "collection": false, + "description": "The app's name.", + "required": false + }, + { + "name": "applicationVersion", + "type": "String", + "collection": false, + "description": "The app's version.", + "required": false + }, + { + "name": "copyright", + "type": "String", + "collection": false, + "description": "Copyright information.", + "required": false + }, + { + "name": "version", + "type": "String", + "collection": false, + "description": "The app's build version number.", + "required": false + }, + { + "name": "credits", + "type": "String", + "collection": false, + "description": "Credit information.", + "required": false + }, + { + "name": "website", + "type": "String", + "collection": false, + "description": "The app's website.", + "required": false + }, + { + "name": "iconPath", + "type": "String", + "collection": false, + "description": "Path to the app's icon.", + "required": false + } + ] + } + ], + "apiType": "methods", + "fullSignature": "app.setAboutPanelOptions", + "tldr": "Set the about panel options.", + "slug": "appsetaboutpaneloptions", + "url": "https://electronjs.org/docs/api/app#appsetaboutpaneloptions", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setAboutPanelOptions", + "api:appsetaboutpaneloptions", + "api:app.setAboutPanelOptions", + "doc:setAboutPanelOptions", + "doc:appsetaboutpaneloptions", + "doc:app.setAboutPanelOptions" + ] + }, + { + "objectID": "api-app#appstartaccessingsecurityscopedresource", + "name": "startAccessingSecurityScopedResource", + "signature": "(bookmarkData)", + "platforms": [ + "macOS (mas)" + ], + "description": "Start accessing a security scoped resource. With this method Electron applications that are packaged for the Mac App Store may reach outside their sandbox to access files chosen by the user. See Apple's documentation for a description of how this system works.", + "parameters": [ + { + "name": "bookmarkData", + "type": "String", + "collection": false, + "description": "The base64 encoded security scoped bookmark data returned by the `dialog.showOpenDialog` or `dialog.showSaveDialog` methods.", + "required": true + } + ], + "returns": { + "type": "Function", + "collection": false, + "description": "This function must be called once you have finished accessing the security scoped file. If you do not remember to stop accessing the bookmark, kernel resources will be leaked and your app will lose its ability to reach outside the sandbox completely, until your app is restarted." + }, + "apiType": "methods", + "fullSignature": "app.startAccessingSecurityScopedResource", + "tldr": "Start accessing a security scoped resource.", + "slug": "appstartaccessingsecurityscopedresource", + "url": "https://electronjs.org/docs/api/app#appstartaccessingsecurityscopedresource", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:startAccessingSecurityScopedResource", + "api:appstartaccessingsecurityscopedresource", + "api:app.startAccessingSecurityScopedResource", + "doc:startAccessingSecurityScopedResource", + "doc:appstartaccessingsecurityscopedresource", + "doc:app.startAccessingSecurityScopedResource" + ] + }, + { + "objectID": "api-app#appenablesandbox", + "name": "enableSandbox", + "signature": "()", + "platforms": [ + "Experimental", + "macOS", + "Windows" + ], + "description": "Enables full sandbox mode on the app. This method can only be called before app is ready.", + "apiType": "methods", + "fullSignature": "app.enableSandbox", + "tldr": "Enables full sandbox mode on the app.", + "slug": "appenablesandbox", + "url": "https://electronjs.org/docs/api/app#appenablesandbox", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:enableSandbox", + "api:appenablesandbox", + "api:app.enableSandbox", + "doc:enableSandbox", + "doc:appenablesandbox", + "doc:app.enableSandbox" + ] + }, + { + "objectID": "api-app#appisinapplicationsfolder", + "name": "isInApplicationsFolder", + "signature": "()", + "platforms": [ + "macOS" + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the application is currently running from the systems Application folder. Use in combination with app.moveToApplicationsFolder()" + }, + "apiType": "methods", + "fullSignature": "app.isInApplicationsFolder", + "tldr": "Returns whether the application is currently running from the systems Application folder. Use in combination with app.moveToApplicationsFolder().", + "slug": "appisinapplicationsfolder", + "url": "https://electronjs.org/docs/api/app#appisinapplicationsfolder", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isInApplicationsFolder", + "api:appisinapplicationsfolder", + "api:app.isInApplicationsFolder", + "doc:isInApplicationsFolder", + "doc:appisinapplicationsfolder", + "doc:app.isInApplicationsFolder" + ] + }, + { + "objectID": "api-app#appmovetoapplicationsfolder", + "name": "moveToApplicationsFolder", + "signature": "()", + "platforms": [ + "macOS" + ], + "description": "No confirmation dialog will be presented by default. If you wish to allow the user to confirm the operation, you may do so using the dialog API. NOTE: This method throws errors if anything other than the user causes the move to fail. For instance if the user cancels the authorization dialog, this method returns false. If we fail to perform the copy, then this method will throw an error. The message in the error should be informative and tell you exactly what went wrong", + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the move was successful. Please note that if the move is successful, your application will quit and relaunch." + }, + "apiType": "methods", + "fullSignature": "app.moveToApplicationsFolder", + "tldr": "No confirmation dialog will be presented by default.", + "slug": "appmovetoapplicationsfolder", + "url": "https://electronjs.org/docs/api/app#appmovetoapplicationsfolder", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:moveToApplicationsFolder", + "api:appmovetoapplicationsfolder", + "api:app.moveToApplicationsFolder", + "doc:moveToApplicationsFolder", + "doc:appmovetoapplicationsfolder", + "doc:app.moveToApplicationsFolder" + ] + }, { "objectID": "api-app#event-will-finish-launching", "name": "will-finish-launching", - "description": "Emitted when the application has finished basic startup. On Windows and Linux, the will-finish-launching event is the same as the ready event; on macOS, this event represents the applicationWillFinishLaunching notification of NSApplication. You would usually set up listeners for the open-file and open-url events here, and start the crash reporter and auto updater. In most cases, you should just do everything in the ready event handler.", + "description": "Emitted when the application has finished basic startup. On Windows and Linux, the will-finish-launching event is the same as the ready event; on macOS, this event represents the applicationWillFinishLaunching notification of NSApplication. You would usually set up listeners for the open-file and open-url events here, and start the crash reporter and auto updater. In most cases, you should do everything in the ready event handler.", "apiType": "event", "fullSignature": "app.on('will-finish-launching')", "url": "https://electronjs.org/docs/api/app#event-will-finish-launching", + "slug": "apponwill-finish-launching", "tldr": "Emitted when the application has finished basic startup.", "keyValuePairs": [ "is:doc", "is:api", "api:will-finish-launching", - "api:undefined", + "api:apponwill-finish-launching", "api:app.on('will-finish-launching')", "doc:will-finish-launching", - "doc:undefined", + "doc:apponwill-finish-launching", "doc:app.on('will-finish-launching')" ] }, @@ -35,15 +2259,16 @@ "apiType": "event", "fullSignature": "app.on('ready')", "url": "https://electronjs.org/docs/api/app#event-ready", + "slug": "apponready", "tldr": "Emitted when Electron has finished initializing.", "keyValuePairs": [ "is:doc", "is:api", "api:ready", - "api:undefined", + "api:apponready", "api:app.on('ready')", "doc:ready", - "doc:undefined", + "doc:apponready", "doc:app.on('ready')" ] }, @@ -54,22 +2279,23 @@ "apiType": "event", "fullSignature": "app.on('window-all-closed')", "url": "https://electronjs.org/docs/api/app#event-window-all-closed", + "slug": "apponwindow-all-closed", "tldr": "Emitted when all windows have been closed.", "keyValuePairs": [ "is:doc", "is:api", "api:window-all-closed", - "api:undefined", + "api:apponwindow-all-closed", "api:app.on('window-all-closed')", "doc:window-all-closed", - "doc:undefined", + "doc:apponwindow-all-closed", "doc:app.on('window-all-closed')" ] }, { "objectID": "api-app#event-before-quit", "name": "before-quit", - "description": "Emitted before the application starts closing its windows. Calling event.preventDefault() will prevent the default behaviour, which is terminating the application. Note: If application quit was initiated by autoUpdater.quitAndInstall() then before-quit is emitted after emitting close event on all windows and closing them.", + "description": "Emitted before the application starts closing its windows. Calling event.preventDefault() will prevent the default behavior, which is terminating the application. Note: If application quit was initiated by autoUpdater.quitAndInstall(), then before-quit is emitted after emitting close event on all windows and closing them. Note: On Windows, this event will not be emitted if the app is closed due to a shutdown/restart of the system or a user logout.", "returns": [ { "name": "event", @@ -81,22 +2307,23 @@ "apiType": "event", "fullSignature": "app.on('before-quit')", "url": "https://electronjs.org/docs/api/app#event-before-quit", + "slug": "apponbefore-quit", "tldr": "Emitted before the application starts closing its windows.", "keyValuePairs": [ "is:doc", "is:api", "api:before-quit", - "api:undefined", + "api:apponbefore-quit", "api:app.on('before-quit')", "doc:before-quit", - "doc:undefined", + "doc:apponbefore-quit", "doc:app.on('before-quit')" ] }, { "objectID": "api-app#event-will-quit", "name": "will-quit", - "description": "Emitted when all windows have been closed and the application will quit. Calling event.preventDefault() will prevent the default behaviour, which is terminating the application. See the description of the window-all-closed event for the differences between the will-quit and window-all-closed events.", + "description": "Emitted when all windows have been closed and the application will quit. Calling event.preventDefault() will prevent the default behaviour, which is terminating the application. See the description of the window-all-closed event for the differences between the will-quit and window-all-closed events. Note: On Windows, this event will not be emitted if the app is closed due to a shutdown/restart of the system or a user logout.", "returns": [ { "name": "event", @@ -108,22 +2335,23 @@ "apiType": "event", "fullSignature": "app.on('will-quit')", "url": "https://electronjs.org/docs/api/app#event-will-quit", + "slug": "apponwill-quit", "tldr": "Emitted when all windows have been closed and the application will quit.", "keyValuePairs": [ "is:doc", "is:api", "api:will-quit", - "api:undefined", + "api:apponwill-quit", "api:app.on('will-quit')", "doc:will-quit", - "doc:undefined", + "doc:apponwill-quit", "doc:app.on('will-quit')" ] }, { "objectID": "api-app#event-quit", "name": "quit", - "description": "Emitted when the application is quitting.", + "description": "Emitted when the application is quitting. Note: On Windows, this event will not be emitted if the app is closed due to a shutdown/restart of the system or a user logout.", "returns": [ { "name": "event", @@ -141,15 +2369,16 @@ "apiType": "event", "fullSignature": "app.on('quit')", "url": "https://electronjs.org/docs/api/app#event-quit", + "slug": "apponquit", "tldr": "Emitted when the application is quitting.", "keyValuePairs": [ "is:doc", "is:api", "api:quit", - "api:undefined", + "api:apponquit", "api:app.on('quit')", "doc:quit", - "doc:undefined", + "doc:apponquit", "doc:app.on('quit')" ] }, @@ -177,15 +2406,16 @@ "apiType": "event", "fullSignature": "app.on('open-file')", "url": "https://electronjs.org/docs/api/app#event-open-file", + "slug": "apponopen-file", "tldr": "Emitted when the user wants to open a file with the application.", "keyValuePairs": [ "is:doc", "is:api", "api:open-file", - "api:undefined", + "api:apponopen-file", "api:app.on('open-file')", "doc:open-file", - "doc:undefined", + "doc:apponopen-file", "doc:app.on('open-file')" ] }, @@ -213,15 +2443,16 @@ "apiType": "event", "fullSignature": "app.on('open-url')", "url": "https://electronjs.org/docs/api/app#event-open-url", + "slug": "apponopen-url", "tldr": "Emitted when the user wants to open a URL with the application.", "keyValuePairs": [ "is:doc", "is:api", "api:open-url", - "api:undefined", + "api:apponopen-url", "api:app.on('open-url')", "doc:open-url", - "doc:undefined", + "doc:apponopen-url", "doc:app.on('open-url')" ] }, @@ -249,15 +2480,16 @@ "apiType": "event", "fullSignature": "app.on('activate')", "url": "https://electronjs.org/docs/api/app#event-activate", + "slug": "apponactivate", "tldr": "Emitted when the application is activated.", "keyValuePairs": [ "is:doc", "is:api", "api:activate", - "api:undefined", + "api:apponactivate", "api:app.on('activate')", "doc:activate", - "doc:undefined", + "doc:apponactivate", "doc:app.on('activate')" ] }, @@ -293,15 +2525,16 @@ "apiType": "event", "fullSignature": "app.on('continue-activity')", "url": "https://electronjs.org/docs/api/app#event-continue-activity", + "slug": "apponcontinue-activity", "tldr": "Emitted during Handoff when an activity from a different device wants to be resumed.", "keyValuePairs": [ "is:doc", "is:api", "api:continue-activity", - "api:undefined", + "api:apponcontinue-activity", "api:app.on('continue-activity')", "doc:continue-activity", - "doc:undefined", + "doc:apponcontinue-activity", "doc:app.on('continue-activity')" ] }, @@ -330,15 +2563,16 @@ "apiType": "event", "fullSignature": "app.on('will-continue-activity')", "url": "https://electronjs.org/docs/api/app#event-will-continue-activity", + "slug": "apponwill-continue-activity", "tldr": "Emitted during Handoff before an activity from a different device wants to be resumed.", "keyValuePairs": [ "is:doc", "is:api", "api:will-continue-activity", - "api:undefined", + "api:apponwill-continue-activity", "api:app.on('will-continue-activity')", "doc:will-continue-activity", - "doc:undefined", + "doc:apponwill-continue-activity", "doc:app.on('will-continue-activity')" ] }, @@ -374,15 +2608,16 @@ "apiType": "event", "fullSignature": "app.on('continue-activity-error')", "url": "https://electronjs.org/docs/api/app#event-continue-activity-error", + "slug": "apponcontinue-activity-error", "tldr": "Emitted during Handoff when an activity from a different device fails to be resumed.", "keyValuePairs": [ "is:doc", "is:api", "api:continue-activity-error", - "api:undefined", + "api:apponcontinue-activity-error", "api:app.on('continue-activity-error')", "doc:continue-activity-error", - "doc:undefined", + "doc:apponcontinue-activity-error", "doc:app.on('continue-activity-error')" ] }, @@ -418,22 +2653,23 @@ "apiType": "event", "fullSignature": "app.on('activity-was-continued')", "url": "https://electronjs.org/docs/api/app#event-activity-was-continued", + "slug": "apponactivity-was-continued", "tldr": "Emitted during Handoff after an activity from this device was successfully resumed on another one.", "keyValuePairs": [ "is:doc", "is:api", "api:activity-was-continued", - "api:undefined", + "api:apponactivity-was-continued", "api:app.on('activity-was-continued')", "doc:activity-was-continued", - "doc:undefined", + "doc:apponactivity-was-continued", "doc:app.on('activity-was-continued')" ] }, { "objectID": "api-app#event-update-activity-state", "name": "update-activity-state", - "description": "Emitted when Handoff is about to be resumed on another device. If you need to update the state to be transferred, you should call event.preventDefault() immediately, construct a new userInfo dictionary and call app.updateCurrentActiviy() in a timely manner. Otherwise the operation will fail and continue-activity-error will be called.", + "description": "Emitted when Handoff is about to be resumed on another device. If you need to update the state to be transferred, you should call event.preventDefault() immediately, construct a new userInfo dictionary and call app.updateCurrentActiviy() in a timely manner. Otherwise, the operation will fail and continue-activity-error will be called.", "platforms": [ "macOS" ], @@ -462,15 +2698,16 @@ "apiType": "event", "fullSignature": "app.on('update-activity-state')", "url": "https://electronjs.org/docs/api/app#event-update-activity-state", + "slug": "apponupdate-activity-state", "tldr": "Emitted when Handoff is about to be resumed on another device.", "keyValuePairs": [ "is:doc", "is:api", "api:update-activity-state", - "api:undefined", + "api:apponupdate-activity-state", "api:app.on('update-activity-state')", "doc:update-activity-state", - "doc:undefined", + "doc:apponupdate-activity-state", "doc:app.on('update-activity-state')" ] }, @@ -492,15 +2729,16 @@ "apiType": "event", "fullSignature": "app.on('new-window-for-tab')", "url": "https://electronjs.org/docs/api/app#event-new-window-for-tab", + "slug": "apponnew-window-for-tab", "tldr": "Emitted when the user clicks the native macOS new tab button.", "keyValuePairs": [ "is:doc", "is:api", "api:new-window-for-tab", - "api:undefined", + "api:apponnew-window-for-tab", "api:app.on('new-window-for-tab')", "doc:new-window-for-tab", - "doc:undefined", + "doc:apponnew-window-for-tab", "doc:app.on('new-window-for-tab')" ] }, @@ -525,15 +2763,16 @@ "apiType": "event", "fullSignature": "app.on('browser-window-blur')", "url": "https://electronjs.org/docs/api/app#event-browser-window-blur", + "slug": "apponbrowser-window-blur", "tldr": "Emitted when a browserWindow gets blurred.", "keyValuePairs": [ "is:doc", "is:api", "api:browser-window-blur", - "api:undefined", + "api:apponbrowser-window-blur", "api:app.on('browser-window-blur')", "doc:browser-window-blur", - "doc:undefined", + "doc:apponbrowser-window-blur", "doc:app.on('browser-window-blur')" ] }, @@ -558,15 +2797,16 @@ "apiType": "event", "fullSignature": "app.on('browser-window-focus')", "url": "https://electronjs.org/docs/api/app#event-browser-window-focus", + "slug": "apponbrowser-window-focus", "tldr": "Emitted when a browserWindow gets focused.", "keyValuePairs": [ "is:doc", "is:api", "api:browser-window-focus", - "api:undefined", + "api:apponbrowser-window-focus", "api:app.on('browser-window-focus')", "doc:browser-window-focus", - "doc:undefined", + "doc:apponbrowser-window-focus", "doc:app.on('browser-window-focus')" ] }, @@ -591,15 +2831,16 @@ "apiType": "event", "fullSignature": "app.on('browser-window-created')", "url": "https://electronjs.org/docs/api/app#event-browser-window-created", + "slug": "apponbrowser-window-created", "tldr": "Emitted when a new browserWindow is created.", "keyValuePairs": [ "is:doc", "is:api", "api:browser-window-created", - "api:undefined", + "api:apponbrowser-window-created", "api:app.on('browser-window-created')", "doc:browser-window-created", - "doc:undefined", + "doc:apponbrowser-window-created", "doc:app.on('browser-window-created')" ] }, @@ -624,15 +2865,16 @@ "apiType": "event", "fullSignature": "app.on('web-contents-created')", "url": "https://electronjs.org/docs/api/app#event-web-contents-created", + "slug": "apponweb-contents-created", "tldr": "Emitted when a new webContents is created.", "keyValuePairs": [ "is:doc", "is:api", "api:web-contents-created", - "api:undefined", + "api:apponweb-contents-created", "api:app.on('web-contents-created')", "doc:web-contents-created", - "doc:undefined", + "doc:apponweb-contents-created", "doc:app.on('web-contents-created')" ] }, @@ -691,15 +2933,16 @@ "apiType": "event", "fullSignature": "app.on('certificate-error')", "url": "https://electronjs.org/docs/api/app#event-certificate-error", + "slug": "apponcertificate-error", "tldr": "Emitted when failed to verify the certificate for url, to trust the certificate you should prevent the default behavior with event.preventDefault() and call callback(true).", "keyValuePairs": [ "is:doc", "is:api", "api:certificate-error", - "api:undefined", + "api:apponcertificate-error", "api:app.on('certificate-error')", "doc:certificate-error", - "doc:undefined", + "doc:apponcertificate-error", "doc:app.on('certificate-error')" ] }, @@ -751,22 +2994,23 @@ "apiType": "event", "fullSignature": "app.on('select-client-certificate')", "url": "https://electronjs.org/docs/api/app#event-select-client-certificate", + "slug": "apponselect-client-certificate", "tldr": "Emitted when a client certificate is requested.", "keyValuePairs": [ "is:doc", "is:api", "api:select-client-certificate", - "api:undefined", + "api:apponselect-client-certificate", "api:app.on('select-client-certificate')", "doc:select-client-certificate", - "doc:undefined", + "doc:apponselect-client-certificate", "doc:app.on('select-client-certificate')" ] }, { "objectID": "api-app#event-login", "name": "login", - "description": "Emitted when webContents wants to do basic auth. The default behavior is to cancel all authentications, to override this you should prevent the default behavior with event.preventDefault() and call callback(username, password) with the credentials.", + "description": "Emitted when webContents wants to do basic auth. The default behavior is to cancel all authentications. To override this you should prevent the default behavior with event.preventDefault() and call callback(username, password) with the credentials.", "returns": [ { "name": "event", @@ -878,15 +3122,16 @@ "apiType": "event", "fullSignature": "app.on('login')", "url": "https://electronjs.org/docs/api/app#event-login", + "slug": "apponlogin", "tldr": "Emitted when webContents wants to do basic auth.", "keyValuePairs": [ "is:doc", "is:api", "api:login", - "api:undefined", + "api:apponlogin", "api:app.on('login')", "doc:login", - "doc:undefined", + "doc:apponlogin", "doc:app.on('login')" ] }, @@ -911,15 +3156,16 @@ "apiType": "event", "fullSignature": "app.on('gpu-process-crashed')", "url": "https://electronjs.org/docs/api/app#event-gpu-process-crashed", + "slug": "appongpu-process-crashed", "tldr": "Emitted when the gpu process crashes or is killed.", "keyValuePairs": [ "is:doc", "is:api", "api:gpu-process-crashed", - "api:undefined", + "api:appongpu-process-crashed", "api:app.on('gpu-process-crashed')", "doc:gpu-process-crashed", - "doc:undefined", + "doc:appongpu-process-crashed", "doc:app.on('gpu-process-crashed')" ] }, @@ -949,18 +3195,471 @@ "apiType": "event", "fullSignature": "app.on('accessibility-support-changed')", "url": "https://electronjs.org/docs/api/app#event-accessibility-support-changed", + "slug": "apponaccessibility-support-changed", "tldr": "Emitted when Chrome's accessibility support changes.", "keyValuePairs": [ "is:doc", "is:api", "api:accessibility-support-changed", - "api:undefined", + "api:apponaccessibility-support-changed", "api:app.on('accessibility-support-changed')", "doc:accessibility-support-changed", - "doc:undefined", + "doc:apponaccessibility-support-changed", "doc:app.on('accessibility-support-changed')" ] }, + { + "objectID": "api-app#event-session-created", + "name": "session-created", + "description": "Emitted when Electron has created a new session.", + "returns": [ + { + "name": "session", + "type": "Session", + "collection": false, + "required": true + } + ], + "apiType": "event", + "fullSignature": "app.on('session-created')", + "url": "https://electronjs.org/docs/api/app#event-session-created", + "slug": "apponsession-created", + "tldr": "Emitted when Electron has created a new session.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:session-created", + "api:apponsession-created", + "api:app.on('session-created')", + "doc:session-created", + "doc:apponsession-created", + "doc:app.on('session-created')" + ] + }, + { + "objectID": "api-app#event-second-instance", + "name": "second-instance", + "description": "This event will be emitted inside the primary instance of your application when a second instance has been executed. argv is an Array of the second instance's command line arguments, and workingDirectory is its current working directory. Usually applications respond to this by making their primary window focused and non-minimized. This event is guaranteed to be emitted after the ready event of app gets emitted. Note: Extra command line arguments might be added by Chromium, such as --original-process-start-time.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "argv", + "type": "String", + "collection": true, + "description": "An array of the second instance's command line arguments", + "required": true + }, + { + "name": "workingDirectory", + "type": "String", + "collection": false, + "description": "The second instance's working directory", + "required": true + } + ], + "apiType": "event", + "fullSignature": "app.on('second-instance')", + "url": "https://electronjs.org/docs/api/app#event-second-instance", + "slug": "apponsecond-instance", + "tldr": "This event will be emitted inside the primary instance of your application when a second instance has been executed.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:second-instance", + "api:apponsecond-instance", + "api:app.on('second-instance')", + "doc:second-instance", + "doc:apponsecond-instance", + "doc:app.on('second-instance')" + ] + }, + { + "objectID": "api-app#event-desktop-capturer-get-sources", + "name": "desktop-capturer-get-sources", + "description": "Emitted when desktopCapturer.getSources() is called in the renderer process of webContents. Calling event.preventDefault() will make it return empty sources.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "webContents", + "type": "WebContents", + "collection": false, + "required": true + } + ], + "apiType": "event", + "fullSignature": "app.on('desktop-capturer-get-sources')", + "url": "https://electronjs.org/docs/api/app#event-desktop-capturer-get-sources", + "slug": "appondesktop-capturer-get-sources", + "tldr": "Emitted when desktopCapturer.getSources() is called in the renderer process of webContents.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:desktop-capturer-get-sources", + "api:appondesktop-capturer-get-sources", + "api:app.on('desktop-capturer-get-sources')", + "doc:desktop-capturer-get-sources", + "doc:appondesktop-capturer-get-sources", + "doc:app.on('desktop-capturer-get-sources')" + ] + }, + { + "objectID": "api-app#event-remote-require", + "name": "remote-require", + "description": "Emitted when remote.require() is called in the renderer process of webContents. Calling event.preventDefault() will prevent the module from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "webContents", + "type": "WebContents", + "collection": false, + "required": true + }, + { + "name": "moduleName", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "event", + "fullSignature": "app.on('remote-require')", + "url": "https://electronjs.org/docs/api/app#event-remote-require", + "slug": "apponremote-require", + "tldr": "Emitted when remote.require() is called in the renderer process of webContents.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:remote-require", + "api:apponremote-require", + "api:app.on('remote-require')", + "doc:remote-require", + "doc:apponremote-require", + "doc:app.on('remote-require')" + ] + }, + { + "objectID": "api-app#event-remote-get-global", + "name": "remote-get-global", + "description": "Emitted when remote.getGlobal() is called in the renderer process of webContents. Calling event.preventDefault() will prevent the global from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "webContents", + "type": "WebContents", + "collection": false, + "required": true + }, + { + "name": "globalName", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "event", + "fullSignature": "app.on('remote-get-global')", + "url": "https://electronjs.org/docs/api/app#event-remote-get-global", + "slug": "apponremote-get-global", + "tldr": "Emitted when remote.getGlobal() is called in the renderer process of webContents.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:remote-get-global", + "api:apponremote-get-global", + "api:app.on('remote-get-global')", + "doc:remote-get-global", + "doc:apponremote-get-global", + "doc:app.on('remote-get-global')" + ] + }, + { + "objectID": "api-app#event-remote-get-builtin", + "name": "remote-get-builtin", + "description": "Emitted when remote.getBuiltin() is called in the renderer process of webContents. Calling event.preventDefault() will prevent the module from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "webContents", + "type": "WebContents", + "collection": false, + "required": true + }, + { + "name": "moduleName", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "event", + "fullSignature": "app.on('remote-get-builtin')", + "url": "https://electronjs.org/docs/api/app#event-remote-get-builtin", + "slug": "apponremote-get-builtin", + "tldr": "Emitted when remote.getBuiltin() is called in the renderer process of webContents.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:remote-get-builtin", + "api:apponremote-get-builtin", + "api:app.on('remote-get-builtin')", + "doc:remote-get-builtin", + "doc:apponremote-get-builtin", + "doc:app.on('remote-get-builtin')" + ] + }, + { + "objectID": "api-app#event-remote-get-current-window", + "name": "remote-get-current-window", + "description": "Emitted when remote.getCurrentWindow() is called in the renderer process of webContents. Calling event.preventDefault() will prevent the object from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "webContents", + "type": "WebContents", + "collection": false, + "required": true + } + ], + "apiType": "event", + "fullSignature": "app.on('remote-get-current-window')", + "url": "https://electronjs.org/docs/api/app#event-remote-get-current-window", + "slug": "apponremote-get-current-window", + "tldr": "Emitted when remote.getCurrentWindow() is called in the renderer process of webContents.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:remote-get-current-window", + "api:apponremote-get-current-window", + "api:app.on('remote-get-current-window')", + "doc:remote-get-current-window", + "doc:apponremote-get-current-window", + "doc:app.on('remote-get-current-window')" + ] + }, + { + "objectID": "api-app#event-remote-get-current-web-contents", + "name": "remote-get-current-web-contents", + "description": "Emitted when remote.getCurrentWebContents() is called in the renderer process of webContents. Calling event.preventDefault() will prevent the object from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "webContents", + "type": "WebContents", + "collection": false, + "required": true + } + ], + "apiType": "event", + "fullSignature": "app.on('remote-get-current-web-contents')", + "url": "https://electronjs.org/docs/api/app#event-remote-get-current-web-contents", + "slug": "apponremote-get-current-web-contents", + "tldr": "Emitted when remote.getCurrentWebContents() is called in the renderer process of webContents.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:remote-get-current-web-contents", + "api:apponremote-get-current-web-contents", + "api:app.on('remote-get-current-web-contents')", + "doc:remote-get-current-web-contents", + "doc:apponremote-get-current-web-contents", + "doc:app.on('remote-get-current-web-contents')" + ] + }, + { + "objectID": "api-app#event-remote-get-guest-web-contents", + "name": "remote-get-guest-web-contents", + "description": "Emitted when .getWebContents() is called in the renderer process of webContents. Calling event.preventDefault() will prevent the object from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "webContents", + "type": "WebContents", + "collection": false, + "required": true + }, + { + "name": "guestWebContents", + "type": "WebContents", + "collection": false, + "required": true + } + ], + "apiType": "event", + "fullSignature": "app.on('remote-get-guest-web-contents')", + "url": "https://electronjs.org/docs/api/app#event-remote-get-guest-web-contents", + "slug": "apponremote-get-guest-web-contents", + "tldr": "Emitted when .getWebContents() is called in the renderer process of webContents.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:remote-get-guest-web-contents", + "api:apponremote-get-guest-web-contents", + "api:app.on('remote-get-guest-web-contents')", + "doc:remote-get-guest-web-contents", + "doc:apponremote-get-guest-web-contents", + "doc:app.on('remote-get-guest-web-contents')" + ] + }, + { + "objectID": "api-auto-updater#autoupdatersetfeedurl", + "name": "setFeedURL", + "signature": "(options)", + "description": "Sets the url and initialize the auto updater.", + "parameters": [ + { + "name": "options", + "type": "Object", + "collection": false, + "required": true, + "properties": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "headers", + "type": "Object", + "collection": false, + "description": "HTTP request headers.", + "required": false, + "properties": [] + }, + { + "name": "serverType", + "type": "String", + "collection": false, + "description": "Either json or default, see the README for more information.", + "required": false + } + ] + } + ], + "apiType": "methods", + "fullSignature": "autoUpdater.setFeedURL", + "tldr": "Sets the url and initialize the auto updater.", + "slug": "autoupdatersetfeedurl", + "url": "https://electronjs.org/docs/api/auto-updater#autoupdatersetfeedurl", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setFeedURL", + "api:autoupdatersetfeedurl", + "api:autoUpdater.setFeedURL", + "doc:setFeedURL", + "doc:autoupdatersetfeedurl", + "doc:autoUpdater.setFeedURL" + ] + }, + { + "objectID": "api-auto-updater#autoupdatergetfeedurl", + "name": "getFeedURL", + "signature": "()", + "returns": { + "type": "String", + "collection": false, + "description": "The current update feed URL." + }, + "apiType": "methods", + "fullSignature": "autoUpdater.getFeedURL", + "tldr": "Returns the current update feed URL.", + "slug": "autoupdatergetfeedurl", + "url": "https://electronjs.org/docs/api/auto-updater#autoupdatergetfeedurl", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getFeedURL", + "api:autoupdatergetfeedurl", + "api:autoUpdater.getFeedURL", + "doc:getFeedURL", + "doc:autoupdatergetfeedurl", + "doc:autoUpdater.getFeedURL" + ] + }, + { + "objectID": "api-auto-updater#autoupdatercheckforupdates", + "name": "checkForUpdates", + "signature": "()", + "description": "Asks the server whether there is an update. You must call setFeedURL before using this API.", + "apiType": "methods", + "fullSignature": "autoUpdater.checkForUpdates", + "tldr": "Asks the server whether there is an update.", + "slug": "autoupdatercheckforupdates", + "url": "https://electronjs.org/docs/api/auto-updater#autoupdatercheckforupdates", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:checkForUpdates", + "api:autoupdatercheckforupdates", + "api:autoUpdater.checkForUpdates", + "doc:checkForUpdates", + "doc:autoupdatercheckforupdates", + "doc:autoUpdater.checkForUpdates" + ] + }, + { + "objectID": "api-auto-updater#autoupdaterquitandinstall", + "name": "quitAndInstall", + "signature": "()", + "description": "Restarts the app and installs the update after it has been downloaded. It should only be called after update-downloaded has been emitted. Under the hood calling autoUpdater.quitAndInstall() will close all application windows first, and automatically call app.quit() after all windows have been closed. Note: It is not strictly necessary to call this function to apply an update, as a successfully downloaded update will always be applied the next time the application starts.", + "apiType": "methods", + "fullSignature": "autoUpdater.quitAndInstall", + "tldr": "Restarts the app and installs the update after it has been downloaded.", + "slug": "autoupdaterquitandinstall", + "url": "https://electronjs.org/docs/api/auto-updater#autoupdaterquitandinstall", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:quitAndInstall", + "api:autoupdaterquitandinstall", + "api:autoUpdater.quitAndInstall", + "doc:quitAndInstall", + "doc:autoupdaterquitandinstall", + "doc:autoUpdater.quitAndInstall" + ] + }, { "objectID": "api-auto-updater#event-error", "name": "error", @@ -976,15 +3675,16 @@ "apiType": "event", "fullSignature": "autoUpdater.on('error')", "url": "https://electronjs.org/docs/api/auto-updater#event-error", + "slug": "autoupdateronerror", "tldr": "Emitted when there is an error while updating.", "keyValuePairs": [ "is:doc", "is:api", "api:error", - "api:undefined", + "api:autoupdateronerror", "api:autoUpdater.on('error')", "doc:error", - "doc:undefined", + "doc:autoupdateronerror", "doc:autoUpdater.on('error')" ] }, @@ -995,15 +3695,16 @@ "apiType": "event", "fullSignature": "autoUpdater.on('checking-for-update')", "url": "https://electronjs.org/docs/api/auto-updater#event-checking-for-update", + "slug": "autoupdateronchecking-for-update", "tldr": "Emitted when checking if an update has started.", "keyValuePairs": [ "is:doc", "is:api", "api:checking-for-update", - "api:undefined", + "api:autoupdateronchecking-for-update", "api:autoUpdater.on('checking-for-update')", "doc:checking-for-update", - "doc:undefined", + "doc:autoupdateronchecking-for-update", "doc:autoUpdater.on('checking-for-update')" ] }, @@ -1014,15 +3715,16 @@ "apiType": "event", "fullSignature": "autoUpdater.on('update-available')", "url": "https://electronjs.org/docs/api/auto-updater#event-update-available", + "slug": "autoupdateronupdate-available", "tldr": "Emitted when there is an available update.", "keyValuePairs": [ "is:doc", "is:api", "api:update-available", - "api:undefined", + "api:autoupdateronupdate-available", "api:autoUpdater.on('update-available')", "doc:update-available", - "doc:undefined", + "doc:autoupdateronupdate-available", "doc:autoUpdater.on('update-available')" ] }, @@ -1033,22 +3735,23 @@ "apiType": "event", "fullSignature": "autoUpdater.on('update-not-available')", "url": "https://electronjs.org/docs/api/auto-updater#event-update-not-available", + "slug": "autoupdateronupdate-not-available", "tldr": "Emitted when there is no available update.", "keyValuePairs": [ "is:doc", "is:api", "api:update-not-available", - "api:undefined", + "api:autoupdateronupdate-not-available", "api:autoUpdater.on('update-not-available')", "doc:update-not-available", - "doc:undefined", + "doc:autoupdateronupdate-not-available", "doc:autoUpdater.on('update-not-available')" ] }, { "objectID": "api-auto-updater#event-update-downloaded", "name": "update-downloaded", - "description": "Emitted when an update has been downloaded. On Windows only releaseName is available.", + "description": "Emitted when an update has been downloaded. On Windows only releaseName is available. Note: It is not strictly necessary to handle this event. A successfully downloaded update will still be applied the next time the application starts.", "returns": [ { "name": "event", @@ -1084,21 +3787,133 @@ "apiType": "event", "fullSignature": "autoUpdater.on('update-downloaded')", "url": "https://electronjs.org/docs/api/auto-updater#event-update-downloaded", + "slug": "autoupdateronupdate-downloaded", "tldr": "Emitted when an update has been downloaded.", "keyValuePairs": [ "is:doc", "is:api", "api:update-downloaded", - "api:undefined", + "api:autoupdateronupdate-downloaded", "api:autoUpdater.on('update-downloaded')", "doc:update-downloaded", - "doc:undefined", + "doc:autoupdateronupdate-downloaded", "doc:autoUpdater.on('update-downloaded')" ] }, + { + "objectID": "api-auto-updater#event-before-quit-for-update", + "name": "before-quit-for-update", + "description": "This event is emitted after a user calls quitAndInstall(). When this API is called, the before-quit event is not emitted before all windows are closed. As a result you should listen to this event if you wish to perform actions before the windows are closed while a process is quitting, as well as listening to before-quit.", + "apiType": "event", + "fullSignature": "autoUpdater.on('before-quit-for-update')", + "url": "https://electronjs.org/docs/api/auto-updater#event-before-quit-for-update", + "slug": "autoupdateronbefore-quit-for-update", + "tldr": "This event is emitted after a user calls quitAndInstall().", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:before-quit-for-update", + "api:autoupdateronbefore-quit-for-update", + "api:autoUpdater.on('before-quit-for-update')", + "doc:before-quit-for-update", + "doc:autoupdateronbefore-quit-for-update", + "doc:autoUpdater.on('before-quit-for-update')" + ] + }, + { + "objectID": "api-bluetooth-device#bluetoothdevicedevicename", + "name": "deviceName", + "type": "String", + "collection": false, + "description": "", + "required": true, + "apiType": "properties", + "fullSignature": "BluetoothDevice.deviceName", + "tldr": null, + "slug": "bluetoothdevicedevicename", + "url": "https://electronjs.org/docs/api/bluetooth-device#bluetoothdevicedevicename", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:deviceName", + "api:bluetoothdevicedevicename", + "api:BluetoothDevice.deviceName", + "doc:deviceName", + "doc:bluetoothdevicedevicename", + "doc:BluetoothDevice.deviceName" + ] + }, + { + "objectID": "api-bluetooth-device#bluetoothdevicedeviceid", + "name": "deviceId", + "type": "String", + "collection": false, + "description": "", + "required": true, + "apiType": "properties", + "fullSignature": "BluetoothDevice.deviceId", + "tldr": null, + "slug": "bluetoothdevicedeviceid", + "url": "https://electronjs.org/docs/api/bluetooth-device#bluetoothdevicedeviceid", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:deviceId", + "api:bluetoothdevicedeviceid", + "api:BluetoothDevice.deviceId", + "doc:deviceId", + "doc:bluetoothdevicedeviceid", + "doc:BluetoothDevice.deviceId" + ] + }, + { + "objectID": "api-browser-view#browserviewwebcontents", + "name": "webContents", + "description": "A WebContents object owned by this view.", + "type": "WebContents", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "BrowserView.webContents", + "tldr": "A WebContents object owned by this view.", + "slug": "browserviewwebcontents", + "url": "https://electronjs.org/docs/api/browser-view#browserviewwebcontents", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:webContents", + "api:browserviewwebcontents", + "api:BrowserView.webContents", + "doc:webContents", + "doc:browserviewwebcontents", + "doc:BrowserView.webContents" + ] + }, + { + "objectID": "api-browser-view#browserviewid", + "name": "id", + "description": "A Integer representing the unique ID of the view.", + "type": "Integer", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "BrowserView.id", + "tldr": "A Integer representing the unique ID of the view.", + "slug": "browserviewid", + "url": "https://electronjs.org/docs/api/browser-view#browserviewid", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:id", + "api:browserviewid", + "api:BrowserView.id", + "doc:id", + "doc:browserviewid", + "doc:BrowserView.id" + ] + }, { "objectID": "api-browser-view#browserviewgetallviews", "name": "getAllViews", + "signature": "()", "returns": { "type": "BrowserView", "collection": true, @@ -1123,6 +3938,7 @@ { "objectID": "api-browser-view#browserviewfromwebcontentswebcontents", "name": "fromWebContents", + "signature": "(webContents)", "parameters": [ { "name": "webContents", @@ -1164,6 +3980,7 @@ { "objectID": "api-browser-view#browserviewfromidid", "name": "fromId", + "signature": "(id)", "parameters": [ { "name": "id", @@ -1196,6 +4013,7 @@ { "objectID": "api-browser-view#viewdestroy", "name": "destroy", + "signature": "()", "description": "Force closing the view, the unload and beforeunload events won't be emitted for the web page. After you're done with a view, call this function in order to free memory and other resources as soon as possible.", "apiType": "instanceMethod", "fullSignature": "view.destroy()", @@ -1216,6 +4034,7 @@ { "objectID": "api-browser-view#viewisdestroyed", "name": "isDestroyed", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -1240,6 +4059,7 @@ { "objectID": "api-browser-view#viewsetautoresizeoptions", "name": "setAutoResize", + "signature": "(options)", "platforms": [ "Experimental" ], @@ -1286,6 +4106,7 @@ { "objectID": "api-browser-view#viewsetboundsbounds", "name": "setBounds", + "signature": "(bounds)", "platforms": [ "Experimental" ], @@ -1317,6 +4138,7 @@ { "objectID": "api-browser-view#viewsetbackgroundcolorcolor", "name": "setBackgroundColor", + "signature": "(color)", "platforms": [ "Experimental" ], @@ -1345,9 +4167,54 @@ "doc:view.setBackgroundColor(color)" ] }, + { + "objectID": "api-browser-window#browserwindowwebcontents", + "name": "webContents", + "description": "A WebContents object this window owns. All web page related events and operations will be done via it. See the webContents documentation for its methods and events.", + "type": "WebContents", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "BrowserWindow.webContents", + "tldr": "A WebContents object this window owns.", + "slug": "browserwindowwebcontents", + "url": "https://electronjs.org/docs/api/browser-window#browserwindowwebcontents", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:webContents", + "api:browserwindowwebcontents", + "api:BrowserWindow.webContents", + "doc:webContents", + "doc:browserwindowwebcontents", + "doc:BrowserWindow.webContents" + ] + }, + { + "objectID": "api-browser-window#browserwindowid", + "name": "id", + "description": "A Integer representing the unique ID of the window.", + "type": "Integer", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "BrowserWindow.id", + "tldr": "A Integer representing the unique ID of the window.", + "slug": "browserwindowid", + "url": "https://electronjs.org/docs/api/browser-window#browserwindowid", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:id", + "api:browserwindowid", + "api:BrowserWindow.id", + "doc:id", + "doc:browserwindowid", + "doc:BrowserWindow.id" + ] + }, { "objectID": "api-browser-window#browserwindowgetallwindows", "name": "getAllWindows", + "signature": "()", "returns": { "type": "BrowserWindow", "collection": true, @@ -1372,8 +4239,18 @@ { "objectID": "api-browser-window#browserwindowgetfocusedwindow", "name": "getFocusedWindow", + "signature": "()", "returns": { - "type": "BrowserWindow", + "type": [ + { + "typeName": "BrowserWindow", + "collection": false + }, + { + "typeName": "null", + "collection": false + } + ], "collection": false, "description": "The window that is focused in this application, otherwise returns null." }, @@ -1396,6 +4273,7 @@ { "objectID": "api-browser-window#browserwindowfromwebcontentswebcontents", "name": "fromWebContents", + "signature": "(webContents)", "parameters": [ { "name": "webContents", @@ -1428,6 +4306,7 @@ { "objectID": "api-browser-window#browserwindowfrombrowserviewbrowserview", "name": "fromBrowserView", + "signature": "(browserView)", "parameters": [ { "name": "browserView", @@ -1469,6 +4348,7 @@ { "objectID": "api-browser-window#browserwindowfromidid", "name": "fromId", + "signature": "(id)", "parameters": [ { "name": "id", @@ -1501,6 +4381,7 @@ { "objectID": "api-browser-window#browserwindowaddextensionpath", "name": "addExtension", + "signature": "(path)", "description": "Adds Chrome extension located at path, and returns extension's name. The method will also not return if the extension's manifest is missing or incomplete. Note: This API cannot be called before the ready event of the app module is emitted.", "parameters": [ { @@ -1529,6 +4410,7 @@ { "objectID": "api-browser-window#browserwindowremoveextensionname", "name": "removeExtension", + "signature": "(name)", "description": "Remove a Chrome extension by name. Note: This API cannot be called before the ready event of the app module is emitted.", "parameters": [ { @@ -1557,6 +4439,7 @@ { "objectID": "api-browser-window#browserwindowgetextensions", "name": "getExtensions", + "signature": "()", "description": "Note: This API cannot be called before the ready event of the app module is emitted.", "returns": { "type": "Object", @@ -1582,6 +4465,7 @@ { "objectID": "api-browser-window#browserwindowadddevtoolsextensionpath", "name": "addDevToolsExtension", + "signature": "(path)", "description": "Adds DevTools extension located at path, and returns extension's name. The extension will be remembered so you only need to call this API once, this API is not for programming use. If you try to add an extension that has already been loaded, this method will not return and instead log a warning to the console. The method will also not return if the extension's manifest is missing or incomplete. Note: This API cannot be called before the ready event of the app module is emitted.", "parameters": [ { @@ -1610,6 +4494,7 @@ { "objectID": "api-browser-window#browserwindowremovedevtoolsextensionname", "name": "removeDevToolsExtension", + "signature": "(name)", "description": "Remove a DevTools extension by name. Note: This API cannot be called before the ready event of the app module is emitted.", "parameters": [ { @@ -1638,6 +4523,7 @@ { "objectID": "api-browser-window#browserwindowgetdevtoolsextensions", "name": "getDevToolsExtensions", + "signature": "()", "description": "To check if a DevTools extension is installed you can run the following: Note: This API cannot be called before the ready event of the app module is emitted.", "returns": { "type": "Object", @@ -1663,6 +4549,7 @@ { "objectID": "api-browser-window#windestroy", "name": "destroy", + "signature": "()", "description": "Force closing the window, the unload and beforeunload event won't be emitted for the web page, and close event will also not be emitted for this window, but it guarantees the closed event will be emitted.", "apiType": "instanceMethod", "fullSignature": "win.destroy()", @@ -1683,6 +4570,7 @@ { "objectID": "api-browser-window#winclose", "name": "close", + "signature": "()", "description": "Try to close the window. This has the same effect as a user manually clicking the close button of the window. The web page may cancel the close though. See the close event.", "apiType": "instanceMethod", "fullSignature": "win.close()", @@ -1703,6 +4591,7 @@ { "objectID": "api-browser-window#winfocus", "name": "focus", + "signature": "()", "description": "Focuses on the window.", "apiType": "instanceMethod", "fullSignature": "win.focus()", @@ -1723,6 +4612,7 @@ { "objectID": "api-browser-window#winblur", "name": "blur", + "signature": "()", "description": "Removes focus from the window.", "apiType": "instanceMethod", "fullSignature": "win.blur()", @@ -1743,6 +4633,7 @@ { "objectID": "api-browser-window#winisfocused", "name": "isFocused", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -1767,6 +4658,7 @@ { "objectID": "api-browser-window#winisdestroyed", "name": "isDestroyed", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -1791,6 +4683,7 @@ { "objectID": "api-browser-window#winshow", "name": "show", + "signature": "()", "description": "Shows and gives focus to the window.", "apiType": "instanceMethod", "fullSignature": "win.show()", @@ -1811,6 +4704,7 @@ { "objectID": "api-browser-window#winshowinactive", "name": "showInactive", + "signature": "()", "description": "Shows the window but doesn't focus on it.", "apiType": "instanceMethod", "fullSignature": "win.showInactive()", @@ -1831,6 +4725,7 @@ { "objectID": "api-browser-window#winhide", "name": "hide", + "signature": "()", "description": "Hides the window.", "apiType": "instanceMethod", "fullSignature": "win.hide()", @@ -1851,6 +4746,7 @@ { "objectID": "api-browser-window#winisvisible", "name": "isVisible", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -1875,6 +4771,7 @@ { "objectID": "api-browser-window#winismodal", "name": "isModal", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -1899,6 +4796,7 @@ { "objectID": "api-browser-window#winmaximize", "name": "maximize", + "signature": "()", "description": "Maximizes the window. This will also show (but not focus) the window if it isn't being displayed already.", "apiType": "instanceMethod", "fullSignature": "win.maximize()", @@ -1919,6 +4817,7 @@ { "objectID": "api-browser-window#winunmaximize", "name": "unmaximize", + "signature": "()", "description": "Unmaximizes the window.", "apiType": "instanceMethod", "fullSignature": "win.unmaximize()", @@ -1939,6 +4838,7 @@ { "objectID": "api-browser-window#winismaximized", "name": "isMaximized", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -1963,6 +4863,7 @@ { "objectID": "api-browser-window#winminimize", "name": "minimize", + "signature": "()", "description": "Minimizes the window. On some platforms the minimized window will be shown in the Dock.", "apiType": "instanceMethod", "fullSignature": "win.minimize()", @@ -1983,6 +4884,7 @@ { "objectID": "api-browser-window#winrestore", "name": "restore", + "signature": "()", "description": "Restores the window from minimized state to its previous state.", "apiType": "instanceMethod", "fullSignature": "win.restore()", @@ -2003,6 +4905,7 @@ { "objectID": "api-browser-window#winisminimized", "name": "isMinimized", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -2027,6 +4930,7 @@ { "objectID": "api-browser-window#winsetfullscreenflag", "name": "setFullScreen", + "signature": "(flag)", "description": "Sets whether the window should be in fullscreen mode.", "parameters": [ { @@ -2055,6 +4959,7 @@ { "objectID": "api-browser-window#winisfullscreen", "name": "isFullScreen", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -2079,6 +4984,7 @@ { "objectID": "api-browser-window#winsetsimplefullscreenflag", "name": "setSimpleFullScreen", + "signature": "(flag)", "platforms": [ "macOS" ], @@ -2110,6 +5016,7 @@ { "objectID": "api-browser-window#winissimplefullscreen", "name": "isSimpleFullScreen", + "signature": "()", "platforms": [ "macOS" ], @@ -2134,13 +5041,39 @@ "doc:win.isSimpleFullScreen()" ] }, + { + "objectID": "api-browser-window#winisnormal", + "name": "isNormal", + "signature": "()", + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the window is in normal state (not maximized, not minimized, not in fullscreen mode)." + }, + "apiType": "instanceMethod", + "fullSignature": "win.isNormal()", + "tldr": "Returns whether the window is in normal state (not maximized, not minimized, not in fullscreen mode).", + "slug": "winisnormal", + "url": "https://electronjs.org/docs/api/browser-window#winisnormal", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isNormal", + "api:winisnormal", + "api:win.isNormal()", + "doc:isNormal", + "doc:winisnormal", + "doc:win.isNormal()" + ] + }, { "objectID": "api-browser-window#winsetaspectratioaspectratio-extrasize", "name": "setAspectRatio", + "signature": "(aspectRatio[, extraSize])", "platforms": [ "macOS" ], - "description": "This will make a window maintain an aspect ratio. The extra size allows a developer to have space, specified in pixels, not included within the aspect ratio calculations. This API already takes into account the difference between a window's size and its content size. Consider a normal window with an HD video player and associated controls. Perhaps there are 15 pixels of controls on the left edge, 25 pixels of controls on the right edge and 50 pixels of controls below the player. In order to maintain a 16:9 aspect ratio (standard aspect ratio for HD @1920x1080) within the player itself we would call this function with arguments of 16/9 and [ 40, 50 ]. The second argument doesn't care where the extra width and height are within the content view--only that they exist. Just sum any extra width and height areas you have within the overall content view.", + "description": "This will make a window maintain an aspect ratio. The extra size allows a developer to have space, specified in pixels, not included within the aspect ratio calculations. This API already takes into account the difference between a window's size and its content size. Consider a normal window with an HD video player and associated controls. Perhaps there are 15 pixels of controls on the left edge, 25 pixels of controls on the right edge and 50 pixels of controls below the player. In order to maintain a 16:9 aspect ratio (standard aspect ratio for HD @1920x1080) within the player itself we would call this function with arguments of 16/9 and [ 40, 50 ]. The second argument doesn't care where the extra width and height are within the content view--only that they exist. Sum any extra width and height areas you have within the overall content view. Calling this function with a value of 0 will remove any previously set aspect ratios.", "parameters": [ { "name": "aspectRatio", @@ -2173,9 +5106,40 @@ "doc:win.setAspectRatio(aspectRatio[, extraSize])" ] }, + { + "objectID": "api-browser-window#winsetbackgroundcolorbackgroundcolor", + "name": "setBackgroundColor", + "signature": "(backgroundColor)", + "description": "Sets the background color of the window. See Setting backgroundColor.", + "parameters": [ + { + "name": "backgroundColor", + "type": "String", + "collection": false, + "description": "Window's background color as a hexadecimal value, like `#66CD00` or `#FFF` or `#80FFFFFF` (alpha is supported if `transparent` is `true`). Default is `#FFF` (white).", + "required": true + } + ], + "apiType": "instanceMethod", + "fullSignature": "win.setBackgroundColor(backgroundColor)", + "tldr": "Sets the background color of the window.", + "slug": "winsetbackgroundcolorbackgroundcolor", + "url": "https://electronjs.org/docs/api/browser-window#winsetbackgroundcolorbackgroundcolor", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setBackgroundColor", + "api:winsetbackgroundcolorbackgroundcolor", + "api:win.setBackgroundColor(backgroundColor)", + "doc:setBackgroundColor", + "doc:winsetbackgroundcolorbackgroundcolor", + "doc:win.setBackgroundColor(backgroundColor)" + ] + }, { "objectID": "api-browser-window#winpreviewfilepath-displayname", "name": "previewFile", + "signature": "(path[, displayName])", "platforms": [ "macOS" ], @@ -2215,6 +5179,7 @@ { "objectID": "api-browser-window#winclosefilepreview", "name": "closeFilePreview", + "signature": "()", "platforms": [ "macOS" ], @@ -2238,7 +5203,8 @@ { "objectID": "api-browser-window#winsetboundsbounds-animate", "name": "setBounds", - "description": "Resizes and moves the window to the supplied bounds", + "signature": "(bounds[, animate])", + "description": "Resizes and moves the window to the supplied bounds. Any properties that are not supplied will default to their current values.", "parameters": [ { "name": "bounds", @@ -2272,6 +5238,7 @@ { "objectID": "api-browser-window#wingetbounds", "name": "getBounds", + "signature": "()", "returns": { "type": "Rectangle", "collection": false @@ -2295,6 +5262,7 @@ { "objectID": "api-browser-window#winsetcontentboundsbounds-animate", "name": "setContentBounds", + "signature": "(bounds[, animate])", "description": "Resizes and moves the window's client area (e.g. the web page) to the supplied bounds.", "parameters": [ { @@ -2329,6 +5297,7 @@ { "objectID": "api-browser-window#wingetcontentbounds", "name": "getContentBounds", + "signature": "()", "returns": { "type": "Rectangle", "collection": false @@ -2349,9 +5318,36 @@ "doc:win.getContentBounds()" ] }, + { + "objectID": "api-browser-window#wingetnormalbounds", + "name": "getNormalBounds", + "signature": "()", + "description": "Note: whatever the current state of the window : maximized, minimized or in fullscreen, this function always returns the position and size of the window in normal state. In normal state, getBounds and getNormalBounds returns the same Rectangle.", + "returns": { + "type": "Rectangle", + "collection": false, + "description": "Contains the window bounds of the normal state" + }, + "apiType": "instanceMethod", + "fullSignature": "win.getNormalBounds()", + "tldr": "Note: whatever the current state of the window : maximized, minimized or in fullscreen, this function always returns the position and size of the window in normal state.", + "slug": "wingetnormalbounds", + "url": "https://electronjs.org/docs/api/browser-window#wingetnormalbounds", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getNormalBounds", + "api:wingetnormalbounds", + "api:win.getNormalBounds()", + "doc:getNormalBounds", + "doc:wingetnormalbounds", + "doc:win.getNormalBounds()" + ] + }, { "objectID": "api-browser-window#winsetenabledenable", "name": "setEnabled", + "signature": "(enable)", "description": "Disable or enable the window.", "parameters": [ { @@ -2380,7 +5376,8 @@ { "objectID": "api-browser-window#winsetsizewidth-height-animate", "name": "setSize", - "description": "Resizes the window to width and height.", + "signature": "(width, height[, animate])", + "description": "Resizes the window to width and height. If width or height are below any set minimum size constraints the window will snap to its minimum size.", "parameters": [ { "name": "width", @@ -2420,6 +5417,7 @@ { "objectID": "api-browser-window#wingetsize", "name": "getSize", + "signature": "()", "returns": { "type": "Integer", "collection": true, @@ -2444,6 +5442,7 @@ { "objectID": "api-browser-window#winsetcontentsizewidth-height-animate", "name": "setContentSize", + "signature": "(width, height[, animate])", "description": "Resizes the window's client area (e.g. the web page) to width and height.", "parameters": [ { @@ -2484,6 +5483,7 @@ { "objectID": "api-browser-window#wingetcontentsize", "name": "getContentSize", + "signature": "()", "returns": { "type": "Integer", "collection": true, @@ -2508,6 +5508,7 @@ { "objectID": "api-browser-window#winsetminimumsizewidth-height", "name": "setMinimumSize", + "signature": "(width, height)", "description": "Sets the minimum size of window to width and height.", "parameters": [ { @@ -2542,6 +5543,7 @@ { "objectID": "api-browser-window#wingetminimumsize", "name": "getMinimumSize", + "signature": "()", "returns": { "type": "Integer", "collection": true, @@ -2566,6 +5568,7 @@ { "objectID": "api-browser-window#winsetmaximumsizewidth-height", "name": "setMaximumSize", + "signature": "(width, height)", "description": "Sets the maximum size of window to width and height.", "parameters": [ { @@ -2600,6 +5603,7 @@ { "objectID": "api-browser-window#wingetmaximumsize", "name": "getMaximumSize", + "signature": "()", "returns": { "type": "Integer", "collection": true, @@ -2624,6 +5628,7 @@ { "objectID": "api-browser-window#winsetresizableresizable", "name": "setResizable", + "signature": "(resizable)", "description": "Sets whether the window can be manually resized by user.", "parameters": [ { @@ -2652,6 +5657,7 @@ { "objectID": "api-browser-window#winisresizable", "name": "isResizable", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -2676,6 +5682,7 @@ { "objectID": "api-browser-window#winsetmovablemovable", "name": "setMovable", + "signature": "(movable)", "platforms": [ "macOS", "Windows" @@ -2708,6 +5715,7 @@ { "objectID": "api-browser-window#winismovable", "name": "isMovable", + "signature": "()", "platforms": [ "macOS", "Windows" @@ -2737,6 +5745,7 @@ { "objectID": "api-browser-window#winsetminimizableminimizable", "name": "setMinimizable", + "signature": "(minimizable)", "platforms": [ "macOS", "Windows" @@ -2769,6 +5778,7 @@ { "objectID": "api-browser-window#winisminimizable", "name": "isMinimizable", + "signature": "()", "platforms": [ "macOS", "Windows" @@ -2798,6 +5808,7 @@ { "objectID": "api-browser-window#winsetmaximizablemaximizable", "name": "setMaximizable", + "signature": "(maximizable)", "platforms": [ "macOS", "Windows" @@ -2830,6 +5841,7 @@ { "objectID": "api-browser-window#winismaximizable", "name": "isMaximizable", + "signature": "()", "platforms": [ "macOS", "Windows" @@ -2859,6 +5871,7 @@ { "objectID": "api-browser-window#winsetfullscreenablefullscreenable", "name": "setFullScreenable", + "signature": "(fullscreenable)", "description": "Sets whether the maximize/zoom window button toggles fullscreen mode or maximizes the window.", "parameters": [ { @@ -2887,6 +5900,7 @@ { "objectID": "api-browser-window#winisfullscreenable", "name": "isFullScreenable", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -2911,6 +5925,7 @@ { "objectID": "api-browser-window#winsetclosableclosable", "name": "setClosable", + "signature": "(closable)", "platforms": [ "macOS", "Windows" @@ -2943,6 +5958,7 @@ { "objectID": "api-browser-window#winisclosable", "name": "isClosable", + "signature": "()", "platforms": [ "macOS", "Windows" @@ -2972,6 +5988,7 @@ { "objectID": "api-browser-window#winsetalwaysontopflag-level-relativelevel", "name": "setAlwaysOnTop", + "signature": "(flag[, level][, relativeLevel])", "description": "Sets whether the window should show always on top of other windows. After setting this, the window is still a normal window, not a toolbox window which can not be focused on.", "parameters": [ { @@ -3040,6 +6057,7 @@ { "objectID": "api-browser-window#winisalwaysontop", "name": "isAlwaysOnTop", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -3061,9 +6079,35 @@ "doc:win.isAlwaysOnTop()" ] }, + { + "objectID": "api-browser-window#winmovetop", + "name": "moveTop", + "signature": "()", + "platforms": [ + "macOS", + "Windows" + ], + "description": "Moves window to top(z-order) regardless of focus", + "apiType": "instanceMethod", + "fullSignature": "win.moveTop()", + "tldr": "Moves window to top(z-order) regardless of focus.", + "slug": "winmovetop", + "url": "https://electronjs.org/docs/api/browser-window#winmovetop", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:moveTop", + "api:winmovetop", + "api:win.moveTop()", + "doc:moveTop", + "doc:winmovetop", + "doc:win.moveTop()" + ] + }, { "objectID": "api-browser-window#wincenter", "name": "center", + "signature": "()", "description": "Moves window to the center of the screen.", "apiType": "instanceMethod", "fullSignature": "win.center()", @@ -3084,6 +6128,7 @@ { "objectID": "api-browser-window#winsetpositionx-y-animate", "name": "setPosition", + "signature": "(x, y[, animate])", "description": "Moves window to x and y.", "parameters": [ { @@ -3124,6 +6169,7 @@ { "objectID": "api-browser-window#wingetposition", "name": "getPosition", + "signature": "()", "returns": { "type": "Integer", "collection": true, @@ -3148,6 +6194,7 @@ { "objectID": "api-browser-window#winsettitletitle", "name": "setTitle", + "signature": "(title)", "description": "Changes the title of native window to title.", "parameters": [ { @@ -3176,7 +6223,8 @@ { "objectID": "api-browser-window#wingettitle", "name": "getTitle", - "description": "Note: The title of web page can be different from the title of the native window.", + "signature": "()", + "description": "Note: The title of the web page can be different from the title of the native window.", "returns": { "type": "String", "collection": false, @@ -3184,7 +6232,7 @@ }, "apiType": "instanceMethod", "fullSignature": "win.getTitle()", - "tldr": "Note: The title of web page can be different from the title of the native window.", + "tldr": "Note: The title of the web page can be different from the title of the native window.", "slug": "wingettitle", "url": "https://electronjs.org/docs/api/browser-window#wingettitle", "keyValuePairs": [ @@ -3201,6 +6249,7 @@ { "objectID": "api-browser-window#winsetsheetoffsetoffsety-offsetx", "name": "setSheetOffset", + "signature": "(offsetY[, offsetX])", "platforms": [ "macOS" ], @@ -3238,6 +6287,7 @@ { "objectID": "api-browser-window#winflashframeflag", "name": "flashFrame", + "signature": "(flag)", "description": "Starts or stops flashing the window to attract user's attention.", "parameters": [ { @@ -3266,6 +6316,7 @@ { "objectID": "api-browser-window#winsetskiptaskbarskip", "name": "setSkipTaskbar", + "signature": "(skip)", "description": "Makes the window not show in the taskbar.", "parameters": [ { @@ -3294,6 +6345,7 @@ { "objectID": "api-browser-window#winsetkioskflag", "name": "setKiosk", + "signature": "(flag)", "description": "Enters or leaves the kiosk mode.", "parameters": [ { @@ -3322,6 +6374,7 @@ { "objectID": "api-browser-window#winiskiosk", "name": "isKiosk", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -3346,6 +6399,7 @@ { "objectID": "api-browser-window#wingetnativewindowhandle", "name": "getNativeWindowHandle", + "signature": "()", "description": "The native type of the handle is HWND on Windows, NSView* on macOS, and Window (unsigned long) on Linux.", "returns": { "type": "Buffer", @@ -3371,6 +6425,7 @@ { "objectID": "api-browser-window#winhookwindowmessagemessage-callback", "name": "hookWindowMessage", + "signature": "(message, callback)", "platforms": [ "Windows" ], @@ -3408,6 +6463,7 @@ { "objectID": "api-browser-window#winiswindowmessagehookedmessage", "name": "isWindowMessageHooked", + "signature": "(message)", "platforms": [ "Windows" ], @@ -3443,6 +6499,7 @@ { "objectID": "api-browser-window#winunhookwindowmessagemessage", "name": "unhookWindowMessage", + "signature": "(message)", "platforms": [ "Windows" ], @@ -3474,6 +6531,7 @@ { "objectID": "api-browser-window#winunhookallwindowmessages", "name": "unhookAllWindowMessages", + "signature": "()", "platforms": [ "Windows" ], @@ -3497,6 +6555,7 @@ { "objectID": "api-browser-window#winsetrepresentedfilenamefilename", "name": "setRepresentedFilename", + "signature": "(filename)", "platforms": [ "macOS" ], @@ -3528,6 +6587,7 @@ { "objectID": "api-browser-window#wingetrepresentedfilename", "name": "getRepresentedFilename", + "signature": "()", "platforms": [ "macOS" ], @@ -3555,6 +6615,7 @@ { "objectID": "api-browser-window#winsetdocumenteditededited", "name": "setDocumentEdited", + "signature": "(edited)", "platforms": [ "macOS" ], @@ -3586,6 +6647,7 @@ { "objectID": "api-browser-window#winisdocumentedited", "name": "isDocumentEdited", + "signature": "()", "platforms": [ "macOS" ], @@ -3613,6 +6675,7 @@ { "objectID": "api-browser-window#winfocusonwebview", "name": "focusOnWebView", + "signature": "()", "apiType": "instanceMethod", "fullSignature": "win.focusOnWebView()", "tldr": null, @@ -3632,6 +6695,7 @@ { "objectID": "api-browser-window#winblurwebview", "name": "blurWebView", + "signature": "()", "apiType": "instanceMethod", "fullSignature": "win.blurWebView()", "tldr": null, @@ -3651,7 +6715,8 @@ { "objectID": "api-browser-window#wincapturepagerect-callback", "name": "capturePage", - "description": "Same as webContents.capturePage([rect, ]callback).", + "signature": "([rect, ]callback)", + "description": "Captures a snapshot of the page within rect. Upon completion callback will be called with callback(image). The image is an instance of NativeImage that stores data of the snapshot. Omitting rect will capture the whole visible page. Deprecated Soon", "parameters": [ { "name": "rect", @@ -3678,7 +6743,7 @@ ], "apiType": "instanceMethod", "fullSignature": "win.capturePage([rect, ]callback)", - "tldr": "Same as webContents.capturePage([rect, ]callback).", + "tldr": "Captures a snapshot of the page within rect.", "slug": "wincapturepagerect-callback", "url": "https://electronjs.org/docs/api/browser-window#wincapturepagerect-callback", "keyValuePairs": [ @@ -3692,9 +6757,40 @@ "doc:win.capturePage([rect, ]callback)" ] }, + { + "objectID": "api-browser-window#wincapturepagerect", + "name": "capturePage", + "signature": "([rect])", + "description": "Captures a snapshot of the page within rect. Omitting rect will capture the whole visible page.", + "parameters": [ + { + "name": "rect", + "type": "Rectangle", + "collection": false, + "description": "The bounds to capture", + "required": false + } + ], + "apiType": "instanceMethod", + "fullSignature": "win.capturePage([rect])", + "tldr": "Captures a snapshot of the page within rect.", + "slug": "wincapturepagerect", + "url": "https://electronjs.org/docs/api/browser-window#wincapturepagerect", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:capturePage", + "api:wincapturepagerect", + "api:win.capturePage([rect])", + "doc:capturePage", + "doc:wincapturepagerect", + "doc:win.capturePage([rect])" + ] + }, { "objectID": "api-browser-window#winloadurlurl-options", "name": "loadURL", + "signature": "(url[, options])", "description": "Same as webContents.loadURL(url[, options]). The url can be a remote address (e.g. http://) or a path to a local HTML file using the file:// protocol. To ensure that file URLs are properly formatted, it is recommended to use Node's url.format method: You can load a URL using a POST request with URL-encoded data by doing the following:", "parameters": [ { @@ -3711,9 +6807,18 @@ "properties": [ { "name": "httpReferrer", - "type": "String", + "type": [ + { + "typeName": "String", + "collection": false + }, + { + "typeName": "Referrer", + "collection": false + } + ], "collection": false, - "description": "A HTTP Referrer url.", + "description": "An HTTP Referrer url.", "required": false }, { @@ -3741,10 +6846,6 @@ "typeName": "UploadFile", "collection": true }, - { - "typeName": "UploadFileSystem", - "collection": true - }, { "typeName": "UploadBlob", "collection": true @@ -3764,6 +6865,12 @@ ] } ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "void", + "description": "the promise will resolve when the page has finished loading (see did-finish-load), and rejects if the page fails to load (see did-fail-load)." + }, "apiType": "instanceMethod", "fullSignature": "win.loadURL(url[, options])", "tldr": "Same as webContents.loadURL(url[, options]).", @@ -3781,8 +6888,9 @@ ] }, { - "objectID": "api-browser-window#winloadfilefilepath", + "objectID": "api-browser-window#winloadfilefilepath-options", "name": "loadFile", + "signature": "(filePath[, options])", "description": "Same as webContents.loadFile, filePath should be a path to an HTML file relative to the root of your application. See the webContents docs for more information.", "parameters": [ { @@ -3790,27 +6898,64 @@ "type": "String", "collection": false, "required": true + }, + { + "name": "options", + "type": "Object", + "collection": false, + "required": false, + "properties": [ + { + "name": "query", + "type": "Object", + "collection": false, + "description": "Passed to url.format().", + "required": false, + "properties": [] + }, + { + "name": "search", + "type": "String", + "collection": false, + "description": "Passed to url.format().", + "required": false + }, + { + "name": "hash", + "type": "String", + "collection": false, + "description": "Passed to url.format().", + "required": false + } + ] } ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "void", + "description": "the promise will resolve when the page has finished loading (see did-finish-load), and rejects if the page fails to load (see did-fail-load)." + }, "apiType": "instanceMethod", - "fullSignature": "win.loadFile(filePath)", + "fullSignature": "win.loadFile(filePath[, options])", "tldr": "Same as webContents.loadFile, filePath should be a path to an HTML file relative to the root of your application.", - "slug": "winloadfilefilepath", - "url": "https://electronjs.org/docs/api/browser-window#winloadfilefilepath", + "slug": "winloadfilefilepath-options", + "url": "https://electronjs.org/docs/api/browser-window#winloadfilefilepath-options", "keyValuePairs": [ "is:doc", "is:api", "api:loadFile", - "api:winloadfilefilepath", - "api:win.loadFile(filePath)", + "api:winloadfilefilepath-options", + "api:win.loadFile(filePath[, options])", "doc:loadFile", - "doc:winloadfilefilepath", - "doc:win.loadFile(filePath)" + "doc:winloadfilefilepath-options", + "doc:win.loadFile(filePath[, options])" ] }, { "objectID": "api-browser-window#winreload", "name": "reload", + "signature": "()", "description": "Same as webContents.reload.", "apiType": "instanceMethod", "fullSignature": "win.reload()", @@ -3831,11 +6976,12 @@ { "objectID": "api-browser-window#winsetmenumenu", "name": "setMenu", + "signature": "(menu)", "platforms": [ "Linux", "Windows" ], - "description": "Sets the menu as the window's menu bar, setting it to null will remove the menu bar.", + "description": "Sets the menu as the window's menu bar.", "parameters": [ { "name": "menu", @@ -3855,7 +7001,7 @@ ], "apiType": "instanceMethod", "fullSignature": "win.setMenu(menu)", - "tldr": "Sets the menu as the window's menu bar, setting it to null will remove the menu bar.", + "tldr": "Sets the menu as the window's menu bar.", "slug": "winsetmenumenu", "url": "https://electronjs.org/docs/api/browser-window#winsetmenumenu", "keyValuePairs": [ @@ -3869,9 +7015,35 @@ "doc:win.setMenu(menu)" ] }, + { + "objectID": "api-browser-window#winremovemenu", + "name": "removeMenu", + "signature": "()", + "platforms": [ + "Linux", + "Windows" + ], + "description": "Remove the window's menu bar.", + "apiType": "instanceMethod", + "fullSignature": "win.removeMenu()", + "tldr": "Remove the window's menu bar.", + "slug": "winremovemenu", + "url": "https://electronjs.org/docs/api/browser-window#winremovemenu", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:removeMenu", + "api:winremovemenu", + "api:win.removeMenu()", + "doc:removeMenu", + "doc:winremovemenu", + "doc:win.removeMenu()" + ] + }, { "objectID": "api-browser-window#winsetprogressbarprogress-options", "name": "setProgressBar", + "signature": "(progress[, options])", "description": "Sets progress value in progress bar. Valid range is [0, 1.0]. Remove progress bar when progress < 0; Change to indeterminate mode when progress > 1. On Linux platform, only supports Unity desktop environment, you need to specify the *.desktop file name to desktopName field in package.json. By default, it will assume app.getName().desktop. On Windows, a mode can be passed. Accepted values are none, normal, indeterminate, error, and paused. If you call setProgressBar without a mode set (but with a value within the valid range), normal will be assumed.", "parameters": [ { @@ -3932,6 +7104,7 @@ { "objectID": "api-browser-window#winsetoverlayiconoverlay-description", "name": "setOverlayIcon", + "signature": "(overlay, description)", "platforms": [ "Windows" ], @@ -3939,7 +7112,16 @@ "parameters": [ { "name": "overlay", - "type": "NativeImage", + "type": [ + { + "typeName": "NativeImage", + "collection": false + }, + { + "typeName": "null", + "collection": false + } + ], "collection": false, "description": "the icon to display on the bottom right corner of the taskbar icon. If this parameter is `null`, the overlay is cleared", "required": true @@ -3971,6 +7153,7 @@ { "objectID": "api-browser-window#winsethasshadowhasshadow", "name": "setHasShadow", + "signature": "(hasShadow)", "platforms": [ "macOS" ], @@ -4002,6 +7185,7 @@ { "objectID": "api-browser-window#winhasshadow", "name": "hasShadow", + "signature": "()", "platforms": [ "macOS" ], @@ -4030,6 +7214,7 @@ { "objectID": "api-browser-window#winsetopacityopacity", "name": "setOpacity", + "signature": "(opacity)", "platforms": [ "Windows", "macOS" @@ -4063,6 +7248,7 @@ { "objectID": "api-browser-window#wingetopacity", "name": "getOpacity", + "signature": "()", "platforms": [ "Windows", "macOS" @@ -4088,9 +7274,45 @@ "doc:win.getOpacity()" ] }, + { + "objectID": "api-browser-window#winsetshaperects", + "name": "setShape", + "signature": "(rects)", + "platforms": [ + "Windows", + "Linux", + "Experimental" + ], + "description": "Setting a window shape determines the area within the window where the system permits drawing and user interaction. Outside of the given region, no pixels will be drawn and no mouse events will be registered. Mouse events outside of the region will not be received by that window, but will fall through to whatever is behind the window.", + "parameters": [ + { + "name": "rects", + "type": "Rectangle", + "collection": true, + "description": "Sets a shape on the window. Passing an empty list reverts the window to being rectangular.", + "required": true + } + ], + "apiType": "instanceMethod", + "fullSignature": "win.setShape(rects)", + "tldr": "Setting a window shape determines the area within the window where the system permits drawing and user interaction.", + "slug": "winsetshaperects", + "url": "https://electronjs.org/docs/api/browser-window#winsetshaperects", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setShape", + "api:winsetshaperects", + "api:win.setShape(rects)", + "doc:setShape", + "doc:winsetshaperects", + "doc:win.setShape(rects)" + ] + }, { "objectID": "api-browser-window#winsetthumbarbuttonsbuttons", "name": "setThumbarButtons", + "signature": "(buttons)", "platforms": [ "Windows" ], @@ -4127,10 +7349,11 @@ { "objectID": "api-browser-window#winsetthumbnailclipregion", "name": "setThumbnailClip", + "signature": "(region)", "platforms": [ "Windows" ], - "description": "Sets the region of the window to show as the thumbnail image displayed when hovering over the window in the taskbar. You can reset the thumbnail to be the entire window by specifying an empty region: {x: 0, y: 0, width: 0, height: 0}.", + "description": "Sets the region of the window to show as the thumbnail image displayed when hovering over the window in the taskbar. You can reset the thumbnail to be the entire window by specifying an empty region: { x: 0, y: 0, width: 0, height: 0 }.", "parameters": [ { "name": "region", @@ -4159,6 +7382,7 @@ { "objectID": "api-browser-window#winsetthumbnailtooltiptooltip", "name": "setThumbnailToolTip", + "signature": "(toolTip)", "platforms": [ "Windows" ], @@ -4190,6 +7414,7 @@ { "objectID": "api-browser-window#winsetappdetailsoptions", "name": "setAppDetails", + "signature": "(options)", "platforms": [ "Windows" ], @@ -4258,6 +7483,7 @@ { "objectID": "api-browser-window#winshowdefinitionforselection", "name": "showDefinitionForSelection", + "signature": "()", "platforms": [ "macOS" ], @@ -4281,6 +7507,7 @@ { "objectID": "api-browser-window#winseticonicon", "name": "setIcon", + "signature": "(icon)", "platforms": [ "Windows", "Linux" @@ -4310,9 +7537,42 @@ "doc:win.setIcon(icon)" ] }, + { + "objectID": "api-browser-window#winsetwindowbuttonvisibilityvisible", + "name": "setWindowButtonVisibility", + "signature": "(visible)", + "platforms": [ + "macOS" + ], + "description": "Sets whether the window traffic light buttons should be visible. This cannot be called when titleBarStyle is set to customButtonsOnHover.", + "parameters": [ + { + "name": "visible", + "type": "Boolean", + "collection": false, + "required": true + } + ], + "apiType": "instanceMethod", + "fullSignature": "win.setWindowButtonVisibility(visible)", + "tldr": "Sets whether the window traffic light buttons should be visible.", + "slug": "winsetwindowbuttonvisibilityvisible", + "url": "https://electronjs.org/docs/api/browser-window#winsetwindowbuttonvisibilityvisible", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setWindowButtonVisibility", + "api:winsetwindowbuttonvisibilityvisible", + "api:win.setWindowButtonVisibility(visible)", + "doc:setWindowButtonVisibility", + "doc:winsetwindowbuttonvisibilityvisible", + "doc:win.setWindowButtonVisibility(visible)" + ] + }, { "objectID": "api-browser-window#winsetautohidemenubarhide", "name": "setAutoHideMenuBar", + "signature": "(hide)", "description": "Sets whether the window menu bar should hide itself automatically. Once set the menu bar will only show when users press the single Alt key. If the menu bar is already visible, calling setAutoHideMenuBar(true) won't hide it immediately.", "parameters": [ { @@ -4341,6 +7601,7 @@ { "objectID": "api-browser-window#winismenubarautohide", "name": "isMenuBarAutoHide", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -4365,6 +7626,7 @@ { "objectID": "api-browser-window#winsetmenubarvisibilityvisible", "name": "setMenuBarVisibility", + "signature": "(visible)", "platforms": [ "Windows", "Linux" @@ -4397,6 +7659,7 @@ { "objectID": "api-browser-window#winismenubarvisible", "name": "isMenuBarVisible", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -4419,8 +7682,9 @@ ] }, { - "objectID": "api-browser-window#winsetvisibleonallworkspacesvisible", + "objectID": "api-browser-window#winsetvisibleonallworkspacesvisible-options", "name": "setVisibleOnAllWorkspaces", + "signature": "(visible[, options])", "description": "Sets whether the window should be visible on all workspaces. Note: This API does nothing on Windows.", "parameters": [ { @@ -4428,27 +7692,43 @@ "type": "Boolean", "collection": false, "required": true + }, + { + "name": "options", + "type": "Object", + "collection": false, + "required": false, + "properties": [ + { + "name": "visibleOnFullScreen", + "type": "Boolean", + "collection": false, + "description": "Sets whether the window should be visible above fullscreen windows", + "required": false + } + ] } ], "apiType": "instanceMethod", - "fullSignature": "win.setVisibleOnAllWorkspaces(visible)", + "fullSignature": "win.setVisibleOnAllWorkspaces(visible[, options])", "tldr": "Sets whether the window should be visible on all workspaces.", - "slug": "winsetvisibleonallworkspacesvisible", - "url": "https://electronjs.org/docs/api/browser-window#winsetvisibleonallworkspacesvisible", + "slug": "winsetvisibleonallworkspacesvisible-options", + "url": "https://electronjs.org/docs/api/browser-window#winsetvisibleonallworkspacesvisible-options", "keyValuePairs": [ "is:doc", "is:api", "api:setVisibleOnAllWorkspaces", - "api:winsetvisibleonallworkspacesvisible", - "api:win.setVisibleOnAllWorkspaces(visible)", + "api:winsetvisibleonallworkspacesvisible-options", + "api:win.setVisibleOnAllWorkspaces(visible[, options])", "doc:setVisibleOnAllWorkspaces", - "doc:winsetvisibleonallworkspacesvisible", - "doc:win.setVisibleOnAllWorkspaces(visible)" + "doc:winsetvisibleonallworkspacesvisible-options", + "doc:win.setVisibleOnAllWorkspaces(visible[, options])" ] }, { "objectID": "api-browser-window#winisvisibleonallworkspaces", "name": "isVisibleOnAllWorkspaces", + "signature": "()", "description": "Note: This API always returns false on Windows.", "returns": { "type": "Boolean", @@ -4474,6 +7754,7 @@ { "objectID": "api-browser-window#winsetignoremouseeventsignore-options", "name": "setIgnoreMouseEvents", + "signature": "(ignore[, options])", "description": "Makes the window ignore all mouse events. All mouse events happened in this window will be passed to the window below this window, but if this window has focus, it will still receive keyboard events.", "parameters": [ { @@ -4517,6 +7798,7 @@ { "objectID": "api-browser-window#winsetcontentprotectionenable", "name": "setContentProtection", + "signature": "(enable)", "platforms": [ "macOS", "Windows" @@ -4549,6 +7831,7 @@ { "objectID": "api-browser-window#winsetfocusablefocusable", "name": "setFocusable", + "signature": "(focusable)", "platforms": [ "Windows" ], @@ -4580,10 +7863,7 @@ { "objectID": "api-browser-window#winsetparentwindowparent", "name": "setParentWindow", - "platforms": [ - "Linux", - "macOS" - ], + "signature": "(parent)", "description": "Sets parent as current window's parent window, passing null will turn current window into a top-level window.", "parameters": [ { @@ -4612,6 +7892,7 @@ { "objectID": "api-browser-window#wingetparentwindow", "name": "getParentWindow", + "signature": "()", "returns": { "type": "BrowserWindow", "collection": false, @@ -4636,6 +7917,7 @@ { "objectID": "api-browser-window#wingetchildwindows", "name": "getChildWindows", + "signature": "()", "returns": { "type": "BrowserWindow", "collection": true, @@ -4660,6 +7942,7 @@ { "objectID": "api-browser-window#winsetautohidecursorautohide", "name": "setAutoHideCursor", + "signature": "(autoHide)", "platforms": [ "macOS" ], @@ -4691,6 +7974,7 @@ { "objectID": "api-browser-window#winselectprevioustab", "name": "selectPreviousTab", + "signature": "()", "platforms": [ "macOS" ], @@ -4714,6 +7998,7 @@ { "objectID": "api-browser-window#winselectnexttab", "name": "selectNextTab", + "signature": "()", "platforms": [ "macOS" ], @@ -4737,6 +8022,7 @@ { "objectID": "api-browser-window#winmergeallwindows", "name": "mergeAllWindows", + "signature": "()", "platforms": [ "macOS" ], @@ -4760,6 +8046,7 @@ { "objectID": "api-browser-window#winmovetabtonewwindow", "name": "moveTabToNewWindow", + "signature": "()", "platforms": [ "macOS" ], @@ -4783,6 +8070,7 @@ { "objectID": "api-browser-window#wintoggletabbar", "name": "toggleTabBar", + "signature": "()", "platforms": [ "macOS" ], @@ -4806,6 +8094,7 @@ { "objectID": "api-browser-window#winaddtabbedwindowbrowserwindow", "name": "addTabbedWindow", + "signature": "(browserWindow)", "platforms": [ "macOS" ], @@ -4837,6 +8126,7 @@ { "objectID": "api-browser-window#winsetvibrancytype", "name": "setVibrancy", + "signature": "(type)", "platforms": [ "macOS" ], @@ -4901,6 +8191,7 @@ { "objectID": "api-browser-window#winsettouchbartouchbar", "name": "setTouchBar", + "signature": "(touchBar)", "platforms": [ "macOS", "Experimental" @@ -4933,6 +8224,7 @@ { "objectID": "api-browser-window#winsetbrowserviewbrowserview", "name": "setBrowserView", + "signature": "(browserView)", "platforms": [ "Experimental" ], @@ -4941,6 +8233,7 @@ "name": "browserView", "type": "BrowserView", "collection": false, + "description": ". Attach browserView to win. If there is some other browserViews was attached they will be removed from this window.", "required": true } ], @@ -4963,10 +8256,10 @@ { "objectID": "api-browser-window#wingetbrowserview", "name": "getBrowserView", + "signature": "()", "platforms": [ "Experimental" ], - "description": "Note: The BrowserView API is currently experimental and may change or be removed in future Electron releases.", "returns": { "type": [ { @@ -4979,11 +8272,11 @@ } ], "collection": false, - "description": "an attached BrowserView. Returns null if none is attached." + "description": "an BrowserView what is attached. Returns null if none is attached. Throw error if multiple BrowserViews is attached." }, "apiType": "instanceMethod", "fullSignature": "win.getBrowserView()", - "tldr": "Note: The BrowserView API is currently experimental and may change or be removed in future Electron releases.", + "tldr": "Returns an BrowserView what is attached. Returns null if none is attached. Throw error if multiple BrowserViews is attached.", "slug": "wingetbrowserview", "url": "https://electronjs.org/docs/api/browser-window#wingetbrowserview", "keyValuePairs": [ @@ -4997,6 +8290,93 @@ "doc:win.getBrowserView()" ] }, + { + "objectID": "api-browser-window#winaddbrowserviewbrowserview", + "name": "addBrowserView", + "signature": "(browserView)", + "platforms": [ + "Experimental" + ], + "description": "Replacement API for setBrowserView supporting work with multi browser views.", + "parameters": [ + { + "name": "browserView", + "type": "BrowserView", + "collection": false, + "required": true + } + ], + "apiType": "instanceMethod", + "fullSignature": "win.addBrowserView(browserView)", + "tldr": "Replacement API for setBrowserView supporting work with multi browser views.", + "slug": "winaddbrowserviewbrowserview", + "url": "https://electronjs.org/docs/api/browser-window#winaddbrowserviewbrowserview", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:addBrowserView", + "api:winaddbrowserviewbrowserview", + "api:win.addBrowserView(browserView)", + "doc:addBrowserView", + "doc:winaddbrowserviewbrowserview", + "doc:win.addBrowserView(browserView)" + ] + }, + { + "objectID": "api-browser-window#winremovebrowserviewbrowserview", + "name": "removeBrowserView", + "signature": "(browserView)", + "platforms": [ + "Experimental" + ], + "parameters": [ + { + "name": "browserView", + "type": "BrowserView", + "collection": false, + "required": true + } + ], + "apiType": "instanceMethod", + "fullSignature": "win.removeBrowserView(browserView)", + "tldr": null, + "slug": "winremovebrowserviewbrowserview", + "url": "https://electronjs.org/docs/api/browser-window#winremovebrowserviewbrowserview", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:removeBrowserView", + "api:winremovebrowserviewbrowserview", + "api:win.removeBrowserView(browserView)", + "doc:removeBrowserView", + "doc:winremovebrowserviewbrowserview", + "doc:win.removeBrowserView(browserView)" + ] + }, + { + "objectID": "api-browser-window#wingetbrowserviews", + "name": "getBrowserViews", + "signature": "()", + "platforms": [ + "Experimental" + ], + "description": "Returns array of BrowserView what was an attached with addBrowserView or setBrowserView. Note: The BrowserView API is currently experimental and may change or be removed in future Electron releases.", + "apiType": "instanceMethod", + "fullSignature": "win.getBrowserViews()", + "tldr": "Returns array of BrowserView what was an attached with addBrowserView or setBrowserView.", + "slug": "wingetbrowserviews", + "url": "https://electronjs.org/docs/api/browser-window#wingetbrowserviews", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getBrowserViews", + "api:wingetbrowserviews", + "api:win.getBrowserViews()", + "doc:getBrowserViews", + "doc:wingetbrowserviews", + "doc:win.getBrowserViews()" + ] + }, { "objectID": "api-browser-window#event-page-title-updated", "name": "page-title-updated", @@ -5018,22 +8398,23 @@ "apiType": "event", "fullSignature": "win.on('page-title-updated')", "url": "https://electronjs.org/docs/api/browser-window#event-page-title-updated", + "slug": "winonpage-title-updated", "tldr": "Emitted when the document changed its title, calling event.preventDefault() will prevent the native window's title from changing.", "keyValuePairs": [ "is:doc", "is:api", "api:page-title-updated", - "api:undefined", + "api:winonpage-title-updated", "api:win.on('page-title-updated')", "doc:page-title-updated", - "doc:undefined", + "doc:winonpage-title-updated", "doc:win.on('page-title-updated')" ] }, { "objectID": "api-browser-window#event-close", "name": "close", - "description": "Emitted when the window is going to be closed. It's emitted before the beforeunload and unload event of the DOM. Calling event.preventDefault() will cancel the close. Usually you would want to use the beforeunload handler to decide whether the window should be closed, which will also be called when the window is reloaded. In Electron, returning any value other than undefined would cancel the close. For example: Note: There is a subtle difference between the behaviors of window.onbeforeunload = handler and window.addEventListener('beforeunload', handler). It is recommended to always set the event.returnValue explicitly, instead of just returning a value, as the former works more consistently within Electron.", + "description": "Emitted when the window is going to be closed. It's emitted before the beforeunload and unload event of the DOM. Calling event.preventDefault() will cancel the close. Usually you would want to use the beforeunload handler to decide whether the window should be closed, which will also be called when the window is reloaded. In Electron, returning any value other than undefined would cancel the close. For example: Note: There is a subtle difference between the behaviors of window.onbeforeunload = handler and window.addEventListener('beforeunload', handler). It is recommended to always set the event.returnValue explicitly, instead of only returning a value, as the former works more consistently within Electron.", "returns": [ { "name": "event", @@ -5045,15 +8426,16 @@ "apiType": "event", "fullSignature": "win.on('close')", "url": "https://electronjs.org/docs/api/browser-window#event-close", + "slug": "winonclose", "tldr": "Emitted when the window is going to be closed.", "keyValuePairs": [ "is:doc", "is:api", "api:close", - "api:undefined", + "api:winonclose", "api:win.on('close')", "doc:close", - "doc:undefined", + "doc:winonclose", "doc:win.on('close')" ] }, @@ -5064,15 +8446,16 @@ "apiType": "event", "fullSignature": "win.on('closed')", "url": "https://electronjs.org/docs/api/browser-window#event-closed", + "slug": "winonclosed", "tldr": "Emitted when the window is closed.", "keyValuePairs": [ "is:doc", "is:api", "api:closed", - "api:undefined", + "api:winonclosed", "api:win.on('closed')", "doc:closed", - "doc:undefined", + "doc:winonclosed", "doc:win.on('closed')" ] }, @@ -5086,15 +8469,16 @@ "apiType": "event", "fullSignature": "win.on('session-end')", "url": "https://electronjs.org/docs/api/browser-window#event-session-end", + "slug": "winonsession-end", "tldr": "Emitted when window session is going to end due to force shutdown or machine restart or session log off.", "keyValuePairs": [ "is:doc", "is:api", "api:session-end", - "api:undefined", + "api:winonsession-end", "api:win.on('session-end')", "doc:session-end", - "doc:undefined", + "doc:winonsession-end", "doc:win.on('session-end')" ] }, @@ -5105,15 +8489,16 @@ "apiType": "event", "fullSignature": "win.on('unresponsive')", "url": "https://electronjs.org/docs/api/browser-window#event-unresponsive", + "slug": "winonunresponsive", "tldr": "Emitted when the web page becomes unresponsive.", "keyValuePairs": [ "is:doc", "is:api", "api:unresponsive", - "api:undefined", + "api:winonunresponsive", "api:win.on('unresponsive')", "doc:unresponsive", - "doc:undefined", + "doc:winonunresponsive", "doc:win.on('unresponsive')" ] }, @@ -5124,15 +8509,16 @@ "apiType": "event", "fullSignature": "win.on('responsive')", "url": "https://electronjs.org/docs/api/browser-window#event-responsive", + "slug": "winonresponsive", "tldr": "Emitted when the unresponsive web page becomes responsive again.", "keyValuePairs": [ "is:doc", "is:api", "api:responsive", - "api:undefined", + "api:winonresponsive", "api:win.on('responsive')", "doc:responsive", - "doc:undefined", + "doc:winonresponsive", "doc:win.on('responsive')" ] }, @@ -5143,15 +8529,16 @@ "apiType": "event", "fullSignature": "win.on('blur')", "url": "https://electronjs.org/docs/api/browser-window#event-blur", + "slug": "winonblur", "tldr": "Emitted when the window loses focus.", "keyValuePairs": [ "is:doc", "is:api", "api:blur", - "api:undefined", + "api:winonblur", "api:win.on('blur')", "doc:blur", - "doc:undefined", + "doc:winonblur", "doc:win.on('blur')" ] }, @@ -5162,15 +8549,16 @@ "apiType": "event", "fullSignature": "win.on('focus')", "url": "https://electronjs.org/docs/api/browser-window#event-focus", + "slug": "winonfocus", "tldr": "Emitted when the window gains focus.", "keyValuePairs": [ "is:doc", "is:api", "api:focus", - "api:undefined", + "api:winonfocus", "api:win.on('focus')", "doc:focus", - "doc:undefined", + "doc:winonfocus", "doc:win.on('focus')" ] }, @@ -5181,15 +8569,16 @@ "apiType": "event", "fullSignature": "win.on('show')", "url": "https://electronjs.org/docs/api/browser-window#event-show", + "slug": "winonshow", "tldr": "Emitted when the window is shown.", "keyValuePairs": [ "is:doc", "is:api", "api:show", - "api:undefined", + "api:winonshow", "api:win.on('show')", "doc:show", - "doc:undefined", + "doc:winonshow", "doc:win.on('show')" ] }, @@ -5200,15 +8589,16 @@ "apiType": "event", "fullSignature": "win.on('hide')", "url": "https://electronjs.org/docs/api/browser-window#event-hide", + "slug": "winonhide", "tldr": "Emitted when the window is hidden.", "keyValuePairs": [ "is:doc", "is:api", "api:hide", - "api:undefined", + "api:winonhide", "api:win.on('hide')", "doc:hide", - "doc:undefined", + "doc:winonhide", "doc:win.on('hide')" ] }, @@ -5219,15 +8609,16 @@ "apiType": "event", "fullSignature": "win.on('ready-to-show')", "url": "https://electronjs.org/docs/api/browser-window#event-ready-to-show", + "slug": "winonready-to-show", "tldr": "Emitted when the web page has been rendered (while not being shown) and window can be displayed without a visual flash.", "keyValuePairs": [ "is:doc", "is:api", "api:ready-to-show", - "api:undefined", + "api:winonready-to-show", "api:win.on('ready-to-show')", "doc:ready-to-show", - "doc:undefined", + "doc:winonready-to-show", "doc:win.on('ready-to-show')" ] }, @@ -5238,15 +8629,16 @@ "apiType": "event", "fullSignature": "win.on('maximize')", "url": "https://electronjs.org/docs/api/browser-window#event-maximize", + "slug": "winonmaximize", "tldr": "Emitted when window is maximized.", "keyValuePairs": [ "is:doc", "is:api", "api:maximize", - "api:undefined", + "api:winonmaximize", "api:win.on('maximize')", "doc:maximize", - "doc:undefined", + "doc:winonmaximize", "doc:win.on('maximize')" ] }, @@ -5257,15 +8649,16 @@ "apiType": "event", "fullSignature": "win.on('unmaximize')", "url": "https://electronjs.org/docs/api/browser-window#event-unmaximize", + "slug": "winonunmaximize", "tldr": "Emitted when the window exits from a maximized state.", "keyValuePairs": [ "is:doc", "is:api", "api:unmaximize", - "api:undefined", + "api:winonunmaximize", "api:win.on('unmaximize')", "doc:unmaximize", - "doc:undefined", + "doc:winonunmaximize", "doc:win.on('unmaximize')" ] }, @@ -5276,15 +8669,16 @@ "apiType": "event", "fullSignature": "win.on('minimize')", "url": "https://electronjs.org/docs/api/browser-window#event-minimize", + "slug": "winonminimize", "tldr": "Emitted when the window is minimized.", "keyValuePairs": [ "is:doc", "is:api", "api:minimize", - "api:undefined", + "api:winonminimize", "api:win.on('minimize')", "doc:minimize", - "doc:undefined", + "doc:winonminimize", "doc:win.on('minimize')" ] }, @@ -5295,53 +8689,133 @@ "apiType": "event", "fullSignature": "win.on('restore')", "url": "https://electronjs.org/docs/api/browser-window#event-restore", + "slug": "winonrestore", "tldr": "Emitted when the window is restored from a minimized state.", "keyValuePairs": [ "is:doc", "is:api", "api:restore", - "api:undefined", + "api:winonrestore", "api:win.on('restore')", "doc:restore", - "doc:undefined", + "doc:winonrestore", "doc:win.on('restore')" ] }, + { + "objectID": "api-browser-window#event-will-resize", + "name": "will-resize", + "description": "Emitted before the window is resized. Calling event.preventDefault() will prevent the window from being resized. Note that this is only emitted when the window is being resized manually. Resizing the window with setBounds/setSize will not emit this event.", + "platforms": [ + "macOS", + "Windows" + ], + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "newBounds", + "type": "Rectangle", + "collection": false, + "description": "` Size the window is being resized to.", + "required": true + } + ], + "apiType": "event", + "fullSignature": "win.on('will-resize')", + "url": "https://electronjs.org/docs/api/browser-window#event-will-resize", + "slug": "winonwill-resize", + "tldr": "Emitted before the window is resized.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:will-resize", + "api:winonwill-resize", + "api:win.on('will-resize')", + "doc:will-resize", + "doc:winonwill-resize", + "doc:win.on('will-resize')" + ] + }, { "objectID": "api-browser-window#event-resize", "name": "resize", - "description": "Emitted when the window is being resized.", + "description": "Emitted after the window has been resized.", "apiType": "event", "fullSignature": "win.on('resize')", "url": "https://electronjs.org/docs/api/browser-window#event-resize", - "tldr": "Emitted when the window is being resized.", + "slug": "winonresize", + "tldr": "Emitted after the window has been resized.", "keyValuePairs": [ "is:doc", "is:api", "api:resize", - "api:undefined", + "api:winonresize", "api:win.on('resize')", "doc:resize", - "doc:undefined", + "doc:winonresize", "doc:win.on('resize')" ] }, + { + "objectID": "api-browser-window#event-will-move", + "name": "will-move", + "description": "Emitted before the window is moved. Calling event.preventDefault() will prevent the window from being moved. Note that this is only emitted when the window is being resized manually. Resizing the window with setBounds/setSize will not emit this event.", + "platforms": [ + "Windows" + ], + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "newBounds", + "type": "Rectangle", + "collection": false, + "description": "` Location the window is being moved to.", + "required": true + } + ], + "apiType": "event", + "fullSignature": "win.on('will-move')", + "url": "https://electronjs.org/docs/api/browser-window#event-will-move", + "slug": "winonwill-move", + "tldr": "Emitted before the window is moved.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:will-move", + "api:winonwill-move", + "api:win.on('will-move')", + "doc:will-move", + "doc:winonwill-move", + "doc:win.on('will-move')" + ] + }, { "objectID": "api-browser-window#event-move", "name": "move", - "description": "Emitted when the window is being moved to a new position. Note: On macOS this event is just an alias of moved.", + "description": "Emitted when the window is being moved to a new position. Note: On macOS this event is an alias of moved.", "apiType": "event", "fullSignature": "win.on('move')", "url": "https://electronjs.org/docs/api/browser-window#event-move", + "slug": "winonmove", "tldr": "Emitted when the window is being moved to a new position.", "keyValuePairs": [ "is:doc", "is:api", "api:move", - "api:undefined", + "api:winonmove", "api:win.on('move')", "doc:move", - "doc:undefined", + "doc:winonmove", "doc:win.on('move')" ] }, @@ -5355,15 +8829,16 @@ "apiType": "event", "fullSignature": "win.on('moved')", "url": "https://electronjs.org/docs/api/browser-window#event-moved", + "slug": "winonmoved", "tldr": "Emitted once when the window is moved to a new position.", "keyValuePairs": [ "is:doc", "is:api", "api:moved", - "api:undefined", + "api:winonmoved", "api:win.on('moved')", "doc:moved", - "doc:undefined", + "doc:winonmoved", "doc:win.on('moved')" ] }, @@ -5374,15 +8849,16 @@ "apiType": "event", "fullSignature": "win.on('enter-full-screen')", "url": "https://electronjs.org/docs/api/browser-window#event-enter-full-screen", + "slug": "winonenter-full-screen", "tldr": "Emitted when the window enters a full-screen state.", "keyValuePairs": [ "is:doc", "is:api", "api:enter-full-screen", - "api:undefined", + "api:winonenter-full-screen", "api:win.on('enter-full-screen')", "doc:enter-full-screen", - "doc:undefined", + "doc:winonenter-full-screen", "doc:win.on('enter-full-screen')" ] }, @@ -5393,15 +8869,16 @@ "apiType": "event", "fullSignature": "win.on('leave-full-screen')", "url": "https://electronjs.org/docs/api/browser-window#event-leave-full-screen", + "slug": "winonleave-full-screen", "tldr": "Emitted when the window leaves a full-screen state.", "keyValuePairs": [ "is:doc", "is:api", "api:leave-full-screen", - "api:undefined", + "api:winonleave-full-screen", "api:win.on('leave-full-screen')", "doc:leave-full-screen", - "doc:undefined", + "doc:winonleave-full-screen", "doc:win.on('leave-full-screen')" ] }, @@ -5412,15 +8889,16 @@ "apiType": "event", "fullSignature": "win.on('enter-html-full-screen')", "url": "https://electronjs.org/docs/api/browser-window#event-enter-html-full-screen", + "slug": "winonenter-html-full-screen", "tldr": "Emitted when the window enters a full-screen state triggered by HTML API.", "keyValuePairs": [ "is:doc", "is:api", "api:enter-html-full-screen", - "api:undefined", + "api:winonenter-html-full-screen", "api:win.on('enter-html-full-screen')", "doc:enter-html-full-screen", - "doc:undefined", + "doc:winonenter-html-full-screen", "doc:win.on('enter-html-full-screen')" ] }, @@ -5431,24 +8909,63 @@ "apiType": "event", "fullSignature": "win.on('leave-html-full-screen')", "url": "https://electronjs.org/docs/api/browser-window#event-leave-html-full-screen", + "slug": "winonleave-html-full-screen", "tldr": "Emitted when the window leaves a full-screen state triggered by HTML API.", "keyValuePairs": [ "is:doc", "is:api", "api:leave-html-full-screen", - "api:undefined", + "api:winonleave-html-full-screen", "api:win.on('leave-html-full-screen')", "doc:leave-html-full-screen", - "doc:undefined", + "doc:winonleave-html-full-screen", "doc:win.on('leave-html-full-screen')" ] }, + { + "objectID": "api-browser-window#event-always-on-top-changed", + "name": "always-on-top-changed", + "description": "Emitted when the window is set or unset to show always on top of other windows.", + "platforms": [ + "macOS" + ], + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "isAlwaysOnTop", + "type": "Boolean", + "collection": false, + "required": true + } + ], + "apiType": "event", + "fullSignature": "win.on('always-on-top-changed')", + "url": "https://electronjs.org/docs/api/browser-window#event-always-on-top-changed", + "slug": "winonalways-on-top-changed", + "tldr": "Emitted when the window is set or unset to show always on top of other windows.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:always-on-top-changed", + "api:winonalways-on-top-changed", + "api:win.on('always-on-top-changed')", + "doc:always-on-top-changed", + "doc:winonalways-on-top-changed", + "doc:win.on('always-on-top-changed')" + ] + }, { "objectID": "api-browser-window#event-app-command", "name": "app-command", - "description": "Emitted when an App Command is invoked. These are typically related to keyboard media keys or browser commands, as well as the \"Back\" button built into some mice on Windows. Commands are lowercased, underscores are replaced with hyphens, and the APPCOMMAND_ prefix is stripped off. e.g. APPCOMMAND_BROWSER_BACKWARD is emitted as browser-backward.", + "description": "Emitted when an App Command is invoked. These are typically related to keyboard media keys or browser commands, as well as the \"Back\" button built into some mice on Windows. Commands are lowercased, underscores are replaced with hyphens, and the APPCOMMAND_ prefix is stripped off. e.g. APPCOMMAND_BROWSER_BACKWARD is emitted as browser-backward. The following app commands are explictly supported on Linux:", "platforms": [ - "Windows" + "Windows", + "Linux" ], "returns": [ { @@ -5467,15 +8984,16 @@ "apiType": "event", "fullSignature": "win.on('app-command')", "url": "https://electronjs.org/docs/api/browser-window#event-app-command", + "slug": "winonapp-command", "tldr": "Emitted when an App Command is invoked.", "keyValuePairs": [ "is:doc", "is:api", "api:app-command", - "api:undefined", + "api:winonapp-command", "api:win.on('app-command')", "doc:app-command", - "doc:undefined", + "doc:winonapp-command", "doc:win.on('app-command')" ] }, @@ -5489,15 +9007,16 @@ "apiType": "event", "fullSignature": "win.on('scroll-touch-begin')", "url": "https://electronjs.org/docs/api/browser-window#event-scroll-touch-begin", + "slug": "winonscroll-touch-begin", "tldr": "Emitted when scroll wheel event phase has begun.", "keyValuePairs": [ "is:doc", "is:api", "api:scroll-touch-begin", - "api:undefined", + "api:winonscroll-touch-begin", "api:win.on('scroll-touch-begin')", "doc:scroll-touch-begin", - "doc:undefined", + "doc:winonscroll-touch-begin", "doc:win.on('scroll-touch-begin')" ] }, @@ -5511,15 +9030,16 @@ "apiType": "event", "fullSignature": "win.on('scroll-touch-end')", "url": "https://electronjs.org/docs/api/browser-window#event-scroll-touch-end", + "slug": "winonscroll-touch-end", "tldr": "Emitted when scroll wheel event phase has ended.", "keyValuePairs": [ "is:doc", "is:api", "api:scroll-touch-end", - "api:undefined", + "api:winonscroll-touch-end", "api:win.on('scroll-touch-end')", "doc:scroll-touch-end", - "doc:undefined", + "doc:winonscroll-touch-end", "doc:win.on('scroll-touch-end')" ] }, @@ -5533,15 +9053,16 @@ "apiType": "event", "fullSignature": "win.on('scroll-touch-edge')", "url": "https://electronjs.org/docs/api/browser-window#event-scroll-touch-edge", + "slug": "winonscroll-touch-edge", "tldr": "Emitted when scroll wheel event phase filed upon reaching the edge of element.", "keyValuePairs": [ "is:doc", "is:api", "api:scroll-touch-edge", - "api:undefined", + "api:winonscroll-touch-edge", "api:win.on('scroll-touch-edge')", "doc:scroll-touch-edge", - "doc:undefined", + "doc:winonscroll-touch-edge", "doc:win.on('scroll-touch-edge')" ] }, @@ -5569,15 +9090,16 @@ "apiType": "event", "fullSignature": "win.on('swipe')", "url": "https://electronjs.org/docs/api/browser-window#event-swipe", + "slug": "winonswipe", "tldr": "Emitted on 3-finger swipe.", "keyValuePairs": [ "is:doc", "is:api", "api:swipe", - "api:undefined", + "api:winonswipe", "api:win.on('swipe')", "doc:swipe", - "doc:undefined", + "doc:winonswipe", "doc:win.on('swipe')" ] }, @@ -5591,15 +9113,16 @@ "apiType": "event", "fullSignature": "win.on('sheet-begin')", "url": "https://electronjs.org/docs/api/browser-window#event-sheet-begin", + "slug": "winonsheet-begin", "tldr": "Emitted when the window opens a sheet.", "keyValuePairs": [ "is:doc", "is:api", "api:sheet-begin", - "api:undefined", + "api:winonsheet-begin", "api:win.on('sheet-begin')", "doc:sheet-begin", - "doc:undefined", + "doc:winonsheet-begin", "doc:win.on('sheet-begin')" ] }, @@ -5613,15 +9136,16 @@ "apiType": "event", "fullSignature": "win.on('sheet-end')", "url": "https://electronjs.org/docs/api/browser-window#event-sheet-end", + "slug": "winonsheet-end", "tldr": "Emitted when the window has closed a sheet.", "keyValuePairs": [ "is:doc", "is:api", "api:sheet-end", - "api:undefined", + "api:winonsheet-end", "api:win.on('sheet-end')", "doc:sheet-end", - "doc:undefined", + "doc:winonsheet-end", "doc:win.on('sheet-end')" ] }, @@ -5635,21 +9159,45 @@ "apiType": "event", "fullSignature": "win.on('new-window-for-tab')", "url": "https://electronjs.org/docs/api/browser-window#event-new-window-for-tab", + "slug": "winonnew-window-for-tab", "tldr": "Emitted when the native new tab button is clicked.", "keyValuePairs": [ "is:doc", "is:api", "api:new-window-for-tab", - "api:undefined", + "api:winonnew-window-for-tab", "api:win.on('new-window-for-tab')", "doc:new-window-for-tab", - "doc:undefined", + "doc:winonnew-window-for-tab", "doc:win.on('new-window-for-tab')" ] }, + { + "objectID": "api-browser-window-proxy#browserwindowproxyclosed", + "name": "closed", + "description": "A Boolean that is set to true after the child window gets closed.", + "type": "Boolean", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "BrowserWindowProxy.closed", + "tldr": "A Boolean that is set to true after the child window gets closed.", + "slug": "browserwindowproxyclosed", + "url": "https://electronjs.org/docs/api/browser-window-proxy#browserwindowproxyclosed", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:closed", + "api:browserwindowproxyclosed", + "api:BrowserWindowProxy.closed", + "doc:closed", + "doc:browserwindowproxyclosed", + "doc:BrowserWindowProxy.closed" + ] + }, { "objectID": "api-browser-window-proxy#winblur-1", "name": "blur", + "signature": "()", "description": "Removes focus from the child window.", "apiType": "instanceMethod", "fullSignature": "win.blur()", @@ -5670,6 +9218,7 @@ { "objectID": "api-browser-window-proxy#winclose-1", "name": "close", + "signature": "()", "description": "Forcefully closes the child window without calling its unload event.", "apiType": "instanceMethod", "fullSignature": "win.close()", @@ -5690,6 +9239,7 @@ { "objectID": "api-browser-window-proxy#winevalcode", "name": "eval", + "signature": "(code)", "description": "Evaluates the code in the child window.", "parameters": [ { @@ -5718,6 +9268,7 @@ { "objectID": "api-browser-window-proxy#winfocus-1", "name": "focus", + "signature": "()", "description": "Focuses the child window (brings the window to front).", "apiType": "instanceMethod", "fullSignature": "win.focus()", @@ -5738,6 +9289,7 @@ { "objectID": "api-browser-window-proxy#winprint", "name": "print", + "signature": "()", "description": "Invokes the print dialog on the child window.", "apiType": "instanceMethod", "fullSignature": "win.print()", @@ -5758,6 +9310,7 @@ { "objectID": "api-browser-window-proxy#winpostmessagemessage-targetorigin", "name": "postMessage", + "signature": "(message, targetOrigin)", "description": "Sends a message to the child window with the specified origin or * for no origin preference. In addition to these methods, the child window implements window.opener object with no properties and a single method.", "parameters": [ { @@ -5789,9 +9342,400 @@ "doc:win.postMessage(message, targetOrigin)" ] }, + { + "objectID": "api-certificate#certificatedata", + "name": "data", + "type": "String", + "collection": false, + "description": "PEM encoded data", + "required": true, + "apiType": "properties", + "fullSignature": "Certificate.data", + "tldr": "PEM encoded data.", + "slug": "certificatedata", + "url": "https://electronjs.org/docs/api/certificate#certificatedata", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:data", + "api:certificatedata", + "api:Certificate.data", + "doc:data", + "doc:certificatedata", + "doc:Certificate.data" + ] + }, + { + "objectID": "api-certificate#certificateissuer", + "name": "issuer", + "type": "CertificatePrincipal", + "collection": false, + "description": "Issuer principal", + "required": true, + "apiType": "properties", + "fullSignature": "Certificate.issuer", + "tldr": "Issuer principal.", + "slug": "certificateissuer", + "url": "https://electronjs.org/docs/api/certificate#certificateissuer", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:issuer", + "api:certificateissuer", + "api:Certificate.issuer", + "doc:issuer", + "doc:certificateissuer", + "doc:Certificate.issuer" + ] + }, + { + "objectID": "api-certificate#certificateissuername", + "name": "issuerName", + "type": "String", + "collection": false, + "description": "Issuer's Common Name", + "required": true, + "apiType": "properties", + "fullSignature": "Certificate.issuerName", + "tldr": "Issuer's Common Name.", + "slug": "certificateissuername", + "url": "https://electronjs.org/docs/api/certificate#certificateissuername", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:issuerName", + "api:certificateissuername", + "api:Certificate.issuerName", + "doc:issuerName", + "doc:certificateissuername", + "doc:Certificate.issuerName" + ] + }, + { + "objectID": "api-certificate#certificateissuercert", + "name": "issuerCert", + "type": "Certificate", + "collection": false, + "description": "Issuer certificate (if not self-signed)", + "required": true, + "apiType": "properties", + "fullSignature": "Certificate.issuerCert", + "tldr": "Issuer certificate (if not self-signed).", + "slug": "certificateissuercert", + "url": "https://electronjs.org/docs/api/certificate#certificateissuercert", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:issuerCert", + "api:certificateissuercert", + "api:Certificate.issuerCert", + "doc:issuerCert", + "doc:certificateissuercert", + "doc:Certificate.issuerCert" + ] + }, + { + "objectID": "api-certificate#certificatesubject", + "name": "subject", + "type": "CertificatePrincipal", + "collection": false, + "description": "Subject principal", + "required": true, + "apiType": "properties", + "fullSignature": "Certificate.subject", + "tldr": "Subject principal.", + "slug": "certificatesubject", + "url": "https://electronjs.org/docs/api/certificate#certificatesubject", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:subject", + "api:certificatesubject", + "api:Certificate.subject", + "doc:subject", + "doc:certificatesubject", + "doc:Certificate.subject" + ] + }, + { + "objectID": "api-certificate#certificatesubjectname", + "name": "subjectName", + "type": "String", + "collection": false, + "description": "Subject's Common Name", + "required": true, + "apiType": "properties", + "fullSignature": "Certificate.subjectName", + "tldr": "Subject's Common Name.", + "slug": "certificatesubjectname", + "url": "https://electronjs.org/docs/api/certificate#certificatesubjectname", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:subjectName", + "api:certificatesubjectname", + "api:Certificate.subjectName", + "doc:subjectName", + "doc:certificatesubjectname", + "doc:Certificate.subjectName" + ] + }, + { + "objectID": "api-certificate#certificateserialnumber", + "name": "serialNumber", + "type": "String", + "collection": false, + "description": "Hex value represented string", + "required": true, + "apiType": "properties", + "fullSignature": "Certificate.serialNumber", + "tldr": "Hex value represented string.", + "slug": "certificateserialnumber", + "url": "https://electronjs.org/docs/api/certificate#certificateserialnumber", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:serialNumber", + "api:certificateserialnumber", + "api:Certificate.serialNumber", + "doc:serialNumber", + "doc:certificateserialnumber", + "doc:Certificate.serialNumber" + ] + }, + { + "objectID": "api-certificate#certificatevalidstart", + "name": "validStart", + "type": "Number", + "collection": false, + "description": "Start date of the certificate being valid in seconds", + "required": true, + "apiType": "properties", + "fullSignature": "Certificate.validStart", + "tldr": "Start date of the certificate being valid in seconds.", + "slug": "certificatevalidstart", + "url": "https://electronjs.org/docs/api/certificate#certificatevalidstart", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:validStart", + "api:certificatevalidstart", + "api:Certificate.validStart", + "doc:validStart", + "doc:certificatevalidstart", + "doc:Certificate.validStart" + ] + }, + { + "objectID": "api-certificate#certificatevalidexpiry", + "name": "validExpiry", + "type": "Number", + "collection": false, + "description": "End date of the certificate being valid in seconds", + "required": true, + "apiType": "properties", + "fullSignature": "Certificate.validExpiry", + "tldr": "End date of the certificate being valid in seconds.", + "slug": "certificatevalidexpiry", + "url": "https://electronjs.org/docs/api/certificate#certificatevalidexpiry", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:validExpiry", + "api:certificatevalidexpiry", + "api:Certificate.validExpiry", + "doc:validExpiry", + "doc:certificatevalidexpiry", + "doc:Certificate.validExpiry" + ] + }, + { + "objectID": "api-certificate#certificatefingerprint", + "name": "fingerprint", + "type": "String", + "collection": false, + "description": "Fingerprint of the certificate", + "required": true, + "apiType": "properties", + "fullSignature": "Certificate.fingerprint", + "tldr": "Fingerprint of the certificate.", + "slug": "certificatefingerprint", + "url": "https://electronjs.org/docs/api/certificate#certificatefingerprint", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:fingerprint", + "api:certificatefingerprint", + "api:Certificate.fingerprint", + "doc:fingerprint", + "doc:certificatefingerprint", + "doc:Certificate.fingerprint" + ] + }, + { + "objectID": "api-certificate-principal#certificateprincipalcommonname", + "name": "commonName", + "type": "String", + "collection": false, + "description": "Common Name.", + "required": true, + "apiType": "properties", + "fullSignature": "CertificatePrincipal.commonName", + "tldr": "Common Name.", + "slug": "certificateprincipalcommonname", + "url": "https://electronjs.org/docs/api/certificate-principal#certificateprincipalcommonname", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:commonName", + "api:certificateprincipalcommonname", + "api:CertificatePrincipal.commonName", + "doc:commonName", + "doc:certificateprincipalcommonname", + "doc:CertificatePrincipal.commonName" + ] + }, + { + "objectID": "api-certificate-principal#certificateprincipalorganizations", + "name": "organizations", + "type": "String", + "collection": true, + "description": "Organization names.", + "required": true, + "apiType": "properties", + "fullSignature": "CertificatePrincipal.organizations", + "tldr": "Organization names.", + "slug": "certificateprincipalorganizations", + "url": "https://electronjs.org/docs/api/certificate-principal#certificateprincipalorganizations", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:organizations", + "api:certificateprincipalorganizations", + "api:CertificatePrincipal.organizations", + "doc:organizations", + "doc:certificateprincipalorganizations", + "doc:CertificatePrincipal.organizations" + ] + }, + { + "objectID": "api-certificate-principal#certificateprincipalorganizationunits", + "name": "organizationUnits", + "type": "String", + "collection": true, + "description": "Organization Unit names.", + "required": true, + "apiType": "properties", + "fullSignature": "CertificatePrincipal.organizationUnits", + "tldr": "Organization Unit names.", + "slug": "certificateprincipalorganizationunits", + "url": "https://electronjs.org/docs/api/certificate-principal#certificateprincipalorganizationunits", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:organizationUnits", + "api:certificateprincipalorganizationunits", + "api:CertificatePrincipal.organizationUnits", + "doc:organizationUnits", + "doc:certificateprincipalorganizationunits", + "doc:CertificatePrincipal.organizationUnits" + ] + }, + { + "objectID": "api-certificate-principal#certificateprincipallocality", + "name": "locality", + "type": "String", + "collection": false, + "description": "Locality.", + "required": true, + "apiType": "properties", + "fullSignature": "CertificatePrincipal.locality", + "tldr": "Locality.", + "slug": "certificateprincipallocality", + "url": "https://electronjs.org/docs/api/certificate-principal#certificateprincipallocality", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:locality", + "api:certificateprincipallocality", + "api:CertificatePrincipal.locality", + "doc:locality", + "doc:certificateprincipallocality", + "doc:CertificatePrincipal.locality" + ] + }, + { + "objectID": "api-certificate-principal#certificateprincipalstate", + "name": "state", + "type": "String", + "collection": false, + "description": "State or province.", + "required": true, + "apiType": "properties", + "fullSignature": "CertificatePrincipal.state", + "tldr": "State or province.", + "slug": "certificateprincipalstate", + "url": "https://electronjs.org/docs/api/certificate-principal#certificateprincipalstate", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:state", + "api:certificateprincipalstate", + "api:CertificatePrincipal.state", + "doc:state", + "doc:certificateprincipalstate", + "doc:CertificatePrincipal.state" + ] + }, + { + "objectID": "api-certificate-principal#certificateprincipalcountry", + "name": "country", + "type": "String", + "collection": false, + "description": "Country or region.", + "required": true, + "apiType": "properties", + "fullSignature": "CertificatePrincipal.country", + "tldr": "Country or region.", + "slug": "certificateprincipalcountry", + "url": "https://electronjs.org/docs/api/certificate-principal#certificateprincipalcountry", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:country", + "api:certificateprincipalcountry", + "api:CertificatePrincipal.country", + "doc:country", + "doc:certificateprincipalcountry", + "doc:CertificatePrincipal.country" + ] + }, + { + "objectID": "api-client-request#clientrequestchunkedencoding", + "name": "chunkedEncoding", + "description": "A Boolean specifying whether the request will use HTTP chunked transfer encoding or not. Defaults to false. The property is readable and writable, however it can be set only before the first write operation as the HTTP headers are not yet put on the wire. Trying to set the chunkedEncoding property after the first write will throw an error. Using chunked encoding is strongly recommended if you need to send a large request body as data will be streamed in small chunks instead of being internally buffered inside Electron process memory.", + "type": "Boolean", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "ClientRequest.chunkedEncoding", + "tldr": "A Boolean specifying whether the request will use HTTP chunked transfer encoding or not.", + "slug": "clientrequestchunkedencoding", + "url": "https://electronjs.org/docs/api/client-request#clientrequestchunkedencoding", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:chunkedEncoding", + "api:clientrequestchunkedencoding", + "api:ClientRequest.chunkedEncoding", + "doc:chunkedEncoding", + "doc:clientrequestchunkedencoding", + "doc:ClientRequest.chunkedEncoding" + ] + }, { "objectID": "api-client-request#requestsetheadername-value", "name": "setHeader", + "signature": "(name, value)", "description": "Adds an extra HTTP header. The header name will issued as it is without lowercasing. It can be called only before first write. Calling this method after the first write will throw an error. If the passed value is not a String, its toString() method will be called to obtain the final value.", "parameters": [ { @@ -5828,6 +9772,7 @@ { "objectID": "api-client-request#requestgetheadername", "name": "getHeader", + "signature": "(name)", "parameters": [ { "name": "name", @@ -5870,6 +9815,7 @@ { "objectID": "api-client-request#requestremoveheadername", "name": "removeHeader", + "signature": "(name)", "description": "Removes a previously set extra header name. This method can be called only before first write. Trying to call it after the first write will throw an error.", "parameters": [ { @@ -5899,6 +9845,7 @@ { "objectID": "api-client-request#requestwritechunk-encoding-callback", "name": "write", + "signature": "(chunk[, encoding][, callback])", "description": "callback is essentially a dummy function introduced in the purpose of keeping similarity with the Node.js API. It is called asynchronously in the next tick after chunk content have been delivered to the Chromium networking layer. Contrary to the Node.js implementation, it is not guaranteed that chunk content have been flushed on the wire before callback is called. Adds a chunk of data to the request body. The first write operation may cause the request headers to be issued on the wire. After the first write operation, it is not allowed to add or remove a custom header.", "parameters": [ { @@ -5951,6 +9898,7 @@ { "objectID": "api-client-request#requestendchunk-encoding-callback", "name": "end", + "signature": "([chunk][, encoding][, callback])", "description": "Sends the last chunk of the request data. Subsequent write or end operations will not be allowed. The finish event is emitted just after the end operation.", "parameters": [ { @@ -6000,6 +9948,7 @@ { "objectID": "api-client-request#requestabort", "name": "abort", + "signature": "()", "description": "Cancels an ongoing HTTP transaction. If the request has already emitted the close event, the abort operation will have no effect. Otherwise an ongoing event will emit abort and close events. Additionally, if there is an ongoing response object,it will emit the aborted event.", "apiType": "instanceMethod", "fullSignature": "request.abort()", @@ -6020,6 +9969,7 @@ { "objectID": "api-client-request#requestfollowredirect", "name": "followRedirect", + "signature": "()", "description": "Continues any deferred redirection request when the redirection mode is manual.", "apiType": "instanceMethod", "fullSignature": "request.followRedirect()", @@ -6037,6 +9987,61 @@ "doc:request.followRedirect()" ] }, + { + "objectID": "api-client-request#requestgetuploadprogress", + "name": "getUploadProgress", + "signature": "()", + "description": "You can use this method in conjunction with POST requests to get the progress of a file upload or other data transfer.", + "returns": { + "type": "Object", + "collection": false, + "properties": [ + { + "name": "active", + "type": "Boolean", + "collection": false, + "description": "Whether the request is currently active. If this is false no other properties will be set", + "required": true + }, + { + "name": "started", + "type": "Boolean", + "collection": false, + "description": "Whether the upload has started. If this is false both current and total will be set to 0.", + "required": true + }, + { + "name": "current", + "type": "Integer", + "collection": false, + "description": "The number of bytes that have been uploaded so far", + "required": true + }, + { + "name": "total", + "type": "Integer", + "collection": false, + "description": "The number of bytes that will be uploaded this request", + "required": true + } + ] + }, + "apiType": "instanceMethod", + "fullSignature": "request.getUploadProgress()", + "tldr": "You can use this method in conjunction with POST requests to get the progress of a file upload or other data transfer.", + "slug": "requestgetuploadprogress", + "url": "https://electronjs.org/docs/api/client-request#requestgetuploadprogress", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getUploadProgress", + "api:requestgetuploadprogress", + "api:request.getUploadProgress()", + "doc:getUploadProgress", + "doc:requestgetuploadprogress", + "doc:request.getUploadProgress()" + ] + }, { "objectID": "api-client-request#event-response", "name": "response", @@ -6052,15 +10057,16 @@ "apiType": "event", "fullSignature": "request.on('response')", "url": "https://electronjs.org/docs/api/client-request#event-response", + "slug": "requestonresponse", "tldr": null, "keyValuePairs": [ "is:doc", "is:api", "api:response", - "api:undefined", + "api:requestonresponse", "api:request.on('response')", "doc:response", - "doc:undefined", + "doc:requestonresponse", "doc:request.on('response')" ] }, @@ -6138,15 +10144,16 @@ "apiType": "event", "fullSignature": "request.on('login')", "url": "https://electronjs.org/docs/api/client-request#event-login", + "slug": "requestonlogin", "tldr": "Emitted when an authenticating proxy is asking for user credentials.", "keyValuePairs": [ "is:doc", "is:api", "api:login", - "api:undefined", + "api:requestonlogin", "api:request.on('login')", "doc:login", - "doc:undefined", + "doc:requestonlogin", "doc:request.on('login')" ] }, @@ -6157,15 +10164,16 @@ "apiType": "event", "fullSignature": "request.on('finish')", "url": "https://electronjs.org/docs/api/client-request#event-finish", + "slug": "requestonfinish", "tldr": "Emitted just after the last chunk of the request's data has been written into the request object.", "keyValuePairs": [ "is:doc", "is:api", "api:finish", - "api:undefined", + "api:requestonfinish", "api:request.on('finish')", "doc:finish", - "doc:undefined", + "doc:requestonfinish", "doc:request.on('finish')" ] }, @@ -6176,15 +10184,16 @@ "apiType": "event", "fullSignature": "request.on('abort')", "url": "https://electronjs.org/docs/api/client-request#event-abort", + "slug": "requestonabort", "tldr": "Emitted when the request is aborted.", "keyValuePairs": [ "is:doc", "is:api", "api:abort", - "api:undefined", + "api:requestonabort", "api:request.on('abort')", "doc:abort", - "doc:undefined", + "doc:requestonabort", "doc:request.on('abort')" ] }, @@ -6204,15 +10213,16 @@ "apiType": "event", "fullSignature": "request.on('error')", "url": "https://electronjs.org/docs/api/client-request#event-error", + "slug": "requestonerror", "tldr": "Emitted when the net module fails to issue a network request.", "keyValuePairs": [ "is:doc", "is:api", "api:error", - "api:undefined", + "api:requestonerror", "api:request.on('error')", "doc:error", - "doc:undefined", + "doc:requestonerror", "doc:request.on('error')" ] }, @@ -6223,15 +10233,16 @@ "apiType": "event", "fullSignature": "request.on('close')", "url": "https://electronjs.org/docs/api/client-request#event-close", + "slug": "requestonclose", "tldr": "Emitted as the last event in the HTTP request-response transaction.", "keyValuePairs": [ "is:doc", "is:api", "api:close", - "api:undefined", + "api:requestonclose", "api:request.on('close')", "doc:close", - "doc:undefined", + "doc:requestonclose", "doc:request.on('close')" ] }, @@ -6268,22 +10279,1301 @@ "apiType": "event", "fullSignature": "request.on('redirect')", "url": "https://electronjs.org/docs/api/client-request#event-redirect", + "slug": "requestonredirect", "tldr": "Emitted when there is redirection and the mode is manual.", "keyValuePairs": [ "is:doc", "is:api", "api:redirect", - "api:undefined", + "api:requestonredirect", "api:request.on('redirect')", "doc:redirect", - "doc:undefined", + "doc:requestonredirect", "doc:request.on('redirect')" ] }, + { + "objectID": "api-clipboard#clipboardreadtext", + "name": "readText", + "signature": "([type])", + "parameters": [ + { + "name": "type", + "type": "String", + "collection": false, + "required": false + } + ], + "returns": { + "type": "String", + "collection": false, + "description": "The content in the clipboard as plain text." + }, + "apiType": "methods", + "fullSignature": "clipboard.readText", + "tldr": "Returns the content in the clipboard as plain text.", + "slug": "clipboardreadtext", + "url": "https://electronjs.org/docs/api/clipboard#clipboardreadtext", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:readText", + "api:clipboardreadtext", + "api:clipboard.readText", + "doc:readText", + "doc:clipboardreadtext", + "doc:clipboard.readText" + ] + }, + { + "objectID": "api-clipboard#clipboardwritetext", + "name": "writeText", + "signature": "(text[, type])", + "description": "Writes the text into the clipboard as plain text.", + "parameters": [ + { + "name": "text", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "type", + "type": "String", + "collection": false, + "required": false + } + ], + "apiType": "methods", + "fullSignature": "clipboard.writeText", + "tldr": "Writes the text into the clipboard as plain text.", + "slug": "clipboardwritetext", + "url": "https://electronjs.org/docs/api/clipboard#clipboardwritetext", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:writeText", + "api:clipboardwritetext", + "api:clipboard.writeText", + "doc:writeText", + "doc:clipboardwritetext", + "doc:clipboard.writeText" + ] + }, + { + "objectID": "api-clipboard#clipboardreadhtml", + "name": "readHTML", + "signature": "([type])", + "parameters": [ + { + "name": "type", + "type": "String", + "collection": false, + "required": false + } + ], + "returns": { + "type": "String", + "collection": false, + "description": "The content in the clipboard as markup." + }, + "apiType": "methods", + "fullSignature": "clipboard.readHTML", + "tldr": "Returns the content in the clipboard as markup.", + "slug": "clipboardreadhtml", + "url": "https://electronjs.org/docs/api/clipboard#clipboardreadhtml", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:readHTML", + "api:clipboardreadhtml", + "api:clipboard.readHTML", + "doc:readHTML", + "doc:clipboardreadhtml", + "doc:clipboard.readHTML" + ] + }, + { + "objectID": "api-clipboard#clipboardwritehtml", + "name": "writeHTML", + "signature": "(markup[, type])", + "description": "Writes markup to the clipboard.", + "parameters": [ + { + "name": "markup", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "type", + "type": "String", + "collection": false, + "required": false + } + ], + "apiType": "methods", + "fullSignature": "clipboard.writeHTML", + "tldr": "Writes markup to the clipboard.", + "slug": "clipboardwritehtml", + "url": "https://electronjs.org/docs/api/clipboard#clipboardwritehtml", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:writeHTML", + "api:clipboardwritehtml", + "api:clipboard.writeHTML", + "doc:writeHTML", + "doc:clipboardwritehtml", + "doc:clipboard.writeHTML" + ] + }, + { + "objectID": "api-clipboard#clipboardreadimage", + "name": "readImage", + "signature": "([type])", + "parameters": [ + { + "name": "type", + "type": "String", + "collection": false, + "required": false + } + ], + "returns": { + "type": "NativeImage", + "collection": false, + "description": "The image content in the clipboard." + }, + "apiType": "methods", + "fullSignature": "clipboard.readImage", + "tldr": "Returns the image content in the clipboard.", + "slug": "clipboardreadimage", + "url": "https://electronjs.org/docs/api/clipboard#clipboardreadimage", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:readImage", + "api:clipboardreadimage", + "api:clipboard.readImage", + "doc:readImage", + "doc:clipboardreadimage", + "doc:clipboard.readImage" + ] + }, + { + "objectID": "api-clipboard#clipboardwriteimage", + "name": "writeImage", + "signature": "(image[, type])", + "description": "Writes image to the clipboard.", + "parameters": [ + { + "name": "image", + "type": "NativeImage", + "collection": false, + "required": true + }, + { + "name": "type", + "type": "String", + "collection": false, + "required": false + } + ], + "apiType": "methods", + "fullSignature": "clipboard.writeImage", + "tldr": "Writes image to the clipboard.", + "slug": "clipboardwriteimage", + "url": "https://electronjs.org/docs/api/clipboard#clipboardwriteimage", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:writeImage", + "api:clipboardwriteimage", + "api:clipboard.writeImage", + "doc:writeImage", + "doc:clipboardwriteimage", + "doc:clipboard.writeImage" + ] + }, + { + "objectID": "api-clipboard#clipboardreadrtf", + "name": "readRTF", + "signature": "([type])", + "parameters": [ + { + "name": "type", + "type": "String", + "collection": false, + "required": false + } + ], + "returns": { + "type": "String", + "collection": false, + "description": "The content in the clipboard as RTF." + }, + "apiType": "methods", + "fullSignature": "clipboard.readRTF", + "tldr": "Returns the content in the clipboard as RTF.", + "slug": "clipboardreadrtf", + "url": "https://electronjs.org/docs/api/clipboard#clipboardreadrtf", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:readRTF", + "api:clipboardreadrtf", + "api:clipboard.readRTF", + "doc:readRTF", + "doc:clipboardreadrtf", + "doc:clipboard.readRTF" + ] + }, + { + "objectID": "api-clipboard#clipboardwritertf", + "name": "writeRTF", + "signature": "(text[, type])", + "description": "Writes the text into the clipboard in RTF.", + "parameters": [ + { + "name": "text", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "type", + "type": "String", + "collection": false, + "required": false + } + ], + "apiType": "methods", + "fullSignature": "clipboard.writeRTF", + "tldr": "Writes the text into the clipboard in RTF.", + "slug": "clipboardwritertf", + "url": "https://electronjs.org/docs/api/clipboard#clipboardwritertf", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:writeRTF", + "api:clipboardwritertf", + "api:clipboard.writeRTF", + "doc:writeRTF", + "doc:clipboardwritertf", + "doc:clipboard.writeRTF" + ] + }, + { + "objectID": "api-clipboard#clipboardreadbookmark", + "name": "readBookmark", + "signature": "()", + "platforms": [ + "macOS", + "Windows" + ], + "description": "Returns an Object containing title and url keys representing the bookmark in the clipboard. The title and url values will be empty strings when the bookmark is unavailable.", + "returns": { + "type": "Object", + "collection": false, + "properties": [ + { + "name": "title", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "url", + "type": "String", + "collection": false, + "description": "", + "required": true + } + ] + }, + "apiType": "methods", + "fullSignature": "clipboard.readBookmark", + "tldr": "Returns an Object containing title and url keys representing the bookmark in the clipboard.", + "slug": "clipboardreadbookmark", + "url": "https://electronjs.org/docs/api/clipboard#clipboardreadbookmark", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:readBookmark", + "api:clipboardreadbookmark", + "api:clipboard.readBookmark", + "doc:readBookmark", + "doc:clipboardreadbookmark", + "doc:clipboard.readBookmark" + ] + }, + { + "objectID": "api-clipboard#clipboardwritebookmark", + "name": "writeBookmark", + "signature": "(title, url[, type])", + "platforms": [ + "macOS", + "Windows" + ], + "description": "Writes the title and url into the clipboard as a bookmark. Note: Most apps on Windows don't support pasting bookmarks into them so you can use clipboard.write to write both a bookmark and fallback text to the clipboard.", + "parameters": [ + { + "name": "title", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "url", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "type", + "type": "String", + "collection": false, + "required": false + } + ], + "apiType": "methods", + "fullSignature": "clipboard.writeBookmark", + "tldr": "Writes the title and url into the clipboard as a bookmark.", + "slug": "clipboardwritebookmark", + "url": "https://electronjs.org/docs/api/clipboard#clipboardwritebookmark", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:writeBookmark", + "api:clipboardwritebookmark", + "api:clipboard.writeBookmark", + "doc:writeBookmark", + "doc:clipboardwritebookmark", + "doc:clipboard.writeBookmark" + ] + }, + { + "objectID": "api-clipboard#clipboardreadfindtext", + "name": "readFindText", + "signature": "()", + "platforms": [ + "macOS" + ], + "returns": { + "type": "String", + "collection": false, + "description": "The text on the find pasteboard. This method uses synchronous IPC when called from the renderer process. The cached value is reread from the find pasteboard whenever the application is activated." + }, + "apiType": "methods", + "fullSignature": "clipboard.readFindText", + "tldr": "Returns the text on the find pasteboard. This method uses synchronous IPC when called from the renderer process. The cached value is reread from the find pasteboard whenever the application is activated.", + "slug": "clipboardreadfindtext", + "url": "https://electronjs.org/docs/api/clipboard#clipboardreadfindtext", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:readFindText", + "api:clipboardreadfindtext", + "api:clipboard.readFindText", + "doc:readFindText", + "doc:clipboardreadfindtext", + "doc:clipboard.readFindText" + ] + }, + { + "objectID": "api-clipboard#clipboardwritefindtext", + "name": "writeFindText", + "signature": "(text)", + "platforms": [ + "macOS" + ], + "description": "Writes the text into the find pasteboard as plain text. This method uses synchronous IPC when called from the renderer process.", + "parameters": [ + { + "name": "text", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "clipboard.writeFindText", + "tldr": "Writes the text into the find pasteboard as plain text.", + "slug": "clipboardwritefindtext", + "url": "https://electronjs.org/docs/api/clipboard#clipboardwritefindtext", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:writeFindText", + "api:clipboardwritefindtext", + "api:clipboard.writeFindText", + "doc:writeFindText", + "doc:clipboardwritefindtext", + "doc:clipboard.writeFindText" + ] + }, + { + "objectID": "api-clipboard#clipboardclear", + "name": "clear", + "signature": "([type])", + "description": "Clears the clipboard content.", + "parameters": [ + { + "name": "type", + "type": "String", + "collection": false, + "required": false + } + ], + "apiType": "methods", + "fullSignature": "clipboard.clear", + "tldr": "Clears the clipboard content.", + "slug": "clipboardclear", + "url": "https://electronjs.org/docs/api/clipboard#clipboardclear", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:clear", + "api:clipboardclear", + "api:clipboard.clear", + "doc:clear", + "doc:clipboardclear", + "doc:clipboard.clear" + ] + }, + { + "objectID": "api-clipboard#clipboardavailableformats", + "name": "availableFormats", + "signature": "([type])", + "parameters": [ + { + "name": "type", + "type": "String", + "collection": false, + "required": false + } + ], + "returns": { + "type": "String", + "collection": true, + "description": "An array of supported formats for the clipboard type." + }, + "apiType": "methods", + "fullSignature": "clipboard.availableFormats", + "tldr": "Returns an array of supported formats for the clipboard type.", + "slug": "clipboardavailableformats", + "url": "https://electronjs.org/docs/api/clipboard#clipboardavailableformats", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:availableFormats", + "api:clipboardavailableformats", + "api:clipboard.availableFormats", + "doc:availableFormats", + "doc:clipboardavailableformats", + "doc:clipboard.availableFormats" + ] + }, + { + "objectID": "api-clipboard#clipboardhas", + "name": "has", + "signature": "(format[, type])", + "platforms": [ + "Experimental" + ], + "parameters": [ + { + "name": "format", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "type", + "type": "String", + "collection": false, + "required": false + } + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the clipboard supports the specified format." + }, + "apiType": "methods", + "fullSignature": "clipboard.has", + "tldr": "Returns whether the clipboard supports the specified format.", + "slug": "clipboardhas", + "url": "https://electronjs.org/docs/api/clipboard#clipboardhas", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:has", + "api:clipboardhas", + "api:clipboard.has", + "doc:has", + "doc:clipboardhas", + "doc:clipboard.has" + ] + }, + { + "objectID": "api-clipboard#clipboardread", + "name": "read", + "signature": "(format)", + "platforms": [ + "Experimental" + ], + "parameters": [ + { + "name": "format", + "type": "String", + "collection": false, + "required": true + } + ], + "returns": { + "type": "String", + "collection": false, + "description": "Reads format type from the clipboard." + }, + "apiType": "methods", + "fullSignature": "clipboard.read", + "tldr": "Returns reads format type from the clipboard.", + "slug": "clipboardread", + "url": "https://electronjs.org/docs/api/clipboard#clipboardread", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:read", + "api:clipboardread", + "api:clipboard.read", + "doc:read", + "doc:clipboardread", + "doc:clipboard.read" + ] + }, + { + "objectID": "api-clipboard#clipboardreadbuffer", + "name": "readBuffer", + "signature": "(format)", + "platforms": [ + "Experimental" + ], + "parameters": [ + { + "name": "format", + "type": "String", + "collection": false, + "required": true + } + ], + "returns": { + "type": "Buffer", + "collection": false, + "description": "Reads format type from the clipboard." + }, + "apiType": "methods", + "fullSignature": "clipboard.readBuffer", + "tldr": "Returns reads format type from the clipboard.", + "slug": "clipboardreadbuffer", + "url": "https://electronjs.org/docs/api/clipboard#clipboardreadbuffer", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:readBuffer", + "api:clipboardreadbuffer", + "api:clipboard.readBuffer", + "doc:readBuffer", + "doc:clipboardreadbuffer", + "doc:clipboard.readBuffer" + ] + }, + { + "objectID": "api-clipboard#clipboardwritebuffer", + "name": "writeBuffer", + "signature": "(format, buffer[, type])", + "platforms": [ + "Experimental" + ], + "description": "Writes the buffer into the clipboard as format.", + "parameters": [ + { + "name": "format", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "buffer", + "type": "Buffer", + "collection": false, + "required": true + }, + { + "name": "type", + "type": "String", + "collection": false, + "required": false + } + ], + "apiType": "methods", + "fullSignature": "clipboard.writeBuffer", + "tldr": "Writes the buffer into the clipboard as format.", + "slug": "clipboardwritebuffer", + "url": "https://electronjs.org/docs/api/clipboard#clipboardwritebuffer", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:writeBuffer", + "api:clipboardwritebuffer", + "api:clipboard.writeBuffer", + "doc:writeBuffer", + "doc:clipboardwritebuffer", + "doc:clipboard.writeBuffer" + ] + }, + { + "objectID": "api-clipboard#clipboardwrite", + "name": "write", + "signature": "(data[, type])", + "description": "Writes data to the clipboard.", + "parameters": [ + { + "name": "data", + "type": "Object", + "collection": false, + "required": true, + "properties": [ + { + "name": "text", + "type": "String", + "collection": false, + "description": "", + "required": false + }, + { + "name": "html", + "type": "String", + "collection": false, + "description": "", + "required": false + }, + { + "name": "image", + "type": "NativeImage", + "collection": false, + "description": "", + "required": false + }, + { + "name": "rtf", + "type": "String", + "collection": false, + "description": "", + "required": false + }, + { + "name": "bookmark", + "type": "String", + "collection": false, + "description": "The title of the url at text.", + "required": false + } + ] + }, + { + "name": "type", + "type": "String", + "collection": false, + "required": false + } + ], + "apiType": "methods", + "fullSignature": "clipboard.write", + "tldr": "Writes data to the clipboard.", + "slug": "clipboardwrite", + "url": "https://electronjs.org/docs/api/clipboard#clipboardwrite", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:write", + "api:clipboardwrite", + "api:clipboard.write", + "doc:write", + "doc:clipboardwrite", + "doc:clipboard.write" + ] + }, + { + "objectID": "api-content-tracing#contenttracinggetcategories", + "name": "getCategories", + "signature": "(callback)", + "description": "Get a set of category groups. The category groups can change as new code paths are reached. Once all child processes have acknowledged the getCategories request the callback is invoked with an array of category groups. Deprecated Soon", + "parameters": [ + { + "name": "callback", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "categories", + "type": "String", + "collection": true, + "description": "", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "contentTracing.getCategories", + "tldr": "Get a set of category groups.", + "slug": "contenttracinggetcategories", + "url": "https://electronjs.org/docs/api/content-tracing#contenttracinggetcategories", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getCategories", + "api:contenttracinggetcategories", + "api:contentTracing.getCategories", + "doc:getCategories", + "doc:contenttracinggetcategories", + "doc:contentTracing.getCategories" + ] + }, + { + "objectID": "api-content-tracing#contenttracinggetcategories-1", + "name": "getCategories", + "signature": "()", + "description": "Get a set of category groups. The category groups can change as new code paths are reached.", + "returns": { + "type": "Promise", + "collection": false, + "innerType": "String", + "description": "resolves with an array of category groups once all child processes have acknowledged the getCategories request" + }, + "apiType": "methods", + "fullSignature": "contentTracing.getCategories", + "tldr": "Get a set of category groups.", + "slug": "contenttracinggetcategories-1", + "url": "https://electronjs.org/docs/api/content-tracing#contenttracinggetcategories-1", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getCategories", + "api:contenttracinggetcategories-1", + "api:contentTracing.getCategories", + "doc:getCategories", + "doc:contenttracinggetcategories-1", + "doc:contentTracing.getCategories" + ] + }, + { + "objectID": "api-content-tracing#contenttracingstartrecording", + "name": "startRecording", + "signature": "(options, callback)", + "description": "Start recording on all processes. Recording begins immediately locally and asynchronously on child processes as soon as they receive the EnableRecording request. The callback will be called once all child processes have acknowledged the startRecording request. Deprecated Soon", + "parameters": [ + { + "name": "options", + "type": [ + { + "typeName": "TraceCategoriesAndOptions", + "collection": false + }, + { + "typeName": "TraceConfig", + "collection": false + } + ], + "collection": false, + "required": true + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "contentTracing.startRecording", + "tldr": "Start recording on all processes.", + "slug": "contenttracingstartrecording", + "url": "https://electronjs.org/docs/api/content-tracing#contenttracingstartrecording", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:startRecording", + "api:contenttracingstartrecording", + "api:contentTracing.startRecording", + "doc:startRecording", + "doc:contenttracingstartrecording", + "doc:contentTracing.startRecording" + ] + }, + { + "objectID": "api-content-tracing#contenttracingstartrecording-1", + "name": "startRecording", + "signature": "(options)", + "description": "Start recording on all processes. Recording begins immediately locally and asynchronously on child processes as soon as they receive the EnableRecording request.", + "parameters": [ + { + "name": "options", + "type": [ + { + "typeName": "TraceCategoriesAndOptions", + "collection": false + }, + { + "typeName": "TraceConfig", + "collection": false + } + ], + "collection": false, + "required": true + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "void", + "description": "resolved once all child processes have acknowledged the startRecording request." + }, + "apiType": "methods", + "fullSignature": "contentTracing.startRecording", + "tldr": "Start recording on all processes.", + "slug": "contenttracingstartrecording-1", + "url": "https://electronjs.org/docs/api/content-tracing#contenttracingstartrecording-1", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:startRecording", + "api:contenttracingstartrecording-1", + "api:contentTracing.startRecording", + "doc:startRecording", + "doc:contenttracingstartrecording-1", + "doc:contentTracing.startRecording" + ] + }, + { + "objectID": "api-content-tracing#contenttracingstoprecording", + "name": "stopRecording", + "signature": "(resultFilePath, callback)", + "description": "Stop recording on all processes. Child processes typically cache trace data and only rarely flush and send trace data back to the main process. This helps to minimize the runtime overhead of tracing since sending trace data over IPC can be an expensive operation. So, to end tracing, we must asynchronously ask all child processes to flush any pending trace data. Once all child processes have acknowledged the stopRecording request, callback will be called with a file that contains the traced data. Trace data will be written into resultFilePath if it is not empty or into a temporary file. The actual file path will be passed to callback if it's not null. Deprecated Soon", + "parameters": [ + { + "name": "resultFilePath", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "resultFilePath", + "type": "String", + "collection": false, + "description": "", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "contentTracing.stopRecording", + "tldr": "Stop recording on all processes.", + "slug": "contenttracingstoprecording", + "url": "https://electronjs.org/docs/api/content-tracing#contenttracingstoprecording", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:stopRecording", + "api:contenttracingstoprecording", + "api:contentTracing.stopRecording", + "doc:stopRecording", + "doc:contenttracingstoprecording", + "doc:contentTracing.stopRecording" + ] + }, + { + "objectID": "api-content-tracing#contenttracingstoprecording-1", + "name": "stopRecording", + "signature": "(resultFilePath)", + "description": "Stop recording on all processes. Child processes typically cache trace data and only rarely flush and send trace data back to the main process. This helps to minimize the runtime overhead of tracing since sending trace data over IPC can be an expensive operation. So, to end tracing, we must asynchronously ask all child processes to flush any pending trace data. Trace data will be written into resultFilePath if it is not empty or into a temporary file.", + "parameters": [ + { + "name": "resultFilePath", + "type": "String", + "collection": false, + "required": true + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "String", + "description": "resolves with a file that contains the traced data once all child processes have acknowledged the stopRecording request" + }, + "apiType": "methods", + "fullSignature": "contentTracing.stopRecording", + "tldr": "Stop recording on all processes.", + "slug": "contenttracingstoprecording-1", + "url": "https://electronjs.org/docs/api/content-tracing#contenttracingstoprecording-1", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:stopRecording", + "api:contenttracingstoprecording-1", + "api:contentTracing.stopRecording", + "doc:stopRecording", + "doc:contenttracingstoprecording-1", + "doc:contentTracing.stopRecording" + ] + }, + { + "objectID": "api-content-tracing#contenttracinggettracebufferusage", + "name": "getTraceBufferUsage", + "signature": "(callback)", + "description": "Get the maximum usage across processes of trace buffer as a percentage of the full state. When the TraceBufferUsage value is determined the callback is called.", + "parameters": [ + { + "name": "callback", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "value", + "type": "Number", + "collection": false, + "description": "", + "required": true + }, + { + "name": "percentage", + "type": "Number", + "collection": false, + "description": "", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "contentTracing.getTraceBufferUsage", + "tldr": "Get the maximum usage across processes of trace buffer as a percentage of the full state.", + "slug": "contenttracinggettracebufferusage", + "url": "https://electronjs.org/docs/api/content-tracing#contenttracinggettracebufferusage", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getTraceBufferUsage", + "api:contenttracinggettracebufferusage", + "api:contentTracing.getTraceBufferUsage", + "doc:getTraceBufferUsage", + "doc:contenttracinggettracebufferusage", + "doc:contentTracing.getTraceBufferUsage" + ] + }, + { + "objectID": "api-cookie#cookiename", + "name": "name", + "type": "String", + "collection": false, + "description": "The name of the cookie.", + "required": true, + "apiType": "properties", + "fullSignature": "Cookie.name", + "tldr": "The name of the cookie.", + "slug": "cookiename", + "url": "https://electronjs.org/docs/api/cookie#cookiename", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:name", + "api:cookiename", + "api:Cookie.name", + "doc:name", + "doc:cookiename", + "doc:Cookie.name" + ] + }, + { + "objectID": "api-cookie#cookievalue", + "name": "value", + "type": "String", + "collection": false, + "description": "The value of the cookie.", + "required": true, + "apiType": "properties", + "fullSignature": "Cookie.value", + "tldr": "The value of the cookie.", + "slug": "cookievalue", + "url": "https://electronjs.org/docs/api/cookie#cookievalue", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:value", + "api:cookievalue", + "api:Cookie.value", + "doc:value", + "doc:cookievalue", + "doc:Cookie.value" + ] + }, + { + "objectID": "api-cookie#cookiedomain", + "name": "domain", + "type": "String", + "collection": false, + "description": "The domain of the cookie.", + "required": false, + "apiType": "properties", + "fullSignature": "Cookie.domain", + "tldr": "The domain of the cookie.", + "slug": "cookiedomain", + "url": "https://electronjs.org/docs/api/cookie#cookiedomain", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:domain", + "api:cookiedomain", + "api:Cookie.domain", + "doc:domain", + "doc:cookiedomain", + "doc:Cookie.domain" + ] + }, + { + "objectID": "api-cookie#cookiehostonly", + "name": "hostOnly", + "type": "Boolean", + "collection": false, + "description": "Whether the cookie is a host-only cookie.", + "required": false, + "apiType": "properties", + "fullSignature": "Cookie.hostOnly", + "tldr": "Whether the cookie is a host-only cookie.", + "slug": "cookiehostonly", + "url": "https://electronjs.org/docs/api/cookie#cookiehostonly", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:hostOnly", + "api:cookiehostonly", + "api:Cookie.hostOnly", + "doc:hostOnly", + "doc:cookiehostonly", + "doc:Cookie.hostOnly" + ] + }, + { + "objectID": "api-cookie#cookiepath", + "name": "path", + "type": "String", + "collection": false, + "description": "The path of the cookie.", + "required": false, + "apiType": "properties", + "fullSignature": "Cookie.path", + "tldr": "The path of the cookie.", + "slug": "cookiepath", + "url": "https://electronjs.org/docs/api/cookie#cookiepath", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:path", + "api:cookiepath", + "api:Cookie.path", + "doc:path", + "doc:cookiepath", + "doc:Cookie.path" + ] + }, + { + "objectID": "api-cookie#cookiesecure", + "name": "secure", + "type": "Boolean", + "collection": false, + "description": "Whether the cookie is marked as secure.", + "required": false, + "apiType": "properties", + "fullSignature": "Cookie.secure", + "tldr": "Whether the cookie is marked as secure.", + "slug": "cookiesecure", + "url": "https://electronjs.org/docs/api/cookie#cookiesecure", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:secure", + "api:cookiesecure", + "api:Cookie.secure", + "doc:secure", + "doc:cookiesecure", + "doc:Cookie.secure" + ] + }, + { + "objectID": "api-cookie#cookiehttponly", + "name": "httpOnly", + "type": "Boolean", + "collection": false, + "description": "Whether the cookie is marked as HTTP only.", + "required": false, + "apiType": "properties", + "fullSignature": "Cookie.httpOnly", + "tldr": "Whether the cookie is marked as HTTP only.", + "slug": "cookiehttponly", + "url": "https://electronjs.org/docs/api/cookie#cookiehttponly", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:httpOnly", + "api:cookiehttponly", + "api:Cookie.httpOnly", + "doc:httpOnly", + "doc:cookiehttponly", + "doc:Cookie.httpOnly" + ] + }, + { + "objectID": "api-cookie#cookiesession", + "name": "session", + "type": "Boolean", + "collection": false, + "description": "Whether the cookie is a session cookie or a persistent cookie with an expiration date.", + "required": false, + "apiType": "properties", + "fullSignature": "Cookie.session", + "tldr": "Whether the cookie is a session cookie or a persistent cookie with an expiration date.", + "slug": "cookiesession", + "url": "https://electronjs.org/docs/api/cookie#cookiesession", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:session", + "api:cookiesession", + "api:Cookie.session", + "doc:session", + "doc:cookiesession", + "doc:Cookie.session" + ] + }, + { + "objectID": "api-cookie#cookieexpirationdate", + "name": "expirationDate", + "type": "Double", + "collection": false, + "description": "The expiration date of the cookie as the number of seconds since the UNIX epoch. Not provided for session cookies.", + "required": false, + "apiType": "properties", + "fullSignature": "Cookie.expirationDate", + "tldr": "The expiration date of the cookie as the number of seconds since the UNIX epoch.", + "slug": "cookieexpirationdate", + "url": "https://electronjs.org/docs/api/cookie#cookieexpirationdate", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:expirationDate", + "api:cookieexpirationdate", + "api:Cookie.expirationDate", + "doc:expirationDate", + "doc:cookieexpirationdate", + "doc:Cookie.expirationDate" + ] + }, + { + "objectID": "api-cookies#cookiesgetfilter", + "name": "get", + "signature": "(filter)", + "description": "Sends a request to get all cookies matching filter, and resolves a promise with the response.", + "parameters": [ + { + "name": "filter", + "type": "Object", + "collection": false, + "required": true, + "properties": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "Retrieves cookies which are associated with url. Empty implies retrieving cookies of all urls.", + "required": false + }, + { + "name": "name", + "type": "String", + "collection": false, + "description": "Filters cookies by name.", + "required": false + }, + { + "name": "domain", + "type": "String", + "collection": false, + "description": "Retrieves cookies whose domains match or are subdomains of domains.", + "required": false + }, + { + "name": "path", + "type": "String", + "collection": false, + "description": "Retrieves cookies whose path matches path.", + "required": false + }, + { + "name": "secure", + "type": "Boolean", + "collection": false, + "description": "Filters cookies by their Secure property.", + "required": false + }, + { + "name": "session", + "type": "Boolean", + "collection": false, + "description": "Filters out session or persistent cookies.", + "required": false + } + ] + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "Cookie", + "description": "A promise which resolves an array of cookie objects." + }, + "apiType": "instanceMethod", + "fullSignature": "cookies.get(filter)", + "tldr": "Sends a request to get all cookies matching filter, and resolves a promise with the response.", + "slug": "cookiesgetfilter", + "url": "https://electronjs.org/docs/api/cookies#cookiesgetfilter", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:get", + "api:cookiesgetfilter", + "api:cookies.get(filter)", + "doc:get", + "doc:cookiesgetfilter", + "doc:cookies.get(filter)" + ] + }, { "objectID": "api-cookies#cookiesgetfilter-callback", "name": "get", - "description": "Sends a request to get all cookies matching filter, callback will be called with callback(error, cookies) on complete.", + "signature": "(filter, callback)", + "description": "Sends a request to get all cookies matching filter, callback will be called with callback(error, cookies) on complete. Deprecated Soon", "parameters": [ { "name": "filter", @@ -6374,10 +11664,104 @@ "doc:cookies.get(filter, callback)" ] }, + { + "objectID": "api-cookies#cookiessetdetails", + "name": "set", + "signature": "(details)", + "description": "Sets a cookie with details.", + "parameters": [ + { + "name": "details", + "type": "Object", + "collection": false, + "required": true, + "properties": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "The url to associate the cookie with.", + "required": true + }, + { + "name": "name", + "type": "String", + "collection": false, + "description": "The name of the cookie. Empty by default if omitted.", + "required": false + }, + { + "name": "value", + "type": "String", + "collection": false, + "description": "The value of the cookie. Empty by default if omitted.", + "required": false + }, + { + "name": "domain", + "type": "String", + "collection": false, + "description": "The domain of the cookie. Empty by default if omitted.", + "required": false + }, + { + "name": "path", + "type": "String", + "collection": false, + "description": "The path of the cookie. Empty by default if omitted.", + "required": false + }, + { + "name": "secure", + "type": "Boolean", + "collection": false, + "description": "Whether the cookie should be marked as Secure. Defaults to false.", + "required": false + }, + { + "name": "httpOnly", + "type": "Boolean", + "collection": false, + "description": "Whether the cookie should be marked as HTTP only. Defaults to false.", + "required": false + }, + { + "name": "expirationDate", + "type": "Double", + "collection": false, + "description": "The expiration date of the cookie as the number of seconds since the UNIX epoch. If omitted then the cookie becomes a session cookie and will not be retained between sessions.", + "required": false + } + ] + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "void", + "description": "A promise which resolves when the cookie has been set" + }, + "apiType": "instanceMethod", + "fullSignature": "cookies.set(details)", + "tldr": "Sets a cookie with details.", + "slug": "cookiessetdetails", + "url": "https://electronjs.org/docs/api/cookies#cookiessetdetails", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:set", + "api:cookiessetdetails", + "api:cookies.set(details)", + "doc:set", + "doc:cookiessetdetails", + "doc:cookies.set(details)" + ] + }, { "objectID": "api-cookies#cookiessetdetails-callback", "name": "set", - "description": "Sets a cookie with details, callback will be called with callback(error) on complete.", + "signature": "(details, callback)", + "description": "Sets a cookie with details, callback will be called with callback(error) on complete. Deprecated Soon", "parameters": [ { "name": "details", @@ -6475,10 +11859,54 @@ "doc:cookies.set(details, callback)" ] }, + { + "objectID": "api-cookies#cookiesremoveurl-name", + "name": "remove", + "signature": "(url, name)", + "description": "Removes the cookies matching url and name", + "parameters": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "The URL associated with the cookie.", + "required": true + }, + { + "name": "name", + "type": "String", + "collection": false, + "description": "The name of cookie to remove.", + "required": true + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "void", + "description": "A promise which resolves when the cookie has been removed" + }, + "apiType": "instanceMethod", + "fullSignature": "cookies.remove(url, name)", + "tldr": "Removes the cookies matching url and name.", + "slug": "cookiesremoveurl-name", + "url": "https://electronjs.org/docs/api/cookies#cookiesremoveurl-name", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:remove", + "api:cookiesremoveurl-name", + "api:cookies.remove(url, name)", + "doc:remove", + "doc:cookiesremoveurl-name", + "doc:cookies.remove(url, name)" + ] + }, { "objectID": "api-cookies#cookiesremoveurl-name-callback", "name": "remove", - "description": "Removes the cookies matching url and name, callback will called with callback() on complete.", + "signature": "(url, name, callback)", + "description": "Removes the cookies matching url and name, callback will called with callback() on complete. Deprecated Soon", "parameters": [ { "name": "url", @@ -6517,10 +11945,38 @@ "doc:cookies.remove(url, name, callback)" ] }, + { + "objectID": "api-cookies#cookiesflushstore", + "name": "flushStore", + "signature": "()", + "description": "Writes any unwritten cookies data to disk.", + "returns": { + "type": "Promise", + "collection": false, + "innerType": "void", + "description": "A promise which resolves when the cookie store has been flushed" + }, + "apiType": "instanceMethod", + "fullSignature": "cookies.flushStore()", + "tldr": "Writes any unwritten cookies data to disk.", + "slug": "cookiesflushstore", + "url": "https://electronjs.org/docs/api/cookies#cookiesflushstore", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:flushStore", + "api:cookiesflushstore", + "api:cookies.flushStore()", + "doc:flushStore", + "doc:cookiesflushstore", + "doc:cookies.flushStore()" + ] + }, { "objectID": "api-cookies#cookiesflushstorecallback", "name": "flushStore", - "description": "Writes any unwritten cookies data to disk.", + "signature": "(callback)", + "description": "Writes any unwritten cookies data to disk. Deprecated Soon", "parameters": [ { "name": "callback", @@ -6603,21 +12059,494 @@ "apiType": "event", "fullSignature": "cookies.on('changed')", "url": "https://electronjs.org/docs/api/cookies#event-changed", + "slug": "cookiesonchanged", "tldr": "Emitted when a cookie is changed because it was added, edited, removed, or expired.", "keyValuePairs": [ "is:doc", "is:api", "api:changed", - "api:undefined", + "api:cookiesonchanged", "api:cookies.on('changed')", "doc:changed", - "doc:undefined", + "doc:cookiesonchanged", "doc:cookies.on('changed')" ] }, + { + "objectID": "api-cpu-usage#cpuusagepercentcpuusage", + "name": "percentCPUUsage", + "type": "Number", + "collection": false, + "description": "Percentage of CPU used since the last call to getCPUUsage. First call returns 0.", + "required": true, + "apiType": "properties", + "fullSignature": "CPUUsage.percentCPUUsage", + "tldr": "Percentage of CPU used since the last call to getCPUUsage.", + "slug": "cpuusagepercentcpuusage", + "url": "https://electronjs.org/docs/api/cpu-usage#cpuusagepercentcpuusage", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:percentCPUUsage", + "api:cpuusagepercentcpuusage", + "api:CPUUsage.percentCPUUsage", + "doc:percentCPUUsage", + "doc:cpuusagepercentcpuusage", + "doc:CPUUsage.percentCPUUsage" + ] + }, + { + "objectID": "api-cpu-usage#cpuusageidlewakeupspersecond", + "name": "idleWakeupsPerSecond", + "type": "Number", + "collection": false, + "description": "The number of average idle cpu wakeups per second since the last call to getCPUUsage. First call returns 0. Will always return 0 on Windows.", + "required": true, + "apiType": "properties", + "fullSignature": "CPUUsage.idleWakeupsPerSecond", + "tldr": "The number of average idle cpu wakeups per second since the last call to getCPUUsage.", + "slug": "cpuusageidlewakeupspersecond", + "url": "https://electronjs.org/docs/api/cpu-usage#cpuusageidlewakeupspersecond", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:idleWakeupsPerSecond", + "api:cpuusageidlewakeupspersecond", + "api:CPUUsage.idleWakeupsPerSecond", + "doc:idleWakeupsPerSecond", + "doc:cpuusageidlewakeupspersecond", + "doc:CPUUsage.idleWakeupsPerSecond" + ] + }, + { + "objectID": "api-crash-report#crashreportdate", + "name": "date", + "type": "Date", + "collection": false, + "description": "", + "required": true, + "apiType": "properties", + "fullSignature": "CrashReport.date", + "tldr": null, + "slug": "crashreportdate", + "url": "https://electronjs.org/docs/api/crash-report#crashreportdate", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:date", + "api:crashreportdate", + "api:CrashReport.date", + "doc:date", + "doc:crashreportdate", + "doc:CrashReport.date" + ] + }, + { + "objectID": "api-crash-report#crashreportid", + "name": "id", + "type": "String", + "collection": false, + "description": "", + "required": true, + "apiType": "properties", + "fullSignature": "CrashReport.id", + "tldr": null, + "slug": "crashreportid", + "url": "https://electronjs.org/docs/api/crash-report#crashreportid", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:id", + "api:crashreportid", + "api:CrashReport.id", + "doc:id", + "doc:crashreportid", + "doc:CrashReport.id" + ] + }, + { + "objectID": "api-crash-reporter#crashreporterstart", + "name": "start", + "signature": "(options)", + "description": "You are required to call this method before using any other crashReporter APIs and in each process (main/renderer) from which you want to collect crash reports. You can pass different options to crashReporter.start when calling from different processes. Note Child processes created via the child_process module will not have access to the Electron modules. Therefore, to collect crash reports from them, use process.crashReporter.start instead. Pass the same options as above along with an additional one called crashesDirectory that should point to a directory to store the crash reports temporarily. You can test this out by calling process.crash() to crash the child process. Note: To collect crash reports from child process in Windows, you need to add this extra code as well. This will start the process that will monitor and send the crash reports. Replace submitURL, productName and crashesDirectory with appropriate values. Note: If you need send additional/updated extra parameters after your first call start you can call addExtraParameter on macOS or call start again with the new/updated extra parameters on Linux and Windows. Note: On macOS, Electron uses a new crashpad client for crash collection and reporting. If you want to enable crash reporting, initializing crashpad from the main process using crashReporter.start is required regardless of which process you want to collect crashes from. Once initialized this way, the crashpad handler collects crashes from all processes. You still have to call crashReporter.start from the renderer or child process, otherwise crashes from them will get reported without companyName, productName or any of the extra information.", + "parameters": [ + { + "name": "options", + "type": "Object", + "collection": false, + "required": true, + "properties": [ + { + "name": "companyName", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "submitURL", + "type": "String", + "collection": false, + "description": "URL that crash reports will be sent to as POST.", + "required": true + }, + { + "name": "productName", + "type": "String", + "collection": false, + "description": "Defaults to app.getName().", + "required": false + }, + { + "name": "uploadToServer", + "type": "Boolean", + "collection": false, + "description": "Whether crash reports should be sent to the server Default is true.", + "required": false + }, + { + "name": "ignoreSystemCrashHandler", + "type": "Boolean", + "collection": false, + "description": "Default is false.", + "required": false + }, + { + "name": "extra", + "type": "Object", + "collection": false, + "description": "An object you can define that will be sent along with the report. Only string properties are sent correctly. Nested objects are not supported and the property names and values must be less than 64 characters long.", + "required": false, + "properties": [] + }, + { + "name": "crashesDirectory", + "type": "String", + "collection": false, + "description": "Directory to store the crashreports temporarily (only used when the crash reporter is started via process.crashReporter.start).", + "required": false + } + ] + } + ], + "apiType": "methods", + "fullSignature": "crashReporter.start", + "tldr": "You are required to call this method before using any other crashReporter APIs and in each process (main/renderer) from which you want to collect crash reports.", + "slug": "crashreporterstart", + "url": "https://electronjs.org/docs/api/crash-reporter#crashreporterstart", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:start", + "api:crashreporterstart", + "api:crashReporter.start", + "doc:start", + "doc:crashreporterstart", + "doc:crashReporter.start" + ] + }, + { + "objectID": "api-crash-reporter#crashreportergetlastcrashreport", + "name": "getLastCrashReport", + "signature": "()", + "description": "Returns the date and ID of the last crash report. If no crash reports have been sent or the crash reporter has not been started, null is returned.", + "returns": { + "type": "CrashReport", + "collection": false + }, + "apiType": "methods", + "fullSignature": "crashReporter.getLastCrashReport", + "tldr": "Returns the date and ID of the last crash report.", + "slug": "crashreportergetlastcrashreport", + "url": "https://electronjs.org/docs/api/crash-reporter#crashreportergetlastcrashreport", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getLastCrashReport", + "api:crashreportergetlastcrashreport", + "api:crashReporter.getLastCrashReport", + "doc:getLastCrashReport", + "doc:crashreportergetlastcrashreport", + "doc:crashReporter.getLastCrashReport" + ] + }, + { + "objectID": "api-crash-reporter#crashreportergetuploadedreports", + "name": "getUploadedReports", + "signature": "()", + "description": "Returns all uploaded crash reports. Each report contains the date and uploaded ID.", + "returns": { + "type": "CrashReport", + "collection": true + }, + "apiType": "methods", + "fullSignature": "crashReporter.getUploadedReports", + "tldr": "Returns all uploaded crash reports.", + "slug": "crashreportergetuploadedreports", + "url": "https://electronjs.org/docs/api/crash-reporter#crashreportergetuploadedreports", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getUploadedReports", + "api:crashreportergetuploadedreports", + "api:crashReporter.getUploadedReports", + "doc:getUploadedReports", + "doc:crashreportergetuploadedreports", + "doc:crashReporter.getUploadedReports" + ] + }, + { + "objectID": "api-crash-reporter#crashreportergetuploadtoserver", + "name": "getUploadToServer", + "signature": "()", + "platforms": [ + "Linux", + "macOS" + ], + "description": "Note: This API can only be called from the main process.", + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether reports should be submitted to the server. Set through the start method or setUploadToServer." + }, + "apiType": "methods", + "fullSignature": "crashReporter.getUploadToServer", + "tldr": "Note: This API can only be called from the main process.", + "slug": "crashreportergetuploadtoserver", + "url": "https://electronjs.org/docs/api/crash-reporter#crashreportergetuploadtoserver", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getUploadToServer", + "api:crashreportergetuploadtoserver", + "api:crashReporter.getUploadToServer", + "doc:getUploadToServer", + "doc:crashreportergetuploadtoserver", + "doc:crashReporter.getUploadToServer" + ] + }, + { + "objectID": "api-crash-reporter#crashreportersetuploadtoserver", + "name": "setUploadToServer", + "signature": "(uploadToServer)", + "platforms": [ + "Linux", + "macOS" + ], + "description": "This would normally be controlled by user preferences. This has no effect if called before start is called. Note: This API can only be called from the main process.", + "parameters": [ + { + "name": "uploadToServer", + "type": "Boolean", + "collection": false, + "description": "Whether reports should be submitted to the server.", + "required": true + } + ], + "apiType": "methods", + "fullSignature": "crashReporter.setUploadToServer", + "tldr": "This would normally be controlled by user preferences.", + "slug": "crashreportersetuploadtoserver", + "url": "https://electronjs.org/docs/api/crash-reporter#crashreportersetuploadtoserver", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setUploadToServer", + "api:crashreportersetuploadtoserver", + "api:crashReporter.setUploadToServer", + "doc:setUploadToServer", + "doc:crashreportersetuploadtoserver", + "doc:crashReporter.setUploadToServer" + ] + }, + { + "objectID": "api-crash-reporter#crashreporteraddextraparameter", + "name": "addExtraParameter", + "signature": "(key, value)", + "platforms": [ + "macOS" + ], + "description": "Set an extra parameter to be sent with the crash report. The values specified here will be sent in addition to any values set via the extra option when start was called. This API is only available on macOS, if you need to add/update extra parameters on Linux and Windows after your first call to start you can call start again with the updated extra options.", + "parameters": [ + { + "name": "key", + "type": "String", + "collection": false, + "description": "Parameter key, must be less than 64 characters long.", + "required": true + }, + { + "name": "value", + "type": "String", + "collection": false, + "description": "Parameter value, must be less than 64 characters long.", + "required": true + } + ], + "apiType": "methods", + "fullSignature": "crashReporter.addExtraParameter", + "tldr": "Set an extra parameter to be sent with the crash report.", + "slug": "crashreporteraddextraparameter", + "url": "https://electronjs.org/docs/api/crash-reporter#crashreporteraddextraparameter", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:addExtraParameter", + "api:crashreporteraddextraparameter", + "api:crashReporter.addExtraParameter", + "doc:addExtraParameter", + "doc:crashreporteraddextraparameter", + "doc:crashReporter.addExtraParameter" + ] + }, + { + "objectID": "api-crash-reporter#crashreporterremoveextraparameter", + "name": "removeExtraParameter", + "signature": "(key)", + "platforms": [ + "macOS" + ], + "description": "Remove a extra parameter from the current set of parameters so that it will not be sent with the crash report.", + "parameters": [ + { + "name": "key", + "type": "String", + "collection": false, + "description": "Parameter key, must be less than 64 characters long.", + "required": true + } + ], + "apiType": "methods", + "fullSignature": "crashReporter.removeExtraParameter", + "tldr": "Remove a extra parameter from the current set of parameters so that it will not be sent with the crash report.", + "slug": "crashreporterremoveextraparameter", + "url": "https://electronjs.org/docs/api/crash-reporter#crashreporterremoveextraparameter", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:removeExtraParameter", + "api:crashreporterremoveextraparameter", + "api:crashReporter.removeExtraParameter", + "doc:removeExtraParameter", + "doc:crashreporterremoveextraparameter", + "doc:crashReporter.removeExtraParameter" + ] + }, + { + "objectID": "api-crash-reporter#crashreportergetparameters", + "name": "getParameters", + "signature": "()", + "description": "See all of the current parameters being passed to the crash reporter.", + "apiType": "methods", + "fullSignature": "crashReporter.getParameters", + "tldr": "See all of the current parameters being passed to the crash reporter.", + "slug": "crashreportergetparameters", + "url": "https://electronjs.org/docs/api/crash-reporter#crashreportergetparameters", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getParameters", + "api:crashreportergetparameters", + "api:crashReporter.getParameters", + "doc:getParameters", + "doc:crashreportergetparameters", + "doc:crashReporter.getParameters" + ] + }, + { + "objectID": "api-custom-scheme#customschemescheme", + "name": "scheme", + "type": "String", + "collection": false, + "description": "Custom schemes to be registered with options.", + "required": true, + "apiType": "properties", + "fullSignature": "CustomScheme.scheme", + "tldr": "Custom schemes to be registered with options.", + "slug": "customschemescheme", + "url": "https://electronjs.org/docs/api/custom-scheme#customschemescheme", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:scheme", + "api:customschemescheme", + "api:CustomScheme.scheme", + "doc:scheme", + "doc:customschemescheme", + "doc:CustomScheme.scheme" + ] + }, + { + "objectID": "api-custom-scheme#customschemeprivileges", + "name": "privileges", + "type": "Object", + "collection": false, + "description": "", + "required": false, + "properties": [ + { + "name": "standard", + "type": "Boolean", + "collection": false, + "description": "Default false.", + "required": false + }, + { + "name": "secure", + "type": "Boolean", + "collection": false, + "description": "Default false.", + "required": false + }, + { + "name": "bypassCSP", + "type": "Boolean", + "collection": false, + "description": "Default false.", + "required": false + }, + { + "name": "allowServiceWorkers", + "type": "Boolean", + "collection": false, + "description": "Default false.", + "required": false + }, + { + "name": "supportFetchAPI", + "type": "Boolean", + "collection": false, + "description": "Default false.", + "required": false + }, + { + "name": "corsEnabled", + "type": "Boolean", + "collection": false, + "description": "Default false.", + "required": false + } + ], + "apiType": "properties", + "fullSignature": "CustomScheme.privileges", + "tldr": null, + "slug": "customschemeprivileges", + "url": "https://electronjs.org/docs/api/custom-scheme#customschemeprivileges", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:privileges", + "api:customschemeprivileges", + "api:CustomScheme.privileges", + "doc:privileges", + "doc:customschemeprivileges", + "doc:CustomScheme.privileges" + ] + }, { "objectID": "api-debugger#debuggerattachprotocolversion", "name": "attach", + "signature": "([protocolVersion])", "description": "Attaches the debugger to the webContents.", "parameters": [ { @@ -6647,6 +12576,7 @@ { "objectID": "api-debugger#debuggerisattached", "name": "isAttached", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -6671,6 +12601,7 @@ { "objectID": "api-debugger#debuggerdetach", "name": "detach", + "signature": "()", "description": "Detaches the debugger from the webContents.", "apiType": "instanceMethod", "fullSignature": "debugger.detach()", @@ -6691,13 +12622,14 @@ { "objectID": "api-debugger#debuggersendcommandmethod-commandparams-callback", "name": "sendCommand", - "description": "Send given command to the debugging target.", + "signature": "(method[, commandParams, callback])", + "description": "Send given command to the debugging target. Deprecated Soon", "parameters": [ { "name": "method", "type": "String", "collection": false, - "description": "Method name, should be one of the methods defined by the remote debugging protocol.", + "description": "Method name, should be one of the methods defined by the .", "required": true }, { @@ -6748,6 +12680,49 @@ "doc:debugger.sendCommand(method[, commandParams, callback])" ] }, + { + "objectID": "api-debugger#debuggersendcommandmethod-commandparams", + "name": "sendCommand", + "signature": "(method[, commandParams])", + "description": "Send given command to the debugging target.", + "parameters": [ + { + "name": "method", + "type": "String", + "collection": false, + "description": "Method name, should be one of the methods defined by the .", + "required": true + }, + { + "name": "commandParams", + "type": "Object", + "collection": false, + "description": "JSON object with request parameters.", + "required": false + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "any", + "description": "A promise that resolves with the response defined by the 'returns' attribute of the command description in the remote debugging protocol or is rejected indicating the failure of the command." + }, + "apiType": "instanceMethod", + "fullSignature": "debugger.sendCommand(method[, commandParams])", + "tldr": "Send given command to the debugging target.", + "slug": "debuggersendcommandmethod-commandparams", + "url": "https://electronjs.org/docs/api/debugger#debuggersendcommandmethod-commandparams", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:sendCommand", + "api:debuggersendcommandmethod-commandparams", + "api:debugger.sendCommand(method[, commandParams])", + "doc:sendCommand", + "doc:debuggersendcommandmethod-commandparams", + "doc:debugger.sendCommand(method[, commandParams])" + ] + }, { "objectID": "api-debugger#event-detach", "name": "detach", @@ -6770,15 +12745,16 @@ "apiType": "event", "fullSignature": "debugger.on('detach')", "url": "https://electronjs.org/docs/api/debugger#event-detach", + "slug": "debuggerondetach", "tldr": "Emitted when debugging session is terminated.", "keyValuePairs": [ "is:doc", "is:api", "api:detach", - "api:undefined", + "api:debuggerondetach", "api:debugger.on('detach')", "doc:detach", - "doc:undefined", + "doc:debuggerondetach", "doc:debugger.on('detach')" ] }, @@ -6811,21 +12787,977 @@ "apiType": "event", "fullSignature": "debugger.on('message')", "url": "https://electronjs.org/docs/api/debugger#event-message", + "slug": "debuggeronmessage", "tldr": "Emitted whenever debugging target issues instrumentation event.", "keyValuePairs": [ "is:doc", "is:api", "api:message", - "api:undefined", + "api:debuggeronmessage", "api:debugger.on('message')", "doc:message", - "doc:undefined", + "doc:debuggeronmessage", "doc:debugger.on('message')" ] }, + { + "objectID": "api-desktop-capturer#desktopcapturergetsources", + "name": "getSources", + "signature": "(options, callback)", + "description": "Starts gathering information about all available desktop media sources, and calls callback(error, sources) when finished. sources is an array of DesktopCapturerSource objects, each DesktopCapturerSource represents a screen or an individual window that can be captured. Deprecated Soon", + "parameters": [ + { + "name": "options", + "type": "Object", + "collection": false, + "required": true, + "properties": [ + { + "name": "types", + "type": "String", + "collection": true, + "description": "An array of Strings that lists the types of desktop sources to be captured, available types are screen and window.", + "required": true + }, + { + "name": "thumbnailSize", + "type": "Size", + "collection": false, + "description": "The size that the media source thumbnail should be scaled to. Default is 150 x 150.", + "required": false + }, + { + "name": "fetchWindowIcons", + "type": "Boolean", + "collection": false, + "description": "Set to true to enable fetching window icons. The default value is false. When false the appIcon property of the sources return null. Same if a source has the type screen.", + "required": false + } + ] + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "error", + "type": "Error", + "collection": false, + "description": "", + "required": true + }, + { + "name": "sources", + "type": "DesktopCapturerSource", + "collection": true, + "description": "", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "desktopCapturer.getSources", + "tldr": "Starts gathering information about all available desktop media sources, and calls callback(error, sources) when finished.", + "slug": "desktopcapturergetsources", + "url": "https://electronjs.org/docs/api/desktop-capturer#desktopcapturergetsources", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getSources", + "api:desktopcapturergetsources", + "api:desktopCapturer.getSources", + "doc:getSources", + "doc:desktopcapturergetsources", + "doc:desktopCapturer.getSources" + ] + }, + { + "objectID": "api-desktop-capturer#desktopcapturergetsources-1", + "name": "getSources", + "signature": "(options)", + "parameters": [ + { + "name": "options", + "type": "Object", + "collection": false, + "required": true, + "properties": [ + { + "name": "types", + "type": "String", + "collection": true, + "description": "An array of Strings that lists the types of desktop sources to be captured, available types are screen and window.", + "required": true + }, + { + "name": "thumbnailSize", + "type": "Size", + "collection": false, + "description": "The size that the media source thumbnail should be scaled to. Default is 150 x 150.", + "required": false + }, + { + "name": "fetchWindowIcons", + "type": "Boolean", + "collection": false, + "description": "Set to true to enable fetching window icons. The default value is false. When false the appIcon property of the sources return null. Same if a source has the type screen.", + "required": false + } + ] + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "DesktopCapturerSource", + "description": "Resolves with an array of DesktopCapturerSource objects, each DesktopCapturerSource represents a screen or an individual window that can be captured." + }, + "apiType": "methods", + "fullSignature": "desktopCapturer.getSources", + "tldr": "Returns resolves with an array of DesktopCapturerSource objects, each DesktopCapturerSource represents a screen or an individual window that can be captured.", + "slug": "desktopcapturergetsources-1", + "url": "https://electronjs.org/docs/api/desktop-capturer#desktopcapturergetsources-1", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getSources", + "api:desktopcapturergetsources-1", + "api:desktopCapturer.getSources", + "doc:getSources", + "doc:desktopcapturergetsources-1", + "doc:desktopCapturer.getSources" + ] + }, + { + "objectID": "api-desktop-capturer-source#desktopcapturersourceid", + "name": "id", + "type": "String", + "collection": false, + "description": "The identifier of a window or screen that can be used as a chromeMediaSourceId constraint when calling [navigator.webkitGetUserMedia]. The format of the identifier will be window:XX or screen:XX, where XX is a random generated number.", + "required": true, + "apiType": "properties", + "fullSignature": "DesktopCapturerSource.id", + "tldr": "The identifier of a window or screen that can be used as a chromeMediaSourceId constraint when calling [navigator.webkitGetUserMedia].", + "slug": "desktopcapturersourceid", + "url": "https://electronjs.org/docs/api/desktop-capturer-source#desktopcapturersourceid", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:id", + "api:desktopcapturersourceid", + "api:DesktopCapturerSource.id", + "doc:id", + "doc:desktopcapturersourceid", + "doc:DesktopCapturerSource.id" + ] + }, + { + "objectID": "api-desktop-capturer-source#desktopcapturersourcename", + "name": "name", + "type": "String", + "collection": false, + "description": "A screen source will be named either Entire Screen or Screen , while the name of a window source will match the window title.", + "required": true, + "apiType": "properties", + "fullSignature": "DesktopCapturerSource.name", + "tldr": "A screen source will be named either Entire Screen or Screen , while the name of a window source will match the window title.", + "slug": "desktopcapturersourcename", + "url": "https://electronjs.org/docs/api/desktop-capturer-source#desktopcapturersourcename", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:name", + "api:desktopcapturersourcename", + "api:DesktopCapturerSource.name", + "doc:name", + "doc:desktopcapturersourcename", + "doc:DesktopCapturerSource.name" + ] + }, + { + "objectID": "api-desktop-capturer-source#desktopcapturersourcethumbnail", + "name": "thumbnail", + "type": "NativeImage", + "collection": false, + "description": "A thumbnail image. There is no guarantee that the size of the thumbnail is the same as the thumbnailSize specified in the options passed to desktopCapturer.getSources. The actual size depends on the scale of the screen or window.", + "required": true, + "apiType": "properties", + "fullSignature": "DesktopCapturerSource.thumbnail", + "tldr": "A thumbnail image.", + "slug": "desktopcapturersourcethumbnail", + "url": "https://electronjs.org/docs/api/desktop-capturer-source#desktopcapturersourcethumbnail", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:thumbnail", + "api:desktopcapturersourcethumbnail", + "api:DesktopCapturerSource.thumbnail", + "doc:thumbnail", + "doc:desktopcapturersourcethumbnail", + "doc:DesktopCapturerSource.thumbnail" + ] + }, + { + "objectID": "api-desktop-capturer-source#desktopcapturersourcedisplay_id", + "name": "display_id", + "type": "String", + "collection": false, + "description": "A unique identifier that will correspond to the id of the matching returned by the . On some platforms, this is equivalent to the XX portion of the id field above and on others it will differ. It will be an empty string if not available.", + "required": true, + "apiType": "properties", + "fullSignature": "DesktopCapturerSource.display_id", + "tldr": "A unique identifier that will correspond to the id of the matching returned by the .", + "slug": "desktopcapturersourcedisplay_id", + "url": "https://electronjs.org/docs/api/desktop-capturer-source#desktopcapturersourcedisplay_id", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:display_id", + "api:desktopcapturersourcedisplay_id", + "api:DesktopCapturerSource.display_id", + "doc:display_id", + "doc:desktopcapturersourcedisplay_id", + "doc:DesktopCapturerSource.display_id" + ] + }, + { + "objectID": "api-desktop-capturer-source#desktopcapturersourceappicon", + "name": "appIcon", + "type": "NativeImage", + "collection": false, + "description": "An icon image of the application that owns the window or null if the source has a type screen. The size of the icon is not known in advance and depends on what the the application provides.", + "required": true, + "apiType": "properties", + "fullSignature": "DesktopCapturerSource.appIcon", + "tldr": "An icon image of the application that owns the window or null if the source has a type screen.", + "slug": "desktopcapturersourceappicon", + "url": "https://electronjs.org/docs/api/desktop-capturer-source#desktopcapturersourceappicon", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:appIcon", + "api:desktopcapturersourceappicon", + "api:DesktopCapturerSource.appIcon", + "doc:appIcon", + "doc:desktopcapturersourceappicon", + "doc:DesktopCapturerSource.appIcon" + ] + }, + { + "objectID": "api-dialog#dialogshowopendialog", + "name": "showOpenDialog", + "signature": "([browserWindow, ]options[, callback])", + "description": "The browserWindow argument allows the dialog to attach itself to a parent window, making it modal. The filters specifies an array of file types that can be displayed or selected when you want to limit the user to a specific type. For example: The extensions array should contain extensions without wildcards or dots (e.g. 'png' is good but '.png' and '*.png' are bad). To show all files, use the '*' wildcard (no other wildcard is supported). If a callback is passed, the API call will be asynchronous and the result will be passed via callback(filenames). Note: On Windows and Linux an open dialog can not be both a file selector and a directory selector, so if you set properties to ['openFile', 'openDirectory'] on these platforms, a directory selector will be shown.", + "parameters": [ + { + "name": "browserWindow", + "type": "BrowserWindow", + "collection": false, + "required": false + }, + { + "name": "options", + "type": "Object", + "collection": false, + "required": true, + "properties": [ + { + "name": "title", + "type": "String", + "collection": false, + "description": "", + "required": false + }, + { + "name": "defaultPath", + "type": "String", + "collection": false, + "description": "", + "required": false + }, + { + "name": "buttonLabel", + "type": "String", + "collection": false, + "description": "Custom label for the confirmation button, when left empty the default label will be used.", + "required": false + }, + { + "name": "filters", + "type": "FileFilter", + "collection": true, + "description": "", + "required": false + }, + { + "name": "properties", + "type": "String", + "collection": true, + "description": "Contains which features the dialog should use. The following values are supported:", + "required": false, + "possibleValues": [ + { + "value": "openFile", + "description": "Allow files to be selected." + }, + { + "value": "openDirectory", + "description": "Allow directories to be selected." + }, + { + "value": "multiSelections", + "description": "Allow multiple paths to be selected." + }, + { + "value": "showHiddenFiles", + "description": "Show hidden files in dialog." + }, + { + "value": "createDirectory", + "description": "" + }, + { + "value": "promptToCreate", + "description": "" + }, + { + "value": "noResolveAliases", + "description": "" + }, + { + "value": "treatPackageAsDirectory", + "description": "" + } + ] + }, + { + "name": "message", + "type": "String", + "collection": false, + "description": "Message to display above input boxes.", + "required": false + }, + { + "name": "securityScopedBookmarks", + "type": "Boolean", + "collection": false, + "description": "Create when packaged for the Mac App Store.", + "required": false + } + ] + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "required": false, + "parameters": [ + { + "name": "filePaths", + "type": "String", + "collection": true, + "description": "An array of file paths chosen by the user. If the dialog is cancelled this will be undefined.", + "required": false + }, + { + "name": "bookmarks", + "type": "String", + "collection": true, + "description": "An array matching the filePaths array of base64 encoded strings which contains security scoped bookmark data. securityScopedBookmarks must be enabled for this to be populated.", + "required": false + } + ] + } + ], + "returns": { + "type": "String", + "collection": true, + "description": ", an array of file paths chosen by the user, if the callback is provided it returns undefined." + }, + "apiType": "methods", + "fullSignature": "dialog.showOpenDialog", + "tldr": "The browserWindow argument allows the dialog to attach itself to a parent window, making it modal.", + "slug": "dialogshowopendialog", + "url": "https://electronjs.org/docs/api/dialog#dialogshowopendialog", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:showOpenDialog", + "api:dialogshowopendialog", + "api:dialog.showOpenDialog", + "doc:showOpenDialog", + "doc:dialogshowopendialog", + "doc:dialog.showOpenDialog" + ] + }, + { + "objectID": "api-dialog#dialogshowsavedialog", + "name": "showSaveDialog", + "signature": "([browserWindow, ]options[, callback])", + "description": "The browserWindow argument allows the dialog to attach itself to a parent window, making it modal. The filters specifies an array of file types that can be displayed, see dialog.showOpenDialog for an example. If a callback is passed, the API call will be asynchronous and the result will be passed via callback(filename).", + "parameters": [ + { + "name": "browserWindow", + "type": "BrowserWindow", + "collection": false, + "required": false + }, + { + "name": "options", + "type": "Object", + "collection": false, + "required": true, + "properties": [ + { + "name": "title", + "type": "String", + "collection": false, + "description": "", + "required": false + }, + { + "name": "defaultPath", + "type": "String", + "collection": false, + "description": "Absolute directory path, absolute file path, or file name to use by default.", + "required": false + }, + { + "name": "buttonLabel", + "type": "String", + "collection": false, + "description": "Custom label for the confirmation button, when left empty the default label will be used.", + "required": false + }, + { + "name": "filters", + "type": "FileFilter", + "collection": true, + "description": "", + "required": false + }, + { + "name": "message", + "type": "String", + "collection": false, + "description": "Message to display above text fields.", + "required": false + }, + { + "name": "nameFieldLabel", + "type": "String", + "collection": false, + "description": "Custom label for the text displayed in front of the filename text field.", + "required": false + }, + { + "name": "showsTagField", + "type": "Boolean", + "collection": false, + "description": "Show the tags input box, defaults to true.", + "required": false + }, + { + "name": "securityScopedBookmarks", + "type": "Boolean", + "collection": false, + "description": "Create a when packaged for the Mac App Store. If this option is enabled and the file doesn't already exist a blank file will be created at the chosen path.", + "required": false + } + ] + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "required": false, + "parameters": [ + { + "name": "filename", + "type": "String", + "collection": false, + "description": "If the dialog is cancelled this will be undefined.", + "required": false + }, + { + "name": "bookmark", + "type": "String", + "collection": false, + "description": "Base64 encoded string which contains the security scoped bookmark data for the saved file. securityScopedBookmarks must be enabled for this to be present.", + "required": false + } + ] + } + ], + "returns": { + "type": "String", + "collection": false, + "description": ", the path of the file chosen by the user, if a callback is provided it returns undefined." + }, + "apiType": "methods", + "fullSignature": "dialog.showSaveDialog", + "tldr": "The browserWindow argument allows the dialog to attach itself to a parent window, making it modal.", + "slug": "dialogshowsavedialog", + "url": "https://electronjs.org/docs/api/dialog#dialogshowsavedialog", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:showSaveDialog", + "api:dialogshowsavedialog", + "api:dialog.showSaveDialog", + "doc:showSaveDialog", + "doc:dialogshowsavedialog", + "doc:dialog.showSaveDialog" + ] + }, + { + "objectID": "api-dialog#dialogshowmessagebox", + "name": "showMessageBox", + "signature": "([browserWindow, ]options[, callback])", + "description": "Shows a message box, it will block the process until the message box is closed. It returns the index of the clicked button. The browserWindow argument allows the dialog to attach itself to a parent window, making it modal. If a callback is passed, the dialog will not block the process. The API call will be asynchronous and the result will be passed via callback(response).", + "parameters": [ + { + "name": "browserWindow", + "type": "BrowserWindow", + "collection": false, + "required": false + }, + { + "name": "options", + "type": "Object", + "collection": false, + "required": true, + "properties": [ + { + "name": "type", + "type": "String", + "collection": false, + "description": "Can be \"none\", \"info\", \"error\", \"question\" or \"warning\". On Windows, \"question\" displays the same icon as \"info\", unless you set an icon using the \"icon\" option. On macOS, both \"warning\" and \"error\" display the same warning icon.", + "required": false + }, + { + "name": "buttons", + "type": "String", + "collection": true, + "description": "Array of texts for buttons. On Windows, an empty array will result in one button labeled \"OK\".", + "required": false + }, + { + "name": "defaultId", + "type": "Integer", + "collection": false, + "description": "Index of the button in the buttons array which will be selected by default when the message box opens.", + "required": false + }, + { + "name": "title", + "type": "String", + "collection": false, + "description": "Title of the message box, some platforms will not show it.", + "required": false + }, + { + "name": "message", + "type": "String", + "collection": false, + "description": "Content of the message box.", + "required": true + }, + { + "name": "detail", + "type": "String", + "collection": false, + "description": "Extra information of the message.", + "required": false + }, + { + "name": "checkboxLabel", + "type": "String", + "collection": false, + "description": "If provided, the message box will include a checkbox with the given label. The checkbox state can be inspected only when using callback.", + "required": false + }, + { + "name": "checkboxChecked", + "type": "Boolean", + "collection": false, + "description": "Initial checked state of the checkbox. false by default.", + "required": false + }, + { + "name": "icon", + "type": "NativeImage", + "collection": false, + "description": "", + "required": false + }, + { + "name": "cancelId", + "type": "Integer", + "collection": false, + "description": "The index of the button to be used to cancel the dialog, via the Esc key. By default this is assigned to the first button with \"cancel\" or \"no\" as the label. If no such labeled buttons exist and this option is not set, 0 will be used as the return value or callback response.", + "required": false + }, + { + "name": "noLink", + "type": "Boolean", + "collection": false, + "description": "On Windows Electron will try to figure out which one of the buttons are common buttons (like \"Cancel\" or \"Yes\"), and show the others as command links in the dialog. This can make the dialog appear in the style of modern Windows apps. If you don't like this behavior, you can set noLink to true.", + "required": false + }, + { + "name": "normalizeAccessKeys", + "type": "Boolean", + "collection": false, + "description": "Normalize the keyboard access keys across platforms. Default is false. Enabling this assumes & is used in the button labels for the placement of the keyboard shortcut access key and labels will be converted so they work correctly on each platform, & characters are removed on macOS, converted to _ on Linux, and left untouched on Windows. For example, a button label of Vie&w will be converted to Vie_w on Linux and View on macOS and can be selected via Alt-W on Windows and Linux.", + "required": false + } + ] + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "required": false, + "parameters": [ + { + "name": "response", + "type": "Number", + "collection": false, + "description": "The index of the button that was clicked.", + "required": true + }, + { + "name": "checkboxChecked", + "type": "Boolean", + "collection": false, + "description": "The checked state of the checkbox if checkboxLabel was set. Otherwise false.", + "required": true + } + ] + } + ], + "returns": { + "type": "Integer", + "collection": false, + "description": ", the index of the clicked button, if a callback is provided it returns undefined." + }, + "apiType": "methods", + "fullSignature": "dialog.showMessageBox", + "tldr": "Shows a message box, it will block the process until the message box is closed.", + "slug": "dialogshowmessagebox", + "url": "https://electronjs.org/docs/api/dialog#dialogshowmessagebox", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:showMessageBox", + "api:dialogshowmessagebox", + "api:dialog.showMessageBox", + "doc:showMessageBox", + "doc:dialogshowmessagebox", + "doc:dialog.showMessageBox" + ] + }, + { + "objectID": "api-dialog#dialogshowerrorbox", + "name": "showErrorBox", + "signature": "(title, content)", + "description": "Displays a modal dialog that shows an error message. This API can be called safely before the ready event the app module emits, it is usually used to report errors in early stage of startup. If called before the app readyevent on Linux, the message will be emitted to stderr, and no GUI dialog will appear.", + "parameters": [ + { + "name": "title", + "type": "String", + "collection": false, + "description": "The title to display in the error box.", + "required": true + }, + { + "name": "content", + "type": "String", + "collection": false, + "description": "The text content to display in the error box.", + "required": true + } + ], + "apiType": "methods", + "fullSignature": "dialog.showErrorBox", + "tldr": "Displays a modal dialog that shows an error message.", + "slug": "dialogshowerrorbox", + "url": "https://electronjs.org/docs/api/dialog#dialogshowerrorbox", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:showErrorBox", + "api:dialogshowerrorbox", + "api:dialog.showErrorBox", + "doc:showErrorBox", + "doc:dialogshowerrorbox", + "doc:dialog.showErrorBox" + ] + }, + { + "objectID": "api-dialog#dialogshowcertificatetrustdialog", + "name": "showCertificateTrustDialog", + "signature": "([browserWindow, ]options, callback)", + "platforms": [ + "macOS", + "Windows" + ], + "description": "On macOS, this displays a modal dialog that shows a message and certificate information, and gives the user the option of trusting/importing the certificate. If you provide a browserWindow argument the dialog will be attached to the parent window, making it modal. On Windows the options are more limited, due to the Win32 APIs used:", + "parameters": [ + { + "name": "browserWindow", + "type": "BrowserWindow", + "collection": false, + "required": false + }, + { + "name": "options", + "type": "Object", + "collection": false, + "required": true, + "properties": [ + { + "name": "certificate", + "type": "Certificate", + "collection": false, + "description": "The certificate to trust/import.", + "required": true + }, + { + "name": "message", + "type": "String", + "collection": false, + "description": "The message to display to the user.", + "required": true + } + ] + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "dialog.showCertificateTrustDialog", + "tldr": "On macOS, this displays a modal dialog that shows a message and certificate information, and gives the user the option of trusting/importing the certificate.", + "slug": "dialogshowcertificatetrustdialog", + "url": "https://electronjs.org/docs/api/dialog#dialogshowcertificatetrustdialog", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:showCertificateTrustDialog", + "api:dialogshowcertificatetrustdialog", + "api:dialog.showCertificateTrustDialog", + "doc:showCertificateTrustDialog", + "doc:dialogshowcertificatetrustdialog", + "doc:dialog.showCertificateTrustDialog" + ] + }, + { + "objectID": "api-display#displayid", + "name": "id", + "type": "Number", + "collection": false, + "description": "Unique identifier associated with the display.", + "required": true, + "apiType": "properties", + "fullSignature": "Display.id", + "tldr": "Unique identifier associated with the display.", + "slug": "displayid", + "url": "https://electronjs.org/docs/api/display#displayid", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:id", + "api:displayid", + "api:Display.id", + "doc:id", + "doc:displayid", + "doc:Display.id" + ] + }, + { + "objectID": "api-display#displayrotation", + "name": "rotation", + "type": "Number", + "collection": false, + "description": "Can be 0, 90, 180, 270, represents screen rotation in clock-wise degrees.", + "required": true, + "apiType": "properties", + "fullSignature": "Display.rotation", + "tldr": "Can be 0, 90, 180, 270, represents screen rotation in clock-wise degrees.", + "slug": "displayrotation", + "url": "https://electronjs.org/docs/api/display#displayrotation", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:rotation", + "api:displayrotation", + "api:Display.rotation", + "doc:rotation", + "doc:displayrotation", + "doc:Display.rotation" + ] + }, + { + "objectID": "api-display#displayscalefactor", + "name": "scaleFactor", + "type": "Number", + "collection": false, + "description": "Output device's pixel scale factor.", + "required": true, + "apiType": "properties", + "fullSignature": "Display.scaleFactor", + "tldr": "Output device's pixel scale factor.", + "slug": "displayscalefactor", + "url": "https://electronjs.org/docs/api/display#displayscalefactor", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:scaleFactor", + "api:displayscalefactor", + "api:Display.scaleFactor", + "doc:scaleFactor", + "doc:displayscalefactor", + "doc:Display.scaleFactor" + ] + }, + { + "objectID": "api-display#displaytouchsupport", + "name": "touchSupport", + "type": "String", + "collection": false, + "description": "Can be available, unavailable, unknown.", + "required": true, + "possibleValues": [ + { + "value": "available" + }, + { + "value": "unavailable" + }, + { + "value": "unknown" + } + ], + "apiType": "properties", + "fullSignature": "Display.touchSupport", + "tldr": "Can be available, unavailable, unknown.", + "slug": "displaytouchsupport", + "url": "https://electronjs.org/docs/api/display#displaytouchsupport", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:touchSupport", + "api:displaytouchsupport", + "api:Display.touchSupport", + "doc:touchSupport", + "doc:displaytouchsupport", + "doc:Display.touchSupport" + ] + }, + { + "objectID": "api-display#displaybounds", + "name": "bounds", + "type": "Rectangle", + "collection": false, + "description": "", + "required": true, + "apiType": "properties", + "fullSignature": "Display.bounds", + "tldr": null, + "slug": "displaybounds", + "url": "https://electronjs.org/docs/api/display#displaybounds", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:bounds", + "api:displaybounds", + "api:Display.bounds", + "doc:bounds", + "doc:displaybounds", + "doc:Display.bounds" + ] + }, + { + "objectID": "api-display#displaysize", + "name": "size", + "type": "Size", + "collection": false, + "description": "", + "required": true, + "apiType": "properties", + "fullSignature": "Display.size", + "tldr": null, + "slug": "displaysize", + "url": "https://electronjs.org/docs/api/display#displaysize", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:size", + "api:displaysize", + "api:Display.size", + "doc:size", + "doc:displaysize", + "doc:Display.size" + ] + }, + { + "objectID": "api-display#displayworkarea", + "name": "workArea", + "type": "Rectangle", + "collection": false, + "description": "", + "required": true, + "apiType": "properties", + "fullSignature": "Display.workArea", + "tldr": null, + "slug": "displayworkarea", + "url": "https://electronjs.org/docs/api/display#displayworkarea", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:workArea", + "api:displayworkarea", + "api:Display.workArea", + "doc:workArea", + "doc:displayworkarea", + "doc:Display.workArea" + ] + }, + { + "objectID": "api-display#displayworkareasize", + "name": "workAreaSize", + "type": "Size", + "collection": false, + "description": "", + "required": true, + "apiType": "properties", + "fullSignature": "Display.workAreaSize", + "tldr": null, + "slug": "displayworkareasize", + "url": "https://electronjs.org/docs/api/display#displayworkareasize", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:workAreaSize", + "api:displayworkareasize", + "api:Display.workAreaSize", + "doc:workAreaSize", + "doc:displayworkareasize", + "doc:Display.workAreaSize" + ] + }, { "objectID": "api-download-item#downloaditemsetsavepathpath", "name": "setSavePath", + "signature": "(path)", "description": "The API is only available in session's will-download callback function. If user doesn't set the save path via the API, Electron will use the original routine to determine the save path(Usually prompts a save dialog).", "parameters": [ { @@ -6855,6 +13787,7 @@ { "objectID": "api-download-item#downloaditemgetsavepath", "name": "getSavePath", + "signature": "()", "returns": { "type": "String", "collection": false, @@ -6876,9 +13809,65 @@ "doc:downloadItem.getSavePath()" ] }, + { + "objectID": "api-download-item#downloaditemsetsavedialogoptionsoptions", + "name": "setSaveDialogOptions", + "signature": "(options)", + "description": "This API allows the user to set custom options for the save dialog that opens for the download item by default. The API is only available in session's will-download callback function.", + "parameters": [ + { + "name": "options", + "type": "SaveDialogOptions", + "collection": false, + "description": "Set the save file dialog options. This object has the same properties as the `options` parameter of .", + "required": true + } + ], + "apiType": "instanceMethod", + "fullSignature": "downloadItem.setSaveDialogOptions(options)", + "tldr": "This API allows the user to set custom options for the save dialog that opens for the download item by default.", + "slug": "downloaditemsetsavedialogoptionsoptions", + "url": "https://electronjs.org/docs/api/download-item#downloaditemsetsavedialogoptionsoptions", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setSaveDialogOptions", + "api:downloaditemsetsavedialogoptionsoptions", + "api:downloadItem.setSaveDialogOptions(options)", + "doc:setSaveDialogOptions", + "doc:downloaditemsetsavedialogoptionsoptions", + "doc:downloadItem.setSaveDialogOptions(options)" + ] + }, + { + "objectID": "api-download-item#downloaditemgetsavedialogoptions", + "name": "getSaveDialogOptions", + "signature": "()", + "returns": { + "type": "SaveDialogOptions", + "collection": false, + "description": "Returns the object previously set by downloadItem.setSaveDialogOptions(options)." + }, + "apiType": "instanceMethod", + "fullSignature": "downloadItem.getSaveDialogOptions()", + "tldr": "Returns returns the object previously set by downloadItem.setSaveDialogOptions(options).", + "slug": "downloaditemgetsavedialogoptions", + "url": "https://electronjs.org/docs/api/download-item#downloaditemgetsavedialogoptions", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getSaveDialogOptions", + "api:downloaditemgetsavedialogoptions", + "api:downloadItem.getSaveDialogOptions()", + "doc:getSaveDialogOptions", + "doc:downloaditemgetsavedialogoptions", + "doc:downloadItem.getSaveDialogOptions()" + ] + }, { "objectID": "api-download-item#downloaditempause", "name": "pause", + "signature": "()", "description": "Pauses the download.", "apiType": "instanceMethod", "fullSignature": "downloadItem.pause()", @@ -6899,6 +13888,7 @@ { "objectID": "api-download-item#downloaditemispaused", "name": "isPaused", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -6923,6 +13913,7 @@ { "objectID": "api-download-item#downloaditemresume", "name": "resume", + "signature": "()", "description": "Resumes the download that has been paused. Note: To enable resumable downloads the server you are downloading from must support range requests and provide both Last-Modified and ETag header values. Otherwise resume() will dismiss previously received bytes and restart the download from the beginning.", "apiType": "instanceMethod", "fullSignature": "downloadItem.resume()", @@ -6943,6 +13934,7 @@ { "objectID": "api-download-item#downloaditemcanresume", "name": "canResume", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -6967,6 +13959,7 @@ { "objectID": "api-download-item#downloaditemcancel", "name": "cancel", + "signature": "()", "description": "Cancels the download operation.", "apiType": "instanceMethod", "fullSignature": "downloadItem.cancel()", @@ -6987,6 +13980,7 @@ { "objectID": "api-download-item#downloaditemgeturl", "name": "getURL", + "signature": "()", "returns": { "type": "String", "collection": false, @@ -7011,6 +14005,7 @@ { "objectID": "api-download-item#downloaditemgetmimetype", "name": "getMimeType", + "signature": "()", "returns": { "type": "String", "collection": false, @@ -7035,6 +14030,7 @@ { "objectID": "api-download-item#downloaditemhasusergesture", "name": "hasUserGesture", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -7059,6 +14055,7 @@ { "objectID": "api-download-item#downloaditemgetfilename", "name": "getFilename", + "signature": "()", "description": "Note: The file name is not always the same as the actual one saved in local disk. If user changes the file name in a prompted download saving dialog, the actual name of saved file will be different.", "returns": { "type": "String", @@ -7084,6 +14081,7 @@ { "objectID": "api-download-item#downloaditemgettotalbytes", "name": "getTotalBytes", + "signature": "()", "description": "If the size is unknown, it returns 0.", "returns": { "type": "Integer", @@ -7109,6 +14107,7 @@ { "objectID": "api-download-item#downloaditemgetreceivedbytes", "name": "getReceivedBytes", + "signature": "()", "returns": { "type": "Integer", "collection": false, @@ -7133,6 +14132,7 @@ { "objectID": "api-download-item#downloaditemgetcontentdisposition", "name": "getContentDisposition", + "signature": "()", "returns": { "type": "String", "collection": false, @@ -7157,6 +14157,7 @@ { "objectID": "api-download-item#downloaditemgetstate", "name": "getState", + "signature": "()", "description": "Note: The following methods are useful specifically to resume a cancelled item when session is restarted.", "returns": { "type": "String", @@ -7196,6 +14197,7 @@ { "objectID": "api-download-item#downloaditemgeturlchain", "name": "getURLChain", + "signature": "()", "returns": { "type": "String", "collection": true, @@ -7220,6 +14222,7 @@ { "objectID": "api-download-item#downloaditemgetlastmodifiedtime", "name": "getLastModifiedTime", + "signature": "()", "returns": { "type": "String", "collection": false, @@ -7244,6 +14247,7 @@ { "objectID": "api-download-item#downloaditemgetetag", "name": "getETag", + "signature": "()", "returns": { "type": "String", "collection": false, @@ -7268,6 +14272,7 @@ { "objectID": "api-download-item#downloaditemgetstarttime", "name": "getStartTime", + "signature": "()", "returns": { "type": "Double", "collection": false, @@ -7319,15 +14324,16 @@ "apiType": "event", "fullSignature": "downloadItem.on('updated')", "url": "https://electronjs.org/docs/api/download-item#event-updated", + "slug": "downloaditemonupdated", "tldr": "Emitted when the download has been updated and is not done.", "keyValuePairs": [ "is:doc", "is:api", "api:updated", - "api:undefined", + "api:downloaditemonupdated", "api:downloadItem.on('updated')", "doc:updated", - "doc:undefined", + "doc:downloaditemonupdated", "doc:downloadItem.on('updated')" ] }, @@ -7364,18 +14370,719 @@ "apiType": "event", "fullSignature": "downloadItem.on('done')", "url": "https://electronjs.org/docs/api/download-item#event-done", + "slug": "downloaditemondone", "tldr": "Emitted when the download is in a terminal state.", "keyValuePairs": [ "is:doc", "is:api", "api:done", - "api:undefined", + "api:downloaditemondone", "api:downloadItem.on('done')", "doc:done", - "doc:undefined", + "doc:downloaditemondone", "doc:downloadItem.on('done')" ] }, + { + "objectID": "api-file-filter#filefiltername", + "name": "name", + "type": "String", + "collection": false, + "description": "", + "required": true, + "apiType": "properties", + "fullSignature": "FileFilter.name", + "tldr": null, + "slug": "filefiltername", + "url": "https://electronjs.org/docs/api/file-filter#filefiltername", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:name", + "api:filefiltername", + "api:FileFilter.name", + "doc:name", + "doc:filefiltername", + "doc:FileFilter.name" + ] + }, + { + "objectID": "api-file-filter#filefilterextensions", + "name": "extensions", + "type": "String", + "collection": true, + "description": "", + "required": true, + "apiType": "properties", + "fullSignature": "FileFilter.extensions", + "tldr": null, + "slug": "filefilterextensions", + "url": "https://electronjs.org/docs/api/file-filter#filefilterextensions", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:extensions", + "api:filefilterextensions", + "api:FileFilter.extensions", + "doc:extensions", + "doc:filefilterextensions", + "doc:FileFilter.extensions" + ] + }, + { + "objectID": "api-global-shortcut#globalshortcutregister", + "name": "register", + "signature": "(accelerator, callback)", + "description": "Registers a global shortcut of accelerator. The callback is called when the registered shortcut is pressed by the user. When the accelerator is already taken by other applications, this call will silently fail. This behavior is intended by operating systems, since they don't want applications to fight for global shortcuts. The following accelerators will not be registered successfully on macOS 10.14 Mojave unless the app has been authorized as a trusted accessibility client:", + "parameters": [ + { + "name": "accelerator", + "type": "Accelerator", + "collection": false, + "required": true + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "globalShortcut.register", + "tldr": "Registers a global shortcut of accelerator.", + "slug": "globalshortcutregister", + "url": "https://electronjs.org/docs/api/global-shortcut#globalshortcutregister", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:register", + "api:globalshortcutregister", + "api:globalShortcut.register", + "doc:register", + "doc:globalshortcutregister", + "doc:globalShortcut.register" + ] + }, + { + "objectID": "api-global-shortcut#globalshortcutregisterall", + "name": "registerAll", + "signature": "(accelerators, callback)", + "description": "Registers a global shortcut of all accelerator items in accelerators. The callback is called when any of the registered shortcuts are pressed by the user. When a given accelerator is already taken by other applications, this call will silently fail. This behavior is intended by operating systems, since they don't want applications to fight for global shortcuts. The following accelerators will not be registered successfully on macOS 10.14 Mojave unless the app has been authorized as a trusted accessibility client:", + "parameters": [ + { + "name": "accelerators", + "type": "String", + "collection": true, + "description": "an array of s.", + "required": true + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "globalShortcut.registerAll", + "tldr": "Registers a global shortcut of all accelerator items in accelerators.", + "slug": "globalshortcutregisterall", + "url": "https://electronjs.org/docs/api/global-shortcut#globalshortcutregisterall", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:registerAll", + "api:globalshortcutregisterall", + "api:globalShortcut.registerAll", + "doc:registerAll", + "doc:globalshortcutregisterall", + "doc:globalShortcut.registerAll" + ] + }, + { + "objectID": "api-global-shortcut#globalshortcutisregistered", + "name": "isRegistered", + "signature": "(accelerator)", + "description": "When the accelerator is already taken by other applications, this call will still return false. This behavior is intended by operating systems, since they don't want applications to fight for global shortcuts.", + "parameters": [ + { + "name": "accelerator", + "type": "Accelerator", + "collection": false, + "required": true + } + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether this application has registered accelerator." + }, + "apiType": "methods", + "fullSignature": "globalShortcut.isRegistered", + "tldr": "When the accelerator is already taken by other applications, this call will still return false.", + "slug": "globalshortcutisregistered", + "url": "https://electronjs.org/docs/api/global-shortcut#globalshortcutisregistered", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isRegistered", + "api:globalshortcutisregistered", + "api:globalShortcut.isRegistered", + "doc:isRegistered", + "doc:globalshortcutisregistered", + "doc:globalShortcut.isRegistered" + ] + }, + { + "objectID": "api-global-shortcut#globalshortcutunregister", + "name": "unregister", + "signature": "(accelerator)", + "description": "Unregisters the global shortcut of accelerator.", + "parameters": [ + { + "name": "accelerator", + "type": "Accelerator", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "globalShortcut.unregister", + "tldr": "Unregisters the global shortcut of accelerator.", + "slug": "globalshortcutunregister", + "url": "https://electronjs.org/docs/api/global-shortcut#globalshortcutunregister", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:unregister", + "api:globalshortcutunregister", + "api:globalShortcut.unregister", + "doc:unregister", + "doc:globalshortcutunregister", + "doc:globalShortcut.unregister" + ] + }, + { + "objectID": "api-global-shortcut#globalshortcutunregisterall", + "name": "unregisterAll", + "signature": "()", + "description": "Unregisters all of the global shortcuts.", + "apiType": "methods", + "fullSignature": "globalShortcut.unregisterAll", + "tldr": "Unregisters all of the global shortcuts.", + "slug": "globalshortcutunregisterall", + "url": "https://electronjs.org/docs/api/global-shortcut#globalshortcutunregisterall", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:unregisterAll", + "api:globalshortcutunregisterall", + "api:globalShortcut.unregisterAll", + "doc:unregisterAll", + "doc:globalshortcutunregisterall", + "doc:globalShortcut.unregisterAll" + ] + }, + { + "objectID": "api-gpu-feature-status#gpufeaturestatus2d_canvas", + "name": "2d_canvas", + "type": "String", + "collection": false, + "description": "Canvas.", + "required": true, + "apiType": "properties", + "fullSignature": "GPUFeatureStatus.2d_canvas", + "tldr": "Canvas.", + "slug": "gpufeaturestatus2d_canvas", + "url": "https://electronjs.org/docs/api/gpu-feature-status#gpufeaturestatus2d_canvas", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:2d_canvas", + "api:gpufeaturestatus2d_canvas", + "api:GPUFeatureStatus.2d_canvas", + "doc:2d_canvas", + "doc:gpufeaturestatus2d_canvas", + "doc:GPUFeatureStatus.2d_canvas" + ] + }, + { + "objectID": "api-gpu-feature-status#gpufeaturestatusflash_3d", + "name": "flash_3d", + "type": "String", + "collection": false, + "description": "Flash.", + "required": true, + "apiType": "properties", + "fullSignature": "GPUFeatureStatus.flash_3d", + "tldr": "Flash.", + "slug": "gpufeaturestatusflash_3d", + "url": "https://electronjs.org/docs/api/gpu-feature-status#gpufeaturestatusflash_3d", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:flash_3d", + "api:gpufeaturestatusflash_3d", + "api:GPUFeatureStatus.flash_3d", + "doc:flash_3d", + "doc:gpufeaturestatusflash_3d", + "doc:GPUFeatureStatus.flash_3d" + ] + }, + { + "objectID": "api-gpu-feature-status#gpufeaturestatusflash_stage3d", + "name": "flash_stage3d", + "type": "String", + "collection": false, + "description": "Flash Stage3D.", + "required": true, + "apiType": "properties", + "fullSignature": "GPUFeatureStatus.flash_stage3d", + "tldr": "Flash Stage3D.", + "slug": "gpufeaturestatusflash_stage3d", + "url": "https://electronjs.org/docs/api/gpu-feature-status#gpufeaturestatusflash_stage3d", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:flash_stage3d", + "api:gpufeaturestatusflash_stage3d", + "api:GPUFeatureStatus.flash_stage3d", + "doc:flash_stage3d", + "doc:gpufeaturestatusflash_stage3d", + "doc:GPUFeatureStatus.flash_stage3d" + ] + }, + { + "objectID": "api-gpu-feature-status#gpufeaturestatusflash_stage3d_baseline", + "name": "flash_stage3d_baseline", + "type": "String", + "collection": false, + "description": "Flash Stage3D Baseline profile.", + "required": true, + "apiType": "properties", + "fullSignature": "GPUFeatureStatus.flash_stage3d_baseline", + "tldr": "Flash Stage3D Baseline profile.", + "slug": "gpufeaturestatusflash_stage3d_baseline", + "url": "https://electronjs.org/docs/api/gpu-feature-status#gpufeaturestatusflash_stage3d_baseline", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:flash_stage3d_baseline", + "api:gpufeaturestatusflash_stage3d_baseline", + "api:GPUFeatureStatus.flash_stage3d_baseline", + "doc:flash_stage3d_baseline", + "doc:gpufeaturestatusflash_stage3d_baseline", + "doc:GPUFeatureStatus.flash_stage3d_baseline" + ] + }, + { + "objectID": "api-gpu-feature-status#gpufeaturestatusgpu_compositing", + "name": "gpu_compositing", + "type": "String", + "collection": false, + "description": "Compositing.", + "required": true, + "apiType": "properties", + "fullSignature": "GPUFeatureStatus.gpu_compositing", + "tldr": "Compositing.", + "slug": "gpufeaturestatusgpu_compositing", + "url": "https://electronjs.org/docs/api/gpu-feature-status#gpufeaturestatusgpu_compositing", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:gpu_compositing", + "api:gpufeaturestatusgpu_compositing", + "api:GPUFeatureStatus.gpu_compositing", + "doc:gpu_compositing", + "doc:gpufeaturestatusgpu_compositing", + "doc:GPUFeatureStatus.gpu_compositing" + ] + }, + { + "objectID": "api-gpu-feature-status#gpufeaturestatusmultiple_raster_threads", + "name": "multiple_raster_threads", + "type": "String", + "collection": false, + "description": "Multiple Raster Threads.", + "required": true, + "apiType": "properties", + "fullSignature": "GPUFeatureStatus.multiple_raster_threads", + "tldr": "Multiple Raster Threads.", + "slug": "gpufeaturestatusmultiple_raster_threads", + "url": "https://electronjs.org/docs/api/gpu-feature-status#gpufeaturestatusmultiple_raster_threads", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:multiple_raster_threads", + "api:gpufeaturestatusmultiple_raster_threads", + "api:GPUFeatureStatus.multiple_raster_threads", + "doc:multiple_raster_threads", + "doc:gpufeaturestatusmultiple_raster_threads", + "doc:GPUFeatureStatus.multiple_raster_threads" + ] + }, + { + "objectID": "api-gpu-feature-status#gpufeaturestatusnative_gpu_memory_buffers", + "name": "native_gpu_memory_buffers", + "type": "String", + "collection": false, + "description": "Native GpuMemoryBuffers.", + "required": true, + "apiType": "properties", + "fullSignature": "GPUFeatureStatus.native_gpu_memory_buffers", + "tldr": "Native GpuMemoryBuffers.", + "slug": "gpufeaturestatusnative_gpu_memory_buffers", + "url": "https://electronjs.org/docs/api/gpu-feature-status#gpufeaturestatusnative_gpu_memory_buffers", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:native_gpu_memory_buffers", + "api:gpufeaturestatusnative_gpu_memory_buffers", + "api:GPUFeatureStatus.native_gpu_memory_buffers", + "doc:native_gpu_memory_buffers", + "doc:gpufeaturestatusnative_gpu_memory_buffers", + "doc:GPUFeatureStatus.native_gpu_memory_buffers" + ] + }, + { + "objectID": "api-gpu-feature-status#gpufeaturestatusrasterization", + "name": "rasterization", + "type": "String", + "collection": false, + "description": "Rasterization.", + "required": true, + "apiType": "properties", + "fullSignature": "GPUFeatureStatus.rasterization", + "tldr": "Rasterization.", + "slug": "gpufeaturestatusrasterization", + "url": "https://electronjs.org/docs/api/gpu-feature-status#gpufeaturestatusrasterization", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:rasterization", + "api:gpufeaturestatusrasterization", + "api:GPUFeatureStatus.rasterization", + "doc:rasterization", + "doc:gpufeaturestatusrasterization", + "doc:GPUFeatureStatus.rasterization" + ] + }, + { + "objectID": "api-gpu-feature-status#gpufeaturestatusvideo_decode", + "name": "video_decode", + "type": "String", + "collection": false, + "description": "Video Decode.", + "required": true, + "apiType": "properties", + "fullSignature": "GPUFeatureStatus.video_decode", + "tldr": "Video Decode.", + "slug": "gpufeaturestatusvideo_decode", + "url": "https://electronjs.org/docs/api/gpu-feature-status#gpufeaturestatusvideo_decode", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:video_decode", + "api:gpufeaturestatusvideo_decode", + "api:GPUFeatureStatus.video_decode", + "doc:video_decode", + "doc:gpufeaturestatusvideo_decode", + "doc:GPUFeatureStatus.video_decode" + ] + }, + { + "objectID": "api-gpu-feature-status#gpufeaturestatusvideo_encode", + "name": "video_encode", + "type": "String", + "collection": false, + "description": "Video Encode.", + "required": true, + "apiType": "properties", + "fullSignature": "GPUFeatureStatus.video_encode", + "tldr": "Video Encode.", + "slug": "gpufeaturestatusvideo_encode", + "url": "https://electronjs.org/docs/api/gpu-feature-status#gpufeaturestatusvideo_encode", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:video_encode", + "api:gpufeaturestatusvideo_encode", + "api:GPUFeatureStatus.video_encode", + "doc:video_encode", + "doc:gpufeaturestatusvideo_encode", + "doc:GPUFeatureStatus.video_encode" + ] + }, + { + "objectID": "api-gpu-feature-status#gpufeaturestatusvpx_decode", + "name": "vpx_decode", + "type": "String", + "collection": false, + "description": "VPx Video Decode.", + "required": true, + "apiType": "properties", + "fullSignature": "GPUFeatureStatus.vpx_decode", + "tldr": "VPx Video Decode.", + "slug": "gpufeaturestatusvpx_decode", + "url": "https://electronjs.org/docs/api/gpu-feature-status#gpufeaturestatusvpx_decode", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:vpx_decode", + "api:gpufeaturestatusvpx_decode", + "api:GPUFeatureStatus.vpx_decode", + "doc:vpx_decode", + "doc:gpufeaturestatusvpx_decode", + "doc:GPUFeatureStatus.vpx_decode" + ] + }, + { + "objectID": "api-gpu-feature-status#gpufeaturestatuswebgl", + "name": "webgl", + "type": "String", + "collection": false, + "description": "WebGL.", + "required": true, + "apiType": "properties", + "fullSignature": "GPUFeatureStatus.webgl", + "tldr": "WebGL.", + "slug": "gpufeaturestatuswebgl", + "url": "https://electronjs.org/docs/api/gpu-feature-status#gpufeaturestatuswebgl", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:webgl", + "api:gpufeaturestatuswebgl", + "api:GPUFeatureStatus.webgl", + "doc:webgl", + "doc:gpufeaturestatuswebgl", + "doc:GPUFeatureStatus.webgl" + ] + }, + { + "objectID": "api-gpu-feature-status#gpufeaturestatuswebgl2", + "name": "webgl2", + "type": "String", + "collection": false, + "description": "WebGL2.", + "required": true, + "apiType": "properties", + "fullSignature": "GPUFeatureStatus.webgl2", + "tldr": "WebGL2.", + "slug": "gpufeaturestatuswebgl2", + "url": "https://electronjs.org/docs/api/gpu-feature-status#gpufeaturestatuswebgl2", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:webgl2", + "api:gpufeaturestatuswebgl2", + "api:GPUFeatureStatus.webgl2", + "doc:webgl2", + "doc:gpufeaturestatuswebgl2", + "doc:GPUFeatureStatus.webgl2" + ] + }, + { + "objectID": "api-in-app-purchase#inapppurchasepurchaseproduct", + "name": "purchaseProduct", + "signature": "(productID, quantity, callback)", + "description": "You should listen for the transactions-updated event as soon as possible and certainly before you call purchaseProduct.", + "parameters": [ + { + "name": "productID", + "type": "String", + "collection": false, + "description": "The identifiers of the product to purchase. (The identifier of `com.example.app.product1` is `product1`).", + "required": true + }, + { + "name": "quantity", + "type": "Integer", + "collection": false, + "description": "The number of items the user wants to purchase.", + "required": false + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "description": "The callback called when the payment is added to the PaymentQueue.", + "required": false, + "parameters": [ + { + "name": "isProductValid", + "type": "Boolean", + "collection": false, + "description": "Determine if the product is valid and added to the payment queue.", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "inAppPurchase.purchaseProduct", + "tldr": "You should listen for the transactions-updated event as soon as possible and certainly before you call purchaseProduct.", + "slug": "inapppurchasepurchaseproduct", + "url": "https://electronjs.org/docs/api/in-app-purchase#inapppurchasepurchaseproduct", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:purchaseProduct", + "api:inapppurchasepurchaseproduct", + "api:inAppPurchase.purchaseProduct", + "doc:purchaseProduct", + "doc:inapppurchasepurchaseproduct", + "doc:inAppPurchase.purchaseProduct" + ] + }, + { + "objectID": "api-in-app-purchase#inapppurchasegetproducts", + "name": "getProducts", + "signature": "(productIDs, callback)", + "description": "Retrieves the product descriptions.", + "parameters": [ + { + "name": "productIDs", + "type": "String", + "collection": true, + "description": "The identifiers of the products to get.", + "required": true + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "description": "The callback called with the products or an empty array if the products don't exist.", + "required": true, + "parameters": [ + { + "name": "products", + "type": "Product", + "collection": true, + "description": "Array of objects", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "inAppPurchase.getProducts", + "tldr": "Retrieves the product descriptions.", + "slug": "inapppurchasegetproducts", + "url": "https://electronjs.org/docs/api/in-app-purchase#inapppurchasegetproducts", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getProducts", + "api:inapppurchasegetproducts", + "api:inAppPurchase.getProducts", + "doc:getProducts", + "doc:inapppurchasegetproducts", + "doc:inAppPurchase.getProducts" + ] + }, + { + "objectID": "api-in-app-purchase#inapppurchasecanmakepayments", + "name": "canMakePayments", + "signature": "()", + "returns": { + "type": "Boolean", + "collection": false, + "description": ", whether a user can make a payment." + }, + "apiType": "methods", + "fullSignature": "inAppPurchase.canMakePayments", + "tldr": "Returns , whether a user can make a payment.", + "slug": "inapppurchasecanmakepayments", + "url": "https://electronjs.org/docs/api/in-app-purchase#inapppurchasecanmakepayments", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:canMakePayments", + "api:inapppurchasecanmakepayments", + "api:inAppPurchase.canMakePayments", + "doc:canMakePayments", + "doc:inapppurchasecanmakepayments", + "doc:inAppPurchase.canMakePayments" + ] + }, + { + "objectID": "api-in-app-purchase#inapppurchasegetreceipturl", + "name": "getReceiptURL", + "signature": "()", + "returns": { + "type": "String", + "collection": false, + "description": ", the path to the receipt." + }, + "apiType": "methods", + "fullSignature": "inAppPurchase.getReceiptURL", + "tldr": "Returns , the path to the receipt.", + "slug": "inapppurchasegetreceipturl", + "url": "https://electronjs.org/docs/api/in-app-purchase#inapppurchasegetreceipturl", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getReceiptURL", + "api:inapppurchasegetreceipturl", + "api:inAppPurchase.getReceiptURL", + "doc:getReceiptURL", + "doc:inapppurchasegetreceipturl", + "doc:inAppPurchase.getReceiptURL" + ] + }, + { + "objectID": "api-in-app-purchase#inapppurchasefinishalltransactions", + "name": "finishAllTransactions", + "signature": "()", + "description": "Completes all pending transactions.", + "apiType": "methods", + "fullSignature": "inAppPurchase.finishAllTransactions", + "tldr": "Completes all pending transactions.", + "slug": "inapppurchasefinishalltransactions", + "url": "https://electronjs.org/docs/api/in-app-purchase#inapppurchasefinishalltransactions", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:finishAllTransactions", + "api:inapppurchasefinishalltransactions", + "api:inAppPurchase.finishAllTransactions", + "doc:finishAllTransactions", + "doc:inapppurchasefinishalltransactions", + "doc:inAppPurchase.finishAllTransactions" + ] + }, + { + "objectID": "api-in-app-purchase#inapppurchasefinishtransactionbydate", + "name": "finishTransactionByDate", + "signature": "(date)", + "description": "Completes the pending transactions corresponding to the date.", + "parameters": [ + { + "name": "date", + "type": "String", + "collection": false, + "description": "The ISO formatted date of the transaction to finish.", + "required": true + } + ], + "apiType": "methods", + "fullSignature": "inAppPurchase.finishTransactionByDate", + "tldr": "Completes the pending transactions corresponding to the date.", + "slug": "inapppurchasefinishtransactionbydate", + "url": "https://electronjs.org/docs/api/in-app-purchase#inapppurchasefinishtransactionbydate", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:finishTransactionByDate", + "api:inapppurchasefinishtransactionbydate", + "api:inAppPurchase.finishTransactionByDate", + "doc:finishTransactionByDate", + "doc:inapppurchasefinishtransactionbydate", + "doc:inAppPurchase.finishTransactionByDate" + ] + }, { "objectID": "api-in-app-purchase#event-transactions-updated", "name": "transactions-updated", @@ -7391,25 +15098,158 @@ "name": "transactions", "type": "Transaction", "collection": true, - "description": "Array of transactions.", + "description": "Array of objects.", "required": true } ], "apiType": "event", "fullSignature": "inAppPurchase.on('transactions-updated')", "url": "https://electronjs.org/docs/api/in-app-purchase#event-transactions-updated", + "slug": "inapppurchaseontransactions-updated", "tldr": "Emitted when one or more transactions have been updated.", "keyValuePairs": [ "is:doc", "is:api", "api:transactions-updated", - "api:undefined", + "api:inapppurchaseontransactions-updated", "api:inAppPurchase.on('transactions-updated')", "doc:transactions-updated", - "doc:undefined", + "doc:inapppurchaseontransactions-updated", "doc:inAppPurchase.on('transactions-updated')" ] }, + { + "objectID": "api-incoming-message#incomingmessagestatuscode", + "name": "statusCode", + "description": "An Integer indicating the HTTP response status code.", + "type": "Integer", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "IncomingMessage.statusCode", + "tldr": "An Integer indicating the HTTP response status code.", + "slug": "incomingmessagestatuscode", + "url": "https://electronjs.org/docs/api/incoming-message#incomingmessagestatuscode", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:statusCode", + "api:incomingmessagestatuscode", + "api:IncomingMessage.statusCode", + "doc:statusCode", + "doc:incomingmessagestatuscode", + "doc:IncomingMessage.statusCode" + ] + }, + { + "objectID": "api-incoming-message#incomingmessagestatusmessage", + "name": "statusMessage", + "description": "A String representing the HTTP status message.", + "type": "String", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "IncomingMessage.statusMessage", + "tldr": "A String representing the HTTP status message.", + "slug": "incomingmessagestatusmessage", + "url": "https://electronjs.org/docs/api/incoming-message#incomingmessagestatusmessage", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:statusMessage", + "api:incomingmessagestatusmessage", + "api:IncomingMessage.statusMessage", + "doc:statusMessage", + "doc:incomingmessagestatusmessage", + "doc:IncomingMessage.statusMessage" + ] + }, + { + "objectID": "api-incoming-message#incomingmessageheaders", + "name": "headers", + "description": "An Object representing the response HTTP headers. The headers object is formatted as follows:", + "type": "Object", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "IncomingMessage.headers", + "tldr": "An Object representing the response HTTP headers.", + "slug": "incomingmessageheaders", + "url": "https://electronjs.org/docs/api/incoming-message#incomingmessageheaders", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:headers", + "api:incomingmessageheaders", + "api:IncomingMessage.headers", + "doc:headers", + "doc:incomingmessageheaders", + "doc:IncomingMessage.headers" + ] + }, + { + "objectID": "api-incoming-message#incomingmessagehttpversion", + "name": "httpVersion", + "description": "A String indicating the HTTP protocol version number. Typical values are '1.0' or '1.1'. Additionally httpVersionMajor and httpVersionMinor are two Integer-valued readable properties that return respectively the HTTP major and minor version numbers.", + "type": "String", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "IncomingMessage.httpVersion", + "tldr": "A String indicating the HTTP protocol version number.", + "slug": "incomingmessagehttpversion", + "url": "https://electronjs.org/docs/api/incoming-message#incomingmessagehttpversion", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:httpVersion", + "api:incomingmessagehttpversion", + "api:IncomingMessage.httpVersion", + "doc:httpVersion", + "doc:incomingmessagehttpversion", + "doc:IncomingMessage.httpVersion" + ] + }, + { + "objectID": "api-incoming-message#incomingmessagehttpversionmajor", + "name": "httpVersionMajor", + "description": "An Integer indicating the HTTP protocol major version number.", + "type": "Integer", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "IncomingMessage.httpVersionMajor", + "tldr": "An Integer indicating the HTTP protocol major version number.", + "slug": "incomingmessagehttpversionmajor", + "url": "https://electronjs.org/docs/api/incoming-message#incomingmessagehttpversionmajor", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:httpVersionMajor", + "api:incomingmessagehttpversionmajor", + "api:IncomingMessage.httpVersionMajor", + "doc:httpVersionMajor", + "doc:incomingmessagehttpversionmajor", + "doc:IncomingMessage.httpVersionMajor" + ] + }, + { + "objectID": "api-incoming-message#incomingmessagehttpversionminor", + "name": "httpVersionMinor", + "description": "An Integer indicating the HTTP protocol minor version number.", + "type": "Integer", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "IncomingMessage.httpVersionMinor", + "tldr": "An Integer indicating the HTTP protocol minor version number.", + "slug": "incomingmessagehttpversionminor", + "url": "https://electronjs.org/docs/api/incoming-message#incomingmessagehttpversionminor", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:httpVersionMinor", + "api:incomingmessagehttpversionminor", + "api:IncomingMessage.httpVersionMinor", + "doc:httpVersionMinor", + "doc:incomingmessagehttpversionminor", + "doc:IncomingMessage.httpVersionMinor" + ] + }, { "objectID": "api-incoming-message#event-data", "name": "data", @@ -7426,15 +15266,16 @@ "apiType": "event", "fullSignature": "response.on('data')", "url": "https://electronjs.org/docs/api/incoming-message#event-data", + "slug": "responseondata", "tldr": "The data event is the usual method of transferring response data into applicative code.", "keyValuePairs": [ "is:doc", "is:api", "api:data", - "api:undefined", + "api:responseondata", "api:response.on('data')", "doc:data", - "doc:undefined", + "doc:responseondata", "doc:response.on('data')" ] }, @@ -7445,15 +15286,16 @@ "apiType": "event", "fullSignature": "response.on('end')", "url": "https://electronjs.org/docs/api/incoming-message#event-end", + "slug": "responseonend", "tldr": "Indicates that response body has ended.", "keyValuePairs": [ "is:doc", "is:api", "api:end", - "api:undefined", + "api:responseonend", "api:response.on('end')", "doc:end", - "doc:undefined", + "doc:responseonend", "doc:response.on('end')" ] }, @@ -7464,15 +15306,16 @@ "apiType": "event", "fullSignature": "response.on('aborted')", "url": "https://electronjs.org/docs/api/incoming-message#event-aborted", + "slug": "responseonaborted", "tldr": "Emitted when a request has been canceled during an ongoing HTTP transaction.", "keyValuePairs": [ "is:doc", "is:api", "api:aborted", - "api:undefined", + "api:responseonaborted", "api:response.on('aborted')", "doc:aborted", - "doc:undefined", + "doc:responseonaborted", "doc:response.on('aborted')" ] }, @@ -7483,22 +15326,1072 @@ "apiType": "event", "fullSignature": "response.on('error')", "url": "https://electronjs.org/docs/api/incoming-message#event-error", + "slug": "responseonerror", "tldr": "error Error - Typically holds an error string identifying failure root cause.", "keyValuePairs": [ "is:doc", "is:api", "api:error", - "api:undefined", + "api:responseonerror", "api:response.on('error')", "doc:error", - "doc:undefined", + "doc:responseonerror", "doc:response.on('error')" ] }, + { + "objectID": "api-io-counters#iocountersreadoperationcount", + "name": "readOperationCount", + "type": "Number", + "collection": false, + "description": "The number of I/O read operations.", + "required": true, + "apiType": "properties", + "fullSignature": "IOCounters.readOperationCount", + "tldr": "The number of I/O read operations.", + "slug": "iocountersreadoperationcount", + "url": "https://electronjs.org/docs/api/io-counters#iocountersreadoperationcount", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:readOperationCount", + "api:iocountersreadoperationcount", + "api:IOCounters.readOperationCount", + "doc:readOperationCount", + "doc:iocountersreadoperationcount", + "doc:IOCounters.readOperationCount" + ] + }, + { + "objectID": "api-io-counters#iocounterswriteoperationcount", + "name": "writeOperationCount", + "type": "Number", + "collection": false, + "description": "The number of I/O write operations.", + "required": true, + "apiType": "properties", + "fullSignature": "IOCounters.writeOperationCount", + "tldr": "The number of I/O write operations.", + "slug": "iocounterswriteoperationcount", + "url": "https://electronjs.org/docs/api/io-counters#iocounterswriteoperationcount", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:writeOperationCount", + "api:iocounterswriteoperationcount", + "api:IOCounters.writeOperationCount", + "doc:writeOperationCount", + "doc:iocounterswriteoperationcount", + "doc:IOCounters.writeOperationCount" + ] + }, + { + "objectID": "api-io-counters#iocountersotheroperationcount", + "name": "otherOperationCount", + "type": "Number", + "collection": false, + "description": "Then number of I/O other operations.", + "required": true, + "apiType": "properties", + "fullSignature": "IOCounters.otherOperationCount", + "tldr": "Then number of I/O other operations.", + "slug": "iocountersotheroperationcount", + "url": "https://electronjs.org/docs/api/io-counters#iocountersotheroperationcount", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:otherOperationCount", + "api:iocountersotheroperationcount", + "api:IOCounters.otherOperationCount", + "doc:otherOperationCount", + "doc:iocountersotheroperationcount", + "doc:IOCounters.otherOperationCount" + ] + }, + { + "objectID": "api-io-counters#iocountersreadtransfercount", + "name": "readTransferCount", + "type": "Number", + "collection": false, + "description": "The number of I/O read transfers.", + "required": true, + "apiType": "properties", + "fullSignature": "IOCounters.readTransferCount", + "tldr": "The number of I/O read transfers.", + "slug": "iocountersreadtransfercount", + "url": "https://electronjs.org/docs/api/io-counters#iocountersreadtransfercount", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:readTransferCount", + "api:iocountersreadtransfercount", + "api:IOCounters.readTransferCount", + "doc:readTransferCount", + "doc:iocountersreadtransfercount", + "doc:IOCounters.readTransferCount" + ] + }, + { + "objectID": "api-io-counters#iocounterswritetransfercount", + "name": "writeTransferCount", + "type": "Number", + "collection": false, + "description": "The number of I/O write transfers.", + "required": true, + "apiType": "properties", + "fullSignature": "IOCounters.writeTransferCount", + "tldr": "The number of I/O write transfers.", + "slug": "iocounterswritetransfercount", + "url": "https://electronjs.org/docs/api/io-counters#iocounterswritetransfercount", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:writeTransferCount", + "api:iocounterswritetransfercount", + "api:IOCounters.writeTransferCount", + "doc:writeTransferCount", + "doc:iocounterswritetransfercount", + "doc:IOCounters.writeTransferCount" + ] + }, + { + "objectID": "api-io-counters#iocountersothertransfercount", + "name": "otherTransferCount", + "type": "Number", + "collection": false, + "description": "Then number of I/O other transfers.", + "required": true, + "apiType": "properties", + "fullSignature": "IOCounters.otherTransferCount", + "tldr": "Then number of I/O other transfers.", + "slug": "iocountersothertransfercount", + "url": "https://electronjs.org/docs/api/io-counters#iocountersothertransfercount", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:otherTransferCount", + "api:iocountersothertransfercount", + "api:IOCounters.otherTransferCount", + "doc:otherTransferCount", + "doc:iocountersothertransfercount", + "doc:IOCounters.otherTransferCount" + ] + }, + { + "objectID": "api-ipc-main#ipcmainon", + "name": "on", + "signature": "(channel, listener)", + "description": "Listens to channel, when a new message arrives listener would be called with listener(event, args...).", + "parameters": [ + { + "name": "channel", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "listener", + "type": "Function", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "ipcMain.on", + "tldr": "Listens to channel, when a new message arrives listener would be called with listener(event, args...).", + "slug": "ipcmainon", + "url": "https://electronjs.org/docs/api/ipc-main#ipcmainon", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:on", + "api:ipcmainon", + "api:ipcMain.on", + "doc:on", + "doc:ipcmainon", + "doc:ipcMain.on" + ] + }, + { + "objectID": "api-ipc-main#ipcmainonce", + "name": "once", + "signature": "(channel, listener)", + "description": "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.", + "parameters": [ + { + "name": "channel", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "listener", + "type": "Function", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "ipcMain.once", + "tldr": "Adds a one time listener function for the event.", + "slug": "ipcmainonce", + "url": "https://electronjs.org/docs/api/ipc-main#ipcmainonce", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:once", + "api:ipcmainonce", + "api:ipcMain.once", + "doc:once", + "doc:ipcmainonce", + "doc:ipcMain.once" + ] + }, + { + "objectID": "api-ipc-main#ipcmainremovelistener", + "name": "removeListener", + "signature": "(channel, listener)", + "description": "Removes the specified listener from the listener array for the specified channel.", + "parameters": [ + { + "name": "channel", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "listener", + "type": "Function", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "ipcMain.removeListener", + "tldr": "Removes the specified listener from the listener array for the specified channel.", + "slug": "ipcmainremovelistener", + "url": "https://electronjs.org/docs/api/ipc-main#ipcmainremovelistener", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:removeListener", + "api:ipcmainremovelistener", + "api:ipcMain.removeListener", + "doc:removeListener", + "doc:ipcmainremovelistener", + "doc:ipcMain.removeListener" + ] + }, + { + "objectID": "api-ipc-main#ipcmainremovealllisteners", + "name": "removeAllListeners", + "signature": "([channel])", + "description": "Removes listeners of the specified channel.", + "parameters": [ + { + "name": "channel", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "ipcMain.removeAllListeners", + "tldr": "Removes listeners of the specified channel.", + "slug": "ipcmainremovealllisteners", + "url": "https://electronjs.org/docs/api/ipc-main#ipcmainremovealllisteners", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:removeAllListeners", + "api:ipcmainremovealllisteners", + "api:ipcMain.removeAllListeners", + "doc:removeAllListeners", + "doc:ipcmainremovealllisteners", + "doc:ipcMain.removeAllListeners" + ] + }, + { + "objectID": "api-ipc-renderer#ipcrendereron", + "name": "on", + "signature": "(channel, listener)", + "description": "Listens to channel, when a new message arrives listener would be called with listener(event, args...).", + "parameters": [ + { + "name": "channel", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "listener", + "type": "Function", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "ipcRenderer.on", + "tldr": "Listens to channel, when a new message arrives listener would be called with listener(event, args...).", + "slug": "ipcrendereron", + "url": "https://electronjs.org/docs/api/ipc-renderer#ipcrendereron", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:on", + "api:ipcrendereron", + "api:ipcRenderer.on", + "doc:on", + "doc:ipcrendereron", + "doc:ipcRenderer.on" + ] + }, + { + "objectID": "api-ipc-renderer#ipcrendereronce", + "name": "once", + "signature": "(channel, listener)", + "description": "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.", + "parameters": [ + { + "name": "channel", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "listener", + "type": "Function", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "ipcRenderer.once", + "tldr": "Adds a one time listener function for the event.", + "slug": "ipcrendereronce", + "url": "https://electronjs.org/docs/api/ipc-renderer#ipcrendereronce", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:once", + "api:ipcrendereronce", + "api:ipcRenderer.once", + "doc:once", + "doc:ipcrendereronce", + "doc:ipcRenderer.once" + ] + }, + { + "objectID": "api-ipc-renderer#ipcrendererremovelistener", + "name": "removeListener", + "signature": "(channel, listener)", + "description": "Removes the specified listener from the listener array for the specified channel.", + "parameters": [ + { + "name": "channel", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "listener", + "type": "Function", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "ipcRenderer.removeListener", + "tldr": "Removes the specified listener from the listener array for the specified channel.", + "slug": "ipcrendererremovelistener", + "url": "https://electronjs.org/docs/api/ipc-renderer#ipcrendererremovelistener", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:removeListener", + "api:ipcrendererremovelistener", + "api:ipcRenderer.removeListener", + "doc:removeListener", + "doc:ipcrendererremovelistener", + "doc:ipcRenderer.removeListener" + ] + }, + { + "objectID": "api-ipc-renderer#ipcrendererremovealllisteners", + "name": "removeAllListeners", + "signature": "(channel)", + "description": "Removes all listeners, or those of the specified channel.", + "parameters": [ + { + "name": "channel", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "ipcRenderer.removeAllListeners", + "tldr": "Removes all listeners, or those of the specified channel.", + "slug": "ipcrendererremovealllisteners", + "url": "https://electronjs.org/docs/api/ipc-renderer#ipcrendererremovealllisteners", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:removeAllListeners", + "api:ipcrendererremovealllisteners", + "api:ipcRenderer.removeAllListeners", + "doc:removeAllListeners", + "doc:ipcrendererremovealllisteners", + "doc:ipcRenderer.removeAllListeners" + ] + }, + { + "objectID": "api-ipc-renderer#ipcrenderersend", + "name": "send", + "signature": "(channel[, arg1][, arg2][, ...])", + "description": "Send a message to the main process asynchronously via channel, you can also send arbitrary arguments. Arguments will be serialized in JSON internally and hence no functions or prototype chain will be included. The main process handles it by listening for channel with ipcMain module.", + "parameters": [ + { + "name": "channel", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "...args", + "type": "any", + "collection": true, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "ipcRenderer.send", + "tldr": "Send a message to the main process asynchronously via channel, you can also send arbitrary arguments.", + "slug": "ipcrenderersend", + "url": "https://electronjs.org/docs/api/ipc-renderer#ipcrenderersend", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:send", + "api:ipcrenderersend", + "api:ipcRenderer.send", + "doc:send", + "doc:ipcrenderersend", + "doc:ipcRenderer.send" + ] + }, + { + "objectID": "api-ipc-renderer#ipcrenderersendsync", + "name": "sendSync", + "signature": "(channel[, arg1][, arg2][, ...])", + "description": "Send a message to the main process synchronously via channel, you can also send arbitrary arguments. Arguments will be serialized in JSON internally and hence no functions or prototype chain will be included. The main process handles it by listening for channel with ipcMain module, and replies by setting event.returnValue. Note: Sending a synchronous message will block the whole renderer process, unless you know what you are doing you should never use it.", + "parameters": [ + { + "name": "channel", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "...args", + "type": "any", + "collection": true, + "required": true + } + ], + "returns": { + "type": "any", + "collection": false, + "description": "The value sent back by the ipcMain handler." + }, + "apiType": "methods", + "fullSignature": "ipcRenderer.sendSync", + "tldr": "Send a message to the main process synchronously via channel, you can also send arbitrary arguments.", + "slug": "ipcrenderersendsync", + "url": "https://electronjs.org/docs/api/ipc-renderer#ipcrenderersendsync", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:sendSync", + "api:ipcrenderersendsync", + "api:ipcRenderer.sendSync", + "doc:sendSync", + "doc:ipcrenderersendsync", + "doc:ipcRenderer.sendSync" + ] + }, + { + "objectID": "api-ipc-renderer#ipcrenderersendto", + "name": "sendTo", + "signature": "(webContentsId, channel, [, arg1][, arg2][, ...])", + "description": "Sends a message to a window with webContentsId via channel.", + "parameters": [ + { + "name": "webContentsId", + "type": "Number", + "collection": false, + "required": true + }, + { + "name": "channel", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "...args", + "type": "any", + "collection": true, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "ipcRenderer.sendTo", + "tldr": "Sends a message to a window with webContentsId via channel.", + "slug": "ipcrenderersendto", + "url": "https://electronjs.org/docs/api/ipc-renderer#ipcrenderersendto", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:sendTo", + "api:ipcrenderersendto", + "api:ipcRenderer.sendTo", + "doc:sendTo", + "doc:ipcrenderersendto", + "doc:ipcRenderer.sendTo" + ] + }, + { + "objectID": "api-ipc-renderer#ipcrenderersendtohost", + "name": "sendToHost", + "signature": "(channel[, arg1][, arg2][, ...])", + "description": "Like ipcRenderer.send but the event will be sent to the element in the host page instead of the main process.", + "parameters": [ + { + "name": "channel", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "...args", + "type": "any", + "collection": true, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "ipcRenderer.sendToHost", + "tldr": "Like ipcRenderer.send but the event will be sent to the element in the host page instead of the main process.", + "slug": "ipcrenderersendtohost", + "url": "https://electronjs.org/docs/api/ipc-renderer#ipcrenderersendtohost", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:sendToHost", + "api:ipcrenderersendtohost", + "api:ipcRenderer.sendToHost", + "doc:sendToHost", + "doc:ipcrenderersendtohost", + "doc:ipcRenderer.sendToHost" + ] + }, + { + "objectID": "api-jump-list-category#jumplistcategorytype", + "name": "type", + "type": "String", + "collection": false, + "description": "One of the following:", + "required": false, + "possibleValues": [ + { + "value": "tasks", + "description": "Items in this category will be placed into the standard Tasks category. There can be only one such category, and it will always be displayed at the bottom of the Jump List." + }, + { + "value": "frequent", + "description": "Displays a list of files frequently opened by the app, the name of the category and its items are set by Windows." + }, + { + "value": "recent", + "description": "Displays a list of files recently opened by the app, the name of the category and its items are set by Windows. Items may be added to this category indirectly using app.addRecentDocument(path)." + }, + { + "value": "custom", + "description": "Displays tasks or file links, name must be set by the app." + } + ], + "apiType": "properties", + "fullSignature": "JumpListCategory.type", + "tldr": "One of the following:.", + "slug": "jumplistcategorytype", + "url": "https://electronjs.org/docs/api/jump-list-category#jumplistcategorytype", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:type", + "api:jumplistcategorytype", + "api:JumpListCategory.type", + "doc:type", + "doc:jumplistcategorytype", + "doc:JumpListCategory.type" + ] + }, + { + "objectID": "api-jump-list-category#jumplistcategoryname", + "name": "name", + "type": "String", + "collection": false, + "description": "Must be set if type is custom, otherwise it should be omitted.", + "required": false, + "apiType": "properties", + "fullSignature": "JumpListCategory.name", + "tldr": "Must be set if type is custom, otherwise it should be omitted.", + "slug": "jumplistcategoryname", + "url": "https://electronjs.org/docs/api/jump-list-category#jumplistcategoryname", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:name", + "api:jumplistcategoryname", + "api:JumpListCategory.name", + "doc:name", + "doc:jumplistcategoryname", + "doc:JumpListCategory.name" + ] + }, + { + "objectID": "api-jump-list-category#jumplistcategoryitems", + "name": "items", + "type": "JumpListItem", + "collection": true, + "description": "Array of objects if type is tasks or custom, otherwise it should be omitted.", + "required": false, + "apiType": "properties", + "fullSignature": "JumpListCategory.items", + "tldr": "Array of objects if type is tasks or custom, otherwise it should be omitted.", + "slug": "jumplistcategoryitems", + "url": "https://electronjs.org/docs/api/jump-list-category#jumplistcategoryitems", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:items", + "api:jumplistcategoryitems", + "api:JumpListCategory.items", + "doc:items", + "doc:jumplistcategoryitems", + "doc:JumpListCategory.items" + ] + }, + { + "objectID": "api-jump-list-item#jumplistitemtype", + "name": "type", + "type": "String", + "collection": false, + "description": "One of the following:", + "required": false, + "possibleValues": [ + { + "value": "task", + "description": "A task will launch an app with specific arguments." + }, + { + "value": "separator", + "description": "Can be used to separate items in the standard Tasks category." + }, + { + "value": "file", + "description": "A file link will open a file using the app that created the Jump List, for this to work the app must be registered as a handler for the file type (though it doesn't have to be the default handler)." + } + ], + "apiType": "properties", + "fullSignature": "JumpListItem.type", + "tldr": "One of the following:.", + "slug": "jumplistitemtype", + "url": "https://electronjs.org/docs/api/jump-list-item#jumplistitemtype", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:type", + "api:jumplistitemtype", + "api:JumpListItem.type", + "doc:type", + "doc:jumplistitemtype", + "doc:JumpListItem.type" + ] + }, + { + "objectID": "api-jump-list-item#jumplistitempath", + "name": "path", + "type": "String", + "collection": false, + "description": "Path of the file to open, should only be set if type is file.", + "required": false, + "apiType": "properties", + "fullSignature": "JumpListItem.path", + "tldr": "Path of the file to open, should only be set if type is file.", + "slug": "jumplistitempath", + "url": "https://electronjs.org/docs/api/jump-list-item#jumplistitempath", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:path", + "api:jumplistitempath", + "api:JumpListItem.path", + "doc:path", + "doc:jumplistitempath", + "doc:JumpListItem.path" + ] + }, + { + "objectID": "api-jump-list-item#jumplistitemprogram", + "name": "program", + "type": "String", + "collection": false, + "description": "Path of the program to execute, usually you should specify process.execPath which opens the current program. Should only be set if type is task.", + "required": false, + "apiType": "properties", + "fullSignature": "JumpListItem.program", + "tldr": "Path of the program to execute, usually you should specify process.execPath which opens the current program.", + "slug": "jumplistitemprogram", + "url": "https://electronjs.org/docs/api/jump-list-item#jumplistitemprogram", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:program", + "api:jumplistitemprogram", + "api:JumpListItem.program", + "doc:program", + "doc:jumplistitemprogram", + "doc:JumpListItem.program" + ] + }, + { + "objectID": "api-jump-list-item#jumplistitemargs", + "name": "args", + "type": "String", + "collection": false, + "description": "The command line arguments when program is executed. Should only be set if type is task.", + "required": false, + "apiType": "properties", + "fullSignature": "JumpListItem.args", + "tldr": "The command line arguments when program is executed.", + "slug": "jumplistitemargs", + "url": "https://electronjs.org/docs/api/jump-list-item#jumplistitemargs", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:args", + "api:jumplistitemargs", + "api:JumpListItem.args", + "doc:args", + "doc:jumplistitemargs", + "doc:JumpListItem.args" + ] + }, + { + "objectID": "api-jump-list-item#jumplistitemtitle", + "name": "title", + "type": "String", + "collection": false, + "description": "The text to be displayed for the item in the Jump List. Should only be set if type is task.", + "required": false, + "apiType": "properties", + "fullSignature": "JumpListItem.title", + "tldr": "The text to be displayed for the item in the Jump List.", + "slug": "jumplistitemtitle", + "url": "https://electronjs.org/docs/api/jump-list-item#jumplistitemtitle", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:title", + "api:jumplistitemtitle", + "api:JumpListItem.title", + "doc:title", + "doc:jumplistitemtitle", + "doc:JumpListItem.title" + ] + }, + { + "objectID": "api-jump-list-item#jumplistitemdescription", + "name": "description", + "type": "String", + "collection": false, + "description": "Description of the task (displayed in a tooltip). Should only be set if type is task.", + "required": false, + "apiType": "properties", + "fullSignature": "JumpListItem.description", + "tldr": "Description of the task (displayed in a tooltip).", + "slug": "jumplistitemdescription", + "url": "https://electronjs.org/docs/api/jump-list-item#jumplistitemdescription", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:description", + "api:jumplistitemdescription", + "api:JumpListItem.description", + "doc:description", + "doc:jumplistitemdescription", + "doc:JumpListItem.description" + ] + }, + { + "objectID": "api-jump-list-item#jumplistitemiconpath", + "name": "iconPath", + "type": "String", + "collection": false, + "description": "The absolute path to an icon to be displayed in a Jump List, which can be an arbitrary resource file that contains an icon (e.g. .ico, .exe, .dll). You can usually specify process.execPath to show the program icon.", + "required": false, + "apiType": "properties", + "fullSignature": "JumpListItem.iconPath", + "tldr": "The absolute path to an icon to be displayed in a Jump List, which can be an arbitrary resource file that contains an icon (e.g.", + "slug": "jumplistitemiconpath", + "url": "https://electronjs.org/docs/api/jump-list-item#jumplistitemiconpath", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:iconPath", + "api:jumplistitemiconpath", + "api:JumpListItem.iconPath", + "doc:iconPath", + "doc:jumplistitemiconpath", + "doc:JumpListItem.iconPath" + ] + }, + { + "objectID": "api-jump-list-item#jumplistitemiconindex", + "name": "iconIndex", + "type": "Number", + "collection": false, + "description": "The index of the icon in the resource file. If a resource file contains multiple icons this value can be used to specify the zero-based index of the icon that should be displayed for this task. If a resource file contains only one icon, this property should be set to zero.", + "required": false, + "apiType": "properties", + "fullSignature": "JumpListItem.iconIndex", + "tldr": "The index of the icon in the resource file.", + "slug": "jumplistitemiconindex", + "url": "https://electronjs.org/docs/api/jump-list-item#jumplistitemiconindex", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:iconIndex", + "api:jumplistitemiconindex", + "api:JumpListItem.iconIndex", + "doc:iconIndex", + "doc:jumplistitemiconindex", + "doc:JumpListItem.iconIndex" + ] + }, + { + "objectID": "api-memory-info#memoryinfopid", + "name": "pid", + "type": "Integer", + "collection": false, + "description": "Process id of the process.", + "required": true, + "apiType": "properties", + "fullSignature": "MemoryInfo.pid", + "tldr": "Process id of the process.", + "slug": "memoryinfopid", + "url": "https://electronjs.org/docs/api/memory-info#memoryinfopid", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:pid", + "api:memoryinfopid", + "api:MemoryInfo.pid", + "doc:pid", + "doc:memoryinfopid", + "doc:MemoryInfo.pid" + ] + }, + { + "objectID": "api-memory-info#memoryinfoworkingsetsize", + "name": "workingSetSize", + "type": "Integer", + "collection": false, + "description": "The amount of memory currently pinned to actual physical RAM.", + "required": true, + "apiType": "properties", + "fullSignature": "MemoryInfo.workingSetSize", + "tldr": "The amount of memory currently pinned to actual physical RAM.", + "slug": "memoryinfoworkingsetsize", + "url": "https://electronjs.org/docs/api/memory-info#memoryinfoworkingsetsize", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:workingSetSize", + "api:memoryinfoworkingsetsize", + "api:MemoryInfo.workingSetSize", + "doc:workingSetSize", + "doc:memoryinfoworkingsetsize", + "doc:MemoryInfo.workingSetSize" + ] + }, + { + "objectID": "api-memory-info#memoryinfopeakworkingsetsize", + "name": "peakWorkingSetSize", + "type": "Integer", + "collection": false, + "description": "The maximum amount of memory that has ever been pinned to actual physical RAM. On macOS its value will always be 0.", + "required": true, + "apiType": "properties", + "fullSignature": "MemoryInfo.peakWorkingSetSize", + "tldr": "The maximum amount of memory that has ever been pinned to actual physical RAM.", + "slug": "memoryinfopeakworkingsetsize", + "url": "https://electronjs.org/docs/api/memory-info#memoryinfopeakworkingsetsize", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:peakWorkingSetSize", + "api:memoryinfopeakworkingsetsize", + "api:MemoryInfo.peakWorkingSetSize", + "doc:peakWorkingSetSize", + "doc:memoryinfopeakworkingsetsize", + "doc:MemoryInfo.peakWorkingSetSize" + ] + }, + { + "objectID": "api-memory-info#memoryinfoprivatebytes", + "name": "privateBytes", + "type": "Integer", + "collection": false, + "description": "The amount of memory not shared by other processes, such as JS heap or HTML content.", + "required": true, + "apiType": "properties", + "fullSignature": "MemoryInfo.privateBytes", + "tldr": "The amount of memory not shared by other processes, such as JS heap or HTML content.", + "slug": "memoryinfoprivatebytes", + "url": "https://electronjs.org/docs/api/memory-info#memoryinfoprivatebytes", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:privateBytes", + "api:memoryinfoprivatebytes", + "api:MemoryInfo.privateBytes", + "doc:privateBytes", + "doc:memoryinfoprivatebytes", + "doc:MemoryInfo.privateBytes" + ] + }, + { + "objectID": "api-memory-info#memoryinfosharedbytes", + "name": "sharedBytes", + "type": "Integer", + "collection": false, + "description": "The amount of memory shared between processes, typically memory consumed by the Electron code itself", + "required": true, + "apiType": "properties", + "fullSignature": "MemoryInfo.sharedBytes", + "tldr": "The amount of memory shared between processes, typically memory consumed by the Electron code itself.", + "slug": "memoryinfosharedbytes", + "url": "https://electronjs.org/docs/api/memory-info#memoryinfosharedbytes", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:sharedBytes", + "api:memoryinfosharedbytes", + "api:MemoryInfo.sharedBytes", + "doc:sharedBytes", + "doc:memoryinfosharedbytes", + "doc:MemoryInfo.sharedBytes" + ] + }, + { + "objectID": "api-memory-usage-details#memoryusagedetailscount", + "name": "count", + "type": "Number", + "collection": false, + "description": "", + "required": true, + "apiType": "properties", + "fullSignature": "MemoryUsageDetails.count", + "tldr": null, + "slug": "memoryusagedetailscount", + "url": "https://electronjs.org/docs/api/memory-usage-details#memoryusagedetailscount", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:count", + "api:memoryusagedetailscount", + "api:MemoryUsageDetails.count", + "doc:count", + "doc:memoryusagedetailscount", + "doc:MemoryUsageDetails.count" + ] + }, + { + "objectID": "api-memory-usage-details#memoryusagedetailssize", + "name": "size", + "type": "Number", + "collection": false, + "description": "", + "required": true, + "apiType": "properties", + "fullSignature": "MemoryUsageDetails.size", + "tldr": null, + "slug": "memoryusagedetailssize", + "url": "https://electronjs.org/docs/api/memory-usage-details#memoryusagedetailssize", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:size", + "api:memoryusagedetailssize", + "api:MemoryUsageDetails.size", + "doc:size", + "doc:memoryusagedetailssize", + "doc:MemoryUsageDetails.size" + ] + }, + { + "objectID": "api-memory-usage-details#memoryusagedetailslivesize", + "name": "liveSize", + "type": "Number", + "collection": false, + "description": "", + "required": true, + "apiType": "properties", + "fullSignature": "MemoryUsageDetails.liveSize", + "tldr": null, + "slug": "memoryusagedetailslivesize", + "url": "https://electronjs.org/docs/api/memory-usage-details#memoryusagedetailslivesize", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:liveSize", + "api:memoryusagedetailslivesize", + "api:MemoryUsageDetails.liveSize", + "doc:liveSize", + "doc:memoryusagedetailslivesize", + "doc:MemoryUsageDetails.liveSize" + ] + }, + { + "objectID": "api-menu#menuitems", + "name": "items", + "description": "A MenuItem[] array containing the menu's items. Each Menu consists of multiple MenuItems and each MenuItem can have a submenu.", + "type": "MenuItem", + "collection": true, + "apiType": "instanceProperties", + "fullSignature": "Menu.items", + "tldr": "A MenuItem[] array containing the menu's items.", + "slug": "menuitems", + "url": "https://electronjs.org/docs/api/menu#menuitems", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:items", + "api:menuitems", + "api:Menu.items", + "doc:items", + "doc:menuitems", + "doc:Menu.items" + ] + }, { "objectID": "api-menu#menusetapplicationmenumenu", "name": "setApplicationMenu", - "description": "Sets menu as the application menu on macOS. On Windows and Linux, the menu will be set as each window's top menu. Passing null will remove the menu bar on Windows and Linux but has no effect on macOS. Note: This API has to be called after the ready event of app module.", + "signature": "(menu)", + "description": "Sets menu as the application menu on macOS. On Windows and Linux, the menu will be set as each window's top menu. Also on Windows and Linux, you can use a & in the top-level item name to indicate which letter should get a generated accelerator. For example, using &File for the file menu would result in a generated Alt-F accelerator that opens the associated menu. The indicated character in the button label gets an underline. The & character is not displayed on the button label. Passing null will suppress the default menu. On Windows and Linux, this has the additional effect of removing the menu bar from the window. Note: The default menu will be created automatically if the app does not set one. It contains standard items such as File, Edit, View, Window and Help.", "parameters": [ { "name": "menu", @@ -7535,6 +16428,7 @@ { "objectID": "api-menu#menugetapplicationmenu", "name": "getApplicationMenu", + "signature": "()", "description": "Note: The returned Menu instance doesn't support dynamic addition or removal of menu items. Instance properties can still be dynamically modified.", "returns": { "type": [ @@ -7569,10 +16463,11 @@ { "objectID": "api-menu#menusendactiontofirstresponderaction", "name": "sendActionToFirstResponder", + "signature": "(action)", "platforms": [ "macOS" ], - "description": "Sends the action to the first responder of application. This is used for emulating default macOS menu behaviors. Usually you would just use the role property of a MenuItem. See the macOS Cocoa Event Handling Guide for more information on macOS' native actions.", + "description": "Sends the action to the first responder of application. This is used for emulating default macOS menu behaviors. Usually you would use the role property of a MenuItem. See the macOS Cocoa Event Handling Guide for more information on macOS' native actions.", "parameters": [ { "name": "action", @@ -7600,11 +16495,21 @@ { "objectID": "api-menu#menubuildfromtemplatetemplate", "name": "buildFromTemplate", - "description": "Generally, the template is just an array of options for constructing a MenuItem. The usage can be referenced above. You can also attach other fields to the element of the template and they will become properties of the constructed menu items.", + "signature": "(template)", + "description": "Generally, the template is an array of options for constructing a MenuItem. The usage can be referenced above. You can also attach other fields to the element of the template and they will become properties of the constructed menu items.", "parameters": [ { "name": "template", - "type": "MenuItemConstructorOptions", + "type": [ + { + "typeName": "MenuItemConstructorOptions", + "collection": false + }, + { + "typeName": "MenuItem", + "collection": false + } + ], "collection": true, "required": true } @@ -7615,7 +16520,7 @@ }, "apiType": "staticMethod", "fullSignature": "Menu.buildFromTemplate(template)", - "tldr": "Generally, the template is just an array of options for constructing a MenuItem.", + "tldr": "Generally, the template is an array of options for constructing a MenuItem.", "slug": "menubuildfromtemplatetemplate", "url": "https://electronjs.org/docs/api/menu#menubuildfromtemplatetemplate", "keyValuePairs": [ @@ -7632,13 +16537,14 @@ { "objectID": "api-menu#menupopupoptions", "name": "popup", + "signature": "(options)", "description": "Pops up this menu as a context menu in the BrowserWindow.", "parameters": [ { "name": "options", "type": "Object", "collection": false, - "required": true, + "required": false, "properties": [ { "name": "window", @@ -7698,6 +16604,7 @@ { "objectID": "api-menu#menuclosepopupbrowserwindow", "name": "closePopup", + "signature": "([browserWindow])", "description": "Closes the context menu in the browserWindow.", "parameters": [ { @@ -7727,6 +16634,7 @@ { "objectID": "api-menu#menuappendmenuitem", "name": "append", + "signature": "(menuItem)", "description": "Appends the menuItem to the menu.", "parameters": [ { @@ -7755,6 +16663,7 @@ { "objectID": "api-menu#menugetmenuitembyidid", "name": "getMenuItemById", + "signature": "(id)", "parameters": [ { "name": "id", @@ -7787,6 +16696,7 @@ { "objectID": "api-menu#menuinsertpos-menuitem", "name": "insert", + "signature": "(pos, menuItem)", "description": "Inserts the menuItem to the pos position of the menu.", "parameters": [ { @@ -7833,15 +16743,16 @@ "apiType": "event", "fullSignature": "menu.on('menu-will-show')", "url": "https://electronjs.org/docs/api/menu#event-menu-will-show", + "slug": "menuonmenu-will-show", "tldr": "Emitted when menu.popup() is called.", "keyValuePairs": [ "is:doc", "is:api", "api:menu-will-show", - "api:undefined", + "api:menuonmenu-will-show", "api:menu.on('menu-will-show')", "doc:menu-will-show", - "doc:undefined", + "doc:menuonmenu-will-show", "doc:menu.on('menu-will-show')" ] }, @@ -7860,21 +16771,374 @@ "apiType": "event", "fullSignature": "menu.on('menu-will-close')", "url": "https://electronjs.org/docs/api/menu#event-menu-will-close", + "slug": "menuonmenu-will-close", "tldr": "Emitted when a popup is closed either manually or with menu.closePopup().", "keyValuePairs": [ "is:doc", "is:api", "api:menu-will-close", - "api:undefined", + "api:menuonmenu-will-close", "api:menu.on('menu-will-close')", "doc:menu-will-close", - "doc:undefined", + "doc:menuonmenu-will-close", "doc:menu.on('menu-will-close')" ] }, + { + "objectID": "api-menu-item#menuitemenabled", + "name": "enabled", + "description": "A Boolean indicating whether the item is enabled, this property can be dynamically changed.", + "type": "Boolean", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "MenuItem.enabled", + "tldr": "A Boolean indicating whether the item is enabled, this property can be dynamically changed.", + "slug": "menuitemenabled", + "url": "https://electronjs.org/docs/api/menu-item#menuitemenabled", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:enabled", + "api:menuitemenabled", + "api:MenuItem.enabled", + "doc:enabled", + "doc:menuitemenabled", + "doc:MenuItem.enabled" + ] + }, + { + "objectID": "api-menu-item#menuitemvisible", + "name": "visible", + "description": "A Boolean indicating whether the item is visible, this property can be dynamically changed.", + "type": "Boolean", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "MenuItem.visible", + "tldr": "A Boolean indicating whether the item is visible, this property can be dynamically changed.", + "slug": "menuitemvisible", + "url": "https://electronjs.org/docs/api/menu-item#menuitemvisible", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:visible", + "api:menuitemvisible", + "api:MenuItem.visible", + "doc:visible", + "doc:menuitemvisible", + "doc:MenuItem.visible" + ] + }, + { + "objectID": "api-menu-item#menuitemchecked", + "name": "checked", + "description": "A Boolean indicating whether the item is checked, this property can be dynamically changed. A checkbox menu item will toggle the checked property on and off when selected. A radio menu item will turn on its checked property when clicked, and will turn off that property for all adjacent items in the same menu. You can add a click function for additional behavior.", + "type": "Boolean", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "MenuItem.checked", + "tldr": "A Boolean indicating whether the item is checked, this property can be dynamically changed.", + "slug": "menuitemchecked", + "url": "https://electronjs.org/docs/api/menu-item#menuitemchecked", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:checked", + "api:menuitemchecked", + "api:MenuItem.checked", + "doc:checked", + "doc:menuitemchecked", + "doc:MenuItem.checked" + ] + }, + { + "objectID": "api-menu-item#menuitemlabel", + "name": "label", + "description": "A String representing the menu items visible label.", + "type": "String", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "MenuItem.label", + "tldr": "A String representing the menu items visible label.", + "slug": "menuitemlabel", + "url": "https://electronjs.org/docs/api/menu-item#menuitemlabel", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:label", + "api:menuitemlabel", + "api:MenuItem.label", + "doc:label", + "doc:menuitemlabel", + "doc:MenuItem.label" + ] + }, + { + "objectID": "api-menu-item#menuitemclick", + "name": "click", + "description": "A Function that is fired when the MenuItem receives a click event.", + "type": "Function", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "MenuItem.click", + "tldr": "A Function that is fired when the MenuItem receives a click event.", + "slug": "menuitemclick", + "url": "https://electronjs.org/docs/api/menu-item#menuitemclick", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:click", + "api:menuitemclick", + "api:MenuItem.click", + "doc:click", + "doc:menuitemclick", + "doc:MenuItem.click" + ] + }, + { + "objectID": "api-mime-typed-buffer#mimetypedbuffermimetype", + "name": "mimeType", + "type": "String", + "collection": false, + "description": "The mimeType of the Buffer that you are sending.", + "required": true, + "apiType": "properties", + "fullSignature": "MimeTypedBuffer.mimeType", + "tldr": "The mimeType of the Buffer that you are sending.", + "slug": "mimetypedbuffermimetype", + "url": "https://electronjs.org/docs/api/mime-typed-buffer#mimetypedbuffermimetype", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:mimeType", + "api:mimetypedbuffermimetype", + "api:MimeTypedBuffer.mimeType", + "doc:mimeType", + "doc:mimetypedbuffermimetype", + "doc:MimeTypedBuffer.mimeType" + ] + }, + { + "objectID": "api-mime-typed-buffer#mimetypedbufferdata", + "name": "data", + "type": "Buffer", + "collection": false, + "description": "The actual Buffer content.", + "required": true, + "apiType": "properties", + "fullSignature": "MimeTypedBuffer.data", + "tldr": "The actual Buffer content.", + "slug": "mimetypedbufferdata", + "url": "https://electronjs.org/docs/api/mime-typed-buffer#mimetypedbufferdata", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:data", + "api:mimetypedbufferdata", + "api:MimeTypedBuffer.data", + "doc:data", + "doc:mimetypedbufferdata", + "doc:MimeTypedBuffer.data" + ] + }, + { + "objectID": "api-native-image#nativeimagecreateempty", + "name": "createEmpty", + "signature": "()", + "description": "Creates an empty NativeImage instance.", + "returns": { + "type": "NativeImage", + "collection": false + }, + "apiType": "methods", + "fullSignature": "nativeImage.createEmpty", + "tldr": "Creates an empty NativeImage instance.", + "slug": "nativeimagecreateempty", + "url": "https://electronjs.org/docs/api/native-image#nativeimagecreateempty", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:createEmpty", + "api:nativeimagecreateempty", + "api:nativeImage.createEmpty", + "doc:createEmpty", + "doc:nativeimagecreateempty", + "doc:nativeImage.createEmpty" + ] + }, + { + "objectID": "api-native-image#nativeimagecreatefrompath", + "name": "createFromPath", + "signature": "(path)", + "description": "Creates a new NativeImage instance from a file located at path. This method returns an empty image if the path does not exist, cannot be read, or is not a valid image.", + "parameters": [ + { + "name": "path", + "type": "String", + "collection": false, + "required": true + } + ], + "returns": { + "type": "NativeImage", + "collection": false + }, + "apiType": "methods", + "fullSignature": "nativeImage.createFromPath", + "tldr": "Creates a new NativeImage instance from a file located at path.", + "slug": "nativeimagecreatefrompath", + "url": "https://electronjs.org/docs/api/native-image#nativeimagecreatefrompath", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:createFromPath", + "api:nativeimagecreatefrompath", + "api:nativeImage.createFromPath", + "doc:createFromPath", + "doc:nativeimagecreatefrompath", + "doc:nativeImage.createFromPath" + ] + }, + { + "objectID": "api-native-image#nativeimagecreatefrombuffer", + "name": "createFromBuffer", + "signature": "(buffer[, options])", + "description": "Creates a new NativeImage instance from buffer.", + "parameters": [ + { + "name": "buffer", + "type": "Buffer", + "collection": false, + "required": true + }, + { + "name": "options", + "type": "Object", + "collection": false, + "required": false, + "properties": [ + { + "name": "width", + "type": "Integer", + "collection": false, + "description": "Required for bitmap buffers.", + "required": false + }, + { + "name": "height", + "type": "Integer", + "collection": false, + "description": "Required for bitmap buffers.", + "required": false + }, + { + "name": "scaleFactor", + "type": "Double", + "collection": false, + "description": "Defaults to 1.0.", + "required": false + } + ] + } + ], + "returns": { + "type": "NativeImage", + "collection": false + }, + "apiType": "methods", + "fullSignature": "nativeImage.createFromBuffer", + "tldr": "Creates a new NativeImage instance from buffer.", + "slug": "nativeimagecreatefrombuffer", + "url": "https://electronjs.org/docs/api/native-image#nativeimagecreatefrombuffer", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:createFromBuffer", + "api:nativeimagecreatefrombuffer", + "api:nativeImage.createFromBuffer", + "doc:createFromBuffer", + "doc:nativeimagecreatefrombuffer", + "doc:nativeImage.createFromBuffer" + ] + }, + { + "objectID": "api-native-image#nativeimagecreatefromdataurl", + "name": "createFromDataURL", + "signature": "(dataURL)", + "description": "Creates a new NativeImage instance from dataURL.", + "parameters": [ + { + "name": "dataURL", + "type": "String", + "collection": false, + "required": true + } + ], + "returns": { + "type": "NativeImage", + "collection": false + }, + "apiType": "methods", + "fullSignature": "nativeImage.createFromDataURL", + "tldr": "Creates a new NativeImage instance from dataURL.", + "slug": "nativeimagecreatefromdataurl", + "url": "https://electronjs.org/docs/api/native-image#nativeimagecreatefromdataurl", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:createFromDataURL", + "api:nativeimagecreatefromdataurl", + "api:nativeImage.createFromDataURL", + "doc:createFromDataURL", + "doc:nativeimagecreatefromdataurl", + "doc:nativeImage.createFromDataURL" + ] + }, + { + "objectID": "api-native-image#nativeimagecreatefromnamedimage", + "name": "createFromNamedImage", + "signature": "(imageName[, hslShift])", + "platforms": [ + "macOS" + ], + "description": "Creates a new NativeImage instance from the NSImage that maps to the given image name. See NSImageName for a list of possible values. The hslShift is applied to the image with the following rules This means that [-1, 0, 1] will make the image completely white and [-1, 1, 0] will make the image completely black.", + "parameters": [ + { + "name": "imageName", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "hslShift", + "type": "Number", + "collection": true, + "required": true + } + ], + "returns": { + "type": "NativeImage", + "collection": false + }, + "apiType": "methods", + "fullSignature": "nativeImage.createFromNamedImage", + "tldr": "Creates a new NativeImage instance from the NSImage that maps to the given image name.", + "slug": "nativeimagecreatefromnamedimage", + "url": "https://electronjs.org/docs/api/native-image#nativeimagecreatefromnamedimage", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:createFromNamedImage", + "api:nativeimagecreatefromnamedimage", + "api:nativeImage.createFromNamedImage", + "doc:createFromNamedImage", + "doc:nativeimagecreatefromnamedimage", + "doc:nativeImage.createFromNamedImage" + ] + }, { "objectID": "api-native-image#imagetopngoptions", "name": "toPNG", + "signature": "([options])", "parameters": [ { "name": "options", @@ -7916,6 +17180,7 @@ { "objectID": "api-native-image#imagetojpegquality", "name": "toJPEG", + "signature": "(quality)", "parameters": [ { "name": "quality", @@ -7949,6 +17214,7 @@ { "objectID": "api-native-image#imagetobitmapoptions", "name": "toBitmap", + "signature": "([options])", "parameters": [ { "name": "options", @@ -7990,6 +17256,7 @@ { "objectID": "api-native-image#imagetodataurloptions", "name": "toDataURL", + "signature": "([options])", "parameters": [ { "name": "options", @@ -8031,6 +17298,7 @@ { "objectID": "api-native-image#imagegetbitmapoptions", "name": "getBitmap", + "signature": "([options])", "description": "The difference between getBitmap() and toBitmap() is, getBitmap() does not copy the bitmap data, so you have to use the returned Buffer immediately in current event loop tick, otherwise the data might be changed or destroyed.", "parameters": [ { @@ -8073,6 +17341,7 @@ { "objectID": "api-native-image#imagegetnativehandle", "name": "getNativeHandle", + "signature": "()", "platforms": [ "macOS" ], @@ -8101,6 +17370,7 @@ { "objectID": "api-native-image#imageisempty", "name": "isEmpty", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -8125,6 +17395,7 @@ { "objectID": "api-native-image#imagegetsize", "name": "getSize", + "signature": "()", "returns": { "type": "Size", "collection": false @@ -8148,6 +17419,7 @@ { "objectID": "api-native-image#imagesettemplateimageoption", "name": "setTemplateImage", + "signature": "(option)", "description": "Marks the image as a template image.", "parameters": [ { @@ -8176,6 +17448,7 @@ { "objectID": "api-native-image#imageistemplateimage", "name": "isTemplateImage", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -8200,6 +17473,7 @@ { "objectID": "api-native-image#imagecroprect", "name": "crop", + "signature": "(rect)", "parameters": [ { "name": "rect", @@ -8233,6 +17507,7 @@ { "objectID": "api-native-image#imageresizeoptions", "name": "resize", + "signature": "(options)", "description": "If only the height or the width are specified then the current aspect ratio will be preserved in the resized image.", "parameters": [ { @@ -8289,6 +17564,7 @@ { "objectID": "api-native-image#imagegetaspectratio", "name": "getAspectRatio", + "signature": "()", "returns": { "type": "Float", "collection": false, @@ -8313,6 +17589,7 @@ { "objectID": "api-native-image#imageaddrepresentationoptions", "name": "addRepresentation", + "signature": "(options)", "description": "Add an image representation for a specific scale factor. This can be used to explicitly add different scale factor representations to an image. This can be called on empty images.", "parameters": [ { @@ -8375,9 +17652,165 @@ "doc:image.addRepresentation(options)" ] }, + { + "objectID": "api-net#netrequest", + "name": "request", + "signature": "(options)", + "description": "Creates a ClientRequest instance using the provided options which are directly forwarded to the ClientRequest constructor. The net.request method would be used to issue both secure and insecure HTTP requests according to the specified protocol scheme in the options object.", + "parameters": [ + { + "name": "options", + "type": [ + { + "typeName": "Object", + "collection": false + }, + { + "typeName": "String", + "collection": false + } + ], + "collection": false, + "description": "The `ClientRequest` constructor options.", + "required": true + } + ], + "returns": { + "type": "ClientRequest", + "collection": false + }, + "apiType": "methods", + "fullSignature": "net.request", + "tldr": "Creates a ClientRequest instance using the provided options which are directly forwarded to the ClientRequest constructor.", + "slug": "netrequest", + "url": "https://electronjs.org/docs/api/net#netrequest", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:request", + "api:netrequest", + "api:net.request", + "doc:request", + "doc:netrequest", + "doc:net.request" + ] + }, + { + "objectID": "api-net-log#netlogcurrentlylogging", + "name": "currentlyLogging", + "description": "A Boolean property that indicates whether network logs are recorded.", + "type": "Boolean", + "collection": false, + "apiType": "properties", + "fullSignature": "netLog.currentlyLogging", + "tldr": "A Boolean property that indicates whether network logs are recorded.", + "slug": "netlogcurrentlylogging", + "url": "https://electronjs.org/docs/api/net-log#netlogcurrentlylogging", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:currentlyLogging", + "api:netlogcurrentlylogging", + "api:netLog.currentlyLogging", + "doc:currentlyLogging", + "doc:netlogcurrentlylogging", + "doc:netLog.currentlyLogging" + ] + }, + { + "objectID": "api-net-log#netlogcurrentlyloggingpath", + "name": "currentlyLoggingPath", + "description": "A String property that returns the path to the current log file.", + "type": "String", + "collection": false, + "apiType": "properties", + "fullSignature": "netLog.currentlyLoggingPath", + "tldr": "A String property that returns the path to the current log file.", + "slug": "netlogcurrentlyloggingpath", + "url": "https://electronjs.org/docs/api/net-log#netlogcurrentlyloggingpath", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:currentlyLoggingPath", + "api:netlogcurrentlyloggingpath", + "api:netLog.currentlyLoggingPath", + "doc:currentlyLoggingPath", + "doc:netlogcurrentlyloggingpath", + "doc:netLog.currentlyLoggingPath" + ] + }, + { + "objectID": "api-net-log#netlogstartlogging", + "name": "startLogging", + "signature": "(path)", + "description": "Starts recording network events to path.", + "parameters": [ + { + "name": "path", + "type": "String", + "collection": false, + "description": "File path to record network logs.", + "required": true + } + ], + "apiType": "methods", + "fullSignature": "netLog.startLogging", + "tldr": "Starts recording network events to path.", + "slug": "netlogstartlogging", + "url": "https://electronjs.org/docs/api/net-log#netlogstartlogging", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:startLogging", + "api:netlogstartlogging", + "api:netLog.startLogging", + "doc:startLogging", + "doc:netlogstartlogging", + "doc:netLog.startLogging" + ] + }, + { + "objectID": "api-net-log#netlogstoplogging", + "name": "stopLogging", + "signature": "([callback])", + "description": "Stops recording network events. If not called, net logging will automatically end when app quits.", + "parameters": [ + { + "name": "callback", + "type": "Function", + "collection": false, + "required": false, + "parameters": [ + { + "name": "path", + "type": "String", + "collection": false, + "description": "File path to which network logs were recorded.", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "netLog.stopLogging", + "tldr": "Stops recording network events.", + "slug": "netlogstoplogging", + "url": "https://electronjs.org/docs/api/net-log#netlogstoplogging", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:stopLogging", + "api:netlogstoplogging", + "api:netLog.stopLogging", + "doc:stopLogging", + "doc:netlogstoplogging", + "doc:netLog.stopLogging" + ] + }, { "objectID": "api-notification#notificationissupported", "name": "isSupported", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -8402,10 +17835,11 @@ { "objectID": "api-notification#notificationshow", "name": "show", - "description": "Immediately shows the notification to the user, please note this means unlike the HTML5 Notification implementation, simply instantiating a new Notification does not immediately show it to the user, you need to call this method before the OS will display it. If the notification has been shown before, this method will dismiss the previously shown notification and create a new one with identical properties.", + "signature": "()", + "description": "Immediately shows the notification to the user, please note this means unlike the HTML5 Notification implementation, instantiating a new Notification does not immediately show it to the user, you need to call this method before the OS will display it. If the notification has been shown before, this method will dismiss the previously shown notification and create a new one with identical properties.", "apiType": "instanceMethod", "fullSignature": "notification.show()", - "tldr": "Immediately shows the notification to the user, please note this means unlike the HTML5 Notification implementation, simply instantiating a new Notification does not immediately show it to the user, you need to call this method before the OS will display it.", + "tldr": "Immediately shows the notification to the user, please note this means unlike the HTML5 Notification implementation, instantiating a new Notification does not immediately show it to the user, you need to call this method before the OS will display it.", "slug": "notificationshow", "url": "https://electronjs.org/docs/api/notification#notificationshow", "keyValuePairs": [ @@ -8422,6 +17856,7 @@ { "objectID": "api-notification#notificationclose", "name": "close", + "signature": "()", "description": "Dismisses the notification.", "apiType": "instanceMethod", "fullSignature": "notification.close()", @@ -8454,15 +17889,16 @@ "apiType": "event", "fullSignature": "notification.on('show')", "url": "https://electronjs.org/docs/api/notification#event-show", + "slug": "notificationonshow", "tldr": "Emitted when the notification is shown to the user, note this could be fired multiple times as a notification can be shown multiple times through the show() method.", "keyValuePairs": [ "is:doc", "is:api", "api:show", - "api:undefined", + "api:notificationonshow", "api:notification.on('show')", "doc:show", - "doc:undefined", + "doc:notificationonshow", "doc:notification.on('show')" ] }, @@ -8481,15 +17917,16 @@ "apiType": "event", "fullSignature": "notification.on('click')", "url": "https://electronjs.org/docs/api/notification#event-click", + "slug": "notificationonclick", "tldr": "Emitted when the notification is clicked by the user.", "keyValuePairs": [ "is:doc", "is:api", "api:click", - "api:undefined", + "api:notificationonclick", "api:notification.on('click')", "doc:click", - "doc:undefined", + "doc:notificationonclick", "doc:notification.on('click')" ] }, @@ -8508,15 +17945,16 @@ "apiType": "event", "fullSignature": "notification.on('close')", "url": "https://electronjs.org/docs/api/notification#event-close", + "slug": "notificationonclose", "tldr": "Emitted when the notification is closed by manual intervention from the user.", "keyValuePairs": [ "is:doc", "is:api", "api:close", - "api:undefined", + "api:notificationonclose", "api:notification.on('close')", "doc:close", - "doc:undefined", + "doc:notificationonclose", "doc:notification.on('close')" ] }, @@ -8545,15 +17983,16 @@ "apiType": "event", "fullSignature": "notification.on('reply')", "url": "https://electronjs.org/docs/api/notification#event-reply", + "slug": "notificationonreply", "tldr": "Emitted when the user clicks the \"Reply\" button on a notification with hasReply: true.", "keyValuePairs": [ "is:doc", "is:api", "api:reply", - "api:undefined", + "api:notificationonreply", "api:notification.on('reply')", "doc:reply", - "doc:undefined", + "doc:notificationonreply", "doc:notification.on('reply')" ] }, @@ -8581,18 +18020,116 @@ "apiType": "event", "fullSignature": "notification.on('action')", "url": "https://electronjs.org/docs/api/notification#event-action", + "slug": "notificationonaction", "tldr": null, "keyValuePairs": [ "is:doc", "is:api", "api:action", - "api:undefined", + "api:notificationonaction", "api:notification.on('action')", "doc:action", - "doc:undefined", + "doc:notificationonaction", "doc:notification.on('action')" ] }, + { + "objectID": "api-notification-action#notificationactiontype", + "name": "type", + "type": "String", + "collection": false, + "description": "The type of action, can be button.", + "required": true, + "possibleValues": [ + { + "value": "button" + } + ], + "apiType": "properties", + "fullSignature": "NotificationAction.type", + "tldr": "The type of action, can be button.", + "slug": "notificationactiontype", + "url": "https://electronjs.org/docs/api/notification-action#notificationactiontype", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:type", + "api:notificationactiontype", + "api:NotificationAction.type", + "doc:type", + "doc:notificationactiontype", + "doc:NotificationAction.type" + ] + }, + { + "objectID": "api-notification-action#notificationactiontext", + "name": "text", + "type": "String", + "collection": false, + "description": "The label for the given action.", + "required": false, + "apiType": "properties", + "fullSignature": "NotificationAction.text", + "tldr": "The label for the given action.", + "slug": "notificationactiontext", + "url": "https://electronjs.org/docs/api/notification-action#notificationactiontext", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:text", + "api:notificationactiontext", + "api:NotificationAction.text", + "doc:text", + "doc:notificationactiontext", + "doc:NotificationAction.text" + ] + }, + { + "objectID": "api-point#pointx", + "name": "x", + "type": "Number", + "collection": false, + "description": "", + "required": true, + "apiType": "properties", + "fullSignature": "Point.x", + "tldr": null, + "slug": "pointx", + "url": "https://electronjs.org/docs/api/point#pointx", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:x", + "api:pointx", + "api:Point.x", + "doc:x", + "doc:pointx", + "doc:Point.x" + ] + }, + { + "objectID": "api-point#pointy", + "name": "y", + "type": "Number", + "collection": false, + "description": "", + "required": true, + "apiType": "properties", + "fullSignature": "Point.y", + "tldr": null, + "slug": "pointy", + "url": "https://electronjs.org/docs/api/point#pointy", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:y", + "api:pointy", + "api:Point.y", + "doc:y", + "doc:pointy", + "doc:Point.y" + ] + }, { "objectID": "api-power-monitor#event-suspend", "name": "suspend", @@ -8600,15 +18137,16 @@ "apiType": "event", "fullSignature": "powerMonitor.on('suspend')", "url": "https://electronjs.org/docs/api/power-monitor#event-suspend", + "slug": "powermonitoronsuspend", "tldr": "Emitted when the system is suspending.", "keyValuePairs": [ "is:doc", "is:api", "api:suspend", - "api:undefined", + "api:powermonitoronsuspend", "api:powerMonitor.on('suspend')", "doc:suspend", - "doc:undefined", + "doc:powermonitoronsuspend", "doc:powerMonitor.on('suspend')" ] }, @@ -8619,15 +18157,16 @@ "apiType": "event", "fullSignature": "powerMonitor.on('resume')", "url": "https://electronjs.org/docs/api/power-monitor#event-resume", + "slug": "powermonitoronresume", "tldr": "Emitted when system is resuming.", "keyValuePairs": [ "is:doc", "is:api", "api:resume", - "api:undefined", + "api:powermonitoronresume", "api:powerMonitor.on('resume')", "doc:resume", - "doc:undefined", + "doc:powermonitoronresume", "doc:powerMonitor.on('resume')" ] }, @@ -8641,15 +18180,16 @@ "apiType": "event", "fullSignature": "powerMonitor.on('on-ac')", "url": "https://electronjs.org/docs/api/power-monitor#event-on-ac", + "slug": "powermonitoronon-ac", "tldr": "Emitted when the system changes to AC power.", "keyValuePairs": [ "is:doc", "is:api", "api:on-ac", - "api:undefined", + "api:powermonitoronon-ac", "api:powerMonitor.on('on-ac')", "doc:on-ac", - "doc:undefined", + "doc:powermonitoronon-ac", "doc:powerMonitor.on('on-ac')" ] }, @@ -8663,15 +18203,16 @@ "apiType": "event", "fullSignature": "powerMonitor.on('on-battery')", "url": "https://electronjs.org/docs/api/power-monitor#event-on-battery", + "slug": "powermonitoronon-battery", "tldr": "Emitted when system changes to battery power.", "keyValuePairs": [ "is:doc", "is:api", "api:on-battery", - "api:undefined", + "api:powermonitoronon-battery", "api:powerMonitor.on('on-battery')", "doc:on-battery", - "doc:undefined", + "doc:powermonitoronon-battery", "doc:powerMonitor.on('on-battery')" ] }, @@ -8686,18 +18227,981 @@ "apiType": "event", "fullSignature": "powerMonitor.on('shutdown')", "url": "https://electronjs.org/docs/api/power-monitor#event-shutdown", + "slug": "powermonitoronshutdown", "tldr": "Emitted when the system is about to reboot or shut down.", "keyValuePairs": [ "is:doc", "is:api", "api:shutdown", - "api:undefined", + "api:powermonitoronshutdown", "api:powerMonitor.on('shutdown')", "doc:shutdown", - "doc:undefined", + "doc:powermonitoronshutdown", "doc:powerMonitor.on('shutdown')" ] }, + { + "objectID": "api-power-monitor#event-lock-screen", + "name": "lock-screen", + "description": "Emitted when the system is about to lock the screen.", + "platforms": [ + "macOS", + "Windows" + ], + "apiType": "event", + "fullSignature": "powerMonitor.on('lock-screen')", + "url": "https://electronjs.org/docs/api/power-monitor#event-lock-screen", + "slug": "powermonitoronlock-screen", + "tldr": "Emitted when the system is about to lock the screen.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:lock-screen", + "api:powermonitoronlock-screen", + "api:powerMonitor.on('lock-screen')", + "doc:lock-screen", + "doc:powermonitoronlock-screen", + "doc:powerMonitor.on('lock-screen')" + ] + }, + { + "objectID": "api-power-monitor#event-unlock-screen", + "name": "unlock-screen", + "description": "Emitted as soon as the systems screen is unlocked.", + "platforms": [ + "macOS", + "Windows" + ], + "apiType": "event", + "fullSignature": "powerMonitor.on('unlock-screen')", + "url": "https://electronjs.org/docs/api/power-monitor#event-unlock-screen", + "slug": "powermonitoronunlock-screen", + "tldr": "Emitted as soon as the systems screen is unlocked.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:unlock-screen", + "api:powermonitoronunlock-screen", + "api:powerMonitor.on('unlock-screen')", + "doc:unlock-screen", + "doc:powermonitoronunlock-screen", + "doc:powerMonitor.on('unlock-screen')" + ] + }, + { + "objectID": "api-power-save-blocker#powersaveblockerstart", + "name": "start", + "signature": "(type)", + "description": "Starts preventing the system from entering lower-power mode. Returns an integer identifying the power save blocker. Note: prevent-display-sleep has higher precedence over prevent-app-suspension. Only the highest precedence type takes effect. In other words, prevent-display-sleep always takes precedence over prevent-app-suspension. For example, an API calling A requests for prevent-app-suspension, and another calling B requests for prevent-display-sleep. prevent-display-sleep will be used until B stops its request. After that, prevent-app-suspension is used.", + "parameters": [ + { + "name": "type", + "type": "String", + "collection": false, + "description": "Power save blocker type.", + "required": true, + "possibleValues": [ + { + "value": "prevent-app-suspension", + "description": "Prevent the application from being suspended. Keeps system active but allows screen to be turned off. Example use cases: downloading a file or playing audio." + }, + { + "value": "prevent-display-sleep", + "description": "Prevent the display from going to sleep. Keeps system and screen active. Example use case: playing video." + } + ] + } + ], + "returns": { + "type": "Integer", + "collection": false, + "description": "The blocker ID that is assigned to this power blocker." + }, + "apiType": "methods", + "fullSignature": "powerSaveBlocker.start", + "tldr": "Starts preventing the system from entering lower-power mode.", + "slug": "powersaveblockerstart", + "url": "https://electronjs.org/docs/api/power-save-blocker#powersaveblockerstart", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:start", + "api:powersaveblockerstart", + "api:powerSaveBlocker.start", + "doc:start", + "doc:powersaveblockerstart", + "doc:powerSaveBlocker.start" + ] + }, + { + "objectID": "api-power-save-blocker#powersaveblockerstop", + "name": "stop", + "signature": "(id)", + "description": "Stops the specified power save blocker.", + "parameters": [ + { + "name": "id", + "type": "Integer", + "collection": false, + "description": "The power save blocker id returned by `powerSaveBlocker.start`.", + "required": true + } + ], + "apiType": "methods", + "fullSignature": "powerSaveBlocker.stop", + "tldr": "Stops the specified power save blocker.", + "slug": "powersaveblockerstop", + "url": "https://electronjs.org/docs/api/power-save-blocker#powersaveblockerstop", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:stop", + "api:powersaveblockerstop", + "api:powerSaveBlocker.stop", + "doc:stop", + "doc:powersaveblockerstop", + "doc:powerSaveBlocker.stop" + ] + }, + { + "objectID": "api-power-save-blocker#powersaveblockerisstarted", + "name": "isStarted", + "signature": "(id)", + "parameters": [ + { + "name": "id", + "type": "Integer", + "collection": false, + "description": "The power save blocker id returned by `powerSaveBlocker.start`.", + "required": true + } + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the corresponding powerSaveBlocker has started." + }, + "apiType": "methods", + "fullSignature": "powerSaveBlocker.isStarted", + "tldr": "Returns whether the corresponding powerSaveBlocker has started.", + "slug": "powersaveblockerisstarted", + "url": "https://electronjs.org/docs/api/power-save-blocker#powersaveblockerisstarted", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isStarted", + "api:powersaveblockerisstarted", + "api:powerSaveBlocker.isStarted", + "doc:isStarted", + "doc:powersaveblockerisstarted", + "doc:powerSaveBlocker.isStarted" + ] + }, + { + "objectID": "api-printer-info#printerinfoname", + "name": "name", + "type": "String", + "collection": false, + "description": "", + "required": true, + "apiType": "properties", + "fullSignature": "PrinterInfo.name", + "tldr": null, + "slug": "printerinfoname", + "url": "https://electronjs.org/docs/api/printer-info#printerinfoname", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:name", + "api:printerinfoname", + "api:PrinterInfo.name", + "doc:name", + "doc:printerinfoname", + "doc:PrinterInfo.name" + ] + }, + { + "objectID": "api-printer-info#printerinfodescription", + "name": "description", + "type": "String", + "collection": false, + "description": "", + "required": true, + "apiType": "properties", + "fullSignature": "PrinterInfo.description", + "tldr": null, + "slug": "printerinfodescription", + "url": "https://electronjs.org/docs/api/printer-info#printerinfodescription", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:description", + "api:printerinfodescription", + "api:PrinterInfo.description", + "doc:description", + "doc:printerinfodescription", + "doc:PrinterInfo.description" + ] + }, + { + "objectID": "api-printer-info#printerinfostatus", + "name": "status", + "type": "Number", + "collection": false, + "description": "", + "required": true, + "apiType": "properties", + "fullSignature": "PrinterInfo.status", + "tldr": null, + "slug": "printerinfostatus", + "url": "https://electronjs.org/docs/api/printer-info#printerinfostatus", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:status", + "api:printerinfostatus", + "api:PrinterInfo.status", + "doc:status", + "doc:printerinfostatus", + "doc:PrinterInfo.status" + ] + }, + { + "objectID": "api-printer-info#printerinfoisdefault", + "name": "isDefault", + "type": "Boolean", + "collection": false, + "description": "", + "required": true, + "apiType": "properties", + "fullSignature": "PrinterInfo.isDefault", + "tldr": null, + "slug": "printerinfoisdefault", + "url": "https://electronjs.org/docs/api/printer-info#printerinfoisdefault", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isDefault", + "api:printerinfoisdefault", + "api:PrinterInfo.isDefault", + "doc:isDefault", + "doc:printerinfoisdefault", + "doc:PrinterInfo.isDefault" + ] + }, + { + "objectID": "api-process#processdefaultapp", + "name": "defaultApp", + "description": "A Boolean. When app is started by being passed as parameter to the default app, this property is true in the main process, otherwise it is undefined.", + "type": "Boolean", + "collection": false, + "apiType": "properties", + "fullSignature": "process.defaultApp", + "tldr": "A Boolean.", + "slug": "processdefaultapp", + "url": "https://electronjs.org/docs/api/process#processdefaultapp", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:defaultApp", + "api:processdefaultapp", + "api:process.defaultApp", + "doc:defaultApp", + "doc:processdefaultapp", + "doc:process.defaultApp" + ] + }, + { + "objectID": "api-process#processismainframe", + "name": "isMainFrame", + "description": "A Boolean, true when the current renderer context is the \"main\" renderer frame. If you want the ID of the current frame you should use webFrame.routingId.", + "type": "Boolean", + "collection": false, + "apiType": "properties", + "fullSignature": "process.isMainFrame", + "tldr": "A Boolean, true when the current renderer context is the \"main\" renderer frame.", + "slug": "processismainframe", + "url": "https://electronjs.org/docs/api/process#processismainframe", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isMainFrame", + "api:processismainframe", + "api:process.isMainFrame", + "doc:isMainFrame", + "doc:processismainframe", + "doc:process.isMainFrame" + ] + }, + { + "objectID": "api-process#processmas", + "name": "mas", + "description": "A Boolean. For Mac App Store build, this property is true, for other builds it is undefined.", + "type": "Boolean", + "collection": false, + "apiType": "properties", + "fullSignature": "process.mas", + "tldr": "A Boolean.", + "slug": "processmas", + "url": "https://electronjs.org/docs/api/process#processmas", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:mas", + "api:processmas", + "api:process.mas", + "doc:mas", + "doc:processmas", + "doc:process.mas" + ] + }, + { + "objectID": "api-process#processnoasar", + "name": "noAsar", + "description": "A Boolean that controls ASAR support inside your application. Setting this to true will disable the support for asar archives in Node's built-in modules.", + "type": "Boolean", + "collection": false, + "apiType": "properties", + "fullSignature": "process.noAsar", + "tldr": "A Boolean that controls ASAR support inside your application.", + "slug": "processnoasar", + "url": "https://electronjs.org/docs/api/process#processnoasar", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:noAsar", + "api:processnoasar", + "api:process.noAsar", + "doc:noAsar", + "doc:processnoasar", + "doc:process.noAsar" + ] + }, + { + "objectID": "api-process#processnodeprecation", + "name": "noDeprecation", + "description": "A Boolean that controls whether or not deprecation warnings are printed to stderr. Setting this to true will silence deprecation warnings. This property is used instead of the --no-deprecation command line flag.", + "type": "Boolean", + "collection": false, + "apiType": "properties", + "fullSignature": "process.noDeprecation", + "tldr": "A Boolean that controls whether or not deprecation warnings are printed to stderr.", + "slug": "processnodeprecation", + "url": "https://electronjs.org/docs/api/process#processnodeprecation", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:noDeprecation", + "api:processnodeprecation", + "api:process.noDeprecation", + "doc:noDeprecation", + "doc:processnodeprecation", + "doc:process.noDeprecation" + ] + }, + { + "objectID": "api-process#processenablepromiseapis", + "name": "enablePromiseAPIs", + "description": "A Boolean that controls whether or not deprecation warnings are printed to stderr when formerly callback-based APIs converted to Promises are invoked using callbacks. Setting this to true will enable deprecation warnings.", + "type": "Boolean", + "collection": false, + "apiType": "properties", + "fullSignature": "process.enablePromiseAPIs", + "tldr": "A Boolean that controls whether or not deprecation warnings are printed to stderr when formerly callback-based APIs converted to Promises are invoked using callbacks.", + "slug": "processenablepromiseapis", + "url": "https://electronjs.org/docs/api/process#processenablepromiseapis", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:enablePromiseAPIs", + "api:processenablepromiseapis", + "api:process.enablePromiseAPIs", + "doc:enablePromiseAPIs", + "doc:processenablepromiseapis", + "doc:process.enablePromiseAPIs" + ] + }, + { + "objectID": "api-process#processresourcespath", + "name": "resourcesPath", + "description": "A String representing the path to the resources directory.", + "type": "String", + "collection": false, + "apiType": "properties", + "fullSignature": "process.resourcesPath", + "tldr": "A String representing the path to the resources directory.", + "slug": "processresourcespath", + "url": "https://electronjs.org/docs/api/process#processresourcespath", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:resourcesPath", + "api:processresourcespath", + "api:process.resourcesPath", + "doc:resourcesPath", + "doc:processresourcespath", + "doc:process.resourcesPath" + ] + }, + { + "objectID": "api-process#processsandboxed", + "name": "sandboxed", + "description": "A Boolean. When the renderer process is sandboxed, this property is true, otherwise it is undefined.", + "type": "Boolean", + "collection": false, + "apiType": "properties", + "fullSignature": "process.sandboxed", + "tldr": "A Boolean.", + "slug": "processsandboxed", + "url": "https://electronjs.org/docs/api/process#processsandboxed", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:sandboxed", + "api:processsandboxed", + "api:process.sandboxed", + "doc:sandboxed", + "doc:processsandboxed", + "doc:process.sandboxed" + ] + }, + { + "objectID": "api-process#processthrowdeprecation", + "name": "throwDeprecation", + "description": "A Boolean that controls whether or not deprecation warnings will be thrown as exceptions. Setting this to true will throw errors for deprecations. This property is used instead of the --throw-deprecation command line flag.", + "type": "Boolean", + "collection": false, + "apiType": "properties", + "fullSignature": "process.throwDeprecation", + "tldr": "A Boolean that controls whether or not deprecation warnings will be thrown as exceptions.", + "slug": "processthrowdeprecation", + "url": "https://electronjs.org/docs/api/process#processthrowdeprecation", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:throwDeprecation", + "api:processthrowdeprecation", + "api:process.throwDeprecation", + "doc:throwDeprecation", + "doc:processthrowdeprecation", + "doc:process.throwDeprecation" + ] + }, + { + "objectID": "api-process#processtracedeprecation", + "name": "traceDeprecation", + "description": "A Boolean that controls whether or not deprecations printed to stderr include their stack trace. Setting this to true will print stack traces for deprecations. This property is instead of the --trace-deprecation command line flag.", + "type": "Boolean", + "collection": false, + "apiType": "properties", + "fullSignature": "process.traceDeprecation", + "tldr": "A Boolean that controls whether or not deprecations printed to stderr include their stack trace.", + "slug": "processtracedeprecation", + "url": "https://electronjs.org/docs/api/process#processtracedeprecation", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:traceDeprecation", + "api:processtracedeprecation", + "api:process.traceDeprecation", + "doc:traceDeprecation", + "doc:processtracedeprecation", + "doc:process.traceDeprecation" + ] + }, + { + "objectID": "api-process#processtraceprocesswarnings", + "name": "traceProcessWarnings", + "description": "A Boolean that controls whether or not process warnings printed to stderr include their stack trace. Setting this to true will print stack traces for process warnings (including deprecations). This property is instead of the --trace-warnings command line flag.", + "type": "Boolean", + "collection": false, + "apiType": "properties", + "fullSignature": "process.traceProcessWarnings", + "tldr": "A Boolean that controls whether or not process warnings printed to stderr include their stack trace.", + "slug": "processtraceprocesswarnings", + "url": "https://electronjs.org/docs/api/process#processtraceprocesswarnings", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:traceProcessWarnings", + "api:processtraceprocesswarnings", + "api:process.traceProcessWarnings", + "doc:traceProcessWarnings", + "doc:processtraceprocesswarnings", + "doc:process.traceProcessWarnings" + ] + }, + { + "objectID": "api-process#processtype", + "name": "type", + "description": "A String representing the current process's type, can be \"browser\" (i.e. main process), \"renderer\", or \"worker\" (i.e. web worker).", + "type": "String", + "collection": false, + "apiType": "properties", + "fullSignature": "process.type", + "tldr": "A String representing the current process's type, can be \"browser\" (i.e.", + "slug": "processtype", + "url": "https://electronjs.org/docs/api/process#processtype", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:type", + "api:processtype", + "api:process.type", + "doc:type", + "doc:processtype", + "doc:process.type" + ] + }, + { + "objectID": "api-process#processwindowsstore", + "name": "windowsStore", + "description": "A Boolean. If the app is running as a Windows Store app (appx), this property is true, for otherwise it is undefined.", + "type": "Boolean", + "collection": false, + "apiType": "properties", + "fullSignature": "process.windowsStore", + "tldr": "A Boolean.", + "slug": "processwindowsstore", + "url": "https://electronjs.org/docs/api/process#processwindowsstore", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:windowsStore", + "api:processwindowsstore", + "api:process.windowsStore", + "doc:windowsStore", + "doc:processwindowsstore", + "doc:process.windowsStore" + ] + }, + { + "objectID": "api-process#processversions", + "name": "versions", + "type": "Object", + "required": true, + "properties": [ + { + "name": "chrome", + "description": "A String representing Chrome's version string.", + "type": "String", + "collection": false, + "_superObject": "versions" + }, + { + "name": "electron", + "description": "A String representing Electron's version string.", + "type": "String", + "collection": false, + "_superObject": "versions" + } + ], + "apiType": "properties", + "fullSignature": "process.versions", + "tldr": null, + "slug": "processversions", + "url": "https://electronjs.org/docs/api/process#processversions", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:versions", + "api:processversions", + "api:process.versions", + "doc:versions", + "doc:processversions", + "doc:process.versions" + ] + }, + { + "objectID": "api-process#processcrash", + "name": "crash", + "signature": "()", + "description": "Causes the main thread of the current process crash.", + "apiType": "methods", + "fullSignature": "process.crash", + "tldr": "Causes the main thread of the current process crash.", + "slug": "processcrash", + "url": "https://electronjs.org/docs/api/process#processcrash", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:crash", + "api:processcrash", + "api:process.crash", + "doc:crash", + "doc:processcrash", + "doc:process.crash" + ] + }, + { + "objectID": "api-process#processgetcreationtime", + "name": "getCreationTime", + "signature": "()", + "description": "Indicates the creation time of the application. The time is represented as number of milliseconds since epoch. It returns null if it is unable to get the process creation time.", + "returns": { + "type": [ + { + "typeName": "Number", + "collection": false + }, + { + "typeName": "null", + "collection": false + } + ], + "collection": false, + "description": "The number of milliseconds since epoch, or null if the information is unavailable" + }, + "apiType": "methods", + "fullSignature": "process.getCreationTime", + "tldr": "Indicates the creation time of the application.", + "slug": "processgetcreationtime", + "url": "https://electronjs.org/docs/api/process#processgetcreationtime", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getCreationTime", + "api:processgetcreationtime", + "api:process.getCreationTime", + "doc:getCreationTime", + "doc:processgetcreationtime", + "doc:process.getCreationTime" + ] + }, + { + "objectID": "api-process#processgetcpuusage", + "name": "getCPUUsage", + "signature": "()", + "returns": { + "type": "CPUUsage", + "collection": false + }, + "apiType": "methods", + "fullSignature": "process.getCPUUsage", + "tldr": null, + "slug": "processgetcpuusage", + "url": "https://electronjs.org/docs/api/process#processgetcpuusage", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getCPUUsage", + "api:processgetcpuusage", + "api:process.getCPUUsage", + "doc:getCPUUsage", + "doc:processgetcpuusage", + "doc:process.getCPUUsage" + ] + }, + { + "objectID": "api-process#processgetiocounters", + "name": "getIOCounters", + "signature": "()", + "platforms": [ + "Windows", + "Linux" + ], + "returns": { + "type": "IOCounters", + "collection": false + }, + "apiType": "methods", + "fullSignature": "process.getIOCounters", + "tldr": null, + "slug": "processgetiocounters", + "url": "https://electronjs.org/docs/api/process#processgetiocounters", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getIOCounters", + "api:processgetiocounters", + "api:process.getIOCounters", + "doc:getIOCounters", + "doc:processgetiocounters", + "doc:process.getIOCounters" + ] + }, + { + "objectID": "api-process#processgetheapstatistics", + "name": "getHeapStatistics", + "signature": "()", + "description": "Returns an object with V8 heap statistics. Note that all statistics are reported in Kilobytes.", + "returns": { + "type": "Object", + "collection": false, + "properties": [ + { + "name": "totalHeapSize", + "type": "Integer", + "collection": false, + "description": "", + "required": true + }, + { + "name": "totalHeapSizeExecutable", + "type": "Integer", + "collection": false, + "description": "", + "required": true + }, + { + "name": "totalPhysicalSize", + "type": "Integer", + "collection": false, + "description": "", + "required": true + }, + { + "name": "totalAvailableSize", + "type": "Integer", + "collection": false, + "description": "", + "required": true + }, + { + "name": "usedHeapSize", + "type": "Integer", + "collection": false, + "description": "", + "required": true + }, + { + "name": "heapSizeLimit", + "type": "Integer", + "collection": false, + "description": "", + "required": true + }, + { + "name": "mallocedMemory", + "type": "Integer", + "collection": false, + "description": "", + "required": true + }, + { + "name": "peakMallocedMemory", + "type": "Integer", + "collection": false, + "description": "", + "required": true + }, + { + "name": "doesZapGarbage", + "type": "Boolean", + "collection": false, + "description": "", + "required": true + } + ] + }, + "apiType": "methods", + "fullSignature": "process.getHeapStatistics", + "tldr": "Returns an object with V8 heap statistics.", + "slug": "processgetheapstatistics", + "url": "https://electronjs.org/docs/api/process#processgetheapstatistics", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getHeapStatistics", + "api:processgetheapstatistics", + "api:process.getHeapStatistics", + "doc:getHeapStatistics", + "doc:processgetheapstatistics", + "doc:process.getHeapStatistics" + ] + }, + { + "objectID": "api-process#processgetprocessmemoryinfo", + "name": "getProcessMemoryInfo", + "signature": "()", + "description": "Returns an object giving memory usage statistics about the current process. Note that all statistics are reported in Kilobytes. This api should be called after app ready. Chromium does not provide residentSet value for macOS. This is because macOS performs in-memory compression of pages that haven't been recently used. As a result the resident set size value is not what one would expect. private memory is more representative of the actual pre-compression memory usage of the process on macOS.", + "returns": { + "type": "Object", + "collection": false, + "properties": [ + { + "name": "residentSet", + "type": "Integer", + "collection": false, + "description": "and The amount of memory currently pinned to actual physical RAM in Kilobytes.", + "required": true + }, + { + "name": "private", + "type": "Integer", + "collection": false, + "description": "The amount of memory not shared by other processes, such as JS heap or HTML content in Kilobytes.", + "required": true + }, + { + "name": "shared", + "type": "Integer", + "collection": false, + "description": "The amount of memory shared between processes, typically memory consumed by the Electron code itself in Kilobytes.", + "required": true + } + ] + }, + "apiType": "methods", + "fullSignature": "process.getProcessMemoryInfo", + "tldr": "Returns an object giving memory usage statistics about the current process.", + "slug": "processgetprocessmemoryinfo", + "url": "https://electronjs.org/docs/api/process#processgetprocessmemoryinfo", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getProcessMemoryInfo", + "api:processgetprocessmemoryinfo", + "api:process.getProcessMemoryInfo", + "doc:getProcessMemoryInfo", + "doc:processgetprocessmemoryinfo", + "doc:process.getProcessMemoryInfo" + ] + }, + { + "objectID": "api-process#processgetsystemmemoryinfo", + "name": "getSystemMemoryInfo", + "signature": "()", + "description": "Returns an object giving memory usage statistics about the entire system. Note that all statistics are reported in Kilobytes.", + "returns": { + "type": "Object", + "collection": false, + "properties": [ + { + "name": "total", + "type": "Integer", + "collection": false, + "description": "The total amount of physical memory in Kilobytes available to the system.", + "required": true + }, + { + "name": "free", + "type": "Integer", + "collection": false, + "description": "The total amount of memory not being used by applications or disk cache.", + "required": true + }, + { + "name": "swapTotal", + "type": "Integer", + "collection": false, + "description": "The total amount of swap memory in Kilobytes available to the system.", + "required": true + }, + { + "name": "swapFree", + "type": "Integer", + "collection": false, + "description": "The free amount of swap memory in Kilobytes available to the system.", + "required": true + } + ] + }, + "apiType": "methods", + "fullSignature": "process.getSystemMemoryInfo", + "tldr": "Returns an object giving memory usage statistics about the entire system.", + "slug": "processgetsystemmemoryinfo", + "url": "https://electronjs.org/docs/api/process#processgetsystemmemoryinfo", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getSystemMemoryInfo", + "api:processgetsystemmemoryinfo", + "api:process.getSystemMemoryInfo", + "doc:getSystemMemoryInfo", + "doc:processgetsystemmemoryinfo", + "doc:process.getSystemMemoryInfo" + ] + }, + { + "objectID": "api-process#processtakeheapsnapshot", + "name": "takeHeapSnapshot", + "signature": "(filePath)", + "description": "Takes a V8 heap snapshot and saves it to filePath.", + "parameters": [ + { + "name": "filePath", + "type": "String", + "collection": false, + "description": "Path to the output file.", + "required": true + } + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Indicates whether the snapshot has been created successfully." + }, + "apiType": "methods", + "fullSignature": "process.takeHeapSnapshot", + "tldr": "Takes a V8 heap snapshot and saves it to filePath.", + "slug": "processtakeheapsnapshot", + "url": "https://electronjs.org/docs/api/process#processtakeheapsnapshot", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:takeHeapSnapshot", + "api:processtakeheapsnapshot", + "api:process.takeHeapSnapshot", + "doc:takeHeapSnapshot", + "doc:processtakeheapsnapshot", + "doc:process.takeHeapSnapshot" + ] + }, + { + "objectID": "api-process#processhang", + "name": "hang", + "signature": "()", + "description": "Causes the main thread of the current process hang.", + "apiType": "methods", + "fullSignature": "process.hang", + "tldr": "Causes the main thread of the current process hang.", + "slug": "processhang", + "url": "https://electronjs.org/docs/api/process#processhang", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:hang", + "api:processhang", + "api:process.hang", + "doc:hang", + "doc:processhang", + "doc:process.hang" + ] + }, + { + "objectID": "api-process#processsetfdlimit", + "name": "setFdLimit", + "signature": "(maxDescriptors)", + "platforms": [ + "macOS", + "Linux" + ], + "description": "Sets the file descriptor soft limit to maxDescriptors or the OS hard limit, whichever is lower for the current process.", + "parameters": [ + { + "name": "maxDescriptors", + "type": "Integer", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "process.setFdLimit", + "tldr": "Sets the file descriptor soft limit to maxDescriptors or the OS hard limit, whichever is lower for the current process.", + "slug": "processsetfdlimit", + "url": "https://electronjs.org/docs/api/process#processsetfdlimit", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setFdLimit", + "api:processsetfdlimit", + "api:process.setFdLimit", + "doc:setFdLimit", + "doc:processsetfdlimit", + "doc:process.setFdLimit" + ] + }, { "objectID": "api-process#event-loaded", "name": "loaded", @@ -8705,18 +19209,2485 @@ "apiType": "event", "fullSignature": "process.on('loaded')", "url": "https://electronjs.org/docs/api/process#event-loaded", + "slug": "processonloaded", "tldr": "Emitted when Electron has loaded its internal initialization script and is beginning to load the web page or the main script.", "keyValuePairs": [ "is:doc", "is:api", "api:loaded", - "api:undefined", + "api:processonloaded", "api:process.on('loaded')", "doc:loaded", - "doc:undefined", + "doc:processonloaded", "doc:process.on('loaded')" ] }, + { + "objectID": "api-process-metric#processmetricpid", + "name": "pid", + "type": "Integer", + "collection": false, + "description": "Process id of the process.", + "required": true, + "apiType": "properties", + "fullSignature": "ProcessMetric.pid", + "tldr": "Process id of the process.", + "slug": "processmetricpid", + "url": "https://electronjs.org/docs/api/process-metric#processmetricpid", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:pid", + "api:processmetricpid", + "api:ProcessMetric.pid", + "doc:pid", + "doc:processmetricpid", + "doc:ProcessMetric.pid" + ] + }, + { + "objectID": "api-process-metric#processmetrictype", + "name": "type", + "type": "String", + "collection": false, + "description": "Process type (Browser or Tab or GPU etc).", + "required": true, + "apiType": "properties", + "fullSignature": "ProcessMetric.type", + "tldr": "Process type (Browser or Tab or GPU etc).", + "slug": "processmetrictype", + "url": "https://electronjs.org/docs/api/process-metric#processmetrictype", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:type", + "api:processmetrictype", + "api:ProcessMetric.type", + "doc:type", + "doc:processmetrictype", + "doc:ProcessMetric.type" + ] + }, + { + "objectID": "api-process-metric#processmetriccpu", + "name": "cpu", + "type": "CPUUsage", + "collection": false, + "description": "CPU usage of the process.", + "required": true, + "apiType": "properties", + "fullSignature": "ProcessMetric.cpu", + "tldr": "CPU usage of the process.", + "slug": "processmetriccpu", + "url": "https://electronjs.org/docs/api/process-metric#processmetriccpu", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:cpu", + "api:processmetriccpu", + "api:ProcessMetric.cpu", + "doc:cpu", + "doc:processmetriccpu", + "doc:ProcessMetric.cpu" + ] + }, + { + "objectID": "api-product#productproductidentifier", + "name": "productIdentifier", + "type": "String", + "collection": false, + "description": "The string that identifies the product to the Apple App Store.", + "required": true, + "apiType": "properties", + "fullSignature": "Product.productIdentifier", + "tldr": "The string that identifies the product to the Apple App Store.", + "slug": "productproductidentifier", + "url": "https://electronjs.org/docs/api/product#productproductidentifier", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:productIdentifier", + "api:productproductidentifier", + "api:Product.productIdentifier", + "doc:productIdentifier", + "doc:productproductidentifier", + "doc:Product.productIdentifier" + ] + }, + { + "objectID": "api-product#productlocalizeddescription", + "name": "localizedDescription", + "type": "String", + "collection": false, + "description": "A description of the product.", + "required": true, + "apiType": "properties", + "fullSignature": "Product.localizedDescription", + "tldr": "A description of the product.", + "slug": "productlocalizeddescription", + "url": "https://electronjs.org/docs/api/product#productlocalizeddescription", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:localizedDescription", + "api:productlocalizeddescription", + "api:Product.localizedDescription", + "doc:localizedDescription", + "doc:productlocalizeddescription", + "doc:Product.localizedDescription" + ] + }, + { + "objectID": "api-product#productlocalizedtitle", + "name": "localizedTitle", + "type": "String", + "collection": false, + "description": "The name of the product.", + "required": true, + "apiType": "properties", + "fullSignature": "Product.localizedTitle", + "tldr": "The name of the product.", + "slug": "productlocalizedtitle", + "url": "https://electronjs.org/docs/api/product#productlocalizedtitle", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:localizedTitle", + "api:productlocalizedtitle", + "api:Product.localizedTitle", + "doc:localizedTitle", + "doc:productlocalizedtitle", + "doc:Product.localizedTitle" + ] + }, + { + "objectID": "api-product#productcontentversion", + "name": "contentVersion", + "type": "String", + "collection": false, + "description": "A string that identifies the version of the content.", + "required": true, + "apiType": "properties", + "fullSignature": "Product.contentVersion", + "tldr": "A string that identifies the version of the content.", + "slug": "productcontentversion", + "url": "https://electronjs.org/docs/api/product#productcontentversion", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:contentVersion", + "api:productcontentversion", + "api:Product.contentVersion", + "doc:contentVersion", + "doc:productcontentversion", + "doc:Product.contentVersion" + ] + }, + { + "objectID": "api-product#productcontentlengths", + "name": "contentLengths", + "type": "Number", + "collection": true, + "description": "The total size of the content, in bytes.", + "required": true, + "apiType": "properties", + "fullSignature": "Product.contentLengths", + "tldr": "The total size of the content, in bytes.", + "slug": "productcontentlengths", + "url": "https://electronjs.org/docs/api/product#productcontentlengths", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:contentLengths", + "api:productcontentlengths", + "api:Product.contentLengths", + "doc:contentLengths", + "doc:productcontentlengths", + "doc:Product.contentLengths" + ] + }, + { + "objectID": "api-product#productprice", + "name": "price", + "type": "Number", + "collection": false, + "description": "The cost of the product in the local currency.", + "required": true, + "apiType": "properties", + "fullSignature": "Product.price", + "tldr": "The cost of the product in the local currency.", + "slug": "productprice", + "url": "https://electronjs.org/docs/api/product#productprice", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:price", + "api:productprice", + "api:Product.price", + "doc:price", + "doc:productprice", + "doc:Product.price" + ] + }, + { + "objectID": "api-product#productformattedprice", + "name": "formattedPrice", + "type": "String", + "collection": false, + "description": "The locale formatted price of the product.", + "required": true, + "apiType": "properties", + "fullSignature": "Product.formattedPrice", + "tldr": "The locale formatted price of the product.", + "slug": "productformattedprice", + "url": "https://electronjs.org/docs/api/product#productformattedprice", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:formattedPrice", + "api:productformattedprice", + "api:Product.formattedPrice", + "doc:formattedPrice", + "doc:productformattedprice", + "doc:Product.formattedPrice" + ] + }, + { + "objectID": "api-product#productdownloadable", + "name": "downloadable", + "type": "Boolean", + "collection": false, + "description": "A Boolean value that indicates whether the App Store has downloadable content for this product.", + "required": true, + "apiType": "properties", + "fullSignature": "Product.downloadable", + "tldr": "A Boolean value that indicates whether the App Store has downloadable content for this product.", + "slug": "productdownloadable", + "url": "https://electronjs.org/docs/api/product#productdownloadable", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:downloadable", + "api:productdownloadable", + "api:Product.downloadable", + "doc:downloadable", + "doc:productdownloadable", + "doc:Product.downloadable" + ] + }, + { + "objectID": "api-protocol#protocolregisterschemesasprivileged", + "name": "registerSchemesAsPrivileged", + "signature": "(customSchemes)", + "description": "Note: This method can only be used before the ready event of the app module gets emitted and can be called only once. Registers the scheme as standard, secure, bypasses content security policy for resources, allows registering ServiceWorker and supports fetch API. Specify a privilege with the value of true to enable the capability. An example of registering a privileged scheme, with bypassing Content Security Policy: A standard scheme adheres to what RFC 3986 calls generic URI syntax. For example http and https are standard schemes, while file is not. Registering a scheme as standard, will allow relative and absolute resources to be resolved correctly when served. Otherwise the scheme will behave like the file protocol, but without the ability to resolve relative URLs. For example when you load following page with custom protocol without registering it as standard scheme, the image will not be loaded because non-standard schemes can not recognize relative URLs: Registering a scheme as standard will allow access to files through the FileSystem API. Otherwise the renderer will throw a security error for the scheme. By default web storage apis (localStorage, sessionStorage, webSQL, indexedDB, cookies) are disabled for non standard schemes. So in general if you want to register a custom protocol to replace the http protocol, you have to register it as a standard scheme.", + "parameters": [ + { + "name": "customSchemes", + "type": "CustomScheme", + "collection": true, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "protocol.registerSchemesAsPrivileged", + "tldr": "Note: This method can only be used before the ready event of the app module gets emitted and can be called only once.", + "slug": "protocolregisterschemesasprivileged", + "url": "https://electronjs.org/docs/api/protocol#protocolregisterschemesasprivileged", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:registerSchemesAsPrivileged", + "api:protocolregisterschemesasprivileged", + "api:protocol.registerSchemesAsPrivileged", + "doc:registerSchemesAsPrivileged", + "doc:protocolregisterschemesasprivileged", + "doc:protocol.registerSchemesAsPrivileged" + ] + }, + { + "objectID": "api-protocol#protocolregisterfileprotocol", + "name": "registerFileProtocol", + "signature": "(scheme, handler[, completion])", + "description": "Registers a protocol of scheme that will send the file as a response. The handler will be called with handler(request, callback) when a request is going to be created with scheme. completion will be called with completion(null) when scheme is successfully registered or completion(error) when failed. To handle the request, the callback should be called with either the file's path or an object that has a path property, e.g. callback(filePath) or callback({ path: filePath }). The object may also have a headers property which gives a list of strings for the response headers, e.g. callback({ path: filePath, headers: [\"Content-Security-Policy: default-src 'none'\"]}). When callback is called with nothing, a number, or an object that has an error property, the request will fail with the error number you specified. For the available error numbers you can use, please see the net error list. By default the scheme is treated like http:, which is parsed differently than protocols that follow the \"generic URI syntax\" like file:, so you probably want to call protocol.registerStandardSchemes to have your scheme treated as a standard scheme.", + "parameters": [ + { + "name": "scheme", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "handler", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "request", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "referrer", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "method", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "uploadData", + "type": "UploadData", + "collection": true, + "description": "", + "required": true + } + ] + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "description": "", + "required": true, + "parameters": [ + { + "name": "filePath", + "type": "String", + "collection": false, + "description": "", + "required": false + } + ] + } + ] + }, + { + "name": "completion", + "type": "Function", + "collection": false, + "required": false, + "parameters": [ + { + "name": "error", + "type": "Error", + "collection": false, + "description": "", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "protocol.registerFileProtocol", + "tldr": "Registers a protocol of scheme that will send the file as a response.", + "slug": "protocolregisterfileprotocol", + "url": "https://electronjs.org/docs/api/protocol#protocolregisterfileprotocol", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:registerFileProtocol", + "api:protocolregisterfileprotocol", + "api:protocol.registerFileProtocol", + "doc:registerFileProtocol", + "doc:protocolregisterfileprotocol", + "doc:protocol.registerFileProtocol" + ] + }, + { + "objectID": "api-protocol#protocolregisterbufferprotocol", + "name": "registerBufferProtocol", + "signature": "(scheme, handler[, completion])", + "description": "Registers a protocol of scheme that will send a Buffer as a response. The usage is the same with registerFileProtocol, except that the callback should be called with either a Buffer object or an object that has the data, mimeType, and charset properties. Example:", + "parameters": [ + { + "name": "scheme", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "handler", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "request", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "referrer", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "method", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "uploadData", + "type": "UploadData", + "collection": true, + "description": "", + "required": true + } + ] + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "description": "", + "required": true, + "parameters": [ + { + "name": "buffer", + "type": [ + { + "typeName": "Buffer", + "collection": false + }, + { + "typeName": "MimeTypedBuffer", + "collection": false + } + ], + "collection": false, + "description": "", + "required": false + } + ] + } + ] + }, + { + "name": "completion", + "type": "Function", + "collection": false, + "required": false, + "parameters": [ + { + "name": "error", + "type": "Error", + "collection": false, + "description": "", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "protocol.registerBufferProtocol", + "tldr": "Registers a protocol of scheme that will send a Buffer as a response.", + "slug": "protocolregisterbufferprotocol", + "url": "https://electronjs.org/docs/api/protocol#protocolregisterbufferprotocol", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:registerBufferProtocol", + "api:protocolregisterbufferprotocol", + "api:protocol.registerBufferProtocol", + "doc:registerBufferProtocol", + "doc:protocolregisterbufferprotocol", + "doc:protocol.registerBufferProtocol" + ] + }, + { + "objectID": "api-protocol#protocolregisterstringprotocol", + "name": "registerStringProtocol", + "signature": "(scheme, handler[, completion])", + "description": "Registers a protocol of scheme that will send a String as a response. The usage is the same with registerFileProtocol, except that the callback should be called with either a String or an object that has the data, mimeType, and charset properties.", + "parameters": [ + { + "name": "scheme", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "handler", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "request", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "referrer", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "method", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "uploadData", + "type": "UploadData", + "collection": true, + "description": "", + "required": true + } + ] + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "description": "", + "required": true, + "parameters": [ + { + "name": "data", + "type": "String", + "collection": false, + "description": "", + "required": false + } + ] + } + ] + }, + { + "name": "completion", + "type": "Function", + "collection": false, + "required": false, + "parameters": [ + { + "name": "error", + "type": "Error", + "collection": false, + "description": "", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "protocol.registerStringProtocol", + "tldr": "Registers a protocol of scheme that will send a String as a response.", + "slug": "protocolregisterstringprotocol", + "url": "https://electronjs.org/docs/api/protocol#protocolregisterstringprotocol", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:registerStringProtocol", + "api:protocolregisterstringprotocol", + "api:protocol.registerStringProtocol", + "doc:registerStringProtocol", + "doc:protocolregisterstringprotocol", + "doc:protocol.registerStringProtocol" + ] + }, + { + "objectID": "api-protocol#protocolregisterhttpprotocol", + "name": "registerHttpProtocol", + "signature": "(scheme, handler[, completion])", + "description": "Registers a protocol of scheme that will send an HTTP request as a response. The usage is the same with registerFileProtocol, except that the callback should be called with a redirectRequest object that has the url, method, referrer, uploadData and session properties. By default the HTTP request will reuse the current session. If you want the request to have a different session you should set session to null. For POST requests the uploadData object must be provided.", + "parameters": [ + { + "name": "scheme", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "handler", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "request", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "headers", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [] + }, + { + "name": "referrer", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "method", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "uploadData", + "type": "UploadData", + "collection": true, + "description": "", + "required": true + } + ] + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "description": "", + "required": true, + "parameters": [ + { + "name": "redirectRequest", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "method", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "session", + "type": "Object", + "collection": false, + "description": "", + "required": false, + "properties": [] + }, + { + "name": "uploadData", + "type": "Object", + "collection": false, + "description": "", + "required": false, + "properties": [ + { + "name": "contentType", + "type": "String", + "collection": false, + "description": "MIME type of the content.", + "required": true + }, + { + "name": "data", + "type": "String", + "collection": false, + "description": "Content to be sent.", + "required": true + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "completion", + "type": "Function", + "collection": false, + "required": false, + "parameters": [ + { + "name": "error", + "type": "Error", + "collection": false, + "description": "", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "protocol.registerHttpProtocol", + "tldr": "Registers a protocol of scheme that will send an HTTP request as a response.", + "slug": "protocolregisterhttpprotocol", + "url": "https://electronjs.org/docs/api/protocol#protocolregisterhttpprotocol", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:registerHttpProtocol", + "api:protocolregisterhttpprotocol", + "api:protocol.registerHttpProtocol", + "doc:registerHttpProtocol", + "doc:protocolregisterhttpprotocol", + "doc:protocol.registerHttpProtocol" + ] + }, + { + "objectID": "api-protocol#protocolregisterstreamprotocol", + "name": "registerStreamProtocol", + "signature": "(scheme, handler[, completion])", + "description": "Registers a protocol of scheme that will send a Readable as a response. The usage is similar to the other register{Any}Protocol, except that the callback should be called with either a Readable object or an object that has the data, statusCode, and headers properties. Example: It is possible to pass any object that implements the readable stream API (emits data/end/error events). For example, here's how a file could be returned:", + "parameters": [ + { + "name": "scheme", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "handler", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "request", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "headers", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [] + }, + { + "name": "referrer", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "method", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "uploadData", + "type": "UploadData", + "collection": true, + "description": "", + "required": true + } + ] + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "description": "", + "required": true, + "parameters": [ + { + "name": "stream", + "type": [ + { + "typeName": "ReadableStream", + "collection": false + }, + { + "typeName": "StreamProtocolResponse", + "collection": false + } + ], + "collection": false, + "description": "", + "required": false + } + ] + } + ] + }, + { + "name": "completion", + "type": "Function", + "collection": false, + "required": false, + "parameters": [ + { + "name": "error", + "type": "Error", + "collection": false, + "description": "", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "protocol.registerStreamProtocol", + "tldr": "Registers a protocol of scheme that will send a Readable as a response.", + "slug": "protocolregisterstreamprotocol", + "url": "https://electronjs.org/docs/api/protocol#protocolregisterstreamprotocol", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:registerStreamProtocol", + "api:protocolregisterstreamprotocol", + "api:protocol.registerStreamProtocol", + "doc:registerStreamProtocol", + "doc:protocolregisterstreamprotocol", + "doc:protocol.registerStreamProtocol" + ] + }, + { + "objectID": "api-protocol#protocolunregisterprotocol", + "name": "unregisterProtocol", + "signature": "(scheme[, completion])", + "description": "Unregisters the custom protocol of scheme.", + "parameters": [ + { + "name": "scheme", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "completion", + "type": "Function", + "collection": false, + "required": false, + "parameters": [ + { + "name": "error", + "type": "Error", + "collection": false, + "description": "", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "protocol.unregisterProtocol", + "tldr": "Unregisters the custom protocol of scheme.", + "slug": "protocolunregisterprotocol", + "url": "https://electronjs.org/docs/api/protocol#protocolunregisterprotocol", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:unregisterProtocol", + "api:protocolunregisterprotocol", + "api:protocol.unregisterProtocol", + "doc:unregisterProtocol", + "doc:protocolunregisterprotocol", + "doc:protocol.unregisterProtocol" + ] + }, + { + "objectID": "api-protocol#protocolisprotocolhandled", + "name": "isProtocolHandled", + "signature": "(scheme, callback)", + "description": "The callback will be called with a boolean that indicates whether there is already a handler for scheme. Deprecated Soon", + "parameters": [ + { + "name": "scheme", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "handled", + "type": "Boolean", + "collection": false, + "description": "", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "protocol.isProtocolHandled", + "tldr": "The callback will be called with a boolean that indicates whether there is already a handler for scheme.", + "slug": "protocolisprotocolhandled", + "url": "https://electronjs.org/docs/api/protocol#protocolisprotocolhandled", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isProtocolHandled", + "api:protocolisprotocolhandled", + "api:protocol.isProtocolHandled", + "doc:isProtocolHandled", + "doc:protocolisprotocolhandled", + "doc:protocol.isProtocolHandled" + ] + }, + { + "objectID": "api-protocol#protocolisprotocolhandled-1", + "name": "isProtocolHandled", + "signature": "(scheme)", + "parameters": [ + { + "name": "scheme", + "type": "String", + "collection": false, + "required": true + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "Boolean", + "description": "fulfilled with a boolean that indicates whether there is already a handler for scheme." + }, + "apiType": "methods", + "fullSignature": "protocol.isProtocolHandled", + "tldr": "Returns fulfilled with a boolean that indicates whether there is already a handler for scheme.", + "slug": "protocolisprotocolhandled-1", + "url": "https://electronjs.org/docs/api/protocol#protocolisprotocolhandled-1", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isProtocolHandled", + "api:protocolisprotocolhandled-1", + "api:protocol.isProtocolHandled", + "doc:isProtocolHandled", + "doc:protocolisprotocolhandled-1", + "doc:protocol.isProtocolHandled" + ] + }, + { + "objectID": "api-protocol#protocolinterceptfileprotocol", + "name": "interceptFileProtocol", + "signature": "(scheme, handler[, completion])", + "description": "Intercepts scheme protocol and uses handler as the protocol's new handler which sends a file as a response.", + "parameters": [ + { + "name": "scheme", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "handler", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "request", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "referrer", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "method", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "uploadData", + "type": "UploadData", + "collection": true, + "description": "", + "required": true + } + ] + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "description": "", + "required": true, + "parameters": [ + { + "name": "filePath", + "type": "String", + "collection": false, + "description": "", + "required": true + } + ] + } + ] + }, + { + "name": "completion", + "type": "Function", + "collection": false, + "required": false, + "parameters": [ + { + "name": "error", + "type": "Error", + "collection": false, + "description": "", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "protocol.interceptFileProtocol", + "tldr": "Intercepts scheme protocol and uses handler as the protocol's new handler which sends a file as a response.", + "slug": "protocolinterceptfileprotocol", + "url": "https://electronjs.org/docs/api/protocol#protocolinterceptfileprotocol", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:interceptFileProtocol", + "api:protocolinterceptfileprotocol", + "api:protocol.interceptFileProtocol", + "doc:interceptFileProtocol", + "doc:protocolinterceptfileprotocol", + "doc:protocol.interceptFileProtocol" + ] + }, + { + "objectID": "api-protocol#protocolinterceptstringprotocol", + "name": "interceptStringProtocol", + "signature": "(scheme, handler[, completion])", + "description": "Intercepts scheme protocol and uses handler as the protocol's new handler which sends a String as a response.", + "parameters": [ + { + "name": "scheme", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "handler", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "request", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "referrer", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "method", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "uploadData", + "type": "UploadData", + "collection": true, + "description": "", + "required": true + } + ] + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "description": "", + "required": true, + "parameters": [ + { + "name": "data", + "type": "String", + "collection": false, + "description": "", + "required": false + } + ] + } + ] + }, + { + "name": "completion", + "type": "Function", + "collection": false, + "required": false, + "parameters": [ + { + "name": "error", + "type": "Error", + "collection": false, + "description": "", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "protocol.interceptStringProtocol", + "tldr": "Intercepts scheme protocol and uses handler as the protocol's new handler which sends a String as a response.", + "slug": "protocolinterceptstringprotocol", + "url": "https://electronjs.org/docs/api/protocol#protocolinterceptstringprotocol", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:interceptStringProtocol", + "api:protocolinterceptstringprotocol", + "api:protocol.interceptStringProtocol", + "doc:interceptStringProtocol", + "doc:protocolinterceptstringprotocol", + "doc:protocol.interceptStringProtocol" + ] + }, + { + "objectID": "api-protocol#protocolinterceptbufferprotocol", + "name": "interceptBufferProtocol", + "signature": "(scheme, handler[, completion])", + "description": "Intercepts scheme protocol and uses handler as the protocol's new handler which sends a Buffer as a response.", + "parameters": [ + { + "name": "scheme", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "handler", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "request", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "referrer", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "method", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "uploadData", + "type": "UploadData", + "collection": true, + "description": "", + "required": true + } + ] + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "description": "", + "required": true, + "parameters": [ + { + "name": "buffer", + "type": "Buffer", + "collection": false, + "description": "", + "required": false + } + ] + } + ] + }, + { + "name": "completion", + "type": "Function", + "collection": false, + "required": false, + "parameters": [ + { + "name": "error", + "type": "Error", + "collection": false, + "description": "", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "protocol.interceptBufferProtocol", + "tldr": "Intercepts scheme protocol and uses handler as the protocol's new handler which sends a Buffer as a response.", + "slug": "protocolinterceptbufferprotocol", + "url": "https://electronjs.org/docs/api/protocol#protocolinterceptbufferprotocol", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:interceptBufferProtocol", + "api:protocolinterceptbufferprotocol", + "api:protocol.interceptBufferProtocol", + "doc:interceptBufferProtocol", + "doc:protocolinterceptbufferprotocol", + "doc:protocol.interceptBufferProtocol" + ] + }, + { + "objectID": "api-protocol#protocolintercepthttpprotocol", + "name": "interceptHttpProtocol", + "signature": "(scheme, handler[, completion])", + "description": "Intercepts scheme protocol and uses handler as the protocol's new handler which sends a new HTTP request as a response.", + "parameters": [ + { + "name": "scheme", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "handler", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "request", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "headers", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [] + }, + { + "name": "referrer", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "method", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "uploadData", + "type": "UploadData", + "collection": true, + "description": "", + "required": true + } + ] + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "description": "", + "required": true, + "parameters": [ + { + "name": "redirectRequest", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "method", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "session", + "type": "Object", + "collection": false, + "description": "", + "required": false, + "properties": [] + }, + { + "name": "uploadData", + "type": "Object", + "collection": false, + "description": "", + "required": false, + "properties": [ + { + "name": "contentType", + "type": "String", + "collection": false, + "description": "MIME type of the content.", + "required": true + }, + { + "name": "data", + "type": "String", + "collection": false, + "description": "Content to be sent.", + "required": true + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "completion", + "type": "Function", + "collection": false, + "required": false, + "parameters": [ + { + "name": "error", + "type": "Error", + "collection": false, + "description": "", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "protocol.interceptHttpProtocol", + "tldr": "Intercepts scheme protocol and uses handler as the protocol's new handler which sends a new HTTP request as a response.", + "slug": "protocolintercepthttpprotocol", + "url": "https://electronjs.org/docs/api/protocol#protocolintercepthttpprotocol", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:interceptHttpProtocol", + "api:protocolintercepthttpprotocol", + "api:protocol.interceptHttpProtocol", + "doc:interceptHttpProtocol", + "doc:protocolintercepthttpprotocol", + "doc:protocol.interceptHttpProtocol" + ] + }, + { + "objectID": "api-protocol#protocolinterceptstreamprotocol", + "name": "interceptStreamProtocol", + "signature": "(scheme, handler[, completion])", + "description": "Same as protocol.registerStreamProtocol, except that it replaces an existing protocol handler.", + "parameters": [ + { + "name": "scheme", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "handler", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "request", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "headers", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [] + }, + { + "name": "referrer", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "method", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "uploadData", + "type": "UploadData", + "collection": true, + "description": "", + "required": true + } + ] + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "description": "", + "required": true, + "parameters": [ + { + "name": "stream", + "type": [ + { + "typeName": "ReadableStream", + "collection": false + }, + { + "typeName": "StreamProtocolResponse", + "collection": false + } + ], + "collection": false, + "description": "", + "required": false + } + ] + } + ] + }, + { + "name": "completion", + "type": "Function", + "collection": false, + "required": false, + "parameters": [ + { + "name": "error", + "type": "Error", + "collection": false, + "description": "", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "protocol.interceptStreamProtocol", + "tldr": "Same as protocol.registerStreamProtocol, except that it replaces an existing protocol handler.", + "slug": "protocolinterceptstreamprotocol", + "url": "https://electronjs.org/docs/api/protocol#protocolinterceptstreamprotocol", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:interceptStreamProtocol", + "api:protocolinterceptstreamprotocol", + "api:protocol.interceptStreamProtocol", + "doc:interceptStreamProtocol", + "doc:protocolinterceptstreamprotocol", + "doc:protocol.interceptStreamProtocol" + ] + }, + { + "objectID": "api-protocol#protocoluninterceptprotocol", + "name": "uninterceptProtocol", + "signature": "(scheme[, completion])", + "description": "Remove the interceptor installed for scheme and restore its original handler.", + "parameters": [ + { + "name": "scheme", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "completion", + "type": "Function", + "collection": false, + "required": false, + "parameters": [ + { + "name": "error", + "type": "Error", + "collection": false, + "description": "", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "protocol.uninterceptProtocol", + "tldr": "Remove the interceptor installed for scheme and restore its original handler.", + "slug": "protocoluninterceptprotocol", + "url": "https://electronjs.org/docs/api/protocol#protocoluninterceptprotocol", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:uninterceptProtocol", + "api:protocoluninterceptprotocol", + "api:protocol.uninterceptProtocol", + "doc:uninterceptProtocol", + "doc:protocoluninterceptprotocol", + "doc:protocol.uninterceptProtocol" + ] + }, + { + "objectID": "api-rectangle#rectanglex", + "name": "x", + "type": "Number", + "collection": false, + "description": "The x coordinate of the origin of the rectangle (must be an integer).", + "required": true, + "apiType": "properties", + "fullSignature": "Rectangle.x", + "tldr": "The x coordinate of the origin of the rectangle (must be an integer).", + "slug": "rectanglex", + "url": "https://electronjs.org/docs/api/rectangle#rectanglex", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:x", + "api:rectanglex", + "api:Rectangle.x", + "doc:x", + "doc:rectanglex", + "doc:Rectangle.x" + ] + }, + { + "objectID": "api-rectangle#rectangley", + "name": "y", + "type": "Number", + "collection": false, + "description": "The y coordinate of the origin of the rectangle (must be an integer).", + "required": true, + "apiType": "properties", + "fullSignature": "Rectangle.y", + "tldr": "The y coordinate of the origin of the rectangle (must be an integer).", + "slug": "rectangley", + "url": "https://electronjs.org/docs/api/rectangle#rectangley", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:y", + "api:rectangley", + "api:Rectangle.y", + "doc:y", + "doc:rectangley", + "doc:Rectangle.y" + ] + }, + { + "objectID": "api-rectangle#rectanglewidth", + "name": "width", + "type": "Number", + "collection": false, + "description": "The width of the rectangle (must be an integer).", + "required": true, + "apiType": "properties", + "fullSignature": "Rectangle.width", + "tldr": "The width of the rectangle (must be an integer).", + "slug": "rectanglewidth", + "url": "https://electronjs.org/docs/api/rectangle#rectanglewidth", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:width", + "api:rectanglewidth", + "api:Rectangle.width", + "doc:width", + "doc:rectanglewidth", + "doc:Rectangle.width" + ] + }, + { + "objectID": "api-rectangle#rectangleheight", + "name": "height", + "type": "Number", + "collection": false, + "description": "The height of the rectangle (must be an integer).", + "required": true, + "apiType": "properties", + "fullSignature": "Rectangle.height", + "tldr": "The height of the rectangle (must be an integer).", + "slug": "rectangleheight", + "url": "https://electronjs.org/docs/api/rectangle#rectangleheight", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:height", + "api:rectangleheight", + "api:Rectangle.height", + "doc:height", + "doc:rectangleheight", + "doc:Rectangle.height" + ] + }, + { + "objectID": "api-referrer#referrerurl", + "name": "url", + "type": "String", + "collection": false, + "description": "HTTP Referrer URL.", + "required": true, + "apiType": "properties", + "fullSignature": "Referrer.url", + "tldr": "HTTP Referrer URL.", + "slug": "referrerurl", + "url": "https://electronjs.org/docs/api/referrer#referrerurl", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:url", + "api:referrerurl", + "api:Referrer.url", + "doc:url", + "doc:referrerurl", + "doc:Referrer.url" + ] + }, + { + "objectID": "api-referrer#referrerpolicy", + "name": "policy", + "type": "String", + "collection": false, + "description": "Can be default, unsafe-url, no-referrer-when-downgrade, no-referrer, origin, strict-origin-when-cross-origin, same-origin or strict-origin. See the for more details on the meaning of these values.", + "required": true, + "possibleValues": [ + { + "value": "default" + }, + { + "value": "unsafe-url" + }, + { + "value": "no-referrer-when-downgrade" + }, + { + "value": "no-referrer" + }, + { + "value": "origin" + }, + { + "value": "strict-origin-when-cross-origin" + }, + { + "value": "same-origin" + }, + { + "value": "strict-origin" + } + ], + "apiType": "properties", + "fullSignature": "Referrer.policy", + "tldr": "Can be default, unsafe-url, no-referrer-when-downgrade, no-referrer, origin, strict-origin-when-cross-origin, same-origin or strict-origin.", + "slug": "referrerpolicy", + "url": "https://electronjs.org/docs/api/referrer#referrerpolicy", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:policy", + "api:referrerpolicy", + "api:Referrer.policy", + "doc:policy", + "doc:referrerpolicy", + "doc:Referrer.policy" + ] + }, + { + "objectID": "api-remote#remoteprocess", + "name": "process", + "description": "The process object in the main process. This is the same as remote.getGlobal('process') but is cached.", + "apiType": "properties", + "fullSignature": "remote.process", + "tldr": "The process object in the main process.", + "slug": "remoteprocess", + "url": "https://electronjs.org/docs/api/remote#remoteprocess", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:process", + "api:remoteprocess", + "api:remote.process", + "doc:process", + "doc:remoteprocess", + "doc:remote.process" + ] + }, + { + "objectID": "api-remote#remoterequire", + "name": "require", + "signature": "(module)", + "description": "e.g.", + "parameters": [ + { + "name": "module", + "type": "String", + "collection": false, + "required": true + } + ], + "returns": { + "type": "any", + "collection": false, + "description": "The object returned by require(module) in the main process. Modules specified by their relative path will resolve relative to the entrypoint of the main process." + }, + "apiType": "methods", + "fullSignature": "remote.require", + "tldr": "e.g.", + "slug": "remoterequire", + "url": "https://electronjs.org/docs/api/remote#remoterequire", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:require", + "api:remoterequire", + "api:remote.require", + "doc:require", + "doc:remoterequire", + "doc:remote.require" + ] + }, + { + "objectID": "api-remote#remotegetcurrentwindow", + "name": "getCurrentWindow", + "signature": "()", + "description": "Note: Do not use removeAllListeners on BrowserWindow. Use of this can remove all blur listeners, disable click events on touch bar buttons, and other unintended consequences.", + "returns": { + "type": "BrowserWindow", + "collection": false, + "description": "The window to which this web page belongs." + }, + "apiType": "methods", + "fullSignature": "remote.getCurrentWindow", + "tldr": "Note: Do not use removeAllListeners on BrowserWindow.", + "slug": "remotegetcurrentwindow", + "url": "https://electronjs.org/docs/api/remote#remotegetcurrentwindow", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getCurrentWindow", + "api:remotegetcurrentwindow", + "api:remote.getCurrentWindow", + "doc:getCurrentWindow", + "doc:remotegetcurrentwindow", + "doc:remote.getCurrentWindow" + ] + }, + { + "objectID": "api-remote#remotegetcurrentwebcontents", + "name": "getCurrentWebContents", + "signature": "()", + "returns": { + "type": "WebContents", + "collection": false, + "description": "The web contents of this web page." + }, + "apiType": "methods", + "fullSignature": "remote.getCurrentWebContents", + "tldr": "Returns the web contents of this web page.", + "slug": "remotegetcurrentwebcontents", + "url": "https://electronjs.org/docs/api/remote#remotegetcurrentwebcontents", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getCurrentWebContents", + "api:remotegetcurrentwebcontents", + "api:remote.getCurrentWebContents", + "doc:getCurrentWebContents", + "doc:remotegetcurrentwebcontents", + "doc:remote.getCurrentWebContents" + ] + }, + { + "objectID": "api-remote#remotegetglobal", + "name": "getGlobal", + "signature": "(name)", + "parameters": [ + { + "name": "name", + "type": "String", + "collection": false, + "required": true + } + ], + "returns": { + "type": "any", + "collection": false, + "description": "The global variable of name (e.g. global[name]) in the main process." + }, + "apiType": "methods", + "fullSignature": "remote.getGlobal", + "tldr": "Returns the global variable of name (e.g. global[name]) in the main process.", + "slug": "remotegetglobal", + "url": "https://electronjs.org/docs/api/remote#remotegetglobal", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getGlobal", + "api:remotegetglobal", + "api:remote.getGlobal", + "doc:getGlobal", + "doc:remotegetglobal", + "doc:remote.getGlobal" + ] + }, + { + "objectID": "api-remove-client-certificate#removeclientcertificatetype", + "name": "type", + "type": "String", + "collection": false, + "description": "clientCertificate.", + "required": true, + "apiType": "properties", + "fullSignature": "RemoveClientCertificate.type", + "tldr": "clientCertificate.", + "slug": "removeclientcertificatetype", + "url": "https://electronjs.org/docs/api/remove-client-certificate#removeclientcertificatetype", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:type", + "api:removeclientcertificatetype", + "api:RemoveClientCertificate.type", + "doc:type", + "doc:removeclientcertificatetype", + "doc:RemoveClientCertificate.type" + ] + }, + { + "objectID": "api-remove-client-certificate#removeclientcertificateorigin", + "name": "origin", + "type": "String", + "collection": false, + "description": "Origin of the server whose associated client certificate must be removed from the cache.", + "required": true, + "apiType": "properties", + "fullSignature": "RemoveClientCertificate.origin", + "tldr": "Origin of the server whose associated client certificate must be removed from the cache.", + "slug": "removeclientcertificateorigin", + "url": "https://electronjs.org/docs/api/remove-client-certificate#removeclientcertificateorigin", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:origin", + "api:removeclientcertificateorigin", + "api:RemoveClientCertificate.origin", + "doc:origin", + "doc:removeclientcertificateorigin", + "doc:RemoveClientCertificate.origin" + ] + }, + { + "objectID": "api-remove-password#removepasswordtype", + "name": "type", + "type": "String", + "collection": false, + "description": "password.", + "required": true, + "apiType": "properties", + "fullSignature": "RemovePassword.type", + "tldr": "password.", + "slug": "removepasswordtype", + "url": "https://electronjs.org/docs/api/remove-password#removepasswordtype", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:type", + "api:removepasswordtype", + "api:RemovePassword.type", + "doc:type", + "doc:removepasswordtype", + "doc:RemovePassword.type" + ] + }, + { + "objectID": "api-remove-password#removepasswordorigin", + "name": "origin", + "type": "String", + "collection": false, + "description": "When provided, the authentication info related to the origin will only be removed otherwise the entire cache will be cleared.", + "required": false, + "apiType": "properties", + "fullSignature": "RemovePassword.origin", + "tldr": "When provided, the authentication info related to the origin will only be removed otherwise the entire cache will be cleared.", + "slug": "removepasswordorigin", + "url": "https://electronjs.org/docs/api/remove-password#removepasswordorigin", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:origin", + "api:removepasswordorigin", + "api:RemovePassword.origin", + "doc:origin", + "doc:removepasswordorigin", + "doc:RemovePassword.origin" + ] + }, + { + "objectID": "api-remove-password#removepasswordscheme", + "name": "scheme", + "type": "String", + "collection": false, + "description": "Scheme of the authentication. Can be basic, digest, ntlm, negotiate. Must be provided if removing by origin.", + "required": false, + "possibleValues": [ + { + "value": "basic" + }, + { + "value": "digest" + }, + { + "value": "ntlm" + }, + { + "value": "negotiate" + } + ], + "apiType": "properties", + "fullSignature": "RemovePassword.scheme", + "tldr": "Scheme of the authentication.", + "slug": "removepasswordscheme", + "url": "https://electronjs.org/docs/api/remove-password#removepasswordscheme", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:scheme", + "api:removepasswordscheme", + "api:RemovePassword.scheme", + "doc:scheme", + "doc:removepasswordscheme", + "doc:RemovePassword.scheme" + ] + }, + { + "objectID": "api-remove-password#removepasswordrealm", + "name": "realm", + "type": "String", + "collection": false, + "description": "Realm of the authentication. Must be provided if removing by origin.", + "required": false, + "apiType": "properties", + "fullSignature": "RemovePassword.realm", + "tldr": "Realm of the authentication.", + "slug": "removepasswordrealm", + "url": "https://electronjs.org/docs/api/remove-password#removepasswordrealm", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:realm", + "api:removepasswordrealm", + "api:RemovePassword.realm", + "doc:realm", + "doc:removepasswordrealm", + "doc:RemovePassword.realm" + ] + }, + { + "objectID": "api-remove-password#removepasswordusername", + "name": "username", + "type": "String", + "collection": false, + "description": "Credentials of the authentication. Must be provided if removing by origin.", + "required": false, + "apiType": "properties", + "fullSignature": "RemovePassword.username", + "tldr": "Credentials of the authentication.", + "slug": "removepasswordusername", + "url": "https://electronjs.org/docs/api/remove-password#removepasswordusername", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:username", + "api:removepasswordusername", + "api:RemovePassword.username", + "doc:username", + "doc:removepasswordusername", + "doc:RemovePassword.username" + ] + }, + { + "objectID": "api-remove-password#removepasswordpassword", + "name": "password", + "type": "String", + "collection": false, + "description": "Credentials of the authentication. Must be provided if removing by origin.", + "required": false, + "apiType": "properties", + "fullSignature": "RemovePassword.password", + "tldr": "Credentials of the authentication.", + "slug": "removepasswordpassword", + "url": "https://electronjs.org/docs/api/remove-password#removepasswordpassword", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:password", + "api:removepasswordpassword", + "api:RemovePassword.password", + "doc:password", + "doc:removepasswordpassword", + "doc:RemovePassword.password" + ] + }, + { + "objectID": "api-screen#screengetcursorscreenpoint", + "name": "getCursorScreenPoint", + "signature": "()", + "description": "The current absolute position of the mouse pointer.", + "returns": { + "type": "Point", + "collection": false + }, + "apiType": "methods", + "fullSignature": "screen.getCursorScreenPoint", + "tldr": "The current absolute position of the mouse pointer.", + "slug": "screengetcursorscreenpoint", + "url": "https://electronjs.org/docs/api/screen#screengetcursorscreenpoint", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getCursorScreenPoint", + "api:screengetcursorscreenpoint", + "api:screen.getCursorScreenPoint", + "doc:getCursorScreenPoint", + "doc:screengetcursorscreenpoint", + "doc:screen.getCursorScreenPoint" + ] + }, + { + "objectID": "api-screen#screengetprimarydisplay", + "name": "getPrimaryDisplay", + "signature": "()", + "returns": { + "type": "Display", + "collection": false, + "description": "The primary display." + }, + "apiType": "methods", + "fullSignature": "screen.getPrimaryDisplay", + "tldr": "Returns the primary display.", + "slug": "screengetprimarydisplay", + "url": "https://electronjs.org/docs/api/screen#screengetprimarydisplay", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getPrimaryDisplay", + "api:screengetprimarydisplay", + "api:screen.getPrimaryDisplay", + "doc:getPrimaryDisplay", + "doc:screengetprimarydisplay", + "doc:screen.getPrimaryDisplay" + ] + }, + { + "objectID": "api-screen#screengetalldisplays", + "name": "getAllDisplays", + "signature": "()", + "returns": { + "type": "Display", + "collection": true, + "description": "An array of displays that are currently available." + }, + "apiType": "methods", + "fullSignature": "screen.getAllDisplays", + "tldr": "Returns an array of displays that are currently available.", + "slug": "screengetalldisplays", + "url": "https://electronjs.org/docs/api/screen#screengetalldisplays", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getAllDisplays", + "api:screengetalldisplays", + "api:screen.getAllDisplays", + "doc:getAllDisplays", + "doc:screengetalldisplays", + "doc:screen.getAllDisplays" + ] + }, + { + "objectID": "api-screen#screengetdisplaynearestpoint", + "name": "getDisplayNearestPoint", + "signature": "(point)", + "parameters": [ + { + "name": "point", + "type": "Point", + "collection": false, + "required": true + } + ], + "returns": { + "type": "Display", + "collection": false, + "description": "The display nearest the specified point." + }, + "apiType": "methods", + "fullSignature": "screen.getDisplayNearestPoint", + "tldr": "Returns the display nearest the specified point.", + "slug": "screengetdisplaynearestpoint", + "url": "https://electronjs.org/docs/api/screen#screengetdisplaynearestpoint", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getDisplayNearestPoint", + "api:screengetdisplaynearestpoint", + "api:screen.getDisplayNearestPoint", + "doc:getDisplayNearestPoint", + "doc:screengetdisplaynearestpoint", + "doc:screen.getDisplayNearestPoint" + ] + }, + { + "objectID": "api-screen#screengetdisplaymatching", + "name": "getDisplayMatching", + "signature": "(rect)", + "parameters": [ + { + "name": "rect", + "type": "Rectangle", + "collection": false, + "required": true + } + ], + "returns": { + "type": "Display", + "collection": false, + "description": "The display that most closely intersects the provided bounds." + }, + "apiType": "methods", + "fullSignature": "screen.getDisplayMatching", + "tldr": "Returns the display that most closely intersects the provided bounds.", + "slug": "screengetdisplaymatching", + "url": "https://electronjs.org/docs/api/screen#screengetdisplaymatching", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getDisplayMatching", + "api:screengetdisplaymatching", + "api:screen.getDisplayMatching", + "doc:getDisplayMatching", + "doc:screengetdisplaymatching", + "doc:screen.getDisplayMatching" + ] + }, + { + "objectID": "api-screen#screenscreentodippoint", + "name": "screenToDipPoint", + "signature": "(point)", + "platforms": [ + "Windows" + ], + "description": "Converts a screen physical point to a screen DIP point. The DPI scale is performed relative to the display containing the physical point.", + "parameters": [ + { + "name": "point", + "type": "Point", + "collection": false, + "required": true + } + ], + "returns": { + "type": "Point", + "collection": false + }, + "apiType": "methods", + "fullSignature": "screen.screenToDipPoint", + "tldr": "Converts a screen physical point to a screen DIP point.", + "slug": "screenscreentodippoint", + "url": "https://electronjs.org/docs/api/screen#screenscreentodippoint", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:screenToDipPoint", + "api:screenscreentodippoint", + "api:screen.screenToDipPoint", + "doc:screenToDipPoint", + "doc:screenscreentodippoint", + "doc:screen.screenToDipPoint" + ] + }, + { + "objectID": "api-screen#screendiptoscreenpoint", + "name": "dipToScreenPoint", + "signature": "(point)", + "platforms": [ + "Windows" + ], + "description": "Converts a screen DIP point to a screen physical point. The DPI scale is performed relative to the display containing the DIP point.", + "parameters": [ + { + "name": "point", + "type": "Point", + "collection": false, + "required": true + } + ], + "returns": { + "type": "Point", + "collection": false + }, + "apiType": "methods", + "fullSignature": "screen.dipToScreenPoint", + "tldr": "Converts a screen DIP point to a screen physical point.", + "slug": "screendiptoscreenpoint", + "url": "https://electronjs.org/docs/api/screen#screendiptoscreenpoint", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:dipToScreenPoint", + "api:screendiptoscreenpoint", + "api:screen.dipToScreenPoint", + "doc:dipToScreenPoint", + "doc:screendiptoscreenpoint", + "doc:screen.dipToScreenPoint" + ] + }, + { + "objectID": "api-screen#screenscreentodiprect", + "name": "screenToDipRect", + "signature": "(window, rect)", + "platforms": [ + "Windows" + ], + "description": "Converts a screen physical rect to a screen DIP rect. The DPI scale is performed relative to the display nearest to window. If window is null, scaling will be performed to the display nearest to rect.", + "parameters": [ + { + "name": "window", + "type": [ + { + "typeName": "BrowserWindow", + "collection": false + }, + { + "typeName": "null", + "collection": false + } + ], + "collection": false, + "required": true + }, + { + "name": "rect", + "type": "Rectangle", + "collection": false, + "required": true + } + ], + "returns": { + "type": "Rectangle", + "collection": false + }, + "apiType": "methods", + "fullSignature": "screen.screenToDipRect", + "tldr": "Converts a screen physical rect to a screen DIP rect.", + "slug": "screenscreentodiprect", + "url": "https://electronjs.org/docs/api/screen#screenscreentodiprect", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:screenToDipRect", + "api:screenscreentodiprect", + "api:screen.screenToDipRect", + "doc:screenToDipRect", + "doc:screenscreentodiprect", + "doc:screen.screenToDipRect" + ] + }, + { + "objectID": "api-screen#screendiptoscreenrect", + "name": "dipToScreenRect", + "signature": "(window, rect)", + "platforms": [ + "Windows" + ], + "description": "Converts a screen DIP rect to a screen physical rect. The DPI scale is performed relative to the display nearest to window. If window is null, scaling will be performed to the display nearest to rect.", + "parameters": [ + { + "name": "window", + "type": [ + { + "typeName": "BrowserWindow", + "collection": false + }, + { + "typeName": "null", + "collection": false + } + ], + "collection": false, + "required": true + }, + { + "name": "rect", + "type": "Rectangle", + "collection": false, + "required": true + } + ], + "returns": { + "type": "Rectangle", + "collection": false + }, + "apiType": "methods", + "fullSignature": "screen.dipToScreenRect", + "tldr": "Converts a screen DIP rect to a screen physical rect.", + "slug": "screendiptoscreenrect", + "url": "https://electronjs.org/docs/api/screen#screendiptoscreenrect", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:dipToScreenRect", + "api:screendiptoscreenrect", + "api:screen.dipToScreenRect", + "doc:dipToScreenRect", + "doc:screendiptoscreenrect", + "doc:screen.dipToScreenRect" + ] + }, { "objectID": "api-screen#event-display-added", "name": "display-added", @@ -8738,15 +21709,16 @@ "apiType": "event", "fullSignature": "screen.on('display-added')", "url": "https://electronjs.org/docs/api/screen#event-display-added", + "slug": "screenondisplay-added", "tldr": "Emitted when newDisplay has been added.", "keyValuePairs": [ "is:doc", "is:api", "api:display-added", - "api:undefined", + "api:screenondisplay-added", "api:screen.on('display-added')", "doc:display-added", - "doc:undefined", + "doc:screenondisplay-added", "doc:screen.on('display-added')" ] }, @@ -8771,15 +21743,16 @@ "apiType": "event", "fullSignature": "screen.on('display-removed')", "url": "https://electronjs.org/docs/api/screen#event-display-removed", + "slug": "screenondisplay-removed", "tldr": "Emitted when oldDisplay has been removed.", "keyValuePairs": [ "is:doc", "is:api", "api:display-removed", - "api:undefined", + "api:screenondisplay-removed", "api:screen.on('display-removed')", "doc:display-removed", - "doc:undefined", + "doc:screenondisplay-removed", "doc:screen.on('display-removed')" ] }, @@ -8810,21 +21783,297 @@ "apiType": "event", "fullSignature": "screen.on('display-metrics-changed')", "url": "https://electronjs.org/docs/api/screen#event-display-metrics-changed", + "slug": "screenondisplay-metrics-changed", "tldr": "Emitted when one or more metrics change in a display.", "keyValuePairs": [ "is:doc", "is:api", "api:display-metrics-changed", - "api:undefined", + "api:screenondisplay-metrics-changed", "api:screen.on('display-metrics-changed')", "doc:display-metrics-changed", - "doc:undefined", + "doc:screenondisplay-metrics-changed", "doc:screen.on('display-metrics-changed')" ] }, + { + "objectID": "api-scrubber-item#scrubberitemlabel", + "name": "label", + "type": "String", + "collection": false, + "description": "The text to appear in this item.", + "required": false, + "apiType": "properties", + "fullSignature": "ScrubberItem.label", + "tldr": "The text to appear in this item.", + "slug": "scrubberitemlabel", + "url": "https://electronjs.org/docs/api/scrubber-item#scrubberitemlabel", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:label", + "api:scrubberitemlabel", + "api:ScrubberItem.label", + "doc:label", + "doc:scrubberitemlabel", + "doc:ScrubberItem.label" + ] + }, + { + "objectID": "api-scrubber-item#scrubberitemicon", + "name": "icon", + "type": "NativeImage", + "collection": false, + "description": "The image to appear in this item.", + "required": false, + "apiType": "properties", + "fullSignature": "ScrubberItem.icon", + "tldr": "The image to appear in this item.", + "slug": "scrubberitemicon", + "url": "https://electronjs.org/docs/api/scrubber-item#scrubberitemicon", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:icon", + "api:scrubberitemicon", + "api:ScrubberItem.icon", + "doc:icon", + "doc:scrubberitemicon", + "doc:ScrubberItem.icon" + ] + }, + { + "objectID": "api-segmented-control-segment#segmentedcontrolsegmentlabel", + "name": "label", + "type": "String", + "collection": false, + "description": "The text to appear in this segment.", + "required": false, + "apiType": "properties", + "fullSignature": "SegmentedControlSegment.label", + "tldr": "The text to appear in this segment.", + "slug": "segmentedcontrolsegmentlabel", + "url": "https://electronjs.org/docs/api/segmented-control-segment#segmentedcontrolsegmentlabel", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:label", + "api:segmentedcontrolsegmentlabel", + "api:SegmentedControlSegment.label", + "doc:label", + "doc:segmentedcontrolsegmentlabel", + "doc:SegmentedControlSegment.label" + ] + }, + { + "objectID": "api-segmented-control-segment#segmentedcontrolsegmenticon", + "name": "icon", + "type": "NativeImage", + "collection": false, + "description": "The image to appear in this segment.", + "required": false, + "apiType": "properties", + "fullSignature": "SegmentedControlSegment.icon", + "tldr": "The image to appear in this segment.", + "slug": "segmentedcontrolsegmenticon", + "url": "https://electronjs.org/docs/api/segmented-control-segment#segmentedcontrolsegmenticon", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:icon", + "api:segmentedcontrolsegmenticon", + "api:SegmentedControlSegment.icon", + "doc:icon", + "doc:segmentedcontrolsegmenticon", + "doc:SegmentedControlSegment.icon" + ] + }, + { + "objectID": "api-segmented-control-segment#segmentedcontrolsegmentenabled", + "name": "enabled", + "type": "Boolean", + "collection": false, + "description": "Whether this segment is selectable. Default: true.", + "required": false, + "apiType": "properties", + "fullSignature": "SegmentedControlSegment.enabled", + "tldr": "Whether this segment is selectable.", + "slug": "segmentedcontrolsegmentenabled", + "url": "https://electronjs.org/docs/api/segmented-control-segment#segmentedcontrolsegmentenabled", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:enabled", + "api:segmentedcontrolsegmentenabled", + "api:SegmentedControlSegment.enabled", + "doc:enabled", + "doc:segmentedcontrolsegmentenabled", + "doc:SegmentedControlSegment.enabled" + ] + }, + { + "objectID": "api-session#sessiondefaultsession", + "name": "defaultSession", + "description": "A Session object, the default session object of the app.", + "type": "Session", + "collection": false, + "apiType": "properties", + "fullSignature": "session.defaultSession", + "tldr": "A Session object, the default session object of the app.", + "slug": "sessiondefaultsession", + "url": "https://electronjs.org/docs/api/session#sessiondefaultsession", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:defaultSession", + "api:sessiondefaultsession", + "api:session.defaultSession", + "doc:defaultSession", + "doc:sessiondefaultsession", + "doc:session.defaultSession" + ] + }, + { + "objectID": "api-session#sessionfrompartition", + "name": "fromPartition", + "signature": "(partition[, options])", + "description": "If partition starts with persist:, the page will use a persistent session available to all pages in the app with the same partition. if there is no persist: prefix, the page will use an in-memory session. If the partition is empty then default session of the app will be returned. To create a Session with options, you have to ensure the Session with the partition has never been used before. There is no way to change the options of an existing Session object.", + "parameters": [ + { + "name": "partition", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "options", + "type": "Object", + "collection": false, + "required": false, + "properties": [ + { + "name": "cache", + "type": "Boolean", + "collection": false, + "description": "Whether to enable cache.", + "required": true + } + ] + } + ], + "returns": { + "type": "Session", + "collection": false, + "description": "A session instance from partition string. When there is an existing Session with the same partition, it will be returned; otherwise a new Session instance will be created with options." + }, + "apiType": "methods", + "fullSignature": "session.fromPartition", + "tldr": "If partition starts with persist:, the page will use a persistent session available to all pages in the app with the same partition.", + "slug": "sessionfrompartition", + "url": "https://electronjs.org/docs/api/session#sessionfrompartition", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:fromPartition", + "api:sessionfrompartition", + "api:session.fromPartition", + "doc:fromPartition", + "doc:sessionfrompartition", + "doc:session.fromPartition" + ] + }, + { + "objectID": "api-session#sessioncookies", + "name": "cookies", + "description": "A Cookies object for this session.", + "type": "Cookies", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "Session.cookies", + "tldr": "A Cookies object for this session.", + "slug": "sessioncookies", + "url": "https://electronjs.org/docs/api/session#sessioncookies", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:cookies", + "api:sessioncookies", + "api:Session.cookies", + "doc:cookies", + "doc:sessioncookies", + "doc:Session.cookies" + ] + }, + { + "objectID": "api-session#sessionwebrequest", + "name": "webRequest", + "description": "A WebRequest object for this session.", + "type": "WebRequest", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "Session.webRequest", + "tldr": "A WebRequest object for this session.", + "slug": "sessionwebrequest", + "url": "https://electronjs.org/docs/api/session#sessionwebrequest", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:webRequest", + "api:sessionwebrequest", + "api:Session.webRequest", + "doc:webRequest", + "doc:sessionwebrequest", + "doc:Session.webRequest" + ] + }, + { + "objectID": "api-session#sessionprotocol", + "name": "protocol", + "description": "A Protocol object for this session.", + "type": "Protocol", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "Session.protocol", + "tldr": "A Protocol object for this session.", + "slug": "sessionprotocol", + "url": "https://electronjs.org/docs/api/session#sessionprotocol", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:protocol", + "api:sessionprotocol", + "api:Session.protocol", + "doc:protocol", + "doc:sessionprotocol", + "doc:Session.protocol" + ] + }, + { + "objectID": "api-session#sessionnetlog", + "name": "netLog", + "description": "A NetLog object for this session.", + "type": "NetLog", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "Session.netLog", + "tldr": "A NetLog object for this session.", + "slug": "sessionnetlog", + "url": "https://electronjs.org/docs/api/session#sessionnetlog", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:netLog", + "api:sessionnetlog", + "api:Session.netLog", + "doc:netLog", + "doc:sessionnetlog", + "doc:Session.netLog" + ] + }, { "objectID": "api-session#sesgetcachesizecallback", "name": "getCacheSize", + "signature": "(callback)", "description": "Callback is invoked with the session's current cache size.", "parameters": [ { @@ -8862,6 +22111,7 @@ { "objectID": "api-session#sesclearcachecallback", "name": "clearCache", + "signature": "(callback)", "description": "Clears the session’s HTTP cache.", "parameters": [ { @@ -8891,6 +22141,7 @@ { "objectID": "api-session#sesclearstoragedataoptions-callback", "name": "clearStorageData", + "signature": "([options, callback])", "description": "Clears the data of web storages.", "parameters": [ { @@ -8910,7 +22161,7 @@ "name": "storages", "type": "String", "collection": true, - "description": "The types of storages to clear, can contain: appcache, cookies, filesystem, indexdb, localstorage, shadercache, websql, serviceworkers.", + "description": "The types of storages to clear, can contain: appcache, cookies, filesystem, indexdb, localstorage, shadercache, websql, serviceworkers, cachestorage.", "required": false }, { @@ -8949,6 +22200,7 @@ { "objectID": "api-session#sesflushstoragedata", "name": "flushStorageData", + "signature": "()", "description": "Writes any unwritten DOMStorage data to disk.", "apiType": "instanceMethod", "fullSignature": "ses.flushStorageData()", @@ -8969,6 +22221,7 @@ { "objectID": "api-session#sessetproxyconfig-callback", "name": "setProxy", + "signature": "(config, callback)", "description": "Sets the proxy settings. When pacScript and proxyRules are provided together, the proxyRules option is ignored and pacScript configuration is applied. The proxyRules has to follow the rules below: For example: The proxyBypassRules is a comma separated list of rules described below:", "parameters": [ { @@ -9027,6 +22280,7 @@ { "objectID": "api-session#sesresolveproxyurl-callback", "name": "resolveProxy", + "signature": "(url, callback)", "description": "Resolves the proxy information for url. The callback will be called with callback(proxy) when the request is performed.", "parameters": [ { @@ -9070,6 +22324,7 @@ { "objectID": "api-session#sessetdownloadpathpath", "name": "setDownloadPath", + "signature": "(path)", "description": "Sets download saving directory. By default, the download directory will be the Downloads under the respective app folder.", "parameters": [ { @@ -9099,6 +22354,7 @@ { "objectID": "api-session#sesenablenetworkemulationoptions", "name": "enableNetworkEmulation", + "signature": "(options)", "description": "Emulates network with the given configuration for the session.", "parameters": [ { @@ -9157,6 +22413,7 @@ { "objectID": "api-session#sesdisablenetworkemulation", "name": "disableNetworkEmulation", + "signature": "()", "description": "Disables any network emulation already active for the session. Resets to the original network configuration.", "apiType": "instanceMethod", "fullSignature": "ses.disableNetworkEmulation()", @@ -9177,6 +22434,7 @@ { "objectID": "api-session#sessetcertificateverifyprocproc", "name": "setCertificateVerifyProc", + "signature": "(proc)", "description": "Sets the certificate verify proc for session, the proc will be called with proc(request, callback) whenever a server certificate verification is requested. Calling callback(0) accepts the certificate, calling callback(-2) rejects it. Calling setCertificateVerifyProc(null) will revert back to default certificate verify proc.", "parameters": [ { @@ -9260,6 +22518,7 @@ { "objectID": "api-session#sessetpermissionrequesthandlerhandler", "name": "setPermissionRequestHandler", + "signature": "(handler)", "description": "Sets the handler which can be used to respond to permission requests for the session. Calling callback(true) will allow the permission and callback(false) will reject it. To clear the handler, call setPermissionRequestHandler(null).", "parameters": [ { @@ -9320,6 +22579,21 @@ "collection": false, "description": "The url of the openExternal request.", "required": true + }, + { + "name": "mediaTypes", + "type": "String", + "collection": true, + "description": "The types of media access being requested, elements can be video or audio", + "required": true, + "possibleValues": [ + { + "value": "video" + }, + { + "value": "audio" + } + ] } ] } @@ -9342,9 +22616,106 @@ "doc:ses.setPermissionRequestHandler(handler)" ] }, + { + "objectID": "api-session#sessetpermissioncheckhandlerhandler", + "name": "setPermissionCheckHandler", + "signature": "(handler)", + "description": "Sets the handler which can be used to respond to permission checks for the session. Returning true will allow the permission and false will reject it. To clear the handler, call setPermissionCheckHandler(null).", + "parameters": [ + { + "name": "handler", + "type": [ + { + "typeName": "Function", + "collection": false, + "innerType": "Boolean" + }, + { + "typeName": "null", + "collection": false + } + ], + "collection": false, + "required": true, + "parameters": [ + { + "name": "webContents", + "type": "WebContents", + "collection": false, + "description": "WebContents checking the permission.", + "required": true + }, + { + "name": "permission", + "type": "String", + "collection": false, + "description": "Enum of 'media'.", + "required": true + }, + { + "name": "requestingOrigin", + "type": "String", + "collection": false, + "description": "The origin URL of the permission check", + "required": true + }, + { + "name": "details", + "type": "Object", + "collection": false, + "description": "Some properties are only available on certain permission types.", + "required": true, + "properties": [ + { + "name": "securityOrigin", + "type": "String", + "collection": false, + "description": "The security orign of the media check.", + "required": true + }, + { + "name": "mediaType", + "type": "String", + "collection": false, + "description": "The type of media access being requested, can be video, audio or unknown", + "required": true, + "possibleValues": [ + { + "value": "video" + }, + { + "value": "audio" + }, + { + "value": "unknown" + } + ] + } + ] + } + ] + } + ], + "apiType": "instanceMethod", + "fullSignature": "ses.setPermissionCheckHandler(handler)", + "tldr": "Sets the handler which can be used to respond to permission checks for the session.", + "slug": "sessetpermissioncheckhandlerhandler", + "url": "https://electronjs.org/docs/api/session#sessetpermissioncheckhandlerhandler", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setPermissionCheckHandler", + "api:sessetpermissioncheckhandlerhandler", + "api:ses.setPermissionCheckHandler(handler)", + "doc:setPermissionCheckHandler", + "doc:sessetpermissioncheckhandlerhandler", + "doc:ses.setPermissionCheckHandler(handler)" + ] + }, { "objectID": "api-session#sesclearhostresolvercachecallback", "name": "clearHostResolverCache", + "signature": "([callback])", "description": "Clears the host resolver cache.", "parameters": [ { @@ -9374,6 +22745,7 @@ { "objectID": "api-session#sesallowntlmcredentialsfordomainsdomains", "name": "allowNTLMCredentialsForDomains", + "signature": "(domains)", "description": "Dynamically sets whether to always send credentials for HTTP NTLM or Negotiate authentication.", "parameters": [ { @@ -9403,6 +22775,7 @@ { "objectID": "api-session#sessetuseragentuseragent-acceptlanguages", "name": "setUserAgent", + "signature": "(userAgent[, acceptLanguages])", "description": "Overrides the userAgent and acceptLanguages for this session. The acceptLanguages must a comma separated ordered list of language codes, for example \"en-US,fr,de,ko,zh-CN,ja\". This doesn't affect existing WebContents, and each WebContents can use webContents.setUserAgent to override the session-wide user agent.", "parameters": [ { @@ -9437,6 +22810,7 @@ { "objectID": "api-session#sesgetuseragent", "name": "getUserAgent", + "signature": "()", "returns": { "type": "String", "collection": false, @@ -9461,6 +22835,7 @@ { "objectID": "api-session#sesgetblobdataidentifier-callback", "name": "getBlobData", + "signature": "(identifier, callback)", "parameters": [ { "name": "identifier", @@ -9504,6 +22879,7 @@ { "objectID": "api-session#sescreateinterrupteddownloadoptions", "name": "createInterruptedDownload", + "signature": "(options)", "description": "Allows resuming cancelled or interrupted downloads from previous Session. The API will generate a DownloadItem that can be accessed with the will-download event. The DownloadItem will not have any WebContents associated with it and the initial state will be interrupted. The download will start only when the resume API is called on the DownloadItem.", "parameters": [ { @@ -9590,6 +22966,7 @@ { "objectID": "api-session#sesclearauthcacheoptions-callback", "name": "clearAuthCache", + "signature": "(options[, callback])", "description": "Clears the session’s HTTP authentication cache.", "parameters": [ { @@ -9634,6 +23011,7 @@ { "objectID": "api-session#sessetpreloadspreloads", "name": "setPreloads", + "signature": "(preloads)", "description": "Adds scripts that will be executed on ALL web contents that are associated with this session just before normal preload scripts run.", "parameters": [ { @@ -9663,6 +23041,7 @@ { "objectID": "api-session#sesgetpreloads", "name": "getPreloads", + "signature": "()", "returns": { "type": "String", "collection": true, @@ -9711,18 +23090,2016 @@ "apiType": "event", "fullSignature": "ses.on('will-download')", "url": "https://electronjs.org/docs/api/session#event-will-download", + "slug": "sesonwill-download", "tldr": "Emitted when Electron is about to download item in webContents.", "keyValuePairs": [ "is:doc", "is:api", "api:will-download", - "api:undefined", + "api:sesonwill-download", "api:ses.on('will-download')", "doc:will-download", - "doc:undefined", + "doc:sesonwill-download", "doc:ses.on('will-download')" ] }, + { + "objectID": "api-shell#shellshowiteminfolder", + "name": "showItemInFolder", + "signature": "(fullPath)", + "description": "Show the given file in a file manager. If possible, select the file.", + "parameters": [ + { + "name": "fullPath", + "type": "String", + "collection": false, + "required": true + } + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the item was successfully shown." + }, + "apiType": "methods", + "fullSignature": "shell.showItemInFolder", + "tldr": "Show the given file in a file manager.", + "slug": "shellshowiteminfolder", + "url": "https://electronjs.org/docs/api/shell#shellshowiteminfolder", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:showItemInFolder", + "api:shellshowiteminfolder", + "api:shell.showItemInFolder", + "doc:showItemInFolder", + "doc:shellshowiteminfolder", + "doc:shell.showItemInFolder" + ] + }, + { + "objectID": "api-shell#shellopenitem", + "name": "openItem", + "signature": "(fullPath)", + "description": "Open the given file in the desktop's default manner.", + "parameters": [ + { + "name": "fullPath", + "type": "String", + "collection": false, + "required": true + } + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the item was successfully opened." + }, + "apiType": "methods", + "fullSignature": "shell.openItem", + "tldr": "Open the given file in the desktop's default manner.", + "slug": "shellopenitem", + "url": "https://electronjs.org/docs/api/shell#shellopenitem", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:openItem", + "api:shellopenitem", + "api:shell.openItem", + "doc:openItem", + "doc:shellopenitem", + "doc:shell.openItem" + ] + }, + { + "objectID": "api-shell#shellopenexternalsync", + "name": "openExternalSync", + "signature": "(url[, options])", + "description": "Open the given external protocol URL in the desktop's default manner. (For example, mailto: URLs in the user's default mail agent).", + "parameters": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "Max 2081 characters on Windows, or the function returns false.", + "required": true + }, + { + "name": "options", + "type": "Object", + "collection": false, + "required": false, + "properties": [ + { + "name": "activate", + "type": "Boolean", + "collection": false, + "description": "true to bring the opened application to the foreground. The default is true.", + "required": false + }, + { + "name": "workingDirectory", + "type": "String", + "collection": false, + "description": "The working directory.", + "required": false + } + ] + } + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether an application was available to open the URL." + }, + "apiType": "methods", + "fullSignature": "shell.openExternalSync", + "tldr": "Open the given external protocol URL in the desktop's default manner.", + "slug": "shellopenexternalsync", + "url": "https://electronjs.org/docs/api/shell#shellopenexternalsync", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:openExternalSync", + "api:shellopenexternalsync", + "api:shell.openExternalSync", + "doc:openExternalSync", + "doc:shellopenexternalsync", + "doc:shell.openExternalSync" + ] + }, + { + "objectID": "api-shell#shellopenexternal", + "name": "openExternal", + "signature": "(url[, options])", + "description": "Open the given external protocol URL in the desktop's default manner. (For example, mailto: URLs in the user's default mail agent).", + "parameters": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "Max 2081 characters on windows.", + "required": true + }, + { + "name": "options", + "type": "Object", + "collection": false, + "required": false, + "properties": [ + { + "name": "activate", + "type": "Boolean", + "collection": false, + "description": "true to bring the opened application to the foreground. The default is true.", + "required": false + }, + { + "name": "workingDirectory", + "type": "String", + "collection": false, + "description": "The working directory.", + "required": false + } + ] + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "void" + }, + "apiType": "methods", + "fullSignature": "shell.openExternal", + "tldr": "Open the given external protocol URL in the desktop's default manner.", + "slug": "shellopenexternal", + "url": "https://electronjs.org/docs/api/shell#shellopenexternal", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:openExternal", + "api:shellopenexternal", + "api:shell.openExternal", + "doc:openExternal", + "doc:shellopenexternal", + "doc:shell.openExternal" + ] + }, + { + "objectID": "api-shell#shellmoveitemtotrash", + "name": "moveItemToTrash", + "signature": "(fullPath)", + "description": "Move the given file to trash and returns a boolean status for the operation.", + "parameters": [ + { + "name": "fullPath", + "type": "String", + "collection": false, + "required": true + } + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the item was successfully moved to the trash." + }, + "apiType": "methods", + "fullSignature": "shell.moveItemToTrash", + "tldr": "Move the given file to trash and returns a boolean status for the operation.", + "slug": "shellmoveitemtotrash", + "url": "https://electronjs.org/docs/api/shell#shellmoveitemtotrash", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:moveItemToTrash", + "api:shellmoveitemtotrash", + "api:shell.moveItemToTrash", + "doc:moveItemToTrash", + "doc:shellmoveitemtotrash", + "doc:shell.moveItemToTrash" + ] + }, + { + "objectID": "api-shell#shellbeep", + "name": "beep", + "signature": "()", + "description": "Play the beep sound.", + "apiType": "methods", + "fullSignature": "shell.beep", + "tldr": "Play the beep sound.", + "slug": "shellbeep", + "url": "https://electronjs.org/docs/api/shell#shellbeep", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:beep", + "api:shellbeep", + "api:shell.beep", + "doc:beep", + "doc:shellbeep", + "doc:shell.beep" + ] + }, + { + "objectID": "api-shell#shellwriteshortcutlink", + "name": "writeShortcutLink", + "signature": "(shortcutPath[, operation], options)", + "platforms": [ + "Windows" + ], + "description": "Creates or updates a shortcut link at shortcutPath.", + "parameters": [ + { + "name": "shortcutPath", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "operation", + "type": "String", + "collection": false, + "description": "Default is `create`, can be one of following:", + "required": false, + "possibleValues": [ + { + "value": "create", + "description": "Creates a new shortcut, overwriting if necessary." + }, + { + "value": "update", + "description": "Updates specified properties only on an existing shortcut." + }, + { + "value": "replace", + "description": "Overwrites an existing shortcut, fails if the shortcut doesn't exist." + } + ] + }, + { + "name": "options", + "type": "ShortcutDetails", + "collection": false, + "required": true + } + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the shortcut was created successfully." + }, + "apiType": "methods", + "fullSignature": "shell.writeShortcutLink", + "tldr": "Creates or updates a shortcut link at shortcutPath.", + "slug": "shellwriteshortcutlink", + "url": "https://electronjs.org/docs/api/shell#shellwriteshortcutlink", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:writeShortcutLink", + "api:shellwriteshortcutlink", + "api:shell.writeShortcutLink", + "doc:writeShortcutLink", + "doc:shellwriteshortcutlink", + "doc:shell.writeShortcutLink" + ] + }, + { + "objectID": "api-shell#shellreadshortcutlink", + "name": "readShortcutLink", + "signature": "(shortcutPath)", + "platforms": [ + "Windows" + ], + "description": "Resolves the shortcut link at shortcutPath. An exception will be thrown when any error happens.", + "parameters": [ + { + "name": "shortcutPath", + "type": "String", + "collection": false, + "required": true + } + ], + "returns": { + "type": "ShortcutDetails", + "collection": false + }, + "apiType": "methods", + "fullSignature": "shell.readShortcutLink", + "tldr": "Resolves the shortcut link at shortcutPath.", + "slug": "shellreadshortcutlink", + "url": "https://electronjs.org/docs/api/shell#shellreadshortcutlink", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:readShortcutLink", + "api:shellreadshortcutlink", + "api:shell.readShortcutLink", + "doc:readShortcutLink", + "doc:shellreadshortcutlink", + "doc:shell.readShortcutLink" + ] + }, + { + "objectID": "api-shortcut-details#shortcutdetailstarget", + "name": "target", + "type": "String", + "collection": false, + "description": "The target to launch from this shortcut.", + "required": true, + "apiType": "properties", + "fullSignature": "ShortcutDetails.target", + "tldr": "The target to launch from this shortcut.", + "slug": "shortcutdetailstarget", + "url": "https://electronjs.org/docs/api/shortcut-details#shortcutdetailstarget", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:target", + "api:shortcutdetailstarget", + "api:ShortcutDetails.target", + "doc:target", + "doc:shortcutdetailstarget", + "doc:ShortcutDetails.target" + ] + }, + { + "objectID": "api-shortcut-details#shortcutdetailscwd", + "name": "cwd", + "type": "String", + "collection": false, + "description": "The working directory. Default is empty.", + "required": false, + "apiType": "properties", + "fullSignature": "ShortcutDetails.cwd", + "tldr": "The working directory.", + "slug": "shortcutdetailscwd", + "url": "https://electronjs.org/docs/api/shortcut-details#shortcutdetailscwd", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:cwd", + "api:shortcutdetailscwd", + "api:ShortcutDetails.cwd", + "doc:cwd", + "doc:shortcutdetailscwd", + "doc:ShortcutDetails.cwd" + ] + }, + { + "objectID": "api-shortcut-details#shortcutdetailsargs", + "name": "args", + "type": "String", + "collection": false, + "description": "The arguments to be applied to target when launching from this shortcut. Default is empty.", + "required": false, + "apiType": "properties", + "fullSignature": "ShortcutDetails.args", + "tldr": "The arguments to be applied to target when launching from this shortcut.", + "slug": "shortcutdetailsargs", + "url": "https://electronjs.org/docs/api/shortcut-details#shortcutdetailsargs", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:args", + "api:shortcutdetailsargs", + "api:ShortcutDetails.args", + "doc:args", + "doc:shortcutdetailsargs", + "doc:ShortcutDetails.args" + ] + }, + { + "objectID": "api-shortcut-details#shortcutdetailsdescription", + "name": "description", + "type": "String", + "collection": false, + "description": "The description of the shortcut. Default is empty.", + "required": false, + "apiType": "properties", + "fullSignature": "ShortcutDetails.description", + "tldr": "The description of the shortcut.", + "slug": "shortcutdetailsdescription", + "url": "https://electronjs.org/docs/api/shortcut-details#shortcutdetailsdescription", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:description", + "api:shortcutdetailsdescription", + "api:ShortcutDetails.description", + "doc:description", + "doc:shortcutdetailsdescription", + "doc:ShortcutDetails.description" + ] + }, + { + "objectID": "api-shortcut-details#shortcutdetailsicon", + "name": "icon", + "type": "String", + "collection": false, + "description": "The path to the icon, can be a DLL or EXE. icon and iconIndex have to be set together. Default is empty, which uses the target's icon.", + "required": false, + "apiType": "properties", + "fullSignature": "ShortcutDetails.icon", + "tldr": "The path to the icon, can be a DLL or EXE.", + "slug": "shortcutdetailsicon", + "url": "https://electronjs.org/docs/api/shortcut-details#shortcutdetailsicon", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:icon", + "api:shortcutdetailsicon", + "api:ShortcutDetails.icon", + "doc:icon", + "doc:shortcutdetailsicon", + "doc:ShortcutDetails.icon" + ] + }, + { + "objectID": "api-shortcut-details#shortcutdetailsiconindex", + "name": "iconIndex", + "type": "Number", + "collection": false, + "description": "The resource ID of icon when icon is a DLL or EXE. Default is 0.", + "required": false, + "apiType": "properties", + "fullSignature": "ShortcutDetails.iconIndex", + "tldr": "The resource ID of icon when icon is a DLL or EXE.", + "slug": "shortcutdetailsiconindex", + "url": "https://electronjs.org/docs/api/shortcut-details#shortcutdetailsiconindex", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:iconIndex", + "api:shortcutdetailsiconindex", + "api:ShortcutDetails.iconIndex", + "doc:iconIndex", + "doc:shortcutdetailsiconindex", + "doc:ShortcutDetails.iconIndex" + ] + }, + { + "objectID": "api-shortcut-details#shortcutdetailsappusermodelid", + "name": "appUserModelId", + "type": "String", + "collection": false, + "description": "The Application User Model ID. Default is empty.", + "required": false, + "apiType": "properties", + "fullSignature": "ShortcutDetails.appUserModelId", + "tldr": "The Application User Model ID.", + "slug": "shortcutdetailsappusermodelid", + "url": "https://electronjs.org/docs/api/shortcut-details#shortcutdetailsappusermodelid", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:appUserModelId", + "api:shortcutdetailsappusermodelid", + "api:ShortcutDetails.appUserModelId", + "doc:appUserModelId", + "doc:shortcutdetailsappusermodelid", + "doc:ShortcutDetails.appUserModelId" + ] + }, + { + "objectID": "api-size#sizewidth", + "name": "width", + "type": "Number", + "collection": false, + "description": "", + "required": true, + "apiType": "properties", + "fullSignature": "Size.width", + "tldr": null, + "slug": "sizewidth", + "url": "https://electronjs.org/docs/api/size#sizewidth", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:width", + "api:sizewidth", + "api:Size.width", + "doc:width", + "doc:sizewidth", + "doc:Size.width" + ] + }, + { + "objectID": "api-size#sizeheight", + "name": "height", + "type": "Number", + "collection": false, + "description": "", + "required": true, + "apiType": "properties", + "fullSignature": "Size.height", + "tldr": null, + "slug": "sizeheight", + "url": "https://electronjs.org/docs/api/size#sizeheight", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:height", + "api:sizeheight", + "api:Size.height", + "doc:height", + "doc:sizeheight", + "doc:Size.height" + ] + }, + { + "objectID": "api-stream-protocol-response#streamprotocolresponsestatuscode", + "name": "statusCode", + "type": "Number", + "collection": false, + "description": "The HTTP response code.", + "required": true, + "apiType": "properties", + "fullSignature": "StreamProtocolResponse.statusCode", + "tldr": "The HTTP response code.", + "slug": "streamprotocolresponsestatuscode", + "url": "https://electronjs.org/docs/api/stream-protocol-response#streamprotocolresponsestatuscode", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:statusCode", + "api:streamprotocolresponsestatuscode", + "api:StreamProtocolResponse.statusCode", + "doc:statusCode", + "doc:streamprotocolresponsestatuscode", + "doc:StreamProtocolResponse.statusCode" + ] + }, + { + "objectID": "api-stream-protocol-response#streamprotocolresponseheaders", + "name": "headers", + "type": "Object", + "collection": false, + "description": "An object containing the response headers.", + "required": true, + "properties": [], + "apiType": "properties", + "fullSignature": "StreamProtocolResponse.headers", + "tldr": "An object containing the response headers.", + "slug": "streamprotocolresponseheaders", + "url": "https://electronjs.org/docs/api/stream-protocol-response#streamprotocolresponseheaders", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:headers", + "api:streamprotocolresponseheaders", + "api:StreamProtocolResponse.headers", + "doc:headers", + "doc:streamprotocolresponseheaders", + "doc:StreamProtocolResponse.headers" + ] + }, + { + "objectID": "api-stream-protocol-response#streamprotocolresponsedata", + "name": "data", + "type": "ReadableStream", + "collection": false, + "description": "A Node.js readable stream representing the response body.", + "required": true, + "apiType": "properties", + "fullSignature": "StreamProtocolResponse.data", + "tldr": "A Node.js readable stream representing the response body.", + "slug": "streamprotocolresponsedata", + "url": "https://electronjs.org/docs/api/stream-protocol-response#streamprotocolresponsedata", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:data", + "api:streamprotocolresponsedata", + "api:StreamProtocolResponse.data", + "doc:data", + "doc:streamprotocolresponsedata", + "doc:StreamProtocolResponse.data" + ] + }, + { + "objectID": "api-system-preferences#systempreferencesisdarkmode", + "name": "isDarkMode", + "signature": "()", + "platforms": [ + "macOS" + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the system is in Dark Mode." + }, + "apiType": "methods", + "fullSignature": "systemPreferences.isDarkMode", + "tldr": "Returns whether the system is in Dark Mode.", + "slug": "systempreferencesisdarkmode", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencesisdarkmode", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isDarkMode", + "api:systempreferencesisdarkmode", + "api:systemPreferences.isDarkMode", + "doc:isDarkMode", + "doc:systempreferencesisdarkmode", + "doc:systemPreferences.isDarkMode" + ] + }, + { + "objectID": "api-system-preferences#systempreferencesisswipetrackingfromscrolleventsenabled", + "name": "isSwipeTrackingFromScrollEventsEnabled", + "signature": "()", + "platforms": [ + "macOS" + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the Swipe between pages setting is on." + }, + "apiType": "methods", + "fullSignature": "systemPreferences.isSwipeTrackingFromScrollEventsEnabled", + "tldr": "Returns whether the Swipe between pages setting is on.", + "slug": "systempreferencesisswipetrackingfromscrolleventsenabled", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencesisswipetrackingfromscrolleventsenabled", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isSwipeTrackingFromScrollEventsEnabled", + "api:systempreferencesisswipetrackingfromscrolleventsenabled", + "api:systemPreferences.isSwipeTrackingFromScrollEventsEnabled", + "doc:isSwipeTrackingFromScrollEventsEnabled", + "doc:systempreferencesisswipetrackingfromscrolleventsenabled", + "doc:systemPreferences.isSwipeTrackingFromScrollEventsEnabled" + ] + }, + { + "objectID": "api-system-preferences#systempreferencespostnotification", + "name": "postNotification", + "signature": "(event, userInfo[, deliverImmediately])", + "platforms": [ + "macOS" + ], + "description": "Posts event as native notifications of macOS. The userInfo is an Object that contains the user information dictionary sent along with the notification.", + "parameters": [ + { + "name": "event", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "userInfo", + "type": "Object", + "collection": false, + "required": true + }, + { + "name": "deliverImmediately", + "type": "Boolean", + "collection": false, + "description": "`true` to post notifications immediately even when the subscribing app is inactive.", + "required": false + } + ], + "apiType": "methods", + "fullSignature": "systemPreferences.postNotification", + "tldr": "Posts event as native notifications of macOS.", + "slug": "systempreferencespostnotification", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencespostnotification", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:postNotification", + "api:systempreferencespostnotification", + "api:systemPreferences.postNotification", + "doc:postNotification", + "doc:systempreferencespostnotification", + "doc:systemPreferences.postNotification" + ] + }, + { + "objectID": "api-system-preferences#systempreferencespostlocalnotification", + "name": "postLocalNotification", + "signature": "(event, userInfo)", + "platforms": [ + "macOS" + ], + "description": "Posts event as native notifications of macOS. The userInfo is an Object that contains the user information dictionary sent along with the notification.", + "parameters": [ + { + "name": "event", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "userInfo", + "type": "Object", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "systemPreferences.postLocalNotification", + "tldr": "Posts event as native notifications of macOS.", + "slug": "systempreferencespostlocalnotification", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencespostlocalnotification", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:postLocalNotification", + "api:systempreferencespostlocalnotification", + "api:systemPreferences.postLocalNotification", + "doc:postLocalNotification", + "doc:systempreferencespostlocalnotification", + "doc:systemPreferences.postLocalNotification" + ] + }, + { + "objectID": "api-system-preferences#systempreferencespostworkspacenotification", + "name": "postWorkspaceNotification", + "signature": "(event, userInfo)", + "platforms": [ + "macOS" + ], + "description": "Posts event as native notifications of macOS. The userInfo is an Object that contains the user information dictionary sent along with the notification.", + "parameters": [ + { + "name": "event", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "userInfo", + "type": "Object", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "systemPreferences.postWorkspaceNotification", + "tldr": "Posts event as native notifications of macOS.", + "slug": "systempreferencespostworkspacenotification", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencespostworkspacenotification", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:postWorkspaceNotification", + "api:systempreferencespostworkspacenotification", + "api:systemPreferences.postWorkspaceNotification", + "doc:postWorkspaceNotification", + "doc:systempreferencespostworkspacenotification", + "doc:systemPreferences.postWorkspaceNotification" + ] + }, + { + "objectID": "api-system-preferences#systempreferencessubscribenotification", + "name": "subscribeNotification", + "signature": "(event, callback)", + "platforms": [ + "macOS" + ], + "description": "Subscribes to native notifications of macOS, callback will be called with callback(event, userInfo) when the corresponding event happens. The userInfo is an Object that contains the user information dictionary sent along with the notification. The id of the subscriber is returned, which can be used to unsubscribe the event. Under the hood this API subscribes to NSDistributedNotificationCenter, example values of event are:", + "parameters": [ + { + "name": "event", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "event", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "userInfo", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [] + } + ] + } + ], + "returns": { + "type": "Number", + "collection": false, + "description": "The ID of this subscription" + }, + "apiType": "methods", + "fullSignature": "systemPreferences.subscribeNotification", + "tldr": "Subscribes to native notifications of macOS, callback will be called with callback(event, userInfo) when the corresponding event happens.", + "slug": "systempreferencessubscribenotification", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencessubscribenotification", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:subscribeNotification", + "api:systempreferencessubscribenotification", + "api:systemPreferences.subscribeNotification", + "doc:subscribeNotification", + "doc:systempreferencessubscribenotification", + "doc:systemPreferences.subscribeNotification" + ] + }, + { + "objectID": "api-system-preferences#systempreferencessubscribelocalnotification", + "name": "subscribeLocalNotification", + "signature": "(event, callback)", + "platforms": [ + "macOS" + ], + "description": "Same as subscribeNotification, but uses NSNotificationCenter for local defaults. This is necessary for events such as NSUserDefaultsDidChangeNotification.", + "parameters": [ + { + "name": "event", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "event", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "userInfo", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [] + } + ] + } + ], + "returns": { + "type": "Number", + "collection": false, + "description": "The ID of this subscription" + }, + "apiType": "methods", + "fullSignature": "systemPreferences.subscribeLocalNotification", + "tldr": "Same as subscribeNotification, but uses NSNotificationCenter for local defaults.", + "slug": "systempreferencessubscribelocalnotification", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencessubscribelocalnotification", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:subscribeLocalNotification", + "api:systempreferencessubscribelocalnotification", + "api:systemPreferences.subscribeLocalNotification", + "doc:subscribeLocalNotification", + "doc:systempreferencessubscribelocalnotification", + "doc:systemPreferences.subscribeLocalNotification" + ] + }, + { + "objectID": "api-system-preferences#systempreferencessubscribeworkspacenotification", + "name": "subscribeWorkspaceNotification", + "signature": "(event, callback)", + "platforms": [ + "macOS" + ], + "description": "Same as subscribeNotification, but uses NSWorkspace.sharedWorkspace.notificationCenter. This is necessary for events such as NSWorkspaceDidActivateApplicationNotification.", + "parameters": [ + { + "name": "event", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "event", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "userInfo", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [] + } + ] + } + ], + "apiType": "methods", + "fullSignature": "systemPreferences.subscribeWorkspaceNotification", + "tldr": "Same as subscribeNotification, but uses NSWorkspace.sharedWorkspace.notificationCenter.", + "slug": "systempreferencessubscribeworkspacenotification", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencessubscribeworkspacenotification", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:subscribeWorkspaceNotification", + "api:systempreferencessubscribeworkspacenotification", + "api:systemPreferences.subscribeWorkspaceNotification", + "doc:subscribeWorkspaceNotification", + "doc:systempreferencessubscribeworkspacenotification", + "doc:systemPreferences.subscribeWorkspaceNotification" + ] + }, + { + "objectID": "api-system-preferences#systempreferencesunsubscribenotification", + "name": "unsubscribeNotification", + "signature": "(id)", + "platforms": [ + "macOS" + ], + "description": "Removes the subscriber with id.", + "parameters": [ + { + "name": "id", + "type": "Integer", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "systemPreferences.unsubscribeNotification", + "tldr": "Removes the subscriber with id.", + "slug": "systempreferencesunsubscribenotification", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencesunsubscribenotification", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:unsubscribeNotification", + "api:systempreferencesunsubscribenotification", + "api:systemPreferences.unsubscribeNotification", + "doc:unsubscribeNotification", + "doc:systempreferencesunsubscribenotification", + "doc:systemPreferences.unsubscribeNotification" + ] + }, + { + "objectID": "api-system-preferences#systempreferencesunsubscribelocalnotification", + "name": "unsubscribeLocalNotification", + "signature": "(id)", + "platforms": [ + "macOS" + ], + "description": "Same as unsubscribeNotification, but removes the subscriber from NSNotificationCenter.", + "parameters": [ + { + "name": "id", + "type": "Integer", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "systemPreferences.unsubscribeLocalNotification", + "tldr": "Same as unsubscribeNotification, but removes the subscriber from NSNotificationCenter.", + "slug": "systempreferencesunsubscribelocalnotification", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencesunsubscribelocalnotification", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:unsubscribeLocalNotification", + "api:systempreferencesunsubscribelocalnotification", + "api:systemPreferences.unsubscribeLocalNotification", + "doc:unsubscribeLocalNotification", + "doc:systempreferencesunsubscribelocalnotification", + "doc:systemPreferences.unsubscribeLocalNotification" + ] + }, + { + "objectID": "api-system-preferences#systempreferencesunsubscribeworkspacenotification", + "name": "unsubscribeWorkspaceNotification", + "signature": "(id)", + "platforms": [ + "macOS" + ], + "description": "Same as unsubscribeNotification, but removes the subscriber from NSWorkspace.sharedWorkspace.notificationCenter.", + "parameters": [ + { + "name": "id", + "type": "Integer", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "systemPreferences.unsubscribeWorkspaceNotification", + "tldr": "Same as unsubscribeNotification, but removes the subscriber from NSWorkspace.sharedWorkspace.notificationCenter.", + "slug": "systempreferencesunsubscribeworkspacenotification", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencesunsubscribeworkspacenotification", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:unsubscribeWorkspaceNotification", + "api:systempreferencesunsubscribeworkspacenotification", + "api:systemPreferences.unsubscribeWorkspaceNotification", + "doc:unsubscribeWorkspaceNotification", + "doc:systempreferencesunsubscribeworkspacenotification", + "doc:systemPreferences.unsubscribeWorkspaceNotification" + ] + }, + { + "objectID": "api-system-preferences#systempreferencesregisterdefaults", + "name": "registerDefaults", + "signature": "(defaults)", + "platforms": [ + "macOS" + ], + "description": "Add the specified defaults to your application's NSUserDefaults.", + "parameters": [ + { + "name": "defaults", + "type": "Object", + "collection": false, + "description": "a dictionary of (`key: value`) user defaults", + "required": true + } + ], + "apiType": "methods", + "fullSignature": "systemPreferences.registerDefaults", + "tldr": "Add the specified defaults to your application's NSUserDefaults.", + "slug": "systempreferencesregisterdefaults", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencesregisterdefaults", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:registerDefaults", + "api:systempreferencesregisterdefaults", + "api:systemPreferences.registerDefaults", + "doc:registerDefaults", + "doc:systempreferencesregisterdefaults", + "doc:systemPreferences.registerDefaults" + ] + }, + { + "objectID": "api-system-preferences#systempreferencesgetuserdefault", + "name": "getUserDefault", + "signature": "(key, type)", + "platforms": [ + "macOS" + ], + "description": "Some popular key and types are:", + "parameters": [ + { + "name": "key", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "type", + "type": "String", + "collection": false, + "description": "Can be `string`, `boolean`, `integer`, `float`, `double`, `url`, `array` or `dictionary`.", + "required": true, + "possibleValues": [ + { + "value": "string" + }, + { + "value": "boolean" + }, + { + "value": "integer" + }, + { + "value": "float" + }, + { + "value": "double" + }, + { + "value": "url" + }, + { + "value": "array" + }, + { + "value": "dictionary" + } + ] + } + ], + "returns": { + "type": "any", + "collection": false, + "description": "The value of key in NSUserDefaults." + }, + "apiType": "methods", + "fullSignature": "systemPreferences.getUserDefault", + "tldr": "Some popular key and types are:.", + "slug": "systempreferencesgetuserdefault", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencesgetuserdefault", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getUserDefault", + "api:systempreferencesgetuserdefault", + "api:systemPreferences.getUserDefault", + "doc:getUserDefault", + "doc:systempreferencesgetuserdefault", + "doc:systemPreferences.getUserDefault" + ] + }, + { + "objectID": "api-system-preferences#systempreferencessetuserdefault", + "name": "setUserDefault", + "signature": "(key, type, value)", + "platforms": [ + "macOS" + ], + "description": "Set the value of key in NSUserDefaults. Note that type should match actual type of value. An exception is thrown if they don't. Some popular key and types are:", + "parameters": [ + { + "name": "key", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "type", + "type": "String", + "collection": false, + "description": "See .", + "required": true + }, + { + "name": "value", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "systemPreferences.setUserDefault", + "tldr": "Set the value of key in NSUserDefaults.", + "slug": "systempreferencessetuserdefault", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencessetuserdefault", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setUserDefault", + "api:systempreferencessetuserdefault", + "api:systemPreferences.setUserDefault", + "doc:setUserDefault", + "doc:systempreferencessetuserdefault", + "doc:systemPreferences.setUserDefault" + ] + }, + { + "objectID": "api-system-preferences#systempreferencesremoveuserdefault", + "name": "removeUserDefault", + "signature": "(key)", + "platforms": [ + "macOS" + ], + "description": "Removes the key in NSUserDefaults. This can be used to restore the default or global value of a key previously set with setUserDefault.", + "parameters": [ + { + "name": "key", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "systemPreferences.removeUserDefault", + "tldr": "Removes the key in NSUserDefaults.", + "slug": "systempreferencesremoveuserdefault", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencesremoveuserdefault", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:removeUserDefault", + "api:systempreferencesremoveuserdefault", + "api:systemPreferences.removeUserDefault", + "doc:removeUserDefault", + "doc:systempreferencesremoveuserdefault", + "doc:systemPreferences.removeUserDefault" + ] + }, + { + "objectID": "api-system-preferences#systempreferencesisaeroglassenabled", + "name": "isAeroGlassEnabled", + "signature": "()", + "platforms": [ + "Windows" + ], + "description": "An example of using it to determine if you should create a transparent window or not (transparent windows won't work correctly when DWM composition is disabled):", + "returns": { + "type": "Boolean", + "collection": false, + "description": "true if DWM composition (Aero Glass) is enabled, and false otherwise." + }, + "apiType": "methods", + "fullSignature": "systemPreferences.isAeroGlassEnabled", + "tldr": "An example of using it to determine if you should create a transparent window or not (transparent windows won't work correctly when DWM composition is disabled):.", + "slug": "systempreferencesisaeroglassenabled", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencesisaeroglassenabled", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isAeroGlassEnabled", + "api:systempreferencesisaeroglassenabled", + "api:systemPreferences.isAeroGlassEnabled", + "doc:isAeroGlassEnabled", + "doc:systempreferencesisaeroglassenabled", + "doc:systemPreferences.isAeroGlassEnabled" + ] + }, + { + "objectID": "api-system-preferences#systempreferencesgetaccentcolor", + "name": "getAccentColor", + "signature": "()", + "platforms": [ + "Windows", + "macOS" + ], + "description": "This API is only available on macOS 10.14 Mojave or newer.", + "returns": { + "type": "String", + "collection": false, + "description": "The users current system wide accent color preference in RGBA hexadecimal form." + }, + "apiType": "methods", + "fullSignature": "systemPreferences.getAccentColor", + "tldr": "This API is only available on macOS 10.14 Mojave or newer.", + "slug": "systempreferencesgetaccentcolor", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencesgetaccentcolor", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getAccentColor", + "api:systempreferencesgetaccentcolor", + "api:systemPreferences.getAccentColor", + "doc:getAccentColor", + "doc:systempreferencesgetaccentcolor", + "doc:systemPreferences.getAccentColor" + ] + }, + { + "objectID": "api-system-preferences#systempreferencesgetcolor", + "name": "getColor", + "signature": "(color)", + "platforms": [ + "Windows", + "macOS" + ], + "parameters": [ + { + "name": "color", + "type": "String", + "collection": false, + "description": "One of the following values:", + "required": true, + "possibleValues": [ + { + "value": "3d-dark-shadow", + "description": "Dark shadow for three-dimensional display elements.
  • 3d-face Face color for three-dimensional display elements and for dialog box backgrounds.
  • 3d-highlight Highlight color for three-dimensional display elements.
  • 3d-light Light color for three-dimensional display elements.
  • 3d-shadow Shadow color for three-dimensional display elements.
  • active-border Active window border.
  • active-caption Active window title bar. Specifies the left side color in the color gradient of an active window's title bar if the gradient effect is enabled.
  • active-caption-gradient Right side color in the color gradient of an active window's title bar.
  • app-workspace Background color of multiple document interface (MDI) applications.
  • button-text Text on push buttons.
  • caption-text Text in caption, size box, and scroll bar arrow box.
  • desktop Desktop background color.
  • disabled-text Grayed (disabled) text.
  • highlight Item(s) selected in a control.
  • highlight-text Text of item(s) selected in a control.
  • hotlight Color for a hyperlink or hot-tracked item.
  • inactive-border Inactive window border.
  • inactive-caption Inactive window caption. Specifies the left side color in the color gradient of an inactive window's title bar if the gradient effect is enabled.
  • inactive-caption-gradient Right side color in the color gradient of an inactive window's title bar.
  • inactive-caption-text Color of text in an inactive caption.
  • info-background Background color for tooltip controls.
  • info-text Text color for tooltip controls.
  • menu Menu background.
  • menu-highlight The color used to highlight menu items when the menu appears as a flat menu.
  • menubar The background color for the menu bar when menus appear as flat menus.
  • menu-text Text in menus.
  • scrollbar Scroll bar gray area.
  • window Window background.
  • window-frame Window frame.
  • window-text Text in windows.
  • " + }, + { + "value": "3d-dark-shadow", + "description": "Dark shadow for three-dimensional display elements." + }, + { + "value": "3d-face", + "description": "Face color for three-dimensional display elements and for dialog box backgrounds." + }, + { + "value": "3d-highlight", + "description": "Highlight color for three-dimensional display elements." + }, + { + "value": "3d-light", + "description": "Light color for three-dimensional display elements." + }, + { + "value": "3d-shadow", + "description": "Shadow color for three-dimensional display elements." + }, + { + "value": "active-border", + "description": "Active window border." + }, + { + "value": "active-caption", + "description": "Active window title bar. Specifies the left side color in the color gradient of an active window's title bar if the gradient effect is enabled." + }, + { + "value": "active-caption-gradient", + "description": "Right side color in the color gradient of an active window's title bar." + }, + { + "value": "app-workspace", + "description": "Background color of multiple document interface (MDI) applications." + }, + { + "value": "button-text", + "description": "Text on push buttons." + }, + { + "value": "caption-text", + "description": "Text in caption, size box, and scroll bar arrow box." + }, + { + "value": "desktop", + "description": "Desktop background color." + }, + { + "value": "disabled-text", + "description": "Grayed (disabled) text." + }, + { + "value": "highlight", + "description": "Item(s) selected in a control." + }, + { + "value": "highlight-text", + "description": "Text of item(s) selected in a control." + }, + { + "value": "hotlight", + "description": "Color for a hyperlink or hot-tracked item." + }, + { + "value": "inactive-border", + "description": "Inactive window border." + }, + { + "value": "inactive-caption", + "description": "Inactive window caption. Specifies the left side color in the color gradient of an inactive window's title bar if the gradient effect is enabled." + }, + { + "value": "inactive-caption-gradient", + "description": "Right side color in the color gradient of an inactive window's title bar." + }, + { + "value": "inactive-caption-text", + "description": "Color of text in an inactive caption." + }, + { + "value": "info-background", + "description": "Background color for tooltip controls." + }, + { + "value": "info-text", + "description": "Text color for tooltip controls." + }, + { + "value": "menu", + "description": "Menu background." + }, + { + "value": "menu-highlight", + "description": "The color used to highlight menu items when the menu appears as a flat menu." + }, + { + "value": "menubar", + "description": "The background color for the menu bar when menus appear as flat menus." + }, + { + "value": "menu-text", + "description": "Text in menus." + }, + { + "value": "scrollbar", + "description": "Scroll bar gray area." + }, + { + "value": "window", + "description": "Window background." + }, + { + "value": "window-frame", + "description": "Window frame." + }, + { + "value": "window-text", + "description": "Text in windows." + }, + { + "value": "alternate-selected-control-text", + "description": "The text on a selected surface in a list or table.
  • control-background The background of a large interface element, such as a browser or table.
  • control The surface of a control.
  • control-text -The text of a control that isn’t disabled.
  • disabled-control-text The text of a control that’s disabled.
  • find-highlight The color of a find indicator.
  • grid The gridlines of an interface element such as a table.
  • header-text The text of a header cell in a table.
  • highlight The virtual light source onscreen.
  • keyboard-focus-indicator The ring that appears around the currently focused control when using the keyboard for interface navigation.
  • label The text of a label containing primary content.
  • link A link to other content.
  • placeholder-text A placeholder string in a control or text view.
  • quaternary-label The text of a label of lesser importance than a tertiary label such as watermark text.
  • scrubber-textured-background The background of a scrubber in the Touch Bar.
  • secondary-label The text of a label of lesser importance than a normal label such as a label used to represent a subheading or additional information.
  • selected-content-background The background for selected content in a key window or view.
  • selected-control The surface of a selected control.
  • selected-control-text The text of a selected control.
  • selected-menu-item The text of a selected menu.
  • selected-text-background The background of selected text.
  • selected-text Selected text.
  • separator A separator between different sections of content.
  • shadow The virtual shadow cast by a raised object onscreen.
  • tertiary-label The text of a label of lesser importance than a secondary label such as a label used to represent disabled text.
  • text-background Text background.
  • text The text in a document.
  • under-page-background The background behind a document's content.
  • unemphasized-selected-content-background The selected content in a non-key window or view.
  • unemphasized-selected-text-background A background for selected text in a non-key window or view.
  • unemphasized-selected-text Selected text in a non-key window or view.
  • window-background The background of a window.
  • window-frame-text The text in the window's titlebar area.
  • " + }, + { + "value": "alternate-selected-control-text", + "description": "The text on a selected surface in a list or table." + }, + { + "value": "control-background", + "description": "The background of a large interface element, such as a browser or table." + }, + { + "value": "control", + "description": "The surface of a control." + }, + { + "value": "control-text", + "description": "" + }, + { + "value": "disabled-control-text", + "description": "The text of a control that’s disabled." + }, + { + "value": "find-highlight", + "description": "The color of a find indicator." + }, + { + "value": "grid", + "description": "The gridlines of an interface element such as a table." + }, + { + "value": "header-text", + "description": "The text of a header cell in a table." + }, + { + "value": "highlight", + "description": "The virtual light source onscreen." + }, + { + "value": "keyboard-focus-indicator", + "description": "The ring that appears around the currently focused control when using the keyboard for interface navigation." + }, + { + "value": "label", + "description": "The text of a label containing primary content." + }, + { + "value": "link", + "description": "A link to other content." + }, + { + "value": "placeholder-text", + "description": "A placeholder string in a control or text view." + }, + { + "value": "quaternary-label", + "description": "The text of a label of lesser importance than a tertiary label such as watermark text." + }, + { + "value": "scrubber-textured-background", + "description": "The background of a scrubber in the Touch Bar." + }, + { + "value": "secondary-label", + "description": "The text of a label of lesser importance than a normal label such as a label used to represent a subheading or additional information." + }, + { + "value": "selected-content-background", + "description": "The background for selected content in a key window or view." + }, + { + "value": "selected-control", + "description": "The surface of a selected control." + }, + { + "value": "selected-control-text", + "description": "The text of a selected control." + }, + { + "value": "selected-menu-item", + "description": "The text of a selected menu." + }, + { + "value": "selected-text-background", + "description": "The background of selected text." + }, + { + "value": "selected-text", + "description": "Selected text." + }, + { + "value": "separator", + "description": "A separator between different sections of content." + }, + { + "value": "shadow", + "description": "The virtual shadow cast by a raised object onscreen." + }, + { + "value": "tertiary-label", + "description": "The text of a label of lesser importance than a secondary label such as a label used to represent disabled text." + }, + { + "value": "text-background", + "description": "Text background." + }, + { + "value": "text", + "description": "The text in a document." + }, + { + "value": "under-page-background", + "description": "The background behind a document's content." + }, + { + "value": "unemphasized-selected-content-background", + "description": "The selected content in a non-key window or view." + }, + { + "value": "unemphasized-selected-text-background", + "description": "A background for selected text in a non-key window or view." + }, + { + "value": "unemphasized-selected-text", + "description": "Selected text in a non-key window or view." + }, + { + "value": "window-background", + "description": "The background of a window." + }, + { + "value": "window-frame-text", + "description": "The text in the window's titlebar area." + } + ] + } + ], + "returns": { + "type": "String", + "collection": false, + "description": "The system color setting in RGB hexadecimal form (#ABCDEF). See the Windows docs and the MacOS docs for more details." + }, + "apiType": "methods", + "fullSignature": "systemPreferences.getColor", + "tldr": "Returns the system color setting in RGB hexadecimal form (#ABCDEF). See the Windows docs and the MacOS docs for more details.", + "slug": "systempreferencesgetcolor", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencesgetcolor", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getColor", + "api:systempreferencesgetcolor", + "api:systemPreferences.getColor", + "doc:getColor", + "doc:systempreferencesgetcolor", + "doc:systemPreferences.getColor" + ] + }, + { + "objectID": "api-system-preferences#systempreferencesgetsystemcolor", + "name": "getSystemColor", + "signature": "(color)", + "platforms": [ + "macOS" + ], + "description": "Returns one of several standard system colors that automatically adapt to vibrancy and changes in accessibility settings like 'Increase contrast' and 'Reduce transparency'. See Apple Documentation for more details.", + "parameters": [ + { + "name": "color", + "type": "String", + "collection": false, + "description": "One of the following values:", + "required": true, + "possibleValues": [ + { + "value": "blue", + "description": "" + }, + { + "value": "brown", + "description": "" + }, + { + "value": "gray", + "description": "" + }, + { + "value": "green", + "description": "" + }, + { + "value": "orange", + "description": "" + }, + { + "value": "pink", + "description": "" + }, + { + "value": "purple", + "description": "" + }, + { + "value": "red", + "description": "" + }, + { + "value": "yellow", + "description": "" + } + ] + } + ], + "apiType": "methods", + "fullSignature": "systemPreferences.getSystemColor", + "tldr": "Returns one of several standard system colors that automatically adapt to vibrancy and changes in accessibility settings like 'Increase contrast' and 'Reduce transparency'.", + "slug": "systempreferencesgetsystemcolor", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencesgetsystemcolor", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getSystemColor", + "api:systempreferencesgetsystemcolor", + "api:systemPreferences.getSystemColor", + "doc:getSystemColor", + "doc:systempreferencesgetsystemcolor", + "doc:systemPreferences.getSystemColor" + ] + }, + { + "objectID": "api-system-preferences#systempreferencesisinvertedcolorscheme", + "name": "isInvertedColorScheme", + "signature": "()", + "platforms": [ + "Windows" + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "true if an inverted color scheme (a high contrast color scheme with light text and dark backgrounds) is active, false otherwise." + }, + "apiType": "methods", + "fullSignature": "systemPreferences.isInvertedColorScheme", + "tldr": "Returns true if an inverted color scheme (a high contrast color scheme with light text and dark backgrounds) is active, false otherwise.", + "slug": "systempreferencesisinvertedcolorscheme", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencesisinvertedcolorscheme", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isInvertedColorScheme", + "api:systempreferencesisinvertedcolorscheme", + "api:systemPreferences.isInvertedColorScheme", + "doc:isInvertedColorScheme", + "doc:systempreferencesisinvertedcolorscheme", + "doc:systemPreferences.isInvertedColorScheme" + ] + }, + { + "objectID": "api-system-preferences#systempreferencesishighcontrastcolorscheme", + "name": "isHighContrastColorScheme", + "signature": "()", + "platforms": [ + "Windows" + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "true if a high contrast theme is active, false otherwise." + }, + "apiType": "methods", + "fullSignature": "systemPreferences.isHighContrastColorScheme", + "tldr": "Returns true if a high contrast theme is active, false otherwise.", + "slug": "systempreferencesishighcontrastcolorscheme", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencesishighcontrastcolorscheme", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isHighContrastColorScheme", + "api:systempreferencesishighcontrastcolorscheme", + "api:systemPreferences.isHighContrastColorScheme", + "doc:isHighContrastColorScheme", + "doc:systempreferencesishighcontrastcolorscheme", + "doc:systemPreferences.isHighContrastColorScheme" + ] + }, + { + "objectID": "api-system-preferences#systempreferencesgeteffectiveappearance", + "name": "getEffectiveAppearance", + "signature": "()", + "platforms": [ + "macOS" + ], + "description": "Gets the macOS appearance setting that is currently applied to your application, maps to NSApplication.effectiveAppearance Please note that until Electron is built targeting the 10.14 SDK, your application's effectiveAppearance will default to 'light' and won't inherit the OS preference. In the interim in order for your application to inherit the OS preference you must set the NSRequiresAquaSystemAppearance key in your apps Info.plist to false. If you are using electron-packager or electron-forge just set the enableDarwinDarkMode packager option to true. See the Electron Packager API for more details.", + "returns": { + "type": "String", + "collection": false, + "description": "Can be dark, light or unknown.", + "possibleValues": [ + { + "value": "dark" + }, + { + "value": "light" + }, + { + "value": "unknown" + } + ] + }, + "apiType": "methods", + "fullSignature": "systemPreferences.getEffectiveAppearance", + "tldr": "Gets the macOS appearance setting that is currently applied to your application, maps to NSApplication.effectiveAppearance Please note that until Electron is built targeting the 10.14 SDK, your application's effectiveAppearance will default to 'light' and won't inherit the OS preference.", + "slug": "systempreferencesgeteffectiveappearance", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencesgeteffectiveappearance", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getEffectiveAppearance", + "api:systempreferencesgeteffectiveappearance", + "api:systemPreferences.getEffectiveAppearance", + "doc:getEffectiveAppearance", + "doc:systempreferencesgeteffectiveappearance", + "doc:systemPreferences.getEffectiveAppearance" + ] + }, + { + "objectID": "api-system-preferences#systempreferencesgetapplevelappearance", + "name": "getAppLevelAppearance", + "signature": "()", + "platforms": [ + "macOS" + ], + "description": "Gets the macOS appearance setting that you have declared you want for your application, maps to NSApplication.appearance. You can use the setAppLevelAppearance API to set this value.", + "returns": { + "type": "String", + "collection": false, + "description": "| null Can be dark, light or unknown.", + "possibleValues": [ + { + "value": "dark" + }, + { + "value": "light" + }, + { + "value": "unknown" + } + ] + }, + "apiType": "methods", + "fullSignature": "systemPreferences.getAppLevelAppearance", + "tldr": "Gets the macOS appearance setting that you have declared you want for your application, maps to NSApplication.appearance.", + "slug": "systempreferencesgetapplevelappearance", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencesgetapplevelappearance", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getAppLevelAppearance", + "api:systempreferencesgetapplevelappearance", + "api:systemPreferences.getAppLevelAppearance", + "doc:getAppLevelAppearance", + "doc:systempreferencesgetapplevelappearance", + "doc:systemPreferences.getAppLevelAppearance" + ] + }, + { + "objectID": "api-system-preferences#systempreferencessetapplevelappearance", + "name": "setAppLevelAppearance", + "signature": "(appearance)", + "platforms": [ + "macOS" + ], + "description": "Sets the appearance setting for your application, this should override the system default and override the value of getEffectiveAppearance.", + "parameters": [ + { + "name": "appearance", + "type": [ + { + "typeName": "String", + "collection": false + }, + { + "typeName": "null", + "collection": false + } + ], + "collection": false, + "description": "Can be `dark` or `light`", + "required": true, + "possibleValues": [ + { + "value": "dark" + }, + { + "value": "light" + } + ] + } + ], + "apiType": "methods", + "fullSignature": "systemPreferences.setAppLevelAppearance", + "tldr": "Sets the appearance setting for your application, this should override the system default and override the value of getEffectiveAppearance.", + "slug": "systempreferencessetapplevelappearance", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencessetapplevelappearance", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setAppLevelAppearance", + "api:systempreferencessetapplevelappearance", + "api:systemPreferences.setAppLevelAppearance", + "doc:setAppLevelAppearance", + "doc:systempreferencessetapplevelappearance", + "doc:systemPreferences.setAppLevelAppearance" + ] + }, + { + "objectID": "api-system-preferences#systempreferencesistrustedaccessibilityclient", + "name": "isTrustedAccessibilityClient", + "signature": "(prompt)", + "platforms": [ + "macOS" + ], + "parameters": [ + { + "name": "prompt", + "type": "Boolean", + "collection": false, + "description": "whether or not the user will be informed via prompt if the current process is untrusted.", + "required": true + } + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "true if the current process is a trusted accessibility client and false if it is not." + }, + "apiType": "methods", + "fullSignature": "systemPreferences.isTrustedAccessibilityClient", + "tldr": "Returns true if the current process is a trusted accessibility client and false if it is not.", + "slug": "systempreferencesistrustedaccessibilityclient", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencesistrustedaccessibilityclient", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isTrustedAccessibilityClient", + "api:systempreferencesistrustedaccessibilityclient", + "api:systemPreferences.isTrustedAccessibilityClient", + "doc:isTrustedAccessibilityClient", + "doc:systempreferencesistrustedaccessibilityclient", + "doc:systemPreferences.isTrustedAccessibilityClient" + ] + }, + { + "objectID": "api-system-preferences#systempreferencesgetmediaaccessstatus", + "name": "getMediaAccessStatus", + "signature": "(mediaType)", + "platforms": [ + "macOS" + ], + "description": "This user consent was not required until macOS 10.14 Mojave, so this method will always return granted if your system is running 10.13 High Sierra or lower.", + "parameters": [ + { + "name": "mediaType", + "type": "String", + "collection": false, + "description": "`microphone` or `camera`.", + "required": true + } + ], + "returns": { + "type": "String", + "collection": false, + "description": "Can be not-determined, granted, denied, restricted or unknown.", + "possibleValues": [ + { + "value": "not-determined" + }, + { + "value": "granted" + }, + { + "value": "denied" + }, + { + "value": "restricted" + }, + { + "value": "unknown" + } + ] + }, + "apiType": "methods", + "fullSignature": "systemPreferences.getMediaAccessStatus", + "tldr": "This user consent was not required until macOS 10.14 Mojave, so this method will always return granted if your system is running 10.13 High Sierra or lower.", + "slug": "systempreferencesgetmediaaccessstatus", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencesgetmediaaccessstatus", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getMediaAccessStatus", + "api:systempreferencesgetmediaaccessstatus", + "api:systemPreferences.getMediaAccessStatus", + "doc:getMediaAccessStatus", + "doc:systempreferencesgetmediaaccessstatus", + "doc:systemPreferences.getMediaAccessStatus" + ] + }, + { + "objectID": "api-system-preferences#systempreferencesaskformediaaccess", + "name": "askForMediaAccess", + "signature": "(mediaType)", + "platforms": [ + "macOS" + ], + "description": "Important: In order to properly leverage this API, you must set the NSMicrophoneUsageDescription and NSCameraUsageDescription strings in your app's Info.plist file. The values for these keys will be used to populate the permission dialogs so that the user will be properly informed as to the purpose of the permission request. See Electron Application Distribution for more information about how to set these in the context of Electron. This user consent was not required until macOS 10.14 Mojave, so this method will always return true if your system is running 10.13 High Sierra or lower.", + "parameters": [ + { + "name": "mediaType", + "type": "String", + "collection": false, + "description": "the type of media being requested; can be `microphone`, `camera`.", + "required": true, + "possibleValues": [ + { + "value": "microphone" + }, + { + "value": "camera" + } + ] + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "Boolean", + "description": "A promise that resolves with true if consent was granted and false if it was denied. If an invalid mediaType is passed, the promise will be rejected. If an access request was denied and later is changed through the System Preferences pane, a restart of the app will be required for the new permissions to take effect. If access has already been requested and denied, it must be changed through the preference pane; an alert will not pop up and the promise will resolve with the existing access status." + }, + "apiType": "methods", + "fullSignature": "systemPreferences.askForMediaAccess", + "tldr": "Important: In order to properly leverage this API, you must set the NSMicrophoneUsageDescription and NSCameraUsageDescription strings in your app's Info.plist file.", + "slug": "systempreferencesaskformediaaccess", + "url": "https://electronjs.org/docs/api/system-preferences#systempreferencesaskformediaaccess", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:askForMediaAccess", + "api:systempreferencesaskformediaaccess", + "api:systemPreferences.askForMediaAccess", + "doc:askForMediaAccess", + "doc:systempreferencesaskformediaaccess", + "doc:systemPreferences.askForMediaAccess" + ] + }, { "objectID": "api-system-preferences#event-accent-color-changed", "name": "accent-color-changed", @@ -9747,15 +25124,16 @@ "apiType": "event", "fullSignature": "systemPreferences.on('accent-color-changed')", "url": "https://electronjs.org/docs/api/system-preferences#event-accent-color-changed", + "slug": "systempreferencesonaccent-color-changed", "tldr": null, "keyValuePairs": [ "is:doc", "is:api", "api:accent-color-changed", - "api:undefined", + "api:systempreferencesonaccent-color-changed", "api:systemPreferences.on('accent-color-changed')", "doc:accent-color-changed", - "doc:undefined", + "doc:systempreferencesonaccent-color-changed", "doc:systemPreferences.on('accent-color-changed')" ] }, @@ -9776,15 +25154,16 @@ "apiType": "event", "fullSignature": "systemPreferences.on('color-changed')", "url": "https://electronjs.org/docs/api/system-preferences#event-color-changed", + "slug": "systempreferencesoncolor-changed", "tldr": null, "keyValuePairs": [ "is:doc", "is:api", "api:color-changed", - "api:undefined", + "api:systempreferencesoncolor-changed", "api:systemPreferences.on('color-changed')", "doc:color-changed", - "doc:undefined", + "doc:systempreferencesoncolor-changed", "doc:systemPreferences.on('color-changed')" ] }, @@ -9805,28 +25184,670 @@ "name": "invertedColorScheme", "type": "Boolean", "collection": false, - "description": "`true` if an inverted color scheme, such as a high contrast theme, is being used, `false` otherwise.", + "description": "`true` if an inverted color scheme (a high contrast color scheme with light text and dark backgrounds) is being used, `false` otherwise.", "required": true } ], "apiType": "event", "fullSignature": "systemPreferences.on('inverted-color-scheme-changed')", "url": "https://electronjs.org/docs/api/system-preferences#event-inverted-color-scheme-changed", + "slug": "systempreferencesoninverted-color-scheme-changed", "tldr": null, "keyValuePairs": [ "is:doc", "is:api", "api:inverted-color-scheme-changed", - "api:undefined", + "api:systempreferencesoninverted-color-scheme-changed", "api:systemPreferences.on('inverted-color-scheme-changed')", "doc:inverted-color-scheme-changed", - "doc:undefined", + "doc:systempreferencesoninverted-color-scheme-changed", "doc:systemPreferences.on('inverted-color-scheme-changed')" ] }, + { + "objectID": "api-system-preferences#event-high-contrast-color-scheme-changed", + "name": "high-contrast-color-scheme-changed", + "platforms": [ + "Windows" + ], + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "highContrastColorScheme", + "type": "Boolean", + "collection": false, + "description": "`true` if a high contrast theme is being used, `false` otherwise.", + "required": true + } + ], + "apiType": "event", + "fullSignature": "systemPreferences.on('high-contrast-color-scheme-changed')", + "url": "https://electronjs.org/docs/api/system-preferences#event-high-contrast-color-scheme-changed", + "slug": "systempreferencesonhigh-contrast-color-scheme-changed", + "tldr": null, + "keyValuePairs": [ + "is:doc", + "is:api", + "api:high-contrast-color-scheme-changed", + "api:systempreferencesonhigh-contrast-color-scheme-changed", + "api:systemPreferences.on('high-contrast-color-scheme-changed')", + "doc:high-contrast-color-scheme-changed", + "doc:systempreferencesonhigh-contrast-color-scheme-changed", + "doc:systemPreferences.on('high-contrast-color-scheme-changed')" + ] + }, + { + "objectID": "api-system-preferences#event-appearance-changed", + "name": "appearance-changed", + "description": "NOTE: This event is only emitted after you have called startAppLevelAppearanceTrackingOS", + "platforms": [ + "macOS" + ], + "returns": [ + { + "name": "newAppearance", + "type": "String", + "collection": false, + "description": "Can be `dark` or `light`", + "required": true, + "possibleValues": [ + { + "value": "dark" + }, + { + "value": "light" + } + ] + } + ], + "apiType": "event", + "fullSignature": "systemPreferences.on('appearance-changed')", + "url": "https://electronjs.org/docs/api/system-preferences#event-appearance-changed", + "slug": "systempreferencesonappearance-changed", + "tldr": "NOTE: This event is only emitted after you have called startAppLevelAppearanceTrackingOS.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:appearance-changed", + "api:systempreferencesonappearance-changed", + "api:systemPreferences.on('appearance-changed')", + "doc:appearance-changed", + "doc:systempreferencesonappearance-changed", + "doc:systemPreferences.on('appearance-changed')" + ] + }, + { + "objectID": "api-task#taskprogram", + "name": "program", + "type": "String", + "collection": false, + "description": "Path of the program to execute, usually you should specify process.execPath which opens the current program.", + "required": true, + "apiType": "properties", + "fullSignature": "Task.program", + "tldr": "Path of the program to execute, usually you should specify process.execPath which opens the current program.", + "slug": "taskprogram", + "url": "https://electronjs.org/docs/api/task#taskprogram", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:program", + "api:taskprogram", + "api:Task.program", + "doc:program", + "doc:taskprogram", + "doc:Task.program" + ] + }, + { + "objectID": "api-task#taskarguments", + "name": "arguments", + "type": "String", + "collection": false, + "description": "The command line arguments when program is executed.", + "required": true, + "apiType": "properties", + "fullSignature": "Task.arguments", + "tldr": "The command line arguments when program is executed.", + "slug": "taskarguments", + "url": "https://electronjs.org/docs/api/task#taskarguments", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:arguments", + "api:taskarguments", + "api:Task.arguments", + "doc:arguments", + "doc:taskarguments", + "doc:Task.arguments" + ] + }, + { + "objectID": "api-task#tasktitle", + "name": "title", + "type": "String", + "collection": false, + "description": "The string to be displayed in a JumpList.", + "required": true, + "apiType": "properties", + "fullSignature": "Task.title", + "tldr": "The string to be displayed in a JumpList.", + "slug": "tasktitle", + "url": "https://electronjs.org/docs/api/task#tasktitle", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:title", + "api:tasktitle", + "api:Task.title", + "doc:title", + "doc:tasktitle", + "doc:Task.title" + ] + }, + { + "objectID": "api-task#taskdescription", + "name": "description", + "type": "String", + "collection": false, + "description": "Description of this task.", + "required": true, + "apiType": "properties", + "fullSignature": "Task.description", + "tldr": "Description of this task.", + "slug": "taskdescription", + "url": "https://electronjs.org/docs/api/task#taskdescription", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:description", + "api:taskdescription", + "api:Task.description", + "doc:description", + "doc:taskdescription", + "doc:Task.description" + ] + }, + { + "objectID": "api-task#taskiconpath", + "name": "iconPath", + "type": "String", + "collection": false, + "description": "The absolute path to an icon to be displayed in a JumpList, which can be an arbitrary resource file that contains an icon. You can usually specify process.execPath to show the icon of the program.", + "required": true, + "apiType": "properties", + "fullSignature": "Task.iconPath", + "tldr": "The absolute path to an icon to be displayed in a JumpList, which can be an arbitrary resource file that contains an icon.", + "slug": "taskiconpath", + "url": "https://electronjs.org/docs/api/task#taskiconpath", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:iconPath", + "api:taskiconpath", + "api:Task.iconPath", + "doc:iconPath", + "doc:taskiconpath", + "doc:Task.iconPath" + ] + }, + { + "objectID": "api-task#taskiconindex", + "name": "iconIndex", + "type": "Number", + "collection": false, + "description": "The icon index in the icon file. If an icon file consists of two or more icons, set this value to identify the icon. If an icon file consists of one icon, this value is 0.", + "required": true, + "apiType": "properties", + "fullSignature": "Task.iconIndex", + "tldr": "The icon index in the icon file.", + "slug": "taskiconindex", + "url": "https://electronjs.org/docs/api/task#taskiconindex", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:iconIndex", + "api:taskiconindex", + "api:Task.iconIndex", + "doc:iconIndex", + "doc:taskiconindex", + "doc:Task.iconIndex" + ] + }, + { + "objectID": "api-thumbar-button#thumbarbuttonicon", + "name": "icon", + "type": "NativeImage", + "collection": false, + "description": "The icon showing in thumbnail toolbar.", + "required": true, + "apiType": "properties", + "fullSignature": "ThumbarButton.icon", + "tldr": "The icon showing in thumbnail toolbar.", + "slug": "thumbarbuttonicon", + "url": "https://electronjs.org/docs/api/thumbar-button#thumbarbuttonicon", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:icon", + "api:thumbarbuttonicon", + "api:ThumbarButton.icon", + "doc:icon", + "doc:thumbarbuttonicon", + "doc:ThumbarButton.icon" + ] + }, + { + "objectID": "api-thumbar-button#thumbarbuttonclick", + "name": "click", + "type": "Function", + "collection": false, + "description": "", + "required": true, + "parameters": [], + "apiType": "properties", + "fullSignature": "ThumbarButton.click", + "tldr": null, + "slug": "thumbarbuttonclick", + "url": "https://electronjs.org/docs/api/thumbar-button#thumbarbuttonclick", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:click", + "api:thumbarbuttonclick", + "api:ThumbarButton.click", + "doc:click", + "doc:thumbarbuttonclick", + "doc:ThumbarButton.click" + ] + }, + { + "objectID": "api-thumbar-button#thumbarbuttontooltip", + "name": "tooltip", + "type": "String", + "collection": false, + "description": "The text of the button's tooltip.", + "required": false, + "apiType": "properties", + "fullSignature": "ThumbarButton.tooltip", + "tldr": "The text of the button's tooltip.", + "slug": "thumbarbuttontooltip", + "url": "https://electronjs.org/docs/api/thumbar-button#thumbarbuttontooltip", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:tooltip", + "api:thumbarbuttontooltip", + "api:ThumbarButton.tooltip", + "doc:tooltip", + "doc:thumbarbuttontooltip", + "doc:ThumbarButton.tooltip" + ] + }, + { + "objectID": "api-thumbar-button#thumbarbuttonflags", + "name": "flags", + "type": "String", + "collection": true, + "description": "Control specific states and behaviors of the button. By default, it is ['enabled'].", + "required": false, + "apiType": "properties", + "fullSignature": "ThumbarButton.flags", + "tldr": "Control specific states and behaviors of the button.", + "slug": "thumbarbuttonflags", + "url": "https://electronjs.org/docs/api/thumbar-button#thumbarbuttonflags", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:flags", + "api:thumbarbuttonflags", + "api:ThumbarButton.flags", + "doc:flags", + "doc:thumbarbuttonflags", + "doc:ThumbarButton.flags" + ] + }, + { + "objectID": "api-touch-bar#touchbarescapeitem", + "name": "escapeItem", + "description": "A TouchBarItem that will replace the \"esc\" button on the touch bar when set. Setting to null restores the default \"esc\" button. Changing this value immediately updates the escape item in the touch bar.", + "type": "TouchBarItem", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "TouchBar.escapeItem", + "tldr": "A TouchBarItem that will replace the \"esc\" button on the touch bar when set.", + "slug": "touchbarescapeitem", + "url": "https://electronjs.org/docs/api/touch-bar#touchbarescapeitem", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:escapeItem", + "api:touchbarescapeitem", + "api:TouchBar.escapeItem", + "doc:escapeItem", + "doc:touchbarescapeitem", + "doc:TouchBar.escapeItem" + ] + }, + { + "objectID": "api-trace-categories-and-options#tracecategoriesandoptionscategoryfilter", + "name": "categoryFilter", + "type": "String", + "collection": false, + "description": "– is a filter to control what category groups should be traced. A filter can have an optional prefix to exclude category groups that contain a matching category. Having both included and excluded category patterns in the same list is not supported. Examples: test_MyTest*, test_MyTest*,test_OtherStuff, -excluded_category1,-excluded_category2.", + "required": true, + "apiType": "properties", + "fullSignature": "TraceCategoriesAndOptions.categoryFilter", + "tldr": "– is a filter to control what category groups should be traced.", + "slug": "tracecategoriesandoptionscategoryfilter", + "url": "https://electronjs.org/docs/api/trace-categories-and-options#tracecategoriesandoptionscategoryfilter", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:categoryFilter", + "api:tracecategoriesandoptionscategoryfilter", + "api:TraceCategoriesAndOptions.categoryFilter", + "doc:categoryFilter", + "doc:tracecategoriesandoptionscategoryfilter", + "doc:TraceCategoriesAndOptions.categoryFilter" + ] + }, + { + "objectID": "api-trace-categories-and-options#tracecategoriesandoptionstraceoptions", + "name": "traceOptions", + "type": "String", + "collection": false, + "description": "Controls what kind of tracing is enabled, it is a comma-delimited sequence of the following strings: record-until-full, record-continuously, trace-to-console, enable-sampling, enable-systrace, e.g. 'record-until-full,enable-sampling'. The first 3 options are trace recording modes and hence mutually exclusive. If more than one trace recording modes appear in the traceOptions string, the last one takes precedence. If none of the trace recording modes are specified, recording mode is record-until-full. The trace option will first be reset to the default option (record_mode set to record-until-full, enable_sampling and enable_systrace set to false) before options parsed from traceOptions are applied on it.", + "required": true, + "apiType": "properties", + "fullSignature": "TraceCategoriesAndOptions.traceOptions", + "tldr": "Controls what kind of tracing is enabled, it is a comma-delimited sequence of the following strings: record-until-full, record-continuously, trace-to-console, enable-sampling, enable-systrace, e.g.", + "slug": "tracecategoriesandoptionstraceoptions", + "url": "https://electronjs.org/docs/api/trace-categories-and-options#tracecategoriesandoptionstraceoptions", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:traceOptions", + "api:tracecategoriesandoptionstraceoptions", + "api:TraceCategoriesAndOptions.traceOptions", + "doc:traceOptions", + "doc:tracecategoriesandoptionstraceoptions", + "doc:TraceCategoriesAndOptions.traceOptions" + ] + }, + { + "objectID": "api-trace-config#traceconfigincluded_categories", + "name": "included_categories", + "type": "String", + "collection": true, + "description": "", + "required": false, + "apiType": "properties", + "fullSignature": "TraceConfig.included_categories", + "tldr": null, + "slug": "traceconfigincluded_categories", + "url": "https://electronjs.org/docs/api/trace-config#traceconfigincluded_categories", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:included_categories", + "api:traceconfigincluded_categories", + "api:TraceConfig.included_categories", + "doc:included_categories", + "doc:traceconfigincluded_categories", + "doc:TraceConfig.included_categories" + ] + }, + { + "objectID": "api-trace-config#traceconfigexcluded_categories", + "name": "excluded_categories", + "type": "String", + "collection": true, + "description": "", + "required": false, + "apiType": "properties", + "fullSignature": "TraceConfig.excluded_categories", + "tldr": null, + "slug": "traceconfigexcluded_categories", + "url": "https://electronjs.org/docs/api/trace-config#traceconfigexcluded_categories", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:excluded_categories", + "api:traceconfigexcluded_categories", + "api:TraceConfig.excluded_categories", + "doc:excluded_categories", + "doc:traceconfigexcluded_categories", + "doc:TraceConfig.excluded_categories" + ] + }, + { + "objectID": "api-trace-config#traceconfigmemory_dump_config", + "name": "memory_dump_config", + "type": "Object", + "collection": false, + "description": "", + "required": false, + "properties": [], + "apiType": "properties", + "fullSignature": "TraceConfig.memory_dump_config", + "tldr": null, + "slug": "traceconfigmemory_dump_config", + "url": "https://electronjs.org/docs/api/trace-config#traceconfigmemory_dump_config", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:memory_dump_config", + "api:traceconfigmemory_dump_config", + "api:TraceConfig.memory_dump_config", + "doc:memory_dump_config", + "doc:traceconfigmemory_dump_config", + "doc:TraceConfig.memory_dump_config" + ] + }, + { + "objectID": "api-transaction#transactiontransactionidentifier", + "name": "transactionIdentifier", + "type": "String", + "collection": false, + "description": "A string that uniquely identifies a successful payment transaction.", + "required": true, + "apiType": "properties", + "fullSignature": "Transaction.transactionIdentifier", + "tldr": "A string that uniquely identifies a successful payment transaction.", + "slug": "transactiontransactionidentifier", + "url": "https://electronjs.org/docs/api/transaction#transactiontransactionidentifier", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:transactionIdentifier", + "api:transactiontransactionidentifier", + "api:Transaction.transactionIdentifier", + "doc:transactionIdentifier", + "doc:transactiontransactionidentifier", + "doc:Transaction.transactionIdentifier" + ] + }, + { + "objectID": "api-transaction#transactiontransactiondate", + "name": "transactionDate", + "type": "String", + "collection": false, + "description": "The date the transaction was added to the App Store’s payment queue.", + "required": true, + "apiType": "properties", + "fullSignature": "Transaction.transactionDate", + "tldr": "The date the transaction was added to the App Store’s payment queue.", + "slug": "transactiontransactiondate", + "url": "https://electronjs.org/docs/api/transaction#transactiontransactiondate", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:transactionDate", + "api:transactiontransactiondate", + "api:Transaction.transactionDate", + "doc:transactionDate", + "doc:transactiontransactiondate", + "doc:Transaction.transactionDate" + ] + }, + { + "objectID": "api-transaction#transactionoriginaltransactionidentifier", + "name": "originalTransactionIdentifier", + "type": "String", + "collection": false, + "description": "The identifier of the restored transaction by the App Store.", + "required": true, + "apiType": "properties", + "fullSignature": "Transaction.originalTransactionIdentifier", + "tldr": "The identifier of the restored transaction by the App Store.", + "slug": "transactionoriginaltransactionidentifier", + "url": "https://electronjs.org/docs/api/transaction#transactionoriginaltransactionidentifier", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:originalTransactionIdentifier", + "api:transactionoriginaltransactionidentifier", + "api:Transaction.originalTransactionIdentifier", + "doc:originalTransactionIdentifier", + "doc:transactionoriginaltransactionidentifier", + "doc:Transaction.originalTransactionIdentifier" + ] + }, + { + "objectID": "api-transaction#transactiontransactionstate", + "name": "transactionState", + "type": "String", + "collection": false, + "description": "The transaction state, can be purchasing, purchased, failed, restored or deferred.", + "required": true, + "possibleValues": [ + { + "value": "purchasing" + }, + { + "value": "purchased" + }, + { + "value": "failed" + }, + { + "value": "restored" + }, + { + "value": "deferred" + } + ], + "apiType": "properties", + "fullSignature": "Transaction.transactionState", + "tldr": "The transaction state, can be purchasing, purchased, failed, restored or deferred.", + "slug": "transactiontransactionstate", + "url": "https://electronjs.org/docs/api/transaction#transactiontransactionstate", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:transactionState", + "api:transactiontransactionstate", + "api:Transaction.transactionState", + "doc:transactionState", + "doc:transactiontransactionstate", + "doc:Transaction.transactionState" + ] + }, + { + "objectID": "api-transaction#transactionerrorcode", + "name": "errorCode", + "type": "Integer", + "collection": false, + "description": "The error code if an error occurred while processing the transaction.", + "required": true, + "apiType": "properties", + "fullSignature": "Transaction.errorCode", + "tldr": "The error code if an error occurred while processing the transaction.", + "slug": "transactionerrorcode", + "url": "https://electronjs.org/docs/api/transaction#transactionerrorcode", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:errorCode", + "api:transactionerrorcode", + "api:Transaction.errorCode", + "doc:errorCode", + "doc:transactionerrorcode", + "doc:Transaction.errorCode" + ] + }, + { + "objectID": "api-transaction#transactionerrormessage", + "name": "errorMessage", + "type": "String", + "collection": false, + "description": "The error message if an error occurred while processing the transaction.", + "required": true, + "apiType": "properties", + "fullSignature": "Transaction.errorMessage", + "tldr": "The error message if an error occurred while processing the transaction.", + "slug": "transactionerrormessage", + "url": "https://electronjs.org/docs/api/transaction#transactionerrormessage", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:errorMessage", + "api:transactionerrormessage", + "api:Transaction.errorMessage", + "doc:errorMessage", + "doc:transactionerrormessage", + "doc:Transaction.errorMessage" + ] + }, + { + "objectID": "api-transaction#transactionpayment", + "name": "payment", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [ + { + "name": "productIdentifier", + "type": "String", + "collection": false, + "description": "The identifier of the purchased product.", + "required": true + }, + { + "name": "quantity", + "type": "Integer", + "collection": false, + "description": "The quantity purchased.", + "required": true + } + ], + "apiType": "properties", + "fullSignature": "Transaction.payment", + "tldr": null, + "slug": "transactionpayment", + "url": "https://electronjs.org/docs/api/transaction#transactionpayment", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:payment", + "api:transactionpayment", + "api:Transaction.payment", + "doc:payment", + "doc:transactionpayment", + "doc:Transaction.payment" + ] + }, { "objectID": "api-tray#traydestroy", "name": "destroy", + "signature": "()", "description": "Destroys the tray icon immediately.", "apiType": "instanceMethod", "fullSignature": "tray.destroy()", @@ -9847,6 +25868,7 @@ { "objectID": "api-tray#traysetimageimage", "name": "setImage", + "signature": "(image)", "description": "Sets the image associated with this tray icon.", "parameters": [ { @@ -9884,6 +25906,7 @@ { "objectID": "api-tray#traysetpressedimageimage", "name": "setPressedImage", + "signature": "(image)", "platforms": [ "macOS" ], @@ -9891,7 +25914,16 @@ "parameters": [ { "name": "image", - "type": "NativeImage", + "type": [ + { + "typeName": "NativeImage", + "collection": false + }, + { + "typeName": "String", + "collection": false + } + ], "collection": false, "required": true } @@ -9915,6 +25947,7 @@ { "objectID": "api-tray#traysettooltiptooltip", "name": "setToolTip", + "signature": "(toolTip)", "description": "Sets the hover text for this tray icon.", "parameters": [ { @@ -9943,6 +25976,7 @@ { "objectID": "api-tray#traysettitletitle", "name": "setTitle", + "signature": "(title)", "platforms": [ "macOS" ], @@ -9974,6 +26008,7 @@ { "objectID": "api-tray#traysethighlightmodemode", "name": "setHighlightMode", + "signature": "(mode)", "platforms": [ "macOS" ], @@ -10017,9 +26052,70 @@ "doc:tray.setHighlightMode(mode)" ] }, + { + "objectID": "api-tray#traysetignoredoubleclickeventsignore", + "name": "setIgnoreDoubleClickEvents", + "signature": "(ignore)", + "platforms": [ + "macOS" + ], + "description": "Sets the option to ignore double click events. Ignoring these events allows you to detect every individual click of the tray icon. This value is set to false by default.", + "parameters": [ + { + "name": "ignore", + "type": "Boolean", + "collection": false, + "required": true + } + ], + "apiType": "instanceMethod", + "fullSignature": "tray.setIgnoreDoubleClickEvents(ignore)", + "tldr": "Sets the option to ignore double click events.", + "slug": "traysetignoredoubleclickeventsignore", + "url": "https://electronjs.org/docs/api/tray#traysetignoredoubleclickeventsignore", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setIgnoreDoubleClickEvents", + "api:traysetignoredoubleclickeventsignore", + "api:tray.setIgnoreDoubleClickEvents(ignore)", + "doc:setIgnoreDoubleClickEvents", + "doc:traysetignoredoubleclickeventsignore", + "doc:tray.setIgnoreDoubleClickEvents(ignore)" + ] + }, + { + "objectID": "api-tray#traygetignoredoubleclickevents", + "name": "getIgnoreDoubleClickEvents", + "signature": "()", + "platforms": [ + "macOS" + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether double click events will be ignored." + }, + "apiType": "instanceMethod", + "fullSignature": "tray.getIgnoreDoubleClickEvents()", + "tldr": "Returns whether double click events will be ignored.", + "slug": "traygetignoredoubleclickevents", + "url": "https://electronjs.org/docs/api/tray#traygetignoredoubleclickevents", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getIgnoreDoubleClickEvents", + "api:traygetignoredoubleclickevents", + "api:tray.getIgnoreDoubleClickEvents()", + "doc:getIgnoreDoubleClickEvents", + "doc:traygetignoredoubleclickevents", + "doc:tray.getIgnoreDoubleClickEvents()" + ] + }, { "objectID": "api-tray#traydisplayballoonoptions", "name": "displayBalloon", + "signature": "(options)", "platforms": [ "Windows" ], @@ -10083,6 +26179,7 @@ { "objectID": "api-tray#traypopupcontextmenumenu-position", "name": "popUpContextMenu", + "signature": "([menu, position])", "platforms": [ "macOS", "Windows" @@ -10122,11 +26219,21 @@ { "objectID": "api-tray#traysetcontextmenumenu", "name": "setContextMenu", + "signature": "(menu)", "description": "Sets the context menu for this icon.", "parameters": [ { "name": "menu", - "type": "Menu", + "type": [ + { + "typeName": "Menu", + "collection": false + }, + { + "typeName": "null", + "collection": false + } + ], "collection": false, "required": true } @@ -10150,6 +26257,7 @@ { "objectID": "api-tray#traygetbounds", "name": "getBounds", + "signature": "()", "platforms": [ "macOS", "Windows" @@ -10178,6 +26286,7 @@ { "objectID": "api-tray#trayisdestroyed", "name": "isDestroyed", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -10228,15 +26337,16 @@ "apiType": "event", "fullSignature": "tray.on('click')", "url": "https://electronjs.org/docs/api/tray#event-click", + "slug": "trayonclick", "tldr": "Emitted when the tray icon is clicked.", "keyValuePairs": [ "is:doc", "is:api", "api:click", - "api:undefined", + "api:trayonclick", "api:tray.on('click')", "doc:click", - "doc:undefined", + "doc:trayonclick", "doc:tray.on('click')" ] }, @@ -10266,15 +26376,16 @@ "apiType": "event", "fullSignature": "tray.on('right-click')", "url": "https://electronjs.org/docs/api/tray#event-right-click", + "slug": "trayonright-click", "tldr": "Emitted when the tray icon is right clicked.", "keyValuePairs": [ "is:doc", "is:api", "api:right-click", - "api:undefined", + "api:trayonright-click", "api:tray.on('right-click')", "doc:right-click", - "doc:undefined", + "doc:trayonright-click", "doc:tray.on('right-click')" ] }, @@ -10304,15 +26415,16 @@ "apiType": "event", "fullSignature": "tray.on('double-click')", "url": "https://electronjs.org/docs/api/tray#event-double-click", + "slug": "trayondouble-click", "tldr": "Emitted when the tray icon is double clicked.", "keyValuePairs": [ "is:doc", "is:api", "api:double-click", - "api:undefined", + "api:trayondouble-click", "api:tray.on('double-click')", "doc:double-click", - "doc:undefined", + "doc:trayondouble-click", "doc:tray.on('double-click')" ] }, @@ -10326,15 +26438,16 @@ "apiType": "event", "fullSignature": "tray.on('balloon-show')", "url": "https://electronjs.org/docs/api/tray#event-balloon-show", + "slug": "trayonballoon-show", "tldr": "Emitted when the tray balloon shows.", "keyValuePairs": [ "is:doc", "is:api", "api:balloon-show", - "api:undefined", + "api:trayonballoon-show", "api:tray.on('balloon-show')", "doc:balloon-show", - "doc:undefined", + "doc:trayonballoon-show", "doc:tray.on('balloon-show')" ] }, @@ -10348,15 +26461,16 @@ "apiType": "event", "fullSignature": "tray.on('balloon-click')", "url": "https://electronjs.org/docs/api/tray#event-balloon-click", + "slug": "trayonballoon-click", "tldr": "Emitted when the tray balloon is clicked.", "keyValuePairs": [ "is:doc", "is:api", "api:balloon-click", - "api:undefined", + "api:trayonballoon-click", "api:tray.on('balloon-click')", "doc:balloon-click", - "doc:undefined", + "doc:trayonballoon-click", "doc:tray.on('balloon-click')" ] }, @@ -10370,15 +26484,16 @@ "apiType": "event", "fullSignature": "tray.on('balloon-closed')", "url": "https://electronjs.org/docs/api/tray#event-balloon-closed", + "slug": "trayonballoon-closed", "tldr": "Emitted when the tray balloon is closed because of timeout or user manually closes it.", "keyValuePairs": [ "is:doc", "is:api", "api:balloon-closed", - "api:undefined", + "api:trayonballoon-closed", "api:tray.on('balloon-closed')", "doc:balloon-closed", - "doc:undefined", + "doc:trayonballoon-closed", "doc:tray.on('balloon-closed')" ] }, @@ -10392,15 +26507,16 @@ "apiType": "event", "fullSignature": "tray.on('drop')", "url": "https://electronjs.org/docs/api/tray#event-drop", + "slug": "trayondrop", "tldr": "Emitted when any dragged items are dropped on the tray icon.", "keyValuePairs": [ "is:doc", "is:api", "api:drop", - "api:undefined", + "api:trayondrop", "api:tray.on('drop')", "doc:drop", - "doc:undefined", + "doc:trayondrop", "doc:tray.on('drop')" ] }, @@ -10429,15 +26545,16 @@ "apiType": "event", "fullSignature": "tray.on('drop-files')", "url": "https://electronjs.org/docs/api/tray#event-drop-files", + "slug": "trayondrop-files", "tldr": "Emitted when dragged files are dropped in the tray icon.", "keyValuePairs": [ "is:doc", "is:api", "api:drop-files", - "api:undefined", + "api:trayondrop-files", "api:tray.on('drop-files')", "doc:drop-files", - "doc:undefined", + "doc:trayondrop-files", "doc:tray.on('drop-files')" ] }, @@ -10466,15 +26583,16 @@ "apiType": "event", "fullSignature": "tray.on('drop-text')", "url": "https://electronjs.org/docs/api/tray#event-drop-text", + "slug": "trayondrop-text", "tldr": "Emitted when dragged text is dropped in the tray icon.", "keyValuePairs": [ "is:doc", "is:api", "api:drop-text", - "api:undefined", + "api:trayondrop-text", "api:tray.on('drop-text')", "doc:drop-text", - "doc:undefined", + "doc:trayondrop-text", "doc:tray.on('drop-text')" ] }, @@ -10488,15 +26606,16 @@ "apiType": "event", "fullSignature": "tray.on('drag-enter')", "url": "https://electronjs.org/docs/api/tray#event-drag-enter", + "slug": "trayondrag-enter", "tldr": "Emitted when a drag operation enters the tray icon.", "keyValuePairs": [ "is:doc", "is:api", "api:drag-enter", - "api:undefined", + "api:trayondrag-enter", "api:tray.on('drag-enter')", "doc:drag-enter", - "doc:undefined", + "doc:trayondrag-enter", "doc:tray.on('drag-enter')" ] }, @@ -10510,15 +26629,16 @@ "apiType": "event", "fullSignature": "tray.on('drag-leave')", "url": "https://electronjs.org/docs/api/tray#event-drag-leave", + "slug": "trayondrag-leave", "tldr": "Emitted when a drag operation exits the tray icon.", "keyValuePairs": [ "is:doc", "is:api", "api:drag-leave", - "api:undefined", + "api:trayondrag-leave", "api:tray.on('drag-leave')", "doc:drag-leave", - "doc:undefined", + "doc:trayondrag-leave", "doc:tray.on('drag-leave')" ] }, @@ -10532,15 +26652,16 @@ "apiType": "event", "fullSignature": "tray.on('drag-end')", "url": "https://electronjs.org/docs/api/tray#event-drag-end", + "slug": "trayondrag-end", "tldr": "Emitted when a drag operation ends on the tray or ends at another location.", "keyValuePairs": [ "is:doc", "is:api", "api:drag-end", - "api:undefined", + "api:trayondrag-end", "api:tray.on('drag-end')", "doc:drag-end", - "doc:undefined", + "doc:trayondrag-end", "doc:tray.on('drag-end')" ] }, @@ -10569,15 +26690,16 @@ "apiType": "event", "fullSignature": "tray.on('mouse-enter')", "url": "https://electronjs.org/docs/api/tray#event-mouse-enter", + "slug": "trayonmouse-enter", "tldr": "Emitted when the mouse enters the tray icon.", "keyValuePairs": [ "is:doc", "is:api", "api:mouse-enter", - "api:undefined", + "api:trayonmouse-enter", "api:tray.on('mouse-enter')", "doc:mouse-enter", - "doc:undefined", + "doc:trayonmouse-enter", "doc:tray.on('mouse-enter')" ] }, @@ -10606,15 +26728,16 @@ "apiType": "event", "fullSignature": "tray.on('mouse-leave')", "url": "https://electronjs.org/docs/api/tray#event-mouse-leave", + "slug": "trayonmouse-leave", "tldr": "Emitted when the mouse exits the tray icon.", "keyValuePairs": [ "is:doc", "is:api", "api:mouse-leave", - "api:undefined", + "api:trayonmouse-leave", "api:tray.on('mouse-leave')", "doc:mouse-leave", - "doc:undefined", + "doc:trayonmouse-leave", "doc:tray.on('mouse-leave')" ] }, @@ -10643,21 +26766,492 @@ "apiType": "event", "fullSignature": "tray.on('mouse-move')", "url": "https://electronjs.org/docs/api/tray#event-mouse-move", + "slug": "trayonmouse-move", "tldr": "Emitted when the mouse moves in the tray icon.", "keyValuePairs": [ "is:doc", "is:api", "api:mouse-move", - "api:undefined", + "api:trayonmouse-move", "api:tray.on('mouse-move')", "doc:mouse-move", - "doc:undefined", + "doc:trayonmouse-move", "doc:tray.on('mouse-move')" ] }, + { + "objectID": "api-upload-blob#uploadblobtype", + "name": "type", + "type": "String", + "collection": false, + "description": "blob.", + "required": true, + "apiType": "properties", + "fullSignature": "UploadBlob.type", + "tldr": "blob.", + "slug": "uploadblobtype", + "url": "https://electronjs.org/docs/api/upload-blob#uploadblobtype", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:type", + "api:uploadblobtype", + "api:UploadBlob.type", + "doc:type", + "doc:uploadblobtype", + "doc:UploadBlob.type" + ] + }, + { + "objectID": "api-upload-blob#uploadblobblobuuid", + "name": "blobUUID", + "type": "String", + "collection": false, + "description": "UUID of blob data to upload.", + "required": true, + "apiType": "properties", + "fullSignature": "UploadBlob.blobUUID", + "tldr": "UUID of blob data to upload.", + "slug": "uploadblobblobuuid", + "url": "https://electronjs.org/docs/api/upload-blob#uploadblobblobuuid", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:blobUUID", + "api:uploadblobblobuuid", + "api:UploadBlob.blobUUID", + "doc:blobUUID", + "doc:uploadblobblobuuid", + "doc:UploadBlob.blobUUID" + ] + }, + { + "objectID": "api-upload-data#uploaddatabytes", + "name": "bytes", + "type": "Buffer", + "collection": false, + "description": "Content being sent.", + "required": true, + "apiType": "properties", + "fullSignature": "UploadData.bytes", + "tldr": "Content being sent.", + "slug": "uploaddatabytes", + "url": "https://electronjs.org/docs/api/upload-data#uploaddatabytes", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:bytes", + "api:uploaddatabytes", + "api:UploadData.bytes", + "doc:bytes", + "doc:uploaddatabytes", + "doc:UploadData.bytes" + ] + }, + { + "objectID": "api-upload-data#uploaddatafile", + "name": "file", + "type": "String", + "collection": false, + "description": "Path of file being uploaded.", + "required": true, + "apiType": "properties", + "fullSignature": "UploadData.file", + "tldr": "Path of file being uploaded.", + "slug": "uploaddatafile", + "url": "https://electronjs.org/docs/api/upload-data#uploaddatafile", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:file", + "api:uploaddatafile", + "api:UploadData.file", + "doc:file", + "doc:uploaddatafile", + "doc:UploadData.file" + ] + }, + { + "objectID": "api-upload-data#uploaddatablobuuid", + "name": "blobUUID", + "type": "String", + "collection": false, + "description": "UUID of blob data. Use method to retrieve the data.", + "required": true, + "apiType": "properties", + "fullSignature": "UploadData.blobUUID", + "tldr": "UUID of blob data.", + "slug": "uploaddatablobuuid", + "url": "https://electronjs.org/docs/api/upload-data#uploaddatablobuuid", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:blobUUID", + "api:uploaddatablobuuid", + "api:UploadData.blobUUID", + "doc:blobUUID", + "doc:uploaddatablobuuid", + "doc:UploadData.blobUUID" + ] + }, + { + "objectID": "api-upload-file#uploadfiletype", + "name": "type", + "type": "String", + "collection": false, + "description": "file.", + "required": true, + "apiType": "properties", + "fullSignature": "UploadFile.type", + "tldr": "file.", + "slug": "uploadfiletype", + "url": "https://electronjs.org/docs/api/upload-file#uploadfiletype", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:type", + "api:uploadfiletype", + "api:UploadFile.type", + "doc:type", + "doc:uploadfiletype", + "doc:UploadFile.type" + ] + }, + { + "objectID": "api-upload-file#uploadfilefilepath", + "name": "filePath", + "type": "String", + "collection": false, + "description": "Path of file to be uploaded.", + "required": true, + "apiType": "properties", + "fullSignature": "UploadFile.filePath", + "tldr": "Path of file to be uploaded.", + "slug": "uploadfilefilepath", + "url": "https://electronjs.org/docs/api/upload-file#uploadfilefilepath", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:filePath", + "api:uploadfilefilepath", + "api:UploadFile.filePath", + "doc:filePath", + "doc:uploadfilefilepath", + "doc:UploadFile.filePath" + ] + }, + { + "objectID": "api-upload-file#uploadfileoffset", + "name": "offset", + "type": "Integer", + "collection": false, + "description": "Defaults to 0.", + "required": true, + "apiType": "properties", + "fullSignature": "UploadFile.offset", + "tldr": "Defaults to 0.", + "slug": "uploadfileoffset", + "url": "https://electronjs.org/docs/api/upload-file#uploadfileoffset", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:offset", + "api:uploadfileoffset", + "api:UploadFile.offset", + "doc:offset", + "doc:uploadfileoffset", + "doc:UploadFile.offset" + ] + }, + { + "objectID": "api-upload-file#uploadfilelength", + "name": "length", + "type": "Integer", + "collection": false, + "description": "Number of bytes to read from offset. Defaults to 0.", + "required": true, + "apiType": "properties", + "fullSignature": "UploadFile.length", + "tldr": "Number of bytes to read from offset.", + "slug": "uploadfilelength", + "url": "https://electronjs.org/docs/api/upload-file#uploadfilelength", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:length", + "api:uploadfilelength", + "api:UploadFile.length", + "doc:length", + "doc:uploadfilelength", + "doc:UploadFile.length" + ] + }, + { + "objectID": "api-upload-file#uploadfilemodificationtime", + "name": "modificationTime", + "type": "Double", + "collection": false, + "description": "Last Modification time in number of seconds since the UNIX epoch.", + "required": true, + "apiType": "properties", + "fullSignature": "UploadFile.modificationTime", + "tldr": "Last Modification time in number of seconds since the UNIX epoch.", + "slug": "uploadfilemodificationtime", + "url": "https://electronjs.org/docs/api/upload-file#uploadfilemodificationtime", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:modificationTime", + "api:uploadfilemodificationtime", + "api:UploadFile.modificationTime", + "doc:modificationTime", + "doc:uploadfilemodificationtime", + "doc:UploadFile.modificationTime" + ] + }, + { + "objectID": "api-upload-raw-data#uploadrawdatatype", + "name": "type", + "type": "String", + "collection": false, + "description": "rawData.", + "required": true, + "apiType": "properties", + "fullSignature": "UploadRawData.type", + "tldr": "rawData.", + "slug": "uploadrawdatatype", + "url": "https://electronjs.org/docs/api/upload-raw-data#uploadrawdatatype", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:type", + "api:uploadrawdatatype", + "api:UploadRawData.type", + "doc:type", + "doc:uploadrawdatatype", + "doc:UploadRawData.type" + ] + }, + { + "objectID": "api-upload-raw-data#uploadrawdatabytes", + "name": "bytes", + "type": "Buffer", + "collection": false, + "description": "Data to be uploaded.", + "required": true, + "apiType": "properties", + "fullSignature": "UploadRawData.bytes", + "tldr": "Data to be uploaded.", + "slug": "uploadrawdatabytes", + "url": "https://electronjs.org/docs/api/upload-raw-data#uploadrawdatabytes", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:bytes", + "api:uploadrawdatabytes", + "api:UploadRawData.bytes", + "doc:bytes", + "doc:uploadrawdatabytes", + "doc:UploadRawData.bytes" + ] + }, + { + "objectID": "api-web-contents#webcontentsgetallwebcontents", + "name": "getAllWebContents", + "signature": "()", + "returns": { + "type": "WebContents", + "collection": true, + "description": "An array of all WebContents instances. This will contain web contents for all windows, webviews, opened devtools, and devtools extension background pages." + }, + "apiType": "methods", + "fullSignature": "webContents.getAllWebContents", + "tldr": "Returns an array of all WebContents instances. This will contain web contents for all windows, webviews, opened devtools, and devtools extension background pages.", + "slug": "webcontentsgetallwebcontents", + "url": "https://electronjs.org/docs/api/web-contents#webcontentsgetallwebcontents", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getAllWebContents", + "api:webcontentsgetallwebcontents", + "api:webContents.getAllWebContents", + "doc:getAllWebContents", + "doc:webcontentsgetallwebcontents", + "doc:webContents.getAllWebContents" + ] + }, + { + "objectID": "api-web-contents#webcontentsgetfocusedwebcontents", + "name": "getFocusedWebContents", + "signature": "()", + "returns": { + "type": "WebContents", + "collection": false, + "description": "The web contents that is focused in this application, otherwise returns null." + }, + "apiType": "methods", + "fullSignature": "webContents.getFocusedWebContents", + "tldr": "Returns the web contents that is focused in this application, otherwise returns null.", + "slug": "webcontentsgetfocusedwebcontents", + "url": "https://electronjs.org/docs/api/web-contents#webcontentsgetfocusedwebcontents", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getFocusedWebContents", + "api:webcontentsgetfocusedwebcontents", + "api:webContents.getFocusedWebContents", + "doc:getFocusedWebContents", + "doc:webcontentsgetfocusedwebcontents", + "doc:webContents.getFocusedWebContents" + ] + }, + { + "objectID": "api-web-contents#webcontentsfromid", + "name": "fromId", + "signature": "(id)", + "parameters": [ + { + "name": "id", + "type": "Integer", + "collection": false, + "required": true + } + ], + "returns": { + "type": "WebContents", + "collection": false, + "description": "A WebContents instance with the given ID." + }, + "apiType": "methods", + "fullSignature": "webContents.fromId", + "tldr": "Returns a WebContents instance with the given ID.", + "slug": "webcontentsfromid", + "url": "https://electronjs.org/docs/api/web-contents#webcontentsfromid", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:fromId", + "api:webcontentsfromid", + "api:webContents.fromId", + "doc:fromId", + "doc:webcontentsfromid", + "doc:webContents.fromId" + ] + }, + { + "objectID": "api-web-contents#webcontentsid", + "name": "id", + "description": "A Integer representing the unique ID of this WebContents.", + "type": "Integer", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "WebContents.id", + "tldr": "A Integer representing the unique ID of this WebContents.", + "slug": "webcontentsid", + "url": "https://electronjs.org/docs/api/web-contents#webcontentsid", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:id", + "api:webcontentsid", + "api:WebContents.id", + "doc:id", + "doc:webcontentsid", + "doc:WebContents.id" + ] + }, + { + "objectID": "api-web-contents#webcontentssession", + "name": "session", + "description": "A Session used by this webContents.", + "type": "Session", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "WebContents.session", + "tldr": "A Session used by this webContents.", + "slug": "webcontentssession", + "url": "https://electronjs.org/docs/api/web-contents#webcontentssession", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:session", + "api:webcontentssession", + "api:WebContents.session", + "doc:session", + "doc:webcontentssession", + "doc:WebContents.session" + ] + }, + { + "objectID": "api-web-contents#webcontentshostwebcontents", + "name": "hostWebContents", + "description": "A WebContents instance that might own this WebContents.", + "type": "WebContents", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "WebContents.hostWebContents", + "tldr": "A WebContents instance that might own this WebContents.", + "slug": "webcontentshostwebcontents", + "url": "https://electronjs.org/docs/api/web-contents#webcontentshostwebcontents", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:hostWebContents", + "api:webcontentshostwebcontents", + "api:WebContents.hostWebContents", + "doc:hostWebContents", + "doc:webcontentshostwebcontents", + "doc:WebContents.hostWebContents" + ] + }, + { + "objectID": "api-web-contents#webcontentsdevtoolswebcontents", + "name": "devToolsWebContents", + "description": "A WebContents of DevTools for this WebContents. Note: Users should never store this object because it may become null when the DevTools has been closed.", + "type": "WebContents", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "WebContents.devToolsWebContents", + "tldr": "A WebContents of DevTools for this WebContents.", + "slug": "webcontentsdevtoolswebcontents", + "url": "https://electronjs.org/docs/api/web-contents#webcontentsdevtoolswebcontents", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:devToolsWebContents", + "api:webcontentsdevtoolswebcontents", + "api:WebContents.devToolsWebContents", + "doc:devToolsWebContents", + "doc:webcontentsdevtoolswebcontents", + "doc:WebContents.devToolsWebContents" + ] + }, + { + "objectID": "api-web-contents#webcontentsdebugger", + "name": "debugger", + "description": "A Debugger instance for this webContents.", + "type": "Debugger", + "collection": false, + "apiType": "instanceProperties", + "fullSignature": "WebContents.debugger", + "tldr": "A Debugger instance for this webContents.", + "slug": "webcontentsdebugger", + "url": "https://electronjs.org/docs/api/web-contents#webcontentsdebugger", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:debugger", + "api:webcontentsdebugger", + "api:WebContents.debugger", + "doc:debugger", + "doc:webcontentsdebugger", + "doc:WebContents.debugger" + ] + }, { "objectID": "api-web-contents#contentsloadurlurl-options", "name": "loadURL", + "signature": "(url[, options])", "description": "Loads the url in the window. The url must contain the protocol prefix, e.g. the http:// or file://. If the load should bypass http cache then use the pragma header to achieve it.", "parameters": [ { @@ -10674,9 +27268,18 @@ "properties": [ { "name": "httpReferrer", - "type": "String", + "type": [ + { + "typeName": "String", + "collection": false + }, + { + "typeName": "Referrer", + "collection": false + } + ], "collection": false, - "description": "A HTTP Referrer url.", + "description": "An HTTP Referrer url.", "required": false }, { @@ -10704,10 +27307,6 @@ "typeName": "UploadFile", "collection": true }, - { - "typeName": "UploadFileSystem", - "collection": true - }, { "typeName": "UploadBlob", "collection": true @@ -10727,6 +27326,12 @@ ] } ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "void", + "description": "the promise will resolve when the page has finished loading (see did-finish-load), and rejects if the page fails to load (see did-fail-load)." + }, "apiType": "instanceMethod", "fullSignature": "contents.loadURL(url[, options])", "tldr": "Loads the url in the window.", @@ -10744,8 +27349,9 @@ ] }, { - "objectID": "api-web-contents#contentsloadfilefilepath", + "objectID": "api-web-contents#contentsloadfilefilepath-options", "name": "loadFile", + "signature": "(filePath[, options])", "description": "Loads the given file in the window, filePath should be a path to an HTML file relative to the root of your application. For instance an app structure like this: Would require code like this", "parameters": [ { @@ -10753,27 +27359,64 @@ "type": "String", "collection": false, "required": true + }, + { + "name": "options", + "type": "Object", + "collection": false, + "required": false, + "properties": [ + { + "name": "query", + "type": "Object", + "collection": false, + "description": "Passed to url.format().", + "required": false, + "properties": [] + }, + { + "name": "search", + "type": "String", + "collection": false, + "description": "Passed to url.format().", + "required": false + }, + { + "name": "hash", + "type": "String", + "collection": false, + "description": "Passed to url.format().", + "required": false + } + ] } ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "void", + "description": "the promise will resolve when the page has finished loading (see did-finish-load), and rejects if the page fails to load (see did-fail-load)." + }, "apiType": "instanceMethod", - "fullSignature": "contents.loadFile(filePath)", + "fullSignature": "contents.loadFile(filePath[, options])", "tldr": "Loads the given file in the window, filePath should be a path to an HTML file relative to the root of your application.", - "slug": "contentsloadfilefilepath", - "url": "https://electronjs.org/docs/api/web-contents#contentsloadfilefilepath", + "slug": "contentsloadfilefilepath-options", + "url": "https://electronjs.org/docs/api/web-contents#contentsloadfilefilepath-options", "keyValuePairs": [ "is:doc", "is:api", "api:loadFile", - "api:contentsloadfilefilepath", - "api:contents.loadFile(filePath)", + "api:contentsloadfilefilepath-options", + "api:contents.loadFile(filePath[, options])", "doc:loadFile", - "doc:contentsloadfilefilepath", - "doc:contents.loadFile(filePath)" + "doc:contentsloadfilefilepath-options", + "doc:contents.loadFile(filePath[, options])" ] }, { "objectID": "api-web-contents#contentsdownloadurlurl", "name": "downloadURL", + "signature": "(url)", "description": "Initiates a download of the resource at url without navigating. The will-download event of session will be triggered.", "parameters": [ { @@ -10802,6 +27445,7 @@ { "objectID": "api-web-contents#contentsgeturl", "name": "getURL", + "signature": "()", "returns": { "type": "String", "collection": false, @@ -10826,6 +27470,7 @@ { "objectID": "api-web-contents#contentsgettitle", "name": "getTitle", + "signature": "()", "returns": { "type": "String", "collection": false, @@ -10850,6 +27495,7 @@ { "objectID": "api-web-contents#contentsisdestroyed", "name": "isDestroyed", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -10874,6 +27520,7 @@ { "objectID": "api-web-contents#contentsfocus", "name": "focus", + "signature": "()", "description": "Focuses the web page.", "apiType": "instanceMethod", "fullSignature": "contents.focus()", @@ -10894,6 +27541,7 @@ { "objectID": "api-web-contents#contentsisfocused", "name": "isFocused", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -10918,6 +27566,7 @@ { "objectID": "api-web-contents#contentsisloading", "name": "isLoading", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -10942,6 +27591,7 @@ { "objectID": "api-web-contents#contentsisloadingmainframe", "name": "isLoadingMainFrame", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -10966,6 +27616,7 @@ { "objectID": "api-web-contents#contentsiswaitingforresponse", "name": "isWaitingForResponse", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -10990,6 +27641,7 @@ { "objectID": "api-web-contents#contentsstop", "name": "stop", + "signature": "()", "description": "Stops any pending navigation.", "apiType": "instanceMethod", "fullSignature": "contents.stop()", @@ -11010,6 +27662,7 @@ { "objectID": "api-web-contents#contentsreload", "name": "reload", + "signature": "()", "description": "Reloads the current web page.", "apiType": "instanceMethod", "fullSignature": "contents.reload()", @@ -11030,6 +27683,7 @@ { "objectID": "api-web-contents#contentsreloadignoringcache", "name": "reloadIgnoringCache", + "signature": "()", "description": "Reloads current page and ignores cache.", "apiType": "instanceMethod", "fullSignature": "contents.reloadIgnoringCache()", @@ -11050,6 +27704,7 @@ { "objectID": "api-web-contents#contentscangoback", "name": "canGoBack", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -11074,6 +27729,7 @@ { "objectID": "api-web-contents#contentscangoforward", "name": "canGoForward", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -11098,6 +27754,7 @@ { "objectID": "api-web-contents#contentscangotooffsetoffset", "name": "canGoToOffset", + "signature": "(offset)", "parameters": [ { "name": "offset", @@ -11130,6 +27787,7 @@ { "objectID": "api-web-contents#contentsclearhistory", "name": "clearHistory", + "signature": "()", "description": "Clears the navigation history.", "apiType": "instanceMethod", "fullSignature": "contents.clearHistory()", @@ -11150,6 +27808,7 @@ { "objectID": "api-web-contents#contentsgoback", "name": "goBack", + "signature": "()", "description": "Makes the browser go back a web page.", "apiType": "instanceMethod", "fullSignature": "contents.goBack()", @@ -11170,6 +27829,7 @@ { "objectID": "api-web-contents#contentsgoforward", "name": "goForward", + "signature": "()", "description": "Makes the browser go forward a web page.", "apiType": "instanceMethod", "fullSignature": "contents.goForward()", @@ -11190,6 +27850,7 @@ { "objectID": "api-web-contents#contentsgotoindexindex", "name": "goToIndex", + "signature": "(index)", "description": "Navigates browser to the specified absolute web page index.", "parameters": [ { @@ -11218,6 +27879,7 @@ { "objectID": "api-web-contents#contentsgotooffsetoffset", "name": "goToOffset", + "signature": "(offset)", "description": "Navigates to the specified offset from the \"current entry\".", "parameters": [ { @@ -11246,6 +27908,7 @@ { "objectID": "api-web-contents#contentsiscrashed", "name": "isCrashed", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -11270,6 +27933,7 @@ { "objectID": "api-web-contents#contentssetuseragentuseragent", "name": "setUserAgent", + "signature": "(userAgent)", "description": "Overrides the user agent for this web page.", "parameters": [ { @@ -11298,6 +27962,7 @@ { "objectID": "api-web-contents#contentsgetuseragent", "name": "getUserAgent", + "signature": "()", "returns": { "type": "String", "collection": false, @@ -11322,6 +27987,7 @@ { "objectID": "api-web-contents#contentsinsertcsscss", "name": "insertCSS", + "signature": "(css)", "description": "Injects CSS into the current web page.", "parameters": [ { @@ -11350,6 +28016,7 @@ { "objectID": "api-web-contents#contentsexecutejavascriptcode-usergesture-callback", "name": "executeJavaScript", + "signature": "(code[, userGesture, callback])", "description": "Evaluates code in page. In the browser window some HTML APIs like requestFullScreen can only be invoked by a gesture from the user. Setting userGesture to true will remove this limitation. If the result of the executed code is a promise the callback result will be the resolved value of the promise. We recommend that you use the returned Promise to handle code that results in a Promise.", "parameters": [ { @@ -11385,6 +28052,7 @@ "returns": { "type": "Promise", "collection": false, + "innerType": "any", "description": "A promise that resolves with the result of the executed code or is rejected if the result of the code is a rejected promise." }, "apiType": "instanceMethod", @@ -11406,6 +28074,7 @@ { "objectID": "api-web-contents#contentssetignoremenushortcutsignore", "name": "setIgnoreMenuShortcuts", + "signature": "(ignore)", "platforms": [ "Experimental" ], @@ -11437,6 +28106,7 @@ { "objectID": "api-web-contents#contentssetaudiomutedmuted", "name": "setAudioMuted", + "signature": "(muted)", "description": "Mute the audio on the current web page.", "parameters": [ { @@ -11465,6 +28135,7 @@ { "objectID": "api-web-contents#contentsisaudiomuted", "name": "isAudioMuted", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -11486,9 +28157,35 @@ "doc:contents.isAudioMuted()" ] }, + { + "objectID": "api-web-contents#contentsiscurrentlyaudible", + "name": "isCurrentlyAudible", + "signature": "()", + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether audio is currently playing." + }, + "apiType": "instanceMethod", + "fullSignature": "contents.isCurrentlyAudible()", + "tldr": "Returns whether audio is currently playing.", + "slug": "contentsiscurrentlyaudible", + "url": "https://electronjs.org/docs/api/web-contents#contentsiscurrentlyaudible", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isCurrentlyAudible", + "api:contentsiscurrentlyaudible", + "api:contents.isCurrentlyAudible()", + "doc:isCurrentlyAudible", + "doc:contentsiscurrentlyaudible", + "doc:contents.isCurrentlyAudible()" + ] + }, { "objectID": "api-web-contents#contentssetzoomfactorfactor", "name": "setZoomFactor", + "signature": "(factor)", "description": "Changes the zoom factor to the specified factor. Zoom factor is zoom percent divided by 100, so 300% = 3.0.", "parameters": [ { @@ -11516,45 +28213,34 @@ ] }, { - "objectID": "api-web-contents#contentsgetzoomfactorcallback", + "objectID": "api-web-contents#contentsgetzoomfactor", "name": "getZoomFactor", - "description": "Sends a request to get current zoom factor, the callback will be called with callback(zoomFactor).", - "parameters": [ - { - "name": "callback", - "type": "Function", - "collection": false, - "required": true, - "parameters": [ - { - "name": "zoomFactor", - "type": "Number", - "collection": false, - "description": "", - "required": true - } - ] - } - ], + "signature": "()", + "returns": { + "type": "Number", + "collection": false, + "description": "the current zoom factor." + }, "apiType": "instanceMethod", - "fullSignature": "contents.getZoomFactor(callback)", - "tldr": "Sends a request to get current zoom factor, the callback will be called with callback(zoomFactor).", - "slug": "contentsgetzoomfactorcallback", - "url": "https://electronjs.org/docs/api/web-contents#contentsgetzoomfactorcallback", + "fullSignature": "contents.getZoomFactor()", + "tldr": "Returns the current zoom factor.", + "slug": "contentsgetzoomfactor", + "url": "https://electronjs.org/docs/api/web-contents#contentsgetzoomfactor", "keyValuePairs": [ "is:doc", "is:api", "api:getZoomFactor", - "api:contentsgetzoomfactorcallback", - "api:contents.getZoomFactor(callback)", + "api:contentsgetzoomfactor", + "api:contents.getZoomFactor()", "doc:getZoomFactor", - "doc:contentsgetzoomfactorcallback", - "doc:contents.getZoomFactor(callback)" + "doc:contentsgetzoomfactor", + "doc:contents.getZoomFactor()" ] }, { "objectID": "api-web-contents#contentssetzoomlevellevel", "name": "setZoomLevel", + "signature": "(level)", "description": "Changes the zoom level to the specified level. The original size is 0 and each increment above or below represents zooming 20% larger or smaller to default limits of 300% and 50% of original size, respectively. The formula for this is scale := 1.2 ^ level.", "parameters": [ { @@ -11582,45 +28268,34 @@ ] }, { - "objectID": "api-web-contents#contentsgetzoomlevelcallback", + "objectID": "api-web-contents#contentsgetzoomlevel", "name": "getZoomLevel", - "description": "Sends a request to get current zoom level, the callback will be called with callback(zoomLevel).", - "parameters": [ - { - "name": "callback", - "type": "Function", - "collection": false, - "required": true, - "parameters": [ - { - "name": "zoomLevel", - "type": "Number", - "collection": false, - "description": "", - "required": true - } - ] - } - ], + "signature": "()", + "returns": { + "type": "Number", + "collection": false, + "description": "the current zoom level." + }, "apiType": "instanceMethod", - "fullSignature": "contents.getZoomLevel(callback)", - "tldr": "Sends a request to get current zoom level, the callback will be called with callback(zoomLevel).", - "slug": "contentsgetzoomlevelcallback", - "url": "https://electronjs.org/docs/api/web-contents#contentsgetzoomlevelcallback", + "fullSignature": "contents.getZoomLevel()", + "tldr": "Returns the current zoom level.", + "slug": "contentsgetzoomlevel", + "url": "https://electronjs.org/docs/api/web-contents#contentsgetzoomlevel", "keyValuePairs": [ "is:doc", "is:api", "api:getZoomLevel", - "api:contentsgetzoomlevelcallback", - "api:contents.getZoomLevel(callback)", + "api:contentsgetzoomlevel", + "api:contents.getZoomLevel()", "doc:getZoomLevel", - "doc:contentsgetzoomlevelcallback", - "doc:contents.getZoomLevel(callback)" + "doc:contentsgetzoomlevel", + "doc:contents.getZoomLevel()" ] }, { "objectID": "api-web-contents#contentssetvisualzoomlevellimitsminimumlevel-maximumlevel", "name": "setVisualZoomLevelLimits", + "signature": "(minimumLevel, maximumLevel)", "description": "Sets the maximum and minimum pinch-to-zoom level.", "parameters": [ { @@ -11655,6 +28330,7 @@ { "objectID": "api-web-contents#contentssetlayoutzoomlevellimitsminimumlevel-maximumlevel", "name": "setLayoutZoomLevelLimits", + "signature": "(minimumLevel, maximumLevel)", "description": "Sets the maximum and minimum layout-based (i.e. non-visual) zoom level.", "parameters": [ { @@ -11689,6 +28365,7 @@ { "objectID": "api-web-contents#contentsundo", "name": "undo", + "signature": "()", "description": "Executes the editing command undo in web page.", "apiType": "instanceMethod", "fullSignature": "contents.undo()", @@ -11709,6 +28386,7 @@ { "objectID": "api-web-contents#contentsredo", "name": "redo", + "signature": "()", "description": "Executes the editing command redo in web page.", "apiType": "instanceMethod", "fullSignature": "contents.redo()", @@ -11729,6 +28407,7 @@ { "objectID": "api-web-contents#contentscut", "name": "cut", + "signature": "()", "description": "Executes the editing command cut in web page.", "apiType": "instanceMethod", "fullSignature": "contents.cut()", @@ -11749,6 +28428,7 @@ { "objectID": "api-web-contents#contentscopy", "name": "copy", + "signature": "()", "description": "Executes the editing command copy in web page.", "apiType": "instanceMethod", "fullSignature": "contents.copy()", @@ -11769,6 +28449,7 @@ { "objectID": "api-web-contents#contentscopyimageatx-y", "name": "copyImageAt", + "signature": "(x, y)", "description": "Copy the image at the given position to the clipboard.", "parameters": [ { @@ -11803,6 +28484,7 @@ { "objectID": "api-web-contents#contentspaste", "name": "paste", + "signature": "()", "description": "Executes the editing command paste in web page.", "apiType": "instanceMethod", "fullSignature": "contents.paste()", @@ -11823,6 +28505,7 @@ { "objectID": "api-web-contents#contentspasteandmatchstyle", "name": "pasteAndMatchStyle", + "signature": "()", "description": "Executes the editing command pasteAndMatchStyle in web page.", "apiType": "instanceMethod", "fullSignature": "contents.pasteAndMatchStyle()", @@ -11843,6 +28526,7 @@ { "objectID": "api-web-contents#contentsdelete", "name": "delete", + "signature": "()", "description": "Executes the editing command delete in web page.", "apiType": "instanceMethod", "fullSignature": "contents.delete()", @@ -11863,6 +28547,7 @@ { "objectID": "api-web-contents#contentsselectall", "name": "selectAll", + "signature": "()", "description": "Executes the editing command selectAll in web page.", "apiType": "instanceMethod", "fullSignature": "contents.selectAll()", @@ -11883,6 +28568,7 @@ { "objectID": "api-web-contents#contentsunselect", "name": "unselect", + "signature": "()", "description": "Executes the editing command unselect in web page.", "apiType": "instanceMethod", "fullSignature": "contents.unselect()", @@ -11903,6 +28589,7 @@ { "objectID": "api-web-contents#contentsreplacetext", "name": "replace", + "signature": "(text)", "description": "Executes the editing command replace in web page.", "parameters": [ { @@ -11931,6 +28618,7 @@ { "objectID": "api-web-contents#contentsreplacemisspellingtext", "name": "replaceMisspelling", + "signature": "(text)", "description": "Executes the editing command replaceMisspelling in web page.", "parameters": [ { @@ -11959,6 +28647,7 @@ { "objectID": "api-web-contents#contentsinserttexttext", "name": "insertText", + "signature": "(text)", "description": "Inserts text to the focused element.", "parameters": [ { @@ -11987,6 +28676,7 @@ { "objectID": "api-web-contents#contentsfindinpagetext-options", "name": "findInPage", + "signature": "(text[, options])", "description": "Starts a request to find all matches for the text in the web page. The result of the request can be obtained by subscribing to found-in-page event.", "parameters": [ { @@ -12064,6 +28754,7 @@ { "objectID": "api-web-contents#contentsstopfindinpageaction", "name": "stopFindInPage", + "signature": "(action)", "description": "Stops any findInPage request for the webContents with the provided action.", "parameters": [ { @@ -12107,13 +28798,14 @@ { "objectID": "api-web-contents#contentscapturepagerect-callback", "name": "capturePage", - "description": "Captures a snapshot of the page within rect. Upon completion callback will be called with callback(image). The image is an instance of NativeImage that stores data of the snapshot. Omitting rect will capture the whole visible page.", + "signature": "([rect, ]callback)", + "description": "Captures a snapshot of the page within rect. Upon completion callback will be called with callback(image). The image is an instance of NativeImage that stores data of the snapshot. Omitting rect will capture the whole visible page. Deprecated Soon", "parameters": [ { "name": "rect", "type": "Rectangle", "collection": false, - "description": "The area of the page to be captured.", + "description": "The bounds to capture", "required": false }, { @@ -12148,9 +28840,40 @@ "doc:contents.capturePage([rect, ]callback)" ] }, + { + "objectID": "api-web-contents#contentscapturepagerect", + "name": "capturePage", + "signature": "([rect])", + "description": "Captures a snapshot of the page within rect. Omitting rect will capture the whole visible page.", + "parameters": [ + { + "name": "rect", + "type": "Rectangle", + "collection": false, + "description": "The area of the page to be captured.", + "required": false + } + ], + "apiType": "instanceMethod", + "fullSignature": "contents.capturePage([rect])", + "tldr": "Captures a snapshot of the page within rect.", + "slug": "contentscapturepagerect", + "url": "https://electronjs.org/docs/api/web-contents#contentscapturepagerect", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:capturePage", + "api:contentscapturepagerect", + "api:contents.capturePage([rect])", + "doc:capturePage", + "doc:contentscapturepagerect", + "doc:contents.capturePage([rect])" + ] + }, { "objectID": "api-web-contents#contentshasserviceworkercallback", "name": "hasServiceWorker", + "signature": "(callback)", "description": "Checks if any ServiceWorker is registered and returns a boolean as response to callback.", "parameters": [ { @@ -12188,6 +28911,7 @@ { "objectID": "api-web-contents#contentsunregisterserviceworkercallback", "name": "unregisterServiceWorker", + "signature": "(callback)", "description": "Unregisters any ServiceWorker if present and returns a boolean as response to callback when the JS promise is fulfilled or false when the JS promise is rejected.", "parameters": [ { @@ -12225,6 +28949,7 @@ { "objectID": "api-web-contents#contentsgetprinters", "name": "getPrinters", + "signature": "()", "description": "Get the system printer list.", "returns": { "type": "PrinterInfo", @@ -12250,7 +28975,8 @@ { "objectID": "api-web-contents#contentsprintoptions-callback", "name": "print", - "description": "Prints window's web page. When silent is set to true, Electron will pick the system's default printer if deviceName is empty and the default settings for printing. Calling window.print() in web page is equivalent to calling webContents.print({silent: false, printBackground: false, deviceName: ''}). Use page-break-before: always; CSS style to force to print to a new page.", + "signature": "([options], [callback])", + "description": "Prints window's web page. When silent is set to true, Electron will pick the system's default printer if deviceName is empty and the default settings for printing. Calling window.print() in web page is equivalent to calling webContents.print({ silent: false, printBackground: false, deviceName: '' }). Use page-break-before: always; CSS style to force to print to a new page.", "parameters": [ { "name": "options", @@ -12316,6 +29042,7 @@ { "objectID": "api-web-contents#contentsprinttopdfoptions-callback", "name": "printToPDF", + "signature": "(options, callback)", "description": "Prints window's web page as PDF with Chromium's preview printing custom settings. The callback will be called with callback(error, data) on completion. The data is a Buffer that contains the generated PDF data. The landscape will be ignored if @page CSS at-rule is used in the web page. By default, an empty options will be regarded as: Use page-break-before: always; CSS style to force to print to a new page. An example of webContents.printToPDF:", "parameters": [ { @@ -12333,7 +29060,16 @@ }, { "name": "pageSize", - "type": "String", + "type": [ + { + "typeName": "String", + "collection": false + }, + { + "typeName": "Size", + "collection": false + } + ], "collection": false, "description": "Specify page size of the generated PDF. Can be A3, A4, A5, Legal, Letter, Tabloid or an Object containing height and width in microns.", "required": false @@ -12403,6 +29139,7 @@ { "objectID": "api-web-contents#contentsaddworkspacepath", "name": "addWorkSpace", + "signature": "(path)", "description": "Adds the specified path to DevTools workspace. Must be used after DevTools creation:", "parameters": [ { @@ -12431,6 +29168,7 @@ { "objectID": "api-web-contents#contentsremoveworkspacepath", "name": "removeWorkSpace", + "signature": "(path)", "description": "Removes the specified path from DevTools workspace.", "parameters": [ { @@ -12459,6 +29197,7 @@ { "objectID": "api-web-contents#contentssetdevtoolswebcontentsdevtoolswebcontents", "name": "setDevToolsWebContents", + "signature": "(devToolsWebContents)", "description": "Uses the devToolsWebContents as the target WebContents to show devtools. The devToolsWebContents must not have done any navigation, and it should not be used for other purposes after the call. By default Electron manages the devtools by creating an internal WebContents with native view, which developers have very limited control of. With the setDevToolsWebContents method, developers can use any WebContents to show the devtools in it, including BrowserWindow, BrowserView and tag. Note that closing the devtools does not destroy the devToolsWebContents, it is caller's responsibility to destroy devToolsWebContents. An example of showing devtools in a tag: An example of showing devtools in a BrowserWindow:", "parameters": [ { @@ -12487,6 +29226,7 @@ { "objectID": "api-web-contents#contentsopendevtoolsoptions", "name": "openDevTools", + "signature": "([options])", "description": "Opens the devtools. When contents is a tag, the mode would be detach by default, explicitly passing an empty mode can force using last used dock state.", "parameters": [ { @@ -12515,6 +29255,13 @@ "value": "detach" } ] + }, + { + "name": "activate", + "type": "Boolean", + "collection": false, + "description": "Whether to bring the opened devtools window to the foreground. The default is true.", + "required": false } ] } @@ -12538,6 +29285,7 @@ { "objectID": "api-web-contents#contentsclosedevtools", "name": "closeDevTools", + "signature": "()", "description": "Closes the devtools.", "apiType": "instanceMethod", "fullSignature": "contents.closeDevTools()", @@ -12558,6 +29306,7 @@ { "objectID": "api-web-contents#contentsisdevtoolsopened", "name": "isDevToolsOpened", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -12582,6 +29331,7 @@ { "objectID": "api-web-contents#contentsisdevtoolsfocused", "name": "isDevToolsFocused", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -12606,6 +29356,7 @@ { "objectID": "api-web-contents#contentstoggledevtools", "name": "toggleDevTools", + "signature": "()", "description": "Toggles the developer tools.", "apiType": "instanceMethod", "fullSignature": "contents.toggleDevTools()", @@ -12626,6 +29377,7 @@ { "objectID": "api-web-contents#contentsinspectelementx-y", "name": "inspectElement", + "signature": "(x, y)", "description": "Starts inspecting element at position (x, y).", "parameters": [ { @@ -12660,6 +29412,7 @@ { "objectID": "api-web-contents#contentsinspectserviceworker", "name": "inspectServiceWorker", + "signature": "()", "description": "Opens the developer tools for the service worker context.", "apiType": "instanceMethod", "fullSignature": "contents.inspectServiceWorker()", @@ -12680,6 +29433,7 @@ { "objectID": "api-web-contents#contentssendchannel-arg1-arg2-", "name": "send", + "signature": "(channel[, arg1][, arg2][, ...])", "description": "Send an asynchronous message to renderer process via channel, you can also send arbitrary arguments. Arguments will be serialized in JSON internally and hence no functions or prototype chain will be included. The renderer process can handle the message by listening to channel with the ipcRenderer module. An example of sending messages from the main process to the renderer process:", "parameters": [ { @@ -12711,9 +29465,51 @@ "doc:contents.send(channel[, arg1][, arg2][, ...])" ] }, + { + "objectID": "api-web-contents#contentssendtoframeframeid-channel-arg1-arg2-", + "name": "sendToFrame", + "signature": "(frameId, channel[, arg1][, arg2][, ...])", + "description": "Send an asynchronous message to a specific frame in a renderer process via channel. Arguments will be serialized as JSON internally and as such no functions or prototype chains will be included. The renderer process can handle the message by listening to channel with the ipcRenderer module. If you want to get the frameId of a given renderer context you should use the webFrame.routingId value. E.g. You can also read frameId from all incoming IPC messages in the main process.", + "parameters": [ + { + "name": "frameId", + "type": "Integer", + "collection": false, + "required": true + }, + { + "name": "channel", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "...args", + "type": "any", + "collection": true, + "required": true + } + ], + "apiType": "instanceMethod", + "fullSignature": "contents.sendToFrame(frameId, channel[, arg1][, arg2][, ...])", + "tldr": "Send an asynchronous message to a specific frame in a renderer process via channel.", + "slug": "contentssendtoframeframeid-channel-arg1-arg2-", + "url": "https://electronjs.org/docs/api/web-contents#contentssendtoframeframeid-channel-arg1-arg2-", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:sendToFrame", + "api:contentssendtoframeframeid-channel-arg1-arg2-", + "api:contents.sendToFrame(frameId, channel[, arg1][, arg2][, ...])", + "doc:sendToFrame", + "doc:contentssendtoframeframeid-channel-arg1-arg2-", + "doc:contents.sendToFrame(frameId, channel[, arg1][, arg2][, ...])" + ] + }, { "objectID": "api-web-contents#contentsenabledeviceemulationparameters", "name": "enableDeviceEmulation", + "signature": "(parameters)", "description": "Enable device emulation with the given parameters.", "parameters": [ { @@ -12750,7 +29546,7 @@ "name": "viewPosition", "type": "Point", "collection": false, - "description": "Position the view on the screen (screenPosition == mobile) (default: {x: 0, y: 0}).", + "description": "Position the view on the screen (screenPosition == mobile) (default: { x: 0, y: 0 }).", "required": true }, { @@ -12796,6 +29592,7 @@ { "objectID": "api-web-contents#contentsdisabledeviceemulation", "name": "disableDeviceEmulation", + "signature": "()", "description": "Disable device emulation enabled by webContents.enableDeviceEmulation.", "apiType": "instanceMethod", "fullSignature": "contents.disableDeviceEmulation()", @@ -12816,6 +29613,7 @@ { "objectID": "api-web-contents#contentssendinputeventevent", "name": "sendInputEvent", + "signature": "(event)", "description": "Sends an input event to the page. Note: The BrowserWindow containing the contents needs to be focused for sendInputEvent() to work. For keyboard events, the event object also have following properties: For mouse events, the event object also have following properties: For the mouseWheel event, the event object also have following properties:", "parameters": [ { @@ -12892,7 +29690,8 @@ { "objectID": "api-web-contents#contentsbeginframesubscriptiononlydirty-callback", "name": "beginFrameSubscription", - "description": "Begin subscribing for presentation events and captured frames, the callback will be called with callback(frameBuffer, dirtyRect) when there is a presentation event. The frameBuffer is a Buffer that contains raw pixel data. On most machines, the pixel data is effectively stored in 32bit BGRA format, but the actual representation depends on the endianness of the processor (most modern processors are little-endian, on machines with big-endian processors the data is in 32bit ARGB format). The dirtyRect is an object with x, y, width, height properties that describes which part of the page was repainted. If onlyDirty is set to true, frameBuffer will only contain the repainted area. onlyDirty defaults to false.", + "signature": "([onlyDirty ,]callback)", + "description": "Begin subscribing for presentation events and captured frames, the callback will be called with callback(image, dirtyRect) when there is a presentation event. The image is an instance of NativeImage that stores the captured frame. The dirtyRect is an object with x, y, width, height properties that describes which part of the page was repainted. If onlyDirty is set to true, image will only contain the repainted area. onlyDirty defaults to false.", "parameters": [ { "name": "onlyDirty", @@ -12908,8 +29707,8 @@ "required": true, "parameters": [ { - "name": "frameBuffer", - "type": "Buffer", + "name": "image", + "type": "NativeImage", "collection": false, "description": "", "required": true @@ -12926,7 +29725,7 @@ ], "apiType": "instanceMethod", "fullSignature": "contents.beginFrameSubscription([onlyDirty ,]callback)", - "tldr": "Begin subscribing for presentation events and captured frames, the callback will be called with callback(frameBuffer, dirtyRect) when there is a presentation event.", + "tldr": "Begin subscribing for presentation events and captured frames, the callback will be called with callback(image, dirtyRect) when there is a presentation event.", "slug": "contentsbeginframesubscriptiononlydirty-callback", "url": "https://electronjs.org/docs/api/web-contents#contentsbeginframesubscriptiononlydirty-callback", "keyValuePairs": [ @@ -12943,6 +29742,7 @@ { "objectID": "api-web-contents#contentsendframesubscription", "name": "endFrameSubscription", + "signature": "()", "description": "End subscribing for frame presentation events.", "apiType": "instanceMethod", "fullSignature": "contents.endFrameSubscription()", @@ -12963,6 +29763,7 @@ { "objectID": "api-web-contents#contentsstartdragitem", "name": "startDrag", + "signature": "(item)", "description": "Sets the item as dragging item for current drag-drop operation, file is the absolute path of the file to be dragged, and icon is the image showing under the cursor when dragging.", "parameters": [ { @@ -13007,6 +29808,7 @@ { "objectID": "api-web-contents#contentssavepagefullpath-savetype-callback", "name": "savePage", + "signature": "(fullPath, saveType, callback)", "parameters": [ { "name": "fullPath", @@ -13077,6 +29879,7 @@ { "objectID": "api-web-contents#contentsshowdefinitionforselection", "name": "showDefinitionForSelection", + "signature": "()", "platforms": [ "macOS" ], @@ -13097,62 +29900,10 @@ "doc:contents.showDefinitionForSelection()" ] }, - { - "objectID": "api-web-contents#contentssetsizeoptions", - "name": "setSize", - "description": "Set the size of the page. This is only supported for guest contents.", - "parameters": [ - { - "name": "options", - "type": "Object", - "collection": false, - "required": true, - "properties": [ - { - "name": "normal", - "type": "Object", - "collection": false, - "description": "Normal size of the page. This can be used in combination with the attribute to manually resize the webview guest contents.", - "required": false, - "properties": [ - { - "name": "width", - "type": "Integer", - "collection": false, - "description": "", - "required": true - }, - { - "name": "height", - "type": "Integer", - "collection": false, - "description": "", - "required": true - } - ] - } - ] - } - ], - "apiType": "instanceMethod", - "fullSignature": "contents.setSize(options)", - "tldr": "Set the size of the page.", - "slug": "contentssetsizeoptions", - "url": "https://electronjs.org/docs/api/web-contents#contentssetsizeoptions", - "keyValuePairs": [ - "is:doc", - "is:api", - "api:setSize", - "api:contentssetsizeoptions", - "api:contents.setSize(options)", - "doc:setSize", - "doc:contentssetsizeoptions", - "doc:contents.setSize(options)" - ] - }, { "objectID": "api-web-contents#contentsisoffscreen", "name": "isOffscreen", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -13177,6 +29928,7 @@ { "objectID": "api-web-contents#contentsstartpainting", "name": "startPainting", + "signature": "()", "description": "If offscreen rendering is enabled and not painting, start painting.", "apiType": "instanceMethod", "fullSignature": "contents.startPainting()", @@ -13197,6 +29949,7 @@ { "objectID": "api-web-contents#contentsstoppainting", "name": "stopPainting", + "signature": "()", "description": "If offscreen rendering is enabled and painting, stop painting.", "apiType": "instanceMethod", "fullSignature": "contents.stopPainting()", @@ -13217,6 +29970,7 @@ { "objectID": "api-web-contents#contentsispainting", "name": "isPainting", + "signature": "()", "returns": { "type": "Boolean", "collection": false, @@ -13241,6 +29995,7 @@ { "objectID": "api-web-contents#contentssetframeratefps", "name": "setFrameRate", + "signature": "(fps)", "description": "If offscreen rendering is enabled sets the frame rate to the specified number. Only values between 1 and 60 are accepted.", "parameters": [ { @@ -13269,6 +30024,7 @@ { "objectID": "api-web-contents#contentsgetframerate", "name": "getFrameRate", + "signature": "()", "returns": { "type": "Integer", "collection": false, @@ -13293,6 +30049,7 @@ { "objectID": "api-web-contents#contentsinvalidate", "name": "invalidate", + "signature": "()", "description": "Schedules a full repaint of the window this web contents is in. If offscreen rendering is enabled invalidates the frame and generates a new one through the 'paint' event.", "apiType": "instanceMethod", "fullSignature": "contents.invalidate()", @@ -13313,6 +30070,7 @@ { "objectID": "api-web-contents#contentsgetwebrtciphandlingpolicy", "name": "getWebRTCIPHandlingPolicy", + "signature": "()", "returns": { "type": "String", "collection": false, @@ -13337,6 +30095,7 @@ { "objectID": "api-web-contents#contentssetwebrtciphandlingpolicypolicy", "name": "setWebRTCIPHandlingPolicy", + "signature": "(policy)", "description": "Setting the WebRTC IP handling policy allows you to control which IPs are exposed via WebRTC. See BrowserLeaks for more details.", "parameters": [ { @@ -13384,14 +30143,15 @@ { "objectID": "api-web-contents#contentsgetosprocessid", "name": "getOSProcessId", + "signature": "()", "returns": { "type": "Integer", "collection": false, - "description": "The pid of the associated renderer process." + "description": "The operating system pid of the associated renderer process." }, "apiType": "instanceMethod", "fullSignature": "contents.getOSProcessId()", - "tldr": "Returns the pid of the associated renderer process.", + "tldr": "Returns the operating system pid of the associated renderer process.", "slug": "contentsgetosprocessid", "url": "https://electronjs.org/docs/api/web-contents#contentsgetosprocessid", "keyValuePairs": [ @@ -13405,6 +30165,141 @@ "doc:contents.getOSProcessId()" ] }, + { + "objectID": "api-web-contents#contentsgetprocessid", + "name": "getProcessId", + "signature": "()", + "returns": { + "type": "Integer", + "collection": false, + "description": "The Chromium internal pid of the associated renderer. Can be compared to the frameProcessId passed by frame specific navigation events (e.g. did-frame-navigate)" + }, + "apiType": "instanceMethod", + "fullSignature": "contents.getProcessId()", + "tldr": "Returns the Chromium internal pid of the associated renderer. Can be compared to the frameProcessId passed by frame specific navigation events (e.g. did-frame-navigate).", + "slug": "contentsgetprocessid", + "url": "https://electronjs.org/docs/api/web-contents#contentsgetprocessid", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getProcessId", + "api:contentsgetprocessid", + "api:contents.getProcessId()", + "doc:getProcessId", + "doc:contentsgetprocessid", + "doc:contents.getProcessId()" + ] + }, + { + "objectID": "api-web-contents#contentstakeheapsnapshotfilepath", + "name": "takeHeapSnapshot", + "signature": "(filePath)", + "description": "Takes a V8 heap snapshot and saves it to filePath.", + "parameters": [ + { + "name": "filePath", + "type": "String", + "collection": false, + "description": "Path to the output file.", + "required": true + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "void", + "description": "Indicates whether the snapshot has been created successfully." + }, + "apiType": "instanceMethod", + "fullSignature": "contents.takeHeapSnapshot(filePath)", + "tldr": "Takes a V8 heap snapshot and saves it to filePath.", + "slug": "contentstakeheapsnapshotfilepath", + "url": "https://electronjs.org/docs/api/web-contents#contentstakeheapsnapshotfilepath", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:takeHeapSnapshot", + "api:contentstakeheapsnapshotfilepath", + "api:contents.takeHeapSnapshot(filePath)", + "doc:takeHeapSnapshot", + "doc:contentstakeheapsnapshotfilepath", + "doc:contents.takeHeapSnapshot(filePath)" + ] + }, + { + "objectID": "api-web-contents#contentssetbackgroundthrottlingallowed", + "name": "setBackgroundThrottling", + "signature": "(allowed)", + "description": "Controls whether or not this WebContents will throttle animations and timers when the page becomes backgrounded. This also affects the Page Visibility API.", + "parameters": [ + { + "name": "allowed", + "type": "Boolean", + "collection": false, + "required": true + } + ], + "apiType": "instanceMethod", + "fullSignature": "contents.setBackgroundThrottling(allowed)", + "tldr": "Controls whether or not this WebContents will throttle animations and timers when the page becomes backgrounded.", + "slug": "contentssetbackgroundthrottlingallowed", + "url": "https://electronjs.org/docs/api/web-contents#contentssetbackgroundthrottlingallowed", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setBackgroundThrottling", + "api:contentssetbackgroundthrottlingallowed", + "api:contents.setBackgroundThrottling(allowed)", + "doc:setBackgroundThrottling", + "doc:contentssetbackgroundthrottlingallowed", + "doc:contents.setBackgroundThrottling(allowed)" + ] + }, + { + "objectID": "api-web-contents#contentsgettype", + "name": "getType", + "signature": "()", + "returns": { + "type": "String", + "collection": false, + "description": "the type of the webContent. Can be backgroundPage, window, browserView, remote, webview or offscreen.", + "possibleValues": [ + { + "value": "backgroundPage" + }, + { + "value": "window" + }, + { + "value": "browserView" + }, + { + "value": "remote" + }, + { + "value": "webview" + }, + { + "value": "offscreen" + } + ] + }, + "apiType": "instanceMethod", + "fullSignature": "contents.getType()", + "tldr": "Returns the type of the webContent. Can be backgroundPage, window, browserView, remote, webview or offscreen.", + "slug": "contentsgettype", + "url": "https://electronjs.org/docs/api/web-contents#contentsgettype", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getType", + "api:contentsgettype", + "api:contents.getType()", + "doc:getType", + "doc:contentsgettype", + "doc:contents.getType()" + ] + }, { "objectID": "api-web-contents#event-did-finish-load", "name": "did-finish-load", @@ -13412,15 +30307,16 @@ "apiType": "event", "fullSignature": "contents.on('did-finish-load')", "url": "https://electronjs.org/docs/api/web-contents#event-did-finish-load", + "slug": "contentsondid-finish-load", "tldr": "Emitted when the navigation is done, i.e.", "keyValuePairs": [ "is:doc", "is:api", "api:did-finish-load", - "api:undefined", + "api:contentsondid-finish-load", "api:contents.on('did-finish-load')", "doc:did-finish-load", - "doc:undefined", + "doc:contentsondid-finish-load", "doc:contents.on('did-finish-load')" ] }, @@ -13458,20 +30354,33 @@ "type": "Boolean", "collection": false, "required": true + }, + { + "name": "frameProcessId", + "type": "Integer", + "collection": false, + "required": true + }, + { + "name": "frameRoutingId", + "type": "Integer", + "collection": false, + "required": true } ], "apiType": "event", "fullSignature": "contents.on('did-fail-load')", "url": "https://electronjs.org/docs/api/web-contents#event-did-fail-load", + "slug": "contentsondid-fail-load", "tldr": "This event is like did-finish-load but emitted when the load failed or was cancelled, e.g.", "keyValuePairs": [ "is:doc", "is:api", "api:did-fail-load", - "api:undefined", + "api:contentsondid-fail-load", "api:contents.on('did-fail-load')", "doc:did-fail-load", - "doc:undefined", + "doc:contentsondid-fail-load", "doc:contents.on('did-fail-load')" ] }, @@ -13491,20 +30400,33 @@ "type": "Boolean", "collection": false, "required": true + }, + { + "name": "frameProcessId", + "type": "Integer", + "collection": false, + "required": true + }, + { + "name": "frameRoutingId", + "type": "Integer", + "collection": false, + "required": true } ], "apiType": "event", "fullSignature": "contents.on('did-frame-finish-load')", "url": "https://electronjs.org/docs/api/web-contents#event-did-frame-finish-load", + "slug": "contentsondid-frame-finish-load", "tldr": "Emitted when a frame has done navigation.", "keyValuePairs": [ "is:doc", "is:api", "api:did-frame-finish-load", - "api:undefined", + "api:contentsondid-frame-finish-load", "api:contents.on('did-frame-finish-load')", "doc:did-frame-finish-load", - "doc:undefined", + "doc:contentsondid-frame-finish-load", "doc:contents.on('did-frame-finish-load')" ] }, @@ -13515,15 +30437,16 @@ "apiType": "event", "fullSignature": "contents.on('did-start-loading')", "url": "https://electronjs.org/docs/api/web-contents#event-did-start-loading", + "slug": "contentsondid-start-loading", "tldr": "Corresponds to the points in time when the spinner of the tab started spinning.", "keyValuePairs": [ "is:doc", "is:api", "api:did-start-loading", - "api:undefined", + "api:contentsondid-start-loading", "api:contents.on('did-start-loading')", "doc:did-start-loading", - "doc:undefined", + "doc:contentsondid-start-loading", "doc:contents.on('did-start-loading')" ] }, @@ -13534,162 +30457,19 @@ "apiType": "event", "fullSignature": "contents.on('did-stop-loading')", "url": "https://electronjs.org/docs/api/web-contents#event-did-stop-loading", + "slug": "contentsondid-stop-loading", "tldr": "Corresponds to the points in time when the spinner of the tab stopped spinning.", "keyValuePairs": [ "is:doc", "is:api", "api:did-stop-loading", - "api:undefined", + "api:contentsondid-stop-loading", "api:contents.on('did-stop-loading')", "doc:did-stop-loading", - "doc:undefined", + "doc:contentsondid-stop-loading", "doc:contents.on('did-stop-loading')" ] }, - { - "objectID": "api-web-contents#event-did-get-response-details", - "name": "did-get-response-details", - "description": "Emitted when details regarding a requested resource are available. status indicates the socket connection to download the resource.", - "returns": [ - { - "name": "event", - "type": "Event", - "collection": false, - "required": true - }, - { - "name": "status", - "type": "Boolean", - "collection": false, - "required": true - }, - { - "name": "newURL", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "originalURL", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "httpResponseCode", - "type": "Integer", - "collection": false, - "required": true - }, - { - "name": "requestMethod", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "referrer", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "headers", - "type": "Object", - "collection": false, - "required": true - }, - { - "name": "resourceType", - "type": "String", - "collection": false, - "required": true - } - ], - "apiType": "event", - "fullSignature": "contents.on('did-get-response-details')", - "url": "https://electronjs.org/docs/api/web-contents#event-did-get-response-details", - "tldr": "Emitted when details regarding a requested resource are available.", - "keyValuePairs": [ - "is:doc", - "is:api", - "api:did-get-response-details", - "api:undefined", - "api:contents.on('did-get-response-details')", - "doc:did-get-response-details", - "doc:undefined", - "doc:contents.on('did-get-response-details')" - ] - }, - { - "objectID": "api-web-contents#event-did-get-redirect-request", - "name": "did-get-redirect-request", - "description": "Emitted when a redirect is received while requesting a resource.", - "returns": [ - { - "name": "event", - "type": "Event", - "collection": false, - "required": true - }, - { - "name": "oldURL", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "newURL", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "isMainFrame", - "type": "Boolean", - "collection": false, - "required": true - }, - { - "name": "httpResponseCode", - "type": "Integer", - "collection": false, - "required": true - }, - { - "name": "requestMethod", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "referrer", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "headers", - "type": "Object", - "collection": false, - "required": true - } - ], - "apiType": "event", - "fullSignature": "contents.on('did-get-redirect-request')", - "url": "https://electronjs.org/docs/api/web-contents#event-did-get-redirect-request", - "tldr": "Emitted when a redirect is received while requesting a resource.", - "keyValuePairs": [ - "is:doc", - "is:api", - "api:did-get-redirect-request", - "api:undefined", - "api:contents.on('did-get-redirect-request')", - "doc:did-get-redirect-request", - "doc:undefined", - "doc:contents.on('did-get-redirect-request')" - ] - }, { "objectID": "api-web-contents#event-dom-ready", "name": "dom-ready", @@ -13705,15 +30485,16 @@ "apiType": "event", "fullSignature": "contents.on('dom-ready')", "url": "https://electronjs.org/docs/api/web-contents#event-dom-ready", + "slug": "contentsondom-ready", "tldr": "Emitted when the document in the given frame is loaded.", "keyValuePairs": [ "is:doc", "is:api", "api:dom-ready", - "api:undefined", + "api:contentsondom-ready", "api:contents.on('dom-ready')", "doc:dom-ready", - "doc:undefined", + "doc:contentsondom-ready", "doc:contents.on('dom-ready')" ] }, @@ -13739,15 +30520,16 @@ "apiType": "event", "fullSignature": "contents.on('page-favicon-updated')", "url": "https://electronjs.org/docs/api/web-contents#event-page-favicon-updated", + "slug": "contentsonpage-favicon-updated", "tldr": "Emitted when page receives favicon urls.", "keyValuePairs": [ "is:doc", "is:api", "api:page-favicon-updated", - "api:undefined", + "api:contentsonpage-favicon-updated", "api:contents.on('page-favicon-updated')", "doc:page-favicon-updated", - "doc:undefined", + "doc:contentsonpage-favicon-updated", "doc:contents.on('page-favicon-updated')" ] }, @@ -13814,20 +30596,28 @@ "collection": true, "description": "The non-standard features (features not handled by Chromium or Electron) given to `window.open()`.", "required": true + }, + { + "name": "referrer", + "type": "Referrer", + "collection": false, + "description": "The referrer that will be passed to the new window. May or may not result in the `Referer` header being sent, depending on the referrer policy.", + "required": true } ], "apiType": "event", "fullSignature": "contents.on('new-window')", "url": "https://electronjs.org/docs/api/web-contents#event-new-window", + "slug": "contentsonnew-window", "tldr": "Emitted when the page requests to open a new window for a url.", "keyValuePairs": [ "is:doc", "is:api", "api:new-window", - "api:undefined", + "api:contentsonnew-window", "api:contents.on('new-window')", "doc:new-window", - "doc:undefined", + "doc:contentsonnew-window", "doc:contents.on('new-window')" ] }, @@ -13852,22 +30642,23 @@ "apiType": "event", "fullSignature": "contents.on('will-navigate')", "url": "https://electronjs.org/docs/api/web-contents#event-will-navigate", + "slug": "contentsonwill-navigate", "tldr": "Emitted when a user or the page wants to start navigation.", "keyValuePairs": [ "is:doc", "is:api", "api:will-navigate", - "api:undefined", + "api:contentsonwill-navigate", "api:contents.on('will-navigate')", "doc:will-navigate", - "doc:undefined", + "doc:contentsonwill-navigate", "doc:contents.on('will-navigate')" ] }, { - "objectID": "api-web-contents#event-did-navigate", - "name": "did-navigate", - "description": "Emitted when a navigation is done. This event is not emitted for in-page navigations, such as clicking anchor links or updating the window.location.hash. Use did-navigate-in-page event for this purpose.", + "objectID": "api-web-contents#event-did-start-navigation", + "name": "did-start-navigation", + "description": "Emitted when any frame (including main) starts navigating. isInplace will be true for in-page navigations.", "returns": [ { "name": "event", @@ -13880,27 +30671,282 @@ "type": "String", "collection": false, "required": true + }, + { + "name": "isInPlace", + "type": "Boolean", + "collection": false, + "required": true + }, + { + "name": "isMainFrame", + "type": "Boolean", + "collection": false, + "required": true + }, + { + "name": "frameProcessId", + "type": "Integer", + "collection": false, + "required": true + }, + { + "name": "frameRoutingId", + "type": "Integer", + "collection": false, + "required": true + } + ], + "apiType": "event", + "fullSignature": "contents.on('did-start-navigation')", + "url": "https://electronjs.org/docs/api/web-contents#event-did-start-navigation", + "slug": "contentsondid-start-navigation", + "tldr": "Emitted when any frame (including main) starts navigating.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:did-start-navigation", + "api:contentsondid-start-navigation", + "api:contents.on('did-start-navigation')", + "doc:did-start-navigation", + "doc:contentsondid-start-navigation", + "doc:contents.on('did-start-navigation')" + ] + }, + { + "objectID": "api-web-contents#event-will-redirect", + "name": "will-redirect", + "description": "Emitted as a server side redirect occurs during navigation. For example a 302 redirect. This event will be emitted after did-start-navigation and always before the did-redirect-navigation event for the same navigation. Calling event.preventDefault() will prevent the navigation (not just the redirect).", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "url", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "isInPlace", + "type": "Boolean", + "collection": false, + "required": true + }, + { + "name": "isMainFrame", + "type": "Boolean", + "collection": false, + "required": true + }, + { + "name": "frameProcessId", + "type": "Integer", + "collection": false, + "required": true + }, + { + "name": "frameRoutingId", + "type": "Integer", + "collection": false, + "required": true + } + ], + "apiType": "event", + "fullSignature": "contents.on('will-redirect')", + "url": "https://electronjs.org/docs/api/web-contents#event-will-redirect", + "slug": "contentsonwill-redirect", + "tldr": "Emitted as a server side redirect occurs during navigation.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:will-redirect", + "api:contentsonwill-redirect", + "api:contents.on('will-redirect')", + "doc:will-redirect", + "doc:contentsonwill-redirect", + "doc:contents.on('will-redirect')" + ] + }, + { + "objectID": "api-web-contents#event-did-redirect-navigation", + "name": "did-redirect-navigation", + "description": "Emitted after a server side redirect occurs during navigation. For example a 302 redirect. This event can not be prevented, if you want to prevent redirects you should checkout out the will-redirect event above.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "url", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "isInPlace", + "type": "Boolean", + "collection": false, + "required": true + }, + { + "name": "isMainFrame", + "type": "Boolean", + "collection": false, + "required": true + }, + { + "name": "frameProcessId", + "type": "Integer", + "collection": false, + "required": true + }, + { + "name": "frameRoutingId", + "type": "Integer", + "collection": false, + "required": true + } + ], + "apiType": "event", + "fullSignature": "contents.on('did-redirect-navigation')", + "url": "https://electronjs.org/docs/api/web-contents#event-did-redirect-navigation", + "slug": "contentsondid-redirect-navigation", + "tldr": "Emitted after a server side redirect occurs during navigation.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:did-redirect-navigation", + "api:contentsondid-redirect-navigation", + "api:contents.on('did-redirect-navigation')", + "doc:did-redirect-navigation", + "doc:contentsondid-redirect-navigation", + "doc:contents.on('did-redirect-navigation')" + ] + }, + { + "objectID": "api-web-contents#event-did-navigate", + "name": "did-navigate", + "description": "Emitted when a main frame navigation is done. This event is not emitted for in-page navigations, such as clicking anchor links or updating the window.location.hash. Use did-navigate-in-page event for this purpose.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "url", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "httpResponseCode", + "type": "Integer", + "collection": false, + "description": "-1 for non HTTP navigations", + "required": true + }, + { + "name": "httpStatusText", + "type": "String", + "collection": false, + "description": "empty for non HTTP navigations", + "required": true } ], "apiType": "event", "fullSignature": "contents.on('did-navigate')", "url": "https://electronjs.org/docs/api/web-contents#event-did-navigate", - "tldr": "Emitted when a navigation is done.", + "slug": "contentsondid-navigate", + "tldr": "Emitted when a main frame navigation is done.", "keyValuePairs": [ "is:doc", "is:api", "api:did-navigate", - "api:undefined", + "api:contentsondid-navigate", "api:contents.on('did-navigate')", "doc:did-navigate", - "doc:undefined", + "doc:contentsondid-navigate", "doc:contents.on('did-navigate')" ] }, + { + "objectID": "api-web-contents#event-did-frame-navigate", + "name": "did-frame-navigate", + "description": "Emitted when any frame navigation is done. This event is not emitted for in-page navigations, such as clicking anchor links or updating the window.location.hash. Use did-navigate-in-page event for this purpose.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "url", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "httpResponseCode", + "type": "Integer", + "collection": false, + "description": "-1 for non HTTP navigations", + "required": true + }, + { + "name": "httpStatusText", + "type": "String", + "collection": false, + "description": "empty for non HTTP navigations,", + "required": true + }, + { + "name": "isMainFrame", + "type": "Boolean", + "collection": false, + "required": true + }, + { + "name": "frameProcessId", + "type": "Integer", + "collection": false, + "required": true + }, + { + "name": "frameRoutingId", + "type": "Integer", + "collection": false, + "required": true + } + ], + "apiType": "event", + "fullSignature": "contents.on('did-frame-navigate')", + "url": "https://electronjs.org/docs/api/web-contents#event-did-frame-navigate", + "slug": "contentsondid-frame-navigate", + "tldr": "Emitted when any frame navigation is done.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:did-frame-navigate", + "api:contentsondid-frame-navigate", + "api:contents.on('did-frame-navigate')", + "doc:did-frame-navigate", + "doc:contentsondid-frame-navigate", + "doc:contents.on('did-frame-navigate')" + ] + }, { "objectID": "api-web-contents#event-did-navigate-in-page", "name": "did-navigate-in-page", - "description": "Emitted when an in-page navigation happened. When in-page navigation happens, the page URL changes but does not cause navigation outside of the page. Examples of this occurring are when anchor links are clicked or when the DOM hashchange event is triggered.", + "description": "Emitted when an in-page navigation happened in any frame. When in-page navigation happens, the page URL changes but does not cause navigation outside of the page. Examples of this occurring are when anchor links are clicked or when the DOM hashchange event is triggered.", "returns": [ { "name": "event", @@ -13919,20 +30965,33 @@ "type": "Boolean", "collection": false, "required": true + }, + { + "name": "frameProcessId", + "type": "Integer", + "collection": false, + "required": true + }, + { + "name": "frameRoutingId", + "type": "Integer", + "collection": false, + "required": true } ], "apiType": "event", "fullSignature": "contents.on('did-navigate-in-page')", "url": "https://electronjs.org/docs/api/web-contents#event-did-navigate-in-page", - "tldr": "Emitted when an in-page navigation happened.", + "slug": "contentsondid-navigate-in-page", + "tldr": "Emitted when an in-page navigation happened in any frame.", "keyValuePairs": [ "is:doc", "is:api", "api:did-navigate-in-page", - "api:undefined", + "api:contentsondid-navigate-in-page", "api:contents.on('did-navigate-in-page')", "doc:did-navigate-in-page", - "doc:undefined", + "doc:contentsondid-navigate-in-page", "doc:contents.on('did-navigate-in-page')" ] }, @@ -13951,15 +31010,16 @@ "apiType": "event", "fullSignature": "contents.on('will-prevent-unload')", "url": "https://electronjs.org/docs/api/web-contents#event-will-prevent-unload", + "slug": "contentsonwill-prevent-unload", "tldr": "Emitted when a beforeunload event handler is attempting to cancel a page unload.", "keyValuePairs": [ "is:doc", "is:api", "api:will-prevent-unload", - "api:undefined", + "api:contentsonwill-prevent-unload", "api:contents.on('will-prevent-unload')", "doc:will-prevent-unload", - "doc:undefined", + "doc:contentsonwill-prevent-unload", "doc:contents.on('will-prevent-unload')" ] }, @@ -13984,18 +31044,59 @@ "apiType": "event", "fullSignature": "contents.on('crashed')", "url": "https://electronjs.org/docs/api/web-contents#event-crashed", + "slug": "contentsoncrashed", "tldr": "Emitted when the renderer process crashes or is killed.", "keyValuePairs": [ "is:doc", "is:api", "api:crashed", - "api:undefined", + "api:contentsoncrashed", "api:contents.on('crashed')", "doc:crashed", - "doc:undefined", + "doc:contentsoncrashed", "doc:contents.on('crashed')" ] }, + { + "objectID": "api-web-contents#event-unresponsive", + "name": "unresponsive", + "description": "Emitted when the web page becomes unresponsive.", + "apiType": "event", + "fullSignature": "contents.on('unresponsive')", + "url": "https://electronjs.org/docs/api/web-contents#event-unresponsive", + "slug": "contentsonunresponsive", + "tldr": "Emitted when the web page becomes unresponsive.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:unresponsive", + "api:contentsonunresponsive", + "api:contents.on('unresponsive')", + "doc:unresponsive", + "doc:contentsonunresponsive", + "doc:contents.on('unresponsive')" + ] + }, + { + "objectID": "api-web-contents#event-responsive", + "name": "responsive", + "description": "Emitted when the unresponsive web page becomes responsive again.", + "apiType": "event", + "fullSignature": "contents.on('responsive')", + "url": "https://electronjs.org/docs/api/web-contents#event-responsive", + "slug": "contentsonresponsive", + "tldr": "Emitted when the unresponsive web page becomes responsive again.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:responsive", + "api:contentsonresponsive", + "api:contents.on('responsive')", + "doc:responsive", + "doc:contentsonresponsive", + "doc:contents.on('responsive')" + ] + }, { "objectID": "api-web-contents#event-plugin-crashed", "name": "plugin-crashed", @@ -14023,15 +31124,16 @@ "apiType": "event", "fullSignature": "contents.on('plugin-crashed')", "url": "https://electronjs.org/docs/api/web-contents#event-plugin-crashed", + "slug": "contentsonplugin-crashed", "tldr": "Emitted when a plugin process has crashed.", "keyValuePairs": [ "is:doc", "is:api", "api:plugin-crashed", - "api:undefined", + "api:contentsonplugin-crashed", "api:contents.on('plugin-crashed')", "doc:plugin-crashed", - "doc:undefined", + "doc:contentsonplugin-crashed", "doc:contents.on('plugin-crashed')" ] }, @@ -14042,15 +31144,16 @@ "apiType": "event", "fullSignature": "contents.on('destroyed')", "url": "https://electronjs.org/docs/api/web-contents#event-destroyed", + "slug": "contentsondestroyed", "tldr": "Emitted when webContents is destroyed.", "keyValuePairs": [ "is:doc", "is:api", "api:destroyed", - "api:undefined", + "api:contentsondestroyed", "api:contents.on('destroyed')", "doc:destroyed", - "doc:undefined", + "doc:contentsondestroyed", "doc:contents.on('destroyed')" ] }, @@ -14134,15 +31237,16 @@ "apiType": "event", "fullSignature": "contents.on('before-input-event')", "url": "https://electronjs.org/docs/api/web-contents#event-before-input-event", + "slug": "contentsonbefore-input-event", "tldr": "Emitted before dispatching the keydown and keyup events in the page.", "keyValuePairs": [ "is:doc", "is:api", "api:before-input-event", - "api:undefined", + "api:contentsonbefore-input-event", "api:contents.on('before-input-event')", "doc:before-input-event", - "doc:undefined", + "doc:contentsonbefore-input-event", "doc:contents.on('before-input-event')" ] }, @@ -14153,15 +31257,16 @@ "apiType": "event", "fullSignature": "contents.on('devtools-opened')", "url": "https://electronjs.org/docs/api/web-contents#event-devtools-opened", + "slug": "contentsondevtools-opened", "tldr": "Emitted when DevTools is opened.", "keyValuePairs": [ "is:doc", "is:api", "api:devtools-opened", - "api:undefined", + "api:contentsondevtools-opened", "api:contents.on('devtools-opened')", "doc:devtools-opened", - "doc:undefined", + "doc:contentsondevtools-opened", "doc:contents.on('devtools-opened')" ] }, @@ -14172,15 +31277,16 @@ "apiType": "event", "fullSignature": "contents.on('devtools-closed')", "url": "https://electronjs.org/docs/api/web-contents#event-devtools-closed", + "slug": "contentsondevtools-closed", "tldr": "Emitted when DevTools is closed.", "keyValuePairs": [ "is:doc", "is:api", "api:devtools-closed", - "api:undefined", + "api:contentsondevtools-closed", "api:contents.on('devtools-closed')", "doc:devtools-closed", - "doc:undefined", + "doc:contentsondevtools-closed", "doc:contents.on('devtools-closed')" ] }, @@ -14191,15 +31297,16 @@ "apiType": "event", "fullSignature": "contents.on('devtools-focused')", "url": "https://electronjs.org/docs/api/web-contents#event-devtools-focused", + "slug": "contentsondevtools-focused", "tldr": "Emitted when DevTools is focused / opened.", "keyValuePairs": [ "is:doc", "is:api", "api:devtools-focused", - "api:undefined", + "api:contentsondevtools-focused", "api:contents.on('devtools-focused')", "doc:devtools-focused", - "doc:undefined", + "doc:contentsondevtools-focused", "doc:contents.on('devtools-focused')" ] }, @@ -14252,15 +31359,16 @@ "apiType": "event", "fullSignature": "contents.on('certificate-error')", "url": "https://electronjs.org/docs/api/web-contents#event-certificate-error", + "slug": "contentsoncertificate-error", "tldr": "Emitted when failed to verify the certificate for url.", "keyValuePairs": [ "is:doc", "is:api", "api:certificate-error", - "api:undefined", + "api:contentsoncertificate-error", "api:contents.on('certificate-error')", "doc:certificate-error", - "doc:undefined", + "doc:contentsoncertificate-error", "doc:contents.on('certificate-error')" ] }, @@ -14306,15 +31414,16 @@ "apiType": "event", "fullSignature": "contents.on('select-client-certificate')", "url": "https://electronjs.org/docs/api/web-contents#event-select-client-certificate", + "slug": "contentsonselect-client-certificate", "tldr": "Emitted when a client certificate is requested.", "keyValuePairs": [ "is:doc", "is:api", "api:select-client-certificate", - "api:undefined", + "api:contentsonselect-client-certificate", "api:contents.on('select-client-certificate')", "doc:select-client-certificate", - "doc:undefined", + "doc:contentsonselect-client-certificate", "doc:contents.on('select-client-certificate')" ] }, @@ -14427,15 +31536,16 @@ "apiType": "event", "fullSignature": "contents.on('login')", "url": "https://electronjs.org/docs/api/web-contents#event-login", + "slug": "contentsonlogin", "tldr": "Emitted when webContents wants to do basic auth.", "keyValuePairs": [ "is:doc", "is:api", "api:login", - "api:undefined", + "api:contentsonlogin", "api:contents.on('login')", "doc:login", - "doc:undefined", + "doc:contentsonlogin", "doc:contents.on('login')" ] }, @@ -14498,15 +31608,16 @@ "apiType": "event", "fullSignature": "contents.on('found-in-page')", "url": "https://electronjs.org/docs/api/web-contents#event-found-in-page", + "slug": "contentsonfound-in-page", "tldr": "Emitted when a result is available for [webContents.findInPage] request.", "keyValuePairs": [ "is:doc", "is:api", "api:found-in-page", - "api:undefined", + "api:contentsonfound-in-page", "api:contents.on('found-in-page')", "doc:found-in-page", - "doc:undefined", + "doc:contentsonfound-in-page", "doc:contents.on('found-in-page')" ] }, @@ -14517,15 +31628,16 @@ "apiType": "event", "fullSignature": "contents.on('media-started-playing')", "url": "https://electronjs.org/docs/api/web-contents#event-media-started-playing", + "slug": "contentsonmedia-started-playing", "tldr": "Emitted when media starts playing.", "keyValuePairs": [ "is:doc", "is:api", "api:media-started-playing", - "api:undefined", + "api:contentsonmedia-started-playing", "api:contents.on('media-started-playing')", "doc:media-started-playing", - "doc:undefined", + "doc:contentsonmedia-started-playing", "doc:contents.on('media-started-playing')" ] }, @@ -14536,15 +31648,16 @@ "apiType": "event", "fullSignature": "contents.on('media-paused')", "url": "https://electronjs.org/docs/api/web-contents#event-media-paused", + "slug": "contentsonmedia-paused", "tldr": "Emitted when media is paused or done playing.", "keyValuePairs": [ "is:doc", "is:api", "api:media-paused", - "api:undefined", + "api:contentsonmedia-paused", "api:contents.on('media-paused')", "doc:media-paused", - "doc:undefined", + "doc:contentsonmedia-paused", "doc:contents.on('media-paused')" ] }, @@ -14579,15 +31692,16 @@ "apiType": "event", "fullSignature": "contents.on('did-change-theme-color')", "url": "https://electronjs.org/docs/api/web-contents#event-did-change-theme-color", + "slug": "contentsondid-change-theme-color", "tldr": "Emitted when a page's theme color changes.", "keyValuePairs": [ "is:doc", "is:api", "api:did-change-theme-color", - "api:undefined", + "api:contentsondid-change-theme-color", "api:contents.on('did-change-theme-color')", "doc:did-change-theme-color", - "doc:undefined", + "doc:contentsondid-change-theme-color", "doc:contents.on('did-change-theme-color')" ] }, @@ -14612,15 +31726,16 @@ "apiType": "event", "fullSignature": "contents.on('update-target-url')", "url": "https://electronjs.org/docs/api/web-contents#event-update-target-url", + "slug": "contentsonupdate-target-url", "tldr": "Emitted when mouse moves over a link or the keyboard moves the focus to a link.", "keyValuePairs": [ "is:doc", "is:api", "api:update-target-url", - "api:undefined", + "api:contentsonupdate-target-url", "api:contents.on('update-target-url')", "doc:update-target-url", - "doc:undefined", + "doc:contentsonupdate-target-url", "doc:contents.on('update-target-url')" ] }, @@ -14672,15 +31787,16 @@ "apiType": "event", "fullSignature": "contents.on('cursor-changed')", "url": "https://electronjs.org/docs/api/web-contents#event-cursor-changed", + "slug": "contentsoncursor-changed", "tldr": "Emitted when the cursor's type changes.", "keyValuePairs": [ "is:doc", "is:api", "api:cursor-changed", - "api:undefined", + "api:contentsoncursor-changed", "api:contents.on('cursor-changed')", "doc:cursor-changed", - "doc:undefined", + "doc:contentsoncursor-changed", "doc:contents.on('cursor-changed')" ] }, @@ -14982,15 +32098,16 @@ "apiType": "event", "fullSignature": "contents.on('context-menu')", "url": "https://electronjs.org/docs/api/web-contents#event-context-menu", + "slug": "contentsoncontext-menu", "tldr": "Emitted when there is a new context menu that needs to be handled.", "keyValuePairs": [ "is:doc", "is:api", "api:context-menu", - "api:undefined", + "api:contentsoncontext-menu", "api:contents.on('context-menu')", "doc:context-menu", - "doc:undefined", + "doc:contentsoncontext-menu", "doc:contents.on('context-menu')" ] }, @@ -15030,15 +32147,16 @@ "apiType": "event", "fullSignature": "contents.on('select-bluetooth-device')", "url": "https://electronjs.org/docs/api/web-contents#event-select-bluetooth-device", + "slug": "contentsonselect-bluetooth-device", "tldr": "Emitted when bluetooth device needs to be selected on call to navigator.bluetooth.requestDevice.", "keyValuePairs": [ "is:doc", "is:api", "api:select-bluetooth-device", - "api:undefined", + "api:contentsonselect-bluetooth-device", "api:contents.on('select-bluetooth-device')", "doc:select-bluetooth-device", - "doc:undefined", + "doc:contentsonselect-bluetooth-device", "doc:contents.on('select-bluetooth-device')" ] }, @@ -15070,15 +32188,16 @@ "apiType": "event", "fullSignature": "contents.on('paint')", "url": "https://electronjs.org/docs/api/web-contents#event-paint", + "slug": "contentsonpaint", "tldr": "Emitted when a new frame is generated.", "keyValuePairs": [ "is:doc", "is:api", "api:paint", - "api:undefined", + "api:contentsonpaint", "api:contents.on('paint')", "doc:paint", - "doc:undefined", + "doc:contentsonpaint", "doc:contents.on('paint')" ] }, @@ -15089,15 +32208,16 @@ "apiType": "event", "fullSignature": "contents.on('devtools-reload-page')", "url": "https://electronjs.org/docs/api/web-contents#event-devtools-reload-page", + "slug": "contentsondevtools-reload-page", "tldr": "Emitted when the devtools window instructs the webContents to reload.", "keyValuePairs": [ "is:doc", "is:api", "api:devtools-reload-page", - "api:undefined", + "api:contentsondevtools-reload-page", "api:contents.on('devtools-reload-page')", "doc:devtools-reload-page", - "doc:undefined", + "doc:contentsondevtools-reload-page", "doc:contents.on('devtools-reload-page')" ] }, @@ -15123,22 +32243,23 @@ "name": "params", "type": "Object", "collection": false, - "description": "The other `` parameters such as the `src` URL. This object can be modified to adjust the parameters of the guest page.", + "description": "The other `", "required": true } ], "apiType": "event", "fullSignature": "contents.on('will-attach-webview')", "url": "https://electronjs.org/docs/api/web-contents#event-will-attach-webview", + "slug": "contentsonwill-attach-webview", "tldr": "Emitted when a 's web contents is being attached to this web contents.", "keyValuePairs": [ "is:doc", "is:api", "api:will-attach-webview", - "api:undefined", + "api:contentsonwill-attach-webview", "api:contents.on('will-attach-webview')", "doc:will-attach-webview", - "doc:undefined", + "doc:contentsonwill-attach-webview", "doc:contents.on('will-attach-webview')" ] }, @@ -15157,22 +32278,23 @@ "name": "webContents", "type": "WebContents", "collection": false, - "description": "The guest web contents that is used by the ``.", + "description": "The guest web contents that is used by the `", "required": true } ], "apiType": "event", "fullSignature": "contents.on('did-attach-webview')", "url": "https://electronjs.org/docs/api/web-contents#event-did-attach-webview", + "slug": "contentsondid-attach-webview", "tldr": "Emitted when a has been attached to this web contents.", "keyValuePairs": [ "is:doc", "is:api", "api:did-attach-webview", - "api:undefined", + "api:contentsondid-attach-webview", "api:contents.on('did-attach-webview')", "doc:did-attach-webview", - "doc:undefined", + "doc:contentsondid-attach-webview", "doc:contents.on('did-attach-webview')" ] }, @@ -15181,6 +32303,12 @@ "name": "console-message", "description": "Emitted when the associated window logs a console message. Will not be emitted for windows with offscreen rendering enabled.", "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, { "name": "level", "type": "Integer", @@ -15209,21 +32337,1257 @@ "apiType": "event", "fullSignature": "contents.on('console-message')", "url": "https://electronjs.org/docs/api/web-contents#event-console-message", + "slug": "contentsonconsole-message", "tldr": "Emitted when the associated window logs a console message.", "keyValuePairs": [ "is:doc", "is:api", "api:console-message", - "api:undefined", + "api:contentsonconsole-message", "api:contents.on('console-message')", "doc:console-message", - "doc:undefined", + "doc:contentsonconsole-message", "doc:contents.on('console-message')" ] }, + { + "objectID": "api-web-contents#event-preload-error", + "name": "preload-error", + "description": "Emitted when the preload script preloadPath throws an unhandled exception error.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "preloadPath", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "error", + "type": "Error", + "collection": false, + "required": true + } + ], + "apiType": "event", + "fullSignature": "contents.on('preload-error')", + "url": "https://electronjs.org/docs/api/web-contents#event-preload-error", + "slug": "contentsonpreload-error", + "tldr": "Emitted when the preload script preloadPath throws an unhandled exception error.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:preload-error", + "api:contentsonpreload-error", + "api:contents.on('preload-error')", + "doc:preload-error", + "doc:contentsonpreload-error", + "doc:contents.on('preload-error')" + ] + }, + { + "objectID": "api-web-contents#event-ipc-message", + "name": "ipc-message", + "description": "Emitted when the renderer process sends an asynchronous message via ipcRenderer.send().", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "channel", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "...args", + "type": "any", + "collection": true, + "required": true + } + ], + "apiType": "event", + "fullSignature": "contents.on('ipc-message')", + "url": "https://electronjs.org/docs/api/web-contents#event-ipc-message", + "slug": "contentsonipc-message", + "tldr": "Emitted when the renderer process sends an asynchronous message via ipcRenderer.send().", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:ipc-message", + "api:contentsonipc-message", + "api:contents.on('ipc-message')", + "doc:ipc-message", + "doc:contentsonipc-message", + "doc:contents.on('ipc-message')" + ] + }, + { + "objectID": "api-web-contents#event-ipc-message-sync", + "name": "ipc-message-sync", + "description": "Emitted when the renderer process sends a synchronous message via ipcRenderer.sendSync().", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "channel", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "...args", + "type": "any", + "collection": true, + "required": true + } + ], + "apiType": "event", + "fullSignature": "contents.on('ipc-message-sync')", + "url": "https://electronjs.org/docs/api/web-contents#event-ipc-message-sync", + "slug": "contentsonipc-message-sync", + "tldr": "Emitted when the renderer process sends a synchronous message via ipcRenderer.sendSync().", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:ipc-message-sync", + "api:contentsonipc-message-sync", + "api:contents.on('ipc-message-sync')", + "doc:ipc-message-sync", + "doc:contentsonipc-message-sync", + "doc:contents.on('ipc-message-sync')" + ] + }, + { + "objectID": "api-web-contents#event-desktop-capturer-get-sources", + "name": "desktop-capturer-get-sources", + "description": "Emitted when desktopCapturer.getSources() is called in the renderer process. Calling event.preventDefault() will make it return empty sources.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + } + ], + "apiType": "event", + "fullSignature": "contents.on('desktop-capturer-get-sources')", + "url": "https://electronjs.org/docs/api/web-contents#event-desktop-capturer-get-sources", + "slug": "contentsondesktop-capturer-get-sources", + "tldr": "Emitted when desktopCapturer.getSources() is called in the renderer process.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:desktop-capturer-get-sources", + "api:contentsondesktop-capturer-get-sources", + "api:contents.on('desktop-capturer-get-sources')", + "doc:desktop-capturer-get-sources", + "doc:contentsondesktop-capturer-get-sources", + "doc:contents.on('desktop-capturer-get-sources')" + ] + }, + { + "objectID": "api-web-contents#event-remote-require", + "name": "remote-require", + "description": "Emitted when remote.require() is called in the renderer process. Calling event.preventDefault() will prevent the module from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "moduleName", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "event", + "fullSignature": "contents.on('remote-require')", + "url": "https://electronjs.org/docs/api/web-contents#event-remote-require", + "slug": "contentsonremote-require", + "tldr": "Emitted when remote.require() is called in the renderer process.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:remote-require", + "api:contentsonremote-require", + "api:contents.on('remote-require')", + "doc:remote-require", + "doc:contentsonremote-require", + "doc:contents.on('remote-require')" + ] + }, + { + "objectID": "api-web-contents#event-remote-get-global", + "name": "remote-get-global", + "description": "Emitted when remote.getGlobal() is called in the renderer process. Calling event.preventDefault() will prevent the global from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "globalName", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "event", + "fullSignature": "contents.on('remote-get-global')", + "url": "https://electronjs.org/docs/api/web-contents#event-remote-get-global", + "slug": "contentsonremote-get-global", + "tldr": "Emitted when remote.getGlobal() is called in the renderer process.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:remote-get-global", + "api:contentsonremote-get-global", + "api:contents.on('remote-get-global')", + "doc:remote-get-global", + "doc:contentsonremote-get-global", + "doc:contents.on('remote-get-global')" + ] + }, + { + "objectID": "api-web-contents#event-remote-get-builtin", + "name": "remote-get-builtin", + "description": "Emitted when remote.getBuiltin() is called in the renderer process. Calling event.preventDefault() will prevent the module from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "moduleName", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "event", + "fullSignature": "contents.on('remote-get-builtin')", + "url": "https://electronjs.org/docs/api/web-contents#event-remote-get-builtin", + "slug": "contentsonremote-get-builtin", + "tldr": "Emitted when remote.getBuiltin() is called in the renderer process.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:remote-get-builtin", + "api:contentsonremote-get-builtin", + "api:contents.on('remote-get-builtin')", + "doc:remote-get-builtin", + "doc:contentsonremote-get-builtin", + "doc:contents.on('remote-get-builtin')" + ] + }, + { + "objectID": "api-web-contents#event-remote-get-current-window", + "name": "remote-get-current-window", + "description": "Emitted when remote.getCurrentWindow() is called in the renderer process. Calling event.preventDefault() will prevent the object from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + } + ], + "apiType": "event", + "fullSignature": "contents.on('remote-get-current-window')", + "url": "https://electronjs.org/docs/api/web-contents#event-remote-get-current-window", + "slug": "contentsonremote-get-current-window", + "tldr": "Emitted when remote.getCurrentWindow() is called in the renderer process.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:remote-get-current-window", + "api:contentsonremote-get-current-window", + "api:contents.on('remote-get-current-window')", + "doc:remote-get-current-window", + "doc:contentsonremote-get-current-window", + "doc:contents.on('remote-get-current-window')" + ] + }, + { + "objectID": "api-web-contents#event-remote-get-current-web-contents", + "name": "remote-get-current-web-contents", + "description": "Emitted when remote.getCurrentWebContents() is called in the renderer process. Calling event.preventDefault() will prevent the object from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + } + ], + "apiType": "event", + "fullSignature": "contents.on('remote-get-current-web-contents')", + "url": "https://electronjs.org/docs/api/web-contents#event-remote-get-current-web-contents", + "slug": "contentsonremote-get-current-web-contents", + "tldr": "Emitted when remote.getCurrentWebContents() is called in the renderer process.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:remote-get-current-web-contents", + "api:contentsonremote-get-current-web-contents", + "api:contents.on('remote-get-current-web-contents')", + "doc:remote-get-current-web-contents", + "doc:contentsonremote-get-current-web-contents", + "doc:contents.on('remote-get-current-web-contents')" + ] + }, + { + "objectID": "api-web-contents#event-remote-get-guest-web-contents", + "name": "remote-get-guest-web-contents", + "description": "Emitted when .getWebContents() is called in the renderer process. Calling event.preventDefault() will prevent the object from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "guestWebContents", + "type": "WebContents", + "collection": false, + "required": true + } + ], + "apiType": "event", + "fullSignature": "contents.on('remote-get-guest-web-contents')", + "url": "https://electronjs.org/docs/api/web-contents#event-remote-get-guest-web-contents", + "slug": "contentsonremote-get-guest-web-contents", + "tldr": "Emitted when .getWebContents() is called in the renderer process.", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:remote-get-guest-web-contents", + "api:contentsonremote-get-guest-web-contents", + "api:contents.on('remote-get-guest-web-contents')", + "doc:remote-get-guest-web-contents", + "doc:contentsonremote-get-guest-web-contents", + "doc:contents.on('remote-get-guest-web-contents')" + ] + }, + { + "objectID": "api-web-frame#webframetop", + "name": "top", + "description": "A WebFrame representing top frame in frame hierarchy to which webFrame belongs, the property would be null if top frame is not in the current renderer process.", + "type": "WebFrame", + "collection": false, + "apiType": "properties", + "fullSignature": "webFrame.top", + "tldr": "A WebFrame representing top frame in frame hierarchy to which webFrame belongs, the property would be null if top frame is not in the current renderer process.", + "slug": "webframetop", + "url": "https://electronjs.org/docs/api/web-frame#webframetop", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:top", + "api:webframetop", + "api:webFrame.top", + "doc:top", + "doc:webframetop", + "doc:webFrame.top" + ] + }, + { + "objectID": "api-web-frame#webframeopener", + "name": "opener", + "description": "A WebFrame representing the frame which opened webFrame, the property would be null if there's no opener or opener is not in the current renderer process.", + "type": "WebFrame", + "collection": false, + "apiType": "properties", + "fullSignature": "webFrame.opener", + "tldr": "A WebFrame representing the frame which opened webFrame, the property would be null if there's no opener or opener is not in the current renderer process.", + "slug": "webframeopener", + "url": "https://electronjs.org/docs/api/web-frame#webframeopener", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:opener", + "api:webframeopener", + "api:webFrame.opener", + "doc:opener", + "doc:webframeopener", + "doc:webFrame.opener" + ] + }, + { + "objectID": "api-web-frame#webframeparent", + "name": "parent", + "description": "A WebFrame representing parent frame of webFrame, the property would be null if webFrame is top or parent is not in the current renderer process.", + "type": "WebFrame", + "collection": false, + "apiType": "properties", + "fullSignature": "webFrame.parent", + "tldr": "A WebFrame representing parent frame of webFrame, the property would be null if webFrame is top or parent is not in the current renderer process.", + "slug": "webframeparent", + "url": "https://electronjs.org/docs/api/web-frame#webframeparent", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:parent", + "api:webframeparent", + "api:webFrame.parent", + "doc:parent", + "doc:webframeparent", + "doc:webFrame.parent" + ] + }, + { + "objectID": "api-web-frame#webframefirstchild", + "name": "firstChild", + "description": "A WebFrame representing the first child frame of webFrame, the property would be null if webFrame has no children or if first child is not in the current renderer process.", + "type": "WebFrame", + "collection": false, + "apiType": "properties", + "fullSignature": "webFrame.firstChild", + "tldr": "A WebFrame representing the first child frame of webFrame, the property would be null if webFrame has no children or if first child is not in the current renderer process.", + "slug": "webframefirstchild", + "url": "https://electronjs.org/docs/api/web-frame#webframefirstchild", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:firstChild", + "api:webframefirstchild", + "api:webFrame.firstChild", + "doc:firstChild", + "doc:webframefirstchild", + "doc:webFrame.firstChild" + ] + }, + { + "objectID": "api-web-frame#webframenextsibling", + "name": "nextSibling", + "description": "A WebFrame representing next sibling frame, the property would be null if webFrame is the last frame in its parent or if the next sibling is not in the current renderer process.", + "type": "WebFrame", + "collection": false, + "apiType": "properties", + "fullSignature": "webFrame.nextSibling", + "tldr": "A WebFrame representing next sibling frame, the property would be null if webFrame is the last frame in its parent or if the next sibling is not in the current renderer process.", + "slug": "webframenextsibling", + "url": "https://electronjs.org/docs/api/web-frame#webframenextsibling", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:nextSibling", + "api:webframenextsibling", + "api:webFrame.nextSibling", + "doc:nextSibling", + "doc:webframenextsibling", + "doc:webFrame.nextSibling" + ] + }, + { + "objectID": "api-web-frame#webframeroutingid", + "name": "routingId", + "description": "An Integer representing the unique frame id in the current renderer process. Distinct WebFrame instances that refer to the same underlying frame will have the same routingId.", + "type": "Integer", + "collection": false, + "apiType": "properties", + "fullSignature": "webFrame.routingId", + "tldr": "An Integer representing the unique frame id in the current renderer process.", + "slug": "webframeroutingid", + "url": "https://electronjs.org/docs/api/web-frame#webframeroutingid", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:routingId", + "api:webframeroutingid", + "api:webFrame.routingId", + "doc:routingId", + "doc:webframeroutingid", + "doc:webFrame.routingId" + ] + }, + { + "objectID": "api-web-frame#webframesetzoomfactor", + "name": "setZoomFactor", + "signature": "(factor)", + "description": "Changes the zoom factor to the specified factor. Zoom factor is zoom percent divided by 100, so 300% = 3.0.", + "parameters": [ + { + "name": "factor", + "type": "Number", + "collection": false, + "description": "Zoom factor.", + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webFrame.setZoomFactor", + "tldr": "Changes the zoom factor to the specified factor.", + "slug": "webframesetzoomfactor", + "url": "https://electronjs.org/docs/api/web-frame#webframesetzoomfactor", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setZoomFactor", + "api:webframesetzoomfactor", + "api:webFrame.setZoomFactor", + "doc:setZoomFactor", + "doc:webframesetzoomfactor", + "doc:webFrame.setZoomFactor" + ] + }, + { + "objectID": "api-web-frame#webframegetzoomfactor", + "name": "getZoomFactor", + "signature": "()", + "returns": { + "type": "Number", + "collection": false, + "description": "The current zoom factor." + }, + "apiType": "methods", + "fullSignature": "webFrame.getZoomFactor", + "tldr": "Returns the current zoom factor.", + "slug": "webframegetzoomfactor", + "url": "https://electronjs.org/docs/api/web-frame#webframegetzoomfactor", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getZoomFactor", + "api:webframegetzoomfactor", + "api:webFrame.getZoomFactor", + "doc:getZoomFactor", + "doc:webframegetzoomfactor", + "doc:webFrame.getZoomFactor" + ] + }, + { + "objectID": "api-web-frame#webframesetzoomlevel", + "name": "setZoomLevel", + "signature": "(level)", + "description": "Changes the zoom level to the specified level. The original size is 0 and each increment above or below represents zooming 20% larger or smaller to default limits of 300% and 50% of original size, respectively.", + "parameters": [ + { + "name": "level", + "type": "Number", + "collection": false, + "description": "Zoom level.", + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webFrame.setZoomLevel", + "tldr": "Changes the zoom level to the specified level.", + "slug": "webframesetzoomlevel", + "url": "https://electronjs.org/docs/api/web-frame#webframesetzoomlevel", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setZoomLevel", + "api:webframesetzoomlevel", + "api:webFrame.setZoomLevel", + "doc:setZoomLevel", + "doc:webframesetzoomlevel", + "doc:webFrame.setZoomLevel" + ] + }, + { + "objectID": "api-web-frame#webframegetzoomlevel", + "name": "getZoomLevel", + "signature": "()", + "returns": { + "type": "Number", + "collection": false, + "description": "The current zoom level." + }, + "apiType": "methods", + "fullSignature": "webFrame.getZoomLevel", + "tldr": "Returns the current zoom level.", + "slug": "webframegetzoomlevel", + "url": "https://electronjs.org/docs/api/web-frame#webframegetzoomlevel", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getZoomLevel", + "api:webframegetzoomlevel", + "api:webFrame.getZoomLevel", + "doc:getZoomLevel", + "doc:webframegetzoomlevel", + "doc:webFrame.getZoomLevel" + ] + }, + { + "objectID": "api-web-frame#webframesetvisualzoomlevellimits", + "name": "setVisualZoomLevelLimits", + "signature": "(minimumLevel, maximumLevel)", + "description": "Sets the maximum and minimum pinch-to-zoom level.", + "parameters": [ + { + "name": "minimumLevel", + "type": "Number", + "collection": false, + "required": true + }, + { + "name": "maximumLevel", + "type": "Number", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webFrame.setVisualZoomLevelLimits", + "tldr": "Sets the maximum and minimum pinch-to-zoom level.", + "slug": "webframesetvisualzoomlevellimits", + "url": "https://electronjs.org/docs/api/web-frame#webframesetvisualzoomlevellimits", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setVisualZoomLevelLimits", + "api:webframesetvisualzoomlevellimits", + "api:webFrame.setVisualZoomLevelLimits", + "doc:setVisualZoomLevelLimits", + "doc:webframesetvisualzoomlevellimits", + "doc:webFrame.setVisualZoomLevelLimits" + ] + }, + { + "objectID": "api-web-frame#webframesetlayoutzoomlevellimits", + "name": "setLayoutZoomLevelLimits", + "signature": "(minimumLevel, maximumLevel)", + "description": "Sets the maximum and minimum layout-based (i.e. non-visual) zoom level.", + "parameters": [ + { + "name": "minimumLevel", + "type": "Number", + "collection": false, + "required": true + }, + { + "name": "maximumLevel", + "type": "Number", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webFrame.setLayoutZoomLevelLimits", + "tldr": "Sets the maximum and minimum layout-based (i.e.", + "slug": "webframesetlayoutzoomlevellimits", + "url": "https://electronjs.org/docs/api/web-frame#webframesetlayoutzoomlevellimits", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setLayoutZoomLevelLimits", + "api:webframesetlayoutzoomlevellimits", + "api:webFrame.setLayoutZoomLevelLimits", + "doc:setLayoutZoomLevelLimits", + "doc:webframesetlayoutzoomlevellimits", + "doc:webFrame.setLayoutZoomLevelLimits" + ] + }, + { + "objectID": "api-web-frame#webframesetspellcheckprovider", + "name": "setSpellCheckProvider", + "signature": "(language, provider)", + "description": "Sets a provider for spell checking in input fields and text areas. The provider must be an object that has a spellCheck method that accepts an array of individual words for spellchecking. The spellCheck function runs asynchronously and calls the callback function with an array of misspelt words when complete. An example of using node-spellchecker as provider:", + "parameters": [ + { + "name": "language", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "provider", + "type": "Object", + "collection": false, + "required": true, + "properties": [ + { + "name": "spellCheck", + "type": "Function", + "collection": false, + "description": ".", + "required": true, + "parameters": [ + { + "name": "words", + "type": "String", + "collection": true, + "description": "", + "required": true + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "description": "", + "required": true, + "parameters": [ + { + "name": "misspeltWords", + "type": "String", + "collection": true, + "description": "", + "required": true + } + ] + } + ] + } + ] + } + ], + "apiType": "methods", + "fullSignature": "webFrame.setSpellCheckProvider", + "tldr": "Sets a provider for spell checking in input fields and text areas.", + "slug": "webframesetspellcheckprovider", + "url": "https://electronjs.org/docs/api/web-frame#webframesetspellcheckprovider", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setSpellCheckProvider", + "api:webframesetspellcheckprovider", + "api:webFrame.setSpellCheckProvider", + "doc:setSpellCheckProvider", + "doc:webframesetspellcheckprovider", + "doc:webFrame.setSpellCheckProvider" + ] + }, + { + "objectID": "api-web-frame#webframeinserttext", + "name": "insertText", + "signature": "(text)", + "description": "Inserts text to the focused element.", + "parameters": [ + { + "name": "text", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webFrame.insertText", + "tldr": "Inserts text to the focused element.", + "slug": "webframeinserttext", + "url": "https://electronjs.org/docs/api/web-frame#webframeinserttext", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:insertText", + "api:webframeinserttext", + "api:webFrame.insertText", + "doc:insertText", + "doc:webframeinserttext", + "doc:webFrame.insertText" + ] + }, + { + "objectID": "api-web-frame#webframeexecutejavascript", + "name": "executeJavaScript", + "signature": "(code[, userGesture, callback])", + "description": "Evaluates code in page. In the browser window some HTML APIs like requestFullScreen can only be invoked by a gesture from the user. Setting userGesture to true will remove this limitation.", + "parameters": [ + { + "name": "code", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "userGesture", + "type": "Boolean", + "collection": false, + "description": "Default is `false`.", + "required": false + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "description": "Called after script has been executed.", + "required": false, + "parameters": [ + { + "name": "result", + "type": "Any", + "collection": false, + "description": "", + "required": true + } + ] + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "any", + "description": "A promise that resolves with the result of the executed code or is rejected if the result of the code is a rejected promise." + }, + "apiType": "methods", + "fullSignature": "webFrame.executeJavaScript", + "tldr": "Evaluates code in page.", + "slug": "webframeexecutejavascript", + "url": "https://electronjs.org/docs/api/web-frame#webframeexecutejavascript", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:executeJavaScript", + "api:webframeexecutejavascript", + "api:webFrame.executeJavaScript", + "doc:executeJavaScript", + "doc:webframeexecutejavascript", + "doc:webFrame.executeJavaScript" + ] + }, + { + "objectID": "api-web-frame#webframeexecutejavascriptinisolatedworld", + "name": "executeJavaScriptInIsolatedWorld", + "signature": "(worldId, scripts[, userGesture, callback])", + "description": "Work like executeJavaScript but evaluates scripts in an isolated context.", + "parameters": [ + { + "name": "worldId", + "type": "Integer", + "collection": false, + "description": "The ID of the world to run the javascript in, `0` is the default world, `999` is the world used by Electrons `contextIsolation` feature. You can provide any integer here.", + "required": true + }, + { + "name": "scripts", + "type": "WebSource", + "collection": true, + "required": true + }, + { + "name": "userGesture", + "type": "Boolean", + "collection": false, + "description": "Default is `false`.", + "required": false + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "description": "Called after script has been executed.", + "required": false, + "parameters": [ + { + "name": "result", + "type": "Any", + "collection": false, + "description": "", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "webFrame.executeJavaScriptInIsolatedWorld", + "tldr": "Work like executeJavaScript but evaluates scripts in an isolated context.", + "slug": "webframeexecutejavascriptinisolatedworld", + "url": "https://electronjs.org/docs/api/web-frame#webframeexecutejavascriptinisolatedworld", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:executeJavaScriptInIsolatedWorld", + "api:webframeexecutejavascriptinisolatedworld", + "api:webFrame.executeJavaScriptInIsolatedWorld", + "doc:executeJavaScriptInIsolatedWorld", + "doc:webframeexecutejavascriptinisolatedworld", + "doc:webFrame.executeJavaScriptInIsolatedWorld" + ] + }, + { + "objectID": "api-web-frame#webframesetisolatedworldcontentsecuritypolicy", + "name": "setIsolatedWorldContentSecurityPolicy", + "signature": "(worldId, csp)", + "platforms": [ + "(Deprecated)" + ], + "description": "Set the content security policy of the isolated world.", + "parameters": [ + { + "name": "worldId", + "type": "Integer", + "collection": false, + "description": "The ID of the world to run the javascript in, `0` is the default world, `999` is the world used by Electrons `contextIsolation` feature. You can provide any integer here.", + "required": true + }, + { + "name": "csp", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webFrame.setIsolatedWorldContentSecurityPolicy", + "tldr": "Set the content security policy of the isolated world.", + "slug": "webframesetisolatedworldcontentsecuritypolicy", + "url": "https://electronjs.org/docs/api/web-frame#webframesetisolatedworldcontentsecuritypolicy", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setIsolatedWorldContentSecurityPolicy", + "api:webframesetisolatedworldcontentsecuritypolicy", + "api:webFrame.setIsolatedWorldContentSecurityPolicy", + "doc:setIsolatedWorldContentSecurityPolicy", + "doc:webframesetisolatedworldcontentsecuritypolicy", + "doc:webFrame.setIsolatedWorldContentSecurityPolicy" + ] + }, + { + "objectID": "api-web-frame#webframesetisolatedworldhumanreadablename", + "name": "setIsolatedWorldHumanReadableName", + "signature": "(worldId, name)", + "platforms": [ + "(Deprecated)" + ], + "description": "Set the name of the isolated world. Useful in devtools.", + "parameters": [ + { + "name": "worldId", + "type": "Integer", + "collection": false, + "description": "The ID of the world to run the javascript in, `0` is the default world, `999` is the world used by Electrons `contextIsolation` feature. You can provide any integer here.", + "required": true + }, + { + "name": "name", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webFrame.setIsolatedWorldHumanReadableName", + "tldr": "Set the name of the isolated world.", + "slug": "webframesetisolatedworldhumanreadablename", + "url": "https://electronjs.org/docs/api/web-frame#webframesetisolatedworldhumanreadablename", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setIsolatedWorldHumanReadableName", + "api:webframesetisolatedworldhumanreadablename", + "api:webFrame.setIsolatedWorldHumanReadableName", + "doc:setIsolatedWorldHumanReadableName", + "doc:webframesetisolatedworldhumanreadablename", + "doc:webFrame.setIsolatedWorldHumanReadableName" + ] + }, + { + "objectID": "api-web-frame#webframesetisolatedworldsecurityorigin", + "name": "setIsolatedWorldSecurityOrigin", + "signature": "(worldId, securityOrigin)", + "platforms": [ + "(Deprecated)" + ], + "description": "Set the security origin of the isolated world.", + "parameters": [ + { + "name": "worldId", + "type": "Integer", + "collection": false, + "description": "The ID of the world to run the javascript in, `0` is the default world, `999` is the world used by Electrons `contextIsolation` feature. You can provide any integer here.", + "required": true + }, + { + "name": "securityOrigin", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webFrame.setIsolatedWorldSecurityOrigin", + "tldr": "Set the security origin of the isolated world.", + "slug": "webframesetisolatedworldsecurityorigin", + "url": "https://electronjs.org/docs/api/web-frame#webframesetisolatedworldsecurityorigin", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setIsolatedWorldSecurityOrigin", + "api:webframesetisolatedworldsecurityorigin", + "api:webFrame.setIsolatedWorldSecurityOrigin", + "doc:setIsolatedWorldSecurityOrigin", + "doc:webframesetisolatedworldsecurityorigin", + "doc:webFrame.setIsolatedWorldSecurityOrigin" + ] + }, + { + "objectID": "api-web-frame#webframesetisolatedworldinfo", + "name": "setIsolatedWorldInfo", + "signature": "(worldId, info)", + "description": "Set the security origin, content security policy and name of the isolated world. Note: If the csp is specified, then the securityOrigin also has to be specified.", + "parameters": [ + { + "name": "worldId", + "type": "Integer", + "collection": false, + "description": "The ID of the world to run the javascript in, `0` is the default world, `999` is the world used by Electrons `contextIsolation` feature. You can provide any integer here.", + "required": true + }, + { + "name": "info", + "type": "Object", + "collection": false, + "required": true, + "properties": [ + { + "name": "securityOrigin", + "type": "String", + "collection": false, + "description": "Security origin for the isolated world.", + "required": false + }, + { + "name": "csp", + "type": "String", + "collection": false, + "description": "Content Security Policy for the isolated world.", + "required": false + }, + { + "name": "name", + "type": "String", + "collection": false, + "description": "Name for isolated world. Useful in devtools.", + "required": false + } + ] + } + ], + "apiType": "methods", + "fullSignature": "webFrame.setIsolatedWorldInfo", + "tldr": "Set the security origin, content security policy and name of the isolated world.", + "slug": "webframesetisolatedworldinfo", + "url": "https://electronjs.org/docs/api/web-frame#webframesetisolatedworldinfo", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setIsolatedWorldInfo", + "api:webframesetisolatedworldinfo", + "api:webFrame.setIsolatedWorldInfo", + "doc:setIsolatedWorldInfo", + "doc:webframesetisolatedworldinfo", + "doc:webFrame.setIsolatedWorldInfo" + ] + }, + { + "objectID": "api-web-frame#webframegetresourceusage", + "name": "getResourceUsage", + "signature": "()", + "description": "Returns an object describing usage information of Blink's internal memory caches. This will generate:", + "returns": { + "type": "Object", + "collection": false, + "properties": [ + { + "name": "images", + "type": "MemoryUsageDetails", + "collection": false, + "description": "", + "required": true + }, + { + "name": "scripts", + "type": "MemoryUsageDetails", + "collection": false, + "description": "", + "required": true + }, + { + "name": "cssStyleSheets", + "type": "MemoryUsageDetails", + "collection": false, + "description": "", + "required": true + }, + { + "name": "xslStyleSheets", + "type": "MemoryUsageDetails", + "collection": false, + "description": "", + "required": true + }, + { + "name": "fonts", + "type": "MemoryUsageDetails", + "collection": false, + "description": "", + "required": true + }, + { + "name": "other", + "type": "MemoryUsageDetails", + "collection": false, + "description": "", + "required": true + } + ] + }, + "apiType": "methods", + "fullSignature": "webFrame.getResourceUsage", + "tldr": "Returns an object describing usage information of Blink's internal memory caches.", + "slug": "webframegetresourceusage", + "url": "https://electronjs.org/docs/api/web-frame#webframegetresourceusage", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getResourceUsage", + "api:webframegetresourceusage", + "api:webFrame.getResourceUsage", + "doc:getResourceUsage", + "doc:webframegetresourceusage", + "doc:webFrame.getResourceUsage" + ] + }, + { + "objectID": "api-web-frame#webframeclearcache", + "name": "clearCache", + "signature": "()", + "description": "Attempts to free memory that is no longer being used (like images from a previous navigation). Note that blindly calling this method probably makes Electron slower since it will have to refill these emptied caches, you should only call it if an event in your app has occurred that makes you think your page is actually using less memory (i.e. you have navigated from a super heavy page to a mostly empty one, and intend to stay there).", + "apiType": "methods", + "fullSignature": "webFrame.clearCache", + "tldr": "Attempts to free memory that is no longer being used (like images from a previous navigation).", + "slug": "webframeclearcache", + "url": "https://electronjs.org/docs/api/web-frame#webframeclearcache", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:clearCache", + "api:webframeclearcache", + "api:webFrame.clearCache", + "doc:clearCache", + "doc:webframeclearcache", + "doc:webFrame.clearCache" + ] + }, + { + "objectID": "api-web-frame#webframegetframeforselector", + "name": "getFrameForSelector", + "signature": "(selector)", + "parameters": [ + { + "name": "selector", + "type": "String", + "collection": false, + "description": "CSS selector for a frame element.", + "required": true + } + ], + "returns": { + "type": "WebFrame", + "collection": false, + "description": "The frame element in webFrame's document selected by selector, null would be returned if selector does not select a frame or if the frame is not in the current renderer process." + }, + "apiType": "methods", + "fullSignature": "webFrame.getFrameForSelector", + "tldr": "Returns the frame element in webFrame's document selected by selector, null would be returned if selector does not select a frame or if the frame is not in the current renderer process.", + "slug": "webframegetframeforselector", + "url": "https://electronjs.org/docs/api/web-frame#webframegetframeforselector", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getFrameForSelector", + "api:webframegetframeforselector", + "api:webFrame.getFrameForSelector", + "doc:getFrameForSelector", + "doc:webframegetframeforselector", + "doc:webFrame.getFrameForSelector" + ] + }, + { + "objectID": "api-web-frame#webframefindframebyname", + "name": "findFrameByName", + "signature": "(name)", + "parameters": [ + { + "name": "name", + "type": "String", + "collection": false, + "required": true + } + ], + "returns": { + "type": "WebFrame", + "collection": false, + "description": "A child of webFrame with the supplied name, null would be returned if there's no such frame or if the frame is not in the current renderer process." + }, + "apiType": "methods", + "fullSignature": "webFrame.findFrameByName", + "tldr": "Returns a child of webFrame with the supplied name, null would be returned if there's no such frame or if the frame is not in the current renderer process.", + "slug": "webframefindframebyname", + "url": "https://electronjs.org/docs/api/web-frame#webframefindframebyname", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:findFrameByName", + "api:webframefindframebyname", + "api:webFrame.findFrameByName", + "doc:findFrameByName", + "doc:webframefindframebyname", + "doc:webFrame.findFrameByName" + ] + }, + { + "objectID": "api-web-frame#webframefindframebyroutingid", + "name": "findFrameByRoutingId", + "signature": "(routingId)", + "parameters": [ + { + "name": "routingId", + "type": "Integer", + "collection": false, + "description": "An `Integer` representing the unique frame id in the current renderer process. Routing IDs can be retrieved from `WebFrame` instances (`webFrame.routingId`) and are also passed by frame specific `WebContents` navigation events (e.g. `did-frame-navigate`)", + "required": true + } + ], + "returns": { + "type": "WebFrame", + "collection": false, + "description": "that has the supplied routingId, null if not found." + }, + "apiType": "methods", + "fullSignature": "webFrame.findFrameByRoutingId", + "tldr": "Returns that has the supplied routingId, null if not found.", + "slug": "webframefindframebyroutingid", + "url": "https://electronjs.org/docs/api/web-frame#webframefindframebyroutingid", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:findFrameByRoutingId", + "api:webframefindframebyroutingid", + "api:webFrame.findFrameByRoutingId", + "doc:findFrameByRoutingId", + "doc:webframefindframebyroutingid", + "doc:webFrame.findFrameByRoutingId" + ] + }, { "objectID": "api-web-request#webrequestonbeforerequestfilter-listener", "name": "onBeforeRequest", + "signature": "([filter, ]listener)", "description": "The listener will be called with listener(details, callback) when a request is about to occur. The uploadData is an array of UploadData objects. The callback has to be called with an response object.", "parameters": [ { @@ -15359,6 +33723,7 @@ { "objectID": "api-web-request#webrequestonbeforesendheadersfilter-listener", "name": "onBeforeSendHeaders", + "signature": "([filter, ]listener)", "description": "The listener will be called with listener(details, callback) before sending an HTTP request, once the request headers are available. This may occur after a TCP connection is made to the server, but before any http data is sent. The callback has to be called with an response object.", "parameters": [ { @@ -15380,7 +33745,101 @@ "name": "listener", "type": "Function", "collection": false, - "required": true + "required": true, + "parameters": [ + { + "name": "details", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [ + { + "name": "id", + "type": "Integer", + "collection": false, + "description": "", + "required": true + }, + { + "name": "url", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "method", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "webContentsId", + "type": "Integer", + "collection": false, + "description": "", + "required": false + }, + { + "name": "resourceType", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "timestamp", + "type": "Double", + "collection": false, + "description": "", + "required": true + }, + { + "name": "requestHeaders", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [] + } + ] + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "description": "", + "required": true, + "parameters": [ + { + "name": "response", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [ + { + "name": "cancel", + "type": "Boolean", + "collection": false, + "description": "", + "required": false + }, + { + "name": "requestHeaders", + "type": "Object", + "collection": false, + "description": "When provided, request will be made with these headers.", + "required": false, + "properties": [] + } + ] + } + ] + } + ] } ], "apiType": "instanceMethod", @@ -15402,6 +33861,7 @@ { "objectID": "api-web-request#webrequestonsendheadersfilter-listener", "name": "onSendHeaders", + "signature": "([filter, ]listener)", "description": "The listener will be called with listener(details) just before a request is going to be sent to the server, modifications of previous onBeforeSendHeaders response are visible by the time this listener is fired.", "parameters": [ { @@ -15506,6 +33966,7 @@ { "objectID": "api-web-request#webrequestonheadersreceivedfilter-listener", "name": "onHeadersReceived", + "signature": "([filter, ]listener)", "description": "The listener will be called with listener(details, callback) when HTTP response headers of a request have been received. The callback has to be called with an response object.", "parameters": [ { @@ -15527,7 +33988,122 @@ "name": "listener", "type": "Function", "collection": false, - "required": true + "required": true, + "parameters": [ + { + "name": "details", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [ + { + "name": "id", + "type": "Integer", + "collection": false, + "description": "", + "required": true + }, + { + "name": "url", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "method", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "webContentsId", + "type": "Integer", + "collection": false, + "description": "", + "required": false + }, + { + "name": "resourceType", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "timestamp", + "type": "Double", + "collection": false, + "description": "", + "required": true + }, + { + "name": "statusLine", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "statusCode", + "type": "Integer", + "collection": false, + "description": "", + "required": true + }, + { + "name": "responseHeaders", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [] + } + ] + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "description": "", + "required": true, + "parameters": [ + { + "name": "response", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [ + { + "name": "cancel", + "type": "Boolean", + "collection": false, + "description": "", + "required": false + }, + { + "name": "responseHeaders", + "type": "Object", + "collection": false, + "description": "When provided, the server is assumed to have responded with these headers.", + "required": false, + "properties": [] + }, + { + "name": "statusLine", + "type": "String", + "collection": false, + "description": "Should be provided when overriding responseHeaders to change header status otherwise original response header's status will be used.", + "required": false + } + ] + } + ] + } + ] } ], "apiType": "instanceMethod", @@ -15549,6 +34125,7 @@ { "objectID": "api-web-request#webrequestonresponsestartedfilter-listener", "name": "onResponseStarted", + "signature": "([filter, ]listener)", "description": "The listener will be called with listener(details) when first byte of the response body is received. For HTTP requests, this means that the status line and response headers are available.", "parameters": [ { @@ -15674,6 +34251,7 @@ { "objectID": "api-web-request#webrequestonbeforeredirectfilter-listener", "name": "onBeforeRedirect", + "signature": "([filter, ]listener)", "description": "The listener will be called with listener(details) when a server initiated redirect is about to occur.", "parameters": [ { @@ -15806,6 +34384,7 @@ { "objectID": "api-web-request#webrequestoncompletedfilter-listener", "name": "onCompleted", + "signature": "([filter, ]listener)", "description": "The listener will be called with listener(details) when a request is completed.", "parameters": [ { @@ -15871,6 +34450,13 @@ "description": "", "required": true }, + { + "name": "referrer", + "type": "String", + "collection": false, + "description": "", + "required": true + }, { "name": "timestamp", "type": "Double", @@ -15931,6 +34517,7 @@ { "objectID": "api-web-request#webrequestonerroroccurredfilter-listener", "name": "onErrorOccurred", + "signature": "([filter, ]listener)", "description": "The listener will be called with listener(details) when an error occurs.", "parameters": [ { @@ -16037,6 +34624,1893 @@ "doc:webrequestonerroroccurredfilter-listener", "doc:webRequest.onErrorOccurred([filter, ]listener)" ] + }, + { + "objectID": "api-web-source#websourcecode", + "name": "code", + "type": "String", + "collection": false, + "description": "", + "required": true, + "apiType": "properties", + "fullSignature": "WebSource.code", + "tldr": null, + "slug": "websourcecode", + "url": "https://electronjs.org/docs/api/web-source#websourcecode", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:code", + "api:websourcecode", + "api:WebSource.code", + "doc:code", + "doc:websourcecode", + "doc:WebSource.code" + ] + }, + { + "objectID": "api-web-source#websourceurl", + "name": "url", + "type": "String", + "collection": false, + "description": "", + "required": false, + "apiType": "properties", + "fullSignature": "WebSource.url", + "tldr": null, + "slug": "websourceurl", + "url": "https://electronjs.org/docs/api/web-source#websourceurl", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:url", + "api:websourceurl", + "api:WebSource.url", + "doc:url", + "doc:websourceurl", + "doc:WebSource.url" + ] + }, + { + "objectID": "api-web-source#websourcestartline", + "name": "startLine", + "type": "Integer", + "collection": false, + "description": "Default is 1.", + "required": false, + "apiType": "properties", + "fullSignature": "WebSource.startLine", + "tldr": "Default is 1.", + "slug": "websourcestartline", + "url": "https://electronjs.org/docs/api/web-source#websourcestartline", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:startLine", + "api:websourcestartline", + "api:WebSource.startLine", + "doc:startLine", + "doc:websourcestartline", + "doc:WebSource.startLine" + ] + }, + { + "objectID": "api-webview-tag#webviewtagloadurl", + "name": "loadURL", + "signature": "(url[, options])", + "description": "Loads the url in the webview, the url must contain the protocol prefix, e.g. the http:// or file://.", + "parameters": [ + { + "name": "url", + "type": "URL", + "collection": false, + "required": true + }, + { + "name": "options", + "type": "Object", + "collection": false, + "required": false, + "properties": [ + { + "name": "httpReferrer", + "type": [ + { + "typeName": "String", + "collection": false + }, + { + "typeName": "Referrer", + "collection": false + } + ], + "collection": false, + "description": "An HTTP Referrer url.", + "required": false + }, + { + "name": "userAgent", + "type": "String", + "collection": false, + "description": "A user agent originating the request.", + "required": false + }, + { + "name": "extraHeaders", + "type": "String", + "collection": false, + "description": "Extra headers separated by \"\\n\"", + "required": false + }, + { + "name": "postData", + "type": [ + { + "typeName": "UploadRawData", + "collection": true + }, + { + "typeName": "UploadFile", + "collection": true + }, + { + "typeName": "UploadBlob", + "collection": true + } + ], + "collection": false, + "description": "", + "required": false + }, + { + "name": "baseURLForDataURL", + "type": "String", + "collection": false, + "description": "Base url (with trailing path separator) for files to be loaded by the data url. This is needed only if the specified url is a data url and needs to load other files.", + "required": false + } + ] + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.loadURL", + "tldr": "Loads the url in the webview, the url must contain the protocol prefix, e.g.", + "slug": "webviewtagloadurl", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagloadurl", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:loadURL", + "api:webviewtagloadurl", + "api:webviewTag.loadURL", + "doc:loadURL", + "doc:webviewtagloadurl", + "doc:webviewTag.loadURL" + ] + }, + { + "objectID": "api-webview-tag#webviewtagdownloadurl", + "name": "downloadURL", + "signature": "(url)", + "description": "Initiates a download of the resource at url without navigating.", + "parameters": [ + { + "name": "url", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.downloadURL", + "tldr": "Initiates a download of the resource at url without navigating.", + "slug": "webviewtagdownloadurl", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagdownloadurl", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:downloadURL", + "api:webviewtagdownloadurl", + "api:webviewTag.downloadURL", + "doc:downloadURL", + "doc:webviewtagdownloadurl", + "doc:webviewTag.downloadURL" + ] + }, + { + "objectID": "api-webview-tag#webviewtaggeturl", + "name": "getURL", + "signature": "()", + "returns": { + "type": "String", + "collection": false, + "description": "The URL of guest page." + }, + "apiType": "methods", + "fullSignature": "webviewTag.getURL", + "tldr": "Returns the URL of guest page.", + "slug": "webviewtaggeturl", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtaggeturl", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getURL", + "api:webviewtaggeturl", + "api:webviewTag.getURL", + "doc:getURL", + "doc:webviewtaggeturl", + "doc:webviewTag.getURL" + ] + }, + { + "objectID": "api-webview-tag#webviewtaggettitle", + "name": "getTitle", + "signature": "()", + "returns": { + "type": "String", + "collection": false, + "description": "The title of guest page." + }, + "apiType": "methods", + "fullSignature": "webviewTag.getTitle", + "tldr": "Returns the title of guest page.", + "slug": "webviewtaggettitle", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtaggettitle", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getTitle", + "api:webviewtaggettitle", + "api:webviewTag.getTitle", + "doc:getTitle", + "doc:webviewtaggettitle", + "doc:webviewTag.getTitle" + ] + }, + { + "objectID": "api-webview-tag#webviewtagisloading", + "name": "isLoading", + "signature": "()", + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether guest page is still loading resources." + }, + "apiType": "methods", + "fullSignature": "webviewTag.isLoading", + "tldr": "Returns whether guest page is still loading resources.", + "slug": "webviewtagisloading", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagisloading", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isLoading", + "api:webviewtagisloading", + "api:webviewTag.isLoading", + "doc:isLoading", + "doc:webviewtagisloading", + "doc:webviewTag.isLoading" + ] + }, + { + "objectID": "api-webview-tag#webviewtagisloadingmainframe", + "name": "isLoadingMainFrame", + "signature": "()", + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the main frame (and not just iframes or frames within it) is still loading." + }, + "apiType": "methods", + "fullSignature": "webviewTag.isLoadingMainFrame", + "tldr": "Returns whether the main frame (and not just iframes or frames within it) is still loading.", + "slug": "webviewtagisloadingmainframe", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagisloadingmainframe", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isLoadingMainFrame", + "api:webviewtagisloadingmainframe", + "api:webviewTag.isLoadingMainFrame", + "doc:isLoadingMainFrame", + "doc:webviewtagisloadingmainframe", + "doc:webviewTag.isLoadingMainFrame" + ] + }, + { + "objectID": "api-webview-tag#webviewtagiswaitingforresponse", + "name": "isWaitingForResponse", + "signature": "()", + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the guest page is waiting for a first-response for the main resource of the page." + }, + "apiType": "methods", + "fullSignature": "webviewTag.isWaitingForResponse", + "tldr": "Returns whether the guest page is waiting for a first-response for the main resource of the page.", + "slug": "webviewtagiswaitingforresponse", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagiswaitingforresponse", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isWaitingForResponse", + "api:webviewtagiswaitingforresponse", + "api:webviewTag.isWaitingForResponse", + "doc:isWaitingForResponse", + "doc:webviewtagiswaitingforresponse", + "doc:webviewTag.isWaitingForResponse" + ] + }, + { + "objectID": "api-webview-tag#webviewtagstop", + "name": "stop", + "signature": "()", + "description": "Stops any pending navigation.", + "apiType": "methods", + "fullSignature": "webviewTag.stop", + "tldr": "Stops any pending navigation.", + "slug": "webviewtagstop", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagstop", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:stop", + "api:webviewtagstop", + "api:webviewTag.stop", + "doc:stop", + "doc:webviewtagstop", + "doc:webviewTag.stop" + ] + }, + { + "objectID": "api-webview-tag#webviewtagreload", + "name": "reload", + "signature": "()", + "description": "Reloads the guest page.", + "apiType": "methods", + "fullSignature": "webviewTag.reload", + "tldr": "Reloads the guest page.", + "slug": "webviewtagreload", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagreload", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:reload", + "api:webviewtagreload", + "api:webviewTag.reload", + "doc:reload", + "doc:webviewtagreload", + "doc:webviewTag.reload" + ] + }, + { + "objectID": "api-webview-tag#webviewtagreloadignoringcache", + "name": "reloadIgnoringCache", + "signature": "()", + "description": "Reloads the guest page and ignores cache.", + "apiType": "methods", + "fullSignature": "webviewTag.reloadIgnoringCache", + "tldr": "Reloads the guest page and ignores cache.", + "slug": "webviewtagreloadignoringcache", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagreloadignoringcache", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:reloadIgnoringCache", + "api:webviewtagreloadignoringcache", + "api:webviewTag.reloadIgnoringCache", + "doc:reloadIgnoringCache", + "doc:webviewtagreloadignoringcache", + "doc:webviewTag.reloadIgnoringCache" + ] + }, + { + "objectID": "api-webview-tag#webviewtagcangoback", + "name": "canGoBack", + "signature": "()", + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the guest page can go back." + }, + "apiType": "methods", + "fullSignature": "webviewTag.canGoBack", + "tldr": "Returns whether the guest page can go back.", + "slug": "webviewtagcangoback", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagcangoback", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:canGoBack", + "api:webviewtagcangoback", + "api:webviewTag.canGoBack", + "doc:canGoBack", + "doc:webviewtagcangoback", + "doc:webviewTag.canGoBack" + ] + }, + { + "objectID": "api-webview-tag#webviewtagcangoforward", + "name": "canGoForward", + "signature": "()", + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the guest page can go forward." + }, + "apiType": "methods", + "fullSignature": "webviewTag.canGoForward", + "tldr": "Returns whether the guest page can go forward.", + "slug": "webviewtagcangoforward", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagcangoforward", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:canGoForward", + "api:webviewtagcangoforward", + "api:webviewTag.canGoForward", + "doc:canGoForward", + "doc:webviewtagcangoforward", + "doc:webviewTag.canGoForward" + ] + }, + { + "objectID": "api-webview-tag#webviewtagcangotooffset", + "name": "canGoToOffset", + "signature": "(offset)", + "parameters": [ + { + "name": "offset", + "type": "Integer", + "collection": false, + "required": true + } + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the guest page can go to offset." + }, + "apiType": "methods", + "fullSignature": "webviewTag.canGoToOffset", + "tldr": "Returns whether the guest page can go to offset.", + "slug": "webviewtagcangotooffset", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagcangotooffset", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:canGoToOffset", + "api:webviewtagcangotooffset", + "api:webviewTag.canGoToOffset", + "doc:canGoToOffset", + "doc:webviewtagcangotooffset", + "doc:webviewTag.canGoToOffset" + ] + }, + { + "objectID": "api-webview-tag#webviewtagclearhistory", + "name": "clearHistory", + "signature": "()", + "description": "Clears the navigation history.", + "apiType": "methods", + "fullSignature": "webviewTag.clearHistory", + "tldr": "Clears the navigation history.", + "slug": "webviewtagclearhistory", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagclearhistory", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:clearHistory", + "api:webviewtagclearhistory", + "api:webviewTag.clearHistory", + "doc:clearHistory", + "doc:webviewtagclearhistory", + "doc:webviewTag.clearHistory" + ] + }, + { + "objectID": "api-webview-tag#webviewtaggoback", + "name": "goBack", + "signature": "()", + "description": "Makes the guest page go back.", + "apiType": "methods", + "fullSignature": "webviewTag.goBack", + "tldr": "Makes the guest page go back.", + "slug": "webviewtaggoback", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtaggoback", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:goBack", + "api:webviewtaggoback", + "api:webviewTag.goBack", + "doc:goBack", + "doc:webviewtaggoback", + "doc:webviewTag.goBack" + ] + }, + { + "objectID": "api-webview-tag#webviewtaggoforward", + "name": "goForward", + "signature": "()", + "description": "Makes the guest page go forward.", + "apiType": "methods", + "fullSignature": "webviewTag.goForward", + "tldr": "Makes the guest page go forward.", + "slug": "webviewtaggoforward", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtaggoforward", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:goForward", + "api:webviewtaggoforward", + "api:webviewTag.goForward", + "doc:goForward", + "doc:webviewtaggoforward", + "doc:webviewTag.goForward" + ] + }, + { + "objectID": "api-webview-tag#webviewtaggotoindex", + "name": "goToIndex", + "signature": "(index)", + "description": "Navigates to the specified absolute index.", + "parameters": [ + { + "name": "index", + "type": "Integer", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.goToIndex", + "tldr": "Navigates to the specified absolute index.", + "slug": "webviewtaggotoindex", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtaggotoindex", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:goToIndex", + "api:webviewtaggotoindex", + "api:webviewTag.goToIndex", + "doc:goToIndex", + "doc:webviewtaggotoindex", + "doc:webviewTag.goToIndex" + ] + }, + { + "objectID": "api-webview-tag#webviewtaggotooffset", + "name": "goToOffset", + "signature": "(offset)", + "description": "Navigates to the specified offset from the \"current entry\".", + "parameters": [ + { + "name": "offset", + "type": "Integer", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.goToOffset", + "tldr": "Navigates to the specified offset from the \"current entry\".", + "slug": "webviewtaggotooffset", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtaggotooffset", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:goToOffset", + "api:webviewtaggotooffset", + "api:webviewTag.goToOffset", + "doc:goToOffset", + "doc:webviewtaggotooffset", + "doc:webviewTag.goToOffset" + ] + }, + { + "objectID": "api-webview-tag#webviewtagiscrashed", + "name": "isCrashed", + "signature": "()", + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the renderer process has crashed." + }, + "apiType": "methods", + "fullSignature": "webviewTag.isCrashed", + "tldr": "Returns whether the renderer process has crashed.", + "slug": "webviewtagiscrashed", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagiscrashed", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isCrashed", + "api:webviewtagiscrashed", + "api:webviewTag.isCrashed", + "doc:isCrashed", + "doc:webviewtagiscrashed", + "doc:webviewTag.isCrashed" + ] + }, + { + "objectID": "api-webview-tag#webviewtagsetuseragent", + "name": "setUserAgent", + "signature": "(userAgent)", + "description": "Overrides the user agent for the guest page.", + "parameters": [ + { + "name": "userAgent", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.setUserAgent", + "tldr": "Overrides the user agent for the guest page.", + "slug": "webviewtagsetuseragent", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagsetuseragent", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setUserAgent", + "api:webviewtagsetuseragent", + "api:webviewTag.setUserAgent", + "doc:setUserAgent", + "doc:webviewtagsetuseragent", + "doc:webviewTag.setUserAgent" + ] + }, + { + "objectID": "api-webview-tag#webviewtaggetuseragent", + "name": "getUserAgent", + "signature": "()", + "returns": { + "type": "String", + "collection": false, + "description": "The user agent for guest page." + }, + "apiType": "methods", + "fullSignature": "webviewTag.getUserAgent", + "tldr": "Returns the user agent for guest page.", + "slug": "webviewtaggetuseragent", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtaggetuseragent", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getUserAgent", + "api:webviewtaggetuseragent", + "api:webviewTag.getUserAgent", + "doc:getUserAgent", + "doc:webviewtaggetuseragent", + "doc:webviewTag.getUserAgent" + ] + }, + { + "objectID": "api-webview-tag#webviewtaginsertcss", + "name": "insertCSS", + "signature": "(css)", + "description": "Injects CSS into the guest page.", + "parameters": [ + { + "name": "css", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.insertCSS", + "tldr": "Injects CSS into the guest page.", + "slug": "webviewtaginsertcss", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtaginsertcss", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:insertCSS", + "api:webviewtaginsertcss", + "api:webviewTag.insertCSS", + "doc:insertCSS", + "doc:webviewtaginsertcss", + "doc:webviewTag.insertCSS" + ] + }, + { + "objectID": "api-webview-tag#webviewtagexecutejavascript", + "name": "executeJavaScript", + "signature": "(code[, userGesture, callback])", + "description": "Evaluates code in page. If userGesture is set, it will create the user gesture context in the page. HTML APIs like requestFullScreen, which require user action, can take advantage of this option for automation.", + "parameters": [ + { + "name": "code", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "userGesture", + "type": "Boolean", + "collection": false, + "description": "Default `false`.", + "required": false + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "description": "Called after script has been executed.", + "required": false, + "parameters": [ + { + "name": "result", + "type": "Any", + "collection": false, + "description": "", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.executeJavaScript", + "tldr": "Evaluates code in page.", + "slug": "webviewtagexecutejavascript", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagexecutejavascript", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:executeJavaScript", + "api:webviewtagexecutejavascript", + "api:webviewTag.executeJavaScript", + "doc:executeJavaScript", + "doc:webviewtagexecutejavascript", + "doc:webviewTag.executeJavaScript" + ] + }, + { + "objectID": "api-webview-tag#webviewtagopendevtools", + "name": "openDevTools", + "signature": "()", + "description": "Opens a DevTools window for guest page.", + "apiType": "methods", + "fullSignature": "webviewTag.openDevTools", + "tldr": "Opens a DevTools window for guest page.", + "slug": "webviewtagopendevtools", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagopendevtools", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:openDevTools", + "api:webviewtagopendevtools", + "api:webviewTag.openDevTools", + "doc:openDevTools", + "doc:webviewtagopendevtools", + "doc:webviewTag.openDevTools" + ] + }, + { + "objectID": "api-webview-tag#webviewtagclosedevtools", + "name": "closeDevTools", + "signature": "()", + "description": "Closes the DevTools window of guest page.", + "apiType": "methods", + "fullSignature": "webviewTag.closeDevTools", + "tldr": "Closes the DevTools window of guest page.", + "slug": "webviewtagclosedevtools", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagclosedevtools", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:closeDevTools", + "api:webviewtagclosedevtools", + "api:webviewTag.closeDevTools", + "doc:closeDevTools", + "doc:webviewtagclosedevtools", + "doc:webviewTag.closeDevTools" + ] + }, + { + "objectID": "api-webview-tag#webviewtagisdevtoolsopened", + "name": "isDevToolsOpened", + "signature": "()", + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether guest page has a DevTools window attached." + }, + "apiType": "methods", + "fullSignature": "webviewTag.isDevToolsOpened", + "tldr": "Returns whether guest page has a DevTools window attached.", + "slug": "webviewtagisdevtoolsopened", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagisdevtoolsopened", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isDevToolsOpened", + "api:webviewtagisdevtoolsopened", + "api:webviewTag.isDevToolsOpened", + "doc:isDevToolsOpened", + "doc:webviewtagisdevtoolsopened", + "doc:webviewTag.isDevToolsOpened" + ] + }, + { + "objectID": "api-webview-tag#webviewtagisdevtoolsfocused", + "name": "isDevToolsFocused", + "signature": "()", + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether DevTools window of guest page is focused." + }, + "apiType": "methods", + "fullSignature": "webviewTag.isDevToolsFocused", + "tldr": "Returns whether DevTools window of guest page is focused.", + "slug": "webviewtagisdevtoolsfocused", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagisdevtoolsfocused", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isDevToolsFocused", + "api:webviewtagisdevtoolsfocused", + "api:webviewTag.isDevToolsFocused", + "doc:isDevToolsFocused", + "doc:webviewtagisdevtoolsfocused", + "doc:webviewTag.isDevToolsFocused" + ] + }, + { + "objectID": "api-webview-tag#webviewtaginspectelement", + "name": "inspectElement", + "signature": "(x, y)", + "description": "Starts inspecting element at position (x, y) of guest page.", + "parameters": [ + { + "name": "x", + "type": "Integer", + "collection": false, + "required": true + }, + { + "name": "y", + "type": "Integer", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.inspectElement", + "tldr": "Starts inspecting element at position (x, y) of guest page.", + "slug": "webviewtaginspectelement", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtaginspectelement", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:inspectElement", + "api:webviewtaginspectelement", + "api:webviewTag.inspectElement", + "doc:inspectElement", + "doc:webviewtaginspectelement", + "doc:webviewTag.inspectElement" + ] + }, + { + "objectID": "api-webview-tag#webviewtaginspectserviceworker", + "name": "inspectServiceWorker", + "signature": "()", + "description": "Opens the DevTools for the service worker context present in the guest page.", + "apiType": "methods", + "fullSignature": "webviewTag.inspectServiceWorker", + "tldr": "Opens the DevTools for the service worker context present in the guest page.", + "slug": "webviewtaginspectserviceworker", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtaginspectserviceworker", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:inspectServiceWorker", + "api:webviewtaginspectserviceworker", + "api:webviewTag.inspectServiceWorker", + "doc:inspectServiceWorker", + "doc:webviewtaginspectserviceworker", + "doc:webviewTag.inspectServiceWorker" + ] + }, + { + "objectID": "api-webview-tag#webviewtagsetaudiomuted", + "name": "setAudioMuted", + "signature": "(muted)", + "description": "Set guest page muted.", + "parameters": [ + { + "name": "muted", + "type": "Boolean", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.setAudioMuted", + "tldr": "Set guest page muted.", + "slug": "webviewtagsetaudiomuted", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagsetaudiomuted", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setAudioMuted", + "api:webviewtagsetaudiomuted", + "api:webviewTag.setAudioMuted", + "doc:setAudioMuted", + "doc:webviewtagsetaudiomuted", + "doc:webviewTag.setAudioMuted" + ] + }, + { + "objectID": "api-webview-tag#webviewtagisaudiomuted", + "name": "isAudioMuted", + "signature": "()", + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether guest page has been muted." + }, + "apiType": "methods", + "fullSignature": "webviewTag.isAudioMuted", + "tldr": "Returns whether guest page has been muted.", + "slug": "webviewtagisaudiomuted", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagisaudiomuted", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isAudioMuted", + "api:webviewtagisaudiomuted", + "api:webviewTag.isAudioMuted", + "doc:isAudioMuted", + "doc:webviewtagisaudiomuted", + "doc:webviewTag.isAudioMuted" + ] + }, + { + "objectID": "api-webview-tag#webviewtagiscurrentlyaudible", + "name": "isCurrentlyAudible", + "signature": "()", + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether audio is currently playing." + }, + "apiType": "methods", + "fullSignature": "webviewTag.isCurrentlyAudible", + "tldr": "Returns whether audio is currently playing.", + "slug": "webviewtagiscurrentlyaudible", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagiscurrentlyaudible", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:isCurrentlyAudible", + "api:webviewtagiscurrentlyaudible", + "api:webviewTag.isCurrentlyAudible", + "doc:isCurrentlyAudible", + "doc:webviewtagiscurrentlyaudible", + "doc:webviewTag.isCurrentlyAudible" + ] + }, + { + "objectID": "api-webview-tag#webviewtagundo", + "name": "undo", + "signature": "()", + "description": "Executes editing command undo in page.", + "apiType": "methods", + "fullSignature": "webviewTag.undo", + "tldr": "Executes editing command undo in page.", + "slug": "webviewtagundo", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagundo", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:undo", + "api:webviewtagundo", + "api:webviewTag.undo", + "doc:undo", + "doc:webviewtagundo", + "doc:webviewTag.undo" + ] + }, + { + "objectID": "api-webview-tag#webviewtagredo", + "name": "redo", + "signature": "()", + "description": "Executes editing command redo in page.", + "apiType": "methods", + "fullSignature": "webviewTag.redo", + "tldr": "Executes editing command redo in page.", + "slug": "webviewtagredo", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagredo", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:redo", + "api:webviewtagredo", + "api:webviewTag.redo", + "doc:redo", + "doc:webviewtagredo", + "doc:webviewTag.redo" + ] + }, + { + "objectID": "api-webview-tag#webviewtagcut", + "name": "cut", + "signature": "()", + "description": "Executes editing command cut in page.", + "apiType": "methods", + "fullSignature": "webviewTag.cut", + "tldr": "Executes editing command cut in page.", + "slug": "webviewtagcut", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagcut", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:cut", + "api:webviewtagcut", + "api:webviewTag.cut", + "doc:cut", + "doc:webviewtagcut", + "doc:webviewTag.cut" + ] + }, + { + "objectID": "api-webview-tag#webviewtagcopy", + "name": "copy", + "signature": "()", + "description": "Executes editing command copy in page.", + "apiType": "methods", + "fullSignature": "webviewTag.copy", + "tldr": "Executes editing command copy in page.", + "slug": "webviewtagcopy", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagcopy", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:copy", + "api:webviewtagcopy", + "api:webviewTag.copy", + "doc:copy", + "doc:webviewtagcopy", + "doc:webviewTag.copy" + ] + }, + { + "objectID": "api-webview-tag#webviewtagpaste", + "name": "paste", + "signature": "()", + "description": "Executes editing command paste in page.", + "apiType": "methods", + "fullSignature": "webviewTag.paste", + "tldr": "Executes editing command paste in page.", + "slug": "webviewtagpaste", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagpaste", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:paste", + "api:webviewtagpaste", + "api:webviewTag.paste", + "doc:paste", + "doc:webviewtagpaste", + "doc:webviewTag.paste" + ] + }, + { + "objectID": "api-webview-tag#webviewtagpasteandmatchstyle", + "name": "pasteAndMatchStyle", + "signature": "()", + "description": "Executes editing command pasteAndMatchStyle in page.", + "apiType": "methods", + "fullSignature": "webviewTag.pasteAndMatchStyle", + "tldr": "Executes editing command pasteAndMatchStyle in page.", + "slug": "webviewtagpasteandmatchstyle", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagpasteandmatchstyle", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:pasteAndMatchStyle", + "api:webviewtagpasteandmatchstyle", + "api:webviewTag.pasteAndMatchStyle", + "doc:pasteAndMatchStyle", + "doc:webviewtagpasteandmatchstyle", + "doc:webviewTag.pasteAndMatchStyle" + ] + }, + { + "objectID": "api-webview-tag#webviewtagdelete", + "name": "delete", + "signature": "()", + "description": "Executes editing command delete in page.", + "apiType": "methods", + "fullSignature": "webviewTag.delete", + "tldr": "Executes editing command delete in page.", + "slug": "webviewtagdelete", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagdelete", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:delete", + "api:webviewtagdelete", + "api:webviewTag.delete", + "doc:delete", + "doc:webviewtagdelete", + "doc:webviewTag.delete" + ] + }, + { + "objectID": "api-webview-tag#webviewtagselectall", + "name": "selectAll", + "signature": "()", + "description": "Executes editing command selectAll in page.", + "apiType": "methods", + "fullSignature": "webviewTag.selectAll", + "tldr": "Executes editing command selectAll in page.", + "slug": "webviewtagselectall", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagselectall", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:selectAll", + "api:webviewtagselectall", + "api:webviewTag.selectAll", + "doc:selectAll", + "doc:webviewtagselectall", + "doc:webviewTag.selectAll" + ] + }, + { + "objectID": "api-webview-tag#webviewtagunselect", + "name": "unselect", + "signature": "()", + "description": "Executes editing command unselect in page.", + "apiType": "methods", + "fullSignature": "webviewTag.unselect", + "tldr": "Executes editing command unselect in page.", + "slug": "webviewtagunselect", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagunselect", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:unselect", + "api:webviewtagunselect", + "api:webviewTag.unselect", + "doc:unselect", + "doc:webviewtagunselect", + "doc:webviewTag.unselect" + ] + }, + { + "objectID": "api-webview-tag#webviewtagreplace", + "name": "replace", + "signature": "(text)", + "description": "Executes editing command replace in page.", + "parameters": [ + { + "name": "text", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.replace", + "tldr": "Executes editing command replace in page.", + "slug": "webviewtagreplace", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagreplace", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:replace", + "api:webviewtagreplace", + "api:webviewTag.replace", + "doc:replace", + "doc:webviewtagreplace", + "doc:webviewTag.replace" + ] + }, + { + "objectID": "api-webview-tag#webviewtagreplacemisspelling", + "name": "replaceMisspelling", + "signature": "(text)", + "description": "Executes editing command replaceMisspelling in page.", + "parameters": [ + { + "name": "text", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.replaceMisspelling", + "tldr": "Executes editing command replaceMisspelling in page.", + "slug": "webviewtagreplacemisspelling", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagreplacemisspelling", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:replaceMisspelling", + "api:webviewtagreplacemisspelling", + "api:webviewTag.replaceMisspelling", + "doc:replaceMisspelling", + "doc:webviewtagreplacemisspelling", + "doc:webviewTag.replaceMisspelling" + ] + }, + { + "objectID": "api-webview-tag#webviewtaginserttext", + "name": "insertText", + "signature": "(text)", + "description": "Inserts text to the focused element.", + "parameters": [ + { + "name": "text", + "type": "String", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.insertText", + "tldr": "Inserts text to the focused element.", + "slug": "webviewtaginserttext", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtaginserttext", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:insertText", + "api:webviewtaginserttext", + "api:webviewTag.insertText", + "doc:insertText", + "doc:webviewtaginserttext", + "doc:webviewTag.insertText" + ] + }, + { + "objectID": "api-webview-tag#webviewtagfindinpage", + "name": "findInPage", + "signature": "(text[, options])", + "description": "Starts a request to find all matches for the text in the web page. The result of the request can be obtained by subscribing to found-in-page event.", + "parameters": [ + { + "name": "text", + "type": "String", + "collection": false, + "description": "Content to be searched, must not be empty.", + "required": true + }, + { + "name": "options", + "type": "Object", + "collection": false, + "required": false, + "properties": [ + { + "name": "forward", + "type": "Boolean", + "collection": false, + "description": "Whether to search forward or backward, defaults to true.", + "required": false + }, + { + "name": "findNext", + "type": "Boolean", + "collection": false, + "description": "Whether the operation is first request or a follow up, defaults to false.", + "required": false + }, + { + "name": "matchCase", + "type": "Boolean", + "collection": false, + "description": "Whether search should be case-sensitive, defaults to false.", + "required": false + }, + { + "name": "wordStart", + "type": "Boolean", + "collection": false, + "description": "Whether to look only at the start of words. defaults to false.", + "required": false + }, + { + "name": "medialCapitalAsWordStart", + "type": "Boolean", + "collection": false, + "description": "When combined with wordStart, accepts a match in the middle of a word if the match begins with an uppercase letter followed by a lowercase or non-letter. Accepts several other intra-word matches, defaults to false.", + "required": false + } + ] + } + ], + "returns": { + "type": "Integer", + "collection": false, + "description": "The request id used for the request." + }, + "apiType": "methods", + "fullSignature": "webviewTag.findInPage", + "tldr": "Starts a request to find all matches for the text in the web page.", + "slug": "webviewtagfindinpage", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagfindinpage", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:findInPage", + "api:webviewtagfindinpage", + "api:webviewTag.findInPage", + "doc:findInPage", + "doc:webviewtagfindinpage", + "doc:webviewTag.findInPage" + ] + }, + { + "objectID": "api-webview-tag#webviewtagstopfindinpage", + "name": "stopFindInPage", + "signature": "(action)", + "description": "Stops any findInPage request for the webview with the provided action.", + "parameters": [ + { + "name": "action", + "type": "String", + "collection": false, + "description": "Specifies the action to take place when ending request.", + "required": true, + "possibleValues": [ + { + "value": "clearSelection", + "description": "Clear the selection." + }, + { + "value": "keepSelection", + "description": "Translate the selection into a normal selection." + }, + { + "value": "activateSelection", + "description": "Focus and click the selection node." + } + ] + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.stopFindInPage", + "tldr": "Stops any findInPage request for the webview with the provided action.", + "slug": "webviewtagstopfindinpage", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagstopfindinpage", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:stopFindInPage", + "api:webviewtagstopfindinpage", + "api:webviewTag.stopFindInPage", + "doc:stopFindInPage", + "doc:webviewtagstopfindinpage", + "doc:webviewTag.stopFindInPage" + ] + }, + { + "objectID": "api-webview-tag#webviewtagprint", + "name": "print", + "signature": "([options])", + "description": "Prints webview's web page. Same as webContents.print([options]).", + "parameters": [ + { + "name": "options", + "type": "Object", + "collection": false, + "required": false, + "properties": [ + { + "name": "silent", + "type": "Boolean", + "collection": false, + "description": "Don't ask user for print settings. Default is false.", + "required": false + }, + { + "name": "printBackground", + "type": "Boolean", + "collection": false, + "description": "Also prints the background color and image of the web page. Default is false.", + "required": false + }, + { + "name": "deviceName", + "type": "String", + "collection": false, + "description": "Set the printer device name to use. Default is ''.", + "required": false + } + ] + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.print", + "tldr": "Prints webview's web page.", + "slug": "webviewtagprint", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagprint", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:print", + "api:webviewtagprint", + "api:webviewTag.print", + "doc:print", + "doc:webviewtagprint", + "doc:webviewTag.print" + ] + }, + { + "objectID": "api-webview-tag#webviewtagprinttopdf", + "name": "printToPDF", + "signature": "(options, callback)", + "description": "Prints webview's web page as PDF, Same as webContents.printToPDF(options, callback).", + "parameters": [ + { + "name": "options", + "type": "Object", + "collection": false, + "required": true, + "properties": [ + { + "name": "marginsType", + "type": "Integer", + "collection": false, + "description": "Specifies the type of margins to use. Uses 0 for default margin, 1 for no margin, and 2 for minimum margin.", + "required": false + }, + { + "name": "pageSize", + "type": [ + { + "typeName": "String", + "collection": false + }, + { + "typeName": "Size", + "collection": false + } + ], + "collection": false, + "description": "Specify page size of the generated PDF. Can be A3, A4, A5, Legal, Letter, Tabloid or an Object containing height and width in microns.", + "required": false + }, + { + "name": "printBackground", + "type": "Boolean", + "collection": false, + "description": "Whether to print CSS backgrounds.", + "required": false + }, + { + "name": "printSelectionOnly", + "type": "Boolean", + "collection": false, + "description": "Whether to print selection only.", + "required": false + }, + { + "name": "landscape", + "type": "Boolean", + "collection": false, + "description": "true for landscape, false for portrait.", + "required": false + } + ] + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "error", + "type": "Error", + "collection": false, + "description": "", + "required": true + }, + { + "name": "data", + "type": "Buffer", + "collection": false, + "description": "", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.printToPDF", + "tldr": "Prints webview's web page as PDF, Same as webContents.printToPDF(options, callback).", + "slug": "webviewtagprinttopdf", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagprinttopdf", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:printToPDF", + "api:webviewtagprinttopdf", + "api:webviewTag.printToPDF", + "doc:printToPDF", + "doc:webviewtagprinttopdf", + "doc:webviewTag.printToPDF" + ] + }, + { + "objectID": "api-webview-tag#webviewtagcapturepage", + "name": "capturePage", + "signature": "([rect, ]callback)", + "description": "Captures a snapshot of the page within rect. Upon completion callback will be called with callback(image). The image is an instance of NativeImage that stores data of the snapshot. Omitting rect will capture the whole visible page. Deprecated Soon", + "parameters": [ + { + "name": "rect", + "type": "Rectangle", + "collection": false, + "description": "The bounds to capture", + "required": false + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "image", + "type": "NativeImage", + "collection": false, + "description": "", + "required": true + } + ] + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.capturePage", + "tldr": "Captures a snapshot of the page within rect.", + "slug": "webviewtagcapturepage", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagcapturepage", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:capturePage", + "api:webviewtagcapturepage", + "api:webviewTag.capturePage", + "doc:capturePage", + "doc:webviewtagcapturepage", + "doc:webviewTag.capturePage" + ] + }, + { + "objectID": "api-webview-tag#webviewtagcapturepage-1", + "name": "capturePage", + "signature": "([rect])", + "description": "Captures a snapshot of the page within rect. Omitting rect will capture the whole visible page.", + "parameters": [ + { + "name": "rect", + "type": "Rectangle", + "collection": false, + "description": "The area of the page to be captured.", + "required": false + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.capturePage", + "tldr": "Captures a snapshot of the page within rect.", + "slug": "webviewtagcapturepage-1", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagcapturepage-1", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:capturePage", + "api:webviewtagcapturepage-1", + "api:webviewTag.capturePage", + "doc:capturePage", + "doc:webviewtagcapturepage-1", + "doc:webviewTag.capturePage" + ] + }, + { + "objectID": "api-webview-tag#webviewtagsend", + "name": "send", + "signature": "(channel[, arg1][, arg2][, ...])", + "description": "Send an asynchronous message to renderer process via channel, you can also send arbitrary arguments. The renderer process can handle the message by listening to the channel event with the ipcRenderer module. See webContents.send for examples.", + "parameters": [ + { + "name": "channel", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "...args", + "type": "any", + "collection": true, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.send", + "tldr": "Send an asynchronous message to renderer process via channel, you can also send arbitrary arguments.", + "slug": "webviewtagsend", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagsend", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:send", + "api:webviewtagsend", + "api:webviewTag.send", + "doc:send", + "doc:webviewtagsend", + "doc:webviewTag.send" + ] + }, + { + "objectID": "api-webview-tag#webviewtagsendinputevent", + "name": "sendInputEvent", + "signature": "(event)", + "description": "Sends an input event to the page. See webContents.sendInputEvent for detailed description of event object.", + "parameters": [ + { + "name": "event", + "type": "Object", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.sendInputEvent", + "tldr": "Sends an input event to the page.", + "slug": "webviewtagsendinputevent", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagsendinputevent", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:sendInputEvent", + "api:webviewtagsendinputevent", + "api:webviewTag.sendInputEvent", + "doc:sendInputEvent", + "doc:webviewtagsendinputevent", + "doc:webviewTag.sendInputEvent" + ] + }, + { + "objectID": "api-webview-tag#webviewtagsetzoomfactor", + "name": "setZoomFactor", + "signature": "(factor)", + "description": "Changes the zoom factor to the specified factor. Zoom factor is zoom percent divided by 100, so 300% = 3.0.", + "parameters": [ + { + "name": "factor", + "type": "Number", + "collection": false, + "description": "Zoom factor.", + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.setZoomFactor", + "tldr": "Changes the zoom factor to the specified factor.", + "slug": "webviewtagsetzoomfactor", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagsetzoomfactor", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setZoomFactor", + "api:webviewtagsetzoomfactor", + "api:webviewTag.setZoomFactor", + "doc:setZoomFactor", + "doc:webviewtagsetzoomfactor", + "doc:webviewTag.setZoomFactor" + ] + }, + { + "objectID": "api-webview-tag#webviewtagsetzoomlevel", + "name": "setZoomLevel", + "signature": "(level)", + "description": "Changes the zoom level to the specified level. The original size is 0 and each increment above or below represents zooming 20% larger or smaller to default limits of 300% and 50% of original size, respectively. The formula for this is scale := 1.2 ^ level.", + "parameters": [ + { + "name": "level", + "type": "Number", + "collection": false, + "description": "Zoom level.", + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.setZoomLevel", + "tldr": "Changes the zoom level to the specified level.", + "slug": "webviewtagsetzoomlevel", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagsetzoomlevel", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setZoomLevel", + "api:webviewtagsetzoomlevel", + "api:webviewTag.setZoomLevel", + "doc:setZoomLevel", + "doc:webviewtagsetzoomlevel", + "doc:webviewTag.setZoomLevel" + ] + }, + { + "objectID": "api-webview-tag#webviewtaggetzoomfactor", + "name": "getZoomFactor", + "signature": "()", + "returns": { + "type": "Number", + "collection": false, + "description": "the current zoom factor." + }, + "apiType": "methods", + "fullSignature": "webviewTag.getZoomFactor", + "tldr": "Returns the current zoom factor.", + "slug": "webviewtaggetzoomfactor", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtaggetzoomfactor", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getZoomFactor", + "api:webviewtaggetzoomfactor", + "api:webviewTag.getZoomFactor", + "doc:getZoomFactor", + "doc:webviewtaggetzoomfactor", + "doc:webviewTag.getZoomFactor" + ] + }, + { + "objectID": "api-webview-tag#webviewtaggetzoomlevel", + "name": "getZoomLevel", + "signature": "()", + "returns": { + "type": "Number", + "collection": false, + "description": "the current zoom level." + }, + "apiType": "methods", + "fullSignature": "webviewTag.getZoomLevel", + "tldr": "Returns the current zoom level.", + "slug": "webviewtaggetzoomlevel", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtaggetzoomlevel", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getZoomLevel", + "api:webviewtaggetzoomlevel", + "api:webviewTag.getZoomLevel", + "doc:getZoomLevel", + "doc:webviewtaggetzoomlevel", + "doc:webviewTag.getZoomLevel" + ] + }, + { + "objectID": "api-webview-tag#webviewtagsetvisualzoomlevellimits", + "name": "setVisualZoomLevelLimits", + "signature": "(minimumLevel, maximumLevel)", + "description": "Sets the maximum and minimum pinch-to-zoom level.", + "parameters": [ + { + "name": "minimumLevel", + "type": "Number", + "collection": false, + "required": true + }, + { + "name": "maximumLevel", + "type": "Number", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.setVisualZoomLevelLimits", + "tldr": "Sets the maximum and minimum pinch-to-zoom level.", + "slug": "webviewtagsetvisualzoomlevellimits", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagsetvisualzoomlevellimits", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setVisualZoomLevelLimits", + "api:webviewtagsetvisualzoomlevellimits", + "api:webviewTag.setVisualZoomLevelLimits", + "doc:setVisualZoomLevelLimits", + "doc:webviewtagsetvisualzoomlevellimits", + "doc:webviewTag.setVisualZoomLevelLimits" + ] + }, + { + "objectID": "api-webview-tag#webviewtagsetlayoutzoomlevellimits", + "name": "setLayoutZoomLevelLimits", + "signature": "(minimumLevel, maximumLevel)", + "description": "Sets the maximum and minimum layout-based (i.e. non-visual) zoom level.", + "parameters": [ + { + "name": "minimumLevel", + "type": "Number", + "collection": false, + "required": true + }, + { + "name": "maximumLevel", + "type": "Number", + "collection": false, + "required": true + } + ], + "apiType": "methods", + "fullSignature": "webviewTag.setLayoutZoomLevelLimits", + "tldr": "Sets the maximum and minimum layout-based (i.e.", + "slug": "webviewtagsetlayoutzoomlevellimits", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagsetlayoutzoomlevellimits", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:setLayoutZoomLevelLimits", + "api:webviewtagsetlayoutzoomlevellimits", + "api:webviewTag.setLayoutZoomLevelLimits", + "doc:setLayoutZoomLevelLimits", + "doc:webviewtagsetlayoutzoomlevellimits", + "doc:webviewTag.setLayoutZoomLevelLimits" + ] + }, + { + "objectID": "api-webview-tag#webviewtagshowdefinitionforselection", + "name": "showDefinitionForSelection", + "signature": "()", + "platforms": [ + "macOS" + ], + "description": "Shows pop-up dictionary that searches the selected word on the page.", + "apiType": "methods", + "fullSignature": "webviewTag.showDefinitionForSelection", + "tldr": "Shows pop-up dictionary that searches the selected word on the page.", + "slug": "webviewtagshowdefinitionforselection", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtagshowdefinitionforselection", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:showDefinitionForSelection", + "api:webviewtagshowdefinitionforselection", + "api:webviewTag.showDefinitionForSelection", + "doc:showDefinitionForSelection", + "doc:webviewtagshowdefinitionforselection", + "doc:webviewTag.showDefinitionForSelection" + ] + }, + { + "objectID": "api-webview-tag#webviewtaggetwebcontents", + "name": "getWebContents", + "signature": "()", + "description": "It depends on the remote module, it is therefore not available when this module is disabled.", + "returns": { + "type": "WebContents", + "collection": false, + "description": "The web contents associated with this webview." + }, + "apiType": "methods", + "fullSignature": "webviewTag.getWebContents", + "tldr": "It depends on the remote module, it is therefore not available when this module is disabled.", + "slug": "webviewtaggetwebcontents", + "url": "https://electronjs.org/docs/api/webview-tag#webviewtaggetwebcontents", + "keyValuePairs": [ + "is:doc", + "is:api", + "api:getWebContents", + "api:webviewtaggetwebcontents", + "api:webviewTag.getWebContents", + "doc:getWebContents", + "doc:webviewtaggetwebcontents", + "doc:webviewTag.getWebContents" + ] } ] } \ No newline at end of file diff --git a/dist/apps.json b/dist/apps.json index dfe2bfe..de82fd9 100644 --- a/dist/apps.json +++ b/dist/apps.json @@ -30,8 +30,8 @@ "#849cb4", "#8c9cb4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.121Z", - "readmeFetchedAt": "2018-05-14T15:02:39.824Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:22.270Z", + "readmeFetchedAt": "2019-02-08T00:07:37.893Z", "goodColorOnWhite": "#14538B", "goodColorOnBlack": "#6B88A7", "faintColorOnWhite": "rgba(20, 83, 139, 0.1)", @@ -77,6 +77,43 @@ "app:5eclient" ] }, + { + "objectID": "app-aalarm", + "slug": "aalarm", + "name": "Aalarm", + "description": "Simple alarm app with a lot of neon effects", + "website": "http://api.fridaytec.com/site", + "category": "Lifestyle", + "repository": "https://github.com/ahmtcn123/Aalarm", + "keywords": [ + "alarm", + "neon" + ], + "license": "Apache-2.0", + "icon": "aalarm-icon.png", + "icon32": "aalarm-icon-32.png", + "icon64": "aalarm-icon-64.png", + "icon128": "aalarm-icon-128.png", + "icon256": "aalarm-icon-256.png", + "date": "2018-09-12", + "iconColors": [ + "#fcfcfc", + "#4404fc", + "#ffc0fc", + "#a440fc", + "#4444fc" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:22.275Z", + "readmeFetchedAt": "2019-02-08T00:07:37.867Z", + "goodColorOnWhite": "#4404FC", + "goodColorOnBlack": "#FFC0FC", + "faintColorOnWhite": "rgba(68, 4, 252, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Aalarm", + "app:aalarm" + ] + }, { "objectID": "app-abricotine", "slug": "abricotine", @@ -103,8 +140,8 @@ "#fc8004", "#fc8c04" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.177Z", - "readmeFetchedAt": "2018-05-14T15:02:39.860Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:22.284Z", + "readmeFetchedAt": "2019-02-08T00:07:37.913Z", "goodColorOnWhite": "#B54802", "goodColorOnBlack": "#FC6404", "faintColorOnWhite": "rgba(181, 72, 2, 0.1)", @@ -114,6 +151,45 @@ "app:abricotine" ] }, + { + "objectID": "app-abstract", + "slug": "abstract", + "name": "Abstract", + "description": "A platform for modern design teams to work together.", + "website": "https://www.goabstract.com", + "category": "Graphics & Design", + "keywords": [ + "design", + "version control", + "abstract", + "sketch", + "image", + "editor", + "vector", + "prototyping" + ], + "icon": "abstract-icon.png", + "icon32": "abstract-icon-32.png", + "icon64": "abstract-icon-64.png", + "icon128": "abstract-icon-128.png", + "icon256": "abstract-icon-256.png", + "date": "2018-06-18", + "iconColors": [ + "#e2eeee", + "#282b2e", + "#8cacc4", + "#7e85b9", + "#6d7782" + ], + "goodColorOnWhite": "#6D7782", + "goodColorOnBlack": "#8CACC4", + "faintColorOnWhite": "rgba(109, 119, 130, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Abstract", + "app:abstract" + ] + }, { "objectID": "app-admin-scheduler", "slug": "admin-scheduler", @@ -134,8 +210,8 @@ "#79525e", "#5c8c94" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.122Z", - "readmeFetchedAt": "2018-05-14T15:02:39.882Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:22.268Z", + "readmeFetchedAt": "2019-02-08T00:07:37.927Z", "goodColorOnWhite": "#05455D", "goodColorOnBlack": "#86D2D9", "faintColorOnWhite": "rgba(5, 69, 93, 0.1)", @@ -145,6 +221,72 @@ "app:admin-scheduler" ] }, + { + "objectID": "app-advanced-rest-client", + "slug": "advanced-rest-client", + "name": "Advanced REST Client", + "description": "REST client application for developers", + "website": "https://install.advancedrestclient.com", + "category": "Developer Tools", + "repository": "https://github.com/advanced-rest-client/arc-electron", + "keywords": [ + "REST", + "REST client", + "HTTP", + "request", + "developer" + ], + "license": "Apache-2.0", + "screenshots": [ + { + "imageUrl": "https://install.advancedrestclient.com/images/screenshots/electron-apps/request.png", + "caption": "Making a HTTP request" + }, + { + "imageUrl": "https://install.advancedrestclient.com/images/screenshots/electron-apps/authorization-oauth2.png", + "caption": "Authorizing with OAuth2 endpoint" + }, + { + "imageUrl": "https://install.advancedrestclient.com/images/screenshots/electron-apps/cookie-manager.png", + "caption": "Session management via cookies" + }, + { + "imageUrl": "https://install.advancedrestclient.com/images/screenshots/electron-apps/variables.png", + "caption": "Local and system variables" + }, + { + "imageUrl": "https://install.advancedrestclient.com/images/screenshots/electron-apps/response-actions.png", + "caption": "Automation with request actions" + }, + { + "imageUrl": "https://install.advancedrestclient.com/images/screenshots/electron-apps/google-drive.png", + "caption": "Google Drive integration" + } + ], + "icon": "advanced-rest-client-icon.png", + "icon32": "advanced-rest-client-icon-32.png", + "icon64": "advanced-rest-client-icon-64.png", + "icon128": "advanced-rest-client-icon-128.png", + "icon256": "advanced-rest-client-icon-256.png", + "date": "2018-10-01", + "iconColors": [ + "#f8fafc", + "#2393f4", + "#7ac2fb", + "#52abf4", + "#54b4f4" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:22.380Z", + "readmeFetchedAt": "2019-02-08T00:07:38.024Z", + "goodColorOnWhite": "#066DC0", + "goodColorOnBlack": "#7AC2FB", + "faintColorOnWhite": "rgba(6, 109, 192, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Advanced REST Client", + "app:advanced-rest-client" + ] + }, { "objectID": "app-aipo-com", "slug": "aipo-com", @@ -246,8 +388,8 @@ "#798076", "#616464" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.114Z", - "readmeFetchedAt": "2018-05-14T15:02:39.887Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:22.333Z", + "readmeFetchedAt": "2019-02-08T00:07:38.046Z", "goodColorOnWhite": "#5C5B53", "goodColorOnBlack": "#C1D0BA", "faintColorOnWhite": "rgba(92, 91, 83, 0.1)", @@ -293,8 +435,8 @@ "#0c0c0c", "#cccccc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.181Z", - "readmeFetchedAt": "2018-05-14T15:02:39.987Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:22.373Z", + "readmeFetchedAt": "2019-02-08T00:07:38.010Z", "goodColorOnWhite": "#0C0C0C", "goodColorOnBlack": "#3EADEC", "faintColorOnWhite": "rgba(12, 12, 12, 0.1)", @@ -338,8 +480,8 @@ "#e4cc5e", "#ccccbc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.178Z", - "readmeFetchedAt": "2018-05-14T15:02:39.972Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:22.381Z", + "readmeFetchedAt": "2019-02-08T00:07:38.038Z", "goodColorOnWhite": "#A56313", "goodColorOnBlack": "#E89837", "faintColorOnWhite": "rgba(165, 99, 19, 0.1)", @@ -387,8 +529,8 @@ "#642c14", "#5e2319" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.194Z", - "readmeFetchedAt": "2018-05-14T15:02:40.127Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:22.443Z", + "readmeFetchedAt": "2019-02-08T00:07:38.272Z", "goodColorOnWhite": "#642C14", "goodColorOnBlack": "#C45627", "faintColorOnWhite": "rgba(100, 44, 20, 0.1)", @@ -398,11 +540,122 @@ "app:alduin" ] }, + { + "objectID": "app-allow2automate", + "slug": "allow2automate", + "name": "allow2automate", + "description": "Using Allow2 to control access and quotas for electricity via home automation devices.", + "category": "Utilities", + "repository": "https://github.com/Allow2/Allow2Automate", + "keywords": [ + "allow2", + "parent", + "parental", + "controls", + "control", + "quota", + "screentime", + "freedom", + "children", + "child", + "wemo", + "automation", + "electrical", + "electricity" + ], + "license": "https://github.com/Allow2/Allow2Automate/blob/master/LICENSE", + "screenshots": [ + { + "imageUrl": "https://github.com/Allow2/Allow2Automate/blob/master/ScreenShots/Screen%20Shot%204.png", + "caption": "Allow2Automate on OSX", + "imageLink": "https://github.com/Allow2/Allow2Automate" + } + ], + "icon": "allow2automate-icon.png", + "icon32": "allow2automate-icon-32.png", + "icon64": "allow2automate-icon-64.png", + "icon128": "allow2automate-icon-128.png", + "icon256": "allow2automate-icon-256.png", + "date": "2018-10-04", + "iconColors": [ + "#fbcb2b", + "#080705", + "#977c22", + "#747474", + "#7c5c14" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:22.434Z", + "readmeFetchedAt": "2019-02-08T00:07:38.253Z", + "goodColorOnWhite": "#7C5C14", + "goodColorOnBlack": "#FBCB2B", + "faintColorOnWhite": "rgba(124, 92, 20, 0.1)", + "keyValuePairs": [ + "is:app", + "app:allow2automate", + "app:allow2automate" + ] + }, + { + "objectID": "app-altair", + "slug": "altair", + "name": "Altair GraphQL Client", + "description": "Beautiful feature-rich GraphQL Client for all platforms", + "website": "https://altair.sirmuel.design/", + "category": "Developer Tools", + "repository": "https://github.com/imolorhe/altair", + "keywords": [ + "graphql", + "graphql-ide", + "graphql-client", + "opensource" + ], + "license": "MIT", + "homebrewCaskName": "altair-graphql-client", + "snapcraftName": "altair", + "youtube_video_url": "https://www.youtube.com/watch?v=zTFYOo4uD-M", + "screenshots": [ + { + "imageUrl": "https://altair.sirmuel.design/assets/img/app-shot.jpg" + } + ], + "locales": [ + "en-US", + "fr-FR", + "es-ES", + "cs-CZ", + "de-DE", + "pt-BR", + "zh-CN" + ], + "icon": "altair-icon.png", + "icon32": "altair-icon-32.png", + "icon64": "altair-icon-64.png", + "icon128": "altair-icon-128.png", + "icon256": "altair-icon-256.png", + "date": "2018-10-28", + "iconColors": [ + "#7bbb5b", + "#34343c", + "#348cbc", + "#34789e", + "#60a4a0" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:22.519Z", + "readmeFetchedAt": "2019-02-08T00:07:38.244Z", + "goodColorOnWhite": "#34789E", + "goodColorOnBlack": "#348CBC", + "faintColorOnWhite": "rgba(52, 120, 158, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Altair GraphQL Client", + "app:altair" + ] + }, { "objectID": "app-alva", "slug": "alva", "name": "Alva", - "description": "Design interactive products based on the same components your engineers are using.", + "description": "Create living prototypes with code components.", "website": "https://meetalva.io/", "category": "Graphics & Design", "repository": "https://github.com/meetalva/alva", @@ -413,10 +666,11 @@ "components" ], "license": "MIT", + "youtube_video_url": "https://www.youtube.com/watch?v=ULotS8U5n9k", "screenshots": [ { - "imageUrl": "https://meetalva.io/images/application.png", - "caption": "Alva view with the integrated example project.", + "imageUrl": "https://media.meetalva.io/video/website-02.png", + "caption": "Alva view with the Alva website as a example.", "imageLink": "https://meetalva.io" } ], @@ -427,17 +681,17 @@ "icon256": "alva-icon-256.png", "date": "2017-12-26", "iconColors": [ - "#3990df", - "#f1f6fb", - "#69ace4", - "#c4dcf4", - "#74ace6" + "#a5058b", + "#fbfbfb", + "#f484b4", + "#b48cec", + "#dca5dc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.286Z", - "readmeFetchedAt": "2018-05-14T15:02:40.101Z", - "goodColorOnWhite": "#1F74C2", - "goodColorOnBlack": "#3990DF", - "faintColorOnWhite": "rgba(31, 116, 194, 0.1)", + "latestReleaseFetchedAt": "2019-02-08T00:07:22.504Z", + "readmeFetchedAt": "2019-02-08T00:07:38.175Z", + "goodColorOnWhite": "#A5058B", + "goodColorOnBlack": "#F484B4", + "faintColorOnWhite": "rgba(165, 5, 139, 0.1)", "keyValuePairs": [ "is:app", "app:Alva", @@ -514,8 +768,8 @@ "#047a6a", "#3cbcac" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.277Z", - "readmeFetchedAt": "2018-05-14T15:02:40.258Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:22.812Z", + "readmeFetchedAt": "2019-02-08T00:07:38.396Z", "goodColorOnWhite": "#047A6A", "goodColorOnBlack": "#04B79F", "faintColorOnWhite": "rgba(4, 122, 106, 0.1)", @@ -559,45 +813,6 @@ "app:amium" ] }, - { - "objectID": "app-andcards", - "slug": "andcards", - "name": "andCards", - "description": "Coworking and event management software.", - "website": "https://andcards.com", - "keywords": [ - "communications", - "emails", - "management", - "social", - "work", - "mac", - "windows", - "linux" - ], - "category": "Social Networking", - "icon": "andcards-icon.png", - "icon32": "andcards-icon-32.png", - "icon64": "andcards-icon-64.png", - "icon128": "andcards-icon-128.png", - "icon256": "andcards-icon-256.png", - "date": "2018-01-30", - "iconColors": [ - "#c4bca4", - "#c4b4a4", - "#c8bca4", - "#c8bca4", - "#c8bca4" - ], - "goodColorOnWhite": "#786849", - "goodColorOnBlack": "#C8BCA4", - "faintColorOnWhite": "rgba(120, 104, 73, 0.1)", - "keyValuePairs": [ - "is:app", - "app:andCards", - "app:andcards" - ] - }, { "objectID": "app-anote", "slug": "anote", @@ -630,8 +845,8 @@ "#f87c7c", "#f43c3c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.229Z", - "readmeFetchedAt": "2018-05-14T15:02:40.249Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:22.516Z", + "readmeFetchedAt": "2019-02-08T00:07:38.362Z", "goodColorOnWhite": "#D90404", "goodColorOnBlack": "#F10404", "faintColorOnWhite": "rgba(217, 4, 4, 0.1)", @@ -673,8 +888,8 @@ "#553a7d", "#9c7459" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.541Z", - "readmeFetchedAt": "2018-05-14T15:02:40.475Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:22.633Z", + "readmeFetchedAt": "2019-02-08T00:07:38.430Z", "goodColorOnWhite": "#553A7D", "goodColorOnBlack": "#E77B30", "faintColorOnWhite": "rgba(85, 58, 125, 0.1)", @@ -689,8 +904,8 @@ "slug": "ao", "name": "Ao", "description": "Elegant Microsoft To-Do desktop app", - "website": "https://klauscfhq.github.io/ao", - "repository": "https://github.com/klauscfhq/ao", + "website": "https://klaussinani.github.io/ao", + "repository": "https://github.com/klaussinani/ao", "keywords": [ "to-do", "productivity", @@ -700,7 +915,7 @@ "category": "Productivity", "screenshots": [ { - "imageUrl": "https://cdn.rawgit.com/klauscfhq/ao/125924ed/media/dark-theme.png" + "imageUrl": "https://raw.githubusercontent.com/klaussinani/ao/125924ed856e5482b16dc62c1c231483c76473f0/media/dark-theme.png" } ], "icon": "ao-icon.png", @@ -716,8 +931,8 @@ "#7a72ec", "#6c7cec" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.328Z", - "readmeFetchedAt": "2018-05-14T15:02:40.369Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:22.613Z", + "readmeFetchedAt": "2019-02-08T00:07:38.387Z", "goodColorOnWhite": "#0C7686", "goodColorOnBlack": "#15C8E3", "faintColorOnWhite": "rgba(12, 118, 134, 0.1)", @@ -761,8 +976,8 @@ "#ff50b0", "#ff50b0" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.351Z", - "readmeFetchedAt": "2018-05-14T15:02:40.506Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:22.593Z", + "readmeFetchedAt": "2019-02-08T00:07:38.472Z", "goodColorOnWhite": "#DC0079", "goodColorOnBlack": "#FF50B0", "faintColorOnWhite": "rgba(220, 0, 121, 0.1)", @@ -801,8 +1016,8 @@ "#8f67af", "#ac8cc4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.377Z", - "readmeFetchedAt": "2018-05-14T15:02:40.590Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:22.674Z", + "readmeFetchedAt": "2019-02-08T00:07:38.534Z", "goodColorOnWhite": "#642C94", "goodColorOnBlack": "#D3C3E0", "faintColorOnWhite": "rgba(100, 44, 148, 0.1)", @@ -812,6 +1027,53 @@ "app:appium" ] }, + { + "objectID": "app-appserver", + "slug": "appserver", + "name": "AppServer", + "description": "A Desktop App Server for HTML, MD files for Developers and Enthusiasts.", + "category": "Developer Tools", + "repository": "https://github.com/bismay4u/AppServer", + "keywords": [ + "AppServer", + "WebServer", + "DesktopServer", + "Server", + "DesignerServer", + "QuickPreview" + ], + "license": "MIT", + "screenshots": [ + { + "imageUrl": "https://github.com/bismay4u/AppServer/blob/master/build/screenshot.png", + "caption": "Screenshot 1", + "imageLink": "https://github.com/bismay4u/AppServer" + } + ], + "icon": "appserver-icon.png", + "icon32": "appserver-icon-32.png", + "icon64": "appserver-icon-64.png", + "icon128": "appserver-icon-128.png", + "icon256": "appserver-icon-256.png", + "date": "2018-08-09", + "iconColors": [ + "#244454", + "#baeaed", + "#64909a", + "#799faa", + "#6c848c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:22.710Z", + "readmeFetchedAt": "2019-02-08T00:07:38.544Z", + "goodColorOnWhite": "#244454", + "goodColorOnBlack": "#BAEAED", + "faintColorOnWhite": "rgba(36, 68, 84, 0.1)", + "keyValuePairs": [ + "is:app", + "app:AppServer", + "app:appserver" + ] + }, { "objectID": "app-argo", "slug": "argo", @@ -841,8 +1103,8 @@ "#f9645c", "#eceeee" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.387Z", - "readmeFetchedAt": "2018-05-14T15:02:40.496Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:22.695Z", + "readmeFetchedAt": "2019-02-08T00:07:38.558Z", "goodColorOnWhite": "#141717", "goodColorOnBlack": "#F9645C", "faintColorOnWhite": "rgba(20, 23, 23, 0.1)", @@ -852,6 +1114,53 @@ "app:argo" ] }, + { + "objectID": "app-asarui", + "slug": "asarui", + "name": "Asar UI", + "description": "UI for Asar Pack", + "category": "Utilities", + "repository": "https://github.com/myazarc/AsarUI", + "keywords": [ + "asar ui", + "asar", + "electron" + ], + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/myazarc/AsarUI/master/build/images/1.png" + }, + { + "imageUrl": "https://raw.githubusercontent.com/myazarc/AsarUI/master/build/images/2.png" + } + ], + "locales": [ + "en-US" + ], + "icon": "asarui-icon.png", + "icon32": "asarui-icon-32.png", + "icon64": "asarui-icon-64.png", + "icon128": "asarui-icon-128.png", + "icon256": "asarui-icon-256.png", + "date": "2018-10-26", + "iconColors": [ + "#2d2e3d", + "#f7fafa", + "#8e949e", + "#849ca4", + "#949ca4" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:22.756Z", + "readmeFetchedAt": "2019-02-08T00:07:38.606Z", + "goodColorOnWhite": "#2D2E3D", + "goodColorOnBlack": "#F7FAFA", + "faintColorOnWhite": "rgba(45, 46, 61, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Asar UI", + "app:asarui" + ] + }, { "objectID": "app-astroprint", "slug": "astroprint", @@ -928,8 +1237,8 @@ "#b9d6c8", "#616161" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.445Z", - "readmeFetchedAt": "2018-05-14T15:02:40.672Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:22.895Z", + "readmeFetchedAt": "2019-02-08T00:07:38.706Z", "goodColorOnWhite": "#616161", "goodColorOnBlack": "#A0D792", "faintColorOnWhite": "rgba(97, 97, 97, 0.1)", @@ -1006,8 +1315,8 @@ "#324c63", "#3c5c74" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.453Z", - "readmeFetchedAt": "2018-05-14T15:02:40.730Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:22.816Z", + "readmeFetchedAt": "2019-02-08T00:07:38.681Z", "goodColorOnWhite": "#324C63", "goodColorOnBlack": "#4A86B2", "faintColorOnWhite": "rgba(50, 76, 99, 0.1)", @@ -1118,8 +1427,8 @@ "#752828", "#b89295" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.461Z", - "readmeFetchedAt": "2018-05-14T15:02:40.705Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:22.837Z", + "readmeFetchedAt": "2019-02-08T00:07:38.747Z", "goodColorOnWhite": "#C73030", "goodColorOnBlack": "#B89295", "faintColorOnWhite": "rgba(199, 48, 48, 0.1)", @@ -1166,6 +1475,7 @@ "slug": "backlog", "name": "Backlog", "description": "Simple desktop app for storing lists of items (todo, tasks, backlog items)", + "website": "http://www.backlog.cloud", "category": "Utilities", "repository": "https://github.com/czytelny/backlog.git", "keywords": [ @@ -1180,7 +1490,7 @@ "license": "MIT", "screenshots": [ { - "imageUrl": "https://raw.githubusercontent.com/czytelny/backlog/master/screenshot.png", + "imageUrl": "https://raw.githubusercontent.com/czytelny/backlog/master/backlog_screenshot_1.png", "caption": "Backlog - simple desktop app for storing lists of items", "imageLink": "https://czytelny.github.io/backlog/" } @@ -1198,8 +1508,8 @@ "#3c6c6c", "#3c9c74" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.685Z", - "readmeFetchedAt": "2018-05-14T15:02:40.723Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:22.989Z", + "readmeFetchedAt": "2019-02-08T00:07:38.726Z", "goodColorOnWhite": "#3C6C6C", "goodColorOnBlack": "#46B383", "faintColorOnWhite": "rgba(60, 108, 108, 0.1)", @@ -1269,8 +1579,8 @@ "#040404", "#38140f" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.520Z", - "readmeFetchedAt": "2018-05-14T15:02:40.850Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:22.901Z", + "readmeFetchedAt": "2019-02-08T00:07:38.872Z", "goodColorOnWhite": "#A61304", "goodColorOnBlack": "#F11C06", "faintColorOnWhite": "rgba(166, 19, 4, 0.1)", @@ -1294,7 +1604,7 @@ "category": "Developer Tools", "screenshots": [ { - "imageUrl": "https://raw.githubusercontent.com/bdash-app/bdash/master/assets/capture1.png" + "imageUrl": "https://raw.githubusercontent.com/bdash-app/bdash/8d7906faf2436f5689dc33a9177ee92d16fe6990/assets/capture1.png" } ], "icon": "bdash-icon.png", @@ -1310,8 +1620,8 @@ "#adcea5", "#16a004" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.537Z", - "readmeFetchedAt": "2018-05-14T15:02:40.880Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:22.982Z", + "readmeFetchedAt": "2019-02-08T00:07:38.822Z", "goodColorOnWhite": "#128203", "goodColorOnBlack": "#16A004", "faintColorOnWhite": "rgba(18, 130, 3, 0.1)", @@ -1356,8 +1666,8 @@ "#84acec", "#7cacec" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.602Z", - "readmeFetchedAt": "2018-05-14T15:02:40.839Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:22.988Z", + "readmeFetchedAt": "2019-02-08T00:07:38.848Z", "goodColorOnWhite": "#056CDC", "goodColorOnBlack": "#7CACEC", "faintColorOnWhite": "rgba(5, 108, 220, 0.1)", @@ -1367,6 +1677,42 @@ "app:beaker-browser" ] }, + { + "objectID": "app-bearsweeper", + "slug": "bearsweeper", + "name": "BearSweeper", + "description": "Watch out for bear in the field!", + "category": "Games", + "repository": "https://github.com/kyaroru/bear-sweeper", + "keywords": [ + "minesweeper", + "bear", + "puzzle" + ], + "icon": "bearsweeper-icon.png", + "icon32": "bearsweeper-icon-32.png", + "icon64": "bearsweeper-icon-64.png", + "icon128": "bearsweeper-icon-128.png", + "icon256": "bearsweeper-icon-256.png", + "date": "2019-01-10", + "iconColors": [ + "#edd88e", + "#232221", + "#fafafa", + "#7c6c46", + "#847444" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:23.023Z", + "readmeFetchedAt": "2019-02-08T00:07:38.833Z", + "goodColorOnWhite": "#847444", + "goodColorOnBlack": "#EDD88E", + "faintColorOnWhite": "rgba(132, 116, 68, 0.1)", + "keyValuePairs": [ + "is:app", + "app:BearSweeper", + "app:bearsweeper" + ] + }, { "objectID": "app-bearychat", "slug": "bearychat", @@ -1433,8 +1779,8 @@ "#c4dc7c", "#a4cc3c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.686Z", - "readmeFetchedAt": "2018-05-14T15:02:40.869Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:23.192Z", + "readmeFetchedAt": "2019-02-08T00:07:39.061Z", "goodColorOnWhite": "#618112", "goodColorOnBlack": "#94C41C", "faintColorOnWhite": "rgba(97, 129, 18, 0.1)", @@ -1475,8 +1821,8 @@ "#384c80", "#4864ac" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.601Z", - "readmeFetchedAt": "2018-05-14T15:02:40.951Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:23.067Z", + "readmeFetchedAt": "2019-02-08T00:07:39.071Z", "goodColorOnWhite": "#3B6198", "goodColorOnBlack": "#3591DB", "faintColorOnWhite": "rgba(59, 97, 152, 0.1)", @@ -1517,8 +1863,8 @@ "#100a35", "#0454a4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.976Z", - "readmeFetchedAt": "2018-05-14T15:02:40.992Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:23.088Z", + "readmeFetchedAt": "2019-02-08T00:07:38.979Z", "goodColorOnWhite": "#0474BC", "goodColorOnBlack": "#0481D1", "faintColorOnWhite": "rgba(4, 116, 188, 0.1)", @@ -1556,8 +1902,8 @@ "#04507c", "#c4ffb0" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.678Z", - "readmeFetchedAt": "2018-05-14T15:02:40.987Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:23.101Z", + "readmeFetchedAt": "2019-02-08T00:07:38.949Z", "faintColorOnWhite": "rgba(4, 80, 124, 0.1)", "keyValuePairs": [ "is:app", @@ -1630,8 +1976,8 @@ "#94e7ce", "#2fd19c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.756Z", - "readmeFetchedAt": "2018-05-14T15:02:40.979Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:23.133Z", + "readmeFetchedAt": "2019-02-08T00:07:39.083Z", "goodColorOnWhite": "#037E55", "goodColorOnBlack": "#04C484", "faintColorOnWhite": "rgba(3, 126, 85, 0.1)", @@ -1701,8 +2047,8 @@ "#334850", "#8cc4d4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.753Z", - "readmeFetchedAt": "2018-05-14T15:02:41.142Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:23.193Z", + "readmeFetchedAt": "2019-02-08T00:07:39.110Z", "goodColorOnWhite": "#334850", "goodColorOnBlack": "#2689AD", "faintColorOnWhite": "rgba(51, 72, 80, 0.1)", @@ -1739,8 +2085,8 @@ "#568c6e", "#7c8c84" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.764Z", - "readmeFetchedAt": "2018-05-14T15:02:41.154Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:23.212Z", + "readmeFetchedAt": "2019-02-08T00:07:39.218Z", "goodColorOnWhite": "#044026", "goodColorOnBlack": "#568C6E", "faintColorOnWhite": "rgba(4, 64, 38, 0.1)", @@ -1788,6 +2134,44 @@ "app:buckets" ] }, + { + "objectID": "app-budgie", + "slug": "budgie", + "name": "budgie", + "description": "Your personal budget planner.", + "website": "https://budgie.lierrmm.space", + "repository": "https://github.com/ImNotLiam/budgie", + "keywords": [ + "Finance", + "Budget", + "Planner" + ], + "category": "Finance", + "license": "MIT license", + "icon": "budgie-icon.png", + "icon32": "budgie-icon-32.png", + "icon64": "budgie-icon-64.png", + "icon128": "budgie-icon-128.png", + "icon256": "budgie-icon-256.png", + "date": "2018-07-11", + "iconColors": [ + "#747473", + "#6c6c6c", + "#646464", + "#545454", + "#6c6c64" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:23.563Z", + "readmeFetchedAt": "2019-02-08T00:07:39.201Z", + "goodColorOnWhite": "#6C6C64", + "goodColorOnBlack": "#77776F", + "faintColorOnWhite": "rgba(108, 108, 100, 0.1)", + "keyValuePairs": [ + "is:app", + "app:budgie", + "app:budgie" + ] + }, { "objectID": "app-buka", "slug": "buka", @@ -1823,8 +2207,8 @@ "#9cacc4", "#94a1c4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.227Z", - "readmeFetchedAt": "2018-05-14T15:02:41.082Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:23.607Z", + "readmeFetchedAt": "2019-02-08T00:07:39.182Z", "goodColorOnWhite": "#3A5994", "goodColorOnBlack": "#94A1C4", "faintColorOnWhite": "rgba(58, 89, 148, 0.1)", @@ -1837,12 +2221,14 @@ { "objectID": "app-bunqdesktop", "slug": "bunqdesktop", - "name": "BunqDesktop", - "description": "A desktop implementation for the bunq API.", - "website": "https://bunqdesktop.com", - "repository": "https://github.com/BunqCommunity/BunqDesktop", + "name": "bunqDesktop", + "description": "The unofficial, free and open source desktop application for the bunq API.", + "website": "https://bunqdesk.top", + "repository": "https://github.com/bunqCommunity/bunqDesktop", "category": "Finance", - "homebrewCaskName": "bunq", + "licence": "MIT", + "homebrewCaskName": "bunqcommunity-bunq", + "snapcraftName": "bunqdesktop", "icon": "bunqdesktop-icon.png", "icon32": "bunqdesktop-icon-32.png", "icon64": "bunqdesktop-icon-64.png", @@ -1856,14 +2242,14 @@ "#adbc4c", "#2f2534" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.843Z", - "readmeFetchedAt": "2018-05-14T15:02:41.127Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:23.305Z", + "readmeFetchedAt": "2019-02-08T00:07:39.262Z", "goodColorOnWhite": "#CD3624", "goodColorOnBlack": "#ADBC4C", "faintColorOnWhite": "rgba(205, 54, 36, 0.1)", "keyValuePairs": [ "is:app", - "app:BunqDesktop", + "app:bunqDesktop", "app:bunqdesktop" ] }, @@ -1904,8 +2290,8 @@ "#6cccc0", "#5cc8bc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.533Z", - "readmeFetchedAt": "2018-05-14T15:02:41.434Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:23.310Z", + "readmeFetchedAt": "2019-02-08T00:07:39.421Z", "goodColorOnWhite": "#1A796F", "goodColorOnBlack": "#28B8A9", "faintColorOnWhite": "rgba(26, 121, 111, 0.1)", @@ -1942,8 +2328,8 @@ "#040c08", "#04040c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.913Z", - "readmeFetchedAt": "2018-05-14T15:02:41.223Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:23.466Z", + "readmeFetchedAt": "2019-02-08T00:07:41.358Z", "goodColorOnWhite": "#040C08", "goodColorOnBlack": "#FFF", "faintColorOnWhite": "rgba(4, 12, 8, 0.1)", @@ -1953,6 +2339,59 @@ "app:c-ip" ] }, + { + "objectID": "app-cacher", + "slug": "cacher", + "name": "Cacher", + "description": "Cloud-based, team-enabled code snippet manager with Gists sync.", + "website": "https://www.cacher.io/", + "keywords": [ + "snippets", + "programming", + "coding", + "gists" + ], + "category": "Developer Tools", + "snapcraftName": "cacher", + "screenshots": [ + { + "imageUrl": "https://cdn.cacher.io/app-assets/cacher-demo.gif" + }, + { + "imageUrl": "https://cdn.cacher.io/app-assets/tour/full-featured.png" + }, + { + "imageUrl": "https://cdn.cacher.io/app-assets/tour/labels.png" + }, + { + "imageUrl": "https://cdn.cacher.io/app-assets/tour/teams.png" + }, + { + "imageUrl": "https://cdn.cacher.io/app-assets/tour/editors.png" + } + ], + "icon": "cacher-icon.png", + "icon32": "cacher-icon-32.png", + "icon64": "cacher-icon-64.png", + "icon128": "cacher-icon-128.png", + "icon256": "cacher-icon-256.png", + "date": "2018-10-10", + "iconColors": [ + "#4fa1db", + "#f8fafb", + "#6fbdf4", + "#95c6ea", + "#7cccfc" + ], + "goodColorOnWhite": "#0472B3", + "goodColorOnBlack": "#7CCCFC", + "faintColorOnWhite": "rgba(4, 114, 179, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Cacher", + "app:cacher" + ] + }, { "objectID": "app-calcy", "slug": "calcy", @@ -1985,8 +2424,8 @@ "#7d7d7d", "#f47c74" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:28.974Z", - "readmeFetchedAt": "2018-05-14T15:02:41.248Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:23.398Z", + "readmeFetchedAt": "2019-02-08T00:07:39.330Z", "goodColorOnWhite": "#BE4339", "goodColorOnBlack": "#F47C74", "faintColorOnWhite": "rgba(190, 67, 57, 0.1)", @@ -2036,6 +2475,44 @@ "app:cansnippet" ] }, + { + "objectID": "app-canvas-file-sync", + "slug": "canvas-file-sync", + "name": "canvasFileSync", + "description": "Tool that syncs Canvas files to your local machine", + "website": "https://www.canvasfilesync.com", + "repository": "https://github.com/drew-royster/canvasFileSync", + "keywords": [ + "canvas", + "sync", + "education", + "developers" + ], + "category": "Education", + "icon": "canvas-file-sync-icon.png", + "icon32": "canvas-file-sync-icon-32.png", + "icon64": "canvas-file-sync-icon-64.png", + "icon128": "canvas-file-sync-icon-128.png", + "icon256": "canvas-file-sync-icon-256.png", + "date": "2018-07-30", + "iconColors": [ + "#ef901b", + "#040404", + "#5a360c", + "#3b2404", + "#7c4c0c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:23.494Z", + "readmeFetchedAt": "2019-02-08T00:07:39.387Z", + "goodColorOnWhite": "#3B2404", + "goodColorOnBlack": "#EF901B", + "faintColorOnWhite": "rgba(59, 36, 4, 0.1)", + "keyValuePairs": [ + "is:app", + "app:canvasFileSync", + "app:canvas-file-sync" + ] + }, { "objectID": "app-caprine", "slug": "caprine", @@ -2069,8 +2546,8 @@ "#81c9f6", "#095ab2" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.062Z", - "readmeFetchedAt": "2018-05-14T15:02:41.333Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:23.542Z", + "readmeFetchedAt": "2019-02-08T00:07:39.482Z", "goodColorOnWhite": "#095AB2", "goodColorOnBlack": "#4CD4FC", "faintColorOnWhite": "rgba(9, 90, 178, 0.1)", @@ -2086,14 +2563,14 @@ "name": "Caption", "description": "Find the right subtitles. Easy.", "website": "https://getcaption.co", - "repository": "https://github.com/gielcobben/Caption", + "repository": "https://github.com/gielcobben/caption", "keywords": [ "utility" ], "category": "Utilities", "screenshots": [ { - "imageUrl": "https://camo.githubusercontent.com/62041be5f615c358dee76a4afb0880123d4d63da/68747470733a2f2f67657463617074696f6e2e636f2f636f7665722e6a7067" + "imageUrl": "https://gielcobben.com/github/caption/github_cover.png" } ], "icon": "caption-icon.png", @@ -2109,8 +2586,8 @@ "#5ebdfa", "#7cccfc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.059Z", - "readmeFetchedAt": "2018-05-14T15:02:41.599Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:23.748Z", + "readmeFetchedAt": "2019-02-08T00:07:39.546Z", "goodColorOnWhite": "#037ACB", "goodColorOnBlack": "#0497FB", "faintColorOnWhite": "rgba(3, 122, 203, 0.1)", @@ -2152,6 +2629,69 @@ "app:caret" ] }, + { + "objectID": "app-cargo-messenger", + "slug": "cargo-messenger", + "name": "Cargo Messenger", + "description": "App provides messaging system using Cargo.LT system.", + "website": "https://www.cargo.lt/asp/software.asp", + "category": "Business", + "keywords": [ + "cargo.lt", + "messenger", + "cargo messenger", + "cargo.pl", + "cargo.es", + "cargo", + "freight", + "transport" + ], + "locales": [ + "en-US", + "ru", + "lt", + "pl", + "lv", + "es", + "pt", + "ua" + ], + "screenshots": [ + { + "imageUrl": "https://s3.eu-central-1.amazonaws.com/cargo-messenger/login-screen.png", + "caption": "Login screen" + }, + { + "imageUrl": "https://s3.eu-central-1.amazonaws.com/cargo-messenger/main-screen.png", + "caption": "Main app screen" + }, + { + "imageUrl": "https://s3.eu-central-1.amazonaws.com/cargo-messenger/settings-screen.png", + "caption": "Settings screen" + } + ], + "icon": "cargo-messenger-icon.png", + "icon32": "cargo-messenger-icon-32.png", + "icon64": "cargo-messenger-icon-64.png", + "icon128": "cargo-messenger-icon-128.png", + "icon256": "cargo-messenger-icon-256.png", + "date": "2019-01-11", + "iconColors": [ + "#7fcece", + "#fad973", + "#af7a31", + "#2e5e5e", + "#467875" + ], + "goodColorOnWhite": "#2E5E5E", + "goodColorOnBlack": "#FAD973", + "faintColorOnWhite": "rgba(46, 94, 94, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Cargo Messenger", + "app:cargo-messenger" + ] + }, { "objectID": "app-cashnotify", "slug": "cashnotify", @@ -2195,6 +2735,7 @@ "name": "CatLight", "description": "Desktop build status notifications", "website": "https://catlight.io", + "homebrewCaskName": "catlight", "keywords": [ "build" ], @@ -2221,6 +2762,44 @@ "app:catlight" ] }, + { + "objectID": "app-cells", + "slug": "cells", + "name": "Cells", + "description": "An Implementation of Conways Game of Life", + "category": "Games", + "repository": "https://github.com/FlorianFe/Cells", + "keywords": [ + "conway", + "game", + "life", + "cell", + "automata" + ], + "icon": "cells-icon.png", + "icon32": "cells-icon-32.png", + "icon64": "cells-icon-64.png", + "icon128": "cells-icon-128.png", + "icon256": "cells-icon-256.png", + "date": "2018-06-18", + "iconColors": [ + "#245f83", + "#fafbfb", + "#9bc7e1", + "#7c7c7c", + "#838484" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:23.630Z", + "readmeFetchedAt": "2019-02-08T00:07:39.527Z", + "goodColorOnWhite": "#245F83", + "goodColorOnBlack": "#9BC7E1", + "faintColorOnWhite": "rgba(36, 95, 131, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Cells", + "app:cells" + ] + }, { "objectID": "app-cemui", "slug": "cemui", @@ -2250,8 +2829,8 @@ "#bbd7dd", "#62c9dc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.147Z", - "readmeFetchedAt": "2018-05-14T15:02:41.544Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:23.665Z", + "readmeFetchedAt": "2019-02-08T00:07:39.604Z", "goodColorOnWhite": "#037D95", "goodColorOnBlack": "#04ACCC", "faintColorOnWhite": "rgba(3, 125, 149, 0.1)", @@ -2293,8 +2872,8 @@ "#747474", "#7c7c7c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.154Z", - "readmeFetchedAt": "2018-05-14T15:02:41.581Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:23.699Z", + "readmeFetchedAt": "2019-02-08T00:07:39.818Z", "goodColorOnWhite": "#44395A", "goodColorOnBlack": "#986AEB", "faintColorOnWhite": "rgba(68, 57, 90, 0.1)", @@ -2375,8 +2954,8 @@ "#9cacbc", "#8c8c84" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.218Z", - "readmeFetchedAt": "2018-05-14T15:02:41.616Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:23.837Z", + "readmeFetchedAt": "2019-02-08T00:07:39.669Z", "goodColorOnWhite": "#8B730D", "goodColorOnBlack": "#EAC31A", "faintColorOnWhite": "rgba(139, 115, 13, 0.1)", @@ -2426,8 +3005,8 @@ "#c4a1ca", "#bc94cc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.239Z", - "readmeFetchedAt": "2018-05-14T15:02:41.731Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:23.911Z", + "readmeFetchedAt": "2019-02-08T00:07:39.766Z", "goodColorOnWhite": "#90519E", "goodColorOnBlack": "#BC94CC", "faintColorOnWhite": "rgba(144, 81, 158, 0.1)", @@ -2476,8 +3055,8 @@ "#346173", "#638fa3" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.663Z", - "readmeFetchedAt": "2018-05-14T15:02:41.740Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:23.921Z", + "readmeFetchedAt": "2019-02-08T00:07:39.780Z", "goodColorOnWhite": "#346173", "goodColorOnBlack": "#A8F1F7", "faintColorOnWhite": "rgba(52, 97, 115, 0.1)", @@ -2552,8 +3131,8 @@ "#7dc4b4", "#6480b1" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.299Z", - "readmeFetchedAt": "2018-05-14T15:02:41.702Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:23.819Z", + "readmeFetchedAt": "2019-02-08T00:07:39.914Z", "goodColorOnWhite": "#254073", "goodColorOnBlack": "#09ABE7", "faintColorOnWhite": "rgba(37, 64, 115, 0.1)", @@ -2600,6 +3179,64 @@ "app:circuit" ] }, + { + "objectID": "app-citrus", + "slug": "citrus", + "name": "Citrus ", + "description": "Engineered to improve personal productivity, Citrus works to help you focus and get more done.", + "website": "https://www.citrus.app", + "category": "Productivity", + "screenshots": [ + { + "imageUrl": "https://i.imgur.com/1e1KXwD.png", + "caption": "The Citrus App, ready to block your distractions", + "imageLink": "https://www.citrus.app" + }, + { + "imageUrl": "https://i.imgur.com/4aKXjao.png", + "caption": "Customize your Activities in Citrus", + "imageLink": "https://www.citrus.app" + }, + { + "imageUrl": "https://i.imgur.com/Do0caQk.png", + "caption": "Get More Done with Citrus Plus!", + "imageLink": "https://www.citrus.app" + } + ], + "keywords": [ + "citrus", + "productivity", + "website blocking", + "distraction", + "block urls", + "block websites", + "block distractions", + "block facebook", + "block twitter", + "block reddit" + ], + "icon": "citrus-icon.png", + "icon32": "citrus-icon-32.png", + "icon64": "citrus-icon-64.png", + "icon128": "citrus-icon-128.png", + "icon256": "citrus-icon-256.png", + "date": "2018-09-20", + "iconColors": [ + "#fcc937", + "#fbfbfa", + "#fcb407", + "#797979", + "#a4a4a4" + ], + "goodColorOnWhite": "#966A02", + "goodColorOnBlack": "#FCB407", + "faintColorOnWhite": "rgba(150, 106, 2, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Citrus ", + "app:citrus" + ] + }, { "objectID": "app-cleaver", "slug": "cleaver", @@ -2696,6 +3333,143 @@ "app:clipboard-anywhere" ] }, + { + "objectID": "app-clipboard-manager-electron", + "slug": "clipboard-manager-electron", + "name": "clipboard-manager-electron", + "description": "A clipboard manager built with Electron", + "category": "Productivity", + "repository": "https://github.com/dotenorio/clipboard-manager-electron.git", + "keywords": [ + "electron-app", + "javascript", + "clipboard", + "clipboard-manager", + "electron" + ], + "license": "MIT", + "icon": "clipboard-manager-electron-icon.png", + "icon32": "clipboard-manager-electron-icon-32.png", + "icon64": "clipboard-manager-electron-icon-64.png", + "icon128": "clipboard-manager-electron-icon-128.png", + "icon256": "clipboard-manager-electron-icon-256.png", + "date": "2018-10-18", + "iconColors": [ + "#9c90a4", + "#f1edf1", + "#b3acbb", + "#c2bac7", + "#bcb4bc" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:24.029Z", + "readmeFetchedAt": "2019-02-08T00:07:39.931Z", + "goodColorOnWhite": "#816481", + "goodColorOnBlack": "#F1EDF1", + "faintColorOnWhite": "rgba(129, 100, 129, 0.1)", + "keyValuePairs": [ + "is:app", + "app:clipboard-manager-electron", + "app:clipboard-manager-electron" + ] + }, + { + "objectID": "app-clipboardmemo", + "slug": "clipboardmemo", + "name": "clipboardmemo", + "description": "A full cross-platform clipboard manager.", + "website": "https://clipboardmemo.romand.ovh", + "repository": "https://gitlab.com/fabrom/clipboardmemo", + "keywords": [ + "clipboard", + "native", + "osx", + "mac", + "windows", + "linux", + "utilities", + "productivity", + "clipboard manager" + ], + "category": "Utilities", + "locales": [ + "en-US", + "es-ES", + "fr-FR" + ], + "screenshots": [ + { + "imageUrl": "https://clipboardmemo.romand.ovh/img/macbookcb.png" + } + ], + "icon": "clipboardmemo-icon.png", + "icon32": "clipboardmemo-icon-32.png", + "icon64": "clipboardmemo-icon-64.png", + "icon128": "clipboardmemo-icon-128.png", + "icon256": "clipboardmemo-icon-256.png", + "date": "2019-01-10", + "iconColors": [ + "#040404", + "#080404", + "#080404", + "#080404", + "#080404" + ], + "goodColorOnWhite": "#080404", + "goodColorOnBlack": "#FFF", + "faintColorOnWhite": "rgba(8, 4, 4, 0.1)", + "keyValuePairs": [ + "is:app", + "app:clipboardmemo", + "app:clipboardmemo" + ] + }, + { + "objectID": "app-clippo", + "slug": "clippo", + "name": "clippo", + "description": "Clipboard Tool", + "category": "Utilities", + "repository": "https://github.com/monsterkodi/clippo", + "keywords": [ + "clipboard" + ], + "license": "Unlicense", + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/monsterkodi/clippo/master/img/readme.png", + "caption": "windows", + "imageLink": "https://github.com/monsterkodi/clippo" + }, + { + "imageUrl": "https://raw.githubusercontent.com/monsterkodi/clippo/master/img/shot.png", + "caption": "mac", + "imageLink": "https://github.com/monsterkodi/clippo" + } + ], + "icon": "clippo-icon.png", + "icon32": "clippo-icon-32.png", + "icon64": "clippo-icon-64.png", + "icon128": "clippo-icon-128.png", + "icon256": "clippo-icon-256.png", + "date": "2018-07-11", + "iconColors": [ + "#040404", + "#fafafa", + "#848484", + "#7c7c7c", + "#747474" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:23.922Z", + "readmeFetchedAt": "2019-02-08T00:07:39.892Z", + "goodColorOnWhite": "#040404", + "goodColorOnBlack": "#FAFAFA", + "faintColorOnWhite": "rgba(4, 4, 4, 0.1)", + "keyValuePairs": [ + "is:app", + "app:clippo", + "app:clippo" + ] + }, { "objectID": "app-cliptext", "slug": "cliptext", @@ -2728,8 +3502,8 @@ "#a4a4a4", "#848484" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.278Z", - "readmeFetchedAt": "2018-05-14T15:02:41.796Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:23.977Z", + "readmeFetchedAt": "2019-02-08T00:07:40.040Z", "goodColorOnWhite": "#272727", "goodColorOnBlack": "#A3C354", "faintColorOnWhite": "rgba(39, 39, 39, 0.1)", @@ -2792,8 +3566,8 @@ "#94bcfc", "#5c9cfc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.365Z", - "readmeFetchedAt": "2018-05-14T15:02:42.051Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:24.078Z", + "readmeFetchedAt": "2019-02-08T00:07:40.073Z", "goodColorOnWhite": "#0F69FC", "goodColorOnBlack": "#2C7BFC", "faintColorOnWhite": "rgba(15, 105, 252, 0.1)", @@ -2869,8 +3643,8 @@ "#c6c6c6", "#b4b4b5" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.343Z", - "readmeFetchedAt": "2018-05-14T15:02:41.877Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:24.005Z", + "readmeFetchedAt": "2019-02-08T00:07:40.150Z", "goodColorOnWhite": "#6D7579", "goodColorOnBlack": "#899195", "faintColorOnWhite": "rgba(109, 117, 121, 0.1)", @@ -2921,8 +3695,8 @@ "#6b8092", "#8494a4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.435Z", - "readmeFetchedAt": "2018-05-14T15:02:41.863Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:24.190Z", + "readmeFetchedAt": "2019-02-08T00:07:40.177Z", "goodColorOnWhite": "#255469", "goodColorOnBlack": "#DBD4C4", "faintColorOnWhite": "rgba(37, 84, 105, 0.1)", @@ -3001,6 +3775,50 @@ "app:code-story" ] }, + { + "objectID": "app-codepilot-ai", + "slug": "codepilot-ai", + "name": "CodePilot.ai", + "description": "Code search tool for software developers", + "website": "https://codepilot.ai/", + "keywords": [ + "developer tools", + "search", + "code search", + "code", + "documentation", + "developer", + "tool", + "productivity" + ], + "category": "Developer Tools", + "screenshots": [ + { + "imageUrl": "https://codepilot.ai/wp-content/uploads/2018/08/codepilot-movie.mp4" + } + ], + "icon": "codepilot-ai-icon.png", + "icon32": "codepilot-ai-icon-32.png", + "icon64": "codepilot-ai-icon-64.png", + "icon128": "codepilot-ai-icon-128.png", + "icon256": "codepilot-ai-icon-256.png", + "date": "2018-09-12", + "iconColors": [ + "#e9eced", + "#6e6f6f", + "#949494", + "#b1b8bd", + "#999c9c" + ], + "goodColorOnWhite": "#6E6F6F", + "goodColorOnBlack": "#E9ECED", + "faintColorOnWhite": "rgba(110, 111, 111, 0.1)", + "keyValuePairs": [ + "is:app", + "app:CodePilot.ai", + "app:codepilot-ai" + ] + }, { "objectID": "app-colibri", "slug": "colibri", @@ -3106,6 +3924,63 @@ "app:colol" ] }, + { + "objectID": "app-colon", + "slug": "colon", + "name": "Colon", + "description": "A flexible text editor", + "website": "https://chhekur.github.io/colon-ide/", + "repository": "https://github.com/Chhekur/colon-ide", + "keywords": [ + "web development", + "writing", + "editor", + "programming", + "developer tools" + ], + "license": "MIT", + "category": "Developer Tools", + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/Chhekur/colon-ide/master/assets/colon-screenshots/1.png" + }, + { + "imageUrl": "https://raw.githubusercontent.com/Chhekur/colon-ide/master/assets/colon-screenshots/2.png" + }, + { + "imageUrl": "https://raw.githubusercontent.com/Chhekur/colon-ide/master/assets/colon-screenshots/3.png" + }, + { + "imageUrl": "https://raw.githubusercontent.com/Chhekur/colon-ide/master/assets/colon-screenshots/4.png" + }, + { + "imageUrl": "https://raw.githubusercontent.com/Chhekur/colon-ide/master/assets/colon-screenshots/5.png" + } + ], + "icon": "colon-icon.png", + "icon32": "colon-icon-32.png", + "icon64": "colon-icon-64.png", + "icon128": "colon-icon-128.png", + "icon256": "colon-icon-256.png", + "date": "2019-01-10", + "iconColors": [ + "#fb9304", + "#130b04", + "#562e04", + "#814c04", + "#8c4c04" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:24.073Z", + "readmeFetchedAt": "2019-02-08T00:07:40.165Z", + "goodColorOnWhite": "#814C04", + "goodColorOnBlack": "#FB9304", + "faintColorOnWhite": "rgba(129, 76, 4, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Colon", + "app:colon" + ] + }, { "objectID": "app-colorpicker", "slug": "colorpicker", @@ -3158,8 +4033,8 @@ "#74b44c", "#ecbcb4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.439Z", - "readmeFetchedAt": "2018-05-14T15:02:41.895Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:24.168Z", + "readmeFetchedAt": "2019-02-08T00:07:40.312Z", "keyValuePairs": [ "is:app", "app:ColorPicker", @@ -3209,6 +4084,50 @@ "app:composercat" ] }, + { + "objectID": "app-concats", + "slug": "concats", + "name": "concats", + "description": "Output a single-column csv file containing rows of concatenated fields from an input delimiter-separated values file.", + "repository": "https://github.com/brianzelip/concats", + "keywords": [ + "vue", + "vue-cli-plugin-electron-builder", + "csv", + "tooling" + ], + "license": "MIT", + "category": "Utilities", + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/brianzelip/concats/master/screenshot.png", + "caption": "concats is open for business!" + } + ], + "goodColorOnWhite": "#000", + "goodColorOnBlack": "#FFF", + "faintColorOnWhite": "rgba(0, 0, 0, 0.5)", + "icon": "concats-icon.png", + "icon32": "concats-icon-32.png", + "icon64": "concats-icon-64.png", + "icon128": "concats-icon-128.png", + "icon256": "concats-icon-256.png", + "date": "2019-01-27", + "iconColors": [ + "#d1a67b", + "#2f2e2d", + "#a35a2c", + "#93846d", + "#907c74" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:24.133Z", + "readmeFetchedAt": "2019-02-08T00:07:40.258Z", + "keyValuePairs": [ + "is:app", + "app:concats", + "app:concats" + ] + }, { "objectID": "app-container-ps", "slug": "container-ps", @@ -3237,8 +4156,8 @@ "#30909c", "#306cc8" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.476Z", - "readmeFetchedAt": "2018-05-14T15:02:42.299Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:24.133Z", + "readmeFetchedAt": "2019-02-08T00:07:40.374Z", "goodColorOnWhite": "#306CC8", "goodColorOnBlack": "#248CB4", "faintColorOnWhite": "rgba(48, 108, 200, 0.1)", @@ -3282,8 +4201,8 @@ "#f58180", "#df7c72" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.543Z", - "readmeFetchedAt": "2018-05-14T15:02:41.959Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:24.207Z", + "readmeFetchedAt": "2019-02-08T00:07:40.400Z", "goodColorOnWhite": "#E21412", "goodColorOnBlack": "#F58180", "faintColorOnWhite": "rgba(226, 20, 18, 0.1)", @@ -3319,8 +4238,8 @@ "#7c7c7c", "#646464" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.562Z", - "readmeFetchedAt": "2018-05-14T15:02:41.970Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:24.236Z", + "readmeFetchedAt": "2019-02-08T00:07:40.440Z", "goodColorOnWhite": "#060606", "goodColorOnBlack": "#E8E8E8", "faintColorOnWhite": "rgba(6, 6, 6, 0.1)", @@ -3393,8 +4312,8 @@ "#f4bcb4", "#f4b4a6" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.631Z", - "readmeFetchedAt": "2018-05-14T15:02:42.065Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:24.302Z", + "readmeFetchedAt": "2019-02-08T00:07:40.558Z", "goodColorOnWhite": "#D9311B", "goodColorOnBlack": "#EC7464", "faintColorOnWhite": "rgba(217, 49, 27, 0.1)", @@ -3431,8 +4350,8 @@ "#c9dbeb", "#bcbcbc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.635Z", - "readmeFetchedAt": "2018-05-14T15:02:42.101Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:24.325Z", + "readmeFetchedAt": "2019-02-08T00:07:40.535Z", "goodColorOnWhite": "#1170B9", "goodColorOnBlack": "#2C99EC", "faintColorOnWhite": "rgba(17, 112, 185, 0.1)", @@ -3516,8 +4435,8 @@ "#bcdc8c", "#9ccc54" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.641Z", - "readmeFetchedAt": "2018-05-14T15:02:42.183Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:24.325Z", + "readmeFetchedAt": "2019-02-08T00:07:40.552Z", "goodColorOnWhite": "#557C12", "goodColorOnBlack": "#73A819", "faintColorOnWhite": "rgba(85, 124, 18, 0.1)", @@ -3555,8 +4474,8 @@ "#9b5d3c", "#8e543c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.706Z", - "readmeFetchedAt": "2018-05-14T15:02:42.279Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:24.558Z", + "readmeFetchedAt": "2019-02-08T00:07:40.766Z", "goodColorOnWhite": "#9B5D3C", "goodColorOnBlack": "#F28B47", "faintColorOnWhite": "rgba(155, 93, 60, 0.1)", @@ -3595,8 +4514,8 @@ "#beb7fc", "#ccc4fc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.683Z", - "readmeFetchedAt": "2018-05-14T15:02:42.775Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:24.711Z", + "readmeFetchedAt": "2019-02-08T00:07:40.775Z", "goodColorOnWhite": "#5840F8", "goodColorOnBlack": "#B4A9FC", "faintColorOnWhite": "rgba(88, 64, 248, 0.1)", @@ -3606,6 +4525,53 @@ "app:crypto-bot" ] }, + { + "objectID": "app-cryptobar", + "slug": "cryptobar", + "name": "CryptoBar", + "description": "Check variations on your cryptocurrencies and tokens on a discreet float bar", + "website": "http://adlerluiz.com/CryptoBar/", + "category": "Finance", + "repository": "https://github.com/adlerluiz/CryptoBar", + "keywords": [ + "cryptocurrency", + "desktop", + "app", + "electron", + "angular", + "node", + "javascript", + "materializecss" + ], + "screenshots": [ + { + "imageUrl": "https://adlerluiz.com/CryptoBar/src/assets/product/cryptobar.png" + } + ], + "icon": "cryptobar-icon.png", + "icon32": "cryptobar-icon-32.png", + "icon64": "cryptobar-icon-64.png", + "icon128": "cryptobar-icon-128.png", + "icon256": "cryptobar-icon-256.png", + "date": "2018-10-25", + "iconColors": [ + "#f9c12a", + "#cd9c14", + "#fcdb4b", + "#dcac17", + "#fcd43c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:24.417Z", + "readmeFetchedAt": "2019-02-08T00:07:40.660Z", + "goodColorOnWhite": "#8C7202", + "goodColorOnBlack": "#FCDB4B", + "faintColorOnWhite": "rgba(140, 114, 2, 0.1)", + "keyValuePairs": [ + "is:app", + "app:CryptoBar", + "app:cryptobar" + ] + }, { "objectID": "app-cryptocat", "slug": "cryptocat", @@ -3673,8 +4639,8 @@ "#848484", "#7c7c7c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.725Z", - "readmeFetchedAt": "2018-05-14T15:02:42.431Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:24.441Z", + "readmeFetchedAt": "2019-02-08T00:07:40.785Z", "goodColorOnWhite": "#0C0C0C", "goodColorOnBlack": "#F6F6F6", "faintColorOnWhite": "rgba(12, 12, 12, 0.1)", @@ -3684,6 +4650,81 @@ "app:cryptoseed" ] }, + { + "objectID": "app-cryptowallet", + "slug": "cryptowallet", + "name": "cryptoWallet", + "description": "node.js/react based bitcoin wallet.", + "category": "Finance", + "repository": "https://github.com/bhavayAnand9/cryptoWallet", + "keywords": [ + "bitcoin", + "nodejs", + "react", + "wallet" + ], + "icon": "cryptowallet-icon.png", + "icon32": "cryptowallet-icon-32.png", + "icon64": "cryptowallet-icon-64.png", + "icon128": "cryptowallet-icon-128.png", + "icon256": "cryptowallet-icon-256.png", + "date": "2018-10-24", + "iconColors": [ + "#fcfcfc", + "#fffcfc", + "#fffcfc", + "#fffcfc", + "#fffcfc" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:24.484Z", + "readmeFetchedAt": "2019-02-08T00:07:40.868Z", + "goodColorOnWhite": "#D80000", + "goodColorOnBlack": "#FFFCFC", + "faintColorOnWhite": "rgba(216, 0, 0, 0.1)", + "keyValuePairs": [ + "is:app", + "app:cryptoWallet", + "app:cryptowallet" + ] + }, + { + "objectID": "app-csv-to-sqlite", + "slug": "csv-to-sqlite", + "name": "CSV to SQLite", + "description": "Convert CSV files to SQLite databases.", + "website": "https://github.com/isaiahnields/csv-to-sqlite", + "category": "Developer Tools", + "keywords": [ + "sql", + "csv", + "sqlite", + "converter" + ], + "license": "MIT", + "icon": "csv-to-sqlite-icon.png", + "icon32": "csv-to-sqlite-icon-32.png", + "icon64": "csv-to-sqlite-icon-64.png", + "icon128": "csv-to-sqlite-icon-128.png", + "icon256": "csv-to-sqlite-icon-256.png", + "date": "2018-07-31", + "iconColors": [ + "#04fbdb", + "#040606", + "#04937d", + "#047c64", + "#04bc9c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:24.509Z", + "readmeFetchedAt": "2019-02-08T00:07:40.934Z", + "goodColorOnWhite": "#047C64", + "goodColorOnBlack": "#04FBDB", + "faintColorOnWhite": "rgba(4, 124, 100, 0.1)", + "keyValuePairs": [ + "is:app", + "app:CSV to SQLite", + "app:csv-to-sqlite" + ] + }, { "objectID": "app-cuba-studio", "slug": "cuba-studio", @@ -3759,8 +4800,8 @@ "#f5a57e", "#fca48c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.636Z", - "readmeFetchedAt": "2018-05-14T15:02:42.406Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:24.604Z", + "readmeFetchedAt": "2019-02-08T00:07:40.868Z", "goodColorOnWhite": "#CF3004", "goodColorOnBlack": "#FA3D09", "faintColorOnWhite": "rgba(207, 48, 4, 0.1)", @@ -3770,6 +4811,78 @@ "app:cumulus" ] }, + { + "objectID": "app-cycle", + "slug": "cycle", + "name": "Cycle", + "description": "Behavior Focused Continuous Testing for Your Entire Team", + "website": "https://www.cycleautomation.com/", + "category": "Developer Tools", + "keywords": [ + "BDD", + "Behavior Driven Strategies", + "Behavior Focused", + "Behaivor", + "Communication", + "Collaboration", + "Testing", + "Continuous Testing", + "Test Automation", + "Performance Testing", + "Continuous Integration", + "Continuous Delivery", + "DevOps" + ], + "youtube_video_url": "https://www.youtube.com/watch?v=i75C5hIqxJA", + "screenshots": [ + { + "imageUrl": "https://www.cycleautomation.com/wp-content/uploads/webstepsfeature.png", + "caption": "In-browser testing", + "imageLink": "https://www.cycleautomation.com/features/" + }, + { + "imageUrl": "https://www.cycleautomation.com/wp-content/uploads/playlist.png", + "caption": "Serialized Testing Playlists", + "imageLink": "https://www.cycleautomation.com/features/" + }, + { + "imageUrl": "https://www.cycleautomation.com/wp-content/uploads/grouptest.png", + "caption": "Visual Parallel Testing", + "imageLink": "https://www.cycleautomation.com/features/" + }, + { + "imageUrl": "https://www.cycleautomation.com/wp-content/uploads/dataextractwithblur.png", + "caption": "In-line Data Management", + "imageLink": "https://www.cycleautomation.com/features/" + }, + { + "imageUrl": "https://www.cycleautomation.com/wp-content/uploads/2018-08-13_15-00-38.png", + "caption": "Inspector Panel for Step documentation, Execution Settings, and Real-time Test Output", + "imageLink": "https://www.cycleautomation.com/features/" + } + ], + "icon": "cycle-icon.png", + "icon32": "cycle-icon-32.png", + "icon64": "cycle-icon-64.png", + "icon128": "cycle-icon-128.png", + "icon256": "cycle-icon-256.png", + "date": "2018-08-24", + "iconColors": [ + "#a4bcdc", + "#24547c", + "#3c7cbc", + "#3e84ca", + "#b0c4ea" + ], + "goodColorOnWhite": "#24547C", + "goodColorOnBlack": "#B0C4EA", + "faintColorOnWhite": "rgba(36, 84, 124, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Cycle", + "app:cycle" + ] + }, { "objectID": "app-cycligent-git-tool", "slug": "cycligent-git-tool", @@ -3835,8 +4948,8 @@ "#a4a4a4", "#949494" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.722Z", - "readmeFetchedAt": "2018-05-14T15:02:42.381Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:24.628Z", + "readmeFetchedAt": "2019-02-08T00:07:41.002Z", "goodColorOnWhite": "#3A3A3A", "goodColorOnBlack": "#9A9C9A", "faintColorOnWhite": "rgba(58, 58, 58, 0.1)", @@ -3846,6 +4959,112 @@ "app:cypress" ] }, + { + "objectID": "app-d-tools", + "slug": "d-tools", + "name": "d-tools", + "description": "A toolbox for developers. Formatter, Base64, Regex test, Host manager and so on.", + "repository": "https://github.com/geminate/d-tools", + "keywords": [ + "developer tools", + "web development", + "format", + "cryption", + "tools" + ], + "license": "MIT", + "category": "Developer Tools", + "locales": [ + "en", + "zh-CN" + ], + "icon": "d-tools-icon.png", + "icon32": "d-tools-icon-32.png", + "icon64": "d-tools-icon-64.png", + "icon128": "d-tools-icon-128.png", + "icon256": "d-tools-icon-256.png", + "date": "2018-08-28", + "iconColors": [ + "#4193df", + "#f8f9fa", + "#89aed3", + "#2e649b", + "#9cccf4" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:24.667Z", + "readmeFetchedAt": "2019-02-08T00:07:40.977Z", + "goodColorOnWhite": "#2E649B", + "goodColorOnBlack": "#9CCCF4", + "faintColorOnWhite": "rgba(46, 100, 155, 0.1)", + "keyValuePairs": [ + "is:app", + "app:d-tools", + "app:d-tools" + ] + }, + { + "objectID": "app-darkj", + "slug": "darkj", + "name": "DarkJ", + "description": "A fluid, dark themed native desktop UI for JIRA.", + "website": "https://github.com/Yamazaki93/DarkJ-Release", + "category": "Productivity", + "keywords": [ + "jira", + "angular", + "dark-theme" + ], + "screenshots": [ + { + "imageUrl": "https://github.com/Yamazaki93/DarkJ-Release/raw/master/darkj-1.PNG", + "caption": "Dark themed JIRA UI", + "imageLink": "https://github.com/Yamazaki93/DarkJ-Release" + }, + { + "imageUrl": "https://github.com/Yamazaki93/DarkJ-Release/raw/master/darkj-2.PNG", + "caption": "Collapsed side bar for more viewing space for big issues", + "imageLink": "https://github.com/Yamazaki93/DarkJ-Release" + }, + { + "imageUrl": "https://github.com/Yamazaki93/DarkJ-Release/raw/master/darkj-3.PNG", + "caption": "Simple issue creation window", + "imageLink": "https://github.com/Yamazaki93/DarkJ-Release" + }, + { + "imageUrl": "https://github.com/Yamazaki93/DarkJ-Release/raw/master/darkj-4.PNG", + "caption": "Text based search page", + "imageLink": "https://github.com/Yamazaki93/DarkJ-Release" + }, + { + "imageUrl": "https://github.com/Yamazaki93/DarkJ-Release/raw/master/darkj-5.PNG", + "caption": "Quick filter issue list", + "imageLink": "https://github.com/Yamazaki93/DarkJ-Release" + } + ], + "icon": "darkj-icon.png", + "icon32": "darkj-icon-32.png", + "icon64": "darkj-icon-64.png", + "icon128": "darkj-icon-128.png", + "icon256": "darkj-icon-256.png", + "date": "2018-10-08", + "iconColors": [ + "#f2f3f3", + "#222a37", + "#747c84", + "#74747c", + "#5c646c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:24.712Z", + "readmeFetchedAt": "2019-02-08T00:07:41.051Z", + "goodColorOnWhite": "#222A37", + "goodColorOnBlack": "#747C84", + "faintColorOnWhite": "rgba(34, 42, 55, 0.1)", + "keyValuePairs": [ + "is:app", + "app:DarkJ", + "app:darkj" + ] + }, { "objectID": "app-dat", "slug": "dat", @@ -3884,8 +5103,8 @@ "#7ab880", "#82c48a" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.864Z", - "readmeFetchedAt": "2018-05-14T15:02:42.575Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:24.826Z", + "readmeFetchedAt": "2019-02-08T00:07:41.206Z", "goodColorOnWhite": "#168624", "goodColorOnBlack": "#189528", "faintColorOnWhite": "rgba(22, 134, 36, 0.1)", @@ -3928,8 +5147,8 @@ "#6f0497", "#56043c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.798Z", - "readmeFetchedAt": "2018-05-14T15:02:42.519Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:24.877Z", + "readmeFetchedAt": "2019-02-08T00:07:41.192Z", "goodColorOnWhite": "#C704A0", "goodColorOnBlack": "#E5CCEB", "faintColorOnWhite": "rgba(199, 4, 160, 0.1)", @@ -3939,6 +5158,58 @@ "app:data-pixels-playground" ] }, + { + "objectID": "app-data-store", + "slug": "data-store", + "name": "Data Store", + "description": "Visual develop tool of creating mocked Json", + "repository": "https://github.com/TianlunXiong/DataStore", + "keywords": [ + "data", + "json", + "mock", + "web development" + ], + "license": "MIT", + "category": "Developer Tools", + "screenshots": [ + { + "imageUrl": "https://github.com/TianlunXiong/DataStore/blob/master/static/p1.JPG?raw=true", + "caption": "Home page to set the Server Ports" + }, + { + "imageUrl": "https://github.com/TianlunXiong/DataStore/blob/master/static/p2.JPG?raw=true", + "caption": "key-value factory" + }, + { + "imageUrl": "https://github.com/TianlunXiong/DataStore/blob/master/static/p3.JPG?raw=true", + "caption": "json-object management" + } + ], + "icon": "data-store-icon.png", + "icon32": "data-store-icon-32.png", + "icon64": "data-store-icon-64.png", + "icon128": "data-store-icon-128.png", + "icon256": "data-store-icon-256.png", + "date": "2018-08-29", + "iconColors": [ + "#e2f3f3", + "#04bca4", + "#6bd9c9", + "#39ccbc", + "#91e0d8" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:24.846Z", + "readmeFetchedAt": "2019-02-08T00:07:41.214Z", + "goodColorOnWhite": "#037E6E", + "goodColorOnBlack": "#04BCA4", + "faintColorOnWhite": "rgba(3, 126, 110, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Data Store", + "app:data-store" + ] + }, { "objectID": "app-dataproofer", "slug": "dataproofer", @@ -4041,8 +5312,8 @@ "#ff383c", "#5c383c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.829Z", - "readmeFetchedAt": "2018-05-14T15:02:42.505Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:24.866Z", + "readmeFetchedAt": "2019-02-08T00:07:41.338Z", "goodColorOnWhite": "#5C383C", "goodColorOnBlack": "#FF383C", "faintColorOnWhite": "rgba(92, 56, 60, 0.1)", @@ -4118,8 +5389,8 @@ "#88909c", "#9ca4ac" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.855Z", - "readmeFetchedAt": "2018-05-14T15:02:42.603Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:24.926Z", + "readmeFetchedAt": "2019-02-08T00:07:41.346Z", "goodColorOnWhite": "#2C3C53", "goodColorOnBlack": "#88909C", "faintColorOnWhite": "rgba(44, 60, 83, 0.1)", @@ -4194,8 +5465,8 @@ "#62cbfc", "#20d8fc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.902Z", - "readmeFetchedAt": "2018-05-14T15:02:42.694Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:24.974Z", + "readmeFetchedAt": "2019-02-08T00:07:41.325Z", "goodColorOnWhite": "#027CB5", "goodColorOnBlack": "#04ACFC", "faintColorOnWhite": "rgba(2, 124, 181, 0.1)", @@ -4234,6 +5505,43 @@ "app:deepnest" ] }, + { + "objectID": "app-deer", + "slug": "deer", + "name": "Deer", + "description": "A modern, fast, beautiful note taking app", + "category": "Productivity", + "repository": "https://github.com/abahmed/Deer", + "keywords": [ + "note-taking", + "note-app", + "notes" + ], + "license": "MIT", + "icon": "deer-icon.png", + "icon32": "deer-icon-32.png", + "icon64": "deer-icon-64.png", + "icon128": "deer-icon-128.png", + "icon256": "deer-icon-256.png", + "date": "2018-10-09", + "iconColors": [ + "#f2f5f4", + "#24b070", + "#72c9a1", + "#8cd2b4", + "#9ec6b4" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:24.965Z", + "readmeFetchedAt": "2019-02-08T00:07:41.491Z", + "goodColorOnWhite": "#1B8252", + "goodColorOnBlack": "#24B070", + "faintColorOnWhite": "rgba(27, 130, 82, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Deer", + "app:deer" + ] + }, { "objectID": "app-demio", "slug": "demio", @@ -4339,8 +5647,8 @@ "#241c5c", "#8979e9" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.009Z", - "readmeFetchedAt": "2018-05-14T15:02:42.705Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.095Z", + "readmeFetchedAt": "2019-02-08T00:07:41.555Z", "goodColorOnWhite": "#241C5C", "goodColorOnBlack": "#8979E9", "faintColorOnWhite": "rgba(36, 28, 92, 0.1)", @@ -4379,8 +5687,8 @@ "#8e7d30", "#766404" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.008Z", - "readmeFetchedAt": "2018-05-14T15:02:42.784Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.109Z", + "readmeFetchedAt": "2019-02-08T00:07:41.640Z", "goodColorOnWhite": "#766404", "goodColorOnBlack": "#EDCB1C", "faintColorOnWhite": "rgba(118, 100, 4, 0.1)", @@ -4421,8 +5729,8 @@ "#ec8664", "#f48c64" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:29.953Z", - "readmeFetchedAt": "2018-05-14T15:02:42.744Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.040Z", + "readmeFetchedAt": "2019-02-08T00:07:41.429Z", "goodColorOnWhite": "#C94E05", "goodColorOnBlack": "#FB9C64", "faintColorOnWhite": "rgba(201, 78, 5, 0.1)", @@ -4445,16 +5753,16 @@ "category": "Developer Tools", "screenshots": [ { - "imageUrl": "https://raw.githubusercontent.com/tahnik/devRantron/master/app/screenshots/custom.png" + "imageUrl": "https://raw.githubusercontent.com/tahnik/devRantron/96448bbb598e0d238636e3b5a6a29683dff102a5/app/screenshots/custom.png" }, { - "imageUrl": "https://raw.githubusercontent.com/tahnik/devRantron/master/app/screenshots/profile.png" + "imageUrl": "https://raw.githubusercontent.com/tahnik/devRantron/96448bbb598e0d238636e3b5a6a29683dff102a5/app/screenshots/profile.png" }, { - "imageUrl": "https://raw.githubusercontent.com/tahnik/devRantron/master/app/screenshots/notif.png" + "imageUrl": "https://raw.githubusercontent.com/tahnik/devRantron/96448bbb598e0d238636e3b5a6a29683dff102a5/app/screenshots/notif.png" }, { - "imageUrl": "https://raw.githubusercontent.com/tahnik/devRantron/master/app/screenshots/view.png" + "imageUrl": "https://raw.githubusercontent.com/tahnik/devRantron/96448bbb598e0d238636e3b5a6a29683dff102a5/app/screenshots/view.png" } ], "icon": "devrantron-icon.png", @@ -4470,8 +5778,8 @@ "#e87864", "#fcac84" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.021Z", - "readmeFetchedAt": "2018-05-14T15:02:42.815Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.095Z", + "readmeFetchedAt": "2019-02-08T00:07:41.586Z", "goodColorOnWhite": "#C54505", "goodColorOnBlack": "#FCAC84", "faintColorOnWhite": "rgba(197, 69, 5, 0.1)", @@ -4493,10 +5801,10 @@ ], "license": "MIT", "category": "Utilities", - "repository": "https://github.com/vutran/dext", + "repository": "https://github.com/DextApp/dext", "screenshots": [ { - "imageUrl": "https://github.com/vutran/dext/raw/develop/screenshot.gif" + "imageUrl": "https://github.com/DextApp/dext/raw/6c5207252ddc2faeaca9688b8e9023d9bfd14055/screenshot.gif" } ], "icon": "dext-icon.png", @@ -4512,8 +5820,8 @@ "#164c7b", "#246498" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.145Z", - "readmeFetchedAt": "2018-05-14T15:02:42.966Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.193Z", + "readmeFetchedAt": "2019-02-08T00:07:41.760Z", "goodColorOnWhite": "#126C82", "goodColorOnBlack": "#06AAD3", "faintColorOnWhite": "rgba(18, 108, 130, 0.1)", @@ -4558,8 +5866,8 @@ "#747474", "#5c5c5c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.084Z", - "readmeFetchedAt": "2018-05-14T15:02:42.851Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.234Z", + "readmeFetchedAt": "2019-02-08T00:07:41.690Z", "goodColorOnWhite": "#2A2A2A", "goodColorOnBlack": "#BCBCBC", "faintColorOnWhite": "rgba(42, 42, 42, 0.1)", @@ -4582,6 +5890,8 @@ "s3", "distributed", "dropbox", + "google", + "azure", "remotestorage" ], "screenshots": [ @@ -4597,17 +5907,17 @@ "icon256": "diffuse-icon-256.png", "date": "2018-03-23", "iconColors": [ - "#fbfbfb", - "#231c23", - "#7f7c7c", - "#747474", - "#858484" + "#8c91a9", + "#f6dee0", + "#775366", + "#5a6b84", + "#c4ccd4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.073Z", - "readmeFetchedAt": "2018-05-14T15:02:42.860Z", - "goodColorOnWhite": "#231C23", - "goodColorOnBlack": "#7F7C7C", - "faintColorOnWhite": "rgba(35, 28, 35, 0.1)", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.192Z", + "readmeFetchedAt": "2019-02-08T00:07:41.738Z", + "goodColorOnWhite": "#5A6B84", + "goodColorOnBlack": "#F6DEE0", + "faintColorOnWhite": "rgba(90, 107, 132, 0.1)", "keyValuePairs": [ "is:app", "app:Diffuse", @@ -4681,8 +5991,8 @@ "#61bcb4", "#b8dfdd" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.124Z", - "readmeFetchedAt": "2018-05-14T15:02:42.919Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.192Z", + "readmeFetchedAt": "2019-02-08T00:07:41.722Z", "goodColorOnWhite": "#317D77", "goodColorOnBlack": "#44ACA4", "faintColorOnWhite": "rgba(49, 125, 119, 0.1)", @@ -4724,6 +6034,86 @@ "app:discord" ] }, + { + "objectID": "app-dixa", + "slug": "dixa", + "name": "Dixa", + "description": "Customer Service Software", + "website": "https://dixa.com", + "repository": "https://github.com/dixahq/dixa-desktop-app-release", + "keywords": [ + "customer service", + "phone", + "email", + "chat", + "call center", + "contact center", + "help desk", + "support" + ], + "category": "Business", + "icon": "dixa-icon.png", + "icon32": "dixa-icon-32.png", + "icon64": "dixa-icon-64.png", + "icon128": "dixa-icon-128.png", + "icon256": "dixa-icon-256.png", + "date": "2018-07-30", + "iconColors": [ + "#2c2d74", + "#fafafb", + "#6bbdea", + "#8092f1", + "#9c9cbc" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:25.270Z", + "readmeFetchedAt": "2019-02-08T00:07:41.802Z", + "goodColorOnWhite": "#2C2D74", + "goodColorOnBlack": "#8092F1", + "faintColorOnWhite": "rgba(44, 45, 116, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Dixa", + "app:dixa" + ] + }, + { + "objectID": "app-dn-tool-container", + "slug": "dn-tool-container", + "name": "Dn Tool Container", + "description": "Extendable application which can install multiple packages with one click.", + "category": "Developer Tools", + "repository": "https://github.com/como65416/DnToolContainer", + "keywords": [ + "extendable", + "format", + "editor", + "encryption" + ], + "license": "MIT", + "icon": "dn-tool-container-icon.png", + "icon32": "dn-tool-container-icon-32.png", + "icon64": "dn-tool-container-icon-64.png", + "icon128": "dn-tool-container-icon-128.png", + "icon256": "dn-tool-container-icon-256.png", + "date": "2018-10-22", + "iconColors": [ + "#4cb4f1", + "#e3e9b9", + "#87bcf5", + "#58ebef", + "#a0bea9" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:25.286Z", + "readmeFetchedAt": "2019-02-08T00:07:41.901Z", + "goodColorOnWhite": "#0D70AA", + "goodColorOnBlack": "#4CB4F1", + "faintColorOnWhite": "rgba(13, 112, 170, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Dn Tool Container", + "app:dn-tool-container" + ] + }, { "objectID": "app-dockstation", "slug": "dockstation", @@ -4759,6 +6149,38 @@ "app:dockstation" ] }, + { + "objectID": "app-doki-doki-mod-manager", + "slug": "doki-doki-mod-manager", + "name": "Doki Doki Mod Manager", + "description": "Organise, download and play mods for Doki Doki Literature Club!", + "website": "https://doki.space", + "repository": "https://github.com/DokiDokiModManager/Mod-Manager", + "category": "Games", + "icon": "doki-doki-mod-manager-icon.png", + "icon32": "doki-doki-mod-manager-icon-32.png", + "icon64": "doki-doki-mod-manager-icon-64.png", + "icon128": "doki-doki-mod-manager-icon-128.png", + "icon256": "doki-doki-mod-manager-icon-256.png", + "date": "2018-07-27", + "iconColors": [ + "#ebcae8", + "#5fa3b8", + "#f08085", + "#ad3965", + "#876167" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:25.293Z", + "readmeFetchedAt": "2019-02-08T00:07:41.870Z", + "goodColorOnWhite": "#AD3965", + "goodColorOnBlack": "#F08085", + "faintColorOnWhite": "rgba(173, 57, 101, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Doki Doki Mod Manager", + "app:doki-doki-mod-manager" + ] + }, { "objectID": "app-domterm", "slug": "domterm", @@ -4792,8 +6214,8 @@ "#8b8e8c", "#747674" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.198Z", - "readmeFetchedAt": "2018-05-14T15:02:42.932Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.301Z", + "readmeFetchedAt": "2019-02-08T00:07:41.846Z", "goodColorOnWhite": "#6C746C", "goodColorOnBlack": "#E3EBE3", "faintColorOnWhite": "rgba(108, 116, 108, 0.1)", @@ -4837,8 +6259,8 @@ "#363435", "#7c6434" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.197Z", - "readmeFetchedAt": "2018-05-14T15:02:42.943Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.353Z", + "readmeFetchedAt": "2019-02-08T00:07:41.949Z", "goodColorOnWhite": "#7C6434", "goodColorOnBlack": "#F3B33B", "faintColorOnWhite": "rgba(124, 100, 52, 0.1)", @@ -4888,6 +6310,55 @@ "app:dotgrid" ] }, + { + "objectID": "app-downline", + "slug": "downline", + "name": "Downline", + "description": "Cross-platform media downloader for YouTube and many other sites.", + "website": "https://jarbun.github.io/downline/", + "category": "Utilities", + "repository": "https://github.com/jarbun/downline", + "keywords": [ + "downline", + "download", + "offline", + "windows", + "macos", + "linux", + "video", + "audio", + "media" + ], + "license": "MIT", + "screenshots": [ + { + "imageUrl": "https://user-images.githubusercontent.com/23068820/50515866-42650180-0acd-11e9-9e8f-02b0292929a5.png" + } + ], + "icon": "downline-icon.png", + "icon32": "downline-icon-32.png", + "icon64": "downline-icon-64.png", + "icon128": "downline-icon-128.png", + "icon256": "downline-icon-256.png", + "date": "2019-01-10", + "iconColors": [ + "#2c7cfc", + "#f9fafc", + "#94bcfc", + "#80aefc", + "#9cbcfc" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:25.898Z", + "readmeFetchedAt": "2019-02-08T00:07:41.977Z", + "goodColorOnWhite": "#0F6AFC", + "goodColorOnBlack": "#2C7CFC", + "faintColorOnWhite": "rgba(15, 106, 252, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Downline", + "app:downline" + ] + }, { "objectID": "app-dupfinder", "slug": "dupfinder", @@ -4917,6 +6388,110 @@ "app:dupfinder" ] }, + { + "objectID": "app-dusk-player", + "slug": "dusk-player", + "name": "Dusk Player", + "description": "Minimal music player for your desktop.", + "website": "https://aveek-saha.github.io/", + "repository": "https://github.com/Aveek-Saha/MusicPlayer", + "category": "Music", + "keywords": [ + "music", + "audio", + "mp3" + ], + "screenshots": [ + { + "imageUrl": "https://aveeksaha.gitlab.io/DuskPlayer/Screenshot1.png", + "caption": "Screenshot", + "imageLink": "https://aveek-saha.github.io/releases" + }, + { + "imageUrl": "https://aveeksaha.gitlab.io/DuskPlayer/Screenshot2.png", + "caption": "Playlist", + "imageLink": "https://aveek-saha.github.io/releases" + } + ], + "icon": "dusk-player-icon.png", + "icon32": "dusk-player-icon-32.png", + "icon64": "dusk-player-icon-64.png", + "icon128": "dusk-player-icon-128.png", + "icon256": "dusk-player-icon-256.png", + "date": "2018-11-01", + "iconColors": [ + "#17181b", + "#d54353", + "#cad2da", + "#606468", + "#6c6c74" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:25.399Z", + "readmeFetchedAt": "2019-02-08T00:07:41.990Z", + "goodColorOnWhite": "#17181B", + "goodColorOnBlack": "#D54353", + "faintColorOnWhite": "rgba(23, 24, 27, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Dusk Player", + "app:dusk-player" + ] + }, + { + "objectID": "app-e-mage", + "slug": "e-mage", + "name": "E-Mage", + "description": "Cross-platform tool for lossless image compression.", + "category": "Developer Tools", + "repository": "https://github.com/douglasjunior/emage", + "keywords": [ + "image-optimization", + "electron", + "developer-tools", + "pngcrush", + "advpng", + "pngout", + "imagemin", + "optipng", + "zopfli", + "jpegoptim", + "jpegtran", + "mozjpeg", + "svgo", + "giflossy", + "gifsicle" + ], + "license": "MIT", + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/douglasjunior/emage/master/screenshot/screen.png", + "caption": "Home Screen" + } + ], + "icon": "e-mage-icon.png", + "icon32": "e-mage-icon-32.png", + "icon64": "e-mage-icon-64.png", + "icon128": "e-mage-icon-128.png", + "icon256": "e-mage-icon-256.png", + "date": "2018-09-12", + "iconColors": [ + "#9b8ed3", + "#f9c10e", + "#70496d", + "#ad8120", + "#936c2d" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:25.416Z", + "readmeFetchedAt": "2019-02-08T00:07:41.997Z", + "goodColorOnWhite": "#936C2D", + "goodColorOnBlack": "#F9C10E", + "faintColorOnWhite": "rgba(147, 108, 45, 0.1)", + "keyValuePairs": [ + "is:app", + "app:E-Mage", + "app:e-mage" + ] + }, { "objectID": "app-e-tools", "slug": "e-tools", @@ -4944,8 +6519,8 @@ "#237cc8", "#1f83b0" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.222Z", - "readmeFetchedAt": "2018-05-14T15:02:42.980Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.473Z", + "readmeFetchedAt": "2019-02-08T00:07:42.052Z", "goodColorOnWhite": "#1C73BB", "goodColorOnBlack": "#23ACE4", "faintColorOnWhite": "rgba(28, 115, 187, 0.1)", @@ -4993,6 +6568,55 @@ "app:eagle" ] }, + { + "objectID": "app-easyhand", + "slug": "easyhand", + "name": "EasyHand", + "description": "Helpful tool of making easier to work with huge quantity of files, folders and IDEsin the same time.", + "website": "https://easyhand.org", + "category": "Developer Tools", + "keywords": [ + "files", + "folders", + "search", + "easy", + "fast", + "ide" + ], + "screenshots": [ + { + "imageUrl": "https://easyhand.org/images/easyHand-view.png", + "caption": "Files tab screenshot", + "imageLink": "https://easyhand.org/features" + }, + { + "imageUrl": "https://easyhand.org/images/screenshots/folder-edit.png", + "caption": "Edit folder Icons screenshot", + "imageLink": "https://easyhand.org/features" + } + ], + "icon": "easyhand-icon.png", + "icon32": "easyhand-icon-32.png", + "icon64": "easyhand-icon-64.png", + "icon128": "easyhand-icon-128.png", + "icon256": "easyhand-icon-256.png", + "date": "2018-10-29", + "iconColors": [ + "#daa95a", + "#045e6c", + "#ec256c", + "#8c6535", + "#eae8e9" + ], + "goodColorOnWhite": "#045E6C", + "goodColorOnBlack": "#EC256C", + "faintColorOnWhite": "rgba(4, 94, 108, 0.1)", + "keyValuePairs": [ + "is:app", + "app:EasyHand", + "app:easyhand" + ] + }, { "objectID": "app-easytongue", "slug": "easytongue", @@ -5022,8 +6646,8 @@ "#fce2a8", "#fccc8c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.283Z", - "readmeFetchedAt": "2018-05-14T15:02:43.084Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.479Z", + "readmeFetchedAt": "2019-02-08T00:07:42.139Z", "goodColorOnWhite": "#955F02", "goodColorOnBlack": "#FCB845", "faintColorOnWhite": "rgba(149, 95, 2, 0.1)", @@ -5096,8 +6720,8 @@ "#e34c3c", "#c47d7c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.324Z", - "readmeFetchedAt": "2018-05-14T15:02:43.069Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.522Z", + "readmeFetchedAt": "2019-02-08T00:07:42.077Z", "goodColorOnWhite": "#304558", "goodColorOnBlack": "#E34C3C", "faintColorOnWhite": "rgba(48, 69, 88, 0.1)", @@ -5112,6 +6736,7 @@ "slug": "electorrent", "name": "Electorrent", "description": "An Electron remote client app for uTorrent server", + "homebrewCaskName": "electorrent", "repository": "https://github.com/Tympanix/Electorrent", "keywords": [ "utorrent", @@ -5139,8 +6764,8 @@ "#56a038", "#4c9c34" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.321Z", - "readmeFetchedAt": "2018-05-14T15:02:43.092Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.557Z", + "readmeFetchedAt": "2019-02-08T00:07:42.113Z", "goodColorOnWhite": "#1C5414", "goodColorOnBlack": "#70C349", "faintColorOnWhite": "rgba(28, 84, 20, 0.1)", @@ -5212,8 +6837,8 @@ "#c4c4c4", "#b0b0b0" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.383Z", - "readmeFetchedAt": "2018-05-14T15:02:43.076Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.556Z", + "readmeFetchedAt": "2019-02-08T00:07:42.199Z", "goodColorOnWhite": "#0B71C9", "goodColorOnBlack": "#2D98F4", "faintColorOnWhite": "rgba(11, 113, 201, 0.1)", @@ -5255,8 +6880,8 @@ "#7e9acb", "#99aac9" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.437Z", - "readmeFetchedAt": "2018-05-14T15:02:43.203Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.603Z", + "readmeFetchedAt": "2019-02-08T00:07:42.187Z", "goodColorOnWhite": "#483B49", "goodColorOnBlack": "#FA9C4E", "faintColorOnWhite": "rgba(72, 59, 73, 0.1)", @@ -5266,6 +6891,52 @@ "app:elite-journal" ] }, + { + "objectID": "app-email-securely-app", + "slug": "email-securely-app", + "name": "email-securely-app", + "description": "Unofficial desktop client for ProtonMail and Tutanota end-to-end encrypted email providers", + "website": "https://github.com/vladimiry/email-securely-app", + "license": "MIT", + "category": "Productivity", + "keywords": [ + "office", + "email", + "encryption", + "notification", + "tutanota", + "protonmail", + "typescript" + ], + "screenshots": [ + { + "imageUrl": "https://user-images.githubusercontent.com/1560781/43053165-d2e46be0-8e33-11e8-8b93-07d22d5f1677.gif" + } + ], + "icon": "email-securely-app-icon.png", + "icon32": "email-securely-app-icon-32.png", + "icon64": "email-securely-app-icon-64.png", + "icon128": "email-securely-app-icon-128.png", + "icon256": "email-securely-app-icon-256.png", + "date": "2018-08-02", + "iconColors": [ + "#1ca48c", + "#c8eae4", + "#62bfab", + "#84ccbc", + "#4cbca4" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:25.642Z", + "readmeFetchedAt": "2019-02-08T00:07:42.243Z", + "goodColorOnWhite": "#178572", + "goodColorOnBlack": "#1CA48C", + "faintColorOnWhite": "rgba(23, 133, 114, 0.1)", + "keyValuePairs": [ + "is:app", + "app:email-securely-app", + "app:email-securely-app" + ] + }, { "objectID": "app-englishextra-app", "slug": "englishextra-app", @@ -5287,8 +6958,8 @@ "#eca4a4", "#dc7474" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.412Z", - "readmeFetchedAt": "2018-05-14T15:02:43.165Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.677Z", + "readmeFetchedAt": "2019-02-08T00:07:42.324Z", "goodColorOnWhite": "#D43232", "goodColorOnBlack": "#ECA4A4", "faintColorOnWhite": "rgba(212, 50, 50, 0.1)", @@ -5329,8 +7000,8 @@ "#346c4c", "#548c34" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.436Z", - "readmeFetchedAt": "2018-05-14T15:02:43.189Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.662Z", + "readmeFetchedAt": "2019-02-08T00:07:42.341Z", "goodColorOnWhite": "#3D6932", "goodColorOnBlack": "#6FD661", "faintColorOnWhite": "rgba(61, 105, 50, 0.1)", @@ -5340,6 +7011,49 @@ "app:epictask" ] }, + { + "objectID": "app-esteem-surfer", + "slug": "esteem-surfer", + "name": "eSteem Surfer", + "description": "eSteem desktop application reimagined for Windows, Mac, Linux users, start earning cryptocurrency!", + "website": "https://esteem.app", + "repository": "https://github.com/eSteemApp/esteem-surfer", + "keywords": [ + "steem", + "cryptocurrency", + "blockchain" + ], + "license": "MIT", + "category": "Finance", + "screenshots": [ + { + "imageUrl": "https://camo.githubusercontent.com/595741d101b0e267c1f46967ae7a6406d8c9f8be/68747470733a2f2f737465656d6974696d616765732e636f6d2f44516d64765635477268394c4a69526b313162435454483178437170377177474b635155424a584a56526453624e732f6769745f70726f66696c655f707265766965772e706e67" + } + ], + "icon": "esteem-surfer-icon.png", + "icon32": "esteem-surfer-icon-32.png", + "icon64": "esteem-surfer-icon-64.png", + "icon128": "esteem-surfer-icon-128.png", + "icon256": "esteem-surfer-icon-256.png", + "date": "2018-07-11", + "iconColors": [ + "#fbfbfb", + "#1d549c", + "#63bbfc", + "#92b6da", + "#7c94c4" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:25.729Z", + "readmeFetchedAt": "2019-02-08T00:07:42.520Z", + "goodColorOnWhite": "#1D549C", + "goodColorOnBlack": "#63BBFC", + "faintColorOnWhite": "rgba(29, 84, 156, 0.1)", + "keyValuePairs": [ + "is:app", + "app:eSteem Surfer", + "app:esteem-surfer" + ] + }, { "objectID": "app-etcher", "slug": "etcher", @@ -5372,8 +7086,8 @@ "#856c30", "#9c8c54" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.507Z", - "readmeFetchedAt": "2018-05-14T15:02:43.185Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.838Z", + "readmeFetchedAt": "2019-02-08T00:07:42.445Z", "goodColorOnWhite": "#041332", "goodColorOnBlack": "#E1AF15", "faintColorOnWhite": "rgba(4, 19, 50, 0.1)", @@ -5425,6 +7139,82 @@ "app:everdo" ] }, + { + "objectID": "app-evetrade", + "slug": "evetrade", + "name": "EVE Trade", + "description": "The EVE Online trading tool that lets you discover what to trade between stations and regions. This tool enables making ISK through hauling or station trading.", + "website": "https://evetrade.space", + "keywords": [ + "eve_online", + "video_games" + ], + "category": "Games", + "icon": "evetrade-icon.png", + "icon32": "evetrade-icon-32.png", + "icon64": "evetrade-icon-64.png", + "icon128": "evetrade-icon-128.png", + "icon256": "evetrade-icon-256.png", + "date": "2018-08-10", + "iconColors": [ + "#070c11", + "#eceff1", + "#2c5b8c", + "#585858", + "#7c7c7c" + ], + "goodColorOnWhite": "#2C5B8C", + "goodColorOnBlack": "#ECEFF1", + "faintColorOnWhite": "rgba(44, 91, 140, 0.1)", + "keyValuePairs": [ + "is:app", + "app:EVE Trade", + "app:evetrade" + ] + }, + { + "objectID": "app-excel-parser-processor", + "slug": "excel-parser-processor", + "name": "Excel Parser Processor", + "description": "A Cross-Platform Desktop App for processing all rows of excel files", + "category": "Productivity", + "repository": "https://github.com/btargac/excel-parser-processor", + "keywords": [ + "download images from excel", + "batch image download", + "batch download from excel", + "excel processor", + "excel parser processor", + "read excel", + "process excel file", + "download to local folder from excel file", + "electron app for downloading images" + ], + "license": "MIT", + "icon": "excel-parser-processor-icon.png", + "icon32": "excel-parser-processor-icon-32.png", + "icon64": "excel-parser-processor-icon-64.png", + "icon128": "excel-parser-processor-icon-128.png", + "icon256": "excel-parser-processor-icon-256.png", + "date": "2018-10-26", + "iconColors": [ + "#683eb6", + "#a159ba", + "#f2eef7", + "#bc9cd4", + "#9480d4" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:25.810Z", + "readmeFetchedAt": "2019-02-08T00:07:42.468Z", + "goodColorOnWhite": "#683EB6", + "goodColorOnBlack": "#9480D4", + "faintColorOnWhite": "rgba(104, 62, 182, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Excel Parser Processor", + "app:excel-parser-processor" + ] + }, { "objectID": "app-explorer", "slug": "explorer", @@ -5450,8 +7240,8 @@ "#beb5cb", "#dcc1fc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.552Z", - "readmeFetchedAt": "2018-05-14T15:02:43.324Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.834Z", + "readmeFetchedAt": "2019-02-08T00:07:42.506Z", "goodColorOnWhite": "#882CF5", "goodColorOnBlack": "#DCC1FC", "faintColorOnWhite": "rgba(136, 44, 245, 0.1)", @@ -5492,8 +7282,8 @@ "#86ce95", "#67c480" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.518Z", - "readmeFetchedAt": "2018-05-14T15:02:43.367Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.891Z", + "readmeFetchedAt": "2019-02-08T00:07:42.592Z", "goodColorOnWhite": "#257C34", "goodColorOnBlack": "#32A846", "faintColorOnWhite": "rgba(37, 124, 52, 0.1)", @@ -5559,8 +7349,8 @@ "#7c7c7c", "#747474" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.597Z", - "readmeFetchedAt": "2018-05-14T15:02:43.274Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.940Z", + "readmeFetchedAt": "2019-02-08T00:07:42.613Z", "goodColorOnWhite": "#1C1515", "goodColorOnBlack": "#F9F9F9", "faintColorOnWhite": "rgba(28, 21, 21, 0.1)", @@ -5657,8 +7447,8 @@ "#848c9c", "#748494" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.568Z", - "readmeFetchedAt": "2018-05-14T15:02:43.372Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.924Z", + "readmeFetchedAt": "2019-02-08T00:07:42.620Z", "goodColorOnWhite": "#112140", "goodColorOnBlack": "#748494", "faintColorOnWhite": "rgba(17, 33, 64, 0.1)", @@ -5685,7 +7475,7 @@ "ui", "ux" ], - "category": "Photo & Video", + "category": "Graphics & Design", "icon": "figma-icon.png", "icon32": "figma-icon-32.png", "icon64": "figma-icon-64.png", @@ -5734,8 +7524,8 @@ "#302c2c", "#302c2c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.598Z", - "readmeFetchedAt": "2018-05-14T15:02:43.519Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:25.973Z", + "readmeFetchedAt": "2019-02-08T00:07:42.693Z", "goodColorOnWhite": "#302C2C", "goodColorOnBlack": "#877C7C", "faintColorOnWhite": "rgba(48, 44, 44, 0.1)", @@ -5745,6 +7535,68 @@ "app:final-countdown" ] }, + { + "objectID": "app-find-better-questions", + "slug": "find-better-questions", + "name": "Find Better Questions", + "description": "Marketing Tool for Quora", + "website": "https://findbetterquestions.com", + "keywords": [ + "quora", + "marketing", + "automation", + "productivity", + "tool", + "utility", + "growth", + "analytics", + "research", + "findbetterquestions" + ], + "category": "Business", + "screenshots": [ + { + "imageUrl": "https://findbetterquestions.com/assets/findbetterquestions-how-it-works.png", + "caption": "How It Works", + "imageLink": "https://findbetterquestions.com" + }, + { + "imageUrl": "https://findbetterquestions.com/assets/findbetterquestions-screenshot-create-new-list.png", + "caption": "Create a New List", + "imageLink": "https://findbetterquestions.com" + }, + { + "imageUrl": "https://findbetterquestions.com/assets/findbetterquestions-screenshot-example-list.png", + "caption": "Example List", + "imageLink": "https://findbetterquestions.com" + } + ], + "colors": { + "goodColorOnWhite": "#2E4057", + "goodColorOnBlack": "#FFF8E8" + }, + "icon": "find-better-questions-icon.png", + "icon32": "find-better-questions-icon-32.png", + "icon64": "find-better-questions-icon-64.png", + "icon128": "find-better-questions-icon-128.png", + "icon256": "find-better-questions-icon-256.png", + "date": "2018-07-11", + "iconColors": [ + "#2c4454", + "#304454", + "#304454", + "#304454", + "#304454" + ], + "goodColorOnWhite": "#2C4454", + "goodColorOnBlack": "#5583A2", + "faintColorOnWhite": "rgba(44, 68, 84, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Find Better Questions", + "app:find-better-questions" + ] + }, { "objectID": "app-firebase-admin", "slug": "firebase-admin", @@ -5774,8 +7626,8 @@ "#fcdc7f", "#fcd464" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.655Z", - "readmeFetchedAt": "2018-05-14T15:02:43.499Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.032Z", + "readmeFetchedAt": "2019-02-08T00:07:42.760Z", "goodColorOnWhite": "#916902", "goodColorOnBlack": "#FCC535", "faintColorOnWhite": "rgba(145, 105, 2, 0.1)", @@ -5924,8 +7776,8 @@ "#79c0d9", "#5cccd4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.695Z", - "readmeFetchedAt": "2018-05-14T15:02:43.547Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.033Z", + "readmeFetchedAt": "2019-02-08T00:07:42.752Z", "goodColorOnWhite": "#1D7D8D", "goodColorOnBlack": "#28AEC4", "faintColorOnWhite": "rgba(29, 125, 141, 0.1)", @@ -5935,6 +7787,71 @@ "app:foco" ] }, + { + "objectID": "app-foda", + "slug": "foda", + "name": "Fight over dat Ancient", + "description": "FODA - Free to play Online card game", + "website": "https://foda.app", + "category": "Games", + "repository": "https://github.com/rafaelcastrocouto/foda", + "youtube_video_url": "https://www.youtube.com/watch?v=dvZDwHAFwIg", + "locales": [ + "en", + "ru", + "tr-TR", + "pt-BR", + "es" + ], + "keywords": [ + "games", + "cards", + "dota", + "rpg", + "tcg", + "ccg" + ], + "screenshots": [ + { + "imageUrl": "https://foda-app.herokuapp.com/client/img/banner.jpg", + "caption": "Artwork", + "imageLink": "https://foda.app" + }, + { + "imageUrl": "https://img.itch.zone/aW1hZ2UvMTg5NDU3Lzk4Nzk5My5qcGc=/original/irOhAE.jpg", + "caption": "Game Menu", + "imageLink": "https://foda.app" + }, + { + "imageUrl": "https://img.itch.zone/aW1hZ2UvMTg5NDU3LzExNDk0MjAuanBn/original/RqdrSa.jpgg", + "caption": "Game Play", + "imageLink": "https://foda.app" + } + ], + "icon": "foda-icon.png", + "icon32": "foda-icon-32.png", + "icon64": "foda-icon-64.png", + "icon128": "foda-icon-128.png", + "icon256": "foda-icon-256.png", + "date": "2018-12-01", + "iconColors": [ + "#5181d0", + "#121318", + "#a2cee9", + "#80e6f6", + "#454c60" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:26.024Z", + "readmeFetchedAt": "2019-02-08T00:07:42.768Z", + "goodColorOnWhite": "#454C60", + "goodColorOnBlack": "#80E6F6", + "faintColorOnWhite": "rgba(69, 76, 96, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Fight over dat Ancient", + "app:foda" + ] + }, { "objectID": "app-fog", "slug": "fog", @@ -5965,8 +7882,8 @@ "#969798", "#fcd764" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.670Z", - "readmeFetchedAt": "2018-05-14T15:02:43.558Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.072Z", + "readmeFetchedAt": "2019-02-08T00:07:42.792Z", "goodColorOnWhite": "#747579", "goodColorOnBlack": "#FB9A09", "faintColorOnWhite": "rgba(116, 117, 121, 0.1)", @@ -6186,7 +8103,7 @@ "license": "GPL-3.0", "screenshots": [ { - "imageUrl": "https://github.com/matthew-matvei/freeman/blob/develop/resources/freeManScreenshot.png", + "imageUrl": "https://raw.githubusercontent.com/matthew-matvei/freeman/develop/resources/freeManLogo.png", "caption": "Dual-pane with open integrated terminal" } ], @@ -6209,8 +8126,8 @@ "#64646a", "#747474" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.691Z", - "readmeFetchedAt": "2018-05-14T15:02:43.657Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.090Z", + "readmeFetchedAt": "2019-02-08T00:07:42.934Z", "goodColorOnWhite": "#202030", "goodColorOnBlack": "#EAEAF7", "faintColorOnWhite": "rgba(32, 32, 48, 0.1)", @@ -6253,6 +8170,44 @@ "app:freeter" ] }, + { + "objectID": "app-fridayai", + "slug": "fridayai", + "name": "FridayAI", + "description": "High purpose Artificial Assistant can help you with organize your life", + "website": "http://api.fridaytec.com/site", + "category": "Lifestyle", + "repository": "https://github.com/IntelligentThings/FridayAI-PC", + "keywords": [ + "ai", + "assistant", + "artificial intelligence" + ], + "license": "BSD 3-Clause", + "icon": "fridayai-icon.png", + "icon32": "fridayai-icon-32.png", + "icon64": "fridayai-icon-64.png", + "icon128": "fridayai-icon-128.png", + "icon256": "fridayai-icon-256.png", + "date": "2018-08-13", + "iconColors": [ + "#b404b4", + "#bc04b4", + "#b404bc", + "#bc04bc", + "#b804b4" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:26.162Z", + "readmeFetchedAt": "2019-02-08T00:07:42.874Z", + "goodColorOnWhite": "#B404B4", + "goodColorOnBlack": "#DC05DC", + "faintColorOnWhite": "rgba(180, 4, 180, 0.1)", + "keyValuePairs": [ + "is:app", + "app:FridayAI", + "app:fridayai" + ] + }, { "objectID": "app-friends", "slug": "friends", @@ -6317,8 +8272,8 @@ "#7c9494", "#577275" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.750Z", - "readmeFetchedAt": "2018-05-14T15:02:43.641Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.164Z", + "readmeFetchedAt": "2019-02-08T00:07:42.910Z", "goodColorOnWhite": "#042C34", "goodColorOnBlack": "#6E868C", "faintColorOnWhite": "rgba(4, 44, 52, 0.1)", @@ -6473,8 +8428,8 @@ "#f48a8c", "#f4a4a4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.726Z", - "readmeFetchedAt": "2018-05-14T15:02:43.701Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.133Z", + "readmeFetchedAt": "2019-02-08T00:07:42.923Z", "goodColorOnWhite": "#442C2C", "goodColorOnBlack": "#F48A8C", "faintColorOnWhite": "rgba(68, 44, 44, 0.1)", @@ -6525,6 +8480,94 @@ "app:gausssense-desktop" ] }, + { + "objectID": "app-geeks-diary", + "slug": "geeks-diary", + "name": "Geeks Diary", + "description": "TIL writing tool for programmer", + "category": "Productivity", + "repository": "https://github.com/seokju-na/geeks-diary", + "screenshots": [ + { + "imageUrl": "https://user-images.githubusercontent.com/13250888/50571138-5bc7bf80-0de5-11e9-8f4e-3193c085a5b9.png", + "caption": "Main Screenshot" + }, + { + "imageUrl": "https://user-images.githubusercontent.com/13250888/50571136-5b2f2900-0de5-11e9-92a2-cb002fb62a46.png", + "caption": "Commit Note" + }, + { + "imageUrl": "https://user-images.githubusercontent.com/13250888/50505413-bf38b100-0ab6-11e9-8d2f-6a1c8725c6cd.gif", + "caption": "Sync with remote repository" + }, + { + "imageUrl": "https://user-images.githubusercontent.com/13250888/50505410-bea01a80-0ab6-11e9-9794-33d6cadb64b8.gif", + "caption": "Contribute Measurement" + } + ], + "keywords": [ + "Markdown", + "Note App", + "Code", + "Programmer", + "TIL" + ], + "license": "MIT", + "icon": "geeks-diary-icon.png", + "icon32": "geeks-diary-icon-32.png", + "icon64": "geeks-diary-icon-64.png", + "icon128": "geeks-diary-icon-128.png", + "icon256": "geeks-diary-icon-256.png", + "date": "2019-01-10", + "iconColors": [ + "#242424", + "#fbfbfb", + "#6c6c6c", + "#747474", + "#5c5c5c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:26.179Z", + "readmeFetchedAt": "2019-02-08T00:07:43.030Z", + "goodColorOnWhite": "#242424", + "goodColorOnBlack": "#FBFBFB", + "faintColorOnWhite": "rgba(36, 36, 36, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Geeks Diary", + "app:geeks-diary" + ] + }, + { + "objectID": "app-genotify", + "slug": "genotify", + "name": "Genotify", + "description": "Light-weight, cross-species gene lookup and summarization for desktop.", + "repository": "https://github.com/j-andrews7/Genotify", + "category": "Medical", + "icon": "genotify-icon.png", + "icon32": "genotify-icon-32.png", + "icon64": "genotify-icon-64.png", + "icon128": "genotify-icon-128.png", + "icon256": "genotify-icon-256.png", + "date": "2018-10-28", + "iconColors": [ + "#040c04", + "#04867b", + "#045654", + "#04433b", + "#042f2c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:26.224Z", + "readmeFetchedAt": "2019-02-08T00:07:43.157Z", + "goodColorOnWhite": "#045654", + "goodColorOnBlack": "#04867B", + "faintColorOnWhite": "rgba(4, 86, 84, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Genotify", + "app:genotify" + ] + }, { "objectID": "app-gf-trader", "slug": "gf-trader", @@ -6653,8 +8696,8 @@ "#303030", "#444444" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.760Z", - "readmeFetchedAt": "2018-05-14T15:02:43.630Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.241Z", + "readmeFetchedAt": "2019-02-08T00:07:43.043Z", "goodColorOnWhite": "#040404", "goodColorOnBlack": "#FFF", "faintColorOnWhite": "rgba(4, 4, 4, 0.1)", @@ -6664,6 +8707,40 @@ "app:gifbar" ] }, + { + "objectID": "app-gitblade", + "slug": "gitblade", + "name": "GitBlade", + "description": "A simple and elegant GUI client for Linux, Mac and Windows", + "website": "https://gitblade.com/", + "keywords": [ + "git", + "programming", + "software" + ], + "category": "Developer Tools", + "icon": "gitblade-icon.png", + "icon32": "gitblade-icon-32.png", + "icon64": "gitblade-icon-64.png", + "icon128": "gitblade-icon-128.png", + "icon256": "gitblade-icon-256.png", + "date": "2018-08-10", + "iconColors": [ + "#e4c48c", + "#e8c48c", + "#e8c48c", + "#e8c48c", + "#e8c48c" + ], + "goodColorOnWhite": "#95661E", + "goodColorOnBlack": "#E8C48C", + "faintColorOnWhite": "rgba(149, 102, 30, 0.1)", + "keyValuePairs": [ + "is:app", + "app:GitBlade", + "app:gitblade" + ] + }, { "objectID": "app-gitbook", "slug": "gitbook", @@ -6734,8 +8811,8 @@ "#f8541c", "#f8541c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.798Z", - "readmeFetchedAt": "2018-05-14T15:02:43.745Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.278Z", + "readmeFetchedAt": "2019-02-08T00:07:43.058Z", "goodColorOnWhite": "#DA3D07", "goodColorOnBlack": "#F8541C", "faintColorOnWhite": "rgba(218, 61, 7, 0.1)", @@ -6785,8 +8862,8 @@ "#848484", "#969696" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.785Z", - "readmeFetchedAt": "2018-05-14T15:02:43.764Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.241Z", + "readmeFetchedAt": "2019-02-08T00:07:43.269Z", "goodColorOnWhite": "#72308D", "goodColorOnBlack": "#EDEDED", "faintColorOnWhite": "rgba(114, 48, 141, 0.1)", @@ -6875,10 +8952,10 @@ ], "license": "GPL-v3", "category": "Developer Tools", - "repository": "https://github.com/Meadowcottage/gitmoji", + "repository": "https://github.com/carloscuesta/gitmoji", "screenshots": [ { - "imageUrl": "https://github.com/Meadowcottage/gitmoji/blob/master/build/Screenshot.png?raw=true" + "imageUrl": "https://github.com/carloscuesta/gitmoji/blob/master/build/Screenshot.png?raw=true" } ], "icon": "gitmoji-icon.png", @@ -6894,8 +8971,8 @@ "#f7e59d", "#9c947c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.782Z", - "readmeFetchedAt": "2018-05-14T15:02:43.716Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.283Z", + "readmeFetchedAt": "2019-02-08T00:07:43.278Z", "goodColorOnWhite": "#A85D4B", "goodColorOnBlack": "#FBDB64", "faintColorOnWhite": "rgba(168, 93, 75, 0.1)", @@ -6966,8 +9043,8 @@ "#7c94bc", "#8c9cbc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.796Z", - "readmeFetchedAt": "2018-05-14T15:02:43.776Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.299Z", + "readmeFetchedAt": "2019-02-08T00:07:43.297Z", "goodColorOnWhite": "#0D4FB5", "goodColorOnBlack": "#749CD4", "faintColorOnWhite": "rgba(13, 79, 181, 0.1)", @@ -7002,8 +9079,8 @@ "#8dd8f4", "#32bce5" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.868Z", - "readmeFetchedAt": "2018-05-14T15:02:43.846Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.343Z", + "readmeFetchedAt": "2019-02-08T00:07:43.288Z", "goodColorOnWhite": "#037BA2", "goodColorOnBlack": "#04ACE4", "faintColorOnWhite": "rgba(3, 123, 162, 0.1)", @@ -7064,8 +9141,8 @@ "#fba60e", "#b48954" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.880Z", - "readmeFetchedAt": "2018-05-14T15:02:43.878Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.377Z", + "readmeFetchedAt": "2019-02-08T00:07:43.458Z", "faintColorOnWhite": "rgba(136, 108, 2, 0.1)", "keyValuePairs": [ "is:app", @@ -7240,8 +9317,8 @@ "#ec54bc", "#dc0494" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.916Z", - "readmeFetchedAt": "2018-05-14T15:02:43.838Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.370Z", + "readmeFetchedAt": "2019-02-08T00:07:43.381Z", "goodColorOnWhite": "#DC0494", "goodColorOnBlack": "#EC54BC", "faintColorOnWhite": "rgba(220, 4, 148, 0.1)", @@ -7286,8 +9363,8 @@ "#ec74bc", "#e43c9c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.918Z", - "readmeFetchedAt": "2018-05-14T15:02:45.865Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.472Z", + "readmeFetchedAt": "2019-02-08T00:07:43.498Z", "goodColorOnWhite": "#DF0483", "goodColorOnBlack": "#EA64B0", "faintColorOnWhite": "rgba(223, 4, 131, 0.1)", @@ -7369,8 +9446,8 @@ "#04445a", "#04748c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.978Z", - "readmeFetchedAt": "2018-05-14T15:02:43.921Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.412Z", + "readmeFetchedAt": "2019-02-08T00:07:43.390Z", "goodColorOnWhite": "#04748C", "goodColorOnBlack": "#0ADCFC", "faintColorOnWhite": "rgba(4, 116, 140, 0.1)", @@ -7427,8 +9504,8 @@ "#a48dc5", "#b29ec4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.962Z", - "readmeFetchedAt": "2018-05-14T15:02:43.949Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.457Z", + "readmeFetchedAt": "2019-02-08T00:07:43.536Z", "goodColorOnWhite": "#723BCE", "goodColorOnBlack": "#BCA2E8", "faintColorOnWhite": "rgba(114, 59, 206, 0.1)", @@ -7466,8 +9543,8 @@ "#67e1f2", "#37d2ec" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.103Z", - "readmeFetchedAt": "2018-05-14T15:02:44.033Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.545Z", + "readmeFetchedAt": "2019-02-08T00:07:43.611Z", "goodColorOnWhite": "#027A83", "goodColorOnBlack": "#18ECFC", "faintColorOnWhite": "rgba(2, 122, 131, 0.1)", @@ -7508,8 +9585,8 @@ "#7e8a8e", "#c88a3f" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:30.996Z", - "readmeFetchedAt": "2018-05-14T15:02:44.010Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.506Z", + "readmeFetchedAt": "2019-02-08T00:07:43.633Z", "goodColorOnWhite": "#6C4C3C", "goodColorOnBlack": "#E7C15B", "faintColorOnWhite": "rgba(108, 76, 60, 0.1)", @@ -7553,8 +9630,8 @@ "#a69769", "#9e8cad" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.050Z", - "readmeFetchedAt": "2018-05-14T15:02:44.016Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.567Z", + "readmeFetchedAt": "2019-02-08T00:07:43.597Z", "goodColorOnWhite": "#A25F1F", "goodColorOnBlack": "#D88332", "faintColorOnWhite": "rgba(162, 95, 31, 0.1)", @@ -7564,6 +9641,68 @@ "app:harmony" ] }, + { + "objectID": "app-hastyheroes", + "slug": "hastyheroes", + "name": "HastyHeroes", + "description": "An endless 2D jumping game, select a avatar, choose a environment and start playing. Dont fall off the platforms and dont hit the spike balls!", + "website": "https://aveek-saha.github.io/", + "repository": "https://github.com/Aveek-Saha/HastyHeroes", + "keywords": [ + "2D", + "endless", + "game", + "jump", + "fun", + "hero" + ], + "category": "Games", + "screenshots": [ + { + "imageUrl": "https://img.itch.zone/aW1hZ2UvMjc4NDU2LzEzNTA4ODEucG5n/original/o%2Fxb6C.png", + "caption": "Character selection", + "imageLink": "https://github.com/Aveek-Saha/HastyHeroes/releases" + }, + { + "imageUrl": "https://img.itch.zone/aW1hZ2UvMjc4NDU2LzEzNTA4ODMucG5n/original/K7iHYi.png", + "caption": "Gameplay", + "imageLink": "https://github.com/Aveek-Saha/HastyHeroes/releases" + }, + { + "imageUrl": "https://img.itch.zone/aW1hZ2UvMjc4NDU2LzEzNTA4ODUucG5n/original/8P68RQ.png", + "caption": "More gameplay", + "imageLink": "https://github.com/Aveek-Saha/HastyHeroes/releases" + }, + { + "imageUrl": "https://img.itch.zone/aW1hZ2UvMjc4NDU2LzEzNTA4ODcucG5n/original/BZJtDX.png", + "caption": "Game over", + "imageLink": "https://github.com/Aveek-Saha/HastyHeroes/releases" + } + ], + "icon": "hastyheroes-icon.png", + "icon32": "hastyheroes-icon-32.png", + "icon64": "hastyheroes-icon-64.png", + "icon128": "hastyheroes-icon-128.png", + "icon256": "hastyheroes-icon-256.png", + "date": "2018-07-27", + "iconColors": [ + "#64bb74", + "#fafafa", + "#8c5dd3", + "#a4d4b4", + "#9cd4a4" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:26.560Z", + "readmeFetchedAt": "2019-02-08T00:07:43.645Z", + "goodColorOnWhite": "#8C5DD3", + "goodColorOnBlack": "#8C5DD3", + "faintColorOnWhite": "rgba(140, 93, 211, 0.1)", + "keyValuePairs": [ + "is:app", + "app:HastyHeroes", + "app:hastyheroes" + ] + }, { "objectID": "app-hawkeye", "slug": "hawkeye", @@ -7595,8 +9734,8 @@ "#868181", "#9c918c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.119Z", - "readmeFetchedAt": "2018-05-14T15:02:44.282Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.575Z", + "readmeFetchedAt": "2019-02-08T00:07:43.718Z", "goodColorOnWhite": "#187F7F", "goodColorOnBlack": "#21AFAF", "faintColorOnWhite": "rgba(24, 127, 127, 0.1)", @@ -7634,8 +9773,8 @@ "#8494c4", "#949cc4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.071Z", - "readmeFetchedAt": "2018-05-14T15:02:44.159Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.650Z", + "readmeFetchedAt": "2019-02-08T00:07:43.729Z", "goodColorOnWhite": "#213F92", "goodColorOnBlack": "#8494C4", "faintColorOnWhite": "rgba(33, 63, 146, 0.1)", @@ -7712,8 +9851,8 @@ "#a9e3d2", "#d0f0e8" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.161Z", - "readmeFetchedAt": "2018-05-14T15:02:44.167Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.692Z", + "readmeFetchedAt": "2019-02-08T00:07:43.744Z", "goodColorOnWhite": "#248269", "goodColorOnBlack": "#4CCEAC", "faintColorOnWhite": "rgba(36, 130, 105, 0.1)", @@ -7765,6 +9904,50 @@ "app:hedgehog-cloud-browser" ] }, + { + "objectID": "app-hexo-client", + "slug": "hexo-client", + "name": "HexoClient", + "description": "A client for hexo", + "website": "https://www.mspring.org", + "repository": "https://github.com/gaoyoubo/hexo-client", + "keywords": [ + "writing", + "editor", + "blog", + "hexo" + ], + "license": "Apache License Version 2.0", + "category": "Utilities", + "screenshots": [ + { + "imageUrl": "https://camo.githubusercontent.com/4137b3f1df6632bc47c272520186d3c2ad3681b9/687474703a2f2f66696c652e6d737072696e672e6f72672f3030323164373464333639303835633931653836316434383336353966613332" + } + ], + "icon": "hexo-client-icon.png", + "icon32": "hexo-client-icon-32.png", + "icon64": "hexo-client-icon-64.png", + "icon128": "hexo-client-icon-128.png", + "icon256": "hexo-client-icon-256.png", + "date": "2018-11-14", + "iconColors": [ + "#0c84cc", + "#1084cc", + "#1084cc", + "#1084cc", + "#1084cc" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:26.676Z", + "readmeFetchedAt": "2019-02-08T00:07:43.754Z", + "goodColorOnWhite": "#0B76B6", + "goodColorOnBlack": "#0C84CC", + "faintColorOnWhite": "rgba(11, 118, 182, 0.1)", + "keyValuePairs": [ + "is:app", + "app:HexoClient", + "app:hexo-client" + ] + }, { "objectID": "app-hive", "slug": "hive", @@ -7876,8 +10059,8 @@ "#f49494", "#f48c94" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.149Z", - "readmeFetchedAt": "2018-05-14T15:02:44.272Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.651Z", + "readmeFetchedAt": "2019-02-08T00:07:43.854Z", "goodColorOnWhite": "#E4242C", "goodColorOnBlack": "#F48C94", "faintColorOnWhite": "rgba(228, 36, 44, 0.1)", @@ -7919,6 +10102,64 @@ "app:hozz" ] }, + { + "objectID": "app-http-toolkit", + "slug": "http-toolkit", + "name": "HTTP Toolkit", + "description": "Powerful tools to debug, test & build with HTTP(S).", + "website": "https://httptoolkit.tech", + "category": "Developer Tools", + "repository": "https://github.com/httptoolkit", + "youtube_video_url": "https://www.youtube.com/watch?v=9yNssXEyH1Q", + "keywords": [ + "developer tools", + "http", + "https", + "debug", + "debugging", + "view", + "edit", + "intercept", + "proxy", + "security", + "performance" + ], + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/httptoolkit/httptoolkit.tech/master/src/images/intercept-screenshot.png", + "caption": "Capture HTTP(S) with zero setup" + }, + { + "imageUrl": "https://raw.githubusercontent.com/httptoolkit/httptoolkit.tech/master/src/images/explore-screenshot.png", + "caption": "Quickly skim & search HTTP traffic" + }, + { + "imageUrl": "https://raw.githubusercontent.com/httptoolkit/httptoolkit.tech/master/src/images/examine-screenshot.png", + "caption": "Deep dive into HTTP exchanges" + } + ], + "icon": "http-toolkit-icon.png", + "icon32": "http-toolkit-icon-32.png", + "icon64": "http-toolkit-icon-64.png", + "icon128": "http-toolkit-icon-128.png", + "icon256": "http-toolkit-icon-256.png", + "date": "2019-01-22", + "iconColors": [ + "#e4441c", + "#e44424", + "#e8441c", + "#e8441c", + "#e8441c" + ], + "goodColorOnWhite": "#D53B16", + "goodColorOnBlack": "#E8441C", + "faintColorOnWhite": "rgba(213, 59, 22, 0.1)", + "keyValuePairs": [ + "is:app", + "app:HTTP Toolkit", + "app:http-toolkit" + ] + }, { "objectID": "app-https-checker", "slug": "https-checker", @@ -7988,8 +10229,8 @@ "#cfd749", "#74dbd2" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.152Z", - "readmeFetchedAt": "2018-05-14T15:02:44.229Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.711Z", + "readmeFetchedAt": "2019-02-08T00:07:43.951Z", "goodColorOnWhite": "#377171", "goodColorOnBlack": "#CFD749", "faintColorOnWhite": "rgba(55, 113, 113, 0.1)", @@ -8019,7 +10260,7 @@ "category": "Developer Tools", "screenshots": [ { - "imageUrl": "https://raw.githubusercontent.com/zeit/hyper/master/website/static/hyperyellow.gif" + "imageUrl": "https://hyper.is/static/hyperyellow.gif" } ], "icon": "hyper-icon.png", @@ -8035,8 +10276,8 @@ "#6c6c6c", "#7c7c7c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.205Z", - "readmeFetchedAt": "2018-05-14T15:02:44.308Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.741Z", + "readmeFetchedAt": "2019-02-08T00:07:43.846Z", "faintColorOnWhite": "rgba(71, 23, 57, 0.1)", "keyValuePairs": [ "is:app", @@ -8044,6 +10285,59 @@ "app:hyper" ] }, + { + "objectID": "app-i18n-manager", + "slug": "i18n-manager", + "name": "i18n Manager", + "description": "The app that will help to manage your app translations.", + "category": "Developer Tools", + "repository": "https://github.com/gilmarsquinelato/i18n-manager", + "keywords": [ + "i18n", + "translation", + "internationalization", + "locales", + "Google Translate", + "translation tool" + ], + "license": "MIT", + "locales": [ + "en-US" + ], + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/gilmarsquinelato/i18n-manager/97dac026b5cd3c38c48754b9feba2deb0448d5ea/picture1.jpg", + "caption": "Translation changes detection" + }, + { + "imageUrl": "https://raw.githubusercontent.com/gilmarsquinelato/i18n-manager/97dac026b5cd3c38c48754b9feba2deb0448d5ea/picture2.jpg", + "caption": "Translation missing detection" + } + ], + "icon": "i18n-manager-icon.png", + "icon32": "i18n-manager-icon-32.png", + "icon64": "i18n-manager-icon-64.png", + "icon128": "i18n-manager-icon-128.png", + "icon256": "i18n-manager-icon-256.png", + "date": "2018-09-20", + "iconColors": [ + "#2dcb53", + "#e1b124", + "#0464e3", + "#fbf9f4", + "#817634" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:26.771Z", + "readmeFetchedAt": "2019-02-08T00:07:43.881Z", + "goodColorOnWhite": "#0464E3", + "goodColorOnBlack": "#E1B124", + "faintColorOnWhite": "rgba(4, 100, 227, 0.1)", + "keyValuePairs": [ + "is:app", + "app:i18n Manager", + "app:i18n-manager" + ] + }, { "objectID": "app-i5sing", "slug": "i5sing", @@ -8075,8 +10369,8 @@ "#8df7fa", "#68989c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.220Z", - "readmeFetchedAt": "2018-05-14T15:02:44.424Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.804Z", + "readmeFetchedAt": "2019-02-08T00:07:44.075Z", "goodColorOnWhite": "#3D2F37", "goodColorOnBlack": "#8DF7FA", "faintColorOnWhite": "rgba(61, 47, 55, 0.1)", @@ -8102,7 +10396,10 @@ "category": "Music", "screenshots": [ { - "imageUrl": "https://github.com/trazyn/ieaseMusic/blob/master/screenshots/preview.gif" + "imageUrl": "https://github.com/trazyn/ieaseMusic/blob/dev/screenshots/home.png?raw=true" + }, + { + "imageUrl": "https://github.com/trazyn/ieaseMusic/blob/dev/screenshots/fm.png?raw=true" } ], "locales": [ @@ -8115,17 +10412,17 @@ "icon256": "iease-music-icon-256.png", "date": "2017-10-21", "iconColors": [ - "#f7740c", - "#fbefdb", - "#fbcc0c", - "#f3ac0a", - "#e8995e" + "#d93cf3", + "#f7f4f8", + "#b148fc", + "#d780f6", + "#de05f1" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.355Z", - "readmeFetchedAt": "2018-05-14T15:02:44.415Z", - "goodColorOnWhite": "#8C7102", - "goodColorOnBlack": "#FBCC0C", - "faintColorOnWhite": "rgba(140, 113, 2, 0.1)", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.815Z", + "readmeFetchedAt": "2019-02-08T00:07:43.993Z", + "goodColorOnWhite": "#A42AFC", + "goodColorOnBlack": "#B148FC", + "faintColorOnWhite": "rgba(164, 42, 252, 0.1)", "keyValuePairs": [ "is:app", "app:ieaseMusic", @@ -8167,6 +10464,56 @@ "app:illyriad" ] }, + { + "objectID": "app-image-resizer-tech", + "slug": "image-resizer-tech", + "name": "Image Resizer Tech", + "description": "simple application for resizing images", + "website": "https://image-resizer.tech/", + "category": "Photo & Video", + "keywords": [ + "resize", + "angular", + "images", + "design", + "photo", + "png", + "jpeg", + "sharp" + ], + "licence": "Commercial", + "screenshots": [ + { + "imageUrl": "https://image-resizer.tech/assets/img/screenshot-1.png", + "caption": "Light theme" + }, + { + "imageUrl": "https://image-resizer.tech/assets/img/screenshot-2.png", + "caption": "Dark theme" + } + ], + "icon": "image-resizer-tech-icon.png", + "icon32": "image-resizer-tech-icon-32.png", + "icon64": "image-resizer-tech-icon-64.png", + "icon128": "image-resizer-tech-icon-128.png", + "icon256": "image-resizer-tech-icon-256.png", + "date": "2018-11-21", + "iconColors": [ + "#248bc3", + "#24547c", + "#abe5fb", + "#84cdf4", + "#68b9e3" + ], + "goodColorOnWhite": "#24547C", + "goodColorOnBlack": "#ABE5FB", + "faintColorOnWhite": "rgba(36, 84, 124, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Image Resizer Tech", + "app:image-resizer-tech" + ] + }, { "objectID": "app-image-shrinker", "slug": "image-shrinker", @@ -8205,8 +10552,8 @@ "#75acca", "#f0694f" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.246Z", - "readmeFetchedAt": "2018-05-14T15:02:44.367Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.831Z", + "readmeFetchedAt": "2019-02-08T00:07:43.972Z", "faintColorOnWhite": "rgba(163, 71, 67, 0.1)", "keyValuePairs": [ "is:app", @@ -8244,8 +10591,8 @@ "#3484b4", "#347cac" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.658Z", - "readmeFetchedAt": "2018-05-14T15:02:44.502Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.856Z", + "readmeFetchedAt": "2019-02-08T00:07:44.335Z", "goodColorOnWhite": "#347CAC", "goodColorOnBlack": "#049BFB", "faintColorOnWhite": "rgba(52, 124, 172, 0.1)", @@ -8282,8 +10629,8 @@ "#8f9399", "#b7b7b7" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.327Z", - "readmeFetchedAt": "2018-05-14T15:02:44.528Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.933Z", + "readmeFetchedAt": "2019-02-08T00:07:44.106Z", "goodColorOnWhite": "#0975A6", "goodColorOnBlack": "#9FDEFA", "faintColorOnWhite": "rgba(9, 117, 166, 0.1)", @@ -8327,8 +10674,8 @@ "#7c7c7c", "#848484" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.318Z", - "readmeFetchedAt": "2018-05-14T15:02:44.509Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.926Z", + "readmeFetchedAt": "2019-02-08T00:07:44.113Z", "goodColorOnWhite": "#070707", "goodColorOnBlack": "#FBFBFB", "faintColorOnWhite": "rgba(7, 7, 7, 0.1)", @@ -8442,8 +10789,8 @@ "#919191", "#b4b4b4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.466Z", - "readmeFetchedAt": "2018-05-14T15:02:44.680Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.972Z", + "readmeFetchedAt": "2019-02-08T00:07:46.252Z", "goodColorOnWhite": "#545454", "goodColorOnBlack": "#5CACFB", "faintColorOnWhite": "rgba(84, 84, 84, 0.1)", @@ -8467,7 +10814,7 @@ "developer tools", "GraphQL" ], - "license": "AGPL-3.0", + "license": "MIT", "category": "Developer Tools", "homebrewCaskName": "insomnia", "screenshots": [ @@ -8488,8 +10835,8 @@ "#aca4dc", "#acacdc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.418Z", - "readmeFetchedAt": "2018-05-14T15:02:44.645Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.963Z", + "readmeFetchedAt": "2019-02-08T00:07:44.220Z", "goodColorOnWhite": "#645CC4", "goodColorOnBlack": "#C2BCE6", "faintColorOnWhite": "rgba(100, 92, 196, 0.1)", @@ -8523,8 +10870,8 @@ "#607773", "#e2544b" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.520Z", - "readmeFetchedAt": "2018-05-14T15:02:44.600Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.000Z", + "readmeFetchedAt": "2019-02-08T00:07:44.265Z", "goodColorOnWhite": "#314957", "goodColorOnBlack": "#34B6FB", "faintColorOnWhite": "rgba(49, 73, 87, 0.1)", @@ -8576,7 +10923,7 @@ "slug": "ionic-creator", "name": "Ionic Creator", "description": "Build amazing mobile apps, faster.", - "repository": "https://github.com/Meadowcottage/Ionic-Creator", + "repository": "https://github.com/hackur/Ionic-Creator", "keywords": [ "Ionic", "Creator", @@ -8586,7 +10933,16 @@ "category": "Developer Tools", "screenshots": [ { - "imageUrl": "https://raw.githubusercontent.com/Meadowcottage/Ionic-Creator/master/build/Screenshot-light-1.png" + "imageUrl": "https://raw.githubusercontent.com/hackur/Ionic-Creator/b093554d8348cc1252412c8d4df422a7a29d12ff/build/Screenshot-dark-1.png" + }, + { + "imageUrl": "https://raw.githubusercontent.com/hackur/Ionic-Creator/b093554d8348cc1252412c8d4df422a7a29d12ff/build/Screenshot-dark-2.png" + }, + { + "imageUrl": "https://raw.githubusercontent.com/hackur/Ionic-Creator/b093554d8348cc1252412c8d4df422a7a29d12ff/build/Screenshot-light-1.png" + }, + { + "imageUrl": "https://raw.githubusercontent.com/hackur/Ionic-Creator/b093554d8348cc1252412c8d4df422a7a29d12ff/build/Screenshot-light-2.png" } ], "icon": "ionic-creator-icon.png", @@ -8602,8 +10958,8 @@ "#d4e8fc", "#9cc4fc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.462Z", - "readmeFetchedAt": "2018-05-14T15:02:44.646Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:26.987Z", + "readmeFetchedAt": "2019-02-08T00:07:44.388Z", "goodColorOnWhite": "#0765E8", "goodColorOnBlack": "#9CC4FC", "faintColorOnWhite": "rgba(7, 101, 232, 0.1)", @@ -8719,8 +11075,8 @@ "#3b6eb0", "#54b8e0" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.567Z", - "readmeFetchedAt": "2018-05-14T15:02:44.745Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.036Z", + "readmeFetchedAt": "2019-02-08T00:07:44.401Z", "goodColorOnWhite": "#3B6EB0", "goodColorOnBlack": "#54B8E0", "faintColorOnWhite": "rgba(59, 110, 176, 0.1)", @@ -8793,8 +11149,8 @@ "#fcacac", "#fc9292" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.577Z", - "readmeFetchedAt": "2018-05-14T15:02:44.717Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.098Z", + "readmeFetchedAt": "2019-02-08T00:07:44.463Z", "goodColorOnWhite": "#DD0404", "goodColorOnBlack": "#FC5F5F", "faintColorOnWhite": "rgba(221, 4, 4, 0.1)", @@ -8804,6 +11160,45 @@ "app:itch" ] }, + { + "objectID": "app-j", + "slug": "j", + "name": "j", + "description": "weixin bot with web weixin api", + "repository": "https://github.com/joehecn/j", + "keywords": [ + "weixin", + "webwxapi", + "vue" + ], + "locales": [ + "zh_CN" + ], + "category": "Social Networking", + "icon": "j-icon.png", + "icon32": "j-icon-32.png", + "icon64": "j-icon-64.png", + "icon128": "j-icon-128.png", + "icon256": "j-icon-256.png", + "date": "2018-08-16", + "iconColors": [ + "#3c3c3c", + "#e9e9e9", + "#828282", + "#9c9c9c", + "#a4a4a4" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:27.070Z", + "readmeFetchedAt": "2019-02-08T00:07:44.634Z", + "goodColorOnWhite": "#3C3C3C", + "goodColorOnBlack": "#E9E9E9", + "faintColorOnWhite": "rgba(60, 60, 60, 0.1)", + "keyValuePairs": [ + "is:app", + "app:j", + "app:j" + ] + }, { "objectID": "app-james", "slug": "james", @@ -8834,8 +11229,8 @@ "#e07c7a", "#d43c94" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.635Z", - "readmeFetchedAt": "2018-05-14T15:02:44.759Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.098Z", + "readmeFetchedAt": "2019-02-08T00:07:44.619Z", "goodColorOnWhite": "#D42C3C", "goodColorOnBlack": "#D43C94", "faintColorOnWhite": "rgba(212, 44, 60, 0.1)", @@ -8881,8 +11276,8 @@ "#91accc", "#9cb4cc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.639Z", - "readmeFetchedAt": "2018-05-14T15:02:44.829Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.120Z", + "readmeFetchedAt": "2019-02-08T00:07:44.578Z", "goodColorOnWhite": "#3B6AA9", "goodColorOnBlack": "#91ACCC", "faintColorOnWhite": "rgba(59, 106, 169, 0.1)", @@ -8987,7 +11382,7 @@ "category": "Developer Tools", "screenshots": [ { - "imageUrl": "https://raw.githubusercontent.com/jasperapp/jasper/master/top.png" + "imageUrl": "https://raw.githubusercontent.com/jasperapp/jasper/41799eff8a034e9be4c0ba2cbe8a9b72926f5abb/top.png" } ], "icon": "jasper-icon.png", @@ -9003,8 +11398,8 @@ "#d892a4", "#c44f70" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.659Z", - "readmeFetchedAt": "2018-05-14T15:02:44.912Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.170Z", + "readmeFetchedAt": "2019-02-08T00:07:44.671Z", "goodColorOnWhite": "#D22161", "goodColorOnBlack": "#DE2E6D", "faintColorOnWhite": "rgba(210, 33, 97, 0.1)", @@ -9106,8 +11501,8 @@ "#5cb4fb", "#04449c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.698Z", - "readmeFetchedAt": "2018-05-14T15:02:44.999Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.188Z", + "readmeFetchedAt": "2019-02-08T00:07:44.858Z", "goodColorOnWhite": "#04449C", "goodColorOnBlack": "#5CB4FB", "faintColorOnWhite": "rgba(4, 68, 156, 0.1)", @@ -9189,8 +11584,8 @@ "#e9a4bc", "#dc7494" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.692Z", - "readmeFetchedAt": "2018-05-14T15:02:44.890Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.198Z", + "readmeFetchedAt": "2019-02-08T00:07:44.745Z", "goodColorOnWhite": "#CD3461", "goodColorOnBlack": "#D34B73", "faintColorOnWhite": "rgba(205, 52, 97, 0.1)", @@ -9227,8 +11622,8 @@ "#e8b404", "#e8b404" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.751Z", - "readmeFetchedAt": "2018-05-14T15:02:45.006Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.188Z", + "readmeFetchedAt": "2019-02-08T00:07:44.863Z", "goodColorOnWhite": "#907203", "goodColorOnBlack": "#E4B404", "faintColorOnWhite": "rgba(144, 114, 3, 0.1)", @@ -9271,8 +11666,8 @@ "#a4dcfc", "#84ccfc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.823Z", - "readmeFetchedAt": "2018-05-14T15:02:45.070Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.281Z", + "readmeFetchedAt": "2019-02-08T00:07:45.079Z", "goodColorOnWhite": "#0578C5", "goodColorOnBlack": "#84CCFC", "faintColorOnWhite": "rgba(5, 120, 197, 0.1)", @@ -9377,8 +11772,8 @@ "#d4887a", "#301e2a" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.801Z", - "readmeFetchedAt": "2018-05-14T15:02:45.108Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.264Z", + "readmeFetchedAt": "2019-02-08T00:07:45.069Z", "goodColorOnWhite": "#784756", "goodColorOnBlack": "#D4887A", "faintColorOnWhite": "rgba(120, 71, 86, 0.1)", @@ -9388,6 +11783,48 @@ "app:kaku" ] }, + { + "objectID": "app-kalk", + "slug": "kalk", + "name": "kalk", + "description": "Simple Calculator", + "category": "Utilities", + "repository": "https://github.com/monsterkodi/kalk", + "keywords": [ + "calculator" + ], + "license": "Unlicense", + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/monsterkodi/kalk/master/img/shot.png", + "caption": "kalk", + "imageLink": "https://github.com/monsterkodi/kalk" + } + ], + "icon": "kalk-icon.png", + "icon32": "kalk-icon-32.png", + "icon64": "kalk-icon-64.png", + "icon128": "kalk-icon-128.png", + "icon256": "kalk-icon-256.png", + "date": "2018-07-11", + "iconColors": [ + "#fc2951", + "#2894fc", + "#20fc1c", + "#0404fc", + "#fc9c04" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:27.272Z", + "readmeFetchedAt": "2019-02-08T00:07:44.997Z", + "goodColorOnWhite": "#0404FC", + "goodColorOnBlack": "#FC9C04", + "faintColorOnWhite": "rgba(4, 4, 252, 0.1)", + "keyValuePairs": [ + "is:app", + "app:kalk", + "app:kalk" + ] + }, { "objectID": "app-kap", "slug": "kap", @@ -9422,8 +11859,8 @@ "#9bc8e2", "#ca94fc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.814Z", - "readmeFetchedAt": "2018-05-14T15:02:45.078Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.302Z", + "readmeFetchedAt": "2019-02-08T00:07:45.127Z", "goodColorOnWhite": "#8A19F9", "goodColorOnBlack": "#CA94FC", "faintColorOnWhite": "rgba(138, 25, 249, 0.1)", @@ -9433,6 +11870,41 @@ "app:kap" ] }, + { + "objectID": "app-kappo", + "slug": "kappo", + "name": "kappo", + "description": "Application Launcher", + "category": "Utilities", + "repository": "https://github.com/monsterkodi/kappo", + "keywords": [ + "launcher" + ], + "license": "Unlicense", + "icon": "kappo-icon.png", + "icon32": "kappo-icon-32.png", + "icon64": "kappo-icon-64.png", + "icon128": "kappo-icon-128.png", + "icon256": "kappo-icon-256.png", + "date": "2018-07-22", + "iconColors": [ + "#040404", + "#f8f8f8", + "#848484", + "#7c7c7c", + "#747474" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:27.393Z", + "readmeFetchedAt": "2019-02-08T00:07:45.175Z", + "goodColorOnWhite": "#040404", + "goodColorOnBlack": "#F8F8F8", + "faintColorOnWhite": "rgba(4, 4, 4, 0.1)", + "keyValuePairs": [ + "is:app", + "app:kappo", + "app:kappo" + ] + }, { "objectID": "app-katana", "slug": "katana", @@ -9464,8 +11936,8 @@ "#3cccf8", "#04749c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.822Z", - "readmeFetchedAt": "2018-05-14T15:02:45.217Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.366Z", + "readmeFetchedAt": "2019-02-08T00:07:45.218Z", "goodColorOnWhite": "#04749C", "goodColorOnBlack": "#04A2F2", "faintColorOnWhite": "rgba(4, 116, 156, 0.1)", @@ -9475,6 +11947,66 @@ "app:katana" ] }, + { + "objectID": "app-kattana", + "slug": "kattana", + "name": "Kattana", + "description": "All-in-one app for trading on multiple crypto exchanges.", + "website": "https://kattana.trade", + "category": "Finance", + "keywords": [ + "trading", + "crypto trading", + "cryptocurrency", + "blockchain", + "bitcoin", + "ethereum", + "altcoins" + ], + "screenshots": [ + { + "imageUrl": "https://kattana.trade/img/01.png", + "caption": "Trading" + }, + { + "imageUrl": "https://kattana.trade/img/02.png", + "caption": "Market Scanner" + }, + { + "imageUrl": "https://kattana.trade/img/03.png", + "caption": "Trading performance" + }, + { + "imageUrl": "https://kattana.trade/img/04.png", + "caption": "Custom layouts" + }, + { + "imageUrl": "https://kattana.trade/img/05.png", + "caption": "Instant market scanner" + } + ], + "icon": "kattana-icon.png", + "icon32": "kattana-icon-32.png", + "icon64": "kattana-icon-64.png", + "icon128": "kattana-icon-128.png", + "icon256": "kattana-icon-256.png", + "date": "2018-12-03", + "iconColors": [ + "#232323", + "#f8f8f8", + "#646464", + "#8c8c8c", + "#848484" + ], + "goodColorOnWhite": "#232323", + "goodColorOnBlack": "#F8F8F8", + "faintColorOnWhite": "rgba(35, 35, 35, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Kattana", + "app:kattana" + ] + }, { "objectID": "app-keeper", "slug": "keeper", @@ -9505,8 +12037,8 @@ "#849498", "#848c8c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.866Z", - "readmeFetchedAt": "2018-05-14T15:02:45.223Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.347Z", + "readmeFetchedAt": "2019-02-08T00:07:45.208Z", "goodColorOnWhite": "#233B40", "goodColorOnBlack": "#F5BEC8", "faintColorOnWhite": "rgba(35, 59, 64, 0.1)", @@ -9656,8 +12188,8 @@ "#fcb47c", "#fc8c3c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.881Z", - "readmeFetchedAt": "2018-05-14T15:02:45.298Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.355Z", + "readmeFetchedAt": "2019-02-08T00:07:45.337Z", "goodColorOnWhite": "#B54802", "goodColorOnBlack": "#FC6404", "faintColorOnWhite": "rgba(181, 72, 2, 0.1)", @@ -9767,8 +12299,8 @@ "#5c5c5c", "#9c9c9c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.921Z", - "readmeFetchedAt": "2018-05-14T15:02:45.389Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.457Z", + "readmeFetchedAt": "2019-02-08T00:07:45.312Z", "goodColorOnWhite": "#5C5C5C", "goodColorOnBlack": "#2E8EE0", "faintColorOnWhite": "rgba(92, 92, 92, 0.1)", @@ -9793,10 +12325,34 @@ "category": "Developer Tools", "screenshots": [ { - "imageUrl": "https://github.com/tarequemdhanif/laravel-kit/raw/master/screenshots/main.png" + "imageUrl": "https://i.imgur.com/w9QRG65.png" }, { - "imageUrl": "https://github.com/tarequemdhanif/laravel-kit/raw/master/screenshots/make.png" + "imageUrl": "https://i.imgur.com/vnT1CyC.png" + }, + { + "imageUrl": "https://i.imgur.com/C5gChi9.png" + }, + { + "imageUrl": "https://i.imgur.com/kOJZBFI.png" + }, + { + "imageUrl": "https://i.imgur.com/F2VsVFR.png" + }, + { + "imageUrl": "https://i.imgur.com/Us0YBb2.png" + }, + { + "imageUrl": "https://i.imgur.com/pwbXui7.png" + }, + { + "imageUrl": "https://i.imgur.com/nNfGSku.png" + }, + { + "imageUrl": "https://i.imgur.com/tIGD8EI.png" + }, + { + "imageUrl": "https://i.imgur.com/0CNIpZM.png" } ], "icon": "laravel-kit-icon.png", @@ -9812,8 +12368,8 @@ "#8790de", "#84b4f4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.900Z", - "readmeFetchedAt": "2018-05-14T15:02:45.430Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.447Z", + "readmeFetchedAt": "2019-02-08T00:07:45.324Z", "goodColorOnWhite": "#3152D0", "goodColorOnBlack": "#0C86F5", "faintColorOnWhite": "rgba(49, 82, 208, 0.1)", @@ -9857,6 +12413,50 @@ "app:laverna" ] }, + { + "objectID": "app-lbry-desktop", + "slug": "lbry-desktop", + "name": "LBRY Desktop", + "description": "LBRY is a free, open, and community-run digital marketplace.\nYou own your data. You control the network. Indeed, you are the network.\nHollywood films, college lessons, amazing streamers and more are on the first media network ruled by you.", + "website": "https://lbry.io", + "repository": "https://github.com/lbryio/lbry-desktop", + "keywords": [ + "Decentralized", + "LBRY", + "P2P Network", + "Digital Content Platform" + ], + "license": "MIT", + "category": "Entertainment", + "screenshots": [ + { + "imageUrl": "https://spee.ch/0/lbryhome.jpeg" + } + ], + "icon": "lbry-desktop-icon.png", + "icon32": "lbry-desktop-icon-32.png", + "icon64": "lbry-desktop-icon-64.png", + "icon128": "lbry-desktop-icon-128.png", + "icon256": "lbry-desktop-icon-256.png", + "date": "2018-08-11", + "iconColors": [ + "#145c4b", + "#f1f4f3", + "#7ea49b", + "#669489", + "#84aca4" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:27.435Z", + "readmeFetchedAt": "2019-02-08T00:07:45.463Z", + "goodColorOnWhite": "#145C4B", + "goodColorOnBlack": "#84ACA4", + "faintColorOnWhite": "rgba(20, 92, 75, 0.1)", + "keyValuePairs": [ + "is:app", + "app:LBRY Desktop", + "app:lbry-desktop" + ] + }, { "objectID": "app-lectrote", "slug": "lectrote", @@ -9884,8 +12484,8 @@ "#837cd8", "#ded4ee" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.976Z", - "readmeFetchedAt": "2018-05-14T15:02:45.418Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.516Z", + "readmeFetchedAt": "2019-02-08T00:07:45.516Z", "goodColorOnWhite": "#6B63D1", "goodColorOnBlack": "#837CD8", "faintColorOnWhite": "rgba(107, 99, 209, 0.1)", @@ -9973,8 +12573,8 @@ "#747474", "#848484" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.047Z", - "readmeFetchedAt": "2018-05-14T15:02:45.557Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.534Z", + "readmeFetchedAt": "2019-02-08T00:07:45.486Z", "goodColorOnWhite": "#343434", "goodColorOnBlack": "#CECECE", "faintColorOnWhite": "rgba(52, 52, 52, 0.1)", @@ -10021,8 +12621,8 @@ "#cc5454", "#5cccd4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:31.992Z", - "readmeFetchedAt": "2018-05-14T15:02:45.531Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.543Z", + "readmeFetchedAt": "2019-02-08T00:07:45.983Z", "goodColorOnWhite": "#CB232D", "goodColorOnBlack": "#5CCCD4", "faintColorOnWhite": "rgba(203, 35, 45, 0.1)", @@ -10070,6 +12670,7 @@ "name": "lightgallery", "description": "A modern, electron and nodejs based image viewer for Mac, Windows and Linux.", "website": "http://sachinchoolur.github.io/lightgallery-desktop/", + "homebrewCaskName": "lightgallery", "repository": "https://github.com/sachinchoolur/lightgallery-desktop", "keywords": [ "image", @@ -10096,8 +12697,8 @@ "#78c1e0", "#567c8c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.000Z", - "readmeFetchedAt": "2018-05-14T15:02:45.579Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.574Z", + "readmeFetchedAt": "2019-02-08T00:07:45.617Z", "goodColorOnWhite": "#1C6281", "goodColorOnBlack": "#24ABE3", "faintColorOnWhite": "rgba(28, 98, 129, 0.1)", @@ -10138,8 +12739,8 @@ "#6ca2ca", "#acc4dc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.057Z", - "readmeFetchedAt": "2018-05-14T15:02:45.646Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.595Z", + "readmeFetchedAt": "2019-02-08T00:07:45.594Z", "goodColorOnWhite": "#0564AC", "goodColorOnBlack": "#6CA2CA", "faintColorOnWhite": "rgba(5, 100, 172, 0.1)", @@ -10181,8 +12782,8 @@ "#a04804", "#bc5404" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.078Z", - "readmeFetchedAt": "2018-05-14T15:02:45.654Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.620Z", + "readmeFetchedAt": "2019-02-08T00:07:45.780Z", "goodColorOnWhite": "#BC5404", "goodColorOnBlack": "#FA7304", "faintColorOnWhite": "rgba(188, 84, 4, 0.1)", @@ -10192,6 +12793,49 @@ "app:lionshare" ] }, + { + "objectID": "app-lisk-hub", + "slug": "lisk-hub", + "name": "Lisk Hub", + "description": "Lisk graphical user interface for desktop", + "website": "http://lisk.io/hub", + "repository": "https://github.com/LiskHQ/lisk-hub", + "screenshots": [ + { + "imageUrl": "https://cdn-images-1.medium.com/max/1400/0*kD6gB4LkzkDDTbtI" + } + ], + "keywords": [ + "blockchain", + "cryptocurrency", + "wallet", + "token" + ], + "category": "Finance", + "icon": "lisk-hub-icon.png", + "icon32": "lisk-hub-icon-32.png", + "icon64": "lisk-hub-icon-64.png", + "icon128": "lisk-hub-icon-128.png", + "icon256": "lisk-hub-icon-256.png", + "date": "2018-09-19", + "iconColors": [ + "#08428b", + "#ebecec", + "#046edf", + "#71a4d6", + "#848484" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:27.638Z", + "readmeFetchedAt": "2019-02-08T00:07:45.708Z", + "goodColorOnWhite": "#046EDF", + "goodColorOnBlack": "#71A4D6", + "faintColorOnWhite": "rgba(4, 110, 223, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Lisk Hub", + "app:lisk-hub" + ] + }, { "objectID": "app-losslesscut", "slug": "losslesscut", @@ -10221,8 +12865,8 @@ "#365561", "#647782" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.076Z", - "readmeFetchedAt": "2018-05-14T15:02:45.667Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.689Z", + "readmeFetchedAt": "2019-02-08T00:07:45.794Z", "goodColorOnWhite": "#0E353B", "goodColorOnBlack": "#22A0B8", "faintColorOnWhite": "rgba(14, 53, 59, 0.1)", @@ -10232,6 +12876,57 @@ "app:losslesscut" ] }, + { + "objectID": "app-lps-studio", + "slug": "lps-studio", + "name": "LPS Studio", + "description": "Interactive storytelling tool for visualising LPS programs using Logic Production System", + "website": "https://lps.is.org/", + "repository": "https://github.com/mauris/lps-studio", + "keywords": [ + "visualization", + "visualisation", + "lps", + "logic", + "production system", + "html5", + "canvas", + "electron", + "graphics", + "runtime environment", + "interpreter", + "compiler", + "illustration", + "storytelling", + "logic programming", + "logic production system", + "production system" + ], + "category": "Developer Tools", + "icon": "lps-studio-icon.png", + "icon32": "lps-studio-icon-32.png", + "icon64": "lps-studio-icon-64.png", + "icon128": "lps-studio-icon-128.png", + "icon256": "lps-studio-icon-256.png", + "date": "2018-09-12", + "iconColors": [ + "#b96f10", + "#207183", + "#f7f8f8", + "#686c40", + "#4c5c3c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:27.668Z", + "readmeFetchedAt": "2019-02-08T00:07:45.891Z", + "goodColorOnWhite": "#207183", + "goodColorOnBlack": "#B96F10", + "faintColorOnWhite": "rgba(32, 113, 131, 0.1)", + "keyValuePairs": [ + "is:app", + "app:LPS Studio", + "app:lps-studio" + ] + }, { "objectID": "app-luna", "slug": "luna", @@ -10240,7 +12935,7 @@ "repository": "https://github.com/rvpanoz/luna", "screenshots": [ { - "imageUrl": "https://github.com/rvpanoz/luna/blob/master/luna-icon.png", + "imageUrl": "https://raw.githubusercontent.com/rvpanoz/luna/f89f72493c11e4222d7fb9c77945f9fad7d7b621/luna-icon.png", "caption": "luna - npm management" } ], @@ -10263,8 +12958,8 @@ "#fcaca4", "#f47c74" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.103Z", - "readmeFetchedAt": "2018-05-14T15:02:45.747Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.748Z", + "readmeFetchedAt": "2019-02-08T00:07:46.366Z", "goodColorOnWhite": "#DA1A07", "goodColorOnBlack": "#FCACA4", "faintColorOnWhite": "rgba(218, 26, 7, 0.1)", @@ -10274,6 +12969,43 @@ "app:luna" ] }, + { + "objectID": "app-magiccap", + "slug": "magiccap", + "name": "MagicCap", + "description": "A image capture suite for Mac and Linux.", + "repository": "https://github.com/MagicCap/MagicCap", + "keywords": [ + "screenshot", + "upload", + "productivity", + "capture" + ], + "category": "Productivity", + "icon": "magiccap-icon.png", + "icon32": "magiccap-icon-32.png", + "icon64": "magiccap-icon-64.png", + "icon128": "magiccap-icon-128.png", + "icon256": "magiccap-icon-256.png", + "date": "2019-01-10", + "iconColors": [ + "#734d7d", + "#fbfbfb", + "#858ab5", + "#bc7c8c", + "#bc848c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:27.772Z", + "readmeFetchedAt": "2019-02-08T00:07:46.017Z", + "goodColorOnWhite": "#734D7D", + "goodColorOnBlack": "#BC7C8C", + "faintColorOnWhite": "rgba(115, 77, 125, 0.1)", + "keyValuePairs": [ + "is:app", + "app:MagicCap", + "app:magiccap" + ] + }, { "objectID": "app-mailspring", "slug": "mailspring", @@ -10310,8 +13042,8 @@ "#41a4b2", "#169faf" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.245Z", - "readmeFetchedAt": "2018-05-14T15:02:45.774Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.763Z", + "readmeFetchedAt": "2019-02-08T00:07:46.109Z", "goodColorOnWhite": "#12828F", "goodColorOnBlack": "#169FAF", "faintColorOnWhite": "rgba(18, 130, 143, 0.1)", @@ -10491,8 +13223,8 @@ "#d4d0dd", "#ac9cdc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.218Z", - "readmeFetchedAt": "2018-05-14T15:02:46.299Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.773Z", + "readmeFetchedAt": "2019-02-08T00:07:46.186Z", "goodColorOnWhite": "#864DC5", "goodColorOnBlack": "#CBAFE4", "faintColorOnWhite": "rgba(134, 77, 197, 0.1)", @@ -10535,6 +13267,51 @@ "app:mapbox" ] }, + { + "objectID": "app-markdown-c3", + "slug": "markdown-c3", + "name": "Markdown C3", + "description": "A Markdown Editor and Previewer built with Construct 3 and ElectronJs", + "repository": "https://github.com/el3um4s/markdown-c3/blob/master/README.md", + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/el3um4s/markdown-c3/master/img/screenshot.png" + }, + { + "imageUrl": "https://raw.githubusercontent.com/el3um4s/markdown-c3/master/img/animated-demo.gif" + } + ], + "keywords": [ + "markdwown", + "construct3", + "showdownjs" + ], + "category": "Productivity", + "license": "MIT", + "icon": "markdown-c3-icon.png", + "icon32": "markdown-c3-icon-32.png", + "icon64": "markdown-c3-icon-64.png", + "icon128": "markdown-c3-icon-128.png", + "icon256": "markdown-c3-icon-256.png", + "date": "2018-12-01", + "iconColors": [ + "#93acbc", + "#fbfbfb", + "#05e3cc", + "#b4becd", + "#57e2d5" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:27.897Z", + "readmeFetchedAt": "2019-02-08T00:07:46.218Z", + "goodColorOnWhite": "#038275", + "goodColorOnBlack": "#05E3CC", + "faintColorOnWhite": "rgba(3, 130, 117, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Markdown C3", + "app:markdown-c3" + ] + }, { "objectID": "app-markdown-explorer", "slug": "markdown-explorer", @@ -10573,8 +13350,8 @@ "#777a95", "#595f80" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.207Z", - "readmeFetchedAt": "2018-05-14T15:02:45.834Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.875Z", + "readmeFetchedAt": "2019-02-08T00:07:46.317Z", "goodColorOnWhite": "#160B2A", "goodColorOnBlack": "#C6CAF7", "faintColorOnWhite": "rgba(22, 11, 42, 0.1)", @@ -10637,7 +13414,7 @@ "category": "Productivity", "screenshots": [ { - "imageUrl": "https://raw.githubusercontent.com/amitmerchant1990/electron-markdownify/master/img/markdownify.gif" + "imageUrl": "https://raw.githubusercontent.com/amitmerchant1990/electron-markdownify/66b9deb21d80e4053e950557e148ae0ed5bf99f2/img/markdownify.gif" } ], "icon": "markdownify-icon.png", @@ -10653,8 +13430,8 @@ "#641c74", "#b30d65" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.773Z", - "readmeFetchedAt": "2018-05-14T15:02:45.877Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.870Z", + "readmeFetchedAt": "2019-02-08T00:07:46.346Z", "goodColorOnWhite": "#B30D65", "goodColorOnBlack": "#FA055D", "faintColorOnWhite": "rgba(179, 13, 101, 0.1)", @@ -10695,8 +13472,8 @@ "#389cdc", "#389cdc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.305Z", - "readmeFetchedAt": "2018-05-14T15:02:45.896Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.874Z", + "readmeFetchedAt": "2019-02-08T00:07:46.377Z", "goodColorOnWhite": "#1D73A8", "goodColorOnBlack": "#349CDC", "faintColorOnWhite": "rgba(29, 115, 168, 0.1)", @@ -10722,7 +13499,7 @@ "repository": "https://github.com/marktext/marktext", "screenshots": [ { - "imageUrl": "https://github.com/marktext/marktext/raw/master/static/logo-small.png" + "imageUrl": "https://raw.githubusercontent.com/marktext/marktext/301722f3d3c703c2d92859df4cc7546e199aa116/static/logo-small.png" } ], "icon": "marktext-icon.png", @@ -10738,8 +13515,8 @@ "#080404", "#080404" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.340Z", - "readmeFetchedAt": "2018-05-14T15:02:45.970Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.983Z", + "readmeFetchedAt": "2019-02-08T00:07:46.509Z", "goodColorOnWhite": "#080404", "goodColorOnBlack": "#FFF", "faintColorOnWhite": "rgba(8, 4, 4, 0.1)", @@ -10782,8 +13559,8 @@ "#84c4e2", "#a0b4c4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.307Z", - "readmeFetchedAt": "2018-05-14T15:02:45.953Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.933Z", + "readmeFetchedAt": "2019-02-08T00:07:46.476Z", "goodColorOnWhite": "#0973AA", "goodColorOnBlack": "#0B8CCF", "faintColorOnWhite": "rgba(9, 115, 170, 0.1)", @@ -10867,8 +13644,8 @@ "#288cd4", "#288cd4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.416Z", - "readmeFetchedAt": "2018-05-14T15:02:46.029Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.982Z", + "readmeFetchedAt": "2019-02-08T00:07:46.487Z", "goodColorOnWhite": "#1D72AD", "goodColorOnBlack": "#248CD4", "faintColorOnWhite": "rgba(29, 114, 173, 0.1)", @@ -10942,8 +13719,8 @@ "#080404", "#080404" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.403Z", - "readmeFetchedAt": "2018-05-14T15:02:46.066Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:27.990Z", + "readmeFetchedAt": "2019-02-08T00:07:46.524Z", "goodColorOnWhite": "#080404", "goodColorOnBlack": "#FFF", "faintColorOnWhite": "rgba(8, 4, 4, 0.1)", @@ -11060,8 +13837,8 @@ "#946c04", "#c49c04" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.428Z", - "readmeFetchedAt": "2018-05-14T15:02:46.079Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.032Z", + "readmeFetchedAt": "2019-02-08T00:07:46.646Z", "goodColorOnWhite": "#946C04", "goodColorOnBlack": "#FBC604", "faintColorOnWhite": "rgba(148, 108, 4, 0.1)", @@ -11100,8 +13877,8 @@ "#04f1ce", "#04dfd5" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.500Z", - "readmeFetchedAt": "2018-05-14T15:02:46.149Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.076Z", + "readmeFetchedAt": "2019-02-08T00:07:46.708Z", "goodColorOnWhite": "#037599", "goodColorOnBlack": "#04B3EA", "faintColorOnWhite": "rgba(3, 117, 153, 0.1)", @@ -11111,6 +13888,249 @@ "app:messenger-demo-viewer" ] }, + { + "objectID": "app-metastream", + "slug": "metastream", + "name": "Metastream", + "description": "Watch streaming media with friends", + "website": "https://getmetastream.com", + "repository": "https://github.com/samuelmaddock/metastream", + "category": "Photo & Video", + "keywords": [ + "media-player", + "media", + "player", + "video", + "streaming", + "music", + "audio", + "browser", + "p2p" + ], + "license": "MIT", + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/samuelmaddock/metastream/master/resources/screenshots/screenshot1.png" + }, + { + "imageUrl": "https://raw.githubusercontent.com/samuelmaddock/metastream/master/resources/screenshots/screenshot2.png" + }, + { + "imageUrl": "https://raw.githubusercontent.com/samuelmaddock/metastream/master/resources/screenshots/screenshot3.png" + } + ], + "icon": "metastream-icon.png", + "icon32": "metastream-icon-32.png", + "icon64": "metastream-icon-64.png", + "icon128": "metastream-icon-128.png", + "icon256": "metastream-icon-256.png", + "date": "2018-10-22", + "iconColors": [ + "#eabfb5", + "#978bad", + "#fbfbfb", + "#b89cb4", + "#ecdee3" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:28.075Z", + "readmeFetchedAt": "2019-02-08T00:07:46.674Z", + "goodColorOnWhite": "#BD4F36", + "goodColorOnBlack": "#EABFB5", + "faintColorOnWhite": "rgba(189, 79, 54, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Metastream", + "app:metastream" + ] + }, + { + "objectID": "app-metrogit", + "slug": "metrogit", + "name": "MetroGit", + "description": "Native desktop git client that integrates with JIRA and other tools.", + "category": "Developer Tools", + "repository": "https://github.com/Yamazaki93/MetroGit", + "keywords": [ + "git", + "jira", + "appveyor", + "angular", + "nodegit" + ], + "screenshots": [ + { + "imageUrl": "https://github.com/Yamazaki93/MetroGit/raw/master/misc/metrogit1.PNG", + "caption": "Metro styled git UI", + "imageLink": "https://github.com/Yamazaki93/MetroGit" + }, + { + "imageUrl": "https://github.com/Yamazaki93/MetroGit/raw/master/misc/metrogit2.PNG", + "caption": "Detailed file diff view with selective staging", + "imageLink": "https://github.com/Yamazaki93/MetroGit" + }, + { + "imageUrl": "https://github.com/Yamazaki93/MetroGit/raw/master/misc/metrogit3.PNG", + "caption": "Multiple file diff window", + "imageLink": "https://github.com/Yamazaki93/MetroGit" + }, + { + "imageUrl": "https://github.com/Yamazaki93/MetroGit/raw/master/misc/metrogit4.PNG", + "caption": "Native JIRA integration", + "imageLink": "https://github.com/Yamazaki93/MetroGit" + }, + { + "imageUrl": "https://github.com/Yamazaki93/MetroGit/raw/master/misc/metrogit5.PNG", + "caption": "Map integrated CI build status", + "imageLink": "https://github.com/Yamazaki93/MetroGit" + } + ], + "icon": "metrogit-icon.png", + "icon32": "metrogit-icon-32.png", + "icon64": "metrogit-icon-64.png", + "icon128": "metrogit-icon-128.png", + "icon256": "metrogit-icon-256.png", + "date": "2018-07-16", + "iconColors": [ + "#f8f8f9", + "#202838", + "#848c94", + "#747c84", + "#5f6870" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:28.069Z", + "readmeFetchedAt": "2019-02-08T00:07:46.656Z", + "goodColorOnWhite": "#202838", + "goodColorOnBlack": "#F8F8F9", + "faintColorOnWhite": "rgba(32, 40, 56, 0.1)", + "keyValuePairs": [ + "is:app", + "app:MetroGit", + "app:metrogit" + ] + }, + { + "objectID": "app-metronome-wallet", + "slug": "metronome-wallet", + "name": "Metronome Wallet", + "description": "Desktop wallet for Metronome (MET) token.", + "website": "https://metronome.io/apps", + "category": "Finance", + "repository": "https://github.com/autonomoussoftware/metronome-wallet-desktop", + "keywords": [ + "metronome", + "wallet", + "token", + "eth", + "ethereum", + "blokchain", + "erc20" + ], + "license": "MIT", + "screenshots": [ + { + "imageUrl": "https://metronome.io/images/metronome-apps-demo@2x.png", + "caption": "Metronome Desktop Wallet", + "imageLink": "https://metronome.io/apps/" + } + ], + "icon": "metronome-wallet-icon.png", + "icon32": "metronome-wallet-icon-32.png", + "icon64": "metronome-wallet-icon-64.png", + "icon128": "metronome-wallet-icon-128.png", + "icon256": "metronome-wallet-icon-256.png", + "date": "2018-08-09", + "iconColors": [ + "#f6f6f8", + "#6547f3", + "#9e8cec", + "#8c74eb", + "#b4a4f4" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:28.119Z", + "readmeFetchedAt": "2019-02-08T00:07:46.787Z", + "goodColorOnWhite": "#6547F3", + "goodColorOnBlack": "#B4A4F4", + "faintColorOnWhite": "rgba(101, 71, 243, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Metronome Wallet", + "app:metronome-wallet" + ] + }, + { + "objectID": "app-metube", + "slug": "metube", + "name": "MeTube", + "description": "listen to music from YouTube", + "category": "Music", + "repository": "https://github.com/kimyearho/MeTube", + "keywords": [ + "Youtube", + "Music", + "Audio", + "Video", + "Electron", + "Desktop", + "Music-Player", + "Audio-Player" + ], + "icon": "metube-icon.png", + "icon32": "metube-icon-32.png", + "icon64": "metube-icon-64.png", + "icon128": "metube-icon-128.png", + "icon256": "metube-icon-256.png", + "date": "2018-09-19", + "iconColors": [ + "#dc2424", + "#fbf9f9", + "#e67171", + "#ec9494", + "#ec8c8c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:28.152Z", + "readmeFetchedAt": "2019-02-08T00:07:46.815Z", + "goodColorOnWhite": "#DC2424", + "goodColorOnBlack": "#EC8C8C", + "faintColorOnWhite": "rgba(220, 36, 36, 0.1)", + "keyValuePairs": [ + "is:app", + "app:MeTube", + "app:metube" + ] + }, + { + "objectID": "app-microsoft-teams", + "slug": "microsoft-teams", + "name": "Microsoft Teams", + "description": "Platform that combines workplace chat, meetings, notes, and attachments.", + "website": "https://products.office.com/en-us/microsoft-teams/group-chat-software", + "license": "Proprietary", + "keywords": [ + "teams" + ], + "category": "Business", + "icon": "microsoft-teams-icon.png", + "icon32": "microsoft-teams-icon-32.png", + "icon64": "microsoft-teams-icon-64.png", + "icon128": "microsoft-teams-icon-128.png", + "icon256": "microsoft-teams-icon-256.png", + "date": "2019-01-18", + "iconColors": [ + "#5454ac", + "#fbfbfb", + "#acacd7", + "#9192cc", + "#a4acd4" + ], + "goodColorOnWhite": "#5454AC", + "goodColorOnBlack": "#9192CC", + "faintColorOnWhite": "rgba(84, 84, 172, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Microsoft Teams", + "app:microsoft-teams" + ] + }, { "objectID": "app-microstockr", "slug": "microstockr", @@ -11174,8 +14194,8 @@ "#a080a4", "#9aa4b8" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.505Z", - "readmeFetchedAt": "2018-05-14T15:02:46.160Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.162Z", + "readmeFetchedAt": "2019-02-08T00:07:46.796Z", "goodColorOnWhite": "#9A6803", "goodColorOnBlack": "#FBAD0C", "faintColorOnWhite": "rgba(154, 104, 3, 0.1)", @@ -11185,6 +14205,47 @@ "app:min" ] }, + { + "objectID": "app-mindmapp", + "slug": "mindmapp", + "name": "Mindmapp", + "description": "Draw effective mind maps in a few minutes.", + "website": "https://mindmapp.org", + "repository": "https://github.com/Mindmapp/mindmapp", + "keywords": [ + "map", + "mind", + "mindmapp", + "organization", + "memorise", + "productivity" + ], + "license": "MIT", + "category": "Productivity", + "icon": "mindmapp-icon.png", + "icon32": "mindmapp-icon-32.png", + "icon64": "mindmapp-icon-64.png", + "icon128": "mindmapp-icon-128.png", + "icon256": "mindmapp-icon-256.png", + "date": "2018-06-18", + "iconColors": [ + "#fbfbfb", + "#049a8f", + "#5abdb8", + "#38a7ac", + "#74d4c2" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:28.163Z", + "readmeFetchedAt": "2019-02-08T00:07:46.809Z", + "goodColorOnWhite": "#037D74", + "goodColorOnBlack": "#049A8F", + "faintColorOnWhite": "rgba(3, 125, 116, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Mindmapp", + "app:mindmapp" + ] + }, { "objectID": "app-minetime", "slug": "minetime", @@ -11215,8 +14276,8 @@ "#acacac", "#c9c9c9" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.558Z", - "readmeFetchedAt": "2018-05-14T15:02:46.170Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.211Z", + "readmeFetchedAt": "2019-02-08T00:07:46.901Z", "goodColorOnWhite": "#737373", "goodColorOnBlack": "#F6F6F6", "faintColorOnWhite": "rgba(115, 115, 115, 0.1)", @@ -11253,8 +14314,8 @@ "#444444", "#646464" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.550Z", - "readmeFetchedAt": "2018-05-14T15:02:46.223Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.236Z", + "readmeFetchedAt": "2019-02-08T00:07:46.919Z", "goodColorOnWhite": "#040404", "goodColorOnBlack": "#F9F9F9", "faintColorOnWhite": "rgba(4, 4, 4, 0.1)", @@ -11295,8 +14356,8 @@ "#ac94d4", "#8454c4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.583Z", - "readmeFetchedAt": "2018-05-14T15:02:46.233Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.236Z", + "readmeFetchedAt": "2019-02-08T00:07:46.893Z", "goodColorOnWhite": "#5C32B1", "goodColorOnBlack": "#AC94D4", "faintColorOnWhite": "rgba(92, 50, 177, 0.1)", @@ -11312,6 +14373,7 @@ "name": "Missive", "description": "The one app for team email and chat.", "website": "https://missiveapp.com", + "homebrewCaskName": "missive", "keywords": [ "team", "shared", @@ -11413,8 +14475,8 @@ "#8f9aab", "#a4b4c0" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.594Z", - "readmeFetchedAt": "2018-05-14T15:02:46.277Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.259Z", + "readmeFetchedAt": "2019-02-08T00:07:46.915Z", "goodColorOnWhite": "#46648D", "goodColorOnBlack": "#6382A4", "faintColorOnWhite": "rgba(70, 100, 141, 0.1)", @@ -11487,8 +14549,8 @@ "#ec7474", "#f4a49c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.664Z", - "readmeFetchedAt": "2018-05-14T15:02:46.329Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.289Z", + "readmeFetchedAt": "2019-02-08T00:07:47.007Z", "goodColorOnWhite": "#DA2714", "goodColorOnBlack": "#F3897E", "faintColorOnWhite": "rgba(218, 39, 20, 0.1)", @@ -11498,6 +14560,49 @@ "app:mjml-app" ] }, + { + "objectID": "app-mobile-locker", + "slug": "mobile-locker", + "name": "Mobile Locker", + "description": "Simple sales enablement.", + "youtube_video_url": "https://www.youtube.com/watch?v=76MBKJrMEn0", + "website": "https://www.mobilelocker.com/", + "category": "Business", + "keywords": [ + "sales", + "sales enablement", + "CRM", + "marketing" + ], + "screenshots": [ + { + "imageUrl": "https://teams.mobilelocker.com/demo_team/assets/mobilelocker-electron-mac.png", + "caption": "Mobile Locker for macOS", + "imageLink": "https://www.mobilelocker.com/?utm_source=github&utm_medium=repo&utm_campaign=electron-apps" + } + ], + "icon": "mobile-locker-icon.png", + "icon32": "mobile-locker-icon-32.png", + "icon64": "mobile-locker-icon-64.png", + "icon128": "mobile-locker-icon-128.png", + "icon256": "mobile-locker-icon-256.png", + "date": "2019-01-22", + "iconColors": [ + "#1494b4", + "#04344c", + "#0c9898", + "#0c9898", + "#0c9898" + ], + "goodColorOnWhite": "#04344C", + "goodColorOnBlack": "#0C9898", + "faintColorOnWhite": "rgba(4, 52, 76, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Mobile Locker", + "app:mobile-locker" + ] + }, { "objectID": "app-mobirise", "slug": "mobirise", @@ -11524,8 +14629,8 @@ "#f0346c", "#f0346c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.665Z", - "readmeFetchedAt": "2018-05-14T15:02:46.456Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.294Z", + "readmeFetchedAt": "2019-02-08T00:07:47.349Z", "goodColorOnWhite": "#DA104C", "goodColorOnBlack": "#F0346C", "faintColorOnWhite": "rgba(218, 16, 76, 0.1)", @@ -11569,8 +14674,8 @@ "#1894dc", "#1894dc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.704Z", - "readmeFetchedAt": "2018-05-14T15:02:46.537Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.321Z", + "readmeFetchedAt": "2019-02-08T00:07:47.093Z", "goodColorOnWhite": "#0975AE", "goodColorOnBlack": "#0C94DC", "faintColorOnWhite": "rgba(9, 117, 174, 0.1)", @@ -11612,6 +14717,43 @@ "app:mockingbot" ] }, + { + "objectID": "app-mockman", + "slug": "mockman", + "name": "Mockman", + "description": "Manage and start the mock servers on your local platform easily.", + "category": "Developer Tools", + "repository": "https://github.com/LanceGin/Mockman", + "keywords": [ + "mock-server", + "api-mock", + "vue" + ], + "license": "AGPL", + "icon": "mockman-icon.png", + "icon32": "mockman-icon-32.png", + "icon64": "mockman-icon-64.png", + "icon128": "mockman-icon-128.png", + "icon256": "mockman-icon-256.png", + "date": "2018-10-11", + "iconColors": [ + "#25cdd7", + "#f9fbfb", + "#79dee4", + "#3aecec", + "#4adfe3" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:28.341Z", + "readmeFetchedAt": "2019-02-08T00:07:47.067Z", + "goodColorOnWhite": "#0D8282", + "goodColorOnBlack": "#3AECEC", + "faintColorOnWhite": "rgba(13, 130, 130, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Mockman", + "app:mockman" + ] + }, { "objectID": "app-mockoon", "slug": "mockoon", @@ -11629,7 +14771,7 @@ ], "screenshots": [ { - "imageUrl": "https://mockoon.com/images/main.jpg", + "imageUrl": "https://mockoon.com/assets/images/main.jpg", "caption": "Application main view", "imageLink": "https://mockoon.com" } @@ -11647,8 +14789,8 @@ "#84848c", "#747c7c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.737Z", - "readmeFetchedAt": "2018-05-14T15:02:46.514Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.402Z", + "readmeFetchedAt": "2019-02-08T00:07:47.110Z", "goodColorOnWhite": "#242C34", "goodColorOnBlack": "#94949C", "faintColorOnWhite": "rgba(36, 44, 52, 0.1)", @@ -11692,8 +14834,8 @@ "#a9a9a9", "#949494" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.744Z", - "readmeFetchedAt": "2018-05-14T15:02:46.547Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.361Z", + "readmeFetchedAt": "2019-02-08T00:07:47.372Z", "goodColorOnWhite": "#313131", "goodColorOnBlack": "#F3F3F3", "faintColorOnWhite": "rgba(49, 49, 49, 0.1)", @@ -11734,8 +14876,8 @@ "#f4cc32", "#fcd57e" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.802Z", - "readmeFetchedAt": "2018-05-14T15:02:46.523Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.394Z", + "readmeFetchedAt": "2019-02-08T00:07:47.213Z", "goodColorOnWhite": "#8F6603", "goodColorOnBlack": "#FBCC5B", "faintColorOnWhite": "rgba(143, 102, 3, 0.1)", @@ -11775,8 +14917,8 @@ "#30f404", "#30f404" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.824Z", - "readmeFetchedAt": "2018-05-14T15:02:46.638Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.420Z", + "readmeFetchedAt": "2019-02-08T00:07:47.352Z", "goodColorOnWhite": "#188302", "goodColorOnBlack": "#2CF404", "faintColorOnWhite": "rgba(24, 131, 2, 0.1)", @@ -11820,8 +14962,8 @@ "#5f3b19", "#b4d81c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.978Z", - "readmeFetchedAt": "2018-05-14T15:02:47.153Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.574Z", + "readmeFetchedAt": "2019-02-08T00:07:47.501Z", "goodColorOnWhite": "#5F3B19", "goodColorOnBlack": "#96BC19", "faintColorOnWhite": "rgba(95, 59, 25, 0.1)", @@ -11934,8 +15076,8 @@ "#9c9ca4", "#9494a4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.835Z", - "readmeFetchedAt": "2018-05-14T15:02:46.710Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.469Z", + "readmeFetchedAt": "2019-02-08T00:07:47.522Z", "goodColorOnWhite": "#2C2C3C", "goodColorOnBlack": "#949CA4", "faintColorOnWhite": "rgba(44, 44, 60, 0.1)", @@ -11945,6 +15087,177 @@ "app:montenote" ] }, + { + "objectID": "app-moonitor", + "slug": "moonitor", + "name": "Moonitor", + "description": "elegant cryptocurrencies tracker with exchanges API key support", + "website": "https://moonitor.io", + "category": "Finance", + "homebrewCaskName": "moonitor", + "keywords": [ + "bitcoin", + "ethereum", + "litecoin", + "altcoins", + "cryptocurrency", + "crypto tracker" + ], + "screenshots": [ + { + "imageUrl": "https://i.imgur.com/DWSiEEt.png", + "caption": "main window" + }, + { + "imageUrl": "https://i.imgur.com/zouQj1U.png", + "caption": "coins management" + }, + { + "imageUrl": "https://i.imgur.com/QMBE8z0.png", + "caption": "coins management" + } + ], + "icon": "moonitor-icon.png", + "icon32": "moonitor-icon-32.png", + "icon64": "moonitor-icon-64.png", + "icon128": "moonitor-icon-128.png", + "icon256": "moonitor-icon-256.png", + "date": "2018-07-11", + "iconColors": [ + "#d3d2b9", + "#2f9882", + "#8f968c", + "#dc3d5d", + "#7c7a60" + ], + "goodColorOnWhite": "#D6274A", + "goodColorOnBlack": "#DC3D5D", + "faintColorOnWhite": "rgba(214, 39, 74, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Moonitor", + "app:moonitor" + ] + }, + { + "objectID": "app-movieprint", + "slug": "movieprint", + "name": "MoviePrint", + "description": "With MoviePrint you can create screenshots of entire movies in an instant.", + "website": "https://movieprint.fakob.com", + "category": "Photo & Video", + "repository": "https://github.com/fakob/MoviePrint_v004", + "keywords": [ + "MoviePrint", + "screenshot", + "movie", + "film", + "image", + "contact sheet", + "index print", + "thumbnail view" + ], + "license": "MIT", + "screenshots": [ + { + "imageUrl": "https://movieprint.fakob.com/wp-content/uploads/2018/09/Screen-Shot-2018-09-11-at-19.00.59.jpg" + }, + { + "imageUrl": "https://movieprint.fakob.com/wp-content/uploads/2018/09/Screen-Shot-2018-09-11-at-19.01.55.jpg" + }, + { + "imageUrl": "https://movieprint.fakob.com/wp-content/uploads/2018/09/Screen-Shot-2018-09-11-at-18.56.42.jpg" + }, + { + "imageUrl": "https://movieprint.fakob.com/wp-content/uploads/2018/09/Screen-Shot-2018-09-11-at-18.55.53.jpg" + }, + { + "imageUrl": "https://movieprint.fakob.com/wp-content/uploads/2018/09/Screen-Shot-2018-09-11-at-19.00.29.jpg" + }, + { + "imageUrl": "https://movieprint.fakob.com/wp-content/uploads/2018/09/Screen-Shot-2018-09-11-at-19.04.35.jpg" + }, + { + "imageUrl": "https://movieprint.fakob.com/wp-content/uploads/2018/09/Screen-Shot-2018-09-11-at-19.05.28.jpg" + }, + { + "imageUrl": "https://movieprint.fakob.com/wp-content/uploads/2018/09/Screen-Shot-2018-09-11-at-18.57.14.jpg" + }, + { + "imageUrl": "https://movieprint.fakob.com/wp-content/uploads/2018/09/Screen-Shot-2018-09-11-at-19.22.03.jpg" + } + ], + "icon": "movieprint-icon.png", + "icon32": "movieprint-icon-32.png", + "icon64": "movieprint-icon-64.png", + "icon128": "movieprint-icon-128.png", + "icon256": "movieprint-icon-256.png", + "date": "2018-10-28", + "iconColors": [ + "#f9f0ec", + "#070707", + "#f45408", + "#848484", + "#7c7c7c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:28.465Z", + "readmeFetchedAt": "2019-02-08T00:07:47.564Z", + "goodColorOnWhite": "#070707", + "goodColorOnBlack": "#F45408", + "faintColorOnWhite": "rgba(7, 7, 7, 0.1)", + "keyValuePairs": [ + "is:app", + "app:MoviePrint", + "app:movieprint" + ] + }, + { + "objectID": "app-moviescores", + "slug": "moviescores", + "name": "Movie Scores", + "description": "Find great movies. Metacritic, Rotten Tomatoes & IMDb ratings in one place. Electron version available for Mac and Windows 10. Also avaiable for web, iOS and Android.", + "website": "http://moviescores.dconnell.co.uk/", + "keywords": [ + "movies", + "video", + "tv", + "imdb", + "free", + "trailers", + "metacritic", + "rotten", + "tomatoes", + "shows", + "television", + "reviews", + "ratings", + "best", + "film", + "films" + ], + "category": "Entertainment", + "icon": "moviescores-icon.png", + "icon32": "moviescores-icon-32.png", + "icon64": "moviescores-icon-64.png", + "icon128": "moviescores-icon-128.png", + "icon256": "moviescores-icon-256.png", + "date": "2018-09-17", + "iconColors": [ + "#364458", + "#d07651", + "#60975a", + "#79524d", + "#547464" + ], + "goodColorOnWhite": "#364458", + "goodColorOnBlack": "#D07651", + "faintColorOnWhite": "rgba(54, 68, 88, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Movie Scores", + "app:moviescores" + ] + }, { "objectID": "app-mstream", "slug": "mstream", @@ -11979,8 +15292,8 @@ "#548898", "#548898" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.885Z", - "readmeFetchedAt": "2018-05-14T15:02:46.635Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.521Z", + "readmeFetchedAt": "2019-02-08T00:07:47.540Z", "goodColorOnWhite": "#244C7C", "goodColorOnBlack": "#6484B4", "faintColorOnWhite": "rgba(36, 76, 124, 0.1)", @@ -12020,8 +15333,8 @@ "#ededed", "#4484bc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.891Z", - "readmeFetchedAt": "2018-05-14T15:02:46.717Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.565Z", + "readmeFetchedAt": "2019-02-08T00:07:47.590Z", "goodColorOnWhite": "#386C9C", "goodColorOnBlack": "#4A92D2", "faintColorOnWhite": "rgba(56, 108, 156, 0.1)", @@ -12058,8 +15371,8 @@ "#04748c", "#0c4454" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.917Z", - "readmeFetchedAt": "2018-05-14T15:02:46.734Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.574Z", + "readmeFetchedAt": "2019-02-08T00:07:47.636Z", "goodColorOnWhite": "#045E79", "goodColorOnBlack": "#04B2E1", "faintColorOnWhite": "rgba(4, 94, 121, 0.1)", @@ -12075,7 +15388,7 @@ "name": "Museeks", "description": "A simple, clean and cross-platform music player", "website": "http://museeks.io/", - "repository": "https://github.com/KeitIG/museeks", + "repository": "https://github.com/martpie/museeks", "keywords": [ "music", "audio", @@ -12085,7 +15398,7 @@ "category": "Music", "screenshots": [ { - "imageUrl": "https://raw.githubusercontent.com/KeitIG/museeks/master/screenshot.png" + "imageUrl": "https://raw.githubusercontent.com/martpie/museeks/master/screenshot.png" } ], "icon": "museeks-icon.png", @@ -12101,8 +15414,8 @@ "#2c80a9", "#44c4eb" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.274Z", - "readmeFetchedAt": "2018-05-14T15:02:46.847Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.592Z", + "readmeFetchedAt": "2019-02-08T00:07:47.684Z", "goodColorOnWhite": "#1180A2", "goodColorOnBlack": "#44C4EB", "faintColorOnWhite": "rgba(17, 128, 162, 0.1)", @@ -12112,6 +15425,92 @@ "app:museeks" ] }, + { + "objectID": "app-music-player", + "slug": "music-player", + "name": "music-player", + "description": "Open-Source Audio Player that supports a variety of formats", + "website": "https://aveek-saha.github.io/", + "repository": "https://github.com/Aveek-Saha/MusicPlayer", + "keywords": [ + "audio", + "music", + "song", + "album", + "mp3", + "audiophile" + ], + "category": "Music", + "icon": "music-player-icon.png", + "icon32": "music-player-icon-32.png", + "icon64": "music-player-icon-64.png", + "icon128": "music-player-icon-128.png", + "icon256": "music-player-icon-256.png", + "date": "2018-05-22", + "iconColors": [ + "#ee4747", + "#efeded", + "#1d4444", + "#546464", + "#f49c9c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:28.642Z", + "readmeFetchedAt": "2019-02-08T00:07:47.653Z", + "goodColorOnWhite": "#1D4444", + "goodColorOnBlack": "#EE4747", + "faintColorOnWhite": "rgba(29, 68, 68, 0.1)", + "keyValuePairs": [ + "is:app", + "app:music-player", + "app:music-player" + ] + }, + { + "objectID": "app-musictube-player", + "slug": "musictube-player", + "name": "MusicTube Player", + "description": "This is a Desktop application for YouTube Music", + "category": "Music", + "repository": "https://github.com/simon-fraser/MusicTube-Player", + "keywords": [ + "youtube", + "music", + "audio", + "media", + "player", + "desktop", + "gui", + "playlist" + ], + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/simon-fraser/MusicTube-Player/master/assets/pics/start-screenshot.png" + } + ], + "icon": "musictube-player-icon.png", + "icon32": "musictube-player-icon-32.png", + "icon64": "musictube-player-icon-64.png", + "icon128": "musictube-player-icon-128.png", + "icon256": "musictube-player-icon-256.png", + "date": "2018-08-28", + "iconColors": [ + "#c0165f", + "#dc175d", + "#a11564", + "#d4185e", + "#ac1664" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:28.652Z", + "readmeFetchedAt": "2019-02-08T00:07:47.721Z", + "goodColorOnWhite": "#DC175D", + "goodColorOnBlack": "#E8256A", + "faintColorOnWhite": "rgba(220, 23, 93, 0.1)", + "keyValuePairs": [ + "is:app", + "app:MusicTube Player", + "app:musictube-player" + ] + }, { "objectID": "app-musify", "slug": "musify", @@ -12139,8 +15538,8 @@ "#5c5c5c", "#6d2424" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:32.940Z", - "readmeFetchedAt": "2018-05-14T15:02:46.835Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.679Z", + "readmeFetchedAt": "2019-02-08T00:07:47.769Z", "goodColorOnWhite": "#D93C3C", "goodColorOnBlack": "#D93C3C", "faintColorOnWhite": "rgba(217, 60, 60, 0.1)", @@ -12217,8 +15616,8 @@ "#6c7474", "#64646c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.003Z", - "readmeFetchedAt": "2018-05-14T15:02:46.850Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.710Z", + "readmeFetchedAt": "2019-02-08T00:07:47.802Z", "goodColorOnWhite": "#343C3C", "goodColorOnBlack": "#7C7C7C", "faintColorOnWhite": "rgba(52, 60, 60, 0.1)", @@ -12306,8 +15705,8 @@ "#ec7c7c", "#d9b4b4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.033Z", - "readmeFetchedAt": "2018-05-14T15:02:47.027Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.729Z", + "readmeFetchedAt": "2019-02-08T00:07:47.831Z", "goodColorOnWhite": "#E40D0D", "goodColorOnBlack": "#F28F8F", "faintColorOnWhite": "rgba(228, 13, 13, 0.1)", @@ -12350,8 +15749,8 @@ "#71c4b9", "#a0a0a0" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.049Z", - "readmeFetchedAt": "2018-05-14T15:02:47.037Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.751Z", + "readmeFetchedAt": "2019-02-08T00:07:47.844Z", "goodColorOnWhite": "#057B76", "goodColorOnBlack": "#068A84", "faintColorOnWhite": "rgba(5, 123, 118, 0.1)", @@ -12459,8 +15858,8 @@ "#a7adae", "#7ca4b4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.141Z", - "readmeFetchedAt": "2018-05-14T15:02:46.985Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.760Z", + "readmeFetchedAt": "2019-02-08T00:07:47.923Z", "goodColorOnWhite": "#257589", "goodColorOnBlack": "#AEDDE9", "faintColorOnWhite": "rgba(37, 117, 137, 0.1)", @@ -12547,8 +15946,8 @@ "#7c7c7c", "#84847c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.116Z", - "readmeFetchedAt": "2018-05-14T15:02:47.060Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.798Z", + "readmeFetchedAt": "2019-02-08T00:07:48.022Z", "goodColorOnWhite": "#171717", "goodColorOnBlack": "#84847C", "faintColorOnWhite": "rgba(23, 23, 23, 0.1)", @@ -12558,6 +15957,49 @@ "app:nfov" ] }, + { + "objectID": "app-nighthawk", + "slug": "nighthawk", + "name": "Nighthawk", + "description": "Stealthy, simple, unobtrusive music player that stays out of your way.", + "repository": "https://github.com/quantumkv/nighthawk", + "keywords": [ + "music", + "audio", + "tray", + "music player" + ], + "license": "MIT", + "category": "Music", + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/quantumkv/nighthawk/master/static/readme/win-image.jpg" + } + ], + "icon": "nighthawk-icon.png", + "icon32": "nighthawk-icon-32.png", + "icon64": "nighthawk-icon-64.png", + "icon128": "nighthawk-icon-128.png", + "icon256": "nighthawk-icon-256.png", + "date": "2018-06-18", + "iconColors": [ + "#2b99f5", + "#545454", + "#fbfbf3", + "#92d2fb", + "#b4b4ac" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:28.816Z", + "readmeFetchedAt": "2019-02-08T00:07:47.986Z", + "goodColorOnWhite": "#545454", + "goodColorOnBlack": "#92D2FB", + "faintColorOnWhite": "rgba(84, 84, 84, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Nighthawk", + "app:nighthawk" + ] + }, { "objectID": "app-nimble", "slug": "nimble", @@ -12610,8 +16052,8 @@ "#c47c7c", "#ac3c3c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.110Z", - "readmeFetchedAt": "2018-05-14T15:02:47.099Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.821Z", + "readmeFetchedAt": "2019-02-08T00:07:47.946Z", "goodColorOnWhite": "#8C0404", "goodColorOnBlack": "#C47C7C", "faintColorOnWhite": "rgba(140, 4, 4, 0.1)", @@ -12676,8 +16118,8 @@ "#bce484", "#a4a4a4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.160Z", - "readmeFetchedAt": "2018-05-14T15:02:47.126Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.845Z", + "readmeFetchedAt": "2019-02-08T00:07:48.014Z", "goodColorOnWhite": "#56801C", "goodColorOnBlack": "#BCE484", "faintColorOnWhite": "rgba(86, 128, 28, 0.1)", @@ -12687,6 +16129,98 @@ "app:nodejs-package-manager" ] }, + { + "objectID": "app-notable", + "slug": "notable", + "name": "Notable", + "description": "The markdown-based note-taking app that doesn't suck.", + "repository": "https://github.com/fabiospampinato/notable", + "keywords": [ + "notes", + "markdown", + "note taking" + ], + "category": "Productivity", + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/fabiospampinato/notable/master/resources/demo/main.png", + "caption": "Notable" + }, + { + "imageUrl": "https://raw.githubusercontent.com/fabiospampinato/notable/master/resources/demo/tags.png", + "caption": "Indefinitely Nestable Tags" + }, + { + "imageUrl": "https://raw.githubusercontent.com/fabiospampinato/notable/master/resources/demo/editor.png", + "caption": "Editor" + }, + { + "imageUrl": "https://raw.githubusercontent.com/fabiospampinato/notable/master/resources/demo/multi_editor.png", + "caption": "Multi-Note Editor" + } + ], + "icon": "notable-icon.png", + "icon32": "notable-icon-32.png", + "icon64": "notable-icon-64.png", + "icon128": "notable-icon-128.png", + "icon256": "notable-icon-256.png", + "date": "2019-01-22", + "iconColors": [ + "#f9b646", + "#f4c2b4", + "#232322", + "#a59490", + "#8c7c74" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:28.895Z", + "readmeFetchedAt": "2019-02-08T00:07:48.035Z", + "goodColorOnWhite": "#232322", + "goodColorOnBlack": "#F9B646", + "faintColorOnWhite": "rgba(35, 35, 34, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Notable", + "app:notable" + ] + }, + { + "objectID": "app-notion", + "slug": "notion", + "name": "Notion", + "description": "A new editor that blends notes, tasks, wikis in one app.", + "website": "https://www.notion.so/desktop", + "category": "Productivity", + "keywords": [ + "notes", + "tasks", + "wikis", + "kanban", + "spreadsheet", + "database", + "collaboration" + ], + "icon": "notion-icon.png", + "icon32": "notion-icon-32.png", + "icon64": "notion-icon-64.png", + "icon128": "notion-icon-128.png", + "icon256": "notion-icon-256.png", + "date": "2018-06-18", + "iconColors": [ + "#fbfbfb", + "#040404", + "#7c7c7c", + "#747474", + "#848484" + ], + "goodColorOnWhite": "#040404", + "goodColorOnBlack": "#FBFBFB", + "faintColorOnWhite": "rgba(4, 4, 4, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Notion", + "app:notion" + ] + }, { "objectID": "app-notr", "slug": "notr", @@ -12721,6 +16255,52 @@ "app:notr" ] }, + { + "objectID": "app-noty", + "slug": "noty", + "name": "Noty", + "description": "Autosaving sticky note with support for multiple notes without needing multiple windows.", + "repository": "https://github.com/fabiospampinato/noty", + "keywords": [ + "sticky", + "notes", + "note taking" + ], + "category": "Productivity", + "screenshots": [ + { + "imageUrl": "https://github.com/fabiospampinato/noty/raw/master/resources/demo/switching.gif", + "caption": "Switching Notes" + }, + { + "imageUrl": "https://github.com/fabiospampinato/noty/raw/master/resources/demo/creation.gif", + "caption": "Creating Notes" + } + ], + "icon": "noty-icon.png", + "icon32": "noty-icon-32.png", + "icon64": "noty-icon-64.png", + "icon128": "noty-icon-128.png", + "icon256": "noty-icon-256.png", + "date": "2019-01-22", + "iconColors": [ + "#fbf19c", + "#fbe748", + "#696441", + "#aaa36b", + "#8c8c5c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:28.894Z", + "readmeFetchedAt": "2019-02-08T00:07:48.059Z", + "goodColorOnWhite": "#696441", + "goodColorOnBlack": "#FBE748", + "faintColorOnWhite": "rgba(105, 100, 65, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Noty", + "app:noty" + ] + }, { "objectID": "app-now", "slug": "now", @@ -12752,8 +16332,8 @@ "#747474", "#6c6c6c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.211Z", - "readmeFetchedAt": "2018-05-14T15:02:47.132Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.934Z", + "readmeFetchedAt": "2019-02-08T00:07:48.124Z", "goodColorOnWhite": "#0C0C0C", "goodColorOnBlack": "#DDD", "faintColorOnWhite": "rgba(12, 12, 12, 0.1)", @@ -12796,8 +16376,8 @@ "#1ecbf2", "#465c78" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.253Z", - "readmeFetchedAt": "2018-05-14T15:02:47.193Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.933Z", + "readmeFetchedAt": "2019-02-08T00:07:48.243Z", "goodColorOnWhite": "#30455B", "goodColorOnBlack": "#1ECBF2", "faintColorOnWhite": "rgba(48, 69, 91, 0.1)", @@ -12874,8 +16454,8 @@ "#54a9f6", "#bebada" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.248Z", - "readmeFetchedAt": "2018-05-14T15:02:47.225Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:28.961Z", + "readmeFetchedAt": "2019-02-08T00:07:48.111Z", "goodColorOnWhite": "#0B71CD", "goodColorOnBlack": "#54A9F6", "faintColorOnWhite": "rgba(11, 113, 205, 0.1)", @@ -12950,6 +16530,105 @@ "app:nylas-n1" ] }, + { + "objectID": "app-octopi-init", + "slug": "octopi-init", + "name": "octopi-init", + "description": "A Node.js & Electron application for easily configuring your freshly-imaged OctoPi microSD adapter", + "website": "https://github.com/OutsourcedGuru/octopi-init", + "category": "Utilities", + "repository": "https://github.com/OutsourcedGuru/octopi-init/blob/master/electron_README.md", + "keywords": [ + "octoprint", + "octopi", + "nodejs", + "javascript", + "microsd-management", + "raspberry-pi-3", + "raspberry-pi" + ], + "license": "MIT", + "icon": "octopi-init-icon.png", + "icon32": "octopi-init-icon-32.png", + "icon64": "octopi-init-icon-64.png", + "icon128": "octopi-init-icon-128.png", + "icon256": "octopi-init-icon-256.png", + "date": "2018-06-19", + "iconColors": [ + "#040404", + "#080404", + "#080404", + "#080404", + "#080404" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:28.953Z", + "readmeFetchedAt": "2019-02-08T00:07:48.194Z", + "goodColorOnWhite": "#080404", + "goodColorOnBlack": "#FFF", + "faintColorOnWhite": "rgba(8, 4, 4, 0.1)", + "keyValuePairs": [ + "is:app", + "app:octopi-init", + "app:octopi-init" + ] + }, + { + "objectID": "app-odio", + "slug": "odio", + "name": "odio", + "description": "Free radio streaming software with more than 20,000 radio stations radio stations from around the world for Windows, MacOs and Linux.", + "website": "https://www.odio.io", + "category": "Music", + "repository": "https://github.com/odioapp/odio", + "keywords": [ + "odio", + "music", + "radio", + "free", + "streaming" + ], + "screenshots": [ + { + "imageUrl": "https://odio.io/imgs/screenshots/2.png", + "caption": "odio - free radio streaming", + "imageLink": "https://www.odio.io" + }, + { + "imageUrl": "https://odio.io/imgs/screenshots/1.png", + "caption": "odio - free radio streaming", + "imageLink": "https://www.odio.io" + }, + { + "imageUrl": "https://odio.io/imgs/screenshots/4.png", + "caption": "odio - free radio streaming", + "imageLink": "https://www.odio.io" + } + ], + "license": "MIT", + "icon": "odio-icon.png", + "icon32": "odio-icon-32.png", + "icon64": "odio-icon-64.png", + "icon128": "odio-icon-128.png", + "icon256": "odio-icon-256.png", + "date": "2018-10-05", + "iconColors": [ + "#e35694", + "#f8f7f8", + "#903853", + "#eca0c4", + "#ac4464" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:29.013Z", + "readmeFetchedAt": "2019-02-08T00:07:48.253Z", + "goodColorOnWhite": "#903853", + "goodColorOnBlack": "#E35694", + "faintColorOnWhite": "rgba(144, 56, 83, 0.1)", + "keyValuePairs": [ + "is:app", + "app:odio", + "app:odio" + ] + }, { "objectID": "app-odrive", "slug": "odrive", @@ -12967,7 +16646,7 @@ "category": "Productivity", "screenshots": [ { - "imageUrl": "https://raw.githubusercontent.com/liberodark/Odrive/master/public/logo.png" + "imageUrl": "https://raw.githubusercontent.com/liberodark/ODrive/6675b22df3f438ea51e9bcbf03af49e8fad96361/public/logo.png" } ], "icon": "odrive-icon.png", @@ -12983,8 +16662,8 @@ "#eadc9c", "#605c40" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.314Z", - "readmeFetchedAt": "2018-05-14T15:02:47.211Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.030Z", + "readmeFetchedAt": "2019-02-08T00:07:48.219Z", "goodColorOnWhite": "#C75005", "goodColorOnBlack": "#C75005", "faintColorOnWhite": "rgba(199, 80, 5, 0.1)", @@ -12994,6 +16673,98 @@ "app:odrive" ] }, + { + "objectID": "app-oh-my-desk", + "slug": "oh-my-desk", + "name": "oh-my-desk", + "description": "Using web page as a widget that desktop application.", + "repository": "https://github.com/ahki/oh-my-desk", + "category": "Utilities", + "keywords": [ + "webpage", + "website", + "widget", + "web" + ], + "license": "GPL-3.0", + "icon": "oh-my-desk-icon.png", + "icon32": "oh-my-desk-icon-32.png", + "icon64": "oh-my-desk-icon-64.png", + "icon128": "oh-my-desk-icon-128.png", + "icon256": "oh-my-desk-icon-256.png", + "date": "2018-08-09", + "iconColors": [ + "#5468f1", + "#141415", + "#07c56b", + "#34dfbe", + "#443484" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:29.031Z", + "readmeFetchedAt": "2019-02-08T00:07:48.366Z", + "goodColorOnWhite": "#5468F1", + "goodColorOnBlack": "#07C56B", + "faintColorOnWhite": "rgba(84, 104, 241, 0.1)", + "keyValuePairs": [ + "is:app", + "app:oh-my-desk", + "app:oh-my-desk" + ] + }, + { + "objectID": "app-one-left", + "slug": "one-left", + "name": "One Left", + "description": "Classic board game.", + "repository": "https://github.com/drscaon/electron-react-one-left-game", + "category": "Games", + "keywords": [ + "left", + "game", + "one" + ], + "license": "MIT", + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/drscaon/electron-react-one-left-game/master/resources/one_left_screenshot.png" + }, + { + "imageUrl": "https://raw.githubusercontent.com/drscaon/electron-react-one-left-game/master/resources/one_left_screenshot_2.png" + }, + { + "imageUrl": "https://raw.githubusercontent.com/drscaon/electron-react-one-left-game/master/resources/one_left_screenshot_3.png" + }, + { + "imageUrl": "https://raw.githubusercontent.com/drscaon/electron-react-one-left-game/master/resources/one_left_screenshot_4.png" + }, + { + "imageUrl": "https://raw.githubusercontent.com/drscaon/electron-react-one-left-game/master/resources/one_left_screenshot_5.png" + } + ], + "icon": "one-left-icon.png", + "icon32": "one-left-icon-32.png", + "icon64": "one-left-icon-64.png", + "icon128": "one-left-icon-128.png", + "icon256": "one-left-icon-256.png", + "date": "2018-07-10", + "iconColors": [ + "#b6b2b4", + "#343c86", + "#686d7e", + "#594b56", + "#595454" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:29.040Z", + "readmeFetchedAt": "2019-02-08T00:07:48.345Z", + "goodColorOnWhite": "#343C86", + "goodColorOnBlack": "#B6B2B4", + "faintColorOnWhite": "rgba(52, 60, 134, 0.1)", + "keyValuePairs": [ + "is:app", + "app:One Left", + "app:one-left" + ] + }, { "objectID": "app-opale-messenger", "slug": "opale-messenger", @@ -13033,8 +16804,8 @@ "#043c7c", "#7cacfc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.296Z", - "readmeFetchedAt": "2018-05-14T15:02:47.250Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.075Z", + "readmeFetchedAt": "2019-02-08T00:07:48.384Z", "goodColorOnWhite": "#043C7C", "goodColorOnBlack": "#0477F1", "faintColorOnWhite": "rgba(4, 60, 124, 0.1)", @@ -13110,8 +16881,8 @@ "#2b7ce3", "#7eb6dc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.344Z", - "readmeFetchedAt": "2018-05-14T15:02:47.258Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.145Z", + "readmeFetchedAt": "2019-02-08T00:07:48.357Z", "goodColorOnWhite": "#0B65A8", "goodColorOnBlack": "#2B7CE3", "faintColorOnWhite": "rgba(11, 101, 168, 0.1)", @@ -13121,6 +16892,106 @@ "app:openbazaar" ] }, + { + "objectID": "app-opus", + "slug": "opus", + "name": "Opus", + "description": "Minimal note-taking application", + "website": "https://opus.now.sh", + "repository": "https://github.com/pacocoursey/opus", + "keywords": [ + "writing", + "text", + "note", + "note-taking" + ], + "category": "Productivity", + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/pacocoursey/Opus/master/assets/screenshot-light.png" + } + ], + "icon": "opus-icon.png", + "icon32": "opus-icon-32.png", + "icon64": "opus-icon-64.png", + "icon128": "opus-icon-128.png", + "icon256": "opus-icon-256.png", + "date": "2018-10-24", + "iconColors": [ + "#f2f2f2", + "#04adf7", + "#55bef7", + "#9cd7f5", + "#28c4f9" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:29.105Z", + "readmeFetchedAt": "2019-02-08T00:07:48.467Z", + "goodColorOnWhite": "#0372A3", + "goodColorOnBlack": "#04ADF7", + "faintColorOnWhite": "rgba(3, 114, 163, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Opus", + "app:opus" + ] + }, + { + "objectID": "app-overlay", + "slug": "overlay", + "name": "Overlay", + "description": "Set of tools for developers and designers to measure, align and overlay on-screen graphics and layouts", + "website": "http://overlay.singuerinc.com", + "repository": "https://github.com/singuerinc/overlay", + "keywords": [ + "measuring", + "aligning", + "on-screen", + "tool", + "overlay" + ], + "category": "Developer Tools", + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/singuerinc/overlay/master/resources/images/inverted-browser.png", + "caption": "Overlay - Image onion overlay" + }, + { + "imageUrl": "https://raw.githubusercontent.com/singuerinc/overlay/master/resources/images/inverted-only.png", + "caption": "Overlay - Invert" + }, + { + "imageUrl": "https://raw.githubusercontent.com/singuerinc/overlay/master/resources/images/rulers.png", + "caption": "Overlay - Ruler" + }, + { + "imageUrl": "https://raw.githubusercontent.com/singuerinc/overlay/master/resources/images/toolbox.png", + "caption": "Overlay - Toolbox" + } + ], + "icon": "overlay-icon.png", + "icon32": "overlay-icon-32.png", + "icon64": "overlay-icon-64.png", + "icon128": "overlay-icon-128.png", + "icon256": "overlay-icon-256.png", + "date": "2018-10-02", + "iconColors": [ + "#040404", + "#04fcfc", + "#fb0404", + "#0cdcdc", + "#c08480" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:29.127Z", + "readmeFetchedAt": "2019-02-08T00:07:48.491Z", + "goodColorOnWhite": "#040404", + "goodColorOnBlack": "#04FCFC", + "faintColorOnWhite": "rgba(4, 4, 4, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Overlay", + "app:overlay" + ] + }, { "objectID": "app-oversetter", "slug": "oversetter", @@ -13153,8 +17024,8 @@ "#567aa0", "#a47c44" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.374Z", - "readmeFetchedAt": "2018-05-14T15:02:47.360Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.177Z", + "readmeFetchedAt": "2019-02-08T00:07:48.547Z", "goodColorOnWhite": "#3D3D3D", "goodColorOnBlack": "#A47C44", "faintColorOnWhite": "rgba(61, 61, 61, 0.1)", @@ -13179,7 +17050,8 @@ "category": "Productivity", "screenshots": [ { - "imageUrl": "https://camo.githubusercontent.com/f471c913a6d2c45abb6fb507839d9e5694aa8d87/68747470733a2f2f63646e2e636f7269666575732e636f6d2f6769742f6f6e656e6f74652f6172746966616374732f73637265656e73686f742f312e706e67" + "imageUrl": "https://cdn.corifeus.com/git/onenote/artifacts/screenshot/screenshot-2019.png", + "caption": "Screenshot 1" } ], "icon": "p3x-onenote-icon.png", @@ -13195,8 +17067,8 @@ "#b48cb4", "#ac84ac" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.367Z", - "readmeFetchedAt": "2018-05-14T15:02:47.351Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.187Z", + "readmeFetchedAt": "2019-02-08T00:07:48.542Z", "goodColorOnWhite": "#7C3474", "goodColorOnBlack": "#B48CB4", "faintColorOnWhite": "rgba(124, 52, 116, 0.1)", @@ -13206,6 +17078,70 @@ "app:p3x-onenote" ] }, + { + "objectID": "app-p3x-redis-ui", + "slug": "p3x-redis-ui", + "name": "P3X Redis UI", + "description": "Redis UI based on redis-commander and phpRedisAdmin.", + "repository": "https://github.com/patrikx3/redis-ui", + "website": "https://pages.corifeus.com/redis-ui", + "keywords": [ + "redis", + "ui", + "admin", + "gui", + "dark", + "theme", + "internationalization" + ], + "license": "MIT", + "category": "Developer Tools", + "screenshots": [ + { + "imageUrl": "https://cdn.corifeus.com/git/redis-ui/artifacts/preview-images/preview-3.png", + "caption": "Light theme - Settings" + }, + { + "imageUrl": "https://cdn.corifeus.com/git/redis-ui/artifacts/preview-images/preview-2.png", + "caption": "Dark themed - JSON preview" + }, + { + "imageUrl": "https://cdn.corifeus.com/git/redis-ui/artifacts/preview-images/preview.png", + "caption": "Enterprise themed - Statistics" + }, + { + "imageUrl": "https://cdn.corifeus.com/git/redis-ui/artifacts/preview-images/preview-4.png", + "caption": "Redis themed - Key" + }, + { + "imageUrl": "https://cdn.corifeus.com/git/redis-ui/artifacts/preview-images/preview-5.png", + "caption": "Darko bluo - Key" + } + ], + "icon": "p3x-redis-ui-icon.png", + "icon32": "p3x-redis-ui-icon-32.png", + "icon64": "p3x-redis-ui-icon-64.png", + "icon128": "p3x-redis-ui-icon-128.png", + "icon256": "p3x-redis-ui-icon-256.png", + "date": "2018-10-29", + "iconColors": [ + "#ab2b28", + "#fbf8f8", + "#d76d68", + "#de8c8c", + "#cc544c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:29.221Z", + "readmeFetchedAt": "2019-02-08T00:07:48.605Z", + "goodColorOnWhite": "#AB2B28", + "goodColorOnBlack": "#D76D68", + "faintColorOnWhite": "rgba(171, 43, 40, 0.1)", + "keyValuePairs": [ + "is:app", + "app:P3X Redis UI", + "app:p3x-redis-ui" + ] + }, { "objectID": "app-paintsupreme3d", "slug": "paintsupreme3d", @@ -13320,6 +17256,42 @@ "app:panda-2" ] }, + { + "objectID": "app-paperarxiv", + "slug": "paperarxiv", + "name": "PaperArxiv", + "description": "Yet another paper management tool.", + "category": "Education", + "repository": "https://github.com/fuzihaofzh/PaperArxiv", + "keywords": [ + "paper", + "management", + "notes" + ], + "icon": "paperarxiv-icon.png", + "icon32": "paperarxiv-icon-32.png", + "icon64": "paperarxiv-icon-64.png", + "icon128": "paperarxiv-icon-128.png", + "icon256": "paperarxiv-icon-256.png", + "date": "2018-07-22", + "iconColors": [ + "#d4c77a", + "#732a7d", + "#ae49bf", + "#be9819", + "#9a771d" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:29.249Z", + "readmeFetchedAt": "2019-02-08T00:07:48.611Z", + "goodColorOnWhite": "#732A7D", + "goodColorOnBlack": "#BE9819", + "faintColorOnWhite": "rgba(115, 42, 125, 0.1)", + "keyValuePairs": [ + "is:app", + "app:PaperArxiv", + "app:paperarxiv" + ] + }, { "objectID": "app-papercubes", "slug": "papercubes", @@ -13345,8 +17317,8 @@ "#acacac", "#bcdc94" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.366Z", - "readmeFetchedAt": "2018-05-14T15:02:47.317Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.271Z", + "readmeFetchedAt": "2019-02-08T00:07:48.661Z", "goodColorOnWhite": "#557928", "goodColorOnBlack": "#BCDC94", "faintColorOnWhite": "rgba(85, 121, 40, 0.1)", @@ -13388,8 +17360,8 @@ "#c4c4c4", "#cccccc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.463Z", - "readmeFetchedAt": "2018-05-14T15:02:47.327Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.308Z", + "readmeFetchedAt": "2019-02-08T00:07:48.676Z", "goodColorOnWhite": "#1177CB", "goodColorOnBlack": "#1385E4", "faintColorOnWhite": "rgba(17, 119, 203, 0.1)", @@ -13430,8 +17402,8 @@ "#08ecb4", "#08ecb4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.539Z", - "readmeFetchedAt": "2018-05-14T15:02:47.489Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.374Z", + "readmeFetchedAt": "2019-02-08T00:07:48.782Z", "goodColorOnWhite": "#027E60", "goodColorOnBlack": "#04ECB4", "faintColorOnWhite": "rgba(2, 126, 96, 0.1)", @@ -13515,8 +17487,8 @@ "#6b72e0", "#a4a4a4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.436Z", - "readmeFetchedAt": "2018-05-14T15:02:47.441Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.341Z", + "readmeFetchedAt": "2019-02-08T00:07:48.709Z", "goodColorOnWhite": "#090B0B", "goodColorOnBlack": "#6B72E0", "faintColorOnWhite": "rgba(9, 11, 11, 0.1)", @@ -13639,8 +17611,8 @@ "#e8b265", "#fcc479" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.425Z", - "readmeFetchedAt": "2018-05-14T15:02:47.431Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.374Z", + "readmeFetchedAt": "2019-02-08T00:07:48.771Z", "goodColorOnWhite": "#874F07", "goodColorOnBlack": "#F38B04", "faintColorOnWhite": "rgba(135, 79, 7, 0.1)", @@ -13676,8 +17648,8 @@ "#545454", "#fcac6c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.526Z", - "readmeFetchedAt": "2018-05-14T15:02:47.454Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.362Z", + "readmeFetchedAt": "2019-02-08T00:07:48.764Z", "goodColorOnWhite": "#3B3B3B", "goodColorOnBlack": "#FC8404", "faintColorOnWhite": "rgba(59, 59, 59, 0.1)", @@ -13720,8 +17692,8 @@ "#72b4bc", "#92c4cc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.527Z", - "readmeFetchedAt": "2018-05-14T15:02:47.537Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.461Z", + "readmeFetchedAt": "2019-02-08T00:07:48.853Z", "goodColorOnWhite": "#137880", "goodColorOnBlack": "#15848C", "faintColorOnWhite": "rgba(19, 120, 128, 0.1)", @@ -13763,8 +17735,8 @@ "#ca4676", "#d45884" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.599Z", - "readmeFetchedAt": "2018-05-14T15:02:47.531Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.458Z", + "readmeFetchedAt": "2019-02-08T00:07:48.881Z", "goodColorOnWhite": "#CA4676", "goodColorOnBlack": "#FADDA5", "faintColorOnWhite": "rgba(202, 70, 118, 0.1)", @@ -13876,8 +17848,8 @@ "#6b6c6c", "#646467" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.613Z", - "readmeFetchedAt": "2018-05-14T15:02:47.543Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.462Z", + "readmeFetchedAt": "2019-02-08T00:07:48.895Z", "goodColorOnWhite": "#193E54", "goodColorOnBlack": "#7995A2", "faintColorOnWhite": "rgba(25, 62, 84, 0.1)", @@ -13892,7 +17864,7 @@ "slug": "phonepresenter", "name": "PhonePresenter", "description": "The Smartest Presentation Clicker", - "website": "https://phonepresenter.com", + "website": "https://phonepresenter.github.io", "keywords": [ "utility", "productivity", @@ -13955,8 +17927,8 @@ "#dd472f", "#747e98" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.572Z", - "readmeFetchedAt": "2018-05-14T15:02:47.563Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.438Z", + "readmeFetchedAt": "2019-02-08T00:07:48.938Z", "goodColorOnWhite": "#131313", "goodColorOnBlack": "#FBA736", "faintColorOnWhite": "rgba(19, 19, 19, 0.1)", @@ -13971,7 +17943,7 @@ "slug": "phreshistant", "name": "Phreshistant", "description": "Simple cross-platform project manager and todo app.", - "website": "http://phresh-it.hu/apps/phreshistant/", + "website": "https://phresh-it.hu/apps/phreshistant/", "license": "MIT", "keywords": [ "project", @@ -13996,8 +17968,8 @@ "#41b466", "#84cca4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.656Z", - "readmeFetchedAt": "2018-05-14T15:02:47.633Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.520Z", + "readmeFetchedAt": "2019-02-08T00:07:49.026Z", "goodColorOnWhite": "#10883C", "goodColorOnBlack": "#14AB4C", "faintColorOnWhite": "rgba(16, 136, 60, 0.1)", @@ -14012,7 +17984,7 @@ "slug": "phreshplayer", "name": "PhreshPlayer", "description": "Media player.", - "website": "http://phresh-it.hu/apps/phreshplayer/", + "website": "https://phresh-it.hu/apps/phreshplayer/", "license": "MIT", "keywords": [ "audio", @@ -14036,8 +18008,8 @@ "#08a444", "#08a444" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.652Z", - "readmeFetchedAt": "2018-05-14T15:02:47.655Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.553Z", + "readmeFetchedAt": "2019-02-08T00:07:49.049Z", "goodColorOnWhite": "#038638", "goodColorOnBlack": "#04A444", "faintColorOnWhite": "rgba(3, 134, 56, 0.1)", @@ -14144,8 +18116,8 @@ "#938596", "#7c6088" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.750Z", - "readmeFetchedAt": "2018-05-14T15:02:47.620Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.556Z", + "readmeFetchedAt": "2019-02-08T00:07:49.004Z", "goodColorOnWhite": "#7C6088", "goodColorOnBlack": "#DC44FB", "faintColorOnWhite": "rgba(124, 96, 136, 0.1)", @@ -14187,8 +18159,8 @@ "#49969b", "#41a4a4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.699Z", - "readmeFetchedAt": "2018-05-14T15:02:47.638Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.540Z", + "readmeFetchedAt": "2019-02-08T00:07:49.054Z", "goodColorOnWhite": "#1D8088", "goodColorOnBlack": "#2CC2CF", "faintColorOnWhite": "rgba(29, 128, 136, 0.1)", @@ -14198,6 +18170,48 @@ "app:pilemd" ] }, + { + "objectID": "app-pinesql", + "slug": "pinesql", + "name": "PineSQL", + "description": "SQL client", + "repository": "https://github.com/ivan770/pinesql", + "category": "Developer Tools", + "license": "MIT", + "keywords": [ + "sql", + "mysql", + "database" + ], + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/ivan770/pinesql/master/img/screenshot2.png" + } + ], + "icon": "pinesql-icon.png", + "icon32": "pinesql-icon-32.png", + "icon64": "pinesql-icon-64.png", + "icon128": "pinesql-icon-128.png", + "icon256": "pinesql-icon-256.png", + "date": "2018-07-11", + "iconColors": [ + "#f9f9f9", + "#343c54", + "#4454d4", + "#8f949f", + "#797c8c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:29.593Z", + "readmeFetchedAt": "2019-02-08T00:07:49.140Z", + "goodColorOnWhite": "#4454D4", + "goodColorOnBlack": "#8F949F", + "faintColorOnWhite": "rgba(68, 84, 212, 0.1)", + "keyValuePairs": [ + "is:app", + "app:PineSQL", + "app:pinesql" + ] + }, { "objectID": "app-piqture", "slug": "piqture", @@ -14234,8 +18248,8 @@ "#965fb6", "#848484" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.751Z", - "readmeFetchedAt": "2018-05-14T15:02:47.731Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.654Z", + "readmeFetchedAt": "2019-02-08T00:07:49.178Z", "goodColorOnWhite": "#7425A4", "goodColorOnBlack": "#965FB6", "faintColorOnWhite": "rgba(116, 37, 164, 0.1)", @@ -14308,8 +18322,8 @@ "#2d452e", "#26102c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.750Z", - "readmeFetchedAt": "2018-05-14T15:02:47.723Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.659Z", + "readmeFetchedAt": "2019-02-08T00:07:49.134Z", "goodColorOnWhite": "#26102C", "goodColorOnBlack": "#388D3C", "faintColorOnWhite": "rgba(38, 16, 44, 0.1)", @@ -14332,10 +18346,10 @@ ], "license": "GPL-v3", "category": "Developer Tools", - "repository": "http://github.com/meadowcottage/playcode-desktop", + "repository": "http://github.com/playcode/playcode-desktop", "screenshots": [ { - "imageUrl": "https://github.com/Meadowcottage/Playcode-desktop/blob/master/build/Screenshot.png?raw=true" + "imageUrl": "https://github.com/playcode/Playcode-desktop/blob/master/build/Screenshot.png?raw=true" } ], "icon": "playcode-icon.png", @@ -14351,8 +18365,8 @@ "#545954", "#444444" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.738Z", - "readmeFetchedAt": "2018-05-14T15:02:47.690Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.659Z", + "readmeFetchedAt": "2019-02-08T00:07:49.168Z", "goodColorOnWhite": "#606058", "goodColorOnBlack": "#74A146", "faintColorOnWhite": "rgba(96, 96, 88, 0.1)", @@ -14401,8 +18415,8 @@ "#948c24", "#746c3c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.812Z", - "readmeFetchedAt": "2018-05-14T15:02:47.717Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.688Z", + "readmeFetchedAt": "2019-02-08T00:07:49.334Z", "goodColorOnWhite": "#746C3C", "goodColorOnBlack": "#9C8408", "faintColorOnWhite": "rgba(116, 108, 60, 0.1)", @@ -14412,6 +18426,144 @@ "app:playlist" ] }, + { + "objectID": "app-playme", + "slug": "playme", + "name": "PlayMe", + "description": "Elegant YouTube Music desktop app", + "website": "http://playme.filip.engineer", + "repository": "https://github.com/filipuic/playme", + "keywords": [ + "music", + "audio", + "youtube", + "music player", + "desktop", + "gui", + "playlist" + ], + "license": "MIT", + "category": "Music", + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/filipuic/playme/master/static/playme-screenshot.png" + } + ], + "icon": "playme-icon.png", + "icon32": "playme-icon-32.png", + "icon64": "playme-icon-64.png", + "icon128": "playme-icon-128.png", + "icon256": "playme-icon-256.png", + "date": "2018-07-09", + "iconColors": [ + "#3ca8eb", + "#fafbfb", + "#6269f4", + "#8fb5f4", + "#87d9f1" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:29.874Z", + "readmeFetchedAt": "2019-02-08T00:07:49.380Z", + "goodColorOnWhite": "#424AF2", + "goodColorOnBlack": "#6269F4", + "faintColorOnWhite": "rgba(66, 74, 242, 0.1)", + "keyValuePairs": [ + "is:app", + "app:PlayMe", + "app:playme" + ] + }, + { + "objectID": "app-playork", + "slug": "playork", + "name": "Playork", + "description": "Collection of Some Tools and Games", + "website": "http://playork.ml", + "repository": "https://github.com/playork/playork", + "category": "Productivity", + "keywords": [ + "playork", + "tool", + "play", + "game", + "desktop", + "gui", + "work", + "productivity" + ], + "license": "MIT", + "screenshots": [ + { + "imageUrl": "https://user-images.githubusercontent.com/38488260/46244561-3c904f00-c3fe-11e8-8383-32ea3111af4f.png" + } + ], + "icon": "playork-icon.png", + "icon32": "playork-icon-32.png", + "icon64": "playork-icon-64.png", + "icon128": "playork-icon-128.png", + "icon256": "playork-icon-256.png", + "date": "2018-10-02", + "iconColors": [ + "#333433", + "#0cfb04", + "#19ac15", + "#227f1f", + "#2b5c28" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:29.759Z", + "readmeFetchedAt": "2019-02-08T00:07:49.298Z", + "goodColorOnWhite": "#227F1F", + "goodColorOnBlack": "#0CFB04", + "faintColorOnWhite": "rgba(34, 127, 31, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Playork", + "app:playork" + ] + }, + { + "objectID": "app-poddr", + "slug": "poddr", + "name": "Poddr", + "description": "A modern and simple podcast client.", + "website": "https://sn8z.github.io/Poddr", + "category": "Music", + "repository": "https://github.com/Sn8z/Poddr", + "keywords": [ + "podcast", + "music" + ], + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/Sn8z/Poddr/master/images/poddr.png", + "caption": "Poddr - A modern and simple podcast client", + "imageLink": "https://sn8z.github.io/Poddr" + } + ], + "icon": "poddr-icon.png", + "icon32": "poddr-icon-32.png", + "icon64": "poddr-icon-64.png", + "icon128": "poddr-icon-128.png", + "icon256": "poddr-icon-256.png", + "date": "2018-10-10", + "iconColors": [ + "#fb8f07", + "#fcf7f5", + "#353433", + "#ae5226", + "#fcc484" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:29.772Z", + "readmeFetchedAt": "2019-02-08T00:07:49.278Z", + "goodColorOnWhite": "#AE5226", + "goodColorOnBlack": "#FB8F07", + "faintColorOnWhite": "rgba(174, 82, 38, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Poddr", + "app:poddr" + ] + }, { "objectID": "app-poddycast-app", "slug": "poddycast-app", @@ -14438,8 +18590,8 @@ "#70bede", "#3cdcfc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.853Z", - "readmeFetchedAt": "2018-05-14T15:02:47.757Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.802Z", + "readmeFetchedAt": "2019-02-08T00:07:49.392Z", "goodColorOnWhite": "#037CB0", "goodColorOnBlack": "#15B6FB", "faintColorOnWhite": "rgba(3, 124, 176, 0.1)", @@ -14481,8 +18633,8 @@ "#96553d", "#908894" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.843Z", - "readmeFetchedAt": "2018-05-14T15:02:47.830Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.959Z", + "readmeFetchedAt": "2019-02-08T00:07:49.446Z", "goodColorOnWhite": "#96553D", "goodColorOnBlack": "#F7E8D3", "faintColorOnWhite": "rgba(150, 85, 61, 0.1)", @@ -14497,7 +18649,7 @@ "slug": "pokerclock", "name": "PokerClock", "description": "Poker time & blind tracker.", - "website": "http://phresh-it.hu/apps/pokerclock/", + "website": "https://phresh-it.hu/apps/pokerclock/", "license": "MIT", "keywords": [ "poker", @@ -14521,8 +18673,8 @@ "#646c6a", "#747474" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.859Z", - "readmeFetchedAt": "2018-05-14T15:02:47.815Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.871Z", + "readmeFetchedAt": "2019-02-08T00:07:49.479Z", "goodColorOnWhite": "#090808", "goodColorOnBlack": "#F0070E", "faintColorOnWhite": "rgba(9, 8, 8, 0.1)", @@ -14532,6 +18684,50 @@ "app:pokerclock" ] }, + { + "objectID": "app-polar", + "slug": "polar", + "name": "Polar Bookshelf", + "description": "Polar is a personal knowledge repository for PDF and web content supporting incremental reading and document annotation.", + "website": "https://getpolarized.io", + "repository": "https://github.com/burtonator/polar-bookshelf", + "keywords": [ + "books", + "PDF", + "annotations", + "document collaboration", + "incremental reading", + "spaced repetition", + "anki", + "flashcards" + ], + "youtube_video_url": "https://www.youtube.com/watch?v=h5ZY2z_vgOg", + "category": "Education", + "license": "GPL", + "icon": "polar-icon.png", + "icon32": "polar-icon-32.png", + "icon64": "polar-icon-64.png", + "icon128": "polar-icon-128.png", + "icon256": "polar-icon-256.png", + "date": "2018-09-20", + "iconColors": [ + "#f3331c", + "#289da4", + "#bda58f", + "#e99c31", + "#5c546c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:29.960Z", + "readmeFetchedAt": "2019-02-08T00:07:49.521Z", + "goodColorOnWhite": "#5C546C", + "goodColorOnBlack": "#F3331C", + "faintColorOnWhite": "rgba(92, 84, 108, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Polar Bookshelf", + "app:polar" + ] + }, { "objectID": "app-pomolectron", "slug": "pomolectron", @@ -14567,8 +18763,8 @@ "#ac8044", "#bc5c3c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.877Z", - "readmeFetchedAt": "2018-05-14T15:02:47.838Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:29.978Z", + "readmeFetchedAt": "2019-02-08T00:07:49.494Z", "goodColorOnWhite": "#D33B34", "goodColorOnBlack": "#E77260", "faintColorOnWhite": "rgba(211, 59, 52, 0.1)", @@ -14614,8 +18810,8 @@ "#b0444c", "#513c4c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.919Z", - "readmeFetchedAt": "2018-05-14T15:02:47.851Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:30.005Z", + "readmeFetchedAt": "2019-02-08T00:07:49.610Z", "goodColorOnWhite": "#B0444C", "goodColorOnBlack": "#FB4C4C", "faintColorOnWhite": "rgba(176, 68, 76, 0.1)", @@ -14650,8 +18846,8 @@ "#bbbbc6", "#a8a8be" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.931Z", - "readmeFetchedAt": "2018-05-14T15:02:47.957Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:30.079Z", + "readmeFetchedAt": "2019-02-08T00:07:49.599Z", "goodColorOnWhite": "#67556A", "goodColorOnBlack": "#B17B75", "faintColorOnWhite": "rgba(103, 85, 106, 0.1)", @@ -14785,8 +18981,8 @@ "#8e9192", "#748cb4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.936Z", - "readmeFetchedAt": "2018-05-14T15:02:48.270Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.063Z", + "readmeFetchedAt": "2019-02-08T00:07:49.602Z", "goodColorOnWhite": "#294492", "goodColorOnBlack": "#748CB4", "faintColorOnWhite": "rgba(41, 68, 146, 0.1)", @@ -14860,6 +19056,60 @@ "app:pracontrol" ] }, + { + "objectID": "app-premid", + "slug": "premid", + "name": "PreMiD", + "description": "Discord Rich Presence Integration for websites.", + "website": "https://premid.app/", + "category": "Utilities", + "repository": "https://github.com/Timeraa/PreMiD", + "keywords": [ + "Discord", + "Rich Presence", + "YouTube", + "SoundCloud", + "Twitch", + "YouTube Music", + "Netflix" + ], + "license": "MIT", + "screenshots": [ + { + "imageUrl": "https://github.com/Timeraa/PreMiD/raw/master/gitassets/PreMiDExample.png" + } + ], + "locales": [ + "en", + "de", + "da", + "he", + "la" + ], + "icon": "premid-icon.png", + "icon32": "premid-icon-32.png", + "icon64": "premid-icon-64.png", + "icon128": "premid-icon-128.png", + "icon256": "premid-icon-256.png", + "date": "2018-11-14", + "iconColors": [ + "#fbfbfb", + "#5a6aa9", + "#989fbe", + "#acb4cc", + "#a4acd4" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:30.134Z", + "readmeFetchedAt": "2019-02-08T00:07:50.499Z", + "goodColorOnWhite": "#5A6AA9", + "goodColorOnBlack": "#A4ACD4", + "faintColorOnWhite": "rgba(90, 106, 169, 0.1)", + "keyValuePairs": [ + "is:app", + "app:PreMiD", + "app:premid" + ] + }, { "objectID": "app-preserver", "slug": "preserver", @@ -14891,8 +19141,8 @@ "#a1b797", "#a9dce4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.958Z", - "readmeFetchedAt": "2018-05-14T15:02:47.934Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:30.079Z", + "readmeFetchedAt": "2019-02-08T00:07:49.739Z", "goodColorOnWhite": "#8B6B24", "goodColorOnBlack": "#D3AC55", "faintColorOnWhite": "rgba(139, 107, 36, 0.1)", @@ -14966,8 +19216,8 @@ "#a1bcf4", "#6994ea" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.989Z", - "readmeFetchedAt": "2018-05-14T15:02:47.921Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:30.210Z", + "readmeFetchedAt": "2019-02-08T00:07:49.701Z", "goodColorOnWhite": "#2563E5", "goodColorOnBlack": "#A1BCF4", "faintColorOnWhite": "rgba(37, 99, 229, 0.1)", @@ -15042,8 +19292,8 @@ "#495c7c", "#8ca4bc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.008Z", - "readmeFetchedAt": "2018-05-14T15:02:48.056Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:30.153Z", + "readmeFetchedAt": "2019-02-08T00:07:49.715Z", "goodColorOnWhite": "#495C7C", "goodColorOnBlack": "#3074DE", "faintColorOnWhite": "rgba(73, 92, 124, 0.1)", @@ -15168,8 +19418,8 @@ "#040c08", "#04040c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:33.999Z", - "readmeFetchedAt": "2018-05-14T15:02:48.039Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:30.245Z", + "readmeFetchedAt": "2019-02-08T00:07:49.811Z", "goodColorOnWhite": "#040C08", "goodColorOnBlack": "#FFF", "faintColorOnWhite": "rgba(4, 12, 8, 0.1)", @@ -15194,22 +19444,22 @@ "license": "AGPL 3.0 or later", "screenshots": [ { - "imageUrl": "https://drive.google.com/file/d/1yfmX0pexGZFpYGgBzZYtGs7C2XwRGXLG/view?usp=sharing", + "imageUrl": "https://i.imgur.com/Ce0G0Mg.png", "caption": "ProtegoPDF", "imageLink": "https://bbalvanera.github.io/protego-pdf/" }, { - "imageUrl": "https://drive.google.com/file/d/1alChcZuxUanxEb639yb0Eph5_4DA3D0T/view?usp=sharing", + "imageUrl": "https://i.imgur.com/kqj9yMH.png", "caption": "Drag & Drop", "imageLink": "https://bbalvanera.github.io/protego-pdf/" }, { - "imageUrl": "https://drive.google.com/file/d/1KsxseHBGLRHKLQ5afY9yl9NGjhlNI16b/view?usp=sharing", + "imageUrl": "https://i.imgur.com/0Wvryp8.png", "caption": "Set password", "imageLink": "https://bbalvanera.github.io/protego-pdf/" }, { - "imageUrl": "https://drive.google.com/file/d/1lpb0TPx9aJoWm_vzsFxfhNUxnHnpYumi/view?usp=sharing", + "imageUrl": "https://i.imgur.com/DeK8XP2.png", "caption": "Protect!", "imageLink": "https://bbalvanera.github.io/protego-pdf/" } @@ -15227,8 +19477,8 @@ "#848484", "#7c7c7c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.080Z", - "readmeFetchedAt": "2018-05-14T15:02:48.028Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:30.253Z", + "readmeFetchedAt": "2019-02-08T00:07:49.858Z", "goodColorOnWhite": "#1C66A2", "goodColorOnBlack": "#949596", "faintColorOnWhite": "rgba(28, 102, 162, 0.1)", @@ -15274,6 +19524,43 @@ "app:protopie" ] }, + { + "objectID": "app-pullp", + "slug": "pullp", + "name": "Pullp", + "description": "Dashboard for monitoring pull requests and reviews across your Github repos.", + "repository": "https://github.com/rkclark/pullp", + "keywords": [ + "dashboard", + "github", + "developer" + ], + "license": "MIT", + "category": "Developer Tools", + "icon": "pullp-icon.png", + "icon32": "pullp-icon-32.png", + "icon64": "pullp-icon-64.png", + "icon128": "pullp-icon-128.png", + "icon256": "pullp-icon-256.png", + "date": "2018-06-18", + "iconColors": [ + "#ad5f92", + "#0c0c1c", + "#7744ef", + "#0ae5d7", + "#603652" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:30.445Z", + "readmeFetchedAt": "2019-02-08T00:07:49.906Z", + "goodColorOnWhite": "#7744EF", + "goodColorOnBlack": "#0AE5D7", + "faintColorOnWhite": "rgba(119, 68, 239, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Pullp", + "app:pullp" + ] + }, { "objectID": "app-punk", "slug": "punk", @@ -15306,8 +19593,8 @@ "#8e8d88", "#f49487" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.041Z", - "readmeFetchedAt": "2018-05-14T15:02:48.105Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:30.351Z", + "readmeFetchedAt": "2019-02-08T00:07:49.981Z", "goodColorOnWhite": "#CC4335", "goodColorOnBlack": "#F49487", "faintColorOnWhite": "rgba(204, 67, 53, 0.1)", @@ -15344,8 +19631,8 @@ "#fc6c1c", "#ecb681" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.064Z", - "readmeFetchedAt": "2018-05-14T15:02:48.117Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:30.533Z", + "readmeFetchedAt": "2019-02-08T00:07:50.087Z", "goodColorOnWhite": "#2C3C44", "goodColorOnBlack": "#FC6C1C", "faintColorOnWhite": "rgba(44, 60, 68, 0.1)", @@ -15390,8 +19677,8 @@ "#9ccca4", "#cccccc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.088Z", - "readmeFetchedAt": "2018-05-14T15:02:48.130Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:30.487Z", + "readmeFetchedAt": "2019-02-08T00:07:50.072Z", "goodColorOnWhite": "#387B44", "goodColorOnBlack": "#4CA75C", "faintColorOnWhite": "rgba(56, 123, 68, 0.1)", @@ -15401,6 +19688,58 @@ "app:pupafm" ] }, + { + "objectID": "app-puppetry", + "slug": "puppetry", + "name": "Puppetry", + "description": "Codeless end-to-end test automation, integrated with CI/CD pipeline", + "website": "https://puppetry.app/", + "category": "Developer Tools", + "repository": "https://github.com/dsheiko/puppetry/", + "keywords": [ + "testing", + "test", + "end-to-end", + "automation", + "Quality Assurance", + "opensource", + "integration" + ], + "license": "MIT", + "snapcraftName": "puppetry", + "youtube_video_url": "https://www.youtube.com/watch?v=4DLnak6qU68", + "screenshots": [ + { + "imageUrl": "https://puppetry.app/assets/img/puppetry-welcome.png" + } + ], + "locales": [ + "en-US" + ], + "icon": "puppetry-icon.png", + "icon32": "puppetry-icon-32.png", + "icon64": "puppetry-icon-64.png", + "icon128": "puppetry-icon-128.png", + "icon256": "puppetry-icon-256.png", + "date": "2018-11-21", + "iconColors": [ + "#1c81e6", + "#f3f7fb", + "#6eb0f1", + "#8cc4f4", + "#52a4f1" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:30.592Z", + "readmeFetchedAt": "2019-02-08T00:07:50.081Z", + "goodColorOnWhite": "#106CC3", + "goodColorOnBlack": "#52A4F1", + "faintColorOnWhite": "rgba(16, 108, 195, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Puppetry", + "app:puppetry" + ] + }, { "objectID": "app-putler", "slug": "putler", @@ -15443,6 +19782,48 @@ "app:putler" ] }, + { + "objectID": "app-qawl", + "slug": "qawl", + "name": "Qawl", + "description": "Quran reader that combines the time-tested mushaf with digital convenience.", + "website": "https://qawl.navedislam.com", + "repository": "https://github.com/mr-islam/qawl", + "keywords": [ + "islam", + "quran", + "religion", + "faith", + "mushaf", + "book", + "muslim" + ], + "category": "Education", + "youtube_video_url": "https://www.youtube.com/watch?v=EWtOurhTzqo", + "icon": "qawl-icon.png", + "icon32": "qawl-icon-32.png", + "icon64": "qawl-icon-64.png", + "icon128": "qawl-icon-128.png", + "icon256": "qawl-icon-256.png", + "date": "2018-10-26", + "iconColors": [ + "#0d0d0d", + "#fbf6eb", + "#9a968d", + "#7c746c", + "#7c7c6c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:30.581Z", + "readmeFetchedAt": "2019-02-08T00:07:50.213Z", + "goodColorOnWhite": "#7C746C", + "goodColorOnBlack": "#FBF6EB", + "faintColorOnWhite": "rgba(124, 116, 108, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Qawl", + "app:qawl" + ] + }, { "objectID": "app-qbox", "slug": "qbox", @@ -15463,17 +19844,17 @@ "icon256": "qbox-icon-256.png", "date": "2017-11-13", "iconColors": [ - "#5b51fc", - "#fbfbfc", - "#1539fc", - "#8c64fc", - "#acb3fc" + "#4e4cfc", + "#fafafc", + "#8d67fc", + "#afb5fc", + "#7586fc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.118Z", - "readmeFetchedAt": "2018-05-14T15:02:48.261Z", - "goodColorOnWhite": "#5B51FC", - "goodColorOnBlack": "#8C64FC", - "faintColorOnWhite": "rgba(91, 81, 252, 0.1)", + "latestReleaseFetchedAt": "2019-02-08T00:07:30.611Z", + "readmeFetchedAt": "2019-02-08T00:07:50.260Z", + "goodColorOnWhite": "#4E4CFC", + "goodColorOnBlack": "#8D67FC", + "faintColorOnWhite": "rgba(78, 76, 252, 0.1)", "keyValuePairs": [ "is:app", "app:QBox", @@ -15515,8 +19896,8 @@ "#a6aeb6", "#acbcbc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.183Z", - "readmeFetchedAt": "2018-05-14T15:02:48.227Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:30.732Z", + "readmeFetchedAt": "2019-02-08T00:07:50.235Z", "goodColorOnWhite": "#04758E", "goodColorOnBlack": "#07B9E1", "faintColorOnWhite": "rgba(4, 117, 142, 0.1)", @@ -15554,8 +19935,8 @@ "#949494", "#84ccc4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.146Z", - "readmeFetchedAt": "2018-05-14T15:02:48.216Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:30.718Z", + "readmeFetchedAt": "2019-02-08T00:07:50.327Z", "goodColorOnWhite": "#177C76", "goodColorOnBlack": "#1D9C94", "faintColorOnWhite": "rgba(23, 124, 118, 0.1)", @@ -15565,6 +19946,40 @@ "app:quail" ] }, + { + "objectID": "app-quickbooks", + "slug": "quickbooks", + "name": "QuickBooks", + "description": "Desktop app for QuickBooks Online.", + "website": "https://qbo.intuit.com/", + "category": "Business", + "keywords": [ + "business", + "accounting", + "invoicing" + ], + "icon": "quickbooks-icon.png", + "icon32": "quickbooks-icon-32.png", + "icon64": "quickbooks-icon-64.png", + "icon128": "quickbooks-icon-128.png", + "icon256": "quickbooks-icon-256.png", + "date": "2018-07-24", + "iconColors": [ + "#2ba31b", + "#f9faf9", + "#93d08c", + "#7abf72", + "#5cb054" + ], + "goodColorOnWhite": "#228216", + "goodColorOnBlack": "#2BA31B", + "faintColorOnWhite": "rgba(34, 130, 22, 0.1)", + "keyValuePairs": [ + "is:app", + "app:QuickBooks", + "app:quickbooks" + ] + }, { "objectID": "app-quickcalc", "slug": "quickcalc", @@ -15595,8 +20010,8 @@ "#abe271", "#bcec94" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.166Z", - "readmeFetchedAt": "2018-05-14T15:02:48.448Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:30.675Z", + "readmeFetchedAt": "2019-02-08T00:07:50.423Z", "goodColorOnWhite": "#497E15", "goodColorOnBlack": "#7CD424", "faintColorOnWhite": "rgba(73, 126, 21, 0.1)", @@ -15606,6 +20021,95 @@ "app:quickcalc" ] }, + { + "objectID": "app-quickwords", + "slug": "quickwords", + "name": "Quickwords", + "description": "A productivity app, to get on with your work quicker. It expands predefined snippets into commonly typed text or emojis 😎", + "website": "https://quickwords.co", + "category": "Productivity", + "repository": "https://github.com/quickwords/quickwords", + "keywords": [ + "productivity", + "text expander", + "snippets", + "quickwords" + ], + "license": "MIT", + "icon": "quickwords-icon.png", + "icon32": "quickwords-icon-32.png", + "icon64": "quickwords-icon-64.png", + "icon128": "quickwords-icon-128.png", + "icon256": "quickwords-icon-256.png", + "date": "2018-07-06", + "iconColors": [ + "#2cace4", + "#fbfbfc", + "#86d0ef", + "#ade2f4", + "#5cc4ec" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:30.813Z", + "readmeFetchedAt": "2019-02-08T00:07:50.390Z", + "goodColorOnWhite": "#12769C", + "goodColorOnBlack": "#5CC4EC", + "faintColorOnWhite": "rgba(18, 118, 156, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Quickwords", + "app:quickwords" + ] + }, + { + "objectID": "app-r6rc", + "slug": "r6rc", + "name": "R6RC", + "description": "A minimalistic rank calculator for Rainbow Six: Siege", + "repository": "https://github.com/austinleath/r6rc", + "website": "https://www.r6rc.com/r6rc.html", + "keywords": [ + "Rainbow", + "Six", + "Siege", + "R6rc", + "Operator", + "Math", + "Rank", + "Mmrcalculator", + "Mmr", + "Calculator", + "Pc", + "Windows", + "Win" + ], + "locales": [ + "en_US" + ], + "category": "Utilities", + "icon": "r6rc-icon.png", + "icon32": "r6rc-icon-32.png", + "icon64": "r6rc-icon-64.png", + "icon128": "r6rc-icon-128.png", + "icon256": "r6rc-icon-256.png", + "date": "2018-07-09", + "iconColors": [ + "#fa9b0d", + "#e4e4e3", + "#4d4c4b", + "#fccc84", + "#80888c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:30.821Z", + "readmeFetchedAt": "2019-02-08T00:07:50.457Z", + "goodColorOnWhite": "#4D4C4B", + "goodColorOnBlack": "#FA9B0D", + "faintColorOnWhite": "rgba(77, 76, 75, 0.1)", + "keyValuePairs": [ + "is:app", + "app:R6RC", + "app:r6rc" + ] + }, { "objectID": "app-rambox", "slug": "rambox", @@ -15649,8 +20153,8 @@ "#9484a4", "#6c5c7c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.191Z", - "readmeFetchedAt": "2018-05-14T15:02:48.416Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:30.872Z", + "readmeFetchedAt": "2019-02-08T00:07:50.753Z", "goodColorOnWhite": "#293162", "goodColorOnBlack": "#3294B3", "faintColorOnWhite": "rgba(41, 49, 98, 0.1)", @@ -15691,8 +20195,8 @@ "#cc8ccc", "#c47ccc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.233Z", - "readmeFetchedAt": "2018-05-14T15:02:48.335Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:30.928Z", + "readmeFetchedAt": "2019-02-08T00:07:50.568Z", "goodColorOnWhite": "#A26016", "goodColorOnBlack": "#E8A356", "faintColorOnWhite": "rgba(162, 96, 22, 0.1)", @@ -15751,8 +20255,8 @@ "#9c9c9c", "#949494" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.205Z", - "readmeFetchedAt": "2018-05-14T15:02:48.463Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:30.903Z", + "readmeFetchedAt": "2019-02-08T00:07:50.611Z", "goodColorOnWhite": "#373737", "goodColorOnBlack": "#FBFBFB", "faintColorOnWhite": "rgba(55, 55, 55, 0.1)", @@ -15762,6 +20266,46 @@ "app:ratemymovie" ] }, + { + "objectID": "app-raven-reader", + "slug": "raven-reader", + "name": "Raven Reader", + "description": "Simple RSS Reader for desktop without any distraction.", + "repository": "https://github.com/mrgodhani/raven-reader", + "license": "MIT", + "keywords": [ + "reader", + "feed reader", + "rss reader", + "news reader", + "reading", + "news" + ], + "category": "News", + "icon": "raven-reader-icon.png", + "icon32": "raven-reader-icon-32.png", + "icon64": "raven-reader-icon-64.png", + "icon128": "raven-reader-icon-128.png", + "icon256": "raven-reader-icon-256.png", + "date": "2018-10-28", + "iconColors": [ + "#dde398", + "#183248", + "#65dec4", + "#688b83", + "#78a0ab" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:30.962Z", + "readmeFetchedAt": "2019-02-08T00:07:50.648Z", + "goodColorOnWhite": "#183248", + "goodColorOnBlack": "#65DEC4", + "faintColorOnWhite": "rgba(24, 50, 72, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Raven Reader", + "app:raven-reader" + ] + }, { "objectID": "app-ray", "slug": "ray", @@ -15795,8 +20339,8 @@ "#b1e4f9", "#9ad88a" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.237Z", - "readmeFetchedAt": "2018-05-14T15:02:48.555Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:30.999Z", + "readmeFetchedAt": "2019-02-08T00:07:50.670Z", "goodColorOnWhite": "#0D7DAA", "goodColorOnBlack": "#B1E4F9", "faintColorOnWhite": "rgba(13, 125, 170, 0.1)", @@ -15831,8 +20375,8 @@ "#58e0bc", "#58e0bc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.237Z", - "readmeFetchedAt": "2018-05-14T15:02:48.715Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:30.990Z", + "readmeFetchedAt": "2019-02-08T00:07:50.759Z", "goodColorOnWhite": "#040404", "goodColorOnBlack": "#54DCFC", "faintColorOnWhite": "rgba(4, 4, 4, 0.1)", @@ -15872,8 +20416,8 @@ "#3d3d79", "#8c8cf9" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.280Z", - "readmeFetchedAt": "2018-05-14T15:02:48.601Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.048Z", + "readmeFetchedAt": "2019-02-08T00:07:50.765Z", "goodColorOnWhite": "#6363C4", "goodColorOnBlack": "#8C8CF9", "faintColorOnWhite": "rgba(99, 99, 196, 0.1)", @@ -15883,6 +20427,106 @@ "app:rebaslight" ] }, + { + "objectID": "app-recollectr", + "slug": "recollectr", + "name": "Recollectr", + "description": "Minimally disruptive, maximally efficient notetaking. Record and recall without breaking your flow.", + "website": "https://recollectr.io", + "category": "Productivity", + "repository": "https://github.com/Recollectr/releases", + "keywords": [ + "tasks", + "todos", + "editor", + "productivity", + "lists", + "real-time", + "checklist", + "markdown", + "note", + "notes", + "database", + "note-taking", + "text", + "images", + "todo", + "local", + "encrypted", + "reminders", + "secure", + "private", + "syncing" + ], + "icon": "recollectr-icon.png", + "icon32": "recollectr-icon-32.png", + "icon64": "recollectr-icon-64.png", + "icon128": "recollectr-icon-128.png", + "icon256": "recollectr-icon-256.png", + "date": "2018-07-11", + "iconColors": [ + "#fafafa", + "#2f5874", + "#262626", + "#88a1b4", + "#8cacb9" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:31.056Z", + "readmeFetchedAt": "2019-02-08T00:07:50.762Z", + "goodColorOnWhite": "#2F5874", + "goodColorOnBlack": "#8CACB9", + "faintColorOnWhite": "rgba(47, 88, 116, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Recollectr", + "app:recollectr" + ] + }, + { + "objectID": "app-redp", + "slug": "redp", + "name": "RedP", + "description": "A simple cross-platform music player", + "category": "Music", + "repository": "https://github.com/Kiarash-Z/redp", + "keywords": [ + "cross-platform", + "music-player", + "react", + "mobx", + "electron", + "app", + "desktop" + ], + "screenshots": [ + { + "imageUrl": "https://user-images.githubusercontent.com/20098648/40877410-a772cc6a-6695-11e8-921a-1f8aff6ae8b9.jpg" + } + ], + "icon": "redp-icon.png", + "icon32": "redp-icon-32.png", + "icon64": "redp-icon-64.png", + "icon128": "redp-icon-128.png", + "icon256": "redp-icon-256.png", + "date": "2018-06-18", + "iconColors": [ + "#fbfbfb", + "#e45469", + "#e08e90", + "#f3b1bc", + "#ed8494" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:31.076Z", + "readmeFetchedAt": "2019-02-08T00:07:50.922Z", + "goodColorOnWhite": "#E02E49", + "goodColorOnBlack": "#ED8494", + "faintColorOnWhite": "rgba(224, 46, 73, 0.1)", + "keyValuePairs": [ + "is:app", + "app:RedP", + "app:redp" + ] + }, { "objectID": "app-remember", "slug": "remember", @@ -15987,6 +20631,88 @@ "app:reqview" ] }, + { + "objectID": "app-reversee", + "slug": "reversee", + "name": "Reversee", + "description": "Reverse Proxy Web Debugger", + "website": "https://www.reversee.ninja/", + "keywords": [ + "reverse proxy", + "web debugger", + "javascript", + "developer", + "software", + "network" + ], + "category": "Developer Tools", + "screenshots": [ + { + "imageUrl": "https://static.wixstatic.com/media/41c5dc_a967204788b44459ba2635a773d5f206~mv2_d_2880_1800_s_2.png/v1/fill/w_1000,h_625,al_c,usm_0.66_1.00_0.01/41c5dc_a967204788b44459ba2635a773d5f206~mv2_d_2880_1800_s_2.png", + "caption": "screenshot" + }, + { + "imageUrl": "https://static.wixstatic.com/media/41c5dc_cc2ccb3d26a44e0c889a1675cf9ecd46~mv2.png/v1/fill/w_1000,h_152,al_c,usm_0.66_1.00_0.01/41c5dc_cc2ccb3d26a44e0c889a1675cf9ecd46~mv2.png", + "caption": "screenshot" + } + ], + "icon": "reversee-icon.png", + "icon32": "reversee-icon-32.png", + "icon64": "reversee-icon-64.png", + "icon128": "reversee-icon-128.png", + "icon256": "reversee-icon-256.png", + "date": "2018-06-19", + "iconColors": [ + "#0b0b0b", + "#da924d", + "#9f1410", + "#519a2e", + "#efdecb" + ], + "goodColorOnWhite": "#9F1410", + "goodColorOnBlack": "#DA924D", + "faintColorOnWhite": "rgba(159, 20, 16, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Reversee", + "app:reversee" + ] + }, + { + "objectID": "app-ride", + "slug": "ride", + "name": "RIDE", + "description": "Remote IDE for Dyalog APL.", + "repository": "https://github.com/Dyalog/ride", + "keywords": [ + "apl" + ], + "license": "MIT", + "category": "Developer Tools", + "icon": "ride-icon.png", + "icon32": "ride-icon-32.png", + "icon64": "ride-icon-64.png", + "icon128": "ride-icon-128.png", + "icon256": "ride-icon-256.png", + "date": "2018-10-30", + "iconColors": [ + "#f38926", + "#fbf9f7", + "#8e3e0c", + "#f9b569", + "#fcc481" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:31.168Z", + "readmeFetchedAt": "2019-02-08T00:07:50.866Z", + "goodColorOnWhite": "#8E3E0C", + "goodColorOnBlack": "#FCC481", + "faintColorOnWhite": "rgba(142, 62, 12, 0.1)", + "keyValuePairs": [ + "is:app", + "app:RIDE", + "app:ride" + ] + }, { "objectID": "app-ridereceipts", "slug": "ridereceipts", @@ -16019,8 +20745,8 @@ "#a4a3bd", "#8c8c8c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.311Z", - "readmeFetchedAt": "2018-05-14T15:02:48.597Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.154Z", + "readmeFetchedAt": "2019-02-08T00:07:50.892Z", "goodColorOnWhite": "#B607CB", "goodColorOnBlack": "#A4A3BD", "faintColorOnWhite": "rgba(182, 7, 203, 0.1)", @@ -16076,8 +20802,8 @@ "#819798", "#8c849c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.331Z", - "readmeFetchedAt": "2018-05-14T15:02:48.663Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.187Z", + "readmeFetchedAt": "2019-02-08T00:07:50.916Z", "goodColorOnWhite": "#744C84", "goodColorOnBlack": "#7ECCA5", "faintColorOnWhite": "rgba(116, 76, 132, 0.1)", @@ -16114,8 +20840,8 @@ "#949ca8", "#8c94a4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.283Z", - "readmeFetchedAt": "2018-05-14T15:02:48.687Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.216Z", + "readmeFetchedAt": "2019-02-08T00:07:51.130Z", "goodColorOnWhite": "#354455", "goodColorOnBlack": "#8C94A4", "faintColorOnWhite": "rgba(53, 68, 85, 0.1)", @@ -16129,10 +20855,27 @@ "objectID": "app-rocket-chat", "slug": "rocket-chat", "name": "Rocket.Chat", - "description": "The ultimate open source web chat platform", + "description": "the leading open source team communication platform", "website": "https://rocket.chat", + "homebrewCaskName": "rocket.chat", "keywords": [ - "chat" + "chat", + "messaging", + "collaboration", + "chat", + "chatops", + "enterprise", + "teams", + "p2p", + "workstream", + "community", + "open source", + "cloud", + "on-premises", + "video", + "conferencing", + "security", + "livechat" ], "category": "Social Networking", "icon": "rocket-chat-icon.png", @@ -16157,6 +20900,112 @@ "app:rocket-chat" ] }, + { + "objectID": "app-s3uploader", + "slug": "s3uploader", + "name": "S3Uploader", + "description": "A minimalistic UI to conveniently upload and download files from AWS S3.", + "category": "Utilities", + "repository": "https://github.com/Yamazaki93/S3Uploader", + "keywords": [ + "AWS", + "S3", + "uploader", + "downloader", + "angular" + ], + "license": "MIT", + "screenshots": [ + { + "imageUrl": "https://github.com/Yamazaki93/S3Uploader/raw/master/misc/sc-1.PNG", + "caption": "Minimalistic UI for browsing files on AWS S3", + "imageLink": "https://github.com/Yamazaki93/S3Uploader" + }, + { + "imageUrl": "https://github.com/Yamazaki93/S3Uploader/raw/master/misc/sc-2.PNG", + "caption": "Tree like file browser", + "imageLink": "https://github.com/Yamazaki93/S3Uploader" + }, + { + "imageUrl": "https://github.com/Yamazaki93/S3Uploader/raw/master/misc/sc-3.PNG", + "caption": "Centralized upload and download tracking", + "imageLink": "https://github.com/Yamazaki93/S3Uploader" + }, + { + "imageUrl": "https://github.com/Yamazaki93/S3Uploader/raw/master/misc/sc-4.PNG", + "caption": "Multi-file upload with rename options", + "imageLink": "https://github.com/Yamazaki93/S3Uploader" + } + ], + "icon": "s3uploader-icon.png", + "icon32": "s3uploader-icon-32.png", + "icon64": "s3uploader-icon-64.png", + "icon128": "s3uploader-icon-128.png", + "icon256": "s3uploader-icon-256.png", + "date": "2018-11-14", + "iconColors": [ + "#202837", + "#f4f4f5", + "#767e84", + "#616a72", + "#898c94" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:31.312Z", + "readmeFetchedAt": "2019-02-08T00:07:51.013Z", + "goodColorOnWhite": "#202837", + "goodColorOnBlack": "#767E84", + "faintColorOnWhite": "rgba(32, 40, 55, 0.1)", + "keyValuePairs": [ + "is:app", + "app:S3Uploader", + "app:s3uploader" + ] + }, + { + "objectID": "app-sai", + "slug": "sai", + "name": "SingleAccessInterface", + "description": "Secure your personal web application data", + "website": "https://smaro-nitr.github.io/#!/sai-home", + "keywords": [ + "gmail", + "instagram", + "messenger", + "whatsapp", + "youtube", + "goodreads", + "privacy", + "password protect" + ], + "license": "GPL-3.0", + "category": "Utilities", + "screenshots": [ + { + "imageUrl": "https://smaro-nitr.github.io/sai/assets/img/sai-content.gif" + } + ], + "icon": "sai-icon.png", + "icon32": "sai-icon-32.png", + "icon64": "sai-icon-64.png", + "icon128": "sai-icon-128.png", + "icon256": "sai-icon-256.png", + "date": "2018-07-30", + "iconColors": [ + "#3eba5d", + "#eef1f0", + "#f8ae0b", + "#4810ca", + "#865be0" + ], + "goodColorOnWhite": "#4810CA", + "goodColorOnBlack": "#F8AE0B", + "faintColorOnWhite": "rgba(72, 16, 202, 0.1)", + "keyValuePairs": [ + "is:app", + "app:SingleAccessInterface", + "app:sai" + ] + }, { "objectID": "app-sandman", "slug": "sandman", @@ -16193,8 +21042,8 @@ "#7468a7", "#b4d4ec" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.355Z", - "readmeFetchedAt": "2018-05-14T15:02:48.765Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.272Z", + "readmeFetchedAt": "2019-02-08T00:07:51.092Z", "goodColorOnWhite": "#1275BC", "goodColorOnBlack": "#F4E0A9", "faintColorOnWhite": "rgba(18, 117, 188, 0.1)", @@ -16204,6 +21053,58 @@ "app:sandman" ] }, + { + "objectID": "app-school-timetable", + "slug": "school-timetable", + "name": "Timetable", + "description": "Simple, useful timetable application.", + "category": "Education", + "repository": "https://github.com/KDani-99/school_timetable", + "keywords": [ + "School", + "Timetable", + "Management", + "Time", + "Desktop" + ], + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/KDani-99/school_timetable/master/screenshot1.jpg", + "caption": "Screenshot 1" + }, + { + "imageUrl": "https://raw.githubusercontent.com/KDani-99/school_timetable/master/screenshot2.jpg", + "caption": "Screenshot 2" + }, + { + "imageUrl": "https://raw.githubusercontent.com/KDani-99/school_timetable/master/screenshot3.jpg", + "caption": "Screenshot 3" + } + ], + "icon": "school-timetable-icon.png", + "icon32": "school-timetable-icon-32.png", + "icon64": "school-timetable-icon-64.png", + "icon128": "school-timetable-icon-128.png", + "icon256": "school-timetable-icon-256.png", + "date": "2018-09-04", + "iconColors": [ + "#2b2b3a", + "#0cbc8c", + "#149c7c", + "#3c4c4c", + "#2c7464" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:31.311Z", + "readmeFetchedAt": "2019-02-08T00:07:51.149Z", + "goodColorOnWhite": "#2C7464", + "goodColorOnBlack": "#0CBC8C", + "faintColorOnWhite": "rgba(44, 116, 100, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Timetable", + "app:school-timetable" + ] + }, { "objectID": "app-sciencefair", "slug": "sciencefair", @@ -16242,8 +21143,8 @@ "#726439", "#4c747c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.407Z", - "readmeFetchedAt": "2018-05-14T15:02:48.739Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.353Z", + "readmeFetchedAt": "2019-02-08T00:07:51.166Z", "goodColorOnWhite": "#726439", "goodColorOnBlack": "#CAAA4B", "faintColorOnWhite": "rgba(114, 100, 57, 0.1)", @@ -16253,6 +21154,57 @@ "app:sciencefair" ] }, + { + "objectID": "app-screenaware", + "slug": "screenaware", + "name": "ScreenAware Time Tracker", + "description": "Automatically relate the time you spend in front of the computer to your projects or clients.", + "website": "https://www.screenaware.com/", + "category": "Productivity", + "goodColorOnWhite": "#67488D", + "goodColorOnBlack": "#ffffff", + "faintColorOnWhite": "rgba(0, 0, 0, 0.65)", + "keywords": [ + "automatic time tracking", + "time tracker", + "timesheet", + "worktime", + "hours", + "work time tracker" + ], + "screenshots": [ + { + "imageUrl": "https://s3.eu-central-1.amazonaws.com/screenaware-public/marketing/electronapps/sa-screenshot_sensor-20180615.png", + "imageLink": "https://s3.eu-central-1.amazonaws.com/screenaware-public/marketing/electronapps/sa-screenshot_sensor-20180615.png" + }, + { + "imageUrl": "https://s3.eu-central-1.amazonaws.com/screenaware-public/marketing/electronapps/sa-screenshot_combo-20180615.png", + "imageLink": "https://s3.eu-central-1.amazonaws.com/screenaware-public/marketing/electronapps/sa-screenshot_combo-20180615.png" + }, + { + "imageUrl": "https://s3.eu-central-1.amazonaws.com/screenaware-public/marketing/electronapps/sa-screenshot_sensor-login-20180615.png", + "imageLink": "https://s3.eu-central-1.amazonaws.com/screenaware-public/marketing/electronapps/sa-screenshot_sensor-login-20180615.png" + } + ], + "icon": "screenaware-icon.png", + "icon32": "screenaware-icon-32.png", + "icon64": "screenaware-icon-64.png", + "icon128": "screenaware-icon-128.png", + "icon256": "screenaware-icon-256.png", + "date": "2018-06-18", + "iconColors": [ + "#acacac", + "#644b8c", + "#848484", + "#9cb098", + "#9cb098" + ], + "keyValuePairs": [ + "is:app", + "app:ScreenAware Time Tracker", + "app:screenaware" + ] + }, { "objectID": "app-screencat", "slug": "screencat", @@ -16283,8 +21235,8 @@ "#080404", "#080404" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.391Z", - "readmeFetchedAt": "2018-05-14T15:02:48.860Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.433Z", + "readmeFetchedAt": "2019-02-08T00:07:51.276Z", "goodColorOnWhite": "#080404", "goodColorOnBlack": "#FFF", "faintColorOnWhite": "rgba(8, 4, 4, 0.1)", @@ -16294,6 +21246,50 @@ "app:screencat" ] }, + { + "objectID": "app-screentray", + "slug": "screentray", + "name": "ScreenTray", + "description": "Capture, annotate and share screenshots with ease", + "website": "https://screentray.com", + "repository": "https://github.com/DSnopov/screentray-distribution", + "keywords": [ + "screenshots", + "sharing", + "macos", + "cloud", + "google", + "drive", + "dropbox", + "branding", + "productivity" + ], + "category": "Productivity", + "youtube_video_url": "https://www.youtube.com/watch?v=VYhc2j5oDWE", + "icon": "screentray-icon.png", + "icon32": "screentray-icon-32.png", + "icon64": "screentray-icon-64.png", + "icon128": "screentray-icon-128.png", + "icon256": "screentray-icon-256.png", + "date": "2018-12-01", + "iconColors": [ + "#5bbb8c", + "#2c549c", + "#448c94", + "#3c7898", + "#447e94" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:31.417Z", + "readmeFetchedAt": "2019-02-08T00:07:51.231Z", + "goodColorOnWhite": "#2C549C", + "goodColorOnBlack": "#5BBB8C", + "faintColorOnWhite": "rgba(44, 84, 156, 0.1)", + "keyValuePairs": [ + "is:app", + "app:ScreenTray", + "app:screentray" + ] + }, { "objectID": "app-sealtalk", "slug": "sealtalk", @@ -16323,8 +21319,8 @@ "#54bcfc", "#9cd4fc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.390Z", - "readmeFetchedAt": "2018-05-14T15:02:48.784Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.400Z", + "readmeFetchedAt": "2019-02-08T00:07:51.265Z", "goodColorOnWhite": "#037BC6", "goodColorOnBlack": "#1BA4FB", "faintColorOnWhite": "rgba(3, 123, 198, 0.1)", @@ -16366,8 +21362,8 @@ "#6c7482", "#646c74" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.397Z", - "readmeFetchedAt": "2018-05-14T15:02:48.916Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.456Z", + "readmeFetchedAt": "2019-02-08T00:07:51.305Z", "goodColorOnWhite": "#1D1C26", "goodColorOnBlack": "#9AA9B8", "faintColorOnWhite": "rgba(29, 28, 38, 0.1)", @@ -16587,8 +21583,8 @@ "#bcbcbc", "#b4b4b4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.625Z", - "readmeFetchedAt": "2018-05-14T15:02:48.876Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.486Z", + "readmeFetchedAt": "2019-02-08T00:07:51.342Z", "goodColorOnWhite": "#6C6C6C", "goodColorOnBlack": "#8CBA58", "faintColorOnWhite": "rgba(108, 108, 108, 0.1)", @@ -16603,6 +21599,7 @@ "slug": "servpane", "name": "ServPane", "description": "Manage Homebrew services from the menu bar", + "homebrewCaskName": "servpane", "category": "Developer Tools", "repository": "https://github.com/aderyabin/ServPane", "keywords": [ @@ -16630,8 +21627,8 @@ "#8b8783", "#949494" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.443Z", - "readmeFetchedAt": "2018-05-14T15:02:48.888Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.482Z", + "readmeFetchedAt": "2019-02-08T00:07:51.416Z", "goodColorOnWhite": "#282928", "goodColorOnBlack": "#F2B6B4", "faintColorOnWhite": "rgba(40, 41, 40, 0.1)", @@ -16673,8 +21670,8 @@ "#bc7c94", "#bc7c9c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.480Z", - "readmeFetchedAt": "2018-05-14T15:02:49.002Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.524Z", + "readmeFetchedAt": "2019-02-08T00:07:51.392Z", "goodColorOnWhite": "#740434", "goodColorOnBlack": "#BC7C94", "faintColorOnWhite": "rgba(116, 4, 52, 0.1)", @@ -16684,6 +21681,113 @@ "app:seton" ] }, + { + "objectID": "app-sftpclient", + "slug": "sftpclient", + "name": "sFTP Client", + "description": "Transfer files with FTP, FTPIS, FTPES and SFTP (Including SSH Terminal)", + "website": "https://www.sftpclient.io/download", + "keywords": [ + "sftp", + "ftp", + "ftps", + "ftpis", + "ftpes", + "ssh", + "terminal", + "port forwarding", + "server", + "nas" + ], + "license": "Proprietary", + "category": "Developer Tools", + "screenshots": [ + { + "imageUrl": "https://dashboard.snapcraft.io/site_media/appmedia/2018/08/Dark_-_Light.png", + "imageLink": "https://dashboard.snapcraft.io/site_media/appmedia/2018/08/Dark_-_Light.png" + }, + { + "imageUrl": "https://dashboard.snapcraft.io/site_media/appmedia/2018/08/Light.png", + "imageLink": "https://dashboard.snapcraft.io/site_media/appmedia/2018/08/Light.png" + }, + { + "imageUrl": "https://dashboard.snapcraft.io/site_media/appmedia/2018/08/Dark.png", + "imageLink": "https://dashboard.snapcraft.io/site_media/appmedia/2018/08/Dark.png" + }, + { + "imageUrl": "https://dashboard.snapcraft.io/site_media/appmedia/2018/08/SSH.png", + "imageLink": "https://dashboard.snapcraft.io/site_media/appmedia/2018/08/SSH.png" + }, + { + "imageUrl": "https://dashboard.snapcraft.io/site_media/appmedia/2018/08/Transfers.png", + "imageLink": "https://dashboard.snapcraft.io/site_media/appmedia/2018/08/Transfers.png" + } + ], + "icon": "sftpclient-icon.png", + "icon32": "sftpclient-icon-32.png", + "icon64": "sftpclient-icon-64.png", + "icon128": "sftpclient-icon-128.png", + "icon256": "sftpclient-icon-256.png", + "date": "2018-08-09", + "iconColors": [ + "#d4e7ef", + "#4b8ba4", + "#5bacd4", + "#8ab2c5", + "#a3c4d3" + ], + "goodColorOnWhite": "#29769C", + "goodColorOnBlack": "#5BACD4", + "faintColorOnWhite": "rgba(41, 118, 156, 0.1)", + "keyValuePairs": [ + "is:app", + "app:sFTP Client", + "app:sftpclient" + ] + }, + { + "objectID": "app-shaper", + "slug": "shaper", + "name": "Shaper", + "description": "Build code templates with an intuitive GUI.", + "website": "https://getshaper.com/", + "category": "Developer Tools", + "keywords": [ + "code", + "snippets", + "boilerplate", + "scaffolding", + "templating" + ], + "screenshots": [ + { + "imageUrl": "https://getshaper.com/images/demo-segmentation.gif", + "caption": "Creating segments with Shaper", + "imageLink": "https://getshaper.com/" + } + ], + "icon": "shaper-icon.png", + "icon32": "shaper-icon-32.png", + "icon64": "shaper-icon-64.png", + "icon128": "shaper-icon-128.png", + "icon256": "shaper-icon-256.png", + "date": "2018-08-09", + "iconColors": [ + "#2f8ee8", + "#f3f3f6", + "#9b37de", + "#cc19da", + "#8f9cd2" + ], + "goodColorOnWhite": "#9B37DE", + "goodColorOnBlack": "#2F8EE8", + "faintColorOnWhite": "rgba(155, 55, 222, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Shaper", + "app:shaper" + ] + }, { "objectID": "app-shapespark", "slug": "shapespark", @@ -16718,6 +21822,89 @@ "app:shapespark" ] }, + { + "objectID": "app-sharepod", + "slug": "sharepod", + "name": "SharePod", + "description": "listen to music from YouTube", + "website": "http://sharepod.kr", + "category": "Music", + "repository": "https://github.com/kimyearho/SharePod", + "keywords": [ + "Music", + "Youtube" + ], + "disabled": true, + "icon": "sharepod-icon.png", + "icon32": "sharepod-icon-32.png", + "icon64": "sharepod-icon-64.png", + "icon128": "sharepod-icon-128.png", + "icon256": "sharepod-icon-256.png", + "date": "2018-07-03", + "iconColors": [ + "#dc2424", + "#fbf8f8", + "#e66f70", + "#ec9494", + "#ec8c8c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:31.571Z", + "readmeFetchedAt": "2019-02-08T00:07:51.451Z", + "goodColorOnWhite": "#DC2424", + "goodColorOnBlack": "#EC8C8C", + "faintColorOnWhite": "rgba(220, 36, 36, 0.1)", + "keyValuePairs": [ + "is:app", + "app:SharePod", + "app:sharepod" + ] + }, + { + "objectID": "app-sharp-tune", + "slug": "sharp-tune", + "name": "Sharp-Tune", + "description": "Lightweight Cross-platform music player.", + "website": "https://md-azmal.github.io/", + "repository": "https://github.com/MD-AZMAL/Sharp-Tune", + "keywords": [ + "audio", + "music", + "song", + "album", + "mp3", + "cross-platform", + "music-player", + "app", + "desktop" + ], + "category": "Music", + "screeshots": { + "imageUrl": "https://raw.githubusercontent.com/MD-AZMAL/Sharp-Tune/master/screen_shot_v_1_0_0.png" + }, + "icon": "sharp-tune-icon.png", + "icon32": "sharp-tune-icon-32.png", + "icon64": "sharp-tune-icon-64.png", + "icon128": "sharp-tune-icon-128.png", + "icon256": "sharp-tune-icon-256.png", + "date": "2018-06-22", + "iconColors": [ + "#070708", + "#c9102c", + "#646468", + "#74747c", + "#747c7c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:31.595Z", + "readmeFetchedAt": "2019-02-08T00:07:51.460Z", + "goodColorOnWhite": "#C9102C", + "goodColorOnBlack": "#74747C", + "faintColorOnWhite": "rgba(201, 16, 44, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Sharp-Tune", + "app:sharp-tune" + ] + }, { "objectID": "app-sheepchat", "slug": "sheepchat", @@ -16782,8 +21969,8 @@ "#9e784e", "#745424" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.479Z", - "readmeFetchedAt": "2018-05-14T15:02:48.976Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.595Z", + "readmeFetchedAt": "2019-02-08T00:07:51.527Z", "goodColorOnWhite": "#37200A", "goodColorOnBlack": "#E1B077", "faintColorOnWhite": "rgba(55, 32, 10, 0.1)", @@ -16959,8 +22146,8 @@ "#38ace4", "#38ace4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.527Z", - "readmeFetchedAt": "2018-05-14T15:02:48.962Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.679Z", + "readmeFetchedAt": "2019-02-08T00:07:52.178Z", "goodColorOnWhite": "#1675A2", "goodColorOnBlack": "#34ACE4", "faintColorOnWhite": "rgba(22, 117, 162, 0.1)", @@ -17001,8 +22188,8 @@ "#1764b5", "#8eccf4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.684Z", - "readmeFetchedAt": "2018-05-14T15:02:48.995Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.687Z", + "readmeFetchedAt": "2019-02-08T00:07:51.580Z", "goodColorOnWhite": "#1764B5", "goodColorOnBlack": "#8ECCF4", "faintColorOnWhite": "rgba(23, 100, 181, 0.1)", @@ -17045,8 +22232,8 @@ "#8ebce4", "#acbccc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.551Z", - "readmeFetchedAt": "2018-05-14T15:02:49.099Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.691Z", + "readmeFetchedAt": "2019-02-08T00:07:51.537Z", "goodColorOnWhite": "#2B76BA", "goodColorOnBlack": "#4A93D5", "faintColorOnWhite": "rgba(43, 118, 186, 0.1)", @@ -17086,8 +22273,8 @@ "#fccc07", "#99aaa2" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.632Z", - "readmeFetchedAt": "2018-05-14T15:02:49.052Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.759Z", + "readmeFetchedAt": "2019-02-08T00:07:51.660Z", "goodColorOnWhite": "#886E02", "goodColorOnBlack": "#FCCC07", "faintColorOnWhite": "rgba(136, 110, 2, 0.1)", @@ -17097,6 +22284,56 @@ "app:skrifa" ] }, + { + "objectID": "app-skutti", + "slug": "skutti", + "name": "Skutti", + "description": "Social network to augment existing content on the web and bypass censorship across the Internet", + "website": "https://www.skutti.com", + "screenshots": [ + { + "imageUrl": "https://storage.googleapis.com/servetus-149320.appspot.com/images/screenshots/skutti-screenshot-2000x1250.jpg", + "caption": "Skutti screenshot" + } + ], + "keywords": [ + "chat", + "messaging", + "collaboration", + "team", + "social", + "community", + "censorship", + "browser", + "chrome" + ], + "category": "Social Networking", + "locales": [ + "en-US", + "de-DE" + ], + "icon": "skutti-icon.png", + "icon32": "skutti-icon-32.png", + "icon64": "skutti-icon-64.png", + "icon128": "skutti-icon-128.png", + "icon256": "skutti-icon-256.png", + "date": "2018-10-02", + "iconColors": [ + "#f69348", + "#169f94", + "#c21f68", + "#f8f5f5", + "#744c94" + ], + "goodColorOnWhite": "#C21F68", + "goodColorOnBlack": "#F69348", + "faintColorOnWhite": "rgba(194, 31, 104, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Skutti", + "app:skutti" + ] + }, { "objectID": "app-skype", "slug": "skype", @@ -17160,15 +22397,15 @@ "icon256": "slack-icon-256.png", "date": "2015-04-08", "iconColors": [ - "#4bb398", - "#f2f6f6", - "#db134d", - "#eaa923", - "#32133a" + "#2cb47c", + "#e41c5c", + "#ecb42c", + "#34c4f4", + "#3cc4f4" ], - "goodColorOnWhite": "#DB134D", - "goodColorOnBlack": "#EAA923", - "faintColorOnWhite": "rgba(219, 19, 77, 0.1)", + "goodColorOnWhite": "#E41C5C", + "goodColorOnBlack": "#34C4F4", + "faintColorOnWhite": "rgba(228, 28, 92, 0.1)", "keyValuePairs": [ "is:app", "app:Slack", @@ -17291,6 +22528,48 @@ "app:smallpdf" ] }, + { + "objectID": "app-smokerstopper", + "slug": "smokerstopper", + "name": "SmokerStopper", + "description": "Simple cross-platform app for tracking your smoking time habits and help to quit.", + "website": "https://phresh-it.hu/apps/smokerstopper/", + "license": "MIT", + "keywords": [ + "manage", + "phresh", + "flash", + "game", + "timetrack", + "health", + "smoking" + ], + "category": "Health & Fitness", + "repository": "https://github.com/Phreshhh/SmokerStopper", + "icon": "smokerstopper-icon.png", + "icon32": "smokerstopper-icon-32.png", + "icon64": "smokerstopper-icon-64.png", + "icon128": "smokerstopper-icon-128.png", + "icon256": "smokerstopper-icon-256.png", + "date": "2019-01-26", + "iconColors": [ + "#d43336", + "#e1d3c1", + "#ab846b", + "#1d1817", + "#cb9da1" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:31.786Z", + "readmeFetchedAt": "2019-02-08T00:07:51.642Z", + "goodColorOnWhite": "#D43336", + "goodColorOnBlack": "#E1D3C1", + "faintColorOnWhite": "rgba(212, 51, 54, 0.1)", + "keyValuePairs": [ + "is:app", + "app:SmokerStopper", + "app:smokerstopper" + ] + }, { "objectID": "app-snake", "slug": "snake", @@ -17317,8 +22596,8 @@ "#acacac", "#b4b4b4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.616Z", - "readmeFetchedAt": "2018-05-14T15:02:49.067Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.792Z", + "readmeFetchedAt": "2019-02-08T00:07:51.697Z", "goodColorOnWhite": "#6C6C6C", "goodColorOnBlack": "#EDEDED", "faintColorOnWhite": "rgba(108, 108, 108, 0.1)", @@ -17328,6 +22607,111 @@ "app:snake" ] }, + { + "objectID": "app-snippetstore", + "slug": "snippetstore", + "name": "Snippet Store", + "description": "A snippet management app for developers", + "website": "https://zerox-dg.github.io/SnippetStoreWeb/", + "repository": "https://github.com/ZeroX-DG/SnippetStore", + "keywords": [ + "code", + "snippet", + "store", + "copy", + "tool", + "developer", + "productivity" + ], + "license": "GPL", + "category": "Developer Tools", + "locales": [ + "en-US", + "vi-VN" + ], + "screenshots": [ + { + "imageUrl": "https://zerox-dg.github.io/SnippetStoreWeb/noframe-list-and-detail-dark.png", + "caption": "SnippetStore in dark theme", + "imageLink": "https://zerox-dg.github.io/SnippetStoreWeb/" + }, + { + "imageUrl": "https://zerox-dg.github.io/SnippetStoreWeb/noframe-list-and-detail.png", + "caption": "SnippetStore in light theme", + "imageLink": "https://zerox-dg.github.io/SnippetStoreWeb/" + } + ], + "icon": "snippetstore-icon.png", + "icon32": "snippetstore-icon-32.png", + "icon64": "snippetstore-icon-64.png", + "icon128": "snippetstore-icon-128.png", + "icon256": "snippetstore-icon-256.png", + "date": "2018-07-18", + "iconColors": [ + "#0484f4", + "#fbfbfc", + "#9dc9fb", + "#63aff6", + "#3ca4f4" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:31.833Z", + "readmeFetchedAt": "2019-02-08T00:07:51.852Z", + "goodColorOnWhite": "#036BC7", + "goodColorOnBlack": "#0484F4", + "faintColorOnWhite": "rgba(3, 107, 199, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Snippet Store", + "app:snippetstore" + ] + }, + { + "objectID": "app-snowyowl", + "slug": "snowyowl", + "name": "SnowyOwl", + "description": "Manage your dataset with ease", + "website": "https://snowyowl.app", + "keywords": [ + "dataset manager", + "reference manager" + ], + "category": "Productivity", + "locales": [ + "en-US", + "zh-CN" + ], + "screenshots": [ + { + "imageUrl": "https://snowyowl.app/asset/img/ss1.png", + "caption": "Main Interface" + }, + { + "imageUrl": "https://snowyowl.app/asset/img/ss2.png", + "caption": "Note Editor" + } + ], + "icon": "snowyowl-icon.png", + "icon32": "snowyowl-icon-32.png", + "icon64": "snowyowl-icon-64.png", + "icon128": "snowyowl-icon-128.png", + "icon256": "snowyowl-icon-256.png", + "date": "2019-01-10", + "iconColors": [ + "#3b3e45", + "#f5f6f5", + "#eabe3b", + "#b4630b", + "#97989a" + ], + "goodColorOnWhite": "#3B3E45", + "goodColorOnBlack": "#B4630B", + "faintColorOnWhite": "rgba(59, 62, 69, 0.1)", + "keyValuePairs": [ + "is:app", + "app:SnowyOwl", + "app:snowyowl" + ] + }, { "objectID": "app-socialcast", "slug": "socialcast", @@ -17400,8 +22784,8 @@ "#464148", "#acacac" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.689Z", - "readmeFetchedAt": "2018-05-14T15:02:49.062Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.877Z", + "readmeFetchedAt": "2019-02-08T00:07:51.780Z", "goodColorOnWhite": "#7D5093", "goodColorOnBlack": "#FBFBFB", "faintColorOnWhite": "rgba(125, 80, 147, 0.1)", @@ -17487,8 +22871,8 @@ "#7d7d7d", "#949494" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.705Z", - "readmeFetchedAt": "2018-05-14T15:02:49.206Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.893Z", + "readmeFetchedAt": "2019-02-08T00:07:51.818Z", "goodColorOnWhite": "#D91E64", "goodColorOnBlack": "#FAFAFA", "faintColorOnWhite": "rgba(217, 30, 100, 0.1)", @@ -17531,8 +22915,8 @@ "#949494", "#747474" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.714Z", - "readmeFetchedAt": "2018-05-14T15:02:49.200Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.927Z", + "readmeFetchedAt": "2019-02-08T00:07:51.925Z", "goodColorOnWhite": "#080807", "goodColorOnBlack": "#FA7304", "faintColorOnWhite": "rgba(8, 8, 7, 0.1)", @@ -17574,8 +22958,8 @@ "#ba7c95", "#ba90ac" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.778Z", - "readmeFetchedAt": "2018-05-14T15:02:49.191Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.960Z", + "readmeFetchedAt": "2019-02-08T00:07:51.956Z", "goodColorOnWhite": "#D53542", "goodColorOnBlack": "#F5EBEC", "faintColorOnWhite": "rgba(213, 53, 66, 0.1)", @@ -17608,8 +22992,8 @@ "#acb4dc", "#9ca4dc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.748Z", - "readmeFetchedAt": "2018-05-14T15:02:49.288Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:31.980Z", + "readmeFetchedAt": "2019-02-08T00:07:51.972Z", "goodColorOnWhite": "#3C4CAC", "goodColorOnBlack": "#9CA4DC", "faintColorOnWhite": "rgba(60, 76, 172, 0.1)", @@ -17691,6 +23075,56 @@ "app:spectrum" ] }, + { + "objectID": "app-sportfx-studio", + "slug": "sportfx-studio", + "name": "SportFX Studio", + "description": "Sports Graphics Editor for Photos and Videos", + "website": "https://scorestream.com/sportfx", + "keywords": [ + "scoreboards", + "schedules", + "high school", + "customizable", + "templates" + ], + "category": "Photo & Video", + "screenshots": [ + { + "imageUrl": "https://s3-us-west-2.amazonaws.com/sportfx-studio-releases/screenshots/screenshot_football_player_stats_1440x900.jpg", + "caption": "Editor w/ Football Player Stats" + }, + { + "imageUrl": "https://s3-us-west-2.amazonaws.com/sportfx-studio-releases/screenshots/screenshot_jumbo_scoreboard_1440x900.jpg", + "caption": "Customizable Templates" + }, + { + "imageUrl": "https://s3-us-west-2.amazonaws.com/sportfx-studio-releases/screenshots/screenshot_baseball_slide_1440x900.jpg", + "caption": "Baseball Player Highlight" + } + ], + "icon": "sportfx-studio-icon.png", + "icon32": "sportfx-studio-icon-32.png", + "icon64": "sportfx-studio-icon-64.png", + "icon128": "sportfx-studio-icon-128.png", + "icon256": "sportfx-studio-icon-256.png", + "date": "2018-08-09", + "iconColors": [ + "#fbfbfb", + "#1c94e4", + "#a4d4f4", + "#6cbbef", + "#d4d4d4" + ], + "goodColorOnWhite": "#1476B6", + "goodColorOnBlack": "#6CBBEF", + "faintColorOnWhite": "rgba(20, 118, 182, 0.1)", + "keyValuePairs": [ + "is:app", + "app:SportFX Studio", + "app:sportfx-studio" + ] + }, { "objectID": "app-spotspot", "slug": "spotspot", @@ -17708,7 +23142,10 @@ "category": "Music", "screenshots": [ { - "imageUrl": "https://raw.githubusercontent.com/will-stone/SpotSpot/master/docs/screenshotSm2.png" + "imageUrl": "https://raw.githubusercontent.com/will-stone/SpotSpot/80c21c76c6f4a27d9e07e389e3f8409dbda0e04e/docs/screenshotSm1.png" + }, + { + "imageUrl": "https://raw.githubusercontent.com/will-stone/SpotSpot/80c21c76c6f4a27d9e07e389e3f8409dbda0e04e/docs/screenshotSm2.png" } ], "icon": "spotspot-icon.png", @@ -17724,8 +23161,8 @@ "#226134", "#1c442c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.765Z", - "readmeFetchedAt": "2018-05-14T15:02:49.304Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.030Z", + "readmeFetchedAt": "2019-02-08T00:07:52.064Z", "goodColorOnWhite": "#226134", "goodColorOnBlack": "#2CD363", "faintColorOnWhite": "rgba(34, 97, 52, 0.1)", @@ -17735,6 +23172,54 @@ "app:spotspot" ] }, + { + "objectID": "app-spraybottle", + "slug": "spraybottle", + "name": "SprayBottle", + "description": "Simple tool for supercharging your scripts.", + "category": "Utilities", + "repository": "https://github.com/jooshkins/SprayBottle", + "keywords": [ + "scripts", + "powershell", + "IT", + "enduser", + "selfservice", + "tasks", + "automation" + ], + "license": "MIT", + "screenshots": [ + { + "imageUrl": "https://github.com/jooshkins/SprayBottle/blob/master/1.png", + "caption": "Admin mode screenshot", + "imageLink": "https://github.com/jooshkins/SprayBottle" + } + ], + "icon": "spraybottle-icon.png", + "icon32": "spraybottle-icon-32.png", + "icon64": "spraybottle-icon-64.png", + "icon128": "spraybottle-icon-128.png", + "icon256": "spraybottle-icon-256.png", + "date": "2018-07-30", + "iconColors": [ + "#1d2eaa", + "#fbb32c", + "#281f1e", + "#a09d9d", + "#8c746c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:32.046Z", + "readmeFetchedAt": "2019-02-08T00:07:52.060Z", + "goodColorOnWhite": "#1D2EAA", + "goodColorOnBlack": "#FBB32C", + "faintColorOnWhite": "rgba(29, 46, 170, 0.1)", + "keyValuePairs": [ + "is:app", + "app:SprayBottle", + "app:spraybottle" + ] + }, { "objectID": "app-spreaker-studio", "slug": "spreaker-studio", @@ -17800,8 +23285,8 @@ "#848cb5", "#8c94ac" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.812Z", - "readmeFetchedAt": "2018-05-14T15:02:49.363Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.070Z", + "readmeFetchedAt": "2019-02-08T00:07:52.103Z", "goodColorOnWhite": "#2E7D89", "goodColorOnBlack": "#3898A7", "faintColorOnWhite": "rgba(46, 125, 137, 0.1)", @@ -17811,6 +23296,55 @@ "app:sqlectron" ] }, + { + "objectID": "app-stack", + "slug": "stack", + "name": "Stack", + "description": "Tweetdeck for all your social apps", + "website": "https://stackapp.download/", + "category": "Social Networking", + "keywords": [ + "mac", + "facebook", + "twitter", + "instagram", + "social", + "tweetdeck" + ], + "screenshots": [ + { + "imageUrl": "https://ph-files.imgix.net/0dc5a357-908c-4459-8185-37ad87a70972?auto=format&auto=compress&codec=mozjpeg&cs=strip", + "caption": "Stack", + "imageLink": "https://stackapp.download/" + }, + { + "imageUrl": "https://ph-files.imgix.net/a799f76a-8c14-40bf-950b-9df3c8bc8494?auto=format&auto=compress&codec=mozjpeg&cs=strip", + "caption": "Stack", + "imageLink": "https://stackapp.download/" + } + ], + "icon": "stack-icon.png", + "icon32": "stack-icon-32.png", + "icon64": "stack-icon-64.png", + "icon128": "stack-icon-128.png", + "icon256": "stack-icon-256.png", + "date": "2018-07-11", + "iconColors": [ + "#f9f9f9", + "#233445", + "#657584", + "#84949c", + "#7c8494" + ], + "goodColorOnWhite": "#233445", + "goodColorOnBlack": "#84949C", + "faintColorOnWhite": "rgba(35, 52, 69, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Stack", + "app:stack" + ] + }, { "objectID": "app-stamp", "slug": "stamp", @@ -17878,8 +23412,8 @@ "#5c8cdc", "#3c7cdc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.821Z", - "readmeFetchedAt": "2018-05-14T15:02:49.282Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.116Z", + "readmeFetchedAt": "2019-02-08T00:07:52.152Z", "goodColorOnWhite": "#0B6BD4", "goodColorOnBlack": "#3C7CDC", "faintColorOnWhite": "rgba(11, 107, 212, 0.1)", @@ -17915,8 +23449,8 @@ "#c69c9c", "#c09494" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.855Z", - "readmeFetchedAt": "2018-05-14T15:02:49.374Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.145Z", + "readmeFetchedAt": "2019-02-08T00:07:52.213Z", "goodColorOnWhite": "#363636", "goodColorOnBlack": "#FA0E0E", "faintColorOnWhite": "rgba(54, 54, 54, 0.1)", @@ -17926,6 +23460,52 @@ "app:standup-picker" ] }, + { + "objectID": "app-station", + "slug": "station", + "name": "Station", + "description": "Unifies all your web apps in one neat & productive interface.", + "website": "https://getstation.com/", + "category": "Productivity", + "keywords": [ + "browser" + ], + "screenshots": [ + { + "imageUrl": "https://getstation.com/public/images/feature@2x.png", + "caption": "Keep your work neatly organized with the smart dock" + }, + { + "imageUrl": "https://getstation.com/public/images/feature-2-v2@2x.png", + "caption": "Become a multitasking beast with quick switch" + }, + { + "imageUrl": "https://getstation.com/public/images/feature-3@2x.png", + "caption": "Station has been designed as a work only, distraction-free platform" + } + ], + "icon": "station-icon.png", + "icon32": "station-icon-32.png", + "icon64": "station-icon-64.png", + "icon128": "station-icon-128.png", + "icon256": "station-icon-256.png", + "date": "2018-10-09", + "iconColors": [ + "#fbfbfb", + "#2d2d2d", + "#949494", + "#a4a4a4", + "#b2b2b2" + ], + "goodColorOnWhite": "#2D2D2D", + "goodColorOnBlack": "#FBFBFB", + "faintColorOnWhite": "rgba(45, 45, 45, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Station", + "app:station" + ] + }, { "objectID": "app-steelseries-engine-3", "slug": "steelseries-engine-3", @@ -17958,6 +23538,55 @@ "app:steelseries-engine-3" ] }, + { + "objectID": "app-sticky-notes", + "slug": "sticky-notes", + "name": "Sticki-Notes", + "description": "A Sticky Notes Application", + "repository": "https://github.com/Playork/Sticky-Note", + "category": "Productivity", + "keywords": [ + "playork", + "tool", + "play", + "game", + "desktop", + "gui", + "work", + "productivity", + "note", + "sticky-note" + ], + "license": "MIT", + "screenshots": [ + { + "imageUrl": "https://user-images.githubusercontent.com/38488260/50736995-4211e800-11ea-11e9-9945-cf0644715016.png" + } + ], + "icon": "sticky-notes-icon.png", + "icon32": "sticky-notes-icon-32.png", + "icon64": "sticky-notes-icon-64.png", + "icon128": "sticky-notes-icon-128.png", + "icon256": "sticky-notes-icon-256.png", + "date": "2019-01-10", + "iconColors": [ + "#060604", + "#fbfb04", + "#a4a404", + "#7c7c04", + "#bcbc04" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:32.137Z", + "readmeFetchedAt": "2019-02-08T00:07:52.186Z", + "goodColorOnWhite": "#060604", + "goodColorOnBlack": "#FBFB04", + "faintColorOnWhite": "rgba(6, 6, 4, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Sticki-Notes", + "app:sticky-notes" + ] + }, { "objectID": "app-stoplight", "slug": "stoplight", @@ -18022,8 +23651,8 @@ "#388cd4", "#388cd4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.825Z", - "readmeFetchedAt": "2018-05-14T15:02:49.416Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.136Z", + "readmeFetchedAt": "2019-02-08T00:07:52.358Z", "goodColorOnWhite": "#2673B2", "goodColorOnBlack": "#348CD4", "faintColorOnWhite": "rgba(38, 115, 178, 0.1)", @@ -18072,8 +23701,8 @@ "#04d304", "#7f4d20" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.914Z", - "readmeFetchedAt": "2018-05-14T15:02:49.401Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.236Z", + "readmeFetchedAt": "2019-02-08T00:07:52.296Z", "goodColorOnWhite": "#7F4D20", "goodColorOnBlack": "#FB7B04", "faintColorOnWhite": "rgba(127, 77, 32, 0.1)", @@ -18159,8 +23788,8 @@ "#39867c", "#84b4ac" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.872Z", - "readmeFetchedAt": "2018-05-14T15:02:49.457Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.216Z", + "readmeFetchedAt": "2019-02-08T00:07:52.293Z", "keyValuePairs": [ "is:app", "app:Streamlabs OBS", @@ -18225,8 +23854,8 @@ "#30b87d", "#467b36" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.903Z", - "readmeFetchedAt": "2018-05-14T15:02:49.432Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.217Z", + "readmeFetchedAt": "2019-02-08T00:07:52.450Z", "goodColorOnWhite": "#467B36", "goodColorOnBlack": "#0FB391", "faintColorOnWhite": "rgba(70, 123, 54, 0.1)", @@ -18236,6 +23865,43 @@ "app:studymd" ] }, + { + "objectID": "app-subgenesis", + "slug": "subgenesis", + "name": "Subgenesis", + "description": "Download subtitles like a boss 😎!", + "category": "Utilities", + "repository": "https://github.com/vinaychandranvs/subgenesis", + "keywords": [ + "subtitle", + "subtitle downloader", + "download subtitles" + ], + "license": "MIT", + "icon": "subgenesis-icon.png", + "icon32": "subgenesis-icon-32.png", + "icon64": "subgenesis-icon-64.png", + "icon128": "subgenesis-icon-128.png", + "icon256": "subgenesis-icon-256.png", + "date": "2018-08-11", + "iconColors": [ + "#156eda", + "#f3f6fb", + "#6ea4ee", + "#8cbcf2", + "#4c94e4" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:32.294Z", + "readmeFetchedAt": "2019-02-08T00:07:52.484Z", + "goodColorOnWhite": "#156EDA", + "goodColorOnBlack": "#8CBCF2", + "faintColorOnWhite": "rgba(21, 110, 218, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Subgenesis", + "app:subgenesis" + ] + }, { "objectID": "app-subordination", "slug": "subordination", @@ -18266,8 +23932,8 @@ "#b28d88", "#b4c46c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.955Z", - "readmeFetchedAt": "2018-05-14T15:02:49.508Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.318Z", + "readmeFetchedAt": "2019-02-08T00:07:52.418Z", "goodColorOnWhite": "#AB650D", "goodColorOnBlack": "#F1A648", "faintColorOnWhite": "rgba(171, 101, 13, 0.1)", @@ -18277,6 +23943,94 @@ "app:subordination" ] }, + { + "objectID": "app-sunder", + "slug": "sunder", + "name": "Sunder", + "description": "A user-friendly graphical interface for Shamir's Secret Sharing.", + "website": "https://sunder.readthedocs.io/en/latest/", + "repository": "https://github.com/freedomofpress/sunder", + "keywords": [ + "Cryptography", + "Secret sharing" + ], + "category": "Utilities", + "icon": "sunder-icon.png", + "icon32": "sunder-icon-32.png", + "icon64": "sunder-icon-64.png", + "icon128": "sunder-icon-128.png", + "icon256": "sunder-icon-256.png", + "date": "2018-05-15", + "iconColors": [ + "#241c43", + "#4babfb", + "#fb9d0e", + "#314e85", + "#1c849c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:32.321Z", + "readmeFetchedAt": "2019-02-08T00:07:52.492Z", + "goodColorOnWhite": "#314E85", + "goodColorOnBlack": "#FB9D0E", + "faintColorOnWhite": "rgba(49, 78, 133, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Sunder", + "app:sunder" + ] + }, + { + "objectID": "app-super-productivity", + "slug": "super-productivity", + "name": "Super Productivity", + "description": "To Do List / Time Tracker with Jira Integration. Makes you super productive! ", + "website": "https://super-productivity.com/", + "repository": "https://github.com/johannesjo/super-productivity", + "keywords": [ + "todo", + "time tracker", + "jira", + "task management", + "productivity" + ], + "license": "MIT", + "category": "Productivity", + "screenshots": [ + { + "imageUrl": "https://super-productivity.com/img/daily-planner-dark.png", + "caption": "Daily Planner", + "imageLink": "https://super-productivity.com/" + }, + { + "imageUrl": "https://super-productivity.com/img/daily-summary.png", + "caption": "Daily Summary", + "imageLink": "https://super-productivity.com/" + } + ], + "icon": "super-productivity-icon.png", + "icon32": "super-productivity-icon-32.png", + "icon64": "super-productivity-icon-64.png", + "icon128": "super-productivity-icon-128.png", + "icon256": "super-productivity-icon-256.png", + "date": "2018-07-03", + "iconColors": [ + "#a5b2f7", + "#050505", + "#69759d", + "#5a5a8c", + "#546484" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:32.356Z", + "readmeFetchedAt": "2019-02-08T00:07:52.516Z", + "goodColorOnWhite": "#5A5A8C", + "goodColorOnBlack": "#A5B2F7", + "faintColorOnWhite": "rgba(90, 90, 140, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Super Productivity", + "app:super-productivity" + ] + }, { "objectID": "app-superpowers-html5-2d-3d-game-maker", "slug": "superpowers-html5-2d-3d-game-maker", @@ -18309,6 +24063,68 @@ "app:superpowers-html5-2d-3d-game-maker" ] }, + { + "objectID": "app-superscript", + "slug": "superscript", + "name": "Superscript", + "description": "A text editor for comic book writers", + "website": "https://www.superscript.app", + "category": "Productivity", + "keywords": [ + "comic", + "comics", + "comic book", + "comic books", + "editor", + "script editor", + "text editor", + "writing", + "word processor" + ], + "screenshots": [ + { + "imageUrl": "https://storage.googleapis.com/superscript-screenshots/superscript-script.jpg", + "caption": "Superscript formats and numbers script elements as you type.", + "imageLink": "https://www.superscript.app" + }, + { + "imageUrl": "https://storage.googleapis.com/superscript-screenshots/superscript-word-count.jpg", + "caption": "Word count displays the number of spoken words in each speech bubble, each panel and each page.", + "imageLink": "https://www.superscript.app" + }, + { + "imageUrl": "https://storage.googleapis.com/superscript-screenshots/superscript-lettering-mode.jpg", + "caption": "Letterer mode allows users to copy blocks of dialog with one click and via global hotkeys.", + "imageLink": "https://www.superscript.app" + }, + { + "imageUrl": "https://storage.googleapis.com/superscript-screenshots/superscript-zen-mode.jpg", + "caption": "Distraction-free zen mode.", + "imageLink": "https://www.superscript.app" + } + ], + "goodColorOnWhite": "#5f2165", + "goodColorOnBlack": "#3382ba", + "icon": "superscript-icon.png", + "icon32": "superscript-icon-32.png", + "icon64": "superscript-icon-64.png", + "icon128": "superscript-icon-128.png", + "icon256": "superscript-icon-256.png", + "date": "2018-10-29", + "iconColors": [ + "#4e4785", + "#fbfbfb", + "#af9cbb", + "#93a7c9", + "#9cbcd7" + ], + "faintColorOnWhite": "rgba(78, 71, 133, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Superscript", + "app:superscript" + ] + }, { "objectID": "app-surf", "slug": "surf", @@ -18411,8 +24227,8 @@ "#e4a4a4", "#e48c94" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.944Z", - "readmeFetchedAt": "2018-05-14T15:02:49.492Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.390Z", + "readmeFetchedAt": "2019-02-08T00:07:52.574Z", "goodColorOnWhite": "#CD2F41", "goodColorOnBlack": "#D44454", "faintColorOnWhite": "rgba(205, 47, 65, 0.1)", @@ -18468,8 +24284,8 @@ "#4cacd4", "#4c443c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:34.948Z", - "readmeFetchedAt": "2018-05-14T15:02:49.504Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.397Z", + "readmeFetchedAt": "2019-02-08T00:07:52.597Z", "goodColorOnWhite": "#4C443C", "goodColorOnBlack": "#F39F55", "faintColorOnWhite": "rgba(76, 68, 60, 0.1)", @@ -18573,8 +24389,8 @@ "#a9a6a7", "#7c7c7c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.075Z", - "readmeFetchedAt": "2018-05-14T15:02:49.617Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.445Z", + "readmeFetchedAt": "2019-02-08T00:07:52.668Z", "goodColorOnWhite": "#050505", "goodColorOnBlack": "#F44163", "faintColorOnWhite": "rgba(5, 5, 5, 0.1)", @@ -18602,7 +24418,7 @@ "category": "Developer Tools", "screenshots": [ { - "imageUrl": "https://camo.githubusercontent.com/8a7f9036190521bef11487f5d8e9d64e8b1a9499/68747470733a2f2f64657369676e66697273742e696f2f696d672f73797374656d64657369676e65722e706e67" + "imageUrl": "https://designfirst.io/img/system-designer.png" } ], "icon": "system-designer-icon.png", @@ -18618,8 +24434,8 @@ "#b4bcc4", "#b4c4c4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.120Z", - "readmeFetchedAt": "2018-05-14T15:02:49.632Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.492Z", + "readmeFetchedAt": "2019-02-08T00:07:52.745Z", "goodColorOnWhite": "#65778A", "goodColorOnBlack": "#C4CCD4", "faintColorOnWhite": "rgba(101, 119, 138, 0.1)", @@ -18669,12 +24485,24 @@ "objectID": "app-tagspaces", "slug": "tagspaces", "name": "TagSpaces", - "description": "Your Hackable File Organizer", - "website": "http://tagspaces.org/", + "description": "Your offline file manager", + "website": "https://www.tagspaces.org/", + "repository": "https://github.com/tagspaces/tagspaces", + "license": "AGPL3", "keywords": [ - "Productivity" + "notetaking", + "organization", + "tagging", + "productivity" + ], + "category": "Utilities", + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/tagspaces/documentation/master/media/v3/tagspaces-v3-themes.jpght", + "caption": "TagSpaces Desktop", + "imageLink": "https://www.tagspaces.org" + } ], - "category": "Productivity", "icon": "tagspaces-icon.png", "icon32": "tagspaces-icon-32.png", "icon64": "tagspaces-icon-64.png", @@ -18688,6 +24516,8 @@ "#36b5bd", "#a9acb4" ], + "latestReleaseFetchedAt": "2019-02-08T00:07:32.493Z", + "readmeFetchedAt": "2019-02-08T00:07:52.764Z", "goodColorOnWhite": "#686778", "goodColorOnBlack": "#F29829", "faintColorOnWhite": "rgba(104, 103, 120, 0.1)", @@ -18697,6 +24527,111 @@ "app:tagspaces" ] }, + { + "objectID": "app-tagstoo", + "slug": "tagstoo", + "name": "Tagstoo", + "description": "Software to tag folders and files, with multimedia and epubs preview.", + "website": "https://tagstoo.sourceforge.io/", + "category": "Productivity", + "repository": "https://sourceforge.net/projects/tagstoo/files/Tagstoo__sourcecode/", + "keywords": [ + "tag folders", + "tag files", + "tagging", + "classification", + "file mannagement", + "search", + "images", + "multimedia", + "epub", + "label" + ], + "license": "GPL-3.0", + "locales": [ + "en-US", + "fr-FR", + "es-ES" + ], + "screenshots": [ + { + "imageUrl": "https://tagstoo.sourceforge.io/img/01-b-Specific_Searches.png", + "caption": "Specific Searches" + }, + { + "imageUrl": "https://tagstoo.sourceforge.io/img/02-e-Various_tag_Shapes_to_select.png", + "caption": "Various tag Shapes to select" + }, + { + "imageUrl": "https://tagstoo.sourceforge.io/img/02-a-Video_Previews.png", + "caption": "Video previews" + }, + { + "imageUrl": "https://tagstoo.sourceforge.io/img/02-d-Grey_and_Color_modes.png", + "caption": "Interface in Grey" + }, + { + "imageUrl": "https://tagstoo.sourceforge.io/img/02-b-Epub_Previews.png", + "caption": "Epub previews" + } + ], + "icon": "tagstoo-icon.png", + "icon32": "tagstoo-icon-32.png", + "icon64": "tagstoo-icon-64.png", + "icon128": "tagstoo-icon-128.png", + "icon256": "tagstoo-icon-256.png", + "date": "2018-10-28", + "iconColors": [ + "#fad869", + "#44b1e7", + "#92521b", + "#ae7029", + "#96c6b6" + ], + "goodColorOnWhite": "#92521B", + "goodColorOnBlack": "#FAD869", + "faintColorOnWhite": "rgba(146, 82, 27, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Tagstoo", + "app:tagstoo" + ] + }, + { + "objectID": "app-tape", + "slug": "tape", + "name": "Tape", + "description": "Intimate project management for creatives.", + "website": "http://aeriform.itch.io", + "category": "Productivity", + "keywords": [ + "productivity", + "creative", + "management", + "organisation" + ], + "icon": "tape-icon.png", + "icon32": "tape-icon-32.png", + "icon64": "tape-icon-64.png", + "icon128": "tape-icon-128.png", + "icon256": "tape-icon-256.png", + "date": "2018-10-22", + "iconColors": [ + "#dc3c4c", + "#e3e3db", + "#dc7b83", + "#dc8c94", + "#dc6474" + ], + "goodColorOnWhite": "#D62638", + "goodColorOnBlack": "#DC3C4C", + "faintColorOnWhite": "rgba(214, 38, 56, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Tape", + "app:tape" + ] + }, { "objectID": "app-taskade", "slug": "taskade", @@ -18859,8 +24794,8 @@ "#ffcc04", "#ffcc04" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.130Z", - "readmeFetchedAt": "2018-05-14T15:02:49.652Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.468Z", + "readmeFetchedAt": "2019-02-08T00:07:52.692Z", "goodColorOnWhite": "#8A6E00", "goodColorOnBlack": "#FFCC04", "faintColorOnWhite": "rgba(138, 110, 0, 0.1)", @@ -18904,8 +24839,8 @@ "#74a49c", "#74aca4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.561Z", - "readmeFetchedAt": "2018-05-14T15:02:49.644Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.539Z", + "readmeFetchedAt": "2019-02-08T00:07:52.785Z", "goodColorOnWhite": "#31796F", "goodColorOnBlack": "#93D3CA", "faintColorOnWhite": "rgba(49, 121, 111, 0.1)", @@ -18947,8 +24882,8 @@ "#fbd45f", "#f3b882" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.163Z", - "readmeFetchedAt": "2018-05-14T15:02:49.730Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.568Z", + "readmeFetchedAt": "2019-02-08T00:07:52.851Z", "goodColorOnWhite": "#8F6C04", "goodColorOnBlack": "#FBD45F", "faintColorOnWhite": "rgba(143, 108, 4, 0.1)", @@ -19093,8 +25028,8 @@ "#5d83a3", "#d3cc94" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.200Z", - "readmeFetchedAt": "2018-05-14T15:02:49.747Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.560Z", + "readmeFetchedAt": "2019-02-08T00:07:52.947Z", "goodColorOnWhite": "#B15870", "goodColorOnBlack": "#F4BB69", "faintColorOnWhite": "rgba(177, 88, 112, 0.1)", @@ -19139,8 +25074,8 @@ "#cfb12e", "#a8a5ac" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.228Z", - "readmeFetchedAt": "2018-05-14T15:02:49.722Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.652Z", + "readmeFetchedAt": "2019-02-08T00:07:52.891Z", "goodColorOnWhite": "#87741E", "goodColorOnBlack": "#CFB12E", "faintColorOnWhite": "rgba(135, 116, 30, 0.1)", @@ -19164,7 +25099,7 @@ "license": "MIT", "screenshots": [ { - "imageUrl": "https://github.com/andrepolischuk/thomas/raw/master/media/screenshot.png" + "imageUrl": "https://raw.githubusercontent.com/andrepolischuk/thomas/master/media/screenshot.png" } ], "icon": "thomas-icon.png", @@ -19180,8 +25115,8 @@ "#e48e9c", "#de5c6c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.261Z", - "readmeFetchedAt": "2018-05-14T15:02:49.717Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.635Z", + "readmeFetchedAt": "2019-02-08T00:07:52.881Z", "goodColorOnWhite": "#C62B3F", "goodColorOnBlack": "#DE5C6C", "faintColorOnWhite": "rgba(198, 43, 63, 0.1)", @@ -19218,8 +25153,8 @@ "#fcac4c", "#fccc94" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.255Z", - "readmeFetchedAt": "2018-05-14T15:02:49.854Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.638Z", + "readmeFetchedAt": "2019-02-08T00:07:53.024Z", "goodColorOnWhite": "#AC5F03", "goodColorOnBlack": "#FCAC4C", "faintColorOnWhite": "rgba(172, 95, 3, 0.1)", @@ -19242,6 +25177,7 @@ "es-NI" ], "category": "Social Networking", + "disabled": true, "icon": "thunder-icon.png", "icon32": "thunder-icon-32.png", "icon64": "thunder-icon-64.png", @@ -19269,7 +25205,6 @@ "slug": "thunderdocs", "name": "ThunderDocs", "description": "Unofficial Google Docs Desktop App", - "website": "https://vista1nik.github.io/gdocs/", "category": "Productivity", "repository": "https://github.com/Vista1nik/ThunderDocs", "keywords": [ @@ -19290,8 +25225,8 @@ "#54aef5", "#74ccfc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.302Z", - "readmeFetchedAt": "2018-05-14T15:02:49.804Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.669Z", + "readmeFetchedAt": "2019-02-08T00:07:52.978Z", "goodColorOnWhite": "#0474D9", "goodColorOnBlack": "#0481F0", "faintColorOnWhite": "rgba(4, 116, 217, 0.1)", @@ -19301,6 +25236,63 @@ "app:thunderdocs" ] }, + { + "objectID": "app-ticodex-sql-schema-compare", + "slug": "ticodex-sql-schema-compare", + "name": "TiCodeX SQL Schema Compare", + "description": "Compares the schema of two database instances, showing the differences and the migration script.", + "website": "https://www.ticodex.com", + "category": "Productivity", + "goodColorOnWhite": "#2A8536", + "goodColorOnBlack": "#39B54A", + "keywords": [ + "sql", + "sql server", + "database", + "microsoft sql", + "postgresql", + "mysql", + "sql database comparison", + "schema compare", + "database synchronization" + ], + "locales": [ + "en-US", + "de-DE", + "it-IT" + ], + "license": "Commercial", + "screenshots": [ + { + "imageUrl": "https://www.ticodex.com/images/sqlcompare-screenshot1.png" + }, + { + "imageUrl": "https://www.ticodex.com/images/sqlcompare-screenshot2.png" + }, + { + "imageUrl": "https://www.ticodex.com/images/sqlcompare-screenshot3.png" + } + ], + "icon": "ticodex-sql-schema-compare-icon.png", + "icon32": "ticodex-sql-schema-compare-icon-32.png", + "icon64": "ticodex-sql-schema-compare-icon-64.png", + "icon128": "ticodex-sql-schema-compare-icon-128.png", + "icon256": "ticodex-sql-schema-compare-icon-256.png", + "date": "2019-01-10", + "iconColors": [ + "#f3f3f3", + "#329848", + "#97caa2", + "#7ecc88", + "#80849a" + ], + "faintColorOnWhite": "rgba(41, 124, 59, 0.1)", + "keyValuePairs": [ + "is:app", + "app:TiCodeX SQL Schema Compare", + "app:ticodex-sql-schema-compare" + ] + }, { "objectID": "app-tidal", "slug": "tidal", @@ -19355,8 +25347,8 @@ "#817f7a", "#b27d1d" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.310Z", - "readmeFetchedAt": "2018-05-14T15:02:49.840Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.758Z", + "readmeFetchedAt": "2019-02-08T00:07:53.094Z", "goodColorOnWhite": "#A94D24", "goodColorOnBlack": "#FAD3C1", "faintColorOnWhite": "rgba(169, 77, 36, 0.1)", @@ -19436,8 +25428,8 @@ "#68a0b8", "#9e8e9a" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.360Z", - "readmeFetchedAt": "2018-05-14T15:02:49.877Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.751Z", + "readmeFetchedAt": "2019-02-08T00:07:53.056Z", "goodColorOnWhite": "#904D7F", "goodColorOnBlack": "#68A0B8", "faintColorOnWhite": "rgba(144, 77, 127, 0.1)", @@ -19499,6 +25491,73 @@ "app:time-zone-converter" ] }, + { + "objectID": "app-timeseriesadmin", + "slug": "timeseriesadmin", + "name": "Time Series Admin", + "description": "InfuxDB query editor and administrator UI", + "website": "https://timeseriesadmin.github.io", + "repository": "https://github.com/timeseriesadmin/timeseriesadmin", + "keywords": [ + "influxdb", + "influx", + "admin", + "ui", + "webui" + ], + "license": "MIT", + "npmPackageName": "timeseriesadmin", + "category": "Developer Tools", + "goodColorOnWhite": "#000000", + "goodColorOnBlack": "#02e5ff", + "screenshots": [ + { + "imageUrl": "https://timeseriesadmin.github.io/images-mini/timeseriesadmin--browse-results.png", + "caption": "Influx query results easily browsable" + }, + { + "imageUrl": "https://timeseriesadmin.github.io/images-mini/timeseriesadmin--time-format.png", + "caption": "Selectable time format" + }, + { + "imageUrl": "https://timeseriesadmin.github.io/images-mini/timeseriesadmin--panel-connect.png", + "caption": "Saved connections list" + }, + { + "imageUrl": "https://timeseriesadmin.github.io/images-mini/timeseriesadmin--panel-explorer.png", + "caption": "Explorer panel" + }, + { + "imageUrl": "https://timeseriesadmin.github.io/images-mini/timeseriesadmin--panel-history.png", + "caption": "Query history panel" + }, + { + "imageUrl": "https://timeseriesadmin.github.io/images-mini/timeseriesadmin--understand-errors.png", + "caption": "Detailed error messages" + } + ], + "icon": "timeseriesadmin-icon.png", + "icon32": "timeseriesadmin-icon-32.png", + "icon64": "timeseriesadmin-icon-64.png", + "icon128": "timeseriesadmin-icon-128.png", + "icon256": "timeseriesadmin-icon-256.png", + "date": "2018-10-21", + "iconColors": [ + "#232424", + "#24def6", + "#246770", + "#24848c", + "#245454" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:32.816Z", + "readmeFetchedAt": "2019-02-08T00:07:53.189Z", + "faintColorOnWhite": "rgba(36, 103, 112, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Time Series Admin", + "app:timeseriesadmin" + ] + }, { "objectID": "app-timestamp", "slug": "timestamp", @@ -19534,8 +25593,8 @@ "#0c78ec", "#1474cc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.383Z", - "readmeFetchedAt": "2018-05-14T15:02:50.008Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.751Z", + "readmeFetchedAt": "2019-02-08T00:07:53.172Z", "goodColorOnWhite": "#0763E7", "goodColorOnBlack": "#33C4FC", "faintColorOnWhite": "rgba(7, 99, 231, 0.1)", @@ -19574,8 +25633,8 @@ "#5c5c5c", "#646464" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.396Z", - "readmeFetchedAt": "2018-05-14T15:02:49.974Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.922Z", + "readmeFetchedAt": "2019-02-08T00:07:53.200Z", "goodColorOnWhite": "#0C0C0C", "goodColorOnBlack": "#BAB9B9", "faintColorOnWhite": "rgba(12, 12, 12, 0.1)", @@ -19585,6 +25644,44 @@ "app:timetable" ] }, + { + "objectID": "app-tiny-timer", + "slug": "tiny-timer", + "name": "tiny-timer", + "description": "Simple timer desktop app.", + "repository": "https://github.com/HyunmoAhn/Tiny-Timer", + "category": "Productivity", + "keywords": [ + "tiny", + "timer", + "boilerplate", + "reference" + ], + "license": "MIT", + "icon": "tiny-timer-icon.png", + "icon32": "tiny-timer-icon-32.png", + "icon64": "tiny-timer-icon-64.png", + "icon128": "tiny-timer-icon-128.png", + "icon256": "tiny-timer-icon-256.png", + "date": "2018-10-28", + "iconColors": [ + "#f3eddb", + "#04c47b", + "#6bd449", + "#78798b", + "#8ec594" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:32.824Z", + "readmeFetchedAt": "2019-02-08T00:07:53.218Z", + "goodColorOnWhite": "#037E4F", + "goodColorOnBlack": "#04C47B", + "faintColorOnWhite": "rgba(3, 126, 79, 0.1)", + "keyValuePairs": [ + "is:app", + "app:tiny-timer", + "app:tiny-timer" + ] + }, { "objectID": "app-todokit", "slug": "todokit", @@ -19610,8 +25707,8 @@ "#646464", "#444444" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.436Z", - "readmeFetchedAt": "2018-05-14T15:02:49.965Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.854Z", + "readmeFetchedAt": "2019-02-08T00:07:53.358Z", "goodColorOnWhite": "#171717", "goodColorOnBlack": "#F5F5F5", "faintColorOnWhite": "rgba(23, 23, 23, 0.1)", @@ -19655,8 +25752,8 @@ "#646464", "#64646c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.475Z", - "readmeFetchedAt": "2018-05-14T15:02:49.979Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.914Z", + "readmeFetchedAt": "2019-02-08T00:07:53.322Z", "goodColorOnWhite": "#2C2C34", "goodColorOnBlack": "#63DBA3", "faintColorOnWhite": "rgba(44, 44, 52, 0.1)", @@ -19703,8 +25800,8 @@ "#c4c4c4", "#999999" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.473Z", - "readmeFetchedAt": "2018-05-14T15:02:50.045Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.936Z", + "readmeFetchedAt": "2019-02-08T00:07:53.315Z", "goodColorOnWhite": "#22836D", "goodColorOnBlack": "#62D6BC", "faintColorOnWhite": "rgba(34, 131, 109, 0.1)", @@ -19737,8 +25834,8 @@ "#3a8ccc", "#7cbce4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.540Z", - "readmeFetchedAt": "2018-05-14T15:02:50.060Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:32.983Z", + "readmeFetchedAt": "2019-02-08T00:07:53.341Z", "goodColorOnWhite": "#2377AB", "goodColorOnBlack": "#7CBCE4", "faintColorOnWhite": "rgba(35, 119, 171, 0.1)", @@ -19748,6 +25845,41 @@ "app:tofino" ] }, + { + "objectID": "app-top-browser", + "slug": "top-browser", + "name": "Top Browser", + "description": "Minimal browser that always stays on top of your screen", + "website": "https://bitbucket.org/speedydemon/electron_top_browser/", + "category": "Utilities", + "repository": "https://bitbucket.org/speedydemon/electron_top_browser/", + "keywords": [ + "browser", + "top" + ], + "license": "MIT", + "icon": "top-browser-icon.png", + "icon32": "top-browser-icon-32.png", + "icon64": "top-browser-icon-64.png", + "icon128": "top-browser-icon-128.png", + "icon256": "top-browser-icon-256.png", + "date": "2018-07-12", + "iconColors": [ + "#536f7b", + "#4da3d9", + "#ecf4f4", + "#eb9b40", + "#bcdcf4" + ], + "goodColorOnWhite": "#536F7B", + "goodColorOnBlack": "#EB9B40", + "faintColorOnWhite": "rgba(83, 111, 123, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Top Browser", + "app:top-browser" + ] + }, { "objectID": "app-tournamenter-manager", "slug": "tournamenter-manager", @@ -19789,8 +25921,8 @@ "#71c9f4", "#54bcf4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.614Z", - "readmeFetchedAt": "2018-05-14T15:02:50.294Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.110Z", + "readmeFetchedAt": "2019-02-08T00:07:53.626Z", "goodColorOnWhite": "#1974D3", "goodColorOnBlack": "#3BB3F3", "faintColorOnWhite": "rgba(25, 116, 211, 0.1)", @@ -19833,8 +25965,8 @@ "#767676", "#8c8c8c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.539Z", - "readmeFetchedAt": "2018-05-14T15:02:50.098Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.017Z", + "readmeFetchedAt": "2019-02-08T00:07:53.532Z", "goodColorOnWhite": "#252525", "goodColorOnBlack": "#DBDBDB", "faintColorOnWhite": "rgba(37, 37, 37, 0.1)", @@ -19917,8 +26049,8 @@ "#b4c2b4", "#a2d4a4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.735Z", - "readmeFetchedAt": "2018-05-14T15:02:50.160Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.078Z", + "readmeFetchedAt": "2019-02-08T00:07:53.505Z", "goodColorOnWhite": "#397A3B", "goodColorOnBlack": "#A2D4A4", "faintColorOnWhite": "rgba(57, 122, 59, 0.1)", @@ -19965,6 +26097,52 @@ "app:treevea" ] }, + { + "objectID": "app-trilium-notes", + "slug": "trilium-notes", + "name": "Trilium Notes", + "description": "Hierarchical note taking application with focus on building knowledge bases", + "category": "Productivity", + "repository": "https://github.com/zadam/trilium", + "keywords": [ + "wiki", + "knowledge base", + "journal", + "diary", + "encryption", + "note taking", + "notes" + ], + "license": "AGPL v3", + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/wiki/zadam/trilium/images/screenshot.png" + } + ], + "icon": "trilium-notes-icon.png", + "icon32": "trilium-notes-icon-32.png", + "icon64": "trilium-notes-icon-64.png", + "icon128": "trilium-notes-icon-128.png", + "icon256": "trilium-notes-icon-256.png", + "date": "2018-12-01", + "iconColors": [ + "#ebebeb", + "#050505", + "#6c6c6c", + "#7c7c7c", + "#747474" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:33.109Z", + "readmeFetchedAt": "2019-02-08T00:07:53.442Z", + "goodColorOnWhite": "#050505", + "goodColorOnBlack": "#EBEBEB", + "faintColorOnWhite": "rgba(5, 5, 5, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Trilium Notes", + "app:trilium-notes" + ] + }, { "objectID": "app-tropy", "slug": "tropy", @@ -19998,8 +26176,8 @@ "#a3c4f2", "#7cacec" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.792Z", - "readmeFetchedAt": "2018-05-14T15:02:50.135Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.120Z", + "readmeFetchedAt": "2019-02-08T00:07:53.633Z", "faintColorOnWhite": "rgba(30, 105, 209, 0.1)", "keyValuePairs": [ "is:app", @@ -20007,6 +26185,42 @@ "app:tropy" ] }, + { + "objectID": "app-trunk", + "slug": "trunk", + "name": "Trunk", + "description": "Secure version control for your design files. Collaborate on design files with your entire team.", + "website": "https://jointrunk.com", + "keywords": [ + "design", + "version management", + "collaboration", + "sketch", + "photoshop" + ], + "category": "Graphics & Design", + "icon": "trunk-icon.png", + "icon32": "trunk-icon-32.png", + "icon64": "trunk-icon-64.png", + "icon128": "trunk-icon-128.png", + "icon256": "trunk-icon-256.png", + "date": "2018-07-30", + "iconColors": [ + "#fc2c64", + "#fcf7f9", + "#fc8dac", + "#fc7d9f", + "#fc5984" + ], + "goodColorOnWhite": "#EB0342", + "goodColorOnBlack": "#FC2C64", + "faintColorOnWhite": "rgba(235, 3, 66, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Trunk", + "app:trunk" + ] + }, { "objectID": "app-trym", "slug": "trym", @@ -20044,11 +26258,15 @@ "slug": "tunlookup", "name": "Tunlookup", "description": "Translate selected text with a keystroke", - "website": "https://tun-application.github.io/", + "website": "https://tunlookup.com", + "repository": "https://github.com/tun-application/Tunlookup", "keywords": [ "Translator", + "translate", "Vocabulary", - "Dictionary" + "Dictionary", + "Tunlookup", + "Tunlookup translate" ], "category": "Utilities", "icon": "tunlookup-icon.png", @@ -20064,6 +26282,8 @@ "#a6a98e", "#999491" ], + "latestReleaseFetchedAt": "2019-02-08T00:07:33.181Z", + "readmeFetchedAt": "2019-02-08T00:07:53.710Z", "goodColorOnWhite": "#907303", "goodColorOnBlack": "#FBD33B", "faintColorOnWhite": "rgba(144, 115, 3, 0.1)", @@ -20138,8 +26358,8 @@ "#646464", "#4d4d4d" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.599Z", - "readmeFetchedAt": "2018-05-14T15:02:50.226Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.177Z", + "readmeFetchedAt": "2019-02-08T00:07:53.743Z", "goodColorOnWhite": "#242424", "goodColorOnBlack": "#AAA", "faintColorOnWhite": "rgba(36, 36, 36, 0.1)", @@ -20154,8 +26374,9 @@ "slug": "tusk", "name": "Tusk", "description": "Refined Evernote desktop app", - "website": "https://klauscfhq.github.io/tusk", - "repository": "https://github.com/klauscfhq/tusk", + "website": "https://klaussinani.github.io/tusk", + "repository": "https://github.com/klaussinani/tusk", + "snapcraftName": "tusk", "keywords": [ "note", "productivity", @@ -20166,19 +26387,19 @@ "category": "Productivity", "screenshots": [ { - "imageUrl": "https://cdn.rawgit.com/klauscfhq/tusk/33f2eae5/media/dark-theme.png", + "imageUrl": "https://raw.githubusercontent.com/klaussinani/tusk/d663f056dc8d21111f7fb24cc2c90cfca5b8ad06/docs/media/dark-theme.png", "caption": "Dark theme", - "imageLink": "https://klauscfhq.github.io/tusk" + "imageLink": "https://klaussinani.github.io/tusk" }, { - "imageUrl": "https://cdn.rawgit.com/klauscfhq/tusk/33f2eae5/media/vibrant-theme.png", + "imageUrl": "https://raw.githubusercontent.com/klaussinani/tusk/d663f056dc8d21111f7fb24cc2c90cfca5b8ad06/docs/media/vibrant-theme.png", "caption": "Vibrant theme", - "imageLink": "https://klauscfhq.github.io/tusk" + "imageLink": "https://klaussinani.github.io/tusk" }, { - "imageUrl": "https://cdn.rawgit.com/klauscfhq/tusk/33f2eae5/media/black-theme.png", + "imageUrl": "https://raw.githubusercontent.com/klaussinani/tusk/d663f056dc8d21111f7fb24cc2c90cfca5b8ad06/docs/media/black-theme.png", "caption": "Black theme", - "imageLink": "https://klauscfhq.github.io/tusk" + "imageLink": "https://klaussinani.github.io/tusk" } ], "icon": "tusk-icon.png", @@ -20194,8 +26415,8 @@ "#a7facc", "#8cecdc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.685Z", - "readmeFetchedAt": "2018-05-14T15:02:50.285Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.188Z", + "readmeFetchedAt": "2019-02-08T00:07:53.778Z", "goodColorOnWhite": "#048121", "goodColorOnBlack": "#89FBA3", "faintColorOnWhite": "rgba(4, 129, 33, 0.1)", @@ -20405,8 +26626,8 @@ "#9c9c9c", "#8c8c8c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.686Z", - "readmeFetchedAt": "2018-05-14T15:02:50.221Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.217Z", + "readmeFetchedAt": "2019-02-08T00:07:53.791Z", "goodColorOnWhite": "#2C2C2C", "goodColorOnBlack": "#F9F9F9", "faintColorOnWhite": "rgba(44, 44, 44, 0.1)", @@ -20469,8 +26690,8 @@ "#044504", "#7cb88c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.764Z", - "readmeFetchedAt": "2018-05-14T15:02:50.359Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.276Z", + "readmeFetchedAt": "2019-02-08T00:07:53.865Z", "goodColorOnWhite": "#044504", "goodColorOnBlack": "#049714", "faintColorOnWhite": "rgba(4, 69, 4, 0.1)", @@ -20480,27 +26701,71 @@ "app:udeler" ] }, + { + "objectID": "app-udl-gui", + "slug": "udl-gui", + "name": "udl-gui", + "description": "App to download udemy.com course for personal offline use.", + "website": "http://riazxrazor.in", + "category": "Education", + "repository": "https://github.com/riazXrazor/udemy-dl-gui", + "keywords": [ + "udl", + "download", + "videos", + "courses", + "learn", + "udemy-dl-gui" + ], + "screenshots": [ + { + "imageUrl": "https://github.com/riazXrazor/udemy-dl-gui/raw/master/static/udemy-dl-login.png", + "caption": "udemy-dl login screen", + "imageLink": "http://riazxrazor.in" + }, + { + "imageUrl": "https://github.com/riazXrazor/udemy-dl-gui/raw/master/static/udemy-dl-dashboard.png", + "caption": "udemy-dl dashboard", + "imageLink": "http://riazxrazor.in" + } + ], + "icon": "udl-gui-icon.png", + "icon32": "udl-gui-icon-32.png", + "icon64": "udl-gui-icon-64.png", + "icon128": "udl-gui-icon-128.png", + "icon256": "udl-gui-icon-256.png", + "date": "2019-01-11", + "iconColors": [ + "#44886d", + "#fbfbfa", + "#977858", + "#d3c284", + "#8cc4ac" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:33.277Z", + "readmeFetchedAt": "2019-02-08T00:07:53.914Z", + "goodColorOnWhite": "#877530", + "goodColorOnBlack": "#D3C284", + "faintColorOnWhite": "rgba(135, 117, 48, 0.1)", + "keyValuePairs": [ + "is:app", + "app:udl-gui", + "app:udl-gui" + ] + }, { "objectID": "app-ueli", "slug": "ueli", "name": "ueli", - "description": "This is an alt+space launcher for Windows and macOS.", + "description": "This is a keystroke launcher for Windows and macOS.", "repository": "https://github.com/oliverschwendener/ueli", "keywords": [ + "keystroke", "launcher", - "search", - "alt", - "space" + "search" ], "license": "MIT", "category": "Utilities", - "screenshots": [ - { - "imageUrl": "https://github.com/oliverschwendener/ueli/raw/master/img/ueli-example.png", - "caption": "Example screenshot", - "imageLink": "https://github.com/oliverschwendener/ueli" - } - ], "icon": "ueli-icon.png", "icon32": "ueli-icon-32.png", "icon64": "ueli-icon-64.png", @@ -20514,8 +26779,8 @@ "#080404", "#080404" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.757Z", - "readmeFetchedAt": "2018-05-14T15:02:50.407Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.355Z", + "readmeFetchedAt": "2019-02-08T00:07:54.030Z", "goodColorOnWhite": "#080404", "goodColorOnBlack": "#FFF", "faintColorOnWhite": "rgba(8, 4, 4, 0.1)", @@ -20561,8 +26826,8 @@ "#949494", "#b0b0b0" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.839Z", - "readmeFetchedAt": "2018-05-14T15:02:50.388Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.327Z", + "readmeFetchedAt": "2019-02-08T00:07:53.979Z", "goodColorOnWhite": "#282828", "goodColorOnBlack": "#FBFBFB", "faintColorOnWhite": "rgba(40, 40, 40, 0.1)", @@ -20572,6 +26837,50 @@ "app:un-colored" ] }, + { + "objectID": "app-unicode-plus", + "slug": "unicode-plus", + "name": "Unicode Plus", + "description": "Set of Unicode, Unihan & emoji utilities wrapped into one single app.", + "website": "https://github.com/tonton-pixel/unicode-plus", + "category": "Utilities", + "keywords": [ + "characters", + "code points", + "emoji", + "javascript", + "properties", + "regex", + "set", + "unicode", + "unihan", + "utility" + ], + "license": "MIT", + "icon": "unicode-plus-icon.png", + "icon32": "unicode-plus-icon-32.png", + "icon64": "unicode-plus-icon-64.png", + "icon128": "unicode-plus-icon-128.png", + "icon256": "unicode-plus-icon-256.png", + "date": "2018-08-24", + "iconColors": [ + "#fbfbfb", + "#247c94", + "#83b4c4", + "#b5d5de", + "#92bccb" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:33.504Z", + "readmeFetchedAt": "2019-02-08T00:07:54.159Z", + "goodColorOnWhite": "#247C94", + "goodColorOnBlack": "#B5D5DE", + "faintColorOnWhite": "rgba(36, 124, 148, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Unicode Plus", + "app:unicode-plus" + ] + }, { "objectID": "app-unofficial-zalo", "slug": "unofficial-zalo", @@ -20602,8 +26911,8 @@ "#73bce3", "#7eb4d1" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.831Z", - "readmeFetchedAt": "2018-05-14T15:02:50.412Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.471Z", + "readmeFetchedAt": "2019-02-08T00:07:54.105Z", "goodColorOnWhite": "#0B75B1", "goodColorOnBlack": "#0C83C6", "faintColorOnWhite": "rgba(11, 117, 177, 0.1)", @@ -20633,8 +26942,8 @@ "#08a4fc", "#08a4fc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.867Z", - "readmeFetchedAt": "2018-05-14T15:02:50.435Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.432Z", + "readmeFetchedAt": "2019-02-08T00:07:54.189Z", "goodColorOnWhite": "#0276B5", "goodColorOnBlack": "#04A4FC", "faintColorOnWhite": "rgba(2, 118, 181, 0.1)", @@ -20693,28 +27002,6 @@ "vade mecum" ], "license": "MIT", - "screenshots": [ - { - "imageUrl": "https://raw.githubusercontent.com/tonton-pixel/vade-mecum-shelf/master/screenshots/color-names.png", - "caption": "Lists of color names, with live search" - }, - { - "imageUrl": "https://raw.githubusercontent.com/tonton-pixel/vade-mecum-shelf/master/screenshots/digital-clock.png", - "caption": "Customizable clock, using language-sensitive text formatting for date and time" - }, - { - "imageUrl": "https://raw.githubusercontent.com/tonton-pixel/vade-mecum-shelf/master/screenshots/latex-math-renderer.png", - "caption": "LaTeX math expression renderer, using the KaTeX JavaScript library" - }, - { - "imageUrl": "https://raw.githubusercontent.com/tonton-pixel/vade-mecum-shelf/master/screenshots/roman-numerals.png", - "caption": "Converters between roman and arabic numerals" - }, - { - "imageUrl": "https://raw.githubusercontent.com/tonton-pixel/vade-mecum-shelf/master/screenshots/system-information.png", - "caption": "Detailed list of system information, by category" - } - ], "icon": "vade-mecum-shelf-icon.png", "icon32": "vade-mecum-shelf-icon-32.png", "icon64": "vade-mecum-shelf-icon-64.png", @@ -20728,8 +27015,8 @@ "#8cbccc", "#84bccc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.862Z", - "readmeFetchedAt": "2018-05-14T15:02:50.563Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.479Z", + "readmeFetchedAt": "2019-02-08T00:07:54.225Z", "goodColorOnWhite": "#207693", "goodColorOnBlack": "#2484A4", "faintColorOnWhite": "rgba(32, 118, 147, 0.1)", @@ -20744,18 +27031,31 @@ "slug": "vagrant-manager", "name": "Vagrant Manager", "description": "Menu bar app for managing your vagrant machines.", - "repository": "https://github.com/vaibhav-sidapara/vagrant-manager", + "repository": "https://github.com/absalomedia/vagrant-manager", "keywords": [ "vagrant", - "manager" + "manager", + "virtualbox", + "vmware", + "developer tools" ], "license": "MIT", - "category": "Utilities", + "category": "Developer Tools", "screenshots": [ { - "imageUrl": "https://raw.githubusercontent.com/vaibhav-sidapara/vagrant-manager/master/assets/images/demo.gif" + "imageUrl": "https://raw.githubusercontent.com/absalomedia/vagrant-manager/2d82e9b0803a3294d11ae5e60aa83c66957c9516/assets/images/demo.gif" } ], + "locales": [ + "cs-CZ", + "hi-IN", + "ja-JP", + "en-GB", + "de-DE", + "pt-PT", + "uk-UA", + "zh-CN" + ], "icon": "vagrant-manager-icon.png", "icon32": "vagrant-manager-icon-32.png", "icon64": "vagrant-manager-icon-64.png", @@ -20769,8 +27069,8 @@ "#6bfcc2", "#58fcb0" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.930Z", - "readmeFetchedAt": "2018-05-14T15:02:50.481Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.519Z", + "readmeFetchedAt": "2019-02-08T00:07:54.303Z", "goodColorOnWhite": "#027E37", "goodColorOnBlack": "#54FC9C", "faintColorOnWhite": "rgba(2, 126, 55, 0.1)", @@ -20813,6 +27113,52 @@ "app:vectr" ] }, + { + "objectID": "app-vega-clipboard", + "slug": "vega-clipboard", + "name": "Vega Clipboard", + "description": "Save clipboard history and copy in one click", + "website": "http://thevega.pro/", + "category": "Utilities", + "keywords": [ + "clipboard", + "clipboard manager", + "tool", + "copy", + "save links", + "save images", + "save text", + "clipboard history" + ], + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/aleskinmk/aleskinmk.github.io/master/animation_2.gif", + "caption": "Easy to use", + "imageLink": "http://thevega.pro/" + } + ], + "icon": "vega-clipboard-icon.png", + "icon32": "vega-clipboard-icon-32.png", + "icon64": "vega-clipboard-icon-64.png", + "icon128": "vega-clipboard-icon-128.png", + "icon256": "vega-clipboard-icon-256.png", + "date": "2018-08-28", + "iconColors": [ + "#fbf9f9", + "#1c97a5", + "#d92a38", + "#9398a7", + "#f47c7c" + ], + "goodColorOnWhite": "#D92A38", + "goodColorOnBlack": "#F47C7C", + "faintColorOnWhite": "rgba(217, 42, 56, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Vega Clipboard", + "app:vega-clipboard" + ] + }, { "objectID": "app-video-hub-app", "slug": "video-hub-app", @@ -20827,6 +27173,23 @@ "search", "file-manager" ], + "screenshots": [ + { + "imageUrl": "https://videohubapp.com/images/4.jpg", + "caption": "Thumbnails", + "imageLink": "https://videohubapp.com/" + }, + { + "imageUrl": "https://videohubapp.com/images/2.jpg", + "caption": "Filmstrip", + "imageLink": "https://videohubapp.com/" + }, + { + "imageUrl": "https://videohubapp.com/images/5.jpg", + "caption": "Dark mode", + "imageLink": "https://videohubapp.com/" + } + ], "icon": "video-hub-app-icon.png", "icon32": "video-hub-app-icon-32.png", "icon64": "video-hub-app-icon-64.png", @@ -20849,6 +27212,51 @@ "app:video-hub-app" ] }, + { + "objectID": "app-vii", + "slug": "vii", + "name": "VII", + "description": "It allows you to download high quality video and audio over Youtube. The video or audio you want to download will be downloaded at the highest quality it supports.", + "repository": "https://github.com/ardagedikk/VII", + "keywords": [ + "youtube", + "converter", + "download", + "high quality", + "video", + "audio" + ], + "license": "MIT", + "category": "Utilities", + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/ardagedikk/VII/master/media/Screenshot_1.jpg" + } + ], + "icon": "vii-icon.png", + "icon32": "vii-icon-32.png", + "icon64": "vii-icon-64.png", + "icon128": "vii-icon-128.png", + "icon256": "vii-icon-256.png", + "date": "2018-07-27", + "iconColors": [ + "#ea4b3c", + "#2c2c2c", + "#793632", + "#a53f35", + "#54302c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:33.599Z", + "readmeFetchedAt": "2019-02-08T00:07:54.428Z", + "goodColorOnWhite": "#A53F35", + "goodColorOnBlack": "#EA4B3C", + "faintColorOnWhite": "rgba(165, 63, 53, 0.1)", + "keyValuePairs": [ + "is:app", + "app:VII", + "app:vii" + ] + }, { "objectID": "app-visual-comic-reader", "slug": "visual-comic-reader", @@ -20881,8 +27289,8 @@ "#080c0b", "#ced0d0" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.917Z", - "readmeFetchedAt": "2018-05-14T15:02:50.506Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.576Z", + "readmeFetchedAt": "2019-02-08T00:07:54.345Z", "goodColorOnWhite": "#B3242B", "goodColorOnBlack": "#04C3EB", "faintColorOnWhite": "rgba(179, 36, 43, 0.1)", @@ -20967,8 +27375,8 @@ "#92ccba", "#a4d4cc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.948Z", - "readmeFetchedAt": "2018-05-14T15:02:50.487Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.610Z", + "readmeFetchedAt": "2019-02-08T00:07:54.296Z", "goodColorOnWhite": "#2C7962", "goodColorOnBlack": "#5CC4A4", "faintColorOnWhite": "rgba(44, 121, 98, 0.1)", @@ -20978,6 +27386,42 @@ "app:vivifyscrum" ] }, + { + "objectID": "app-vizgraph", + "slug": "vizgraph", + "name": "VizGraph", + "description": "A simple tool for Using Graphviz. Based on Viz.js & Electron.", + "category": "Developer Tools", + "repository": "https://github.com/jcf94/vizgraph", + "keywords": [ + "Graphviz", + "dot", + "draw" + ], + "icon": "vizgraph-icon.png", + "icon32": "vizgraph-icon-32.png", + "icon64": "vizgraph-icon-64.png", + "icon128": "vizgraph-icon-128.png", + "icon256": "vizgraph-icon-256.png", + "date": "2019-01-10", + "iconColors": [ + "#f07827", + "#f3884a", + "#48230b", + "#9c4e1b", + "#7e3c11" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:33.610Z", + "readmeFetchedAt": "2019-02-08T00:07:54.388Z", + "goodColorOnWhite": "#7E3C11", + "goodColorOnBlack": "#F3884A", + "faintColorOnWhite": "rgba(126, 60, 17, 0.1)", + "keyValuePairs": [ + "is:app", + "app:VizGraph", + "app:vizgraph" + ] + }, { "objectID": "app-vk-messenger", "slug": "vk-messenger", @@ -21045,6 +27489,47 @@ "app:vocare-helpdesk" ] }, + { + "objectID": "app-voice-notifies", + "slug": "voice-notifies", + "name": "Voice Notifies", + "description": "Desktop app compatible with Google Voice", + "website": "http://voicenotifies.com", + "license": "Proprietary", + "keywords": [ + "Google Voice", + "Google Voice Desktop App", + "Google Voice Mac app", + "Google Voice Mac Menu Bar", + "Google Voice Notifier", + "Google Voice Macintosh Application", + "Chat", + "Text Messaging", + "Android Text Messaging" + ], + "category": "Social Networking", + "icon": "voice-notifies-icon.png", + "icon32": "voice-notifies-icon-32.png", + "icon64": "voice-notifies-icon-64.png", + "icon128": "voice-notifies-icon-128.png", + "icon256": "voice-notifies-icon-256.png", + "date": "2018-06-21", + "iconColors": [ + "#040404", + "#080404", + "#080404", + "#080404", + "#080404" + ], + "goodColorOnWhite": "#080404", + "goodColorOnBlack": "#FFF", + "faintColorOnWhite": "rgba(8, 4, 4, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Voice Notifies", + "app:voice-notifies" + ] + }, { "objectID": "app-voltra", "slug": "voltra", @@ -21065,7 +27550,7 @@ "category": "Music", "screenshots": [ { - "imageUrl": "https://voltra.co/images/desktop-preview-dark.png" + "imageUrl": "https://voltra.co/desktop-preview-light.png" } ], "icon": "voltra-icon.png", @@ -21158,8 +27643,8 @@ "#7999a4", "#6cc494" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.939Z", - "readmeFetchedAt": "2018-05-14T15:02:50.567Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.642Z", + "readmeFetchedAt": "2019-02-08T00:07:54.420Z", "goodColorOnWhite": "#043C54", "goodColorOnBlack": "#1F954D", "faintColorOnWhite": "rgba(4, 60, 84, 0.1)", @@ -21199,8 +27684,8 @@ "#34bcfc", "#24b4fc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.011Z", - "readmeFetchedAt": "2018-05-14T15:02:50.582Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.688Z", + "readmeFetchedAt": "2019-02-08T00:07:54.436Z", "goodColorOnWhite": "#027CB5", "goodColorOnBlack": "#04ACFC", "faintColorOnWhite": "rgba(2, 124, 181, 0.1)", @@ -21246,8 +27731,8 @@ "#343434", "#292929" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.004Z", - "readmeFetchedAt": "2018-05-14T15:02:50.589Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.702Z", + "readmeFetchedAt": "2019-02-08T00:07:54.498Z", "goodColorOnWhite": "#040404", "goodColorOnBlack": "#FFF", "faintColorOnWhite": "rgba(4, 4, 4, 0.1)", @@ -21257,6 +27742,90 @@ "app:wail" ] }, + { + "objectID": "app-waiterio-restaurant-pos", + "slug": "waiterio-restaurant-pos", + "name": "Waiterio Restaurant POS", + "description": "Order management and POS system for restaurants", + "website": "https://www.waiterio.com", + "category": "Business", + "youtube_video_url": "https://www.youtube.com/watch?v=xkkHJUSXNI0", + "keywords": [ + "restaurant", + "pos", + "hospitality", + "business" + ], + "license": "Commercial", + "locales": [ + "cs-CZ", + "da-DK", + "de-DE", + "el-GR", + "en-US", + "es-MX", + "fr-FR", + "id-ID", + "it-IT", + "ja-JP", + "ko-KR", + "nl-NL", + "pl-PL", + "pt-BR", + "ru-RU", + "th-TH", + "tr-TR", + "zh-CN" + ], + "screenshots": [ + { + "imageUrl": "https://images.waiterio.com/portfolio-computer-tables-en.jpg", + "caption": "Manage the tables" + }, + { + "imageUrl": "https://images.waiterio.com/portfolio-computer-orders-en.jpg", + "caption": "Control the orders" + }, + { + "imageUrl": "https://images.waiterio.com/portfolio-computer-order-en.jpg", + "caption": "Take an order" + }, + { + "imageUrl": "https://images.waiterio.com/portfolio-computer-payment-en.jpg", + "caption": "Receive a payment" + }, + { + "imageUrl": "https://images.waiterio.com/portfolio-computer-staff-en.jpg", + "caption": "Invite the co-workers" + }, + { + "imageUrl": "https://images.waiterio.com/portfolio-computer-menu-en.jpg", + "caption": "Customize the menu" + } + ], + "snapcraftName": "waiterio-restaurant-pos", + "icon": "waiterio-restaurant-pos-icon.png", + "icon32": "waiterio-restaurant-pos-icon-32.png", + "icon64": "waiterio-restaurant-pos-icon-64.png", + "icon128": "waiterio-restaurant-pos-icon-128.png", + "icon256": "waiterio-restaurant-pos-icon-256.png", + "date": "2019-01-26", + "iconColors": [ + "#0491e1", + "#fbfbfb", + "#5dace2", + "#9fd0ef", + "#3aacec" + ], + "goodColorOnWhite": "#0374B4", + "goodColorOnBlack": "#0491E1", + "faintColorOnWhite": "rgba(3, 116, 180, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Waiterio Restaurant POS", + "app:waiterio-restaurant-pos" + ] + }, { "objectID": "app-wakefy", "slug": "wakefy", @@ -21337,8 +27906,8 @@ "#979797", "#7c7c7c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:35.990Z", - "readmeFetchedAt": "2018-05-14T15:02:50.785Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.701Z", + "readmeFetchedAt": "2019-02-08T00:07:54.537Z", "goodColorOnWhite": "#4E4E4E", "goodColorOnBlack": "#EEE", "faintColorOnWhite": "rgba(78, 78, 78, 0.1)", @@ -21373,8 +27942,8 @@ "#85d4e8", "#347474" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.023Z", - "readmeFetchedAt": "2018-05-14T15:02:50.653Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.779Z", + "readmeFetchedAt": "2019-02-08T00:07:54.606Z", "goodColorOnWhite": "#347474", "goodColorOnBlack": "#ECDF97", "faintColorOnWhite": "rgba(52, 116, 116, 0.1)", @@ -21415,8 +27984,8 @@ "#44b4f4", "#3ea2e1" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.065Z", - "readmeFetchedAt": "2018-05-14T15:02:50.689Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.766Z", + "readmeFetchedAt": "2019-02-08T00:07:54.598Z", "goodColorOnWhite": "#0A72AD", "goodColorOnBlack": "#44B4F4", "faintColorOnWhite": "rgba(10, 114, 173, 0.1)", @@ -21460,6 +28029,45 @@ "app:wantedly-chat" ] }, + { + "objectID": "app-waqt", + "slug": "waqt", + "name": "Waqt", + "description": "View current Islamic prayer times", + "website": "https://arafatamim.github.io/projects/waqt.html", + "repository": "https://github.com/arafatamim/waqt", + "keywords": [ + "prayer-times", + "islam", + "islamic", + "waqt", + "prayer" + ], + "category": "Utilities", + "icon": "waqt-icon.png", + "icon32": "waqt-icon-32.png", + "icon64": "waqt-icon-64.png", + "icon128": "waqt-icon-128.png", + "icon256": "waqt-icon-256.png", + "date": "2018-06-18", + "iconColors": [ + "#0454d4", + "#0854d4", + "#0854d4", + "#0854d4", + "#0854d4" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:33.820Z", + "readmeFetchedAt": "2019-02-08T00:07:54.631Z", + "goodColorOnWhite": "#0454D4", + "goodColorOnBlack": "#2376FB", + "faintColorOnWhite": "rgba(4, 84, 212, 0.1)", + "keyValuePairs": [ + "is:app", + "app:Waqt", + "app:waqt" + ] + }, { "objectID": "app-wavebox", "slug": "wavebox", @@ -21489,8 +28097,8 @@ "#9edffb", "#3cc4f4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.077Z", - "readmeFetchedAt": "2018-05-14T15:02:50.675Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.810Z", + "readmeFetchedAt": "2019-02-08T00:07:54.655Z", "goodColorOnWhite": "#037DAC", "goodColorOnBlack": "#04ABEB", "faintColorOnWhite": "rgba(3, 125, 172, 0.1)", @@ -21578,8 +28186,8 @@ "#fffcfc", "#fffcfc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.068Z", - "readmeFetchedAt": "2018-05-14T15:02:50.720Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.964Z", + "readmeFetchedAt": "2019-02-08T00:07:54.763Z", "goodColorOnWhite": "#D80000", "goodColorOnBlack": "#FFFCFC", "faintColorOnWhite": "rgba(216, 0, 0, 0.1)", @@ -21595,10 +28203,10 @@ "name": "WebCatalog", "description": "Run Thousands of Web Apps Like Real Apps", "website": "https://webcatalog.io", - "repository": "https://github.com/webcatalog/webcatalog", + "repository": "https://github.com/quanglam2807/webcatalog", "screenshots": [ { - "imageUrl": "https://raw.githubusercontent.com/webcatalog/webcatalog/master/build-resources/screenshot.png", + "imageUrl": "https://raw.githubusercontent.com/quanglam2807/webcatalog/c1863aabe4d0728ee4fc423a05d3b51ab4245257/build-resources/screenshot.png", "caption": "WebCatalog on macOS" } ], @@ -21623,8 +28231,8 @@ "#81bfee", "#949494" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.145Z", - "readmeFetchedAt": "2018-05-14T15:02:51.551Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.865Z", + "readmeFetchedAt": "2019-02-08T00:07:54.678Z", "goodColorOnWhite": "#176EC9", "goodColorOnBlack": "#81BFEE", "faintColorOnWhite": "rgba(23, 110, 201, 0.1)", @@ -21703,8 +28311,8 @@ "#a2344b", "#593c44" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.168Z", - "readmeFetchedAt": "2018-05-14T15:02:50.770Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:33.923Z", + "readmeFetchedAt": "2019-02-08T00:07:54.752Z", "faintColorOnWhite": "rgba(162, 52, 75, 0.1)", "keyValuePairs": [ "is:app", @@ -21746,8 +28354,8 @@ "#38974c", "#2c8c3c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.251Z", - "readmeFetchedAt": "2018-05-14T15:02:50.835Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.089Z", + "readmeFetchedAt": "2019-02-08T00:07:54.829Z", "goodColorOnWhite": "#154D0E", "goodColorOnBlack": "#1CD45C", "faintColorOnWhite": "rgba(21, 77, 14, 0.1)", @@ -21757,6 +28365,112 @@ "app:weflow" ] }, + { + "objectID": "app-weighthub", + "slug": "weighthub", + "name": "WeightHub", + "description": "Easily synchronize your body weight data.", + "website": "https://www.weemple.com/weighthub", + "category": "Health & Fitness", + "keywords": [ + "weight", + "sync", + "convert", + "scale", + "fitbit", + "garmin", + "withings" + ], + "locales": [ + "en", + "es", + "de", + "fr", + "it" + ], + "screenshots": [ + { + "imageUrl": "https://www.weemple.com/images/weighthub/screenshot_1.png", + "caption": "1. Select your parameters on General, Source and Target, then click Continue" + }, + { + "imageUrl": "https://www.weemple.com/images/weighthub/screenshot_2.png", + "caption": "2. The application analyze the data from source and target" + }, + { + "imageUrl": "https://www.weemple.com/images/weighthub/screenshot_3.png", + "caption": "3. Review the proposed changes, then Continue" + }, + { + "imageUrl": "https://www.weemple.com/images/weighthub/screenshot_4.png", + "caption": "4. Approve the synchronization" + }, + { + "imageUrl": "https://www.weemple.com/images/weighthub/screenshot_5.png", + "caption": "5. Finally, the application perform the changes" + } + ], + "icon": "weighthub-icon.png", + "icon32": "weighthub-icon-32.png", + "icon64": "weighthub-icon-64.png", + "icon128": "weighthub-icon-128.png", + "icon256": "weighthub-icon-256.png", + "date": "2018-10-19", + "iconColors": [ + "#2a6b9c", + "#fbfbfb", + "#233644", + "#2c8cd4", + "#92b8d4" + ], + "goodColorOnWhite": "#2A6B9C", + "goodColorOnBlack": "#2C8CD4", + "faintColorOnWhite": "rgba(42, 107, 156, 0.1)", + "keyValuePairs": [ + "is:app", + "app:WeightHub", + "app:weighthub" + ] + }, + { + "objectID": "app-westeroscraftlauncher", + "slug": "westeroscraftlauncher", + "name": "WesterosCraft Launcher", + "description": "A custom modded launcher for WesterosCraft", + "website": "https://westeroscraft.com/", + "repository": "https://github.com/WesterosCraftCode/ElectronLauncher", + "category": "Games", + "keywords": [ + "westeroscraft", + "minecraft", + "minecraft launcher", + "forge", + "game of thrones" + ], + "icon": "westeroscraftlauncher-icon.png", + "icon32": "westeroscraftlauncher-icon-32.png", + "icon64": "westeroscraftlauncher-icon-64.png", + "icon128": "westeroscraftlauncher-icon-128.png", + "icon256": "westeroscraftlauncher-icon-256.png", + "date": "2018-07-30", + "iconColors": [ + "#e0c3b4", + "#9c1515", + "#ba5f59", + "#c47b74", + "#c48474" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:33.965Z", + "readmeFetchedAt": "2019-02-08T00:07:54.819Z", + "goodColorOnWhite": "#9C1515", + "goodColorOnBlack": "#E0C3B4", + "faintColorOnWhite": "rgba(156, 21, 21, 0.1)", + "keyValuePairs": [ + "is:app", + "app:WesterosCraft Launcher", + "app:westeroscraftlauncher" + ] + }, { "objectID": "app-wewe-chat", "slug": "wewe-chat", @@ -21792,8 +28506,8 @@ "#5ec4a4", "#7cbcb4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.167Z", - "readmeFetchedAt": "2018-05-14T15:02:51.029Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.063Z", + "readmeFetchedAt": "2019-02-08T00:07:54.948Z", "goodColorOnWhite": "#16825C", "goodColorOnBlack": "#1BA374", "faintColorOnWhite": "rgba(22, 130, 92, 0.1)", @@ -21807,21 +28521,18 @@ "objectID": "app-wexond", "slug": "wexond", "name": "Wexond", - "description": "Extensible, fast and innovative web browser with Material UI", - "website": "https://wexond.nersent.tk", + "description": "Extensible web browser with beautiful UI", "category": "Productivity", - "repository": "https://github.com/Nersent/wexond", + "repository": "https://github.com/wexond/wexond", "keywords": [ "web-browser", - "material-ui", - "sass", + "material", + "styled-components", "webpack", "mobx", - "react", - "web", - "browser" + "react" ], - "license": "Apache-2.0", + "license": "MIT", "icon": "wexond-icon.png", "icon32": "wexond-icon-32.png", "icon64": "wexond-icon-64.png", @@ -21829,17 +28540,17 @@ "icon256": "wexond-icon-256.png", "date": "2018-02-13", "iconColors": [ - "#3b54b4", - "#43a3f3", - "#3b4baa", - "#3d56bc", - "#5193d4" + "#7b93df", + "#fbfbfb", + "#b9bed2", + "#a4a4a4", + "#acacac" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.297Z", - "readmeFetchedAt": "2018-05-14T15:02:50.934Z", - "goodColorOnWhite": "#3B54B4", - "goodColorOnBlack": "#43A3F3", - "faintColorOnWhite": "rgba(59, 84, 180, 0.1)", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.089Z", + "readmeFetchedAt": "2019-02-08T00:07:54.893Z", + "goodColorOnWhite": "#4668D2", + "goodColorOnBlack": "#7B93DF", + "faintColorOnWhite": "rgba(70, 104, 210, 0.1)", "keyValuePairs": [ "is:app", "app:Wexond", @@ -21874,8 +28585,8 @@ "#04456d", "#94acbc" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.243Z", - "readmeFetchedAt": "2018-05-14T15:02:50.894Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.088Z", + "readmeFetchedAt": "2019-02-08T00:07:54.932Z", "goodColorOnWhite": "#047BBB", "goodColorOnBlack": "#047BBB", "faintColorOnWhite": "rgba(4, 123, 187, 0.1)", @@ -21905,8 +28616,8 @@ "#f9a37e", "#f4946c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.240Z", - "readmeFetchedAt": "2018-05-14T15:02:50.972Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.171Z", + "readmeFetchedAt": "2019-02-08T00:07:54.953Z", "goodColorOnWhite": "#CD4306", "goodColorOnBlack": "#FCB494", "faintColorOnWhite": "rgba(205, 67, 6, 0.1)", @@ -21952,8 +28663,8 @@ "#8caeac", "#7cc49c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.372Z", - "readmeFetchedAt": "2018-05-14T15:02:51.054Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.354Z", + "readmeFetchedAt": "2019-02-08T00:07:55.209Z", "goodColorOnWhite": "#0F3827", "goodColorOnBlack": "#26845C", "faintColorOnWhite": "rgba(15, 56, 39, 0.1)", @@ -22074,8 +28785,8 @@ "#8cacd4", "#84c4ec" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.305Z", - "readmeFetchedAt": "2018-05-14T15:02:51.066Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.298Z", + "readmeFetchedAt": "2019-02-08T00:07:55.186Z", "goodColorOnWhite": "#0575C9", "goodColorOnBlack": "#84C4EC", "faintColorOnWhite": "rgba(5, 117, 201, 0.1)", @@ -22127,6 +28838,45 @@ "app:wildlink" ] }, + { + "objectID": "app-winds", + "slug": "winds", + "category": "Productivity", + "description": "An open-source podcast & RSS desktop app", + "keywords": [ + "feed", + "rss", + "podcast", + "audio", + "syndication" + ], + "name": "winds.yml", + "repository": "https://github.com/getstream/winds", + "website": "https://getstream.io", + "icon": "winds-icon.png", + "icon32": "winds-icon-32.png", + "icon64": "winds-icon-64.png", + "icon128": "winds-icon-128.png", + "icon256": "winds-icon-256.png", + "date": "2018-05-22", + "iconColors": [ + "#37b566", + "#fbfbfb", + "#aee0c2", + "#94d4ac", + "#c4e4d1" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:34.307Z", + "readmeFetchedAt": "2019-02-08T00:07:55.169Z", + "goodColorOnWhite": "#288249", + "goodColorOnBlack": "#37B566", + "faintColorOnWhite": "rgba(40, 130, 73, 0.1)", + "keyValuePairs": [ + "is:app", + "app:winds.yml", + "app:winds" + ] + }, { "objectID": "app-wire", "slug": "wire", @@ -22192,8 +28942,8 @@ "#de7d57", "#2a3c54" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.298Z", - "readmeFetchedAt": "2018-05-14T15:02:51.092Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.337Z", + "readmeFetchedAt": "2019-02-08T00:07:55.092Z", "goodColorOnWhite": "#741F0A", "goodColorOnBlack": "#FBD537", "faintColorOnWhite": "rgba(116, 31, 10, 0.1)", @@ -22320,7 +29070,7 @@ "slug": "world-history-ap", "name": "World History AP", "description": "Help students study for the rigorous AP exam", - "website": "http://whap.tk", + "website": "http://rrhswhap.weebly.com", "keywords": [ "Education" ], @@ -22379,8 +29129,8 @@ "#484444", "#484444" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.400Z", - "readmeFetchedAt": "2018-05-14T15:02:51.214Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.387Z", + "readmeFetchedAt": "2019-02-08T00:07:55.360Z", "goodColorOnWhite": "#484444", "goodColorOnBlack": "#7F7878", "faintColorOnWhite": "rgba(72, 68, 68, 0.1)", @@ -22419,8 +29169,8 @@ "#8a8888", "#6c746c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.364Z", - "readmeFetchedAt": "2018-05-14T15:02:51.294Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.384Z", + "readmeFetchedAt": "2019-02-08T00:07:55.351Z", "goodColorOnWhite": "#101916", "goodColorOnBlack": "#D951EB", "faintColorOnWhite": "rgba(16, 25, 22, 0.1)", @@ -22499,8 +29249,8 @@ "#747474", "#848484" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.373Z", - "readmeFetchedAt": "2018-05-14T15:02:51.191Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.430Z", + "readmeFetchedAt": "2019-02-08T00:07:55.334Z", "goodColorOnWhite": "#050505", "goodColorOnBlack": "#F3F3F3", "faintColorOnWhite": "rgba(5, 5, 5, 0.1)", @@ -22535,8 +29285,8 @@ "#3084a8", "#3084a8" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.440Z", - "readmeFetchedAt": "2018-05-14T15:02:51.396Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.566Z", + "readmeFetchedAt": "2019-02-08T00:07:55.387Z", "goodColorOnWhite": "#347CA4", "goodColorOnBlack": "#3084A8", "faintColorOnWhite": "rgba(52, 124, 164, 0.1)", @@ -22559,7 +29309,7 @@ "data-cleaning", "aotu.io" ], - "license": "MIT", + "license": "GPL-3.0", "locales": [ "zh-CN" ], @@ -22582,8 +29332,8 @@ "#535868", "#6c6c7c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.465Z", - "readmeFetchedAt": "2018-05-14T15:02:51.393Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.511Z", + "readmeFetchedAt": "2019-02-08T00:07:55.537Z", "goodColorOnWhite": "#2B3343", "goodColorOnBlack": "#90939B", "faintColorOnWhite": "rgba(43, 51, 67, 0.1)", @@ -22670,8 +29420,8 @@ "#fc80ab", "#fc6ca4" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.484Z", - "readmeFetchedAt": "2018-05-14T15:02:51.518Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.527Z", + "readmeFetchedAt": "2019-02-08T00:07:55.549Z", "goodColorOnWhite": "#E60453", "goodColorOnBlack": "#FC4484", "faintColorOnWhite": "rgba(230, 4, 83, 0.1)", @@ -22681,6 +29431,74 @@ "app:xuanxuan" ] }, + { + "objectID": "app-y2mp3", + "slug": "y2mp3", + "name": "y2mp3", + "description": "Download youtube videos to mp3s.", + "category": "Music", + "repository": "https://github.com/moshfeu/y2mp3", + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/moshfeu/y2mp3/master/app-resources/screenshots/screenshot1.png", + "caption": "Search", + "imageLink": "https://github.com/moshfeu/y2mp3" + }, + { + "imageUrl": "https://raw.githubusercontent.com/moshfeu/y2mp3/master/app-resources/screenshots/screenshot2.png", + "caption": "Explore", + "imageLink": "https://github.com/moshfeu/y2mp3" + }, + { + "imageUrl": "https://raw.githubusercontent.com/moshfeu/y2mp3/master/app-resources/screenshots/screenshot3.png", + "caption": "Download", + "imageLink": "https://github.com/moshfeu/y2mp3" + }, + { + "imageUrl": "https://raw.githubusercontent.com/moshfeu/y2mp3/master/app-resources/video.gif", + "caption": "Full flow", + "imageLink": "https://github.com/moshfeu/y2mp3" + } + ], + "keywords": [ + "youtube", + "playlist", + "download", + "mp3", + "free" + ], + "license": "MIT", + "colors": { + "goodColorOnWhite": "#148544", + "goodColorOnBlack": "#27ae60" + }, + "locales": [ + "en-US" + ], + "icon": "y2mp3-icon.png", + "icon32": "y2mp3-icon-32.png", + "icon64": "y2mp3-icon-64.png", + "icon128": "y2mp3-icon-128.png", + "icon256": "y2mp3-icon-256.png", + "date": "2018-12-03", + "iconColors": [ + "#f7faf8", + "#24ac64", + "#6dc894", + "#8cd4ac", + "#54c484" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:34.523Z", + "readmeFetchedAt": "2019-02-08T00:07:55.509Z", + "goodColorOnWhite": "#1A7D49", + "goodColorOnBlack": "#24AC64", + "faintColorOnWhite": "rgba(26, 125, 73, 0.1)", + "keyValuePairs": [ + "is:app", + "app:y2mp3", + "app:y2mp3" + ] + }, { "objectID": "app-yeoman", "slug": "yeoman", @@ -22711,8 +29529,8 @@ "#807474", "#a4845c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.459Z", - "readmeFetchedAt": "2018-05-14T15:02:53.468Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.648Z", + "readmeFetchedAt": "2019-02-08T00:07:55.517Z", "goodColorOnWhite": "#DA1E2C", "goodColorOnBlack": "#EDBF79", "faintColorOnWhite": "rgba(218, 30, 44, 0.1)", @@ -22787,8 +29605,8 @@ "#acacac", "#94949c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.529Z", - "readmeFetchedAt": "2018-05-14T15:02:51.496Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.696Z", + "readmeFetchedAt": "2019-02-08T00:07:55.724Z", "goodColorOnWhite": "#36393D", "goodColorOnBlack": "#94949C", "faintColorOnWhite": "rgba(54, 57, 61, 0.1)", @@ -22798,6 +29616,48 @@ "app:yosoro" ] }, + { + "objectID": "app-youget", + "slug": "youget", + "name": "YouGet", + "description": "YouTube Video/Playlist Downloader/MP3 Converter/Cutter/Subtitle", + "category": "Utilities", + "repository": "https://github.com/ahmetzeybek/YouGet", + "keywords": [ + "youtube", + "download", + "mp3", + "video" + ], + "screenshots": [ + { + "imageUrl": "https://i.hizliresim.com/VD1nln.png" + } + ], + "icon": "youget-icon.png", + "icon32": "youget-icon-32.png", + "icon64": "youget-icon-64.png", + "icon128": "youget-icon-128.png", + "icon256": "youget-icon-256.png", + "date": "2018-09-17", + "iconColors": [ + "#ca3f47", + "#f24c54", + "#e44450", + "#dc444c", + "#ec4454" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:34.632Z", + "readmeFetchedAt": "2019-02-08T00:07:55.664Z", + "goodColorOnWhite": "#CA3F47", + "goodColorOnBlack": "#F24C54", + "faintColorOnWhite": "rgba(202, 63, 71, 0.1)", + "keyValuePairs": [ + "is:app", + "app:YouGet", + "app:youget" + ] + }, { "objectID": "app-yout", "slug": "yout", @@ -22862,8 +29722,8 @@ "#dc9c9c", "#bc949c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.539Z", - "readmeFetchedAt": "2018-05-14T15:02:51.607Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.648Z", + "readmeFetchedAt": "2019-02-08T00:07:55.658Z", "goodColorOnWhite": "#77181F", "goodColorOnBlack": "#DC9C9C", "faintColorOnWhite": "rgba(119, 24, 31, 0.1)", @@ -22873,6 +29733,53 @@ "app:youtube-mp3" ] }, + { + "objectID": "app-youtube-music-desktop-app", + "slug": "youtube-music-desktop-app", + "name": "YTMDesktop App", + "description": "A Desktop App for YouTube Music", + "website": "https://ytmdesktop.app", + "category": "Music", + "repository": "https://github.com/adlerluiz/ytmdesktop", + "keywords": [ + "youtube", + "music", + "desktop", + "app", + "electron", + "node", + "javascript", + "materializecss" + ], + "screenshots": [ + { + "imageUrl": "https://ytmdesktop.app/img/product/main.png" + } + ], + "icon": "youtube-music-desktop-app-icon.png", + "icon32": "youtube-music-desktop-app-icon-32.png", + "icon64": "youtube-music-desktop-app-icon-64.png", + "icon128": "youtube-music-desktop-app-icon-128.png", + "icon256": "youtube-music-desktop-app-icon-256.png", + "date": "2018-10-24", + "iconColors": [ + "#fcfbfb", + "#fc0404", + "#fc5555", + "#fc7c7c", + "#fc3434" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:34.765Z", + "readmeFetchedAt": "2019-02-08T00:07:55.697Z", + "goodColorOnWhite": "#E30303", + "goodColorOnBlack": "#FC0404", + "faintColorOnWhite": "rgba(227, 3, 3, 0.1)", + "keyValuePairs": [ + "is:app", + "app:YTMDesktop App", + "app:youtube-music-desktop-app" + ] + }, { "objectID": "app-youtube-to-mp3", "slug": "youtube-to-mp3", @@ -22904,8 +29811,8 @@ "#aed381", "#ccd266" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.547Z", - "readmeFetchedAt": "2018-05-14T15:02:51.583Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.785Z", + "readmeFetchedAt": "2019-02-08T00:07:55.766Z", "goodColorOnWhite": "#757002", "goodColorOnBlack": "#FBEF04", "faintColorOnWhite": "rgba(117, 112, 2, 0.1)", @@ -22915,6 +29822,105 @@ "app:youtube-to-mp3" ] }, + { + "objectID": "app-ytdownloader", + "slug": "ytdownloader", + "name": "YT.Downloader", + "description": "Youtube Video Downloader&Converter and Play Music", + "category": "Utilities", + "repository": "https://github.com/myazarc/ytdownloader", + "keywords": [ + "youtube", + "downloader", + "video", + "mp3", + "converter", + "music player" + ], + "screenshots": [ + { + "imageUrl": "https://raw.githubusercontent.com/myazarc/ytdownloader/master/build/images/YT.Downloader.png" + } + ], + "locales": [ + "en-US" + ], + "icon": "ytdownloader-icon.png", + "icon32": "ytdownloader-icon-32.png", + "icon64": "ytdownloader-icon-64.png", + "icon128": "ytdownloader-icon-128.png", + "icon256": "ytdownloader-icon-256.png", + "date": "2018-10-04", + "iconColors": [ + "#e42c24", + "#fbfafa", + "#f48c88", + "#ec726c", + "#f49c9c" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:34.784Z", + "readmeFetchedAt": "2019-02-08T00:07:55.733Z", + "goodColorOnWhite": "#E31D15", + "goodColorOnBlack": "#F48C88", + "faintColorOnWhite": "rgba(227, 29, 21, 0.1)", + "keyValuePairs": [ + "is:app", + "app:YT.Downloader", + "app:ytdownloader" + ] + }, + { + "objectID": "app-ytdx", + "slug": "ytdx", + "name": "YTDX", + "description": "Download audio from YouTube videos", + "website": "https://home.aveek.io/blog/post/ytdx/", + "repository": "https://github.com/Aveek-Saha/ytdx", + "category": "Music", + "keywords": [ + "music", + "audio", + "mp3", + "flac", + "youtube", + "download" + ], + "screenshots": [ + { + "imageUrl": "https://aveeksaha.gitlab.io/ytdx/screenshot1.png", + "caption": "Screenshot", + "imageLink": "https://github.com/Aveek-Saha/ytdxo/releases" + }, + { + "imageUrl": "https://aveeksaha.gitlab.io/ytdx/screenshot2.png", + "caption": "Notification", + "imageLink": "https://github.com/Aveek-Saha/ytdx/releases" + } + ], + "icon": "ytdx-icon.png", + "icon32": "ytdx-icon-32.png", + "icon64": "ytdx-icon-64.png", + "icon128": "ytdx-icon-128.png", + "icon256": "ytdx-icon-256.png", + "date": "2019-01-10", + "iconColors": [ + "#db2c43", + "#242424", + "#2c2a2c", + "#48282c", + "#5e2c2e" + ], + "latestReleaseFetchedAt": "2019-02-08T00:07:34.807Z", + "readmeFetchedAt": "2019-02-08T00:07:55.789Z", + "goodColorOnWhite": "#DB2C43", + "goodColorOnBlack": "#DF4559", + "faintColorOnWhite": "rgba(219, 44, 67, 0.1)", + "keyValuePairs": [ + "is:app", + "app:YTDX", + "app:ytdx" + ] + }, { "objectID": "app-z11and2", "slug": "z11and2", @@ -22995,8 +30001,8 @@ "#141414", "#241c1c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.554Z", - "readmeFetchedAt": "2018-05-14T15:02:51.618Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.856Z", + "readmeFetchedAt": "2019-02-08T00:07:55.827Z", "goodColorOnWhite": "#24241C", "goodColorOnBlack": "#818165", "faintColorOnWhite": "rgba(36, 36, 28, 0.1)", @@ -23073,8 +30079,8 @@ "#306582", "#3a5481" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.601Z", - "readmeFetchedAt": "2018-05-14T15:02:51.654Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.851Z", + "readmeFetchedAt": "2019-02-08T00:07:55.838Z", "goodColorOnWhite": "#306582", "goodColorOnBlack": "#40B1E3", "faintColorOnWhite": "rgba(48, 101, 130, 0.1)", @@ -23113,8 +30119,8 @@ "#7c7c7c", "#747474" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.916Z", - "readmeFetchedAt": "2018-05-14T15:02:51.708Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.898Z", + "readmeFetchedAt": "2019-02-08T00:07:55.881Z", "goodColorOnWhite": "#040404", "goodColorOnBlack": "#E89D9D", "faintColorOnWhite": "rgba(4, 4, 4, 0.1)", @@ -23206,8 +30212,8 @@ "#74ae6c", "#92a88c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.619Z", - "readmeFetchedAt": "2018-05-14T15:02:51.691Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.912Z", + "readmeFetchedAt": "2019-02-08T00:07:55.911Z", "goodColorOnWhite": "#053B04", "goodColorOnBlack": "#3DB634", "faintColorOnWhite": "rgba(5, 59, 4, 0.1)", @@ -23367,8 +30373,8 @@ "#76c4bc", "#04544c" ], - "latestReleaseFetchedAt": "2018-05-14T15:02:36.637Z", - "readmeFetchedAt": "2018-05-14T15:02:51.782Z", + "latestReleaseFetchedAt": "2019-02-08T00:07:34.925Z", + "readmeFetchedAt": "2019-02-08T00:07:55.953Z", "goodColorOnWhite": "#04544C", "goodColorOnBlack": "#049484", "faintColorOnWhite": "rgba(4, 84, 76, 0.1)", diff --git a/dist/glossary.json b/dist/glossary.json new file mode 100644 index 0000000..41e6a3d --- /dev/null +++ b/dist/glossary.json @@ -0,0 +1,214 @@ +{ + "name": "glossary", + "records": [ + { + "objectID": "glossary-ASAR", + "term": "ASAR", + "description": "ASAR stands for Atom Shell Archive Format. An asar archive is a simple tar-like format that concatenates files into a single file. Electron can read arbitrary files from it without unpacking the whole file.", + "url": "https://electronjs.org/docs/glossary#asar", + "keyValuePairs": [ + "is:doc", + "is:glossary", + "glossary:ASAR" + ] + }, + { + "objectID": "glossary-CRT", + "term": "CRT", + "description": "The C Run-time Library (CRT) is the part of the C++ Standard Library that incorporates the ISO C99 standard library. The Visual C++ libraries that implement the CRT support native code development, and both mixed native and managed code, and pure managed code for .NET development.", + "url": "https://electronjs.org/docs/glossary#crt", + "keyValuePairs": [ + "is:doc", + "is:glossary", + "glossary:CRT" + ] + }, + { + "objectID": "glossary-DMG", + "term": "DMG", + "description": "An Apple Disk Image is a packaging format used by macOS. DMG files are commonly used for distributing application \"installers\". electron-builder supports dmg as a build target.", + "url": "https://electronjs.org/docs/glossary#dmg", + "keyValuePairs": [ + "is:doc", + "is:glossary", + "glossary:DMG" + ] + }, + { + "objectID": "glossary-IME", + "term": "IME", + "description": "Input Method Editor. A program that allows users to enter characters and symbols not found on their keyboard. For example, this allows users of Latin keyboards to input Chinese, Japanese, Korean and Indic characters.", + "url": "https://electronjs.org/docs/glossary#ime", + "keyValuePairs": [ + "is:doc", + "is:glossary", + "glossary:IME" + ] + }, + { + "objectID": "glossary-IDL", + "term": "IDL", + "description": "Interface description language. Write function signatures and data types in a format that can be used to generate interfaces in Java, C++, JavaScript, etc.", + "url": "https://electronjs.org/docs/glossary#idl", + "keyValuePairs": [ + "is:doc", + "is:glossary", + "glossary:IDL" + ] + }, + { + "objectID": "glossary-IPC", + "term": "IPC", + "description": "IPC stands for Inter-Process Communication. Electron uses IPC to send serialized JSON messages between the main and renderer processes.", + "url": "https://electronjs.org/docs/glossary#ipc", + "keyValuePairs": [ + "is:doc", + "is:glossary", + "glossary:IPC" + ] + }, + { + "objectID": "glossary-libchromiumcontent", + "term": "libchromiumcontent", + "description": "A shared library that includes the Chromium Content module and all its dependencies (e.g., Blink, V8, etc.). Also referred to as \"libcc\".", + "url": "https://electronjs.org/docs/glossary#libchromiumcontent", + "keyValuePairs": [ + "is:doc", + "is:glossary", + "glossary:libchromiumcontent" + ] + }, + { + "objectID": "glossary-main process", + "term": "main process", + "description": "The main process, commonly a file named main.js, is the entry point to every Electron app. It controls the life of the app, from open to close. It also manages native elements such as the Menu, Menu Bar, Dock, Tray, etc. The main process is responsible for creating each new renderer process in the app. The full Node API is built in.", + "url": "https://electronjs.org/docs/glossary#main-process", + "keyValuePairs": [ + "is:doc", + "is:glossary", + "glossary:main process" + ] + }, + { + "objectID": "glossary-MAS", + "term": "MAS", + "description": "Acronym for Apple's Mac App Store. For details on submitting your app to the MAS, see the Mac App Store Submission Guide.", + "url": "https://electronjs.org/docs/glossary#mas", + "keyValuePairs": [ + "is:doc", + "is:glossary", + "glossary:MAS" + ] + }, + { + "objectID": "glossary-Mojo", + "term": "Mojo", + "description": "An IPC system for communicating intra- or inter-process, and that's important because Chrome is keen on being able to split its work into separate processes or not, depending on memory pressures etc.", + "url": "https://electronjs.org/docs/glossary#mojo", + "keyValuePairs": [ + "is:doc", + "is:glossary", + "glossary:Mojo" + ] + }, + { + "objectID": "glossary-native modules", + "term": "native modules", + "description": "Native modules (also called addons in Node.js) are modules written in C or C++ that can be loaded into Node.js or Electron using the require() function, and used as if they were an ordinary Node.js module. They are used primarily to provide an interface between JavaScript running in Node.js and C/C++ libraries.", + "url": "https://electronjs.org/docs/glossary#native-modules", + "keyValuePairs": [ + "is:doc", + "is:glossary", + "glossary:native modules" + ] + }, + { + "objectID": "glossary-NSIS", + "term": "NSIS", + "description": "Nullsoft Scriptable Install System is a script-driven Installer authoring tool for Microsoft Windows. It is released under a combination of free software licenses, and is a widely-used alternative to commercial proprietary products like InstallShield. electron-builder supports NSIS as a build target.", + "url": "https://electronjs.org/docs/glossary#nsis", + "keyValuePairs": [ + "is:doc", + "is:glossary", + "glossary:NSIS" + ] + }, + { + "objectID": "glossary-OSR", + "term": "OSR", + "description": "OSR (Off-screen rendering) can be used for loading heavy page in background and then displaying it after (it will be much faster). It allows you to render page without showing it on screen.", + "url": "https://electronjs.org/docs/glossary#osr", + "keyValuePairs": [ + "is:doc", + "is:glossary", + "glossary:OSR" + ] + }, + { + "objectID": "glossary-process", + "term": "process", + "description": "A process is an instance of a computer program that is being executed. Electron apps that make use of the main and one or many renderer process are actually running several programs simultaneously.", + "url": "https://electronjs.org/docs/glossary#process", + "keyValuePairs": [ + "is:doc", + "is:glossary", + "glossary:process" + ] + }, + { + "objectID": "glossary-renderer process", + "term": "renderer process", + "description": "The renderer process is a browser window in your app. Unlike the main process, there can be multiple of these and each is run in a separate process. They can also be hidden.", + "url": "https://electronjs.org/docs/glossary#renderer-process", + "keyValuePairs": [ + "is:doc", + "is:glossary", + "glossary:renderer process" + ] + }, + { + "objectID": "glossary-Squirrel", + "term": "Squirrel", + "description": "Squirrel is an open-source framework that enables Electron apps to update automatically as new versions are released. See the autoUpdater API for info about getting started with Squirrel.", + "url": "https://electronjs.org/docs/glossary#squirrel", + "keyValuePairs": [ + "is:doc", + "is:glossary", + "glossary:Squirrel" + ] + }, + { + "objectID": "glossary-userland", + "term": "userland", + "description": "This term originated in the Unix community, where \"userland\" or \"userspace\" referred to programs that run outside of the operating system kernel. More recently, the term has been popularized in the Node and npm community to distinguish between the features available in \"Node core\" versus packages published to the npm registry by the much larger \"user\" community.", + "url": "https://electronjs.org/docs/glossary#userland", + "keyValuePairs": [ + "is:doc", + "is:glossary", + "glossary:userland" + ] + }, + { + "objectID": "glossary-V8", + "term": "V8", + "description": "V8 is Google's open source JavaScript engine. It is written in C++ and is used in Google Chrome. V8 can run standalone, or can be embedded into any C++ application.", + "url": "https://electronjs.org/docs/glossary#v8", + "keyValuePairs": [ + "is:doc", + "is:glossary", + "glossary:V8" + ] + }, + { + "objectID": "glossary-webview", + "term": "webview", + "description": "webview tags are used to embed 'guest' content (such as external web pages) in your Electron app. They are similar to iframes, but differ in that each webview runs in a separate process. It doesn't have the same permissions as your web page and all interactions between your app and embedded content will be asynchronous. This keeps your app safe from the embedded content.", + "url": "https://electronjs.org/docs/glossary#webview", + "keyValuePairs": [ + "is:doc", + "is:glossary", + "glossary:webview" + ] + } + ] +} \ No newline at end of file diff --git a/dist/tutorials.json b/dist/tutorials.json index 2ea6686..e86677f 100644 --- a/dist/tutorials.json +++ b/dist/tutorials.json @@ -7,7 +7,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/about.md", "url": "https://electronjs.org/docs/tutorial/about", "slug": "about", - "body": "About Electron\nElectron is an open source library developed by GitHub for building cross-platform desktop applications with HTML, CSS, and JavaScript. Electron accomplishes this by combining Chromium and Node.js into a single runtime and apps can be packaged for Mac, Windows, and Linux.\nElectron began in 2013 as the framework on which Atom, GitHub's hackable text editor, would be built. The two were open sourced in the Spring of 2014.\nIt has since become a popular tool used by open source developers, startups, and established companies. See who is building on Electron.\nRead on to learn more about the contributors and releases of Electron or get started building with Electron in the Quick Start Guide.\n\n\nCore Team and Contributors\nElectron is maintained by a team at GitHub as well as a group of active contributors from the community. Some of the contributors are individuals and some work at larger companies who are developing on Electron. We're happy to add frequent contributors to the project as maintainers. Read more about contributing to Electron.\n\n\nReleases\nElectron releases frequently. We release when there are significant bug fixes, new APIs or are updating versions of Chromium or Node.js.\n\n\nUpdating Dependencies\nElectron's version of Chromium is usually updated within one or two weeks after a new stable Chromium version is released, depending on the effort involved in the upgrade.\nWhen a new version of Node.js is released, Electron usually waits about a month before upgrading in order to bring in a more stable version.\nIn Electron, Node.js and Chromium share a single V8 instance—usually the version that Chromium is using. Most of the time this just works but sometimes it means patching Node.js.\n\n\nVersioning\nAs of version 2.0 Electron follows semver.\nFor most applications, and using any recent version of npm,\nrunning $ npm install electron will do the right thing.\nThe version update process is detailed explicitly in our Versioning Doc.\n\n\nLTS\nLong term support of older versions of Electron does not currently exist. If your current version of Electron works for you, you can stay on it for as long as you'd like. If you want to make use of new features as they come in you should upgrade to a newer version.\nA major update came with version v1.0.0. If you're not yet using this version, you should read more about the v1.0.0 changes.\n\n\nCore Philosophy\nIn order to keep Electron small (file size) and sustainable (the spread of dependencies and APIs) the project limits the scope of the core project.\nFor instance, Electron uses Chromium's rendering library rather than all of Chromium. This makes it easier to upgrade Chromium but also means some browser features found in Google Chrome do not exist in Electron.\nNew features added to Electron should primarily be native APIs. If a feature can be its own Node.js module, it probably should be. See the Electron tools built by the community.\n\n\nHistory\nBelow are milestones in Electron's history.\n\n\n\n:calendar:\n:tada:\n\n\n\n\nApril 2013\nAtom Shell is started\n.\n\n\nMay 2014\nAtom Shell is open sourced\n.\n\n\nApril 2015\nAtom Shell is re-named Electron\n.\n\n\nMay 2016\nElectron releases v1.0.0\n.\n\n\nMay 2016\nElectron apps compatible with Mac App Store\n.\n\n\nAugust 2016\nWindows Store support for Electron apps\n.\n\n\n\n", + "body": "About Electron\nElectron is an open source library developed by GitHub for building cross-platform desktop applications with HTML, CSS, and JavaScript. Electron accomplishes this by combining Chromium and Node.js into a single runtime and apps can be packaged for Mac, Windows, and Linux.\nElectron began in 2013 as the framework on which Atom, GitHub's hackable text editor, would be built. The two were open sourced in the Spring of 2014.\nIt has since become a popular tool used by open source developers, startups, and established companies. See who is building on Electron.\nRead on to learn more about the contributors and releases of Electron or get started building with Electron in the Quick Start Guide.\n\n\nCore Team and Contributors\nElectron is maintained by a team at GitHub as well as a group of active contributors from the community. Some of the contributors are individuals and some work at larger companies who are developing on Electron. We're happy to add frequent contributors to the project as maintainers. Read more about contributing to Electron.\n\n\nReleases\nElectron releases frequently. We release when there are significant bug fixes, new APIs or are updating versions of Chromium or Node.js.\n\n\nUpdating Dependencies\nElectron's version of Chromium is usually updated within one or two weeks after a new stable Chromium version is released, depending on the effort involved in the upgrade.\nWhen a new version of Node.js is released, Electron usually waits about a month before upgrading in order to bring in a more stable version.\nIn Electron, Node.js and Chromium share a single V8 instance—usually the version that Chromium is using. Most of the time this just works but sometimes it means patching Node.js.\n\n\nVersioning\nAs of version 2.0 Electron follows semver.\nFor most applications, and using any recent version of npm,\nrunning $ npm install electron will do the right thing.\nThe version update process is detailed explicitly in our Versioning Doc.\n\n\nLTS\nLong term support of older versions of Electron does not currently exist. If your current version of Electron works for you, you can stay on it for as long as you'd like. If you want to make use of new features as they come in you should upgrade to a newer version.\nA major update came with version v1.0.0. If you're not yet using this version, you should read more about the v1.0.0 changes.\n\n\nCore Philosophy\nIn order to keep Electron small (file size) and sustainable (the spread of dependencies and APIs) the project limits the scope of the core project.\nFor instance, Electron uses Chromium's rendering library rather than all of Chromium. This makes it easier to upgrade Chromium but also means some browser features found in Google Chrome do not exist in Electron.\nNew features added to Electron should primarily be native APIs. If a feature can be its own Node.js module, it probably should be. See the Electron tools built by the community.\n\n\nHistory\nBelow are milestones in Electron's history.\n\n\n\n📆\n🎉\n\n\n\n\nApril 2013\nAtom Shell is started\n.\n\n\nMay 2014\nAtom Shell is open sourced\n.\n\n\nApril 2015\nAtom Shell is re-named Electron\n.\n\n\nMay 2016\nElectron releases v1.0.0\n.\n\n\nMay 2016\nElectron apps compatible with Mac App Store\n.\n\n\nAugust 2016\nWindows Store support for Electron apps\n.\n\n\n\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -33,13 +33,29 @@ "tutorial:accessibility" ] }, + { + "objectID": "tutorial-app-feedback-program", + "title": "Electron App Feedback Program", + "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/app-feedback-program.md", + "url": "https://electronjs.org/docs/tutorial/app-feedback-program", + "slug": "app-feedback-program", + "body": "Electron App Feedback Program\nElectron is working on building a streamlined release process and having faster releases. To help with that, we have the App Feedback Program for large-scale Electron apps to test our beta releases and report app-specific issues to the Electron team. We use this program to help us prioritize work and get applications upgraded to the next stable release as soon as possible. There are a few requirements we expect from participants, such as attending short, online weekly check-ins. If you are interested or have questions, please send us a message at info@electronjs.org.\n", + "keyValuePairs": [ + "is:doc", + "is:tutorial", + "doc:Electron App Feedback Program", + "doc:app-feedback-program", + "tutorial:Electron App Feedback Program", + "tutorial:app-feedback-program" + ] + }, { "objectID": "tutorial-application-architecture", "title": "Electron Application Architecture", "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/application-architecture.md", "url": "https://electronjs.org/docs/tutorial/application-architecture", "slug": "application-architecture", - "body": "Electron Application Architecture\nBefore we can dive into Electron's APIs, we need to discuss the two process\ntypes available in Electron. They are fundamentally different and important to\nunderstand.\n\n\nMain and Renderer Processes\nIn Electron, the process that runs package.json's main script is called\nthe main process. The script that runs in the main process can display a\nGUI by creating web pages. An Electron app always has one main process, but\nnever more.\nSince Electron uses Chromium for displaying web pages, Chromium's\nmulti-process architecture is also used. Each web page in Electron runs in\nits own process, which is called the renderer process.\nIn normal browsers, web pages usually run in a sandboxed environment and are not\nallowed access to native resources. Electron users, however, have the power to\nuse Node.js APIs in web pages allowing lower level operating system\ninteractions.\n\n\nDifferences Between Main Process and Renderer Process\nThe main process creates web pages by creating BrowserWindow instances. Each\nBrowserWindow instance runs the web page in its own renderer process. When a\nBrowserWindow instance is destroyed, the corresponding renderer process\nis also terminated.\nThe main process manages all web pages and their corresponding renderer\nprocesses. Each renderer process is isolated and only cares about the web page\nrunning in it.\nIn web pages, calling native GUI related APIs is not allowed because managing\nnative GUI resources in web pages is very dangerous and it is easy to leak\nresources. If you want to perform GUI operations in a web page, the renderer\nprocess of the web page must communicate with the main process to request that\nthe main process perform those operations.\n\nAside: Communication Between Processes\nIn Electron, we have several ways to communicate between the main process\nand renderer processes. Like ipcRenderer and\nipcMain modules for sending messages, and the\nremote module for RPC style communication. There is also\nan FAQ entry on how to share data between web pages.\n\n\n\nUsing Electron APIs\nElectron offers a number of APIs that support the development of a desktop\napplication in both the main process and the renderer process. In both\nprocesses, you'd access Electron's APIs by requiring its included module:\nconst electron = require('electron')\nAll Electron APIs are assigned a process type. Many of them can only be\nused from the main process, some of them only from a renderer process,\nsome from both. The documentation for each individual API will\nstate which process it can be used from.\nA window in Electron is for instance created using the BrowserWindow\nclass. It is only available in the main process.\n// This will work in the main process, but be `undefined` in a\n// renderer process:\nconst { BrowserWindow } = require('electron')\n\nconst win = new BrowserWindow()\nSince communication between the processes is possible, a renderer process\ncan call upon the main process to perform tasks. Electron comes with a\nmodule called remote that exposes APIs usually only available on the\nmain process. In order to create a BrowserWindow from a renderer process,\nwe'd use the remote as a middle-man:\n// This will work in a renderer process, but be `undefined` in the\n// main process:\nconst { remote } = require('electron')\nconst { BrowserWindow } = remote\n\nconst win = new BrowserWindow()\n\n\nUsing Node.js APIs\nElectron exposes full access to Node.js both in the main and the renderer\nprocess. This has two important implications:\n1) All APIs available in Node.js are available in Electron. Calling the\nfollowing code from an Electron app works:\nconst fs = require('fs')\n\nconst root = fs.readdirSync('/')\n\n// This will print all files at the root-level of the disk,\n// either '/' or 'C:\\'.\nconsole.log(root)\nAs you might already be able to guess, this has important security implications\nif you ever attempt to load remote content. You can find more information and\nguidance on loading remote content in our security documentation.\n2) You can use Node.js modules in your application. Pick your favorite npm\nmodule. npm offers currently the world's biggest repository of open-source\ncode – the ability to use well-maintained and tested code that used to be\nreserved for server applications is one of the key features of Electron.\nAs an example, to use the official AWS SDK in your application, you'd first\ninstall it as a dependency:\nnpm install --save aws-sdk\nThen, in your Electron app, require and use the module as if you were\nbuilding a Node.js application:\n// A ready-to-use S3 Client\nconst S3 = require('aws-sdk/clients/s3')\nThere is one important caveat: Native Node.js modules (that is, modules that\nrequire compilation of native code before they can be used) will need to be\ncompiled to be used with Electron.\nThe vast majority of Node.js modules are not native. Only 400 out of the\n~650.000 modules are native. However, if you do need native modules, please\nconsult this guide on how to recompile them for Electron.\n", + "body": "Electron Application Architecture\nBefore we can dive into Electron's APIs, we need to discuss the two process\ntypes available in Electron. They are fundamentally different and important to\nunderstand.\n\n\nMain and Renderer Processes\nIn Electron, the process that runs package.json's main script is called\nthe main process. The script that runs in the main process can display a\nGUI by creating web pages. An Electron app always has one main process, but\nnever more.\nSince Electron uses Chromium for displaying web pages, Chromium's\nmulti-process architecture is also used. Each web page in Electron runs in\nits own process, which is called the renderer process.\nIn normal browsers, web pages usually run in a sandboxed environment and are not\nallowed access to native resources. Electron users, however, have the power to\nuse Node.js APIs in web pages allowing lower level operating system\ninteractions.\n\n\nDifferences Between Main Process and Renderer Process\nThe main process creates web pages by creating BrowserWindow instances. Each\nBrowserWindow instance runs the web page in its own renderer process. When a\nBrowserWindow instance is destroyed, the corresponding renderer process\nis also terminated.\nThe main process manages all web pages and their corresponding renderer\nprocesses. Each renderer process is isolated and only cares about the web page\nrunning in it.\nIn web pages, calling native GUI related APIs is not allowed because managing\nnative GUI resources in web pages is very dangerous and it is easy to leak\nresources. If you want to perform GUI operations in a web page, the renderer\nprocess of the web page must communicate with the main process to request that\nthe main process perform those operations.\n\nAside: Communication Between Processes\nIn Electron, we have several ways to communicate between the main process\nand renderer processes, such as ipcRenderer and\nipcMain modules for sending messages, and the\nremote module for RPC style communication. There is also\nan FAQ entry on how to share data between web pages.\n\n\n\nUsing Electron APIs\nElectron offers a number of APIs that support the development of a desktop\napplication in both the main process and the renderer process. In both\nprocesses, you'd access Electron's APIs by requiring its included module:\nconst electron = require('electron')\nAll Electron APIs are assigned a process type. Many of them can only be\nused from the main process, some of them only from a renderer process,\nsome from both. The documentation for each individual API will\nstate which process it can be used from.\nA window in Electron is for instance created using the BrowserWindow\nclass. It is only available in the main process.\n// This will work in the main process, but be `undefined` in a\n// renderer process:\nconst { BrowserWindow } = require('electron')\n\nconst win = new BrowserWindow()\nSince communication between the processes is possible, a renderer process\ncan call upon the main process to perform tasks. Electron comes with a\nmodule called remote that exposes APIs usually only available on the\nmain process. In order to create a BrowserWindow from a renderer process,\nwe'd use the remote as a middle-man:\n// This will work in a renderer process, but be `undefined` in the\n// main process:\nconst { remote } = require('electron')\nconst { BrowserWindow } = remote\n\nconst win = new BrowserWindow()\n\n\nUsing Node.js APIs\nElectron exposes full access to Node.js both in the main and the renderer\nprocess. This has two important implications:\n1) All APIs available in Node.js are available in Electron. Calling the\nfollowing code from an Electron app works:\nconst fs = require('fs')\n\nconst root = fs.readdirSync('/')\n\n// This will print all files at the root-level of the disk,\n// either '/' or 'C:\\'.\nconsole.log(root)\nAs you might already be able to guess, this has important security implications\nif you ever attempt to load remote content. You can find more information and\nguidance on loading remote content in our security documentation.\n2) You can use Node.js modules in your application. Pick your favorite npm\nmodule. npm offers currently the world's biggest repository of open-source\ncode – the ability to use well-maintained and tested code that used to be\nreserved for server applications is one of the key features of Electron.\nAs an example, to use the official AWS SDK in your application, you'd first\ninstall it as a dependency:\nnpm install --save aws-sdk\nThen, in your Electron app, require and use the module as if you were\nbuilding a Node.js application:\n// A ready-to-use S3 Client\nconst S3 = require('aws-sdk/clients/s3')\nThere is one important caveat: Native Node.js modules (that is, modules that\nrequire compilation of native code before they can be used) will need to be\ncompiled to be used with Electron.\nThe vast majority of Node.js modules are not native. Only 400 out of the\n~650.000 modules are native. However, if you do need native modules, please\nconsult this guide on how to recompile them for Electron.\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -71,7 +87,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/application-distribution.md", "url": "https://electronjs.org/docs/tutorial/application-distribution", "slug": "application-distribution", - "body": "Application Distribution\nTo distribute your app with Electron, you need to download Electron's prebuilt\nbinaries. Next, the folder\ncontaining your app should be named app and placed in Electron's resources\ndirectory as shown in the following examples. Note that the location of\nElectron's prebuilt binaries is indicated with electron/ in the examples\nbelow.\nOn macOS:\nelectron/Electron.app/Contents/Resources/app/\n├── package.json\n├── main.js\n└── index.html\nOn Windows and Linux:\nelectron/resources/app\n├── package.json\n├── main.js\n└── index.html\nThen execute Electron.app (or electron on Linux, electron.exe on Windows),\nand Electron will start as your app. The electron directory will then be\nyour distribution to deliver to final users.\n\n\nPackaging Your App into a File\nApart from shipping your app by copying all of its source files, you can also\npackage your app into an asar archive to avoid\nexposing your app's source code to users.\nTo use an asar archive to replace the app folder, you need to rename the\narchive to app.asar, and put it under Electron's resources directory like\nbelow, and Electron will then try to read the archive and start from it.\nOn macOS:\nelectron/Electron.app/Contents/Resources/\n└── app.asar\nOn Windows and Linux:\nelectron/resources/\n└── app.asar\nMore details can be found in Application packaging.\n\n\nRebranding with Downloaded Binaries\nAfter bundling your app into Electron, you will want to rebrand Electron\nbefore distributing it to users.\n\n\nWindows\nYou can rename electron.exe to any name you like, and edit its icon and other\ninformation with tools like rcedit.\n\n\nmacOS\nYou can rename Electron.app to any name you want, and you also have to rename\nthe CFBundleDisplayName, CFBundleIdentifier and CFBundleName fields in the\nfollowing files:\n\nElectron.app/Contents/Info.plist\nElectron.app/Contents/Frameworks/Electron Helper.app/Contents/Info.plist\n\nYou can also rename the helper app to avoid showing Electron Helper in the\nActivity Monitor, but make sure you have renamed the helper app's executable\nfile's name.\nThe structure of a renamed app would be like:\nMyApp.app/Contents\n├── Info.plist\n├── MacOS/\n│   └── MyApp\n└── Frameworks/\n ├── MyApp Helper EH.app\n | ├── Info.plist\n | └── MacOS/\n |    └── MyApp Helper EH\n ├── MyApp Helper NP.app\n | ├── Info.plist\n | └── MacOS/\n |    └── MyApp Helper NP\n └── MyApp Helper.app\n ├── Info.plist\n └── MacOS/\n    └── MyApp Helper\n\n\nLinux\nYou can rename the electron executable to any name you like.\n\n\nPackaging Tools\nApart from packaging your app manually, you can also choose to use third party\npackaging tools to do the work for you:\n\nelectron-forge\nelectron-builder\nelectron-packager\n\n\n\nRebranding by Rebuilding Electron from Source\nIt is also possible to rebrand Electron by changing the product name and\nbuilding it from source. To do this you need to modify the atom.gyp file and\nhave a clean rebuild.\n\n\nCreating a Custom Electron Fork\nCreating a custom fork of Electron is almost certainly not something you will\nneed to do in order to build your app, even for \"Production Level\" applications.\nUsing a tool such as electron-packager or electron-forge will allow you to\n\"Rebrand\" Electron without having to do these steps.\nYou need to fork Electron when you have custom C++ code that you have patched\ndirectly into Electron, that either cannot be upstreamed, or has been rejected\nfrom the official version. As maintainers of Electron, we very much would like\nto make your scenario work, so please try as hard as you can to get your changes\ninto the official version of Electron, it will be much much easier on you, and\nwe appreciate your help.\n\n\nCreating a Custom Release with surf-build\n\n\nInstall Surf, via npm:\nnpm install -g surf-build@latest\n\n\nCreate a new S3 bucket and create the following empty directory structure:\n- atom-shell/\n - symbols/\n - dist/\n\n\nSet the following Environment Variables:\n\n\n\nELECTRON_GITHUB_TOKEN - a token that can create releases on GitHub\nELECTRON_S3_ACCESS_KEY, ELECTRON_S3_BUCKET, ELECTRON_S3_SECRET_KEY -\nthe place where you'll upload node.js headers as well as symbols\nELECTRON_RELEASE - Set to true and the upload part will run, leave unset\nand surf-build will do CI-type checks, appropriate to run for every\npull request.\nCI - Set to true or else it will fail\nGITHUB_TOKEN - set it to the same as ELECTRON_GITHUB_TOKEN\nSURF_TEMP - set to C:\\Temp on Windows to prevent path too long issues\nTARGET_ARCH - set to ia32 or x64\n\n\n\nIn script/upload.py, you must set ELECTRON_REPO to your fork (MYORG/electron),\nespecially if you are a contributor to Electron proper.\n\n\nsurf-build -r https://github.com/MYORG/electron -s YOUR_COMMIT -n 'surf-PLATFORM-ARCH'\n\n\nWait a very, very long time for the build to complete.\n\n\n", + "body": "Application Distribution\nTo distribute your app with Electron, you need to download Electron's prebuilt\nbinaries. Next, the folder\ncontaining your app should be named app and placed in Electron's resources\ndirectory as shown in the following examples. Note that the location of\nElectron's prebuilt binaries is indicated with electron/ in the examples\nbelow.\nOn macOS:\nelectron/Electron.app/Contents/Resources/app/\n├── package.json\n├── main.js\n└── index.html\nOn Windows and Linux:\nelectron/resources/app\n├── package.json\n├── main.js\n└── index.html\nThen execute Electron.app (or electron on Linux, electron.exe on Windows),\nand Electron will start as your app. The electron directory will then be\nyour distribution to deliver to final users.\n\n\nPackaging Your App into a File\nApart from shipping your app by copying all of its source files, you can also\npackage your app into an asar archive to avoid\nexposing your app's source code to users.\nTo use an asar archive to replace the app folder, you need to rename the\narchive to app.asar, and put it under Electron's resources directory like\nbelow, and Electron will then try to read the archive and start from it.\nOn macOS:\nelectron/Electron.app/Contents/Resources/\n└── app.asar\nOn Windows and Linux:\nelectron/resources/\n└── app.asar\nMore details can be found in Application packaging.\n\n\nRebranding with Downloaded Binaries\nAfter bundling your app into Electron, you will want to rebrand Electron\nbefore distributing it to users.\n\n\nWindows\nYou can rename electron.exe to any name you like, and edit its icon and other\ninformation with tools like rcedit.\n\n\nmacOS\nYou can rename Electron.app to any name you want, and you also have to rename\nthe CFBundleDisplayName, CFBundleIdentifier and CFBundleName fields in the\nfollowing files:\n\nElectron.app/Contents/Info.plist\nElectron.app/Contents/Frameworks/Electron Helper.app/Contents/Info.plist\n\nYou can also rename the helper app to avoid showing Electron Helper in the\nActivity Monitor, but make sure you have renamed the helper app's executable\nfile's name.\nThe structure of a renamed app would be like:\nMyApp.app/Contents\n├── Info.plist\n├── MacOS/\n│   └── MyApp\n└── Frameworks/\n └── MyApp Helper.app\n ├── Info.plist\n └── MacOS/\n    └── MyApp Helper\n\n\nLinux\nYou can rename the electron executable to any name you like.\n\n\nPackaging Tools\nApart from packaging your app manually, you can also choose to use third party\npackaging tools to do the work for you:\n\nelectron-forge\nelectron-builder\nelectron-packager\n\n\n\nRebranding by Rebuilding Electron from Source\nIt is also possible to rebrand Electron by changing the product name and\nbuilding it from source. To do this you need to set the build argument\ncorresponding to the product name (electron_product_name = \"YourProductName\")\nin the args.gn file and rebuild.\n\n\nCreating a Custom Electron Fork\nCreating a custom fork of Electron is almost certainly not something you will\nneed to do in order to build your app, even for \"Production Level\" applications.\nUsing a tool such as electron-packager or electron-forge will allow you to\n\"Rebrand\" Electron without having to do these steps.\nYou need to fork Electron when you have custom C++ code that you have patched\ndirectly into Electron, that either cannot be upstreamed, or has been rejected\nfrom the official version. As maintainers of Electron, we very much would like\nto make your scenario work, so please try as hard as you can to get your changes\ninto the official version of Electron, it will be much much easier on you, and\nwe appreciate your help.\n\n\nCreating a Custom Release with surf-build\n\n\nInstall Surf, via npm:\nnpm install -g surf-build@latest\n\n\nCreate a new S3 bucket and create the following empty directory structure:\n- electron/\n - symbols/\n - dist/\n\n\nSet the following Environment Variables:\n\n\n\nELECTRON_GITHUB_TOKEN - a token that can create releases on GitHub\nELECTRON_S3_ACCESS_KEY, ELECTRON_S3_BUCKET, ELECTRON_S3_SECRET_KEY -\nthe place where you'll upload Node.js headers as well as symbols\nELECTRON_RELEASE - Set to true and the upload part will run, leave unset\nand surf-build will do CI-type checks, appropriate to run for every\npull request.\nCI - Set to true or else it will fail\nGITHUB_TOKEN - set it to the same as ELECTRON_GITHUB_TOKEN\nSURF_TEMP - set to C:\\Temp on Windows to prevent path too long issues\nTARGET_ARCH - set to ia32 or x64\n\n\n\nIn script/upload.py, you must set ELECTRON_REPO to your fork (MYORG/electron),\nespecially if you are a contributor to Electron proper.\n\n\nsurf-build -r https://github.com/MYORG/electron -s YOUR_COMMIT -n 'surf-PLATFORM-ARCH'\n\n\nWait a very, very long time for the build to complete.\n\n\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -119,7 +135,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/automated-testing-with-a-custom-driver.md", "url": "https://electronjs.org/docs/tutorial/automated-testing-with-a-custom-driver", "slug": "automated-testing-with-a-custom-driver", - "body": "Automated Testing with a Custom Driver\nTo write automated tests for your Electron app, you will need a way to \"drive\" your application. Spectron is a commonly-used solution which lets you emulate user actions via WebDriver. However, it's also possible to write your own custom driver using node's builtin IPC-over-STDIO. The benefit of a custom driver is that it tends to require less overhead than Spectron, and lets you expose custom methods to your test suite.\nTo create a custom driver, we'll use nodejs' child_process API. The test suite will spawn the Electron process, then establish a simple messaging protocol:\nvar childProcess = require('child_process')\nvar electronPath = require('electron')\n\n// spawn the process\nvar env = { /* ... */ }\nvar stdio = ['inherit', 'inherit', 'inherit', 'ipc']\nvar appProcess = childProcess.spawn(electronPath, ['./app'], {stdio, env})\n\n// listen for IPC messages from the app\nappProcess.on('message', (msg) => {\n // ...\n})\n\n// send an IPC message to the app\nappProcess.send({my: 'message'})\nFrom within the Electron app, you can listen for messages and send replies using the nodejs process API:\n// listen for IPC messages from the test suite\nprocess.on('message', (msg) => {\n // ...\n})\n\n// send an IPC message to the test suite\nprocess.send({my: 'message'})\nWe can now communicate from the test suite to the Electron app using the appProcess object.\nFor convenience, you may want to wrap appProcess in a driver object that provides more high-level functions. Here is an example of how you can do this:\nclass TestDriver {\n constructor ({path, args, env}) {\n this.rpcCalls = []\n\n // start child process\n env.APP_TEST_DRIVER = 1 // let the app know it should listen for messages\n this.process = childProcess.spawn(path, args, {stdio: ['inherit', 'inherit', 'inherit', 'ipc'], env})\n\n // handle rpc responses\n this.process.on('message', (message) => {\n // pop the handler\n var rpcCall = this.rpcCalls[message.msgId]\n if (!rpcCall) return\n this.rpcCalls[message.msgId] = null\n // reject/resolve\n if (message.reject) rpcCall.reject(message.reject)\n else rpcCall.resolve(message.resolve)\n })\n\n // wait for ready\n this.isReady = this.rpc('isReady').catch((err) => {\n console.error('Application failed to start', err)\n this.stop()\n process.exit(1)\n })\n }\n\n // simple RPC call\n // to use: driver.rpc('method', 1, 2, 3).then(...)\n async rpc (cmd, ...args) {\n // send rpc request\n var msgId = this.rpcCalls.length\n this.process.send({msgId, cmd, args})\n return new Promise((resolve, reject) => this.rpcCalls.push({resolve, reject}))\n }\n\n stop () {\n this.process.kill()\n }\n}\nIn the app, you'd need to write a simple handler for the RPC calls:\nif (process.env.APP_TEST_DRIVER) {\n process.on('message', onMessage)\n}\n\nasync function onMessage ({msgId, cmd, args}) {\n var method = METHODS[cmd]\n if (!method) method = () => new Error('Invalid method: ' + cmd)\n try {\n var resolve = await method(...args)\n process.send({msgId, resolve})\n } catch (err) {\n var reject = {\n message: err.message,\n stack: err.stack,\n name: err.name\n }\n process.send({msgId, reject})\n }\n}\n\nconst METHODS = {\n isReady () {\n // do any setup needed\n return true\n }\n // define your RPC-able methods here\n}\nThen, in your test suite, you can use your test-driver as follows:\nvar test = require('ava')\nvar electronPath = require('electron')\n\nvar app = new TestDriver({\n path: electronPath,\n args: ['./app'],\n env: {\n NODE_ENV: 'test'\n }\n})\ntest.before(async t => {\n await app.isReady\n})\ntest.after.always('cleanup', async t => {\n await app.stop()\n})\n", + "body": "Automated Testing with a Custom Driver\nTo write automated tests for your Electron app, you will need a way to \"drive\" your application. Spectron is a commonly-used solution which lets you emulate user actions via WebDriver. However, it's also possible to write your own custom driver using node's builtin IPC-over-STDIO. The benefit of a custom driver is that it tends to require less overhead than Spectron, and lets you expose custom methods to your test suite.\nTo create a custom driver, we'll use nodejs' child_process API. The test suite will spawn the Electron process, then establish a simple messaging protocol:\nvar childProcess = require('child_process')\nvar electronPath = require('electron')\n\n// spawn the process\nvar env = { /* ... */ }\nvar stdio = ['inherit', 'inherit', 'inherit', 'ipc']\nvar appProcess = childProcess.spawn(electronPath, ['./app'], { stdio, env })\n\n// listen for IPC messages from the app\nappProcess.on('message', (msg) => {\n // ...\n})\n\n// send an IPC message to the app\nappProcess.send({ my: 'message' })\nFrom within the Electron app, you can listen for messages and send replies using the nodejs process API:\n// listen for IPC messages from the test suite\nprocess.on('message', (msg) => {\n // ...\n})\n\n// send an IPC message to the test suite\nprocess.send({ my: 'message' })\nWe can now communicate from the test suite to the Electron app using the appProcess object.\nFor convenience, you may want to wrap appProcess in a driver object that provides more high-level functions. Here is an example of how you can do this:\nclass TestDriver {\n constructor ({ path, args, env }) {\n this.rpcCalls = []\n\n // start child process\n env.APP_TEST_DRIVER = 1 // let the app know it should listen for messages\n this.process = childProcess.spawn(path, args, { stdio: ['inherit', 'inherit', 'inherit', 'ipc'], env })\n\n // handle rpc responses\n this.process.on('message', (message) => {\n // pop the handler\n var rpcCall = this.rpcCalls[message.msgId]\n if (!rpcCall) return\n this.rpcCalls[message.msgId] = null\n // reject/resolve\n if (message.reject) rpcCall.reject(message.reject)\n else rpcCall.resolve(message.resolve)\n })\n\n // wait for ready\n this.isReady = this.rpc('isReady').catch((err) => {\n console.error('Application failed to start', err)\n this.stop()\n process.exit(1)\n })\n }\n\n // simple RPC call\n // to use: driver.rpc('method', 1, 2, 3).then(...)\n async rpc (cmd, ...args) {\n // send rpc request\n var msgId = this.rpcCalls.length\n this.process.send({ msgId, cmd, args })\n return new Promise((resolve, reject) => this.rpcCalls.push({ resolve, reject }))\n }\n\n stop () {\n this.process.kill()\n }\n}\nIn the app, you'd need to write a simple handler for the RPC calls:\nif (process.env.APP_TEST_DRIVER) {\n process.on('message', onMessage)\n}\n\nasync function onMessage ({ msgId, cmd, args }) {\n var method = METHODS[cmd]\n if (!method) method = () => new Error('Invalid method: ' + cmd)\n try {\n var resolve = await method(...args)\n process.send({ msgId, resolve })\n } catch (err) {\n var reject = {\n message: err.message,\n stack: err.stack,\n name: err.name\n }\n process.send({ msgId, reject })\n }\n}\n\nconst METHODS = {\n isReady () {\n // do any setup needed\n return true\n }\n // define your RPC-able methods here\n}\nThen, in your test suite, you can use your test-driver as follows:\nvar test = require('ava')\nvar electronPath = require('electron')\n\nvar app = new TestDriver({\n path: electronPath,\n args: ['./app'],\n env: {\n NODE_ENV: 'test'\n }\n})\ntest.before(async t => {\n await app.isReady\n})\ntest.after.always('cleanup', async t => {\n await app.stop()\n})\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -145,13 +161,29 @@ "tutorial:boilerplates-and-clis" ] }, + { + "objectID": "tutorial-build-instructions-gn", + "title": "Build Instructions", + "githubUrl": "https://github.com/electron/electron/tree/master/docs/development/build-instructions-gn.md", + "url": "https://electronjs.org/docs/tutorial/build-instructions-gn", + "slug": "build-instructions-gn", + "body": "Build Instructions\nFollow the guidelines below for building Electron.\n\n\nPlatform prerequisites\nCheck the build prerequisites for your platform before proceeding\n\nmacOS\nLinux\nWindows\n\n\n\nGN prerequisites\nYou'll need to install depot_tools, the toolset\nused for fetching Chromium and its dependencies.\nAlso, on Windows, you'll need to set the environment variable\nDEPOT_TOOLS_WIN_TOOLCHAIN=0. To do so, open Control Panel → System and Security → System → Advanced system settings and add a system variable\nDEPOT_TOOLS_WIN_TOOLCHAIN with value 0. This tells depot_tools to use\nyour locally installed version of Visual Studio (by default, depot_tools will\ntry to download a Google-internal version that only Googlers have access to).\n\n\nCached builds (optional step)\n\n\nGIT_CACHE_PATH\nIf you plan on building Electron more than once, adding a git cache will\nspeed up subsequent calls to gclient. To do this, set a GIT_CACHE_PATH\nenvironment variable:\n$ export GIT_CACHE_PATH=\"${HOME}/.git_cache\"\n$ mkdir -p \"${GIT_CACHE_PATH}\"\n# This will use about 16G.\n\nNOTE: the git cache will set the origin of the src/electron\nrepository to point to the local cache, instead of the upstream git\nrepository. This is undesirable when running git push—you probably want to\npush to github, not your local cache. To fix this, from the src/electron\ndirectory, run:\n\n$ git remote set-url origin https://github.com/electron/electron\n\n\nsccache\nThousands of files must be compiled to build Chromium and Electron.\nYou can avoid much of the wait by reusing Electron CI's build output via\nsccache. This requires some\noptional steps (listed below) and these two environment variables:\nexport SCCACHE_BUCKET=\"electronjs-sccache\"\nexport SCCACHE_TWO_TIER=true\n\n\nGetting the code\n$ mkdir electron-gn && cd electron-gn\n$ gclient config \\\n --name \"src/electron\" \\\n --unmanaged \\\n https://github.com/electron/electron\n$ gclient sync --with_branch_heads --with_tags\n# This will take a while, go get a coffee.\n\nInstead of https://github.com/electron/electron, you can use your own fork\nhere (something like https://github.com//electron).\n\n\n\nA note on pulling/pushing\nIf you intend to git pull or git push from the official electron\nrepository in the future, you now need to update the respective folder's\norigin URLs.\n$ cd src/electron\n$ git remote remove origin\n$ git remote add origin https://github.com/electron/electron\n$ git branch --set-upstream-to=origin/master\n$ cd -\n📝 gclient works by checking a file called DEPS inside the\nsrc/electron folder for dependencies (like Chromium or Node.js).\nRunning gclient sync -f ensures that all dependencies required\nto build Electron match that file.\nSo, in order to pull, you'd run the following commands:\n$ cd src/electron\n$ git pull\n$ gclient sync -f\n\n\nBuilding\n$ cd src\n$ export CHROMIUM_BUILDTOOLS_PATH=`pwd`/buildtools\n# this next line is needed only if building with sccache\n$ export GN_EXTRA_ARGS=\"${GN_EXTRA_ARGS} cc_wrapper=\\\"${PWD}/electron/external_binaries/sccache\\\"\"\n$ gn gen out/Debug --args=\"import(\\\"//electron/build/args/debug.gn\\\") $GN_EXTRA_ARGS\"\nOr on Windows (without the optional argument):\n$ cd src\n$ set CHROMIUM_BUILDTOOLS_PATH=%cd%\\buildtools\n$ gn gen out/Debug --args=\"import(\\\"//electron/build/args/debug.gn\\\")\"\nThis will generate a build directory out/Debug under src/ with\ndebug build configuration. You can replace Debug with another name,\nbut it should be a subdirectory of out.\nAlso you shouldn't have to run gn gen again—if you want to change the\nbuild arguments, you can run gn args out/Debug to bring up an editor.\nTo see the list of available build configuration options, run gn args out/Debug --list.\nFor generating Debug (aka \"component\" or \"shared\") build config of\nElectron:\n$ gn gen out/Debug --args=\"import(\\\"//electron/build/args/debug.gn\\\") $GN_EXTRA_ARGS\"\nFor generating Release (aka \"non-component\" or \"static\") build config of\nElectron:\n$ gn gen out/Release --args=\"import(\\\"//electron/build/args/release.gn\\\") $GN_EXTRA_ARGS\"\nTo build, run ninja with the electron target:\nNota Bene: This will also take a while and probably heat up your lap.\nFor the debug configuration:\n$ ninja -C out/Debug electron\nFor the release configuration:\n$ ninja -C out/Release electron\nThis will build all of what was previously 'libchromiumcontent' (i.e. the\ncontent/ directory of chromium and its dependencies, incl. WebKit and V8),\nso it will take a while.\nTo speed up subsequent builds, you can use sccache. Add the GN arg\ncc_wrapper = \"sccache\" by running gn args out/Debug to bring up an\neditor and adding a line to the end of the file.\nThe built executable will be under ./out/Debug:\n$ ./out/Debug/Electron.app/Contents/MacOS/Electron\n# or, on Windows\n$ ./out/Debug/electron.exe\n# or, on Linux\n$ ./out/Debug/electron\n\n\nCross-compiling\nTo compile for a platform that isn't the same as the one you're building on,\nset the target_cpu and target_os GN arguments. For example, to compile an\nx86 target from an x64 host, specify target_cpu = \"x86\" in gn args.\n$ gn gen out/Debug-x86 --args='... target_cpu = \"x86\"'\nNot all combinations of source and target CPU/OS are supported by Chromium.\nOnly cross-compiling Windows 32-bit from Windows 64-bit and Linux 32-bit from\nLinux 64-bit have been tested in Electron. If you test other combinations and\nfind them to work, please update this document :)\nSee the GN reference for allowable values of target_os\nand target_cpu\n\n\nTests\nTo run the tests, you'll first need to build the test modules against the\nsame version of Node.js that was built as part of the build process. To\ngenerate build headers for the modules to compile against, run the following\nunder src/ directory.\n$ ninja -C out/Debug third_party/electron_node:headers\n# Install the test modules with the generated headers\n$ (cd electron/spec && npm i --nodedir=../../out/Debug/gen/node_headers)\nThen, run Electron with electron/spec as the argument:\n# on Mac:\n$ ./out/Debug/Electron.app/Contents/MacOS/Electron electron/spec\n# on Windows:\n$ ./out/Debug/electron.exe electron/spec\n# on Linux:\n$ ./out/Debug/electron electron/spec\nIf you're debugging something, it can be helpful to pass some extra flags to\nthe Electron binary:\n$ ./out/Debug/Electron.app/Contents/MacOS/Electron electron/spec \\\n --ci --enable-logging -g 'BrowserWindow module'\n\n\nSharing the git cache between multiple machines\nIt is possible to share the gclient git cache with other machines by exporting it as\nSMB share on linux, but only one process/machine can be using the cache at a\ntime. The locks created by git-cache script will try to prevent this, but it may\nnot work perfectly in a network.\nOn Windows, SMBv2 has a directory cache that will cause problems with the git\ncache script, so it is necessary to disable it by setting the registry key\nHKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\Lanmanworkstation\\Parameters\\DirectoryCacheLifetime\nto 0. More information: https://stackoverflow.com/a/9935126\n\n\nTroubleshooting\n\n\nStale locks in the git cache\nIf gclient sync is interrupted while using the git cache, it will leave\nthe cache locked. To remove the lock, pass the --break_repo_locks argument to\ngclient sync.\n\n\nI'm being asked for a username/password for chromium-internal.googlesource.com\nIf you see a prompt for Username for 'https://chrome-internal.googlesource.com': when running gclient sync on Windows, it's probably because the DEPOT_TOOLS_WIN_TOOLCHAIN environment variable is not set to 0. Open Control Panel → System and Security → System → Advanced system settings and add a system variable\nDEPOT_TOOLS_WIN_TOOLCHAIN with value 0. This tells depot_tools to use\nyour locally installed version of Visual Studio (by default, depot_tools will\ntry to download a Google-internal version that only Googlers have access to).\n", + "keyValuePairs": [ + "is:doc", + "is:tutorial", + "doc:Build Instructions", + "doc:build-instructions-gn", + "tutorial:Build Instructions", + "tutorial:build-instructions-gn" + ] + }, { "objectID": "tutorial-build-instructions-linux", "title": "Build Instructions (Linux)", "githubUrl": "https://github.com/electron/electron/tree/master/docs/development/build-instructions-linux.md", "url": "https://electronjs.org/docs/tutorial/build-instructions-linux", "slug": "build-instructions-linux", - "body": "Build Instructions (Linux)\nFollow the guidelines below for building Electron on Linux.\n\n\nPrerequisites\n\nAt least 25GB disk space and 8GB RAM.\nPython 2.7.x. Some distributions like CentOS 6.x still use Python 2.6.x\nso you may need to check your Python version with python -V.\nNode.js. There are various ways to install Node. You can download\nsource code from nodejs.org and compile it.\nDoing so permits installing Node on your own home directory as a standard user.\nOr try repositories such as NodeSource.\nclang 3.4 or later.\nDevelopment headers of GTK+ and libnotify.\n\nOn Ubuntu, install the following libraries:\n$ sudo apt-get install build-essential clang libdbus-1-dev libgtk-3-dev \\\n libnotify-dev libgnome-keyring-dev libgconf2-dev \\\n libasound2-dev libcap-dev libcups2-dev libxtst-dev \\\n libxss1 libnss3-dev gcc-multilib g++-multilib curl \\\n gperf bison\nOn RHEL / CentOS, install the following libraries:\n$ sudo yum install clang dbus-devel gtk3-devel libnotify-devel \\\n libgnome-keyring-devel xorg-x11-server-utils libcap-devel \\\n cups-devel libXtst-devel alsa-lib-devel libXrandr-devel \\\n GConf2-devel nss-devel\nOn Fedora, install the following libraries:\n$ sudo dnf install clang dbus-devel gtk3-devel libnotify-devel \\\n libgnome-keyring-devel xorg-x11-server-utils libcap-devel \\\n cups-devel libXtst-devel alsa-lib-devel libXrandr-devel \\\n GConf2-devel nss-devel\nOther distributions may offer similar packages for installation via package\nmanagers such as pacman. Or one can compile from source code.\n\n\nGetting the Code\n$ git clone https://github.com/electron/electron\n\n\nBootstrapping\nThe bootstrap script will download all necessary build dependencies and create\nthe build project files. You must have Python 2.7.x for the script to succeed.\nDownloading certain files can take a long time. Notice that we are using\nninja to build Electron so there is no Makefile generated.\n$ cd electron\n$ ./script/bootstrap.py --verbose\nIf you are using editor supports JSON compilation database based\nlanguage server, you can generate it:\n$ ./script/build.py --compdb\n\n\nCross compilation\nIf you want to build for an arm target you should also install the following\ndependencies:\n$ sudo apt-get install libc6-dev-armhf-cross linux-libc-dev-armhf-cross \\\n g++-arm-linux-gnueabihf\nSimilarly for arm64, install the following:\n$ sudo apt-get install libc6-dev-arm64-cross linux-libc-dev-arm64-cross \\\n g++-aarch64-linux-gnu\nAnd to cross-compile for arm or ia32 targets, you should pass the\n--target_arch parameter to the bootstrap.py script:\n$ ./script/bootstrap.py -v --target_arch=arm\n\n\nBuilding\nIf you would like to build both Release and Debug targets:\n$ ./script/build.py\nThis script will cause a very large Electron executable to be placed in\nthe directory out/R. The file size is in excess of 1.3 gigabytes. This\nhappens because the Release target binary contains debugging symbols.\nTo reduce the file size, run the create-dist.py script:\n$ ./script/create-dist.py\nThis will put a working distribution with much smaller file sizes in\nthe dist directory. After running the create-dist.py script, you\nmay want to remove the 1.3+ gigabyte binary which is still in out/R.\nYou can also build the Debug target only:\n$ ./script/build.py -c D\nAfter building is done, you can find the electron debug binary under out/D.\n\n\nCleaning\nTo clean the build files:\n$ npm run clean\nTo clean only out and dist directories:\n$ npm run clean-build\nNote: Both clean commands require running bootstrap again before building.\n\n\nTroubleshooting\n\n\nError While Loading Shared Libraries: libtinfo.so.5\nPrebuilt clang will try to link to libtinfo.so.5. Depending on the host\narchitecture, symlink to appropriate libncurses:\n$ sudo ln -s /usr/lib/libncurses.so.5 /usr/lib/libtinfo.so.5\n\n\nTests\nSee Build System Overview: Tests\n\n\nAdvanced topics\nThe default building configuration is targeted for major desktop Linux\ndistributions. To build for a specific distribution or device, the following\ninformation may help you.\n\n\nBuilding libchromiumcontent locally\nTo avoid using the prebuilt binaries of libchromiumcontent, you can build libchromiumcontent locally. To do so, follow these steps:\n\nInstall depot_tools\nInstall additional build dependencies\nFetch the git submodules:\n\n$ git submodule update --init --recursive\n\nPass the --build_release_libcc switch to bootstrap.py script:\n\n$ ./script/bootstrap.py -v --build_release_libcc\nNote that by default the shared_library configuration is not built, so you can\nonly build Release version of Electron if you use this mode:\n$ ./script/build.py -c R\n\n\nUsing system clang instead of downloaded clang binaries\nBy default Electron is built with prebuilt\nclang binaries provided by the\nChromium project. If for some reason you want to build with the clang\ninstalled in your system, you can call bootstrap.py with --clang_dir=\nswitch. By passing it the build script will assume the clang binaries reside\nin /bin/.\nFor example if you installed clang under /user/local/bin/clang:\n$ ./script/bootstrap.py -v --build_release_libcc --clang_dir /usr/local\n$ ./script/build.py -c R\n\n\nUsing compilers other than clang\nTo build Electron with compilers like g++, you first need to disable clang\nwith --disable_clang switch first, and then set CC and CXX environment\nvariables to the ones you want.\nFor example building with GCC toolchain:\n$ env CC=gcc CXX=g++ ./script/bootstrap.py -v --build_release_libcc --disable_clang\n$ ./script/build.py -c R\n\n\nEnvironment variables\nApart from CC and CXX, you can also set the following environment variables to\ncustomise the build configuration:\n\nCPPFLAGS\nCPPFLAGS_host\nCFLAGS\nCFLAGS_host\nCXXFLAGS\nCXXFLAGS_host\nAR\nAR_host\nCC\nCC_host\nCXX\nCXX_host\nLDFLAGS\n\nThe environment variables have to be set when executing the bootstrap.py\nscript, it won't work in the build.py script.\n", + "body": "Build Instructions (Linux)\nFollow the guidelines below for building Electron on Linux.\n\n\nPrerequisites\n\n\nAt least 25GB disk space and 8GB RAM.\n\n\nPython 2.7.x. Some distributions like CentOS 6.x still use Python 2.6.x\nso you may need to check your Python version with python -V.\nPlease also ensure that your system and Python version support at least TLS 1.2.\nFor a quick test, run the following script:\n$ npm run check-tls\nIf the script returns that your configuration is using an outdated security\nprotocol, use your system's package manager to update Python to the latest\nversion in the 2.7.x branch. Alternatively, visit https://www.python.org/downloads/\nfor detailed instructions.\n\n\nNode.js. There are various ways to install Node. You can download\nsource code from nodejs.org and compile it.\nDoing so permits installing Node on your own home directory as a standard user.\nOr try repositories such as NodeSource.\n\n\nclang 3.4 or later.\n\n\nDevelopment headers of GTK+ and libnotify.\n\n\nOn Ubuntu, install the following libraries:\n$ sudo apt-get install build-essential clang libdbus-1-dev libgtk-3-dev \\\n libnotify-dev libgnome-keyring-dev libgconf2-dev \\\n libasound2-dev libcap-dev libcups2-dev libxtst-dev \\\n libxss1 libnss3-dev gcc-multilib g++-multilib curl \\\n gperf bison python-dbusmock\nOn RHEL / CentOS, install the following libraries:\n$ sudo yum install clang dbus-devel gtk3-devel libnotify-devel \\\n libgnome-keyring-devel xorg-x11-server-utils libcap-devel \\\n cups-devel libXtst-devel alsa-lib-devel libXrandr-devel \\\n GConf2-devel nss-devel python-dbusmock\nOn Fedora, install the following libraries:\n$ sudo dnf install clang dbus-devel gtk3-devel libnotify-devel \\\n libgnome-keyring-devel xorg-x11-server-utils libcap-devel \\\n cups-devel libXtst-devel alsa-lib-devel libXrandr-devel \\\n GConf2-devel nss-devel python-dbusmock\nOther distributions may offer similar packages for installation via package\nmanagers such as pacman. Or one can compile from source code.\n\n\nCross compilation\nIf you want to build for an arm target you should also install the following\ndependencies:\n$ sudo apt-get install libc6-dev-armhf-cross linux-libc-dev-armhf-cross \\\n g++-arm-linux-gnueabihf\nSimilarly for arm64, install the following:\n$ sudo apt-get install libc6-dev-arm64-cross linux-libc-dev-arm64-cross \\\n g++-aarch64-linux-gnu\nAnd to cross-compile for arm or ia32 targets, you should pass the\ntarget_cpu parameter to gn gen:\n$ gn gen out/Debug --args='import(...) target_cpu=\"arm\"'\n\n\nBuilding\nSee Build Instructions: GN\n\n\nTroubleshooting\n\n\nError While Loading Shared Libraries: libtinfo.so.5\nPrebuilt clang will try to link to libtinfo.so.5. Depending on the host\narchitecture, symlink to appropriate libncurses:\n$ sudo ln -s /usr/lib/libncurses.so.5 /usr/lib/libtinfo.so.5\n\n\nAdvanced topics\nThe default building configuration is targeted for major desktop Linux\ndistributions. To build for a specific distribution or device, the following\ninformation may help you.\n\n\nUsing system clang instead of downloaded clang binaries\nBy default Electron is built with prebuilt\nclang binaries provided by the\nChromium project. If for some reason you want to build with the clang\ninstalled in your system, you can specify the clang_base_path argument in the\nGN args.\nFor example if you installed clang under /usr/local/bin/clang:\n$ gn gen out/Debug --args='import(\"//electron/build/args/debug.gn\") clang_base_path = \"/usr/local/bin\"'\n\n\nUsing compilers other than clang\nBuilding Electron with compilers other than clang is not supported.\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -162,19 +194,19 @@ ] }, { - "objectID": "tutorial-build-instructions-osx", + "objectID": "tutorial-build-instructions-macos", "title": "Build Instructions (macOS)", - "githubUrl": "https://github.com/electron/electron/tree/master/docs/development/build-instructions-osx.md", - "url": "https://electronjs.org/docs/tutorial/build-instructions-osx", - "slug": "build-instructions-osx", - "body": "Build Instructions (macOS)\nFollow the guidelines below for building Electron on macOS.\n\n\nPrerequisites\n\nmacOS >= 10.11.6\nXcode >= 8.2.1\nnode.js (external)\n\nIf you are using the Python downloaded by Homebrew, you also need to install\nthe following Python modules:\n\npyobjc\n\n\n\nmacOS SDK\nIf you're developing Electron and don't plan to redistribute your\ncustom Electron build, you may skip this section.\nFor certain features (e.g. pinch-zoom) to work properly, you must target the\nmacOS 10.10 SDK.\nOfficial Electron builds are built with Xcode 8.2.1, which does not contain\nthe 10.10 SDK by default. To obtain it, first download and mount the\nXcode 6.4\nDMG.\nThen, assuming that the Xcode 6.4 DMG has been mounted at /Volumes/Xcode and\nthat your Xcode 8.2.1 install is at /Applications/Xcode.app, run:\ncp -r /Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/\nYou will also need to enable Xcode to build against the 10.10 SDK:\n\nOpen /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Info.plist\nSet the MinimumSDKVersion to 10.10\nSave the file\n\n\n\nGetting the Code\n$ git clone https://github.com/electron/electron\n\n\nBootstrapping\nThe bootstrap script will download all necessary build dependencies and create\nthe build project files. Notice that we're using ninja\nto build Electron so there is no Xcode project generated.\n$ cd electron\n$ ./script/bootstrap.py -v\nIf you are using editor supports JSON compilation database based\nlanguage server, you can generate it:\n$ ./script/build.py --compdb\n\n\nBuilding\nBuild both Release and Debug targets:\n$ ./script/build.py\nYou can also only build the Debug target:\n$ ./script/build.py -c D\nAfter building is done, you can find Electron.app under out/D.\n\n\n32bit Support\nElectron can only be built for a 64bit target on macOS and there is no plan to\nsupport 32bit macOS in the future.\n\n\nCleaning\nTo clean the build files:\n$ npm run clean\nTo clean only out and dist directories:\n$ npm run clean-build\nNote: Both clean commands require running bootstrap again before building.\n\n\nTests\nSee Build System Overview: Tests\n", + "githubUrl": "https://github.com/electron/electron/tree/master/docs/development/build-instructions-macos.md", + "url": "https://electronjs.org/docs/tutorial/build-instructions-macos", + "slug": "build-instructions-macos", + "body": "Build Instructions (macOS)\nFollow the guidelines below for building Electron on macOS.\n\n\nPrerequisites\n\nmacOS >= 10.11.6\nXcode >= 8.2.1\nnode.js (external)\nPython 2.7 with support for TLS 1.2\n\n\n\nPython\nPlease also ensure that your system and Python version support at least TLS 1.2.\nThis depends on both your version of macOS and Python. For a quick test, run:\n$ npm run check-tls\nIf the script returns that your configuration is using an outdated security\nprotocol, you can either update macOS to High Sierra or install a new version\nof Python 2.7.x. To upgrade Python, use Homebrew:\n$ brew install python@2 && brew link python@2 --force\nIf you are using Python as provided by Homebrew, you also need to install\nthe following Python modules:\n\npyobjc\n\n\n\nmacOS SDK\nIf you're developing Electron and don't plan to redistribute your\ncustom Electron build, you may skip this section.\nOfficial Electron builds are built with Xcode 8.3.3, and the MacOS 10.12 SDK. Building with a newer SDK works too, but the releases currently use the 10.12 SDK.\n\n\nBuilding Electron\nSee Build Instructions: GN.\n", "keyValuePairs": [ "is:doc", "is:tutorial", "doc:Build Instructions (macOS)", - "doc:build-instructions-osx", + "doc:build-instructions-macos", "tutorial:Build Instructions (macOS)", - "tutorial:build-instructions-osx" + "tutorial:build-instructions-macos" ] }, { @@ -183,7 +215,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/development/build-instructions-windows.md", "url": "https://electronjs.org/docs/tutorial/build-instructions-windows", "slug": "build-instructions-windows", - "body": "Build Instructions (Windows)\nFollow the guidelines below for building Electron on Windows.\n\n\nPrerequisites\n\nWindows 7 / Server 2008 R2 or higher\nVisual Studio 2017 - download VS 2017 Community Edition for\nfree\nPython 2.7\nNode.js\nGit\nDebugging Tools for Windows\nif you plan on creating a full distribution since symstore.exe is used for\ncreating a symbol store from .pdb files.\n\nIf you don't currently have a Windows installation,\ndev.microsoftedge.com\nhas timebombed versions of Windows that you can use to build Electron.\nBuilding Electron is done entirely with command-line scripts and cannot be done\nwith Visual Studio. You can develop Electron with any editor but support for\nbuilding with Visual Studio will come in the future.\nNote: Even though Visual Studio is not used for building, it's still\nrequired because we need the build toolchains it provides.\n\n\nGetting the Code\n$ git clone https://github.com/electron/electron.git\n\n\nBootstrapping\nThe bootstrap script will download all necessary build dependencies and create\nthe build project files. Notice that we're using ninja to build Electron so\nthere is no Visual Studio project generated.\n$ cd electron\n$ python script\\bootstrap.py -v\n\n\nBuilding\nBuild both Release and Debug targets:\n$ python script\\build.py\nYou can also only build the Debug target:\n$ python script\\build.py -c D\nAfter building is done, you can find electron.exe under out\\D (debug\ntarget) or under out\\R (release target).\n\n\n32bit Build\nTo build for the 32bit target, you need to pass --target_arch=ia32 when\nrunning the bootstrap script:\n$ python script\\bootstrap.py -v --target_arch=ia32\nThe other building steps are exactly the same.\n\n\nVisual Studio project\nTo generate a Visual Studio project, you can pass the --msvs parameter:\n$ python script\\bootstrap.py --msvs\n\n\nCleaning\nTo clean the build files:\n$ npm run clean\nTo clean only out and dist directories:\n$ npm run clean-build\nNote: Both clean commands require running bootstrap again before building.\n\n\nTests\nSee Build System Overview: Tests\n\n\nTroubleshooting\n\n\nCommand xxxx not found\nIf you encountered an error like Command xxxx not found, you may try to use\nthe VS2015 Command Prompt console to execute the build scripts.\n\n\nFatal internal compiler error: C1001\nMake sure you have the latest Visual Studio update installed.\n\n\nAssertion failed: ((handle))->activecnt >= 0\nIf building under Cygwin, you may see bootstrap.py failed with following\nerror:\nAssertion failed: ((handle))->activecnt >= 0, file src\\win\\pipe.c, line 1430\n\nTraceback (most recent call last):\n File \"script/bootstrap.py\", line 87, in \n sys.exit(main())\n File \"script/bootstrap.py\", line 22, in main\n update_node_modules('.')\n File \"script/bootstrap.py\", line 56, in update_node_modules\n execute([NPM, 'install'])\n File \"/home/zcbenz/codes/raven/script/lib/util.py\", line 118, in execute\n raise e\nsubprocess.CalledProcessError: Command '['npm.cmd', 'install']' returned non-zero exit status 3\nThis is caused by a bug when using Cygwin Python and Win32 Node together. The\nsolution is to use the Win32 Python to execute the bootstrap script (assuming\nyou have installed Python under C:\\Python27):\n$ /cygdrive/c/Python27/python.exe script/bootstrap.py\n\n\nLNK1181: cannot open input file 'kernel32.lib'\nTry reinstalling 32bit Node.js.\n\n\nError: ENOENT, stat 'C:\\Users\\USERNAME\\AppData\\Roaming\\npm'\nCreating that directory should fix the problem:\n$ mkdir ~\\AppData\\Roaming\\npm\n\n\nnode-gyp is not recognized as an internal or external command\nYou may get this error if you are using Git Bash for building, you should use\nPowerShell or VS2015 Command Prompt instead.\n", + "body": "Build Instructions (Windows)\nFollow the guidelines below for building Electron on Windows.\n\n\nPrerequisites\n\nWindows 10 / Server 2012 R2 or higher\nVisual Studio 2017 15.7.2 or higher - download VS 2017 Community Edition for\nfree\n\nPython 2.7.10 or higher\n\nContrary to the depot_tools setup instructions linked below, you will need\nto use your locally installed Python with at least version 2.7.10 (with\nsupport for TLS 1.2). To do so, make sure that in PATH, your locally\ninstalled Python comes before the depot_tools folder. Right now\ndepot_tools still comes with Python 2.7.6, which will cause the gclient\ncommand to fail (see https://crbug.com/868864).\nPython for Windows (pywin32) Extensions\nis also needed in order to run the build process.\n\n\nNode.js\nGit\n\nDebugging Tools for Windows of Windows SDK 10.0.15063.468 if you plan on\ncreating a full distribution since symstore.exe is used for creating a symbol\nstore from .pdb files.\n\nDifferent versions of the SDK can be installed side by side. To install the\nSDK, open Visual Studio Installer, select\nChange → Individual Components, scroll down and select the appropriate\nWindows SDK to install. Another option would be to look at the\nWindows SDK and emulator archive\nand download the standalone version of the SDK respectively.\nThe SDK Debugging Tools must also be installed. If the Windows 10 SDK was installed\nvia the Visual Studio installer, then they can be installed by going to:\nControl Panel → Programs → Programs and Features → Select the \"Windows Software Development Kit\" →\nChange → Change → Check \"Debugging Tools For Windows\" → Change.\nOr, you can download the standalone SDK installer and use it to install the Debugging Tools.\n\n\n\nIf you don't currently have a Windows installation,\ndev.microsoftedge.com\nhas timebombed versions of Windows that you can use to build Electron.\nBuilding Electron is done entirely with command-line scripts and cannot be done\nwith Visual Studio. You can develop Electron with any editor but support for\nbuilding with Visual Studio will come in the future.\nNote: Even though Visual Studio is not used for building, it's still\nrequired because we need the build toolchains it provides.\n\n\nBuilding\nSee Build Instructions: GN\n\n\n32bit Build\nTo build for the 32bit target, you need to pass target_cpu = \"x86\" as a GN\narg. You can build the 32bit target alongside the 64bit target by using a\ndifferent output directory for GN, e.g. out/Release-x86, with different\narguments.\n$ gn gen out/Release-x86 --args=\"import(\\\"//electron/build/args/release.gn\\\") target_cpu=\\\"x86\\\"\"\nThe other building steps are exactly the same.\n\n\nVisual Studio project\nTo generate a Visual Studio project, you can pass the --ide=vs2017 parameter\nto gn gen:\n$ gn gen out/Debug --ide=vs2017\n\n\nTroubleshooting\n\n\nCommand xxxx not found\nIf you encountered an error like Command xxxx not found, you may try to use\nthe VS2015 Command Prompt console to execute the build scripts.\n\n\nFatal internal compiler error: C1001\nMake sure you have the latest Visual Studio update installed.\n\n\nLNK1181: cannot open input file 'kernel32.lib'\nTry reinstalling 32bit Node.js.\n\n\nError: ENOENT, stat 'C:\\Users\\USERNAME\\AppData\\Roaming\\npm'\nCreating that directory should fix the problem:\n$ mkdir ~\\AppData\\Roaming\\npm\n\n\nnode-gyp is not recognized as an internal or external command\nYou may get this error if you are using Git Bash for building, you should use\nPowerShell or VS2015 Command Prompt instead.\n\n\ncannot create directory at '...': Filename too long\nnode.js has some extremely long pathnames, and by default git on windows doesn't handle long pathnames correctly (even though windows supports them). This should fix it:\n$ git config --system core.longpaths true\n\n\nerror: use of undeclared identifier 'DefaultDelegateCheckMode'\nThis can happen during build, when Debugging Tools for Windows has been installed with Windows Driver Kit. Uninstall Windows Driver Kit and install Debugging Tools with steps described above.\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -199,7 +231,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/development/build-system-overview.md", "url": "https://electronjs.org/docs/tutorial/build-system-overview", "slug": "build-system-overview", - "body": "Build System Overview\nElectron uses gyp for project generation and\nninja for building. Project configurations can\nbe found in the .gyp and .gypi files.\n\n\nGyp Files\nFollowing gyp files contain the main rules for building Electron:\n\nelectron.gyp defines how Electron itself is built.\ncommon.gypi adjusts the build configurations of Node to make it build\ntogether with Chromium.\nbrightray/brightray.gyp defines how brightray is built and\nincludes the default configurations for linking with Chromium.\nbrightray/brightray.gypi includes general build configurations about\nbuilding.\n\n\n\nComponent Build\nSince Chromium is quite a large project, the final linking stage can take\nquite a few minutes, which makes it hard for development. In order to solve\nthis, Chromium introduced the \"component build\", which builds each component as\na separate shared library, making linking very quick but sacrificing file size\nand performance.\nIn Electron we took a very similar approach: for Debug builds, the binary\nwill be linked to a shared library version of Chromium's components to achieve\nfast linking time; for Release builds, the binary will be linked to the static\nlibrary versions, so we can have the best possible binary size and performance.\n\n\nMinimal Bootstrapping\nAll of Chromium's prebuilt binaries (libchromiumcontent) are downloaded when\nrunning the bootstrap script. By default both static libraries and shared\nlibraries will be downloaded and the final size should be between 800MB and 2GB\ndepending on the platform.\nBy default, libchromiumcontent is downloaded from Amazon Web Services.\nIf the LIBCHROMIUMCONTENT_MIRROR environment variable is set, the bootstrap\nscript will download from it.\nlibchromiumcontent-qiniu-mirror\nis a mirror for libchromiumcontent. If you have trouble in accessing AWS, you\ncan switch the download address to it via\nexport LIBCHROMIUMCONTENT_MIRROR=http://7xk3d2.dl1.z0.glb.clouddn.com/\nIf you only want to build Electron quickly for testing or development, you\ncan download the shared library versions by passing the --dev parameter:\n$ ./script/bootstrap.py --dev\n$ ./script/build.py -c D\n\n\nTwo-Phase Project Generation\nElectron links with different sets of libraries in Release and Debug\nbuilds. gyp, however, doesn't support configuring different link settings for\ndifferent configurations.\nTo work around this Electron uses a gyp variable\nlibchromiumcontent_component to control which link settings to use and only\ngenerates one target when running gyp.\n\n\nTarget Names\nUnlike most projects that use Release and Debug as target names, Electron\nuses R and D instead. This is because gyp randomly crashes if there is\nonly one Release or Debug build configuration defined, and Electron only has\nto generate one target at a time as stated above.\nThis only affects developers, if you are building Electron for rebranding\nyou are not affected.\n\n\nTests\nTest your changes conform to the project coding style using:\n$ npm run lint\nTest functionality using:\n$ npm test\nWhenever you make changes to Electron source code, you'll need to re-run the\nbuild before the tests:\n$ npm run build && npm test\nYou can make the test suite run faster by isolating the specific test or block\nyou're currently working on using Mocha's\nexclusive tests feature. Append\n.only to any describe or it function call:\ndescribe.only('some feature', function () {\n // ... only tests in this block will be run\n})\nAlternatively, you can use mocha's grep option to only run tests matching the\ngiven regular expression pattern:\n$ npm test -- --grep child_process\nTests that include native modules (e.g. runas) can't be executed with the\ndebug build (see #2558 for\ndetails), but they will work with the release build.\nTo run the tests with the release build use:\n$ npm test -- -R\n", + "body": "Build System Overview\nElectron uses GN for project generation and\nninja for building. Project configurations can\nbe found in the .gn and .gni files.\n\n\nGN Files\nThe following gn files contain the main rules for building Electron:\n\nBUILD.gn defines how Electron itself is built and\nincludes the default configurations for linking with Chromium.\nbuild/args/{debug,release,all}.gn contain the default build arguments for\nbuilding Electron.\n\n\n\nComponent Build\nSince Chromium is quite a large project, the final linking stage can take\nquite a few minutes, which makes it hard for development. In order to solve\nthis, Chromium introduced the \"component build\", which builds each component as\na separate shared library, making linking very quick but sacrificing file size\nand performance.\nElectron inherits this build option from Chromium. In Debug builds, the\nbinary will be linked to a shared library version of Chromium's components to\nachieve fast linking time; for Release builds, the binary will be linked to\nthe static library versions, so we can have the best possible binary size and\nperformance.\n\n\nTests\nNB this section is out of date and contains information that is no longer\nrelevant to the GN-built electron.\nTest your changes conform to the project coding style using:\n$ npm run lint\nTest functionality using:\n$ npm test\nWhenever you make changes to Electron source code, you'll need to re-run the\nbuild before the tests:\n$ npm run build && npm test\nYou can make the test suite run faster by isolating the specific test or block\nyou're currently working on using Mocha's\nexclusive tests feature. Append\n.only to any describe or it function call:\ndescribe.only('some feature', function () {\n // ... only tests in this block will be run\n})\nAlternatively, you can use mocha's grep option to only run tests matching the\ngiven regular expression pattern:\n$ npm test -- --grep child_process\nTests that include native modules (e.g. runas) can't be executed with the\ndebug build (see #2558 for\ndetails), but they will work with the release build.\nTo run the tests with the release build use:\n$ npm test -- -R\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -215,7 +247,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/development/chromium-development.md", "url": "https://electronjs.org/docs/tutorial/chromium-development", "slug": "chromium-development", - "body": "Chromium Development\n\nA collection of resources for learning about Chromium and tracking its development\n\n\nchromiumdev on Slack\n@ChromiumDev on Twitter\n@googlechrome on Twitter\nBlog\nCode Search\nSource Code\nDevelopment Calendar and Release Info\nDiscussion Groups\n\nSee also V8 Development\n\n\nChromium development with Electron\nIt is possible to debug Chromium with Electron by passing\n--build_debug_libcc to the bootstrap script:\n$ ./script/bootstrap.py -d --build_debug_libcc\nThis will download and build libchromiumcontent locally, similarly to the\n--build_release_libcc, but it will create a shared library build of\nlibchromiumcontent and won't strip any symbols, making it ideal for debugging.\nWhen built like this, you can make changes to files in\nvendor/libchromiumcontent/src and rebuild quickly with:\n$ ./script/build.py -c D --libcc\nWhen developing on linux with gdb, it is recommended to add a gdb index to speed\nup loading symbols. This doesn't need to be executed on every build, but it is\nrecommended to do it at least once to index most shared libraries:\n$ ./vendor/libchromiumcontent/src/build/gdb-add-index ./out/D/electron\nBuilding libchromiumcontent requires a powerful machine and takes a long time\n(though incremental rebuilding the shared library component is fast). With an\n8-core/16-thread Ryzen 1700 CPU clocked at 3ghz, fast SSD and 32GB of RAM, it\nshould take about 40 minutes. It is not recommended to build with less than 16GB\nof RAM.\n\n\nChromium git cache\ndepot_tools has an undocumented option that allows the developer to set a\nglobal cache for all git objects of Chromium + dependencies. This option uses\ngit clone --shared to save bandwidth/space on multiple clones of the same\nrepositories.\nOn electron/libchromiumcontent, this option is exposed through the\nLIBCHROMIUMCONTENT_GIT_CACHE environment variable. If you intend to have\nseveral libchromiumcontent build trees on the same machine(to work on different\nbranches for example), it is recommended to set the variable to speed up the\ndownload of Chromium source. For example:\n$ mkdir ~/.chromium-git-cache\n$ LIBCHROMIUMCONTENT_GIT_CACHE=~/.chromium-git-cache ./script/bootstrap.py -d --build_debug_libcc\nIf the bootstrap script is interrupted while using the git cache, it will leave\nthe cache locked. To remove the lock, delete the files ending in .lock:\n$ find ~/.chromium-git-cache/ -type f -name '*.lock' -delete\nIt is possible to share this directory with other machines by exporting it as\nSMB share on linux, but only one process/machine can be using the cache at a\ntime. The locks created by git-cache script will try to prevent this, but it may\nnot work perfectly in a network.\nOn Windows, SMBv2 has a directory cache that will cause problems with the git\ncache script, so it is necessary to disable it by setting the registry key\nHKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\Lanmanworkstation\\Parameters\\DirectoryCacheLifetime\nto 0. More information: https://stackoverflow.com/a/9935126\n", + "body": "Chromium Development\n\nA collection of resources for learning about Chromium and tracking its development\n\n\nchromiumdev on Slack\n@ChromiumDev on Twitter\n@googlechrome on Twitter\nBlog\nCode Search\nSource Code\nDevelopment Calendar and Release Info\nDiscussion Groups\n\nSee also V8 Development\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -247,7 +279,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/code-signing.md", "url": "https://electronjs.org/docs/tutorial/code-signing", "slug": "code-signing", - "body": "Code Signing\nCode signing is a security technology that you use to certify that an app was\ncreated by you.\nOn macOS the system can detect any change to the app, whether the change is\nintroduced accidentally or by malicious code.\nOn Windows the system assigns a trust level to your code signing certificate which\nif you don't have, or if your trust level is low will cause security dialogs to\nappear when users start using your application. Trust level builds over time\nso it's better to start code signing as early as possible.\nWhile it is possible to distribute unsigned apps, it is not recommended.\nFor example, here's what macOS users see when attempting to start an unsigned app:\n\n\nApp can't be opened because it is from an unidentified developer\n\nIf you are building an Electron app that you intend to package and distribute,\nit should be code signed. The Mac and Windows app stores do not allow unsigned\napps.\n\n\nSigning macOS builds\nBefore signing macOS builds, you must do the following:\n\nEnroll in the Apple Developer Program(Apple Developer Program) (requires an annual fee)\nDownload and install Xcode\nGenerate, download, and install signing certificates\n\nThere are a number of tools for signing your packaged app:\n\nelectron-osx-sign is a standalone tool for signing macOS packages.\n\nelectron-packager bundles electron-osx-sign. If you're using electron-packager,\npass the --osx-sign=true flag to sign your build.\n\nelectron-forge uses electron-packager internally, you can set the osxSign option\nin your forge config.\n\n\nelectron-builder has built-in code-signing capabilities. See electron.build/code-signing\n\nFor more info, see the Mac App Store Submission Guide.\n\n\nSigning Windows builds\nBefore signing Windows builds, you must do the following:\n\nGet a Windows Authenticode code signing certificate\nInstall Visual Studio 2015/2017 (to get the signing utility)\n\nYou can get a code signing certificate from a lot of resellers, popular ones include:\n\ndigicert\nComodo\nGoDaddy\nAmongst others, please shop around to find one that suits your needs, Google is your friend :)\n\nThere are a number of tools for signing your packaged app:\n\nelectron-winstaller will generate an installer for windows and sign it for you\nelectron-forge can sign installers it generates through the Squirrel.Windows or MSI targets.\nelectron-builder can sign some of its windows targets\n\n\n\nWindows Store\nSee the Windows Store Guide.\n", + "body": "Code Signing\nCode signing is a security technology that you use to certify that an app was\ncreated by you.\nOn macOS the system can detect any change to the app, whether the change is\nintroduced accidentally or by malicious code.\nOn Windows the system assigns a trust level to your code signing certificate which\nif you don't have, or if your trust level is low will cause security dialogs to\nappear when users start using your application. Trust level builds over time\nso it's better to start code signing as early as possible.\nWhile it is possible to distribute unsigned apps, it is not recommended.\nFor example, here's what macOS users see when attempting to start an unsigned app:\n\n\nApp can't be opened because it is from an unidentified developer\n\nIf you are building an Electron app that you intend to package and distribute,\nit should be code signed. The Mac and Windows app stores do not allow unsigned\napps.\n\n\nSigning macOS builds\nBefore signing macOS builds, you must do the following:\n\nEnroll in the Apple Developer Program (requires an annual fee)\nDownload and install Xcode\nGenerate, download, and install signing certificates\n\nThere are a number of tools for signing your packaged app:\n\nelectron-osx-sign is a standalone tool for signing macOS packages.\n\nelectron-packager bundles electron-osx-sign. If you're using electron-packager,\npass the --osx-sign=true flag to sign your build.\n\nelectron-forge uses electron-packager internally, you can set the osxSign option\nin your forge config.\n\n\nelectron-builder has built-in code-signing capabilities. See electron.build/code-signing\n\nFor more info, see the Mac App Store Submission Guide.\n\n\nSigning Windows builds\nBefore signing Windows builds, you must do the following:\n\nGet a Windows Authenticode code signing certificate\nInstall Visual Studio 2015/2017 (to get the signing utility)\n\nYou can get a code signing certificate from a lot of resellers, popular ones include:\n\ndigicert\nComodo\nGoDaddy\nAmongst others, please shop around to find one that suits your needs, Google is your friend :)\n\nThere are a number of tools for signing your packaged app:\n\nelectron-winstaller will generate an installer for windows and sign it for you\nelectron-forge can sign installers it generates through the Squirrel.Windows or MSI targets.\nelectron-builder can sign some of its windows targets\n\n\n\nWindows Store\nSee the Windows Store Guide.\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -263,7 +295,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/development/coding-style.md", "url": "https://electronjs.org/docs/tutorial/coding-style", "slug": "coding-style", - "body": "Coding Style\nThese are the style guidelines for coding in Electron.\nYou can run npm run lint to show any style issues detected by cpplint and\neslint.\n\n\nGeneral Code\n\nEnd files with a newline.\n\nPlace requires in the following order:\n\nBuilt in Node Modules (such as path)\nBuilt in Electron Modules (such as ipc, app)\nLocal Modules (using relative paths)\n\n\n\nPlace class properties in the following order:\n\nClass methods and properties (methods starting with a @)\nInstance methods and properties\n\n\n\nAvoid platform-dependent code:\n\nUse path.join() to concatenate filenames.\nUse os.tmpdir() rather than /tmp when you need to reference the\ntemporary directory.\n\n\n\nUsing a plain return when returning explicitly at the end of a function.\n\nNot return null, return undefined, null or undefined\n\n\n\n\n\nC++ and Python\nFor C++ and Python, we follow Chromium's Coding\nStyle. You can use\nclang-format to format the C++ code automatically. There is\nalso a script script/cpplint.py to check whether all files conform.\nThe Python version we are using now is Python 2.7.\nThe C++ code uses a lot of Chromium's abstractions and types, so it's\nrecommended to get acquainted with them. A good place to start is\nChromium's Important Abstractions and Data Structures\ndocument. The document mentions some special types, scoped types (that\nautomatically release their memory when going out of scope), logging mechanisms\netc.\n\n\nDocumentation\n\nWrite remark markdown style\n\nYou can run npm run lint-docs to ensure that your documentation changes are\nformatted correctly.\n\n\nJavaScript\n\nWrite standard JavaScript style.\nFile names should be concatenated with - instead of _, e.g.\nfile-name.js rather than file_name.js, because in\ngithub/atom module names are usually in\nthe module-name form. This rule only applies to .js files.\n\nUse newer ES6/ES2015 syntax where appropriate\n\nconst\nfor requires and other constants\nlet\nfor defining variables\nArrow functions\ninstead of function () { }\nTemplate literals\ninstead of string concatenation using +\n\n\n\n\n\nNaming Things\nElectron APIs uses the same capitalization scheme as Node.js:\n\nWhen the module itself is a class like BrowserWindow, use PascalCase.\nWhen the module is a set of APIs, like globalShortcut, use camelCase.\nWhen the API is a property of object, and it is complex enough to be in a\nseparate chapter like win.webContents, use mixedCase.\nFor other non-module APIs, use natural titles, like Tag or\nProcess Object.\n\nWhen creating a new API, it is preferred to use getters and setters instead of\njQuery's one-function style. For example, .getText() and .setText(text)\nare preferred to .text([text]). There is a\ndiscussion on this.\n", + "body": "Coding Style\nThese are the style guidelines for coding in Electron.\nYou can run npm run lint to show any style issues detected by cpplint and\neslint.\n\n\nGeneral Code\n\nEnd files with a newline.\n\nPlace requires in the following order:\n\nBuilt in Node Modules (such as path)\nBuilt in Electron Modules (such as ipc, app)\nLocal Modules (using relative paths)\n\n\n\nPlace class properties in the following order:\n\nClass methods and properties (methods starting with a @)\nInstance methods and properties\n\n\n\nAvoid platform-dependent code:\n\nUse path.join() to concatenate filenames.\nUse os.tmpdir() rather than /tmp when you need to reference the\ntemporary directory.\n\n\n\nUsing a plain return when returning explicitly at the end of a function.\n\nNot return null, return undefined, null or undefined\n\n\n\n\n\nC++ and Python\nFor C++ and Python, we follow Chromium's Coding\nStyle. You can use\nclang-format to format the C++ code automatically. There is\nalso a script script/cpplint.py to check whether all files conform.\nThe Python version we are using now is Python 2.7.\nThe C++ code uses a lot of Chromium's abstractions and types, so it's\nrecommended to get acquainted with them. A good place to start is\nChromium's Important Abstractions and Data Structures\ndocument. The document mentions some special types, scoped types (that\nautomatically release their memory when going out of scope), logging mechanisms\netc.\n\n\nDocumentation\n\nWrite remark markdown style.\n\nYou can run npm run lint-docs to ensure that your documentation changes are\nformatted correctly.\n\n\nJavaScript\n\nWrite standard JavaScript style.\nFile names should be concatenated with - instead of _, e.g.\nfile-name.js rather than file_name.js, because in\ngithub/atom module names are usually in\nthe module-name form. This rule only applies to .js files.\n\nUse newer ES6/ES2015 syntax where appropriate\n\nconst\nfor requires and other constants\nlet\nfor defining variables\nArrow functions\ninstead of function () { }\nTemplate literals\ninstead of string concatenation using +\n\n\n\n\n\nNaming Things\nElectron APIs uses the same capitalization scheme as Node.js:\n\nWhen the module itself is a class like BrowserWindow, use PascalCase.\nWhen the module is a set of APIs, like globalShortcut, use camelCase.\nWhen the API is a property of object, and it is complex enough to be in a\nseparate chapter like win.webContents, use mixedCase.\nFor other non-module APIs, use natural titles, like Tag or\nProcess Object.\n\nWhen creating a new API, it is preferred to use getters and setters instead of\njQuery's one-function style. For example, .getText() and .setText(text)\nare preferred to .text([text]). There is a\ndiscussion on this.\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -279,7 +311,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/development/debug-instructions-windows.md", "url": "https://electronjs.org/docs/tutorial/debug-instructions-windows", "slug": "debug-instructions-windows", - "body": "Debugging on Windows\nIf you experience crashes or issues in Electron that you believe are not caused\nby your JavaScript application, but instead by Electron itself, debugging can\nbe a little bit tricky, especially for developers not used to native/C++\ndebugging. However, using Visual Studio, GitHub's hosted Electron Symbol Server,\nand the Electron source code, you can enable step-through debugging\nwith breakpoints inside Electron's source code.\n\n\nRequirements\n\n\nA debug build of Electron: The easiest way is usually building it\nyourself, using the tools and prerequisites listed in the\nbuild instructions for Windows. While you can\nattach to and debug Electron as you can download it directly, you will\nfind that it is heavily optimized, making debugging substantially more\ndifficult: The debugger will not be able to show you the content of all\nvariables and the execution path can seem strange because of inlining,\ntail calls, and other compiler optimizations.\n\n\nVisual Studio with C++ Tools: The free community editions of Visual\nStudio 2013 and Visual Studio 2015 both work. Once installed,\nconfigure Visual Studio to use GitHub's Electron Symbol server.\nIt will enable Visual Studio to gain a better understanding of what happens\ninside Electron, making it easier to present variables in a human-readable\nformat.\n\n\nProcMon: The free SysInternals tool allows you to inspect\na processes parameters, file handles, and registry operations.\n\n\n\n\nAttaching to and Debugging Electron\nTo start a debugging session, open up PowerShell/CMD and execute your debug\nbuild of Electron, using the application to open as a parameter.\n$ ./out/D/electron.exe ~/my-electron-app/\n\n\nSetting Breakpoints\nThen, open up Visual Studio. Electron is not built with Visual Studio and hence\ndoes not contain a project file - you can however open up the source code files\n\"As File\", meaning that Visual Studio will open them up by themselves. You can\nstill set breakpoints - Visual Studio will automatically figure out that the\nsource code matches the code running in the attached process and break\naccordingly.\nRelevant code files can be found in ./atom/ as well as in Brightray, found in\n./brightray/browser and ./brightray/common.\n\n\nAttaching\nYou can attach the Visual Studio debugger to a running process on a local or\nremote computer. After the process is running, click Debug / Attach to Process\n(or press CTRL+ALT+P) to open the \"Attach to Process\" dialog box. You can use\nthis capability to debug apps that are running on a local or remote computer,\ndebug multiple processes simultaneously.\nIf Electron is running under a different user account, select the\nShow processes from all users check box. Notice that depending on how many\nBrowserWindows your app opened, you will see multiple processes. A typical\none-window app will result in Visual Studio presenting you with two\nElectron.exe entries - one for the main process and one for the renderer\nprocess. Since the list only gives you names, there's currently no reliable\nway of figuring out which is which.\n\n\nWhich Process Should I Attach to?\nCode executed within the main process (that is, code found in or eventually run\nby your main JavaScript file) as well as code called using the remote\n(require('electron').remote) will run inside the main process, while other\ncode will execute inside its respective renderer process.\nYou can be attached to multiple programs when you are debugging, but only one\nprogram is active in the debugger at any time. You can set the active program\nin the Debug Location toolbar or the Processes window.\n\n\nUsing ProcMon to Observe a Process\nWhile Visual Studio is fantastic for inspecting specific code paths, ProcMon's\nstrength is really in observing everything your application is doing with the\noperating system - it captures File, Registry, Network, Process, and Profiling\ndetails of processes. It attempts to log all events occurring and can be\nquite overwhelming, but if you seek to understand what and how your application\nis doing to the operating system, it can be a valuable resource.\nFor an introduction to ProcMon's basic and advanced debugging features, go check\nout this video tutorial provided by Microsoft.\n", + "body": "Debugging on Windows\nIf you experience crashes or issues in Electron that you believe are not caused\nby your JavaScript application, but instead by Electron itself, debugging can\nbe a little bit tricky, especially for developers not used to native/C++\ndebugging. However, using Visual Studio, GitHub's hosted Electron Symbol Server,\nand the Electron source code, you can enable step-through debugging\nwith breakpoints inside Electron's source code.\nSee also: There's a wealth of information on debugging Chromium, much of which also applies to Electron, on the Chromium developers site: Debugging Chromium on Windows.\n\n\nRequirements\n\n\nA debug build of Electron: The easiest way is usually building it\nyourself, using the tools and prerequisites listed in the\nbuild instructions for Windows. While you can\nattach to and debug Electron as you can download it directly, you will\nfind that it is heavily optimized, making debugging substantially more\ndifficult: The debugger will not be able to show you the content of all\nvariables and the execution path can seem strange because of inlining,\ntail calls, and other compiler optimizations.\n\n\nVisual Studio with C++ Tools: The free community editions of Visual\nStudio 2013 and Visual Studio 2015 both work. Once installed,\nconfigure Visual Studio to use GitHub's Electron Symbol server.\nIt will enable Visual Studio to gain a better understanding of what happens\ninside Electron, making it easier to present variables in a human-readable\nformat.\n\n\nProcMon: The free SysInternals tool allows you to inspect\na processes parameters, file handles, and registry operations.\n\n\n\n\nAttaching to and Debugging Electron\nTo start a debugging session, open up PowerShell/CMD and execute your debug\nbuild of Electron, using the application to open as a parameter.\n$ ./out/Debug/electron.exe ~/my-electron-app/\n\n\nSetting Breakpoints\nThen, open up Visual Studio. Electron is not built with Visual Studio and hence\ndoes not contain a project file - you can however open up the source code files\n\"As File\", meaning that Visual Studio will open them up by themselves. You can\nstill set breakpoints - Visual Studio will automatically figure out that the\nsource code matches the code running in the attached process and break\naccordingly.\nRelevant code files can be found in ./atom/.\n\n\nAttaching\nYou can attach the Visual Studio debugger to a running process on a local or\nremote computer. After the process is running, click Debug / Attach to Process\n(or press CTRL+ALT+P) to open the \"Attach to Process\" dialog box. You can use\nthis capability to debug apps that are running on a local or remote computer,\ndebug multiple processes simultaneously.\nIf Electron is running under a different user account, select the\nShow processes from all users check box. Notice that depending on how many\nBrowserWindows your app opened, you will see multiple processes. A typical\none-window app will result in Visual Studio presenting you with two\nElectron.exe entries - one for the main process and one for the renderer\nprocess. Since the list only gives you names, there's currently no reliable\nway of figuring out which is which.\n\n\nWhich Process Should I Attach to?\nCode executed within the main process (that is, code found in or eventually run\nby your main JavaScript file) as well as code called using the remote\n(require('electron').remote) will run inside the main process, while other\ncode will execute inside its respective renderer process.\nYou can be attached to multiple programs when you are debugging, but only one\nprogram is active in the debugger at any time. You can set the active program\nin the Debug Location toolbar or the Processes window.\n\n\nUsing ProcMon to Observe a Process\nWhile Visual Studio is fantastic for inspecting specific code paths, ProcMon's\nstrength is really in observing everything your application is doing with the\noperating system - it captures File, Registry, Network, Process, and Profiling\ndetails of processes. It attempts to log all events occurring and can be\nquite overwhelming, but if you seek to understand what and how your application\nis doing to the operating system, it can be a valuable resource.\nFor an introduction to ProcMon's basic and advanced debugging features, go check\nout this video tutorial provided by Microsoft.\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -295,7 +327,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/development/debugging-instructions-macos.md", "url": "https://electronjs.org/docs/tutorial/debugging-instructions-macos", "slug": "debugging-instructions-macos", - "body": "Debugging on macOS\nIf you experience crashes or issues in Electron that you believe are not caused\nby your JavaScript application, but instead by Electron itself, debugging can\nbe a little bit tricky, especially for developers not used to native/C++\ndebugging. However, using lldb, and the Electron source code, you can enable\nstep-through debugging with breakpoints inside Electron's source code.\nYou can also use XCode for debugging if\nyou prefer a graphical interface.\n\n\nRequirements\n\n\nA debug build of Electron: The easiest way is usually building it\nyourself, using the tools and prerequisites listed in the\nbuild instructions for macOS. While you can\nattach to and debug Electron as you can download it directly, you will\nfind that it is heavily optimized, making debugging substantially more\ndifficult: The debugger will not be able to show you the content of all\nvariables and the execution path can seem strange because of inlining,\ntail calls, and other compiler optimizations.\n\n\nXcode: In addition to Xcode, also install the Xcode command line tools.\nThey include LLDB, the default debugger in Xcode on Mac OS X. It supports\ndebugging C, Objective-C and C++ on the desktop and iOS devices and simulator.\n\n\n\n\nAttaching to and Debugging Electron\nTo start a debugging session, open up Terminal and start lldb, passing a debug\nbuild of Electron as a parameter.\n$ lldb ./out/D/Electron.app\n(lldb) target create \"./out/D/Electron.app\"\nCurrent executable set to './out/D/Electron.app' (x86_64).\n\n\nSetting Breakpoints\nLLDB is a powerful tool and supports multiple strategies for code inspection. For\nthis basic introduction, let's assume that you're calling a command from JavaScript\nthat isn't behaving correctly - so you'd like to break on that command's C++\ncounterpart inside the Electron source.\nRelevant code files can be found in ./atom/ as well as in Brightray, found in\n./brightray/browser and ./brightray/common.\nLet's assume that you want to debug app.setName(), which is defined in browser.cc\nas Browser::SetName(). Set the breakpoint using the breakpoint command, specifying\nfile and line to break on:\n(lldb) breakpoint set --file browser.cc --line 117\nBreakpoint 1: where = Electron Framework`atom::Browser::SetName(std::__1::basic_string, std::__1::allocator > const&) + 20 at browser.cc:118, address = 0x000000000015fdb4\nThen, start Electron:\n(lldb) run\nThe app will immediately be paused, since Electron sets the app's name on launch:\n(lldb) run\nProcess 25244 launched: '/Users/fr/Code/electron/out/D/Electron.app/Contents/MacOS/Electron' (x86_64)\nProcess 25244 stopped\n* thread #1: tid = 0x839a4c, 0x0000000100162db4 Electron Framework`atom::Browser::SetName(this=0x0000000108b14f20, name=\"Electron\") + 20 at browser.cc:118, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1\n frame #0: 0x0000000100162db4 Electron Framework`atom::Browser::SetName(this=0x0000000108b14f20, name=\"Electron\") + 20 at browser.cc:118\n 115 \t}\n 116\n 117 \tvoid Browser::SetName(const std::string& name) {\n-> 118 \t name_override_ = name;\n 119 \t}\n 120\n 121 \tint Browser::GetBadgeCount() {\n(lldb)\nTo show the arguments and local variables for the current frame, run frame variable (or fr v),\nwhich will show you that the app is currently setting the name to \"Electron\".\n(lldb) frame variable\n(atom::Browser *) this = 0x0000000108b14f20\n(const string &) name = \"Electron\": {\n [...]\n}\nTo do a source level single step in the currently selected thread, execute step (or s).\nThis would take you into name_override_.empty(). To proceed and do a step over,\nrun next (or n).\n(lldb) step\nProcess 25244 stopped\n* thread #1: tid = 0x839a4c, 0x0000000100162dcc Electron Framework`atom::Browser::SetName(this=0x0000000108b14f20, name=\"Electron\") + 44 at browser.cc:119, queue = 'com.apple.main-thread', stop reason = step in\n frame #0: 0x0000000100162dcc Electron Framework`atom::Browser::SetName(this=0x0000000108b14f20, name=\"Electron\") + 44 at browser.cc:119\n 116\n 117 \tvoid Browser::SetName(const std::string& name) {\n 118 \t name_override_ = name;\n-> 119 \t}\n 120\n 121 \tint Browser::GetBadgeCount() {\n 122 \t return badge_count_;\nTo finish debugging at this point, run process continue. You can also continue until a certain\nline is hit in this thread (thread until 100). This command will run the thread in the current\nframe till it reaches line 100 in this frame or stops if it leaves the current frame.\nNow, if you open up Electron's developer tools and call setName, you will once again hit the\nbreakpoint.\n\n\nFurther Reading\nLLDB is a powerful tool with a great documentation. To learn more about it, consider\nApple's debugging documentation, for instance the LLDB Command Structure Reference\nor the introduction to Using LLDB as a Standalone Debugger.\nYou can also check out LLDB's fantastic manual and tutorial, which\nwill explain more complex debugging scenarios.\n", + "body": "Debugging on macOS\nIf you experience crashes or issues in Electron that you believe are not caused\nby your JavaScript application, but instead by Electron itself, debugging can\nbe a little bit tricky, especially for developers not used to native/C++\ndebugging. However, using lldb, and the Electron source code, you can enable\nstep-through debugging with breakpoints inside Electron's source code.\nYou can also use XCode for debugging if\nyou prefer a graphical interface.\n\n\nRequirements\n\n\nA debug build of Electron: The easiest way is usually building it\nyourself, using the tools and prerequisites listed in the\nbuild instructions for macOS. While you can\nattach to and debug Electron as you can download it directly, you will\nfind that it is heavily optimized, making debugging substantially more\ndifficult: The debugger will not be able to show you the content of all\nvariables and the execution path can seem strange because of inlining,\ntail calls, and other compiler optimizations.\n\n\nXcode: In addition to Xcode, also install the Xcode command line tools.\nThey include LLDB, the default debugger in Xcode on Mac OS X. It supports\ndebugging C, Objective-C and C++ on the desktop and iOS devices and simulator.\n\n\n\n\nAttaching to and Debugging Electron\nTo start a debugging session, open up Terminal and start lldb, passing a debug\nbuild of Electron as a parameter.\n$ lldb ./out/Debug/Electron.app\n(lldb) target create \"./out/Debug/Electron.app\"\nCurrent executable set to './out/Debug/Electron.app' (x86_64).\n\n\nSetting Breakpoints\nLLDB is a powerful tool and supports multiple strategies for code inspection. For\nthis basic introduction, let's assume that you're calling a command from JavaScript\nthat isn't behaving correctly - so you'd like to break on that command's C++\ncounterpart inside the Electron source.\nRelevant code files can be found in ./atom/.\nLet's assume that you want to debug app.setName(), which is defined in browser.cc\nas Browser::SetName(). Set the breakpoint using the breakpoint command, specifying\nfile and line to break on:\n(lldb) breakpoint set --file browser.cc --line 117\nBreakpoint 1: where = Electron Framework`atom::Browser::SetName(std::__1::basic_string, std::__1::allocator > const&) + 20 at browser.cc:118, address = 0x000000000015fdb4\nThen, start Electron:\n(lldb) run\nThe app will immediately be paused, since Electron sets the app's name on launch:\n(lldb) run\nProcess 25244 launched: '/Users/fr/Code/electron/out/Debug/Electron.app/Contents/MacOS/Electron' (x86_64)\nProcess 25244 stopped\n* thread #1: tid = 0x839a4c, 0x0000000100162db4 Electron Framework`atom::Browser::SetName(this=0x0000000108b14f20, name=\"Electron\") + 20 at browser.cc:118, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1\n frame #0: 0x0000000100162db4 Electron Framework`atom::Browser::SetName(this=0x0000000108b14f20, name=\"Electron\") + 20 at browser.cc:118\n 115 \t}\n 116\n 117 \tvoid Browser::SetName(const std::string& name) {\n-> 118 \t name_override_ = name;\n 119 \t}\n 120\n 121 \tint Browser::GetBadgeCount() {\n(lldb)\nTo show the arguments and local variables for the current frame, run frame variable (or fr v),\nwhich will show you that the app is currently setting the name to \"Electron\".\n(lldb) frame variable\n(atom::Browser *) this = 0x0000000108b14f20\n(const string &) name = \"Electron\": {\n [...]\n}\nTo do a source level single step in the currently selected thread, execute step (or s).\nThis would take you into name_override_.empty(). To proceed and do a step over,\nrun next (or n).\n(lldb) step\nProcess 25244 stopped\n* thread #1: tid = 0x839a4c, 0x0000000100162dcc Electron Framework`atom::Browser::SetName(this=0x0000000108b14f20, name=\"Electron\") + 44 at browser.cc:119, queue = 'com.apple.main-thread', stop reason = step in\n frame #0: 0x0000000100162dcc Electron Framework`atom::Browser::SetName(this=0x0000000108b14f20, name=\"Electron\") + 44 at browser.cc:119\n 116\n 117 \tvoid Browser::SetName(const std::string& name) {\n 118 \t name_override_ = name;\n-> 119 \t}\n 120\n 121 \tint Browser::GetBadgeCount() {\n 122 \t return badge_count_;\nTo finish debugging at this point, run process continue. You can also continue until a certain\nline is hit in this thread (thread until 100). This command will run the thread in the current\nframe till it reaches line 100 in this frame or stops if it leaves the current frame.\nNow, if you open up Electron's developer tools and call setName, you will once again hit the\nbreakpoint.\n\n\nFurther Reading\nLLDB is a powerful tool with a great documentation. To learn more about it, consider\nApple's debugging documentation, for instance the LLDB Command Structure Reference\nor the introduction to Using LLDB as a Standalone Debugger.\nYou can also check out LLDB's fantastic manual and tutorial, which\nwill explain more complex debugging scenarios.\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -311,7 +343,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/development/debugging-instructions-macos-xcode.md", "url": "https://electronjs.org/docs/tutorial/debugging-instructions-macos-xcode", "slug": "debugging-instructions-macos-xcode", - "body": "Debugging with XCode\n\n\nBuild Debug Electron with Release libchromiumcontent\nYou can create a debug build of electron by following build instructions for macOS.\nThe bootstrap process will download Release version of libchromiumcontent by default,\nso you will not be able to step through the chromium source.\n\n\nBuild Debug Electron with Debug libchromiumcontent\nIf you want to debug and step through libchromiumcontent, you will have to run the\nbootsrap script with the --build_debug_libcc argument.\n$ cd electron\n$ ./script/bootstrap.py -v --build_debug_libcc\nThis can take a significant amount of time depending on build machine as it has to\nbuild all of the libchromium source.\nOnce, the lib is built, create a symlink to the built directory under download\nln -s vendor/libchromiumcontent/dist/main/shared_library vendor/download/libchromiumcontent/shared_library\nElectron debug builds will use this shared library to link against.\n$ ./script/build.py -c D --libcc\nThis will build debug electron with debug version of libchromiumcontent.\n\n\nGenerate xcode project for debugging sources (cannot build code from xcode)\nRun the update script with the --xcode argument.\n$ ./script/update.py --xcode\nThis will generate the electron.ninjs.xcworkspace. You will have to open this workspace\nto set breakpoints and inspect.\n\n\nDebugging and breakpoints\nLaunch electron app after build.\nYou can now open the xcode workspace created above and attach to the electron process\nthrough the Debug > Attach To Process > Electron debug menu. [Note: If you want to debug\nthe renderer process, you need to attach to the Electron Helper as well.]\nYou can now set breakpoints in any of the indexed files. However, you will not be able\nto set breakpoints directly in the chromium source.\nTo set break points in the chromium source, you can choose Debug > Breakpoints > Create\nSymbolic Breakpoint and set any function name as the symbol. This will set the breakpoint\nfor all functions with that name, from all the classes if there are more than one.\nYou can also do this step of setting break points prior to attaching the debugger,\nhowever, actual breakpoints for symbolic breakpoint functions may not show up until the\ndebugger is attached to the app.\n", + "body": "Debugging with XCode\n\n\nGenerate xcode project for debugging sources (cannot build code from xcode)\nRun gn gen with the --ide=xcode argument.\n$ gn gen out/Debug --ide=xcode\nThis will generate the electron.ninja.xcworkspace. You will have to open this workspace\nto set breakpoints and inspect.\nSee gn help gen for more information on generating IDE projects with GN.\n\n\nDebugging and breakpoints\nLaunch Electron app after build.\nYou can now open the xcode workspace created above and attach to the Electron process\nthrough the Debug > Attach To Process > Electron debug menu. [Note: If you want to debug\nthe renderer process, you need to attach to the Electron Helper as well.]\nYou can now set breakpoints in any of the indexed files. However, you will not be able\nto set breakpoints directly in the Chromium source.\nTo set break points in the Chromium source, you can choose Debug > Breakpoints > Create\nSymbolic Breakpoint and set any function name as the symbol. This will set the breakpoint\nfor all functions with that name, from all the classes if there are more than one.\nYou can also do this step of setting break points prior to attaching the debugger,\nhowever, actual breakpoints for symbolic breakpoint functions may not show up until the\ndebugger is attached to the app.\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -375,7 +407,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/development-environment.md", "url": "https://electronjs.org/docs/tutorial/development-environment", "slug": "development-environment", - "body": "Developer Environment\nElectron development is essentially Node.js development. To turn your operating\nsystem into an environment capable of building desktop apps with Electron,\nyou will merely need Node.js, npm, a code editor of your choice, and a\nrudimentary understanding of your operating system's command line client.\n\n\nSetting up macOS\n\nElectron supports Mac OS X 10.9 (and all versions named macOS) and up. Apple\ndoes not allow running macOS in virtual machines unless the host computer is\nalready an Apple computer, so if you find yourself in need of a Mac, consider\nusing a cloud service that rents access to Macs (like MacInCloud\nor xcloud).\n\nFirst, install a recent version of Node.js. We recommend that you install\neither the latest LTS or Current version available. Visit\nthe Node.js download page and select the macOS Installer.\nWhile Homebrew is an offered option, but we recommend against it - many tools\nwill be incompatible with the way Homebrew installs Node.js.\nOnce downloaded, execute the installer and let the installation wizard guide\nyou through the installation.\nOnce installed, confirm that everything works as expected. Find the macOS\nTerminal application in your /Applications/Utilities folder (or by\nsearching for the word Terminal in Spotlight). Open up Terminal\nor another command line client of your choice and confirm that both node\nand npm are available:\n# This command should print the version of Node.js\nnode -v\n\n# This command should print the version of npm\nnpm -v\nIf both commands printed a version number, you are all set! Before you get\nstarted, you might want to install a code editor suited\nfor JavaScript development.\n\n\nSetting up Windows\n\nElectron supports Windows 7 and later versions – attempting to develop Electron\napplications on earlier versions of Windows will not work. Microsoft provides\nfree virtual machine images with Windows 10 for developers.\n\nFirst, install a recent version of Node.js. We recommend that you install\neither the latest LTS or Current version available. Visit\nthe Node.js download page and select the Windows Installer.\nOnce downloaded, execute the installer and let the installation wizard guide\nyou through the installation.\nOn the screen that allows you to configure the installation, make sure to\nselect the Node.js runtime, npm package manager, and Add to PATH\noptions.\nOnce installed, confirm that everything works as expected. Find the Windows\nPowerShell by opening the Start Menu and typing PowerShell. Open\nup PowerShell or another command line client of your choice and confirm that\nboth node and npm are available:\n# This command should print the version of Node.js\nnode -v\n\n# This command should print the version of npm\nnpm -v\nIf both commands printed a version number, you are all set! Before you get\nstarted, you might want to install a code editor suited\nfor JavaScript development.\n\n\nSetting up Linux\n\nGenerally speaking, Electron supports Ubuntu 12.04, Fedora 21, Debian 8\nand later.\n\nFirst, install a recent version of Node.js. Depending on your Linux\ndistribution, the installation steps might differ. Assuming that you normally\ninstall software using a package manager like apt or pacman, use the\nofficial Node.js guidance on installing on Linux.\nYou're running Linux, so you likely already know how to operate a command line\nclient. Open up your favorite client and confirm that both node and npm\nare available globally:\n# This command should print the version of Node.js\nnode -v\n\n# This command should print the version of npm\nnpm -v\nIf both commands printed a version number, you are all set! Before you get\nstarted, you might want to install a code editor suited\nfor JavaScript development.\n\n\nA Good Editor\nWe might suggest two free popular editors built in Electron:\nGitHub's Atom and Microsoft's Visual Studio Code. Both of\nthem have excellent JavaScript support.\nIf you are one of the many developers with a strong preference, know that\nvirtually all code editors and IDEs these days support JavaScript.\n", + "body": "Developer Environment\nElectron development is essentially Node.js development. To turn your operating\nsystem into an environment capable of building desktop apps with Electron,\nyou will merely need Node.js, npm, a code editor of your choice, and a\nrudimentary understanding of your operating system's command line client.\n\n\nSetting up macOS\n\nElectron supports macOS 10.10 (Yosemite) and up. Apple\ndoes not allow running macOS in virtual machines unless the host computer is\nalready an Apple computer, so if you find yourself in need of a Mac, consider\nusing a cloud service that rents access to Macs (like MacInCloud\nor xcloud).\n\nFirst, install a recent version of Node.js. We recommend that you install\neither the latest LTS or Current version available. Visit\nthe Node.js download page and select the macOS Installer.\nWhile Homebrew is an offered option, but we recommend against it - many tools\nwill be incompatible with the way Homebrew installs Node.js.\nOnce downloaded, execute the installer and let the installation wizard guide\nyou through the installation.\nOnce installed, confirm that everything works as expected. Find the macOS\nTerminal application in your /Applications/Utilities folder (or by\nsearching for the word Terminal in Spotlight). Open up Terminal\nor another command line client of your choice and confirm that both node\nand npm are available:\n# This command should print the version of Node.js\nnode -v\n\n# This command should print the version of npm\nnpm -v\nIf both commands printed a version number, you are all set! Before you get\nstarted, you might want to install a code editor suited\nfor JavaScript development.\n\n\nSetting up Windows\n\nElectron supports Windows 7 and later versions – attempting to develop Electron\napplications on earlier versions of Windows will not work. Microsoft provides\nfree virtual machine images with Windows 10 for developers.\n\nFirst, install a recent version of Node.js. We recommend that you install\neither the latest LTS or Current version available. Visit\nthe Node.js download page and select the Windows Installer.\nOnce downloaded, execute the installer and let the installation wizard guide\nyou through the installation.\nOn the screen that allows you to configure the installation, make sure to\nselect the Node.js runtime, npm package manager, and Add to PATH\noptions.\nOnce installed, confirm that everything works as expected. Find the Windows\nPowerShell by opening the Start Menu and typing PowerShell. Open\nup PowerShell or another command line client of your choice and confirm that\nboth node and npm are available:\n# This command should print the version of Node.js\nnode -v\n\n# This command should print the version of npm\nnpm -v\nIf both commands printed a version number, you are all set! Before you get\nstarted, you might want to install a code editor suited\nfor JavaScript development.\n\n\nSetting up Linux\n\nGenerally speaking, Electron supports Ubuntu 12.04, Fedora 21, Debian 8\nand later.\n\nFirst, install a recent version of Node.js. Depending on your Linux\ndistribution, the installation steps might differ. Assuming that you normally\ninstall software using a package manager like apt or pacman, use the\nofficial Node.js guidance on installing on Linux.\nYou're running Linux, so you likely already know how to operate a command line\nclient. Open up your favorite client and confirm that both node and npm\nare available globally:\n# This command should print the version of Node.js\nnode -v\n\n# This command should print the version of npm\nnpm -v\nIf both commands printed a version number, you are all set! Before you get\nstarted, you might want to install a code editor suited\nfor JavaScript development.\n\n\nA Good Editor\nWe might suggest two free popular editors built in Electron:\nGitHub's Atom and Microsoft's Visual Studio Code. Both of\nthem have excellent JavaScript support.\nIf you are one of the many developers with a strong preference, know that\nvirtually all code editors and IDEs these days support JavaScript.\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -391,7 +423,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/devtools-extension.md", "url": "https://electronjs.org/docs/tutorial/devtools-extension", "slug": "devtools-extension", - "body": "DevTools Extension\nElectron supports the Chrome DevTools Extension, which can\nbe used to extend the ability of devtools for debugging popular web frameworks.\n\n\nHow to load a DevTools Extension\nThis document outlines the process for manually loading an extension.\nYou may also try\nelectron-devtools-installer,\na third-party tool that downloads extensions directly from the Chrome WebStore.\nTo load an extension in Electron, you need to download it in Chrome browser,\nlocate its filesystem path, and then load it by calling the\nBrowserWindow.addDevToolsExtension(extension) API.\nUsing the React Developer Tools as example:\n\nInstall it in Chrome browser.\nNavigate to chrome://extensions, and find its extension ID, which is a hash\nstring like fmkadmapgofadopljbjfkapdkoienihi.\n\nFind out filesystem location used by Chrome for storing extensions:\n\non Windows it is %LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default\\Extensions;\n\non Linux it could be:\n\n~/.config/google-chrome/Default/Extensions/\n~/.config/google-chrome-beta/Default/Extensions/\n~/.config/google-chrome-canary/Default/Extensions/\n~/.config/chromium/Default/Extensions/\n\n\non macOS it is ~/Library/Application Support/Google/Chrome/Default/Extensions.\n\n\nPass the location of the extension to BrowserWindow.addDevToolsExtension\nAPI, for the React Developer Tools, it is something like:\n~/Library/Application Support/Google/Chrome/Default/Extensions/fmkadmapgofadopljbjfkapdkoienihi/0.15.0_0\n\nNote: The BrowserWindow.addDevToolsExtension API cannot be called before the\nready event of the app module is emitted.\nThe name of the extension is returned by BrowserWindow.addDevToolsExtension,\nand you can pass the name of the extension to the BrowserWindow.removeDevToolsExtension\nAPI to unload it.\n\n\nSupported DevTools Extensions\nElectron only supports a limited set of chrome.* APIs, so some extensions\nusing unsupported chrome.* APIs for chrome extension features may not work.\nFollowing Devtools Extensions are tested and guaranteed to work in Electron:\n\nEmber Inspector\nReact Developer Tools\nBackbone Debugger\njQuery Debugger\nAngularJS Batarang\nVue.js devtools\nCerebral Debugger\nRedux DevTools Extension\nMobX Developer Tools\n\n\n\nWhat should I do if a DevTools Extension is not working?\nFirst please make sure the extension is still being maintained, some extensions\ncan not even work for recent versions of Chrome browser, and we are not able to\ndo anything for them.\nThen file a bug at Electron's issues list, and describe which part of the\nextension is not working as expected.\n", + "body": "DevTools Extension\nElectron supports the Chrome DevTools Extension, which can\nbe used to extend the ability of devtools for debugging popular web frameworks.\n\n\nHow to load a DevTools Extension\nThis document outlines the process for manually loading an extension.\nYou may also try\nelectron-devtools-installer,\na third-party tool that downloads extensions directly from the Chrome WebStore.\nTo load an extension in Electron, you need to download it in Chrome browser,\nlocate its filesystem path, and then load it by calling the\nBrowserWindow.addDevToolsExtension(extension) API.\nUsing the React Developer Tools as example:\n\n\nInstall it in Chrome browser.\n\n\nNavigate to chrome://extensions, and find its extension ID, which is a hash\nstring like fmkadmapgofadopljbjfkapdkoienihi.\n\n\nFind out filesystem location used by Chrome for storing extensions:\n\non Windows it is %LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default\\Extensions;\n\non Linux it could be:\n\n~/.config/google-chrome/Default/Extensions/\n~/.config/google-chrome-beta/Default/Extensions/\n~/.config/google-chrome-canary/Default/Extensions/\n~/.config/chromium/Default/Extensions/\n\n\non macOS it is ~/Library/Application Support/Google/Chrome/Default/Extensions.\n\n\n\nPass the location of the extension to BrowserWindow.addDevToolsExtension\nAPI, for the React Developer Tools, it is something like:\nconst path = require('path')\nconst os = require('os')\n\nBrowserWindow.addDevToolsExtension(\n path.join(os.homedir(), '/Library/Application Support/Google/Chrome/Default/Extensions/fmkadmapgofadopljbjfkapdkoienihi/0.15.0_0')\n)\n\n\nNote: The BrowserWindow.addDevToolsExtension API cannot be called before the\nready event of the app module is emitted.\nThe name of the extension is returned by BrowserWindow.addDevToolsExtension,\nand you can pass the name of the extension to the BrowserWindow.removeDevToolsExtension\nAPI to unload it.\n\n\nSupported DevTools Extensions\nElectron only supports a limited set of chrome.* APIs, so some extensions\nusing unsupported chrome.* APIs for chrome extension features may not work.\nFollowing Devtools Extensions are tested and guaranteed to work in Electron:\n\nEmber Inspector\nReact Developer Tools\nBackbone Debugger\njQuery Debugger\nAngularJS Batarang\nVue.js devtools\nCerebral Debugger\nRedux DevTools Extension\nMobX Developer Tools\n\n\n\nWhat should I do if a DevTools Extension is not working?\nFirst please make sure the extension is still being maintained, some extensions\ncan not even work for recent versions of Chrome browser, and we are not able to\ndo anything for them.\nThen file a bug at Electron's issues list, and describe which part of the\nextension is not working as expected.\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -401,13 +433,29 @@ "tutorial:devtools-extension" ] }, + { + "objectID": "tutorial-electron-timelines", + "title": "5.0.0 Release Schedule", + "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/electron-timelines.md", + "url": "https://electronjs.org/docs/tutorial/electron-timelines", + "slug": "electron-timelines", + "body": "5.0.0 Release Schedule\nTake a look at 5.0.0 Timeline blog post for info about publicizing our release dates.\n\n\nNotes:\n\nThese dates are our goals but there may be reasons for adjusting the stable deadline, such as security bugs.\nThese are our scheduled beta releases, however we often release more betas than scheduled.\n\n\n\n\nDate/Week Of\nRelease\nComments\n\n\n\n\nTue, 2019-Jan-22\n5.0.0-beta.1\n🔥\n\n\nTue, 2019-Jan-29\n5.0.0-beta.x\n\n\n\nTue, 2019-Feb-05\n5.0.0-beta.x\nLast Date to Join \nAFP\n\n\nTue, 2019-Feb-12\n5.0.0-beta.x\n\n\n\nTue, 2019-Feb-19\nnone\nMaintainers Summit\n\n\nTue, 2019-Feb-26\n5.0.0-beta.x\n\n\n\nTue, 2019-Mar-05\n5.0.0-beta.x\nhalfway mark\n\n\nTue, 2019-Mar-12\n5.0.0-beta.x\n\n\n\nTue, 2019-Mar-19\n5.0.0-beta.x\n\n\n\nTue, 2019-Mar-26\n5.0.0-beta.x\n\n\n\nTue, 2019-Apr-02\n5.0.0-beta.x\n\n\n\nTue, 2019-Apr-09\n5.0.0-beta.x\n\n\n\nTue, 2019-Apr-16\nnone\nquiet period - stable prep\n\n\nTue, 2019-Apr-23\n5.0.0\n✨stable ✨\n\n\n\nIncludes: Chromium M72 and Node v12.0\n\n\n6.0.0 Release Schedule\nTBD\n", + "keyValuePairs": [ + "is:doc", + "is:tutorial", + "doc:5.0.0 Release Schedule", + "doc:electron-timelines", + "tutorial:5.0.0 Release Schedule", + "tutorial:electron-timelines" + ] + }, { "objectID": "tutorial-electron-versioning", "title": "Electron Versioning", "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/electron-versioning.md", "url": "https://electronjs.org/docs/tutorial/electron-versioning", "slug": "electron-versioning", - "body": "Electron Versioning\n\nA detailed look at our versioning policy and implementation.\n\nAs of version 2.0.0, Electron follows semver. The following command will install the most recent stable build of Electron:\nnpm install --save-dev electron\nTo update an existing project to use the latest stable version:\nnpm install --save-dev electron@latest\n\n\nVersion 1.x\nElectron versions < 2.0 did not conform to the semver spec: major versions corresponded to end-user API changes, minor versions corresponded to Chromium major releases, and patch versions corresponded to new features and bug fixes. While convenient for developers merging features, it creates problems for developers of client-facing applications. The QA testing cycles of major apps like Slack, Stride, Teams, Skype, VS Code, Atom, and Desktop can be lengthy and stability is a highly desired outcome. There is a high risk in adopting new features while trying to absorb bug fixes.\nHere is an example of the 1.x strategy:\n\nAn app developed with 1.8.1 cannot take the 1.8.3 bug fix without either absorbing the 1.8.2 feature, or by backporting the fix and maintaining a new release line.\n\n\nVersion 2.0 and Beyond\nThere are several major changes from our 1.x strategy outlined below. Each change is intended to satisfy the needs and priorities of developers/maintainers and app developers.\n\nStrict use of semver\nIntroduction of semver-compliant -beta tags\nIntroduction of conventional commit messages\nWell-defined stabilization branches\nThe master branch is versionless; only stabilization branches contain version information\n\nWe will cover in detail how git branching works, how npm tagging works, what developers should expect to see, and how one can backport changes.\n\n\nsemver\nFrom 2.0 onward, Electron will follow semver.\nBelow is a table explicitly mapping types of changes to their corresponding category of semver (e.g. Major, Minor, Patch).\n\n\n\nMajor Version Increments\nMinor Version Increments\nPatch Version Increments\n\n\n\n\nElectron breaking API changes\nElectron non-breaking API changes\nElectron bug fixes\n\n\nNode.js major version updates\nNode.js minor version updates\nNode.js patch version updates\n\n\nChromium version updates\n\nfix-related chromium patches\n\n\n\nNote that most chromium updates will be considered breaking. Fixes that can be backported will likely be cherry-picked as patches.\n\n\nStabilization Branches\nStabilization branches are branches that run parallel to master, taking in only cherry-picked commits that are related to security or stability. These branches are never merged back to master.\n\nStabilization branches are always either major or minor version lines, and named against the following template $MAJOR-$MINOR-x e.g. 2-0-x.\nWe allow for multiple stabilization branches to exist simultaneously, and intend to support at least two in parallel at all times, backporting security fixes as necessary.\n\nOlder lines will not be supported by GitHub, but other groups can take ownership and backport stability and security fixes on their own. We discourage this, but recognize that it makes life easier for many app developers.\n\n\nBeta Releases and Bug Fixes\nDevelopers want to know which releases are safe to use. Even seemingly innocent features can introduce regressions in complex applications. At the same time, locking to a fixed version is dangerous because you’re ignoring security patches and bug fixes that may have come out since your version. Our goal is to allow the following standard semver ranges in package.json :\n\nUse ~2.0.0 to admit only stability or security related fixes to your 2.0.0 release.\nUse ^2.0.0 to admit non-breaking reasonably stable feature work as well as security and bug fixes.\n\nWhat’s important about the second point is that apps using ^ should still be able to expect a reasonable level of stability. To accomplish this, semver allows for a pre-release identifier to indicate a particular version is not yet safe or stable.\nWhatever you choose, you will periodically have to bump the version in your package.json as breaking changes are a fact of Chromium life.\nThe process is as follows:\n\nAll new major and minor releases lines begin with a -beta.N tag for N >= 1. At that point, the feature set is locked. That release line admits no further features, and focuses only on security and stability.\ne.g. 2.0.0-beta.1.\nBug fixes, regression fixes, and security patches can be admitted. Upon doing so, a new beta is released incrementing N.\ne.g. 2.0.0-beta.2\nIf a particular beta release is generally regarded as stable, it will be re-released as a stable build, changing only the version information.\ne.g. 2.0.0.\nIf future bug fixes or security patches need to be made once a release is stable, they are applied and the patch version is incremented accordingly\ne.g. 2.0.1.\n\nFor each major and minor bump, you should expect to see something like the following:\n2.0.0-beta.1\n2.0.0-beta.2\n2.0.0-beta.3\n2.0.0\n2.0.1\n2.0.2\nAn example lifecycle in pictures:\n\nA new release branch is created that includes the latest set of features. It is published as 2.0.0-beta.1.\n\nA bug fix comes into master that can be backported to the release branch. The patch is applied, and a new beta is published as 2.0.0-beta.2.\n\nThe beta is considered generally stable and it is published again as a non-beta under 2.0.0.\n\nLater, a zero-day exploit is revealed and a fix is applied to master. We backport the fix to the 2-0-x line and release 2.0.1.\n\n\nA few examples of how various semver ranges will pick up new releases:\n\n\n\nMissing Features: Alphas, and Nightly\nOur strategy has a few tradeoffs, which for now we feel are appropriate. Most importantly that new features in master may take a while before reaching a stable release line. If you want to try a new feature immediately, you will have to build Electron yourself.\nAs a future consideration, we may introduce one or both of the following:\n\nnightly builds off of master; these would allow folks to test new features quickly and give feedback\nalpha releases that have looser stability constraints to betas; for example it would be allowable to admit new features while a stability channel is in alpha\n\n\n\nFeature Flags\nFeature flags are a common practice in Chromium, and are well-established in the web-development ecosystem. In the context of Electron, a feature flag or soft branch must have the following properties:\n\nit is enabled/disabled either at runtime, or build-time; we do not support the concept of a request-scoped feature flag\nit completely segments new and old code paths; refactoring old code to support a new feature violates the feature-flag contract\nfeature flags are eventually removed after the soft-branch is merged\n\nWe reconcile flagged code with our versioning strategy as follows:\n\nwe do not consider iterating on feature-flagged code in a stability branch; even judicious use of feature flags is not without risk\nyou may break API contracts in feature-flagged code without bumping the major version. Flagged code does not adhere to semver\n\n\n\nSemantic Commits\nWe seek to increase clarity at all levels of the update and releases process. Starting with 2.0.0 we will require pull requests adhere to the Conventional Commits spec, which can be summarized as follows:\n\n\nCommits that would result in a semver major bump must start with BREAKING CHANGE:.\n\n\nCommits that would result in a semver minor bump must start with feat:.\n\n\nCommits that would result in a semver patch bump must start with fix:.\n\n\nWe allow squashing of commits, provided that the squashed message adheres the the above message format.\n\n\nIt is acceptable for some commits in a pull request to not include a semantic prefix, as long as a later commit in the same pull request contains a meaningful encompassing semantic message.\n\n\n\n\nVersionless master\n\nThe master branch will always contain 0.0.0-dev in its package.json\nRelease branches are never merged back to master\nRelease branches do contain the correct version in their package.json\n\n", + "body": "Electron Versioning\n\nA detailed look at our versioning policy and implementation.\n\nAs of version 2.0.0, Electron follows semver. The following command will install the most recent stable build of Electron:\nnpm install --save-dev electron\nTo update an existing project to use the latest stable version:\nnpm install --save-dev electron@latest\n\n\nVersion 1.x\nElectron versions < 2.0 did not conform to the semver spec: major versions corresponded to end-user API changes, minor versions corresponded to Chromium major releases, and patch versions corresponded to new features and bug fixes. While convenient for developers merging features, it creates problems for developers of client-facing applications. The QA testing cycles of major apps like Slack, Stride, Teams, Skype, VS Code, Atom, and Desktop can be lengthy and stability is a highly desired outcome. There is a high risk in adopting new features while trying to absorb bug fixes.\nHere is an example of the 1.x strategy:\n\nAn app developed with 1.8.1 cannot take the 1.8.3 bug fix without either absorbing the 1.8.2 feature, or by backporting the fix and maintaining a new release line.\n\n\nVersion 2.0 and Beyond\nThere are several major changes from our 1.x strategy outlined below. Each change is intended to satisfy the needs and priorities of developers/maintainers and app developers.\n\nStrict use of semver\nIntroduction of semver-compliant -beta tags\nIntroduction of conventional commit messages\nWell-defined stabilization branches\nThe master branch is versionless; only stabilization branches contain version information\n\nWe will cover in detail how git branching works, how npm tagging works, what developers should expect to see, and how one can backport changes.\n\n\nsemver\nFrom 2.0 onward, Electron will follow semver.\nBelow is a table explicitly mapping types of changes to their corresponding category of semver (e.g. Major, Minor, Patch).\n\n\n\nMajor Version Increments\nMinor Version Increments\nPatch Version Increments\n\n\n\n\nElectron breaking API changes\nElectron non-breaking API changes\nElectron bug fixes\n\n\nNode.js major version updates\nNode.js minor version updates\nNode.js patch version updates\n\n\nChromium version updates\n\nfix-related chromium patches\n\n\n\nNote that most Chromium updates will be considered breaking. Fixes that can be backported will likely be cherry-picked as patches.\n\n\nStabilization Branches\nStabilization branches are branches that run parallel to master, taking in only cherry-picked commits that are related to security or stability. These branches are never merged back to master.\n\nStabilization branches are always either major or minor version lines, and named against the following template $MAJOR-$MINOR-x e.g. 2-0-x.\nWe allow for multiple stabilization branches to exist simultaneously, and intend to support at least two in parallel at all times, backporting security fixes as necessary.\n\nOlder lines will not be supported by GitHub, but other groups can take ownership and backport stability and security fixes on their own. We discourage this, but recognize that it makes life easier for many app developers.\n\n\nBeta Releases and Bug Fixes\nDevelopers want to know which releases are safe to use. Even seemingly innocent features can introduce regressions in complex applications. At the same time, locking to a fixed version is dangerous because you’re ignoring security patches and bug fixes that may have come out since your version. Our goal is to allow the following standard semver ranges in package.json :\n\nUse ~2.0.0 to admit only stability or security related fixes to your 2.0.0 release.\nUse ^2.0.0 to admit non-breaking reasonably stable feature work as well as security and bug fixes.\n\nWhat’s important about the second point is that apps using ^ should still be able to expect a reasonable level of stability. To accomplish this, semver allows for a pre-release identifier to indicate a particular version is not yet safe or stable.\nWhatever you choose, you will periodically have to bump the version in your package.json as breaking changes are a fact of Chromium life.\nThe process is as follows:\n\n\nAll new major and minor releases lines begin with a beta series indicated by semver prerelease tags of beta.N, e.g. 2.0.0-beta.1. After the first beta, subsequent beta releases must meet all of the following conditions:\n\nThe change is backwards API-compatible (deprecations are allowed)\nThe risk to meeting our stability timeline must be low.\n\n\nIf allowed changes need to be made once a release is beta, they are applied and the prerelease tag is incremented, e.g. 2.0.0-beta.2.\nIf a particular beta release is generally regarded as stable, it will be re-released as a stable build, changing only the version information. e.g. 2.0.0. After the first stable, all changes must be backwards-compatible bug or security fixes.\nIf future bug fixes or security patches need to be made once a release is stable, they are applied and the patch version is incremented\ne.g. 2.0.1.\n\nSpecifically, the above means:\n\nAdmitting non-breaking-API changes early in the beta cycle is okay, even if those changes have the potential to cause moderate side-affects\nAdmitting feature-flagged changes, that do not otherwise alter existing code paths, at most points in the beta cycle is okay. Users can explicitly enable those flags in their apps.\nAdmitting features of any sort very late in the beta cycle is 👎 without a very good reason.\n\nFor each major and minor bump, you should expect to see something like the following:\n2.0.0-beta.1\n2.0.0-beta.2\n2.0.0-beta.3\n2.0.0\n2.0.1\n2.0.2\nAn example lifecycle in pictures:\n\nA new release branch is created that includes the latest set of features. It is published as 2.0.0-beta.1.\n\nA bug fix comes into master that can be backported to the release branch. The patch is applied, and a new beta is published as 2.0.0-beta.2.\n\nThe beta is considered generally stable and it is published again as a non-beta under 2.0.0.\n\nLater, a zero-day exploit is revealed and a fix is applied to master. We backport the fix to the 2-0-x line and release 2.0.1.\n\n\nA few examples of how various semver ranges will pick up new releases:\n\n\n\nMissing Features: Alphas\nOur strategy has a few tradeoffs, which for now we feel are appropriate. Most importantly that new features in master may take a while before reaching a stable release line. If you want to try a new feature immediately, you will have to build Electron yourself.\nAs a future consideration, we may introduce one or both of the following:\n\nalpha releases that have looser stability constraints to betas; for example it would be allowable to admit new features while a stability channel is in alpha\n\n\n\nFeature Flags\nFeature flags are a common practice in Chromium, and are well-established in the web-development ecosystem. In the context of Electron, a feature flag or soft branch must have the following properties:\n\nit is enabled/disabled either at runtime, or build-time; we do not support the concept of a request-scoped feature flag\nit completely segments new and old code paths; refactoring old code to support a new feature violates the feature-flag contract\nfeature flags are eventually removed after the feature is released\n\n\n\nSemantic Commits\nWe seek to increase clarity at all levels of the update and releases process. Starting with 2.0.0 we will require pull requests adhere to the Conventional Commits spec, which can be summarized as follows:\n\n\nCommits that would result in a semver major bump must start their body with BREAKING CHANGE:.\n\n\nCommits that would result in a semver minor bump must start with feat:.\n\n\nCommits that would result in a semver patch bump must start with fix:.\n\n\nWe allow squashing of commits, provided that the squashed message adheres the the above message format.\n\n\nIt is acceptable for some commits in a pull request to not include a semantic prefix, as long as the pull request title contains a meaningful encompassing semantic message.\n\n\n\n\nVersioned master\n\nThe master branch will always contain the next major version X.0.0-nightly.DATE in its package.json\nRelease branches are never merged back to master\nRelease branches do contain the correct version in their package.json\nAs soon as a release branch is cut for a major, master must be bumped to the next major. I.e. master is always versioned as the next theoretical release branch\n\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -423,7 +471,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/faq.md", "url": "https://electronjs.org/docs/tutorial/faq", "slug": "faq", - "body": "Electron FAQ\n\n\nWhy am I having trouble installing Electron?\nWhen running npm install electron, some users occasionally encounter\ninstallation errors.\nIn almost all cases, these errors are the result of network problems and not\nactual issues with the electron npm package. Errors like ELIFECYCLE,\nEAI_AGAIN, ECONNRESET, and ETIMEDOUT are all indications of such\nnetwork problems. The best resolution is to try switching networks, or\nwait a bit and try installing again.\nYou can also attempt to download Electron directly from\nelectron/electron/releases\nif installing via npm is failing.\n\n\nWhen will Electron upgrade to latest Chrome?\nThe Chrome version of Electron is usually bumped within one or two weeks after\na new stable Chrome version gets released. This estimate is not guaranteed and\ndepends on the amount of work involved with upgrading.\nOnly the stable channel of Chrome is used. If an important fix is in beta or dev\nchannel, we will back-port it.\nFor more information, please see the security introduction.\n\n\nWhen will Electron upgrade to latest Node.js?\nWhen a new version of Node.js gets released, we usually wait for about a month\nbefore upgrading the one in Electron. So we can avoid getting affected by bugs\nintroduced in new Node.js versions, which happens very often.\nNew features of Node.js are usually brought by V8 upgrades, since Electron is\nusing the V8 shipped by Chrome browser, the shiny new JavaScript feature of a\nnew Node.js version is usually already in Electron.\n\n\nHow to share data between web pages?\nTo share data between web pages (the renderer processes) the simplest way is to\nuse HTML5 APIs which are already available in browsers. Good candidates are\nStorage API, localStorage,\nsessionStorage, and IndexedDB.\nOr you can use the IPC system, which is specific to Electron, to store objects\nin the main process as a global variable, and then to access them from the\nrenderers through the remote property of electron module:\n// In the main process.\nglobal.sharedObject = {\n someProperty: 'default value'\n}\n// In page 1.\nrequire('electron').remote.getGlobal('sharedObject').someProperty = 'new value'\n// In page 2.\nconsole.log(require('electron').remote.getGlobal('sharedObject').someProperty)\n\n\nMy app's window/tray disappeared after a few minutes.\nThis happens when the variable which is used to store the window/tray gets\ngarbage collected.\nIf you encounter this problem, the following articles may prove helpful:\n\nMemory Management\nVariable Scope\n\nIf you want a quick fix, you can make the variables global by changing your\ncode from this:\nconst {app, Tray} = require('electron')\napp.on('ready', () => {\n const tray = new Tray('/path/to/icon.png')\n tray.setTitle('hello world')\n})\nto this:\nconst {app, Tray} = require('electron')\nlet tray = null\napp.on('ready', () => {\n tray = new Tray('/path/to/icon.png')\n tray.setTitle('hello world')\n})\n\n\nI can not use jQuery/RequireJS/Meteor/AngularJS in Electron.\nDue to the Node.js integration of Electron, there are some extra symbols\ninserted into the DOM like module, exports, require. This causes problems\nfor some libraries since they want to insert the symbols with the same names.\nTo solve this, you can turn off node integration in Electron:\n// In the main process.\nconst {BrowserWindow} = require('electron')\nlet win = new BrowserWindow({\n webPreferences: {\n nodeIntegration: false\n }\n})\nwin.show()\nBut if you want to keep the abilities of using Node.js and Electron APIs, you\nhave to rename the symbols in the page before including other libraries:\n\n\n\n\n\n\nrequire('electron').xxx is undefined.\nWhen using Electron's built-in module you might encounter an error like this:\n> require('electron').webFrame.setZoomFactor(1.0)\nUncaught TypeError: Cannot read property 'setZoomLevel' of undefined\nThis is because you have the npm electron module installed\neither locally or globally, which overrides Electron's built-in module.\nTo verify whether you are using the correct built-in module, you can print the\npath of the electron module:\nconsole.log(require.resolve('electron'))\nand then check if it is in the following form:\n\"/path/to/Electron.app/Contents/Resources/atom.asar/renderer/api/lib/exports/electron.js\"\nIf it is something like node_modules/electron/index.js, then you have to\neither remove the npm electron module, or rename it.\nnpm uninstall electron\nnpm uninstall -g electron\nHowever if you are using the built-in module but still getting this error, it\nis very likely you are using the module in the wrong process. For example\nelectron.app can only be used in the main process, while electron.webFrame\nis only available in renderer processes.\n", + "body": "Electron FAQ\n\n\nWhy am I having trouble installing Electron?\nWhen running npm install electron, some users occasionally encounter\ninstallation errors.\nIn almost all cases, these errors are the result of network problems and not\nactual issues with the electron npm package. Errors like ELIFECYCLE,\nEAI_AGAIN, ECONNRESET, and ETIMEDOUT are all indications of such\nnetwork problems. The best resolution is to try switching networks, or\nwait a bit and try installing again.\nYou can also attempt to download Electron directly from\nelectron/electron/releases\nif installing via npm is failing.\n\n\nWhen will Electron upgrade to latest Chrome?\nThe Chrome version of Electron is usually bumped within one or two weeks after\na new stable Chrome version gets released. This estimate is not guaranteed and\ndepends on the amount of work involved with upgrading.\nOnly the stable channel of Chrome is used. If an important fix is in beta or dev\nchannel, we will back-port it.\nFor more information, please see the security introduction.\n\n\nWhen will Electron upgrade to latest Node.js?\nWhen a new version of Node.js gets released, we usually wait for about a month\nbefore upgrading the one in Electron. So we can avoid getting affected by bugs\nintroduced in new Node.js versions, which happens very often.\nNew features of Node.js are usually brought by V8 upgrades, since Electron is\nusing the V8 shipped by Chrome browser, the shiny new JavaScript feature of a\nnew Node.js version is usually already in Electron.\n\n\nHow to share data between web pages?\nTo share data between web pages (the renderer processes) the simplest way is to\nuse HTML5 APIs which are already available in browsers. Good candidates are\nStorage API, localStorage,\nsessionStorage, and IndexedDB.\nOr you can use the IPC system, which is specific to Electron, to store objects\nin the main process as a global variable, and then to access them from the\nrenderers through the remote property of electron module:\n// In the main process.\nglobal.sharedObject = {\n someProperty: 'default value'\n}\n// In page 1.\nrequire('electron').remote.getGlobal('sharedObject').someProperty = 'new value'\n// In page 2.\nconsole.log(require('electron').remote.getGlobal('sharedObject').someProperty)\n\n\nMy app's window/tray disappeared after a few minutes.\nThis happens when the variable which is used to store the window/tray gets\ngarbage collected.\nIf you encounter this problem, the following articles may prove helpful:\n\nMemory Management\nVariable Scope\n\nIf you want a quick fix, you can make the variables global by changing your\ncode from this:\nconst { app, Tray } = require('electron')\napp.on('ready', () => {\n const tray = new Tray('/path/to/icon.png')\n tray.setTitle('hello world')\n})\nto this:\nconst { app, Tray } = require('electron')\nlet tray = null\napp.on('ready', () => {\n tray = new Tray('/path/to/icon.png')\n tray.setTitle('hello world')\n})\n\n\nI can not use jQuery/RequireJS/Meteor/AngularJS in Electron.\nDue to the Node.js integration of Electron, there are some extra symbols\ninserted into the DOM like module, exports, require. This causes problems\nfor some libraries since they want to insert the symbols with the same names.\nTo solve this, you can turn off node integration in Electron:\n// In the main process.\nconst { BrowserWindow } = require('electron')\nlet win = new BrowserWindow({\n webPreferences: {\n nodeIntegration: false\n }\n})\nwin.show()\nBut if you want to keep the abilities of using Node.js and Electron APIs, you\nhave to rename the symbols in the page before including other libraries:\n\n\n\n\n\n\nrequire('electron').xxx is undefined.\nWhen using Electron's built-in module you might encounter an error like this:\n> require('electron').webFrame.setZoomFactor(1.0)\nUncaught TypeError: Cannot read property 'setZoomLevel' of undefined\nThis is because you have the npm electron module installed\neither locally or globally, which overrides Electron's built-in module.\nTo verify whether you are using the correct built-in module, you can print the\npath of the electron module:\nconsole.log(require.resolve('electron'))\nand then check if it is in the following form:\n\"/path/to/Electron.app/Contents/Resources/atom.asar/renderer/api/lib/exports/electron.js\"\nIf it is something like node_modules/electron/index.js, then you have to\neither remove the npm electron module, or rename it.\nnpm uninstall electron\nnpm uninstall -g electron\nHowever if you are using the built-in module but still getting this error, it\nis very likely you are using the module in the wrong process. For example\nelectron.app can only be used in the main process, while electron.webFrame\nis only available in renderer processes.\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -439,7 +487,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/first-app.md", "url": "https://electronjs.org/docs/tutorial/first-app", "slug": "first-app", - "body": "Writing Your First Electron App\nElectron enables you to create desktop applications with pure JavaScript by\nproviding a runtime with rich native (operating system) APIs. You could see it\nas a variant of the Node.js runtime that is focused on desktop applications\ninstead of web servers.\nThis doesn't mean Electron is a JavaScript binding to graphical user interface\n(GUI) libraries. Instead, Electron uses web pages as its GUI, so you could also\nsee it as a minimal Chromium browser, controlled by JavaScript.\nNote: This example is also available as a repository you can\ndownload and run immediately.\nAs far as development is concerned, an Electron application is essentially a\nNode.js application. The starting point is a package.json that is identical\nto that of a Node.js module. A most basic Electron app would have the following\nfolder structure:\nyour-app/\n├── package.json\n├── main.js\n└── index.html\nCreate a new empty folder for your new Electron application. Open up your\ncommand line client and run npm init from that very folder.\nnpm init\nnpm will guide you through creating a basic package.json file. The script\nspecified by the main field is the startup script of your app, which will\nrun the main process. An example of your package.json might look like this:\n{\n \"name\": \"your-app\",\n \"version\": \"0.1.0\",\n \"main\": \"main.js\"\n}\nNote: If the main field is not present in package.json, Electron will\nattempt to load an index.js (as Node.js does). If this was actually\na simple Node application, you would add a start script that instructs node\nto execute the current package:\n{\n \"name\": \"your-app\",\n \"version\": \"0.1.0\",\n \"main\": \"main.js\",\n \"scripts\": {\n \"start\": \"node .\"\n }\n}\nTurning this Node application into an Electron application is quite simple - we\nmerely replace the node runtime with the electron runtime.\n{\n \"name\": \"your-app\",\n \"version\": \"0.1.0\",\n \"main\": \"main.js\",\n \"scripts\": {\n \"start\": \"electron .\"\n }\n}\n\n\nInstalling Electron\nAt this point, you'll need to install electron itself. The recommended way\nof doing so is to install it as a development dependency in your app, which\nallows you to work on multiple apps with different Electron versions. To do so,\nrun the following command from your app's directory:\nnpm install --save-dev electron\nOther means for installing Electron exist. Please consult the\ninstallation guide to learn about use with proxies, mirrors,\nand custom caches.\n\n\nElectron Development in a Nutshell\nElectron apps are developed in JavaScript using the same principles and methods\nfound in Node.js development. All APIs and features found in Electron are\naccessible through the electron module, which can be required like any other\nNode.js module:\nconst electron = require('electron')\nThe electron module exposes features in namespaces. As examples, the lifecycle\nof the application is managed through electron.app, windows can be created\nusing the electron.BrowserWindow class. A simple main.js file might wait\nfor the application to be ready and open a window:\nconst {app, BrowserWindow} = require('electron')\nconst path = require('path')\nconst url = require('url')\n\nfunction createWindow () {\n // Create the browser window.\n win = new BrowserWindow({width: 800, height: 600})\n\n // and load the index.html of the app.\n win.loadURL(url.format({\n pathname: path.join(__dirname, 'index.html'),\n protocol: 'file:',\n slashes: true\n }))\n}\n\napp.on('ready', createWindow)\nThe main.js should create windows and handle all the system events your\napplication might encounter. A more complete version of the above example\nmight open developer tools, handle the window being closed, or re-create\nwindows on macOS if the user clicks on the app's icon in the dock.\nconst {app, BrowserWindow} = require('electron')\nconst path = require('path')\nconst url = require('url')\n\n// Keep a global reference of the window object, if you don't, the window will\n// be closed automatically when the JavaScript object is garbage collected.\nlet win\n\nfunction createWindow () {\n // Create the browser window.\n win = new BrowserWindow({width: 800, height: 600})\n\n // and load the index.html of the app.\n win.loadURL(url.format({\n pathname: path.join(__dirname, 'index.html'),\n protocol: 'file:',\n slashes: true\n }))\n\n // Open the DevTools.\n win.webContents.openDevTools()\n\n // Emitted when the window is closed.\n win.on('closed', () => {\n // Dereference the window object, usually you would store windows\n // in an array if your app supports multi windows, this is the time\n // when you should delete the corresponding element.\n win = null\n })\n}\n\n// This method will be called when Electron has finished\n// initialization and is ready to create browser windows.\n// Some APIs can only be used after this event occurs.\napp.on('ready', createWindow)\n\n// Quit when all windows are closed.\napp.on('window-all-closed', () => {\n // On macOS it is common for applications and their menu bar\n // to stay active until the user quits explicitly with Cmd + Q\n if (process.platform !== 'darwin') {\n app.quit()\n }\n})\n\napp.on('activate', () => {\n // On macOS it's common to re-create a window in the app when the\n // dock icon is clicked and there are no other windows open.\n if (win === null) {\n createWindow()\n }\n})\n\n// In this file you can include the rest of your app's specific main process\n// code. You can also put them in separate files and require them here.\nFinally the index.html is the web page you want to show:\n\n\n \n \n Hello World!\n \n \n

    Hello World!

    \n We are using node ,\n Chrome ,\n and Electron .\n \n\n\n\nRunning Your App\nOnce you've created your initial main.js, index.html, and package.json\nfiles, you can try your app by running npm start from your application's\ndirectory.\n\n\nTrying this Example\nClone and run the code in this tutorial by using the\nelectron/electron-quick-start repository.\nNote: Running this requires Git.\n# Clone the repository\n$ git clone https://github.com/electron/electron-quick-start\n# Go into the repository\n$ cd electron-quick-start\n# Install dependencies\n$ npm install\n# Run the app\n$ npm start\nFor a list of boilerplates and tools to kick-start your development process,\nsee the Boilerplates and CLIs documentation.\n", + "body": "Writing Your First Electron App\nElectron enables you to create desktop applications with pure JavaScript by\nproviding a runtime with rich native (operating system) APIs. You could see it\nas a variant of the Node.js runtime that is focused on desktop applications\ninstead of web servers.\nThis doesn't mean Electron is a JavaScript binding to graphical user interface\n(GUI) libraries. Instead, Electron uses web pages as its GUI, so you could also\nsee it as a minimal Chromium browser, controlled by JavaScript.\nNote: This example is also available as a repository you can\ndownload and run immediately.\nAs far as development is concerned, an Electron application is essentially a\nNode.js application. The starting point is a package.json that is identical\nto that of a Node.js module. A most basic Electron app would have the following\nfolder structure:\nyour-app/\n├── package.json\n├── main.js\n└── index.html\nCreate a new empty folder for your new Electron application. Open up your\ncommand line client and run npm init from that very folder.\nnpm init\nnpm will guide you through creating a basic package.json file. The script\nspecified by the main field is the startup script of your app, which will\nrun the main process. An example of your package.json might look like this:\n{\n \"name\": \"your-app\",\n \"version\": \"0.1.0\",\n \"main\": \"main.js\"\n}\nNote: If the main field is not present in package.json, Electron will\nattempt to load an index.js (as Node.js does). If this was actually\na simple Node application, you would add a start script that instructs node\nto execute the current package:\n{\n \"name\": \"your-app\",\n \"version\": \"0.1.0\",\n \"main\": \"main.js\",\n \"scripts\": {\n \"start\": \"node .\"\n }\n}\nTurning this Node application into an Electron application is quite simple - we\nmerely replace the node runtime with the electron runtime.\n{\n \"name\": \"your-app\",\n \"version\": \"0.1.0\",\n \"main\": \"main.js\",\n \"scripts\": {\n \"start\": \"electron .\"\n }\n}\n\n\nInstalling Electron\nAt this point, you'll need to install electron itself. The recommended way\nof doing so is to install it as a development dependency in your app, which\nallows you to work on multiple apps with different Electron versions. To do so,\nrun the following command from your app's directory:\nnpm install --save-dev electron\nOther means for installing Electron exist. Please consult the\ninstallation guide to learn about use with proxies, mirrors,\nand custom caches.\n\n\nElectron Development in a Nutshell\nElectron apps are developed in JavaScript using the same principles and methods\nfound in Node.js development. All APIs and features found in Electron are\naccessible through the electron module, which can be required like any other\nNode.js module:\nconst electron = require('electron')\nThe electron module exposes features in namespaces. As examples, the lifecycle\nof the application is managed through electron.app, windows can be created\nusing the electron.BrowserWindow class. A simple main.js file might wait\nfor the application to be ready and open a window:\nconst { app, BrowserWindow } = require('electron')\n\nfunction createWindow () {\n // Create the browser window.\n let win = new BrowserWindow({ width: 800, height: 600 })\n\n // and load the index.html of the app.\n win.loadFile('index.html')\n}\n\napp.on('ready', createWindow)\nThe main.js should create windows and handle all the system events your\napplication might encounter. A more complete version of the above example\nmight open developer tools, handle the window being closed, or re-create\nwindows on macOS if the user clicks on the app's icon in the dock.\nconst { app, BrowserWindow } = require('electron')\n\n// Keep a global reference of the window object, if you don't, the window will\n// be closed automatically when the JavaScript object is garbage collected.\nlet win\n\nfunction createWindow () {\n // Create the browser window.\n win = new BrowserWindow({ width: 800, height: 600 })\n\n // and load the index.html of the app.\n win.loadFile('index.html')\n\n // Open the DevTools.\n win.webContents.openDevTools()\n\n // Emitted when the window is closed.\n win.on('closed', () => {\n // Dereference the window object, usually you would store windows\n // in an array if your app supports multi windows, this is the time\n // when you should delete the corresponding element.\n win = null\n })\n}\n\n// This method will be called when Electron has finished\n// initialization and is ready to create browser windows.\n// Some APIs can only be used after this event occurs.\napp.on('ready', createWindow)\n\n// Quit when all windows are closed.\napp.on('window-all-closed', () => {\n // On macOS it is common for applications and their menu bar\n // to stay active until the user quits explicitly with Cmd + Q\n if (process.platform !== 'darwin') {\n app.quit()\n }\n})\n\napp.on('activate', () => {\n // On macOS it's common to re-create a window in the app when the\n // dock icon is clicked and there are no other windows open.\n if (win === null) {\n createWindow()\n }\n})\n\n// In this file you can include the rest of your app's specific main process\n// code. You can also put them in separate files and require them here.\nFinally the index.html is the web page you want to show:\n\n\n \n \n Hello World!\n \n \n

    Hello World!

    \n We are using node ,\n Chrome ,\n and Electron .\n \n\n\n\nRunning Your App\nOnce you've created your initial main.js, index.html, and package.json\nfiles, you can try your app by running npm start from your application's\ndirectory.\n\n\nTrying this Example\nClone and run the code in this tutorial by using the\nelectron/electron-quick-start repository.\nNote: Running this requires Git and npm.\n# Clone the repository\n$ git clone https://github.com/electron/electron-quick-start\n# Go into the repository\n$ cd electron-quick-start\n# Install dependencies\n$ npm install\n# Run the app\n$ npm start\nFor a list of boilerplates and tools to kick-start your development process,\nsee the Boilerplates and CLIs documentation.\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -455,7 +503,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/glossary.md", "url": "https://electronjs.org/docs/tutorial/glossary", "slug": "glossary", - "body": "Glossary\nThis page defines some terminology that is commonly used in Electron development.\n\n\nASAR\nASAR stands for Atom Shell Archive Format. An asar archive is a simple\ntar-like format that concatenates files into a single file. Electron can read\narbitrary files from it without unpacking the whole file.\nThe ASAR format was created primarily to improve performance on Windows... TODO\n\n\nBrightray\nBrightray was a static library\nthat made libchromiumcontent easier to use in applications. It is now\ndeprecated and has been merged into Electron's codebase.\n\n\nCRT\nThe C Run-time Library (CRT) is the part of the C++ Standard Library that\nincorporates the ISO C99 standard library. The Visual C++ libraries that\nimplement the CRT support native code development, and both mixed native and\nmanaged code, and pure managed code for .NET development.\n\n\nDMG\nAn Apple Disk Image is a packaging format used by macOS. DMG files are\ncommonly used for distributing application \"installers\". electron-builder\nsupports dmg as a build target.\n\n\nIME\nInput Method Editor. A program that allows users to enter characters and\nsymbols not found on their keyboard. For example, this allows users of Latin\nkeyboards to input Chinese, Japanese, Korean and Indic characters.\n\n\nIDL\nInterface description language. Write function signatures and data types in a format that can be used to generate interfaces in Java, C++, JavaScript, etc.\n\n\nIPC\nIPC stands for Inter-Process Communication. Electron uses IPC to send\nserialized JSON messages between the main and renderer processes.\n\n\nlibchromiumcontent\nA shared library that includes the Chromium Content module and all its\ndependencies (e.g., Blink, V8, etc.). Also referred to as \"libcc\".\n\ngithub.com/electron/libchromiumcontent\n\n\n\nmain process\nThe main process, commonly a file named main.js, is the entry point to every\nElectron app. It controls the life of the app, from open to close. It also\nmanages native elements such as the Menu, Menu Bar, Dock, Tray, etc. The\nmain process is responsible for creating each new renderer process in the app.\nThe full Node API is built in.\nEvery app's main process file is specified in the main property in\npackage.json. This is how electron . knows what file to execute at startup.\nIn Chromium, this process is referred to as the \"browser process\". It is\nrenamed in Electron to avoid confusion with renderer processes.\nSee also: process, renderer process\n\n\nMAS\nAcronym for Apple's Mac App Store. For details on submitting your app to the\nMAS, see the Mac App Store Submission Guide.\n\n\nMojo\nAn IPC system for communicating intra- or inter-process, and that's important because Chrome is keen on being able to split its work into separate processes or not, depending on memory pressures etc. \nSee https://chromium.googlesource.com/chromium/src/+/master/mojo/README.md\n\n\nnative modules\nNative modules (also called addons in\nNode.js) are modules written in C or C++ that can be loaded into Node.js or\nElectron using the require() function, and used as if they were an\nordinary Node.js module. They are used primarily to provide an interface\nbetween JavaScript running in Node.js and C/C++ libraries.\nNative Node modules are supported by Electron, but since Electron is very\nlikely to use a different V8 version from the Node binary installed in your\nsystem, you have to manually specify the location of Electron’s headers when\nbuilding native modules.\nSee also Using Native Node Modules.\n\n\nNSIS\nNullsoft Scriptable Install System is a script-driven Installer\nauthoring tool for Microsoft Windows. It is released under a combination of\nfree software licenses, and is a widely-used alternative to commercial\nproprietary products like InstallShield. electron-builder supports NSIS\nas a build target.\n\n\nOSR\nOSR (Off-screen rendering) can be used for loading heavy page in\nbackground and then displaying it after (it will be much faster).\nIt allows you to render page without showing it on screen.\n\n\nprocess\nA process is an instance of a computer program that is being executed. Electron\napps that make use of the main and one or many renderer process are\nactually running several programs simultaneously.\nIn Node.js and Electron, each running process has a process object. This\nobject is a global that provides information about, and control over, the\ncurrent process. As a global, it is always available to applications without\nusing require().\nSee also: main process, renderer process\n\n\nrenderer process\nThe renderer process is a browser window in your app. Unlike the main process,\nthere can be multiple of these and each is run in a separate process.\nThey can also be hidden.\nIn normal browsers, web pages usually run in a sandboxed environment and are not\nallowed access to native resources. Electron users, however, have the power to\nuse Node.js APIs in web pages allowing lower level operating system\ninteractions.\nSee also: process, main process\n\n\nSquirrel\nSquirrel is an open-source framework that enables Electron apps to update\nautomatically as new versions are released. See the autoUpdater API for\ninfo about getting started with Squirrel.\n\n\nuserland\nThis term originated in the Unix community, where \"userland\" or \"userspace\"\nreferred to programs that run outside of the operating system kernel. More\nrecently, the term has been popularized in the Node and npm community to\ndistinguish between the features available in \"Node core\" versus packages\npublished to the npm registry by the much larger \"user\" community.\nLike Node, Electron is focused on having a small set of APIs that provide\nall the necessary primitives for developing multi-platform desktop applications.\nThis design philosophy allows Electron to remain a flexible tool without being\noverly prescriptive about how it should be used. Userland enables users to\ncreate and share tools that provide additional functionality on top of what is\navailable in \"core\".\n\n\nV8\nV8 is Google's open source JavaScript engine. It is written in C++ and is\nused in Google Chrome. V8 can run standalone, or can be embedded into any C++ application.\nElectron builds V8 as part of Chromium and then points Node to that V8 when\nbuilding it.\nV8's version numbers always correspond to those of Google Chrome. Chrome 59\nincludes V8 5.9, Chrome 58 includes V8 5.8, etc.\n\ndevelopers.google.com/v8\nnodejs.org/api/v8.html\ndocs/development/v8-development.md\n\n\n\nwebview\nwebview tags are used to embed 'guest' content (such as external web pages) in\nyour Electron app. They are similar to iframes, but differ in that each\nwebview runs in a separate process. It doesn't have the same\npermissions as your web page and all interactions between your app and\nembedded content will be asynchronous. This keeps your app safe from the\nembedded content.\n", + "body": "Glossary\nThis page defines some terminology that is commonly used in Electron development.\n\n\nASAR\nASAR stands for Atom Shell Archive Format. An asar archive is a simple\ntar-like format that concatenates files into a single file. Electron can read\narbitrary files from it without unpacking the whole file.\nThe ASAR format was created primarily to improve performance on Windows... TODO\n\n\nCRT\nThe C Run-time Library (CRT) is the part of the C++ Standard Library that\nincorporates the ISO C99 standard library. The Visual C++ libraries that\nimplement the CRT support native code development, and both mixed native and\nmanaged code, and pure managed code for .NET development.\n\n\nDMG\nAn Apple Disk Image is a packaging format used by macOS. DMG files are\ncommonly used for distributing application \"installers\". electron-builder\nsupports dmg as a build target.\n\n\nIME\nInput Method Editor. A program that allows users to enter characters and\nsymbols not found on their keyboard. For example, this allows users of Latin\nkeyboards to input Chinese, Japanese, Korean and Indic characters.\n\n\nIDL\nInterface description language. Write function signatures and data types in a format that can be used to generate interfaces in Java, C++, JavaScript, etc.\n\n\nIPC\nIPC stands for Inter-Process Communication. Electron uses IPC to send\nserialized JSON messages between the main and renderer processes.\n\n\nlibchromiumcontent\nA shared library that includes the Chromium Content module and all its\ndependencies (e.g., Blink, V8, etc.). Also referred to as \"libcc\".\n\ngithub.com/electron/libchromiumcontent\n\n\n\nmain process\nThe main process, commonly a file named main.js, is the entry point to every\nElectron app. It controls the life of the app, from open to close. It also\nmanages native elements such as the Menu, Menu Bar, Dock, Tray, etc. The\nmain process is responsible for creating each new renderer process in the app.\nThe full Node API is built in.\nEvery app's main process file is specified in the main property in\npackage.json. This is how electron . knows what file to execute at startup.\nIn Chromium, this process is referred to as the \"browser process\". It is\nrenamed in Electron to avoid confusion with renderer processes.\nSee also: process, renderer process\n\n\nMAS\nAcronym for Apple's Mac App Store. For details on submitting your app to the\nMAS, see the Mac App Store Submission Guide.\n\n\nMojo\nAn IPC system for communicating intra- or inter-process, and that's important because Chrome is keen on being able to split its work into separate processes or not, depending on memory pressures etc.\nSee https://chromium.googlesource.com/chromium/src/+/master/mojo/README.md\n\n\nnative modules\nNative modules (also called addons in\nNode.js) are modules written in C or C++ that can be loaded into Node.js or\nElectron using the require() function, and used as if they were an\nordinary Node.js module. They are used primarily to provide an interface\nbetween JavaScript running in Node.js and C/C++ libraries.\nNative Node modules are supported by Electron, but since Electron is very\nlikely to use a different V8 version from the Node binary installed in your\nsystem, you have to manually specify the location of Electron’s headers when\nbuilding native modules.\nSee also Using Native Node Modules.\n\n\nNSIS\nNullsoft Scriptable Install System is a script-driven Installer\nauthoring tool for Microsoft Windows. It is released under a combination of\nfree software licenses, and is a widely-used alternative to commercial\nproprietary products like InstallShield. electron-builder supports NSIS\nas a build target.\n\n\nOSR\nOSR (Off-screen rendering) can be used for loading heavy page in\nbackground and then displaying it after (it will be much faster).\nIt allows you to render page without showing it on screen.\n\n\nprocess\nA process is an instance of a computer program that is being executed. Electron\napps that make use of the main and one or many renderer process are\nactually running several programs simultaneously.\nIn Node.js and Electron, each running process has a process object. This\nobject is a global that provides information about, and control over, the\ncurrent process. As a global, it is always available to applications without\nusing require().\nSee also: main process, renderer process\n\n\nrenderer process\nThe renderer process is a browser window in your app. Unlike the main process,\nthere can be multiple of these and each is run in a separate process.\nThey can also be hidden.\nIn normal browsers, web pages usually run in a sandboxed environment and are not\nallowed access to native resources. Electron users, however, have the power to\nuse Node.js APIs in web pages allowing lower level operating system\ninteractions.\nSee also: process, main process\n\n\nSquirrel\nSquirrel is an open-source framework that enables Electron apps to update\nautomatically as new versions are released. See the autoUpdater API for\ninfo about getting started with Squirrel.\n\n\nuserland\nThis term originated in the Unix community, where \"userland\" or \"userspace\"\nreferred to programs that run outside of the operating system kernel. More\nrecently, the term has been popularized in the Node and npm community to\ndistinguish between the features available in \"Node core\" versus packages\npublished to the npm registry by the much larger \"user\" community.\nLike Node, Electron is focused on having a small set of APIs that provide\nall the necessary primitives for developing multi-platform desktop applications.\nThis design philosophy allows Electron to remain a flexible tool without being\noverly prescriptive about how it should be used. Userland enables users to\ncreate and share tools that provide additional functionality on top of what is\navailable in \"core\".\n\n\nV8\nV8 is Google's open source JavaScript engine. It is written in C++ and is\nused in Google Chrome. V8 can run standalone, or can be embedded into any C++ application.\nElectron builds V8 as part of Chromium and then points Node to that V8 when\nbuilding it.\nV8's version numbers always correspond to those of Google Chrome. Chrome 59\nincludes V8 5.9, Chrome 58 includes V8 5.8, etc.\n\ndevelopers.google.com/v8\nnodejs.org/api/v8.html\ndocs/development/v8-development.md\n\n\n\nwebview\nwebview tags are used to embed 'guest' content (such as external web pages) in\nyour Electron app. They are similar to iframes, but differ in that each\nwebview runs in a separate process. It doesn't have the same\npermissions as your web page and all interactions between your app and\nembedded content will be asynchronous. This keeps your app safe from the\nembedded content.\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -519,7 +567,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/keyboard-shortcuts.md", "url": "https://electronjs.org/docs/tutorial/keyboard-shortcuts", "slug": "keyboard-shortcuts", - "body": "Keyboard Shortcuts\n\nConfigure local and global keyboard shortcuts\n\n\n\nLocal Shortcuts\nYou can use the Menu module to configure keyboard shortcuts that will\nbe triggered only when the app is focused. To do so, specify an\naccelerator property when creating a MenuItem.\nconst {Menu, MenuItem} = require('electron')\nconst menu = new Menu()\n\nmenu.append(new MenuItem({\n label: 'Print',\n accelerator: 'CmdOrCtrl+P',\n click: () => { console.log('time to print stuff') }\n}))\nYou can configure different key combinations based on the user's operating system.\n{\n accelerator: process.platform === 'darwin' ? 'Alt+Cmd+I' : 'Ctrl+Shift+I'\n}\n\n\nGlobal Shortcuts\nYou can use the globalShortcut module to detect keyboard events even when\nthe application does not have keyboard focus.\nconst {app, globalShortcut} = require('electron')\n\napp.on('ready', () => {\n globalShortcut.register('CommandOrControl+X', () => {\n console.log('CommandOrControl+X is pressed')\n })\n})\n\n\nShortcuts within a BrowserWindow\nIf you want to handle keyboard shortcuts for a BrowserWindow, you can use the keyup and keydown event listeners on the window object inside the renderer process.\nwindow.addEventListener('keyup', doSomething, true)\nNote the third parameter true which means the listener will always receive key presses before other listeners so they can't have stopPropagation() called on them.\nThe before-input-event event\nis emitted before dispatching keydown and keyup events in the page. It can\nbe used to catch and handle custom shortcuts that are not visible in the menu.\nIf you don't want to do manual shortcut parsing there are libraries that do advanced key detection such as mousetrap.\nMousetrap.bind('4', () => { console.log('4') })\nMousetrap.bind('?', () => { console.log('show shortcuts!') })\nMousetrap.bind('esc', () => { console.log('escape') }, 'keyup')\n\n// combinations\nMousetrap.bind('command+shift+k', () => { console.log('command shift k') })\n\n// map multiple combinations to the same callback\nMousetrap.bind(['command+k', 'ctrl+k'], () => {\n console.log('command k or control k')\n\n // return false to prevent default behavior and stop event from bubbling\n return false\n})\n\n// gmail style sequences\nMousetrap.bind('g i', () => { console.log('go to inbox') })\nMousetrap.bind('* a', () => { console.log('select all') })\n\n// konami code!\nMousetrap.bind('up up down down left right left right b a enter', () => {\n console.log('konami code')\n})\n", + "body": "Keyboard Shortcuts\n\nConfigure local and global keyboard shortcuts\n\n\n\nLocal Shortcuts\nYou can use the Menu module to configure keyboard shortcuts that will\nbe triggered only when the app is focused. To do so, specify an\naccelerator property when creating a MenuItem.\nconst { Menu, MenuItem } = require('electron')\nconst menu = new Menu()\n\nmenu.append(new MenuItem({\n label: 'Print',\n accelerator: 'CmdOrCtrl+P',\n click: () => { console.log('time to print stuff') }\n}))\nYou can configure different key combinations based on the user's operating system.\n{\n accelerator: process.platform === 'darwin' ? 'Alt+Cmd+I' : 'Ctrl+Shift+I'\n}\n\n\nGlobal Shortcuts\nYou can use the globalShortcut module to detect keyboard events even when\nthe application does not have keyboard focus.\nconst { app, globalShortcut } = require('electron')\n\napp.on('ready', () => {\n globalShortcut.register('CommandOrControl+X', () => {\n console.log('CommandOrControl+X is pressed')\n })\n})\n\n\nShortcuts within a BrowserWindow\nIf you want to handle keyboard shortcuts for a BrowserWindow, you can use the keyup and keydown event listeners on the window object inside the renderer process.\nwindow.addEventListener('keyup', doSomething, true)\nNote the third parameter true which means the listener will always receive key presses before other listeners so they can't have stopPropagation() called on them.\nThe before-input-event event\nis emitted before dispatching keydown and keyup events in the page. It can\nbe used to catch and handle custom shortcuts that are not visible in the menu.\nIf you don't want to do manual shortcut parsing there are libraries that do advanced key detection such as mousetrap.\nMousetrap.bind('4', () => { console.log('4') })\nMousetrap.bind('?', () => { console.log('show shortcuts!') })\nMousetrap.bind('esc', () => { console.log('escape') }, 'keyup')\n\n// combinations\nMousetrap.bind('command+shift+k', () => { console.log('command shift k') })\n\n// map multiple combinations to the same callback\nMousetrap.bind(['command+k', 'ctrl+k'], () => {\n console.log('command k or control k')\n\n // return false to prevent default behavior and stop event from bubbling\n return false\n})\n\n// gmail style sequences\nMousetrap.bind('g i', () => { console.log('go to inbox') })\nMousetrap.bind('* a', () => { console.log('select all') })\n\n// konami code!\nMousetrap.bind('up up down down left right left right b a enter', () => {\n console.log('konami code')\n})\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -551,7 +599,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/mac-app-store-submission-guide.md", "url": "https://electronjs.org/docs/tutorial/mac-app-store-submission-guide", "slug": "mac-app-store-submission-guide", - "body": "Mac App Store Submission Guide\nSince v0.34.0, Electron allows submitting packaged apps to the Mac App Store\n(MAS). This guide provides information on: how to submit your app and the\nlimitations of the MAS build.\nNote: Submitting an app to Mac App Store requires enrolling Apple Developer\nProgram, which costs money.\n\n\nHow to Submit Your App\nThe following steps introduce a simple way to submit your app to Mac App Store.\nHowever, these steps do not ensure your app will be approved by Apple; you\nstill need to read Apple's Submitting Your App guide on\nhow to meet the Mac App Store requirements.\n\n\nGet Certificate\nTo submit your app to the Mac App Store, you first must get a certificate from\nApple. You can follow these existing guides on web.\n\n\nGet Team ID\nBefore signing your app, you need to know the Team ID of your account. To locate\nyour Team ID, Sign in to Apple Developer Center,\nand click Membership in the sidebar. Your Team ID appears in the Membership\nInformation section under the team name.\n\n\nSign Your App\nAfter finishing the preparation work, you can package your app by following\nApplication Distribution, and then proceed to\nsigning your app.\nFirst, you have to add a ElectronTeamID key to your app's Info.plist, which\nhas your Team ID as value:\n\n\n ...\n ElectronTeamID\n TEAM_ID\n\n\nThen, you need to prepare three entitlements files.\nchild.plist:\n\n\n\n \n com.apple.security.app-sandbox\n \n com.apple.security.inherit\n \n \n\nparent.plist:\n\n\n\n \n com.apple.security.app-sandbox\n \n com.apple.security.application-groups\n TEAM_ID.your.bundle.id\n \n\nloginhelper.plist:\n\n\n\n \n com.apple.security.app-sandbox\n \n \n\nYou have to replace TEAM_ID with your Team ID, and replace your.bundle.id\nwith the Bundle ID of your app.\nAnd then sign your app with the following script:\n#!/bin/bash\n\n# Name of your app.\nAPP=\"YourApp\"\n# The path of your app to sign.\nAPP_PATH=\"/path/to/YourApp.app\"\n# The path to the location you want to put the signed package.\nRESULT_PATH=\"~/Desktop/$APP.pkg\"\n# The name of certificates you requested.\nAPP_KEY=\"3rd Party Mac Developer Application: Company Name (APPIDENTITY)\"\nINSTALLER_KEY=\"3rd Party Mac Developer Installer: Company Name (APPIDENTITY)\"\n# The path of your plist files.\nCHILD_PLIST=\"/path/to/child.plist\"\nPARENT_PLIST=\"/path/to/parent.plist\"\nLOGINHELPER_PLIST=\"/path/to/loginhelper.plist\"\n\nFRAMEWORKS_PATH=\"$APP_PATH/Contents/Frameworks\"\n\ncodesign -s \"$APP_KEY\" -f --entitlements \"$CHILD_PLIST\" \"$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Electron Framework\"\ncodesign -s \"$APP_KEY\" -f --entitlements \"$CHILD_PLIST\" \"$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Libraries/libffmpeg.dylib\"\ncodesign -s \"$APP_KEY\" -f --entitlements \"$CHILD_PLIST\" \"$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Libraries/libnode.dylib\"\ncodesign -s \"$APP_KEY\" -f --entitlements \"$CHILD_PLIST\" \"$FRAMEWORKS_PATH/Electron Framework.framework\"\ncodesign -s \"$APP_KEY\" -f --entitlements \"$CHILD_PLIST\" \"$FRAMEWORKS_PATH/$APP Helper.app/Contents/MacOS/$APP Helper\"\ncodesign -s \"$APP_KEY\" -f --entitlements \"$CHILD_PLIST\" \"$FRAMEWORKS_PATH/$APP Helper.app/\"\ncodesign -s \"$APP_KEY\" -f --entitlements \"$CHILD_PLIST\" \"$FRAMEWORKS_PATH/$APP Helper EH.app/Contents/MacOS/$APP Helper EH\"\ncodesign -s \"$APP_KEY\" -f --entitlements \"$CHILD_PLIST\" \"$FRAMEWORKS_PATH/$APP Helper EH.app/\"\ncodesign -s \"$APP_KEY\" -f --entitlements \"$CHILD_PLIST\" \"$FRAMEWORKS_PATH/$APP Helper NP.app/Contents/MacOS/$APP Helper NP\"\ncodesign -s \"$APP_KEY\" -f --entitlements \"$CHILD_PLIST\" \"$FRAMEWORKS_PATH/$APP Helper NP.app/\"\ncodesign -s \"$APP_KEY\" -f --entitlements \"$LOGINHELPER_PLIST\" \"$APP_PATH/Contents/Library/LoginItems/$APP Login Helper.app/Contents/MacOS/$APP Login Helper\"\ncodesign -s \"$APP_KEY\" -f --entitlements \"$LOGINHELPER_PLIST\" \"$APP_PATH/Contents/Library/LoginItems/$APP Login Helper.app/\"\ncodesign -s \"$APP_KEY\" -f --entitlements \"$CHILD_PLIST\" \"$APP_PATH/Contents/MacOS/$APP\"\ncodesign -s \"$APP_KEY\" -f --entitlements \"$PARENT_PLIST\" \"$APP_PATH\"\n\nproductbuild --component \"$APP_PATH\" /Applications --sign \"$INSTALLER_KEY\" \"$RESULT_PATH\"\nIf you are new to app sandboxing under macOS, you should also read through\nApple's Enabling App Sandbox to have a basic idea, then\nadd keys for the permissions needed by your app to the entitlements files.\nApart from manually signing your app, you can also choose to use the\nelectron-osx-sign module to do the job.\n\n\nSign Native Modules\nNative modules used in your app also need to be signed. If using\nelectron-osx-sign, be sure to include the path to the built binaries in the\nargument list:\nelectron-osx-sign YourApp.app YourApp.app/Contents/Resources/app/node_modules/nativemodule/build/release/nativemodule\nAlso note that native modules may have intermediate files produced which should\nnot be included (as they would also need to be signed). If you use\nelectron-packager before version 8.1.0, add\n--ignore=.+\\.o$ to your build step to ignore these files. Versions 8.1.0 and\nlater ignores those files by default.\n\n\nUpload Your App\nAfter signing your app, you can use Application Loader to upload it to iTunes\nConnect for processing, making sure you have created a record\nbefore uploading.\n\n\nSubmit Your App for Review\nAfter these steps, you can submit your app for review.\n\n\nLimitations of MAS Build\nIn order to satisfy all requirements for app sandboxing, the following modules\nhave been disabled in the MAS build:\n\ncrashReporter\nautoUpdater\n\nand the following behaviors have been changed:\n\nVideo capture may not work for some machines.\nCertain accessibility features may not work.\nApps will not be aware of DNS changes.\n\nAlso, due to the usage of app sandboxing, the resources which can be accessed by\nthe app are strictly limited; you can read App Sandboxing for\nmore information.\n\n\nAdditional Entitlements\nDepending on which Electron APIs your app uses, you may need to add additional\nentitlements to your parent.plist file to be able to use these APIs from your\napp's Mac App Store build.\n\n\nNetwork Access\nEnable outgoing network connections to allow your app to connect to a server:\ncom.apple.security.network.client\n\nEnable incoming network connections to allow your app to open a network\nlistening socket:\ncom.apple.security.network.server\n\nSee the Enabling Network Access documentation for more\ndetails.\n\n\ndialog.showOpenDialog\ncom.apple.security.files.user-selected.read-only\n\nSee the Enabling User-Selected File Access documentation for\nmore details.\n\n\ndialog.showSaveDialog\ncom.apple.security.files.user-selected.read-write\n\nSee the Enabling User-Selected File Access documentation for\nmore details.\n\n\nKnown issues\n\n\nshell.openItem(filePath)\nThis will fail when the app is signed for distribution in the Mac App Store.\nSubscribe to #9005 for updates.\n\n\nWorkaround\nshell.openExternal('file://' + filePath) will open the file in the default application as long as the extension is associated with an installed app.\n\n\nCryptographic Algorithms Used by Electron\nDepending on the country and region you are located, Mac App Store may require\ndocumenting the cryptographic algorithms used in your app, and even ask you to\nsubmit a copy of U.S. Encryption Registration (ERN) approval.\nElectron uses following cryptographic algorithms:\n\nAES - NIST SP 800-38A, NIST SP 800-38D, RFC 3394\nHMAC - FIPS 198-1\nECDSA - ANS X9.62–2005\nECDH - ANS X9.63–2001\nHKDF - NIST SP 800-56C\nPBKDF2 - RFC 2898\nRSA - RFC 3447\nSHA - FIPS 180-4\nBlowfish - https://www.schneier.com/cryptography/blowfish/\nCAST - RFC 2144, RFC 2612\nDES - FIPS 46-3\nDH - RFC 2631\nDSA - ANSI X9.30\nEC - SEC 1\nIDEA - \"On the Design and Security of Block Ciphers\" book by X. Lai\nMD2 - RFC 1319\nMD4 - RFC 6150\nMD5 - RFC 1321\nMDC2 - ISO/IEC 10118-2\nRC2 - RFC 2268\nRC4 - RFC 4345\nRC5 - http://people.csail.mit.edu/rivest/Rivest-rc5rev.pdf\nRIPEMD - ISO/IEC 10118-3\n\nOn how to get the ERN approval, you can reference the article: How to legally\nsubmit an app to Apple’s App Store when it uses encryption (or how to obtain an\nERN).\n", + "body": "Mac App Store Submission Guide\nSince v0.34.0, Electron allows submitting packaged apps to the Mac App Store\n(MAS). This guide provides information on: how to submit your app and the\nlimitations of the MAS build.\nNote: Submitting an app to Mac App Store requires enrolling in the Apple Developer\nProgram, which costs money.\n\n\nHow to Submit Your App\nThe following steps introduce a simple way to submit your app to Mac App Store.\nHowever, these steps do not ensure your app will be approved by Apple; you\nstill need to read Apple's Submitting Your App guide on\nhow to meet the Mac App Store requirements.\n\n\nGet Certificate\nTo submit your app to the Mac App Store, you first must get a certificate from\nApple. You can follow these existing guides on web.\n\n\nGet Team ID\nBefore signing your app, you need to know the Team ID of your account. To locate\nyour Team ID, Sign in to Apple Developer Center,\nand click Membership in the sidebar. Your Team ID appears in the Membership\nInformation section under the team name.\n\n\nSign Your App\nAfter finishing the preparation work, you can package your app by following\nApplication Distribution, and then proceed to\nsigning your app.\nFirst, you have to add a ElectronTeamID key to your app's Info.plist, which\nhas your Team ID as its value:\n\n\n ...\n ElectronTeamID\n TEAM_ID\n\n\nThen, you need to prepare three entitlements files.\nchild.plist:\n\n\n\n \n com.apple.security.app-sandbox\n \n com.apple.security.inherit\n \n \n\nparent.plist:\n\n\n\n \n com.apple.security.app-sandbox\n \n com.apple.security.application-groups\n TEAM_ID.your.bundle.id\n \n\nloginhelper.plist:\n\n\n\n \n com.apple.security.app-sandbox\n \n \n\nYou have to replace TEAM_ID with your Team ID, and replace your.bundle.id\nwith the Bundle ID of your app.\nAnd then sign your app with the following script:\n#!/bin/bash\n\n# Name of your app.\nAPP=\"YourApp\"\n# The path of your app to sign.\nAPP_PATH=\"/path/to/YourApp.app\"\n# The path to the location you want to put the signed package.\nRESULT_PATH=\"~/Desktop/$APP.pkg\"\n# The name of certificates you requested.\nAPP_KEY=\"3rd Party Mac Developer Application: Company Name (APPIDENTITY)\"\nINSTALLER_KEY=\"3rd Party Mac Developer Installer: Company Name (APPIDENTITY)\"\n# The path of your plist files.\nCHILD_PLIST=\"/path/to/child.plist\"\nPARENT_PLIST=\"/path/to/parent.plist\"\nLOGINHELPER_PLIST=\"/path/to/loginhelper.plist\"\n\nFRAMEWORKS_PATH=\"$APP_PATH/Contents/Frameworks\"\n\ncodesign -s \"$APP_KEY\" -f --entitlements \"$CHILD_PLIST\" \"$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Electron Framework\"\ncodesign -s \"$APP_KEY\" -f --entitlements \"$CHILD_PLIST\" \"$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Libraries/libffmpeg.dylib\"\ncodesign -s \"$APP_KEY\" -f --entitlements \"$CHILD_PLIST\" \"$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A/Libraries/libnode.dylib\"\ncodesign -s \"$APP_KEY\" -f --entitlements \"$CHILD_PLIST\" \"$FRAMEWORKS_PATH/Electron Framework.framework\"\ncodesign -s \"$APP_KEY\" -f --entitlements \"$CHILD_PLIST\" \"$FRAMEWORKS_PATH/$APP Helper.app/Contents/MacOS/$APP Helper\"\ncodesign -s \"$APP_KEY\" -f --entitlements \"$CHILD_PLIST\" \"$FRAMEWORKS_PATH/$APP Helper.app/\"\ncodesign -s \"$APP_KEY\" -f --entitlements \"$LOGINHELPER_PLIST\" \"$APP_PATH/Contents/Library/LoginItems/$APP Login Helper.app/Contents/MacOS/$APP Login Helper\"\ncodesign -s \"$APP_KEY\" -f --entitlements \"$LOGINHELPER_PLIST\" \"$APP_PATH/Contents/Library/LoginItems/$APP Login Helper.app/\"\ncodesign -s \"$APP_KEY\" -f --entitlements \"$CHILD_PLIST\" \"$APP_PATH/Contents/MacOS/$APP\"\ncodesign -s \"$APP_KEY\" -f --entitlements \"$PARENT_PLIST\" \"$APP_PATH\"\n\nproductbuild --component \"$APP_PATH\" /Applications --sign \"$INSTALLER_KEY\" \"$RESULT_PATH\"\nIf you are new to app sandboxing under macOS, you should also read through\nApple's Enabling App Sandbox to have a basic idea, then\nadd keys for the permissions needed by your app to the entitlements files.\nApart from manually signing your app, you can also choose to use the\nelectron-osx-sign module to do the job.\n\n\nSign Native Modules\nNative modules used in your app also need to be signed. If using\nelectron-osx-sign, be sure to include the path to the built binaries in the\nargument list:\nelectron-osx-sign YourApp.app YourApp.app/Contents/Resources/app/node_modules/nativemodule/build/release/nativemodule\nAlso note that native modules may have intermediate files produced which should\nnot be included (as they would also need to be signed). If you use\nelectron-packager before version 8.1.0, add\n--ignore=.+\\.o$ to your build step to ignore these files. Versions 8.1.0 and\nlater ignore those files by default.\n\n\nUpload Your App\nAfter signing your app, you can use Application Loader to upload it to iTunes\nConnect for processing, making sure you have created a record\nbefore uploading.\n\n\nSubmit Your App for Review\nAfter these steps, you can submit your app for review.\n\n\nLimitations of MAS Build\nIn order to satisfy all requirements for app sandboxing, the following modules\nhave been disabled in the MAS build:\n\ncrashReporter\nautoUpdater\n\nand the following behaviors have been changed:\n\nVideo capture may not work for some machines.\nCertain accessibility features may not work.\nApps will not be aware of DNS changes.\n\nAlso, due to the usage of app sandboxing, the resources which can be accessed by\nthe app are strictly limited; you can read App Sandboxing for\nmore information.\n\n\nAdditional Entitlements\nDepending on which Electron APIs your app uses, you may need to add additional\nentitlements to your parent.plist file to be able to use these APIs from your\napp's Mac App Store build.\n\n\nNetwork Access\nEnable outgoing network connections to allow your app to connect to a server:\ncom.apple.security.network.client\n\nEnable incoming network connections to allow your app to open a network\nlistening socket:\ncom.apple.security.network.server\n\nSee the Enabling Network Access documentation for more\ndetails.\n\n\ndialog.showOpenDialog\ncom.apple.security.files.user-selected.read-only\n\nSee the Enabling User-Selected File Access documentation for\nmore details.\n\n\ndialog.showSaveDialog\ncom.apple.security.files.user-selected.read-write\n\nSee the Enabling User-Selected File Access documentation for\nmore details.\n\n\nCryptographic Algorithms Used by Electron\nDepending on the country and region you are located, Mac App Store may require\ndocumenting the cryptographic algorithms used in your app, and even ask you to\nsubmit a copy of U.S. Encryption Registration (ERN) approval.\nElectron uses following cryptographic algorithms:\n\nAES - NIST SP 800-38A, NIST SP 800-38D, RFC 3394\nHMAC - FIPS 198-1\nECDSA - ANS X9.62–2005\nECDH - ANS X9.63–2001\nHKDF - NIST SP 800-56C\nPBKDF2 - RFC 2898\nRSA - RFC 3447\nSHA - FIPS 180-4\nBlowfish - https://www.schneier.com/cryptography/blowfish/\nCAST - RFC 2144, RFC 2612\nDES - FIPS 46-3\nDH - RFC 2631\nDSA - ANSI X9.30\nEC - SEC 1\nIDEA - \"On the Design and Security of Block Ciphers\" book by X. Lai\nMD2 - RFC 1319\nMD4 - RFC 6150\nMD5 - RFC 1321\nMDC2 - ISO/IEC 10118-2\nRC2 - RFC 2268\nRC4 - RFC 4345\nRC5 - http://people.csail.mit.edu/rivest/Rivest-rc5rev.pdf\nRIPEMD - ISO/IEC 10118-3\n\nOn how to get the ERN approval, you can reference the article: How to legally\nsubmit an app to Apple’s App Store when it uses encryption (or how to obtain an\nERN).\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -567,7 +615,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/macos-dock.md", "url": "https://electronjs.org/docs/tutorial/macos-dock", "slug": "macos-dock", - "body": "MacOS Dock\nElectron has APIs to configure the app's icon in the macOS Dock. A macOS-only\nAPI exists to create a a custom dock menu, but\nElectron also uses the app's dock icon to implement cross-platform features\nlike recent documents and\napplication progress.\nThe custom dock is commonly used to add shortcuts to tasks the user wouldn't\nwant to open the whole app window for.\nDock menu of Terminal.app:\n\nTo set your custom dock menu, you can use the app.dock.setMenu API, which is\nonly available on macOS:\nconst { app, Menu } = require('electron')\n\nconst dockMenu = Menu.buildFromTemplate([\n {\n label: 'New Window',\n click () { console.log('New Window') }\n }, {\n label: 'New Window with Settings',\n submenu: [\n { label: 'Basic' },\n { label: 'Pro' }\n ]\n },\n { label: 'New Command...' }\n])\n\napp.dock.setMenu(dockMenu)\n", + "body": "MacOS Dock\nElectron has APIs to configure the app's icon in the macOS Dock. A macOS-only\nAPI exists to create a custom dock menu, but\nElectron also uses the app's dock icon to implement cross-platform features\nlike recent documents and\napplication progress.\nThe custom dock is commonly used to add shortcuts to tasks the user wouldn't\nwant to open the whole app window for.\nDock menu of Terminal.app:\n\nTo set your custom dock menu, you can use the app.dock.setMenu API, which is\nonly available on macOS:\nconst { app, Menu } = require('electron')\n\nconst dockMenu = Menu.buildFromTemplate([\n {\n label: 'New Window',\n click () { console.log('New Window') }\n }, {\n label: 'New Window with Settings',\n submenu: [\n { label: 'Basic' },\n { label: 'Pro' }\n ]\n },\n { label: 'New Command...' }\n])\n\napp.dock.setMenu(dockMenu)\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -577,6 +625,22 @@ "tutorial:macos-dock" ] }, + { + "objectID": "tutorial-mojave-dark-mode-guide", + "title": "Mojave Dark Mode", + "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/mojave-dark-mode-guide.md", + "url": "https://electronjs.org/docs/tutorial/mojave-dark-mode-guide", + "slug": "mojave-dark-mode-guide", + "body": "Mojave Dark Mode\nIn macOS 10.14 Mojave, Apple introduced a new system-wide dark mode\nfor all macOS computers. By default Electron apps do not automatically adjust their UI and native interfaces\nto the dark mode setting when it's enabled. This is primarily due to Apple's own guidelines saying you shouldn't\nuse the dark mode native interfaces if your app's own interfaces don't support dark mode themselves.\nIf your app does have a dark mode, you can make your Electron app follow the system-wide dark mode setting.\n\n\nAutomatically updating the native interfaces\n\"Native Interfaces\" include the file picker, window border, dialogs, context menus and more; basically anything where\nthe UI comes from macOS and not your app. In order to make these interfaces update to dark mode automatically, you need\nto set the NSRequiresAquaSystemAppearance key in your app's Info.plist file to false. E.g.\n\n\n ...\n NSRequiresAquaSystemAppearance\n \n ...\n\n\nIf you are using electron-packager >= 12.2.0 or\nelectron-forge >= 6 you can set the\ndarwinDarkModeSupport\noption when packaging and this key will be set for you.\nIf you are using electron-builder >= 20.37.0 you can set the darkModeSupport option.\n\n\nAutomatically updating your own interfaces\nIf your app has its own dark mode you should toggle it on and off in sync with the system's dark mode setting. You can do\nthis by listening for the theme changed event on Electron's systemPreferences module. E.g.\nconst { systemPreferences } = require('electron')\n\nsystemPreferences.subscribeNotification(\n 'AppleInterfaceThemeChangedNotification',\n function theThemeHasChanged () {\n updateMyAppTheme(systemPreferences.isDarkMode())\n }\n)\n", + "keyValuePairs": [ + "is:doc", + "is:tutorial", + "doc:Mojave Dark Mode", + "doc:mojave-dark-mode-guide", + "tutorial:Mojave Dark Mode", + "tutorial:mojave-dark-mode-guide" + ] + }, { "objectID": "tutorial-multithreading", "title": "Multithreading", @@ -615,7 +679,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/notifications.md", "url": "https://electronjs.org/docs/tutorial/notifications", "slug": "notifications", - "body": "Notifications (Windows, Linux, macOS)\nAll three operating systems provide means for applications to send notifications\nto the user. Electron conveniently allows developers to send notifications with\nthe HTML5 Notification API, using\nthe currently running operating system's native notification APIs to display it.\nNote: Since this is an HTML5 API it is only available in the renderer process. If\nyou want to show Notifications in the main process please check out the\nNotification module.\nlet myNotification = new Notification('Title', {\n body: 'Lorem Ipsum Dolor Sit Amet'\n})\n\nmyNotification.onclick = () => {\n console.log('Notification clicked')\n}\nWhile code and user experience across operating systems are similar, there\nare subtle differences.\n\n\nWindows\n\nOn Windows 10, notifications \"just work\".\nOn Windows 8.1 and Windows 8, a shortcut to your app, with an Application User\nModel ID, must be installed to the Start screen. Note,\nhowever, that it does not need to be pinned to the Start screen.\nOn Windows 7, notifications work via a custom implementation which visually\nresembles the native one on newer systems.\n\nFurthermore, in Windows 8, the maximum length for the notification body is 250\ncharacters, with the Windows team recommending that notifications should be kept\nto 200 characters. That said, that limitation has been removed in Windows 10, with\nthe Windows team asking developers to be reasonable. Attempting to send gigantic\namounts of text to the API (thousands of characters) might result in instability.\n\n\nAdvanced Notifications\nLater versions of Windows allow for advanced notifications, with custom templates,\nimages, and other flexible elements. To send those notifications (from either the\nmain process or the renderer process), use the userland module\nelectron-windows-notifications,\nwhich uses native Node addons to send ToastNotification and TileNotification objects.\nWhile notifications including buttons work with electron-windows-notifications,\nhandling replies requires the use of electron-windows-interactive-notifications, which\nhelps with registering the required COM components and calling your Electron app with\nthe entered user data.\n\n\nQuiet Hours / Presentation Mode\nTo detect whether or not you're allowed to send a notification, use the userland module\nelectron-notification-state.\nThis allows you to determine ahead of time whether or not Windows will silently throw\nthe notification away.\n\n\nmacOS\nNotifications are straight-forward on macOS, but you should be aware of\nApple's Human Interface guidelines regarding notifications.\nNote that notifications are limited to 256 bytes in size and will be truncated\nif you exceed that limit.\n\n\nAdvanced Notifications\nLater versions of macOS allow for notifications with an input field, allowing the user\nto quickly reply to a notification. In order to send notifications with an input field,\nuse the userland module node-mac-notifier.\n\n\nDo not disturb / Session State\nTo detect whether or not you're allowed to send a notification, use the userland module\nelectron-notification-state.\nThis will allow you to detect ahead of time whether or not the notification will be displayed.\n\n\nLinux\nNotifications are sent using libnotify which can show notifications on any\ndesktop environment that follows Desktop Notifications\nSpecification, including Cinnamon, Enlightenment, Unity,\nGNOME, KDE.\n", + "body": "Notifications (Windows, Linux, macOS)\nAll three operating systems provide means for applications to send notifications\nto the user. Electron conveniently allows developers to send notifications with\nthe HTML5 Notification API, using\nthe currently running operating system's native notification APIs to display it.\nNote: Since this is an HTML5 API it is only available in the renderer process. If\nyou want to show Notifications in the main process please check out the\nNotification module.\nlet myNotification = new Notification('Title', {\n body: 'Lorem Ipsum Dolor Sit Amet'\n})\n\nmyNotification.onclick = () => {\n console.log('Notification clicked')\n}\nWhile code and user experience across operating systems are similar, there\nare subtle differences.\n\n\nWindows\n\nOn Windows 10, a shortcut to your app with an Application User\nModel ID must be installed to the Start Menu. This can be overkill during development, so adding node_modules\\electron\\dist\\electron.exe to your Start Menu also does the trick. Navigate to the file in Explorer, right-click and 'Pin to Start Menu'. You will then need to add the line app.setAppUserModelId(process.execPath) to your main process to see notifications.\nOn Windows 8.1 and Windows 8, a shortcut to your app with an Application User\nModel ID must be installed to the Start screen. Note,\nhowever, that it does not need to be pinned to the Start screen.\nOn Windows 7, notifications work via a custom implementation which visually\nresembles the native one on newer systems.\n\nElectron attempts to automate the work around the Application User Model ID. When\nElectron is used together with the installation and update framework Squirrel,\nshortcuts will automatically be set correctly. Furthermore,\nElectron will detect that Squirrel was used and will automatically call\napp.setAppUserModelId() with the correct value. During development, you may have\nto call app.setAppUserModelId() yourself.\nFurthermore, in Windows 8, the maximum length for the notification body is 250\ncharacters, with the Windows team recommending that notifications should be kept\nto 200 characters. That said, that limitation has been removed in Windows 10, with\nthe Windows team asking developers to be reasonable. Attempting to send gigantic\namounts of text to the API (thousands of characters) might result in instability.\n\n\nAdvanced Notifications\nLater versions of Windows allow for advanced notifications, with custom templates,\nimages, and other flexible elements. To send those notifications (from either the\nmain process or the renderer process), use the userland module\nelectron-windows-notifications,\nwhich uses native Node addons to send ToastNotification and TileNotification objects.\nWhile notifications including buttons work with electron-windows-notifications,\nhandling replies requires the use of electron-windows-interactive-notifications, which\nhelps with registering the required COM components and calling your Electron app with\nthe entered user data.\n\n\nQuiet Hours / Presentation Mode\nTo detect whether or not you're allowed to send a notification, use the userland module\nelectron-notification-state.\nThis allows you to determine ahead of time whether or not Windows will silently throw\nthe notification away.\n\n\nmacOS\nNotifications are straight-forward on macOS, but you should be aware of\nApple's Human Interface guidelines regarding notifications.\nNote that notifications are limited to 256 bytes in size and will be truncated\nif you exceed that limit.\n\n\nAdvanced Notifications\nLater versions of macOS allow for notifications with an input field, allowing the user\nto quickly reply to a notification. In order to send notifications with an input field,\nuse the userland module node-mac-notifier.\n\n\nDo not disturb / Session State\nTo detect whether or not you're allowed to send a notification, use the userland module\nelectron-notification-state.\nThis will allow you to detect ahead of time whether or not the notification will be displayed.\n\n\nLinux\nNotifications are sent using libnotify which can show notifications on any\ndesktop environment that follows Desktop Notifications\nSpecification, including Cinnamon, Enlightenment, Unity,\nGNOME, KDE.\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -647,7 +711,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/online-offline-events.md", "url": "https://electronjs.org/docs/tutorial/online-offline-events", "slug": "online-offline-events", - "body": "Online/Offline Event Detection\nOnline and offline event detection can be implemented in the renderer process using the navigator.onLine attribute, part of standard HTML5 API.\nThe navigator.onLine attribute returns false if any network requests are guaranteed to fail i.e. definitely offline (disconnected from the network). It returns true in all other cases.\nSince all other conditions return true, one has to be mindful of getting false positives, as we cannot assume true value necessarily means that Electron can access the internet. Such as in cases where the computer is running a virtualization software that has virtual ethernet adapters that are always “connected.”\nTherefore, if you really want to determine the internet access status of Electron,\nyou should develop additional means for checking.\nExample:\nmain.js\nconst {app, BrowserWindow} = require('electron')\n\nlet onlineStatusWindow\n\napp.on('ready', () => {\n onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false })\n onlineStatusWindow.loadURL(`file://${__dirname}/online-status.html`)\n})\nonline-status.html\n\n\n\n\n\n\nThere may be instances where you want to respond to these events in the\nmain process as well. The main process however does not have a\nnavigator object and thus cannot detect these events directly. Using\nElectron's inter-process communication utilities, the events can be forwarded\nto the main process and handled as needed, as shown in the following example.\nmain.js\nconst {app, BrowserWindow, ipcMain} = require('electron')\nlet onlineStatusWindow\n\napp.on('ready', () => {\n onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false })\n onlineStatusWindow.loadURL(`file://${__dirname}/online-status.html`)\n})\n\nipcMain.on('online-status-changed', (event, status) => {\n console.log(status)\n})\nonline-status.html\n\n\n\n\n\n\n", + "body": "Online/Offline Event Detection\nOnline and offline event detection can be implemented in the renderer process using the navigator.onLine attribute, part of standard HTML5 API.\nThe navigator.onLine attribute returns false if any network requests are guaranteed to fail i.e. definitely offline (disconnected from the network). It returns true in all other cases.\nSince all other conditions return true, one has to be mindful of getting false positives, as we cannot assume true value necessarily means that Electron can access the internet. Such as in cases where the computer is running a virtualization software that has virtual ethernet adapters that are always “connected.”\nTherefore, if you really want to determine the internet access status of Electron,\nyou should develop additional means for checking.\nExample:\nmain.js\nconst { app, BrowserWindow } = require('electron')\n\nlet onlineStatusWindow\n\napp.on('ready', () => {\n onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false })\n onlineStatusWindow.loadURL(`file://${__dirname}/online-status.html`)\n})\nonline-status.html\n\n\n\n\n\n\nThere may be instances where you want to respond to these events in the\nmain process as well. The main process however does not have a\nnavigator object and thus cannot detect these events directly. Using\nElectron's inter-process communication utilities, the events can be forwarded\nto the main process and handled as needed, as shown in the following example.\nmain.js\nconst { app, BrowserWindow, ipcMain } = require('electron')\nlet onlineStatusWindow\n\napp.on('ready', () => {\n onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false })\n onlineStatusWindow.loadURL(`file://${__dirname}/online-status.html`)\n})\n\nipcMain.on('online-status-changed', (event, status) => {\n console.log(status)\n})\nonline-status.html\n\n\n\n\n\n\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -657,22 +721,6 @@ "tutorial:online-offline-events" ] }, - { - "objectID": "tutorial-planned-breaking-changes", - "title": "Planned Breaking API Changes (3.0)", - "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/planned-breaking-changes.md", - "url": "https://electronjs.org/docs/tutorial/planned-breaking-changes", - "slug": "planned-breaking-changes", - "body": "Planned Breaking API Changes (3.0)\nThe following list includes the APIs that will be removed in Electron 3.0.\nThere is no timetable for when this release will occur but deprecation\nwarnings will be added at least one major version beforehand.\n\n\napp\n// Deprecated\napp.getAppMemoryInfo()\n// Replace with\napp.getAppMetrics()\n\n\nBrowserWindow\n// Deprecated\nlet optionsA = {webPreferences: {blinkFeatures: ''}}\nlet windowA = new BrowserWindow(optionsA)\n// Replace with\nlet optionsB = {webPreferences: {enableBlinkFeatures: ''}}\nlet windowB = new BrowserWindow(optionsB)\n\n\nclipboard\n// Deprecated\nclipboard.readRtf()\n// Replace with\nclipboard.readRTF()\n\n// Deprecated\nclipboard.writeRtf()\n// Replace with\nclipboard.writeRTF()\n\n// Deprecated\nclipboard.readHtml()\n// Replace with\nclipboard.readHTML()\n\n// Deprecated\nclipboard.writeHtml()\n// Replace with\nclipboard.writeHTML()\n\n\ncrashReporter\n// Deprecated\ncrashReporter.start({\n companyName: 'Crashly',\n submitURL: 'https://crash.server.com',\n autoSubmit: true\n})\n// Replace with\ncrashReporter.start({\n companyName: 'Crashly',\n submitURL: 'https://crash.server.com',\n uploadToServer: true\n})\n\n\nnativeImage\n// Deprecated\nnativeImage.createFromBuffer(buffer, 1.0)\n// Replace with\nnativeImage.createFromBuffer(buffer, {\n scaleFactor: 1.0\n})\n\n\nscreen\n// Deprecated\nscreen.getMenuBarHeight()\n// Replace with\nscreen.getPrimaryDisplay().workArea\n\n\nsession\n// Deprecated\nses.setCertificateVerifyProc(function (hostname, certificate, callback) {\n callback(true)\n})\n// Replace with\nses.setCertificateVerifyProc(function (request, callback) {\n callback(0)\n})\n\n\nTray\n// Deprecated\ntray.setHighlightMode(true)\n// Replace with\ntray.setHighlightMode('on')\n\n// Deprecated\ntray.setHighlightMode(false)\n// Replace with\ntray.setHighlightMode('off')\n\n\nwebContents\n// Deprecated\nwebContents.openDevTools({detach: true})\n// Replace with\nwebContents.openDevTools({mode: 'detach'})\n\n\nwebFrame\n// Deprecated\nwebFrame.registerURLSchemeAsSecure('app')\n// Replace with\nprotocol.registerStandardSchemes(['app'], {secure: true})\n\n// Deprecated\nwebFrame.registerURLSchemeAsPrivileged('app', {secure: true})\n// Replace with\nprotocol.registerStandardSchemes(['app'], {secure: true})\n\n\nNode Headers URL\nThis is the URL specified as disturl in a .npmrc file or as the --dist-url\ncommand line flag when building native Node modules.\nDeprecated: https://atom.io/download/atom-shell\nReplace with: https://atom.io/download/electron\n\n\nFIXME comments\nThe FIXME string is used in code comments to denote things that should be\nfixed for the 3.0 release. See\nhttps://github.com/electron/electron/search?q=fixme\n\n\nPlanned Breaking API Changes (4.0)\nThe following list includes the APIs that will be removed in Electron 4.0.\nThere is no timetable for when this release will occur but deprecation\nwarnings will be added at least one major version beforehand.\n\n\napp.makeSingleInstance\n// Deprecated\napp.makeSingleInstance(function (argv, cwd) {\n\n})\n// Replace with\napp.requestSingleInstanceLock()\napp.on('second-instance', function (argv, cwd) {\n\n})\n\n\napp.releaseSingleInstance\n// Deprecated\napp.releaseSingleInstance()\n// Replace with\napp.releaseSingleInstanceLock()\n", - "keyValuePairs": [ - "is:doc", - "is:tutorial", - "doc:Planned Breaking API Changes (3.0)", - "doc:planned-breaking-changes", - "tutorial:Planned Breaking API Changes (3.0)", - "tutorial:planned-breaking-changes" - ] - }, { "objectID": "tutorial-progress-bar", "title": "Progress Bar in Taskbar (Windows, macOS, Unity)", @@ -695,7 +743,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/development/pull-requests.md", "url": "https://electronjs.org/docs/tutorial/pull-requests", "slug": "pull-requests", - "body": "Pull Requests\n\nDependencies\n\nSetting up your local environment\n\nStep 1: Fork\nStep 2: Build\nStep 3: Branch\n\n\n\nMaking Changes\n\nStep 4: Code\n\nStep 5: Commit\n\nCommit message guidelines\n\n\nStep 6: Rebase\nStep 7: Test\nStep 8: Push\nStep 9: Opening the Pull Request\n\nStep 10: Discuss and Update\n\nApproval and Request Changes Workflow\n\n\nStep 11: Landing\nContinuous Integration Testing\n\n\n\n\n\nSetting up your local environment\n\n\nStep 1: Fork\nFork the project on GitHub and clone your fork\nlocally.\n$ git clone git@github.com:username/electron.git\n$ cd electron\n$ git remote add upstream https://github.com/electron/electron.git\n$ git fetch upstream\n\n\nStep 2: Build\nBuild steps and dependencies differ slightly depending on your operating system.\nSee these detailed guides on building Electron locally:\n\nBuilding on MacOS\nBuilding on Linux\nBuilding on Windows\n\nOnce you've built the project locally, you're ready to start making changes!\n\n\nStep 3: Branch\nTo keep your development environment organized, create local branches to\nhold your work. These should be branched directly off of the master branch.\n$ git checkout -b my-branch -t upstream/master\n\n\nMaking Changes\n\n\nStep 4: Code\nMost pull requests opened against the electron/electron repository include\nchanges to either the C/C++ code in the atom/ or brightray/ folders,\nthe JavaScript code in the lib/ folder, the documentation in docs/api/\nor tests in the spec/ folder.\nPlease be sure to run npm run lint from time to time on any code changes\nto ensure that they follow the project's code style.\nSee coding style for\nmore information about best practice when modifying code in different parts of\nthe project.\n\n\nStep 5: Commit\nIt is recommended to keep your changes grouped logically within individual\ncommits. Many contributors find it easier to review changes that are split\nacross multiple commits. There is no limit to the number of commits in a\npull request.\n$ git add my/changed/files\n$ git commit\nNote that multiple commits often get squashed when they are landed.\n\n\nCommit message guidelines\nA good commit message should describe what changed and why. The Electron project\nuses semantic commit messages to streamline\nthe release process.\nBefore a pull request can be merged, it should include at least one semantic\ncommit message, though it's not necessary for all commits in the pull request\nto be semantic. Alternatively, you can update your pull request title to\nstart with a semantic prefix.\nExamples of commit messages with semantic prefixes:\n\nfix: don't overwrite prevent_default if default wasn't prevented\nfeat: add app.isPackaged() method\ndocs: app.isDefaultProtocolClient is now available on Linux \n\nCommon prefixes:\n\nfix: A bug fix\nfeat: A new feature\ndocs: Documentation changes\ntest: Adding missing tests or correcting existing tests\nbuild: Changes that affect the build system\nci: Changes to our CI configuration files and scripts\nperf: A code change that improves performance\nrefactor: A code change that neither fixes a bug nor adds a feature\nstyle: Changes that do not affect the meaning of the code (linting)\n\nOther things to keep in mind when writing a commit message:\n\n\nThe first line should:\n\ncontain a short description of the change (preferably 50 characters or less,\nand no more than 72 characters)\nbe entirely in lowercase with the exception of proper nouns, acronyms, and\nthe words that refer to code, like function/variable names\n\n\nKeep the second line blank.\nWrap all other lines at 72 columns.\n\n\n\nBreaking Changes\nA commit that has the text BREAKING CHANGE: at the beginning of its optional\nbody or footer section introduces a breaking API change (correlating with Major\nin semantic versioning). A breaking change can be part of commits of any type.\ne.g., a fix:, feat: & chore: types would all be valid, in addition to any\nother type.\nSee conventionalcommits.org for more details.\n\n\nStep 6: Rebase\nOnce you have committed your changes, it is a good idea to use git rebase\n(not git merge) to synchronize your work with the main repository.\n$ git fetch upstream\n$ git rebase upstream/master\nThis ensures that your working branch has the latest changes from electron/electron\nmaster.\n\n\nStep 7: Test\nBug fixes and features should always come with tests. A\ntesting guide has been\nprovided to make the process easier. Looking at other tests to see how they\nshould be structured can also help.\nBefore submitting your changes in a pull request, always run the full\ntest suite. To run the tests:\n$ npm run test\nMake sure the linter does not report any issues and that all tests pass.\nPlease do not submit patches that fail either check.\nIf you are updating tests and want to run a single spec to check it:\n$ npm run test -match=menu\nThe above would only run spec modules matching menu, which is useful for\nanyone who's working on tests that would otherwise be at the very end of\nthe testing cycle.\n\n\nStep 8: Push\nOnce your commits are ready to go -- with passing tests and linting --\nbegin the process of opening a pull request by pushing your working branch\nto your fork on GitHub.\n$ git push origin my-branch\n\n\nStep 9: Opening the Pull Request\nFrom within GitHub, opening a new pull request will present you with a template\nthat should be filled out:\n\n\n\nStep 10: Discuss and update\nYou will probably get feedback or requests for changes to your pull request.\nThis is a big part of the submission process so don't be discouraged! Some\ncontributors may sign off on the pull request right away. Others may have\ndetailed comments or feedback. This is a necessary part of the process\nin order to evaluate whether the changes are correct and necessary.\nTo make changes to an existing pull request, make the changes to your local\nbranch, add a new commit with those changes, and push those to your fork.\nGitHub will automatically update the pull request.\n$ git add my/changed/files\n$ git commit\n$ git push origin my-branch\nThere are a number of more advanced mechanisms for managing commits using\ngit rebase that can be used, but are beyond the scope of this guide.\nFeel free to post a comment in the pull request to ping reviewers if you are\nawaiting an answer on something. If you encounter words or acronyms that\nseem unfamiliar, refer to this\nglossary.\n\n\nApproval and Request Changes Workflow\nAll pull requests require approval from a Code Owner of the area you\nmodified in order to land. Whenever a maintainer reviews a pull request they\nmay request changes. These may be small, such as fixing a typo, or may involve\nsubstantive changes. Such requests are intended to be helpful, but at times\nmay come across as abrupt or unhelpful, especially if they do not include\nconcrete suggestions on how to change them.\nTry not to be discouraged. If you feel that a review is unfair, say so or seek\nthe input of another project contributor. Often such comments are the result of\na reviewer having taken insufficient time to review and are not ill-intended.\nSuch difficulties can often be resolved with a bit of patience. That said,\nreviewers should be expected to provide helpful feeback.\n\n\nStep 11: Landing\nIn order to land, a pull request needs to be reviewed and approved by\nat least one Electron Code Owner and pass CI. After that, if there are no\nobjections from other contributors, the pull request can be merged.\nCongratulations and thanks for your contribution!\n\n\nContinuous Integration Testing\nEvery pull request is tested on the Continuous Integration (CI) system to\nconfirm that it works on Electron's supported platforms.\nIdeally, the pull request will pass (\"be green\") on all of CI's platforms.\nThis means that all tests pass and there are no linting errors. However,\nit is not uncommon for the CI infrastructure itself to fail on specific\nplatforms or for so-called \"flaky\" tests to fail (\"be red\"). Each CI\nfailure must be manually inspected to determine the cause.\nCI starts automatically when you open a pull request, but only\nReleasers\ncan restart a CI run. If you believe CI is giving a false negative,\nask a Releaser to restart the tests.\n", + "body": "Pull Requests\n\n\nSetting up your local environment\n\nStep 1: Fork\nStep 2: Build\nStep 3: Branch\n\n\n\nMaking Changes\n\nStep 4: Code\n\nStep 5: Commit\n\nCommit message guidelines\n\n\nStep 6: Rebase\nStep 7: Test\nStep 8: Push\nStep 9: Opening the Pull Request\n\nStep 10: Discuss and Update\n\nApproval and Request Changes Workflow\n\n\nStep 11: Landing\nContinuous Integration Testing\n\n\n\n\n\nSetting up your local environment\n\n\nStep 1: Fork\nFork the project on GitHub and clone your fork\nlocally.\n$ git clone git@github.com:username/electron.git\n$ cd electron\n$ git remote add upstream https://github.com/electron/electron.git\n$ git fetch upstream\n\n\nStep 2: Build\nBuild steps and dependencies differ slightly depending on your operating system.\nSee these detailed guides on building Electron locally:\n\nBuilding on MacOS\nBuilding on Linux\nBuilding on Windows\n\nOnce you've built the project locally, you're ready to start making changes!\n\n\nStep 3: Branch\nTo keep your development environment organized, create local branches to\nhold your work. These should be branched directly off of the master branch.\n$ git checkout -b my-branch -t upstream/master\n\n\nMaking Changes\n\n\nStep 4: Code\nMost pull requests opened against the electron/electron repository include\nchanges to either the C/C++ code in the atom/ folder,\nthe JavaScript code in the lib/ folder, the documentation in docs/api/\nor tests in the spec/ folder.\nPlease be sure to run npm run lint from time to time on any code changes\nto ensure that they follow the project's code style.\nSee coding style for\nmore information about best practice when modifying code in different parts of\nthe project.\n\n\nStep 5: Commit\nIt is recommended to keep your changes grouped logically within individual\ncommits. Many contributors find it easier to review changes that are split\nacross multiple commits. There is no limit to the number of commits in a\npull request.\n$ git add my/changed/files\n$ git commit\nNote that multiple commits often get squashed when they are landed.\n\n\nCommit message guidelines\nA good commit message should describe what changed and why. The Electron project\nuses semantic commit messages to streamline\nthe release process.\nBefore a pull request can be merged, it must have a pull request title with a semantic prefix.\nExamples of commit messages with semantic prefixes:\n\nfix: don't overwrite prevent_default if default wasn't prevented\nfeat: add app.isPackaged() method\ndocs: app.isDefaultProtocolClient is now available on Linux\n\nCommon prefixes:\n\nfix: A bug fix\nfeat: A new feature\ndocs: Documentation changes\ntest: Adding missing tests or correcting existing tests\nbuild: Changes that affect the build system\nci: Changes to our CI configuration files and scripts\nperf: A code change that improves performance\nrefactor: A code change that neither fixes a bug nor adds a feature\nstyle: Changes that do not affect the meaning of the code (linting)\nvendor: Bumping a dependency like libchromiumcontent or node\n\nOther things to keep in mind when writing a commit message:\n\n\nThe first line should:\n\ncontain a short description of the change (preferably 50 characters or less,\nand no more than 72 characters)\nbe entirely in lowercase with the exception of proper nouns, acronyms, and\nthe words that refer to code, like function/variable names\n\n\nKeep the second line blank.\nWrap all other lines at 72 columns.\n\n\n\nBreaking Changes\nA commit that has the text BREAKING CHANGE: at the beginning of its optional\nbody or footer section introduces a breaking API change (correlating with Major\nin semantic versioning). A breaking change can be part of commits of any type.\ne.g., a fix:, feat: & chore: types would all be valid, in addition to any\nother type.\nSee conventionalcommits.org for more details.\n\n\nStep 6: Rebase\nOnce you have committed your changes, it is a good idea to use git rebase\n(not git merge) to synchronize your work with the main repository.\n$ git fetch upstream\n$ git rebase upstream/master\nThis ensures that your working branch has the latest changes from electron/electron\nmaster.\n\n\nStep 7: Test\nBug fixes and features should always come with tests. A\ntesting guide has been\nprovided to make the process easier. Looking at other tests to see how they\nshould be structured can also help.\nBefore submitting your changes in a pull request, always run the full\ntest suite. To run the tests:\n$ npm run test\nMake sure the linter does not report any issues and that all tests pass.\nPlease do not submit patches that fail either check.\nIf you are updating tests and want to run a single spec to check it:\n$ npm run test -match=menu\nThe above would only run spec modules matching menu, which is useful for\nanyone who's working on tests that would otherwise be at the very end of\nthe testing cycle.\n\n\nStep 8: Push\nOnce your commits are ready to go -- with passing tests and linting --\nbegin the process of opening a pull request by pushing your working branch\nto your fork on GitHub.\n$ git push origin my-branch\n\n\nStep 9: Opening the Pull Request\nFrom within GitHub, opening a new pull request will present you with a template\nthat should be filled out:\n\n\n\nStep 10: Discuss and update\nYou will probably get feedback or requests for changes to your pull request.\nThis is a big part of the submission process so don't be discouraged! Some\ncontributors may sign off on the pull request right away. Others may have\ndetailed comments or feedback. This is a necessary part of the process\nin order to evaluate whether the changes are correct and necessary.\nTo make changes to an existing pull request, make the changes to your local\nbranch, add a new commit with those changes, and push those to your fork.\nGitHub will automatically update the pull request.\n$ git add my/changed/files\n$ git commit\n$ git push origin my-branch\nThere are a number of more advanced mechanisms for managing commits using\ngit rebase that can be used, but are beyond the scope of this guide.\nFeel free to post a comment in the pull request to ping reviewers if you are\nawaiting an answer on something. If you encounter words or acronyms that\nseem unfamiliar, refer to this\nglossary.\n\n\nApproval and Request Changes Workflow\nAll pull requests require approval from a Code Owner of the area you\nmodified in order to land. Whenever a maintainer reviews a pull request they\nmay request changes. These may be small, such as fixing a typo, or may involve\nsubstantive changes. Such requests are intended to be helpful, but at times\nmay come across as abrupt or unhelpful, especially if they do not include\nconcrete suggestions on how to change them.\nTry not to be discouraged. If you feel that a review is unfair, say so or seek\nthe input of another project contributor. Often such comments are the result of\na reviewer having taken insufficient time to review and are not ill-intended.\nSuch difficulties can often be resolved with a bit of patience. That said,\nreviewers should be expected to provide helpful feeback.\n\n\nStep 11: Landing\nIn order to land, a pull request needs to be reviewed and approved by\nat least one Electron Code Owner and pass CI. After that, if there are no\nobjections from other contributors, the pull request can be merged.\nCongratulations and thanks for your contribution!\n\n\nContinuous Integration Testing\nEvery pull request is tested on the Continuous Integration (CI) system to\nconfirm that it works on Electron's supported platforms.\nIdeally, the pull request will pass (\"be green\") on all of CI's platforms.\nThis means that all tests pass and there are no linting errors. However,\nit is not uncommon for the CI infrastructure itself to fail on specific\nplatforms or for so-called \"flaky\" tests to fail (\"be red\"). Each CI\nfailure must be manually inspected to determine the cause.\nCI starts automatically when you open a pull request, but only\nReleasers\ncan restart a CI run. If you believe CI is giving a false negative,\nask a Releaser to restart the tests.\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -743,7 +791,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/development/releasing.md", "url": "https://electronjs.org/docs/tutorial/releasing", "slug": "releasing", - "body": "Releasing\nThis document describes the process for releasing a new version of Electron.\n\n\nDetermine which branch to release from\n\nIf releasing beta, run the scripts below from master.\nIf releasing a stable version, run the scripts below from the branch\nyou're stabilizing.\n\n\n\nFind out what version change is needed\nRun npm run prepare-release -- --notesOnly to view auto generated release\nnotes. The notes generated should help you determine if this is a major, minor,\npatch, or beta version change. Read the\nVersion Change Rules for more information.\nNB: If releasing from a branch, e.g. 1-8-x, check out the branch with\ngit checkout 1-8-x rather than git checkout -b remotes/origin/1-8-x.\nThe scripts need git rev-parse --abbrev-ref HEAD to return a short name,\ne.g. no remotes/origin/\n\n\nSet your tokens and environment variables\nYou'll need Electron S3 credentials in order to create and\nupload an Electron release. Contact a team member for more\ninformation.\nThere are a handful of *_TOKEN environment variables needed by the release\nscripts. Once you've generated these per-user tokens, you may want to keep\nthem in a local file that you can source when starting a release.\n\nELECTRON_GITHUB_TOKEN:\nCreate as described at https://github.com/settings/tokens/new,\ngiving the token repo access scope.\nAPPVEYOR_TOKEN:\nCreate a token from https://windows-ci.electronjs.org/api-token\nIf you don't have an account, ask a team member to add you.\nCIRCLE_TOKEN:\nCreate a token from \"Personal API Tokens\" at https://circleci.com/account/api\n\n\n\nRun the prepare-release script\nThe prepare release script will do the following:\n1. Check if a release is already in process and if so it will halt.\n2. Create a release branch.\n3. Bump the version number in several files. See this bump commit for an example.\n4. Create a draft release on GitHub with auto-generated release notes.\n5. Push the release branch.\n6. Call the APIs to run the release builds.\nOnce you have determined which type of version change is needed, run the\nprepare-release script with arguments according to your need:\n\n[major|minor|patch|beta] to increment one of the version numbers, or\n--stable to indicate this is a stable version\n\nFor example:\n\n\nMajor version change\nnpm run prepare-release -- major\n\n\nMinor version change\nnpm run prepare-release -- minor\n\n\nPatch version change\nnpm run prepare-release -- patch\n\n\nBeta version change\nnpm run prepare-release -- beta\n\n\nPromote beta to stable\nnpm run prepare-release -- --stable\nTip: You can test the new version number before running prepare-release with\na dry run of the bump-version script with the same major/minor/patch/beta\narguments, e.g.:\n$ ./script/bump-version.py --bump minor --dry-run\n\n\nWait for builds :hourglass_flowing_sand:\nThe prepare-release script will trigger the builds via API calls.\nTo monitor the build progress, see the following pages:\n\ncircleci.com/gh/electron/electron for OS X and Linux\nwindows-ci.electronjs.org/project/AppVeyor/electron for Windows\n\n\n\nCompile release notes\nWriting release notes is a good way to keep yourself busy while the builds are running.\nFor prior art, see existing releases on the releases page.\nTips:\n\nEach listed item should reference a PR on electron/electron, not an issue, nor a PR from another repo like libcc.\nNo need to use link markup when referencing PRs. Strings like #123 will automatically be converted to links on github.com.\nTo see the version of Chromium, V8, and Node in every version of Electron, visit atom.io/download/electron/index.json.\n\n\n\nPatch releases\nFor a patch release, use the following format:\n## Bug Fixes\n\n* Fixed a cross-platform thing. #123\n\n### Linux\n\n* Fixed a Linux thing. #123\n\n### macOS\n\n* Fixed a macOS thing. #123\n\n### Windows\n\n* Fixed a Windows thing. #1234\n\n\nMinor releases\nFor a minor release, e.g. 1.8.0, use this format:\n## Upgrades\n\n- Upgraded from Node `oldVersion` to `newVersion`. #123\n\n## API Changes\n\n* Changed a thing. #123\n\n### Linux\n\n* Changed a Linux thing. #123\n\n### macOS\n\n* Changed a macOS thing. #123\n\n### Windows\n\n* Changed a Windows thing. #123\n\n\nMajor releases\n## Upgrades\n\n- Upgraded from Chromium `oldVersion` to `newVersion`. #123\n- Upgraded from Node `oldVersion` to `newVersion`. #123\n\n## Breaking API changes\n\n* Changed a thing. #123\n\n### Linux\n\n* Changed a Linux thing. #123\n\n### macOS\n\n* Changed a macOS thing. #123\n\n### Windows\n\n* Changed a Windows thing. #123\n\n## Other Changes\n\n- Some other change. #123\n\n\nBeta releases\nUse the same formats as the ones suggested above, but add the following note at\nthe beginning of the changelog:\n**Note:** This is a beta release and most likely will have have some\ninstability and/or regressions.\n\nPlease file new issues for any bugs you find in it.\n\nThis release is published to [npm](https://www.npmjs.com/package/electron)\nunder the `beta` tag and can be installed via `npm install electron@beta`.\n\n\nEdit the release draft\n\nVisit the releases page and you'll see a new draft release with placeholder\nrelease notes.\nEdit the release and add release notes.\nUncheck the prerelease checkbox if you're publishing a stable release;\nleave it checked for beta releases.\nClick 'Save draft'. Do not click 'Publish release'!\nWait for all builds to pass before proceeding.\nIn the release branch, verify that the release's files have been created:\n\n$ git rev-parse --abbrev-ref HEAD\nrelease\n$ npm run release -- --validateRelease\n\n\nMerge temporary branch (pre-2-0-x branches only)\nOnce the release builds have finished, merge the release branch back into\nthe source release branch using the merge-release script.\nIf the branch cannot be successfully merged back this script will automatically\nrebase the release branch and push the changes which will trigger the release\nbuilds again, which means you will need to wait for the release builds to run\nagain before proceeding.\n\n\nMerging back into master\nnpm run merge-release -- master\n\n\nMerging back into old release branch\nnpm run merge-release -- 1-7-x\n\n\nPublish the release\nOnce the merge has finished successfully, run the release script\nvia npm run release to finish the release process. This script will do the\nfollowing:\n1. Build the project to validate that the correct version number is being released.\n2. Download the binaries and generate the node headers and the .lib linker used\non Windows by node-gyp to build native modules.\n3. Create and upload the SHASUMS files stored on S3 for the node files.\n4. Create and upload the SHASUMS256.txt file stored on the GitHub release.\n5. Validate that all of the required files are present on GitHub and S3 and have\nthe correct checksums as specified in the SHASUMS files.\n6. Publish the release on GitHub\n7. Delete the release branch.\n\n\nPublish to npm\nBefore publishing to npm, you'll need to log into npm as Electron. Optionally,\nyou may find npmrc to be a useful way\nto keep Electron's profile side-by-side with your own:\n$ sudo npm install -g npmrc\n$ npmrc -c electron\nRemoving old .npmrc (default)\nActivating .npmrc \"electron\"\nThe Electron account's credentials are kept by GitHub.\n\"Electron - NPM\" for the URL \"https://www.npmjs.com/login\".\n$ npm login\nUsername: electron\nPassword:\nEmail: (this IS public) electron@github.com\nPublish the release to npm.\n$ npm whoami\nelectron\n$ npm run publish-to-npm\nNote: In general you should be using the latest Node during this\nprocess; however, older versions of the publish-to-npm script\nmay have trouble with Node 7 or higher. If you have trouble with\nthis in an older branch, try running with an older version of Node,\ne.g. a 6.x LTS.\n\n\nFix missing binaries of a release manually\nIn the case of a corrupted release with broken CI machines, we might have to\nre-upload the binaries for an already published release.\nThe first step is to go to the\nReleases page and delete the\ncorrupted binaries with the SHASUMS256.txt checksum file.\nThen manually create distributions for each platform and upload them:\n# Checkout the version to re-upload.\ngit checkout vTHE.RELEASE.VERSION\n\n# Do release build, specifying one target architecture.\n./script/bootstrap.py --target_arch [arm|x64|ia32]\n./script/build.py -c R\n./script/create-dist.py\n\n# Explicitly allow overwritting a published release.\n./script/upload.py --overwrite\nAfter re-uploading all distributions, publish again to upload the checksum\nfile:\nnpm run release\n", + "body": "Releasing\nThis document describes the process for releasing a new version of Electron.\n\n\nSet your tokens and environment variables\nYou'll need Electron S3 credentials in order to create and\nupload an Electron release. Contact a team member for more\ninformation.\nThere are a handful of *_TOKEN environment variables needed by the release\nscripts:\n\nELECTRON_GITHUB_TOKEN:\nCreate this by visiting https://github.com/settings/tokens/new?scopes=repo\nAPPVEYOR_TOKEN:\nCreate a token from https://windows-ci.electronjs.org/api-token\nIf you don't have an account, ask a team member to add you.\nCIRCLE_TOKEN:\nCreate a token from \"Personal API Tokens\" at https://circleci.com/account/api\nVSTS_TOKEN:\nCreate a Personal Access Token at https://github.visualstudio.com/_usersSettings/tokens or https://github.visualstudio.com/_details/security/tokens\nwith the scope of Build (read and execute).\nELECTRON_S3_BUCKET:\nELECTRON_S3_ACCESS_KEY:\nELECTRON_S3_SECRET_KEY:\nIf you don't have these, ask a team member to help you.\n\nOnce you've generated these tokens, put them in a .env file in the root directory\nof the project. This file is gitignored, and will be loaded into the\nenvironment by the release scripts.\n\n\nDetermine which branch to release from\n\nIf releasing beta, run the scripts below from master.\nIf releasing a stable version, run the scripts below from the branch\nyou're stabilizing.\n\n\n\nFind out what version change is needed\nRun npm run prepare-release -- --notesOnly to view auto generated release\nnotes. The notes generated should help you determine if this is a major, minor,\npatch, or beta version change. Read the\nVersion Change Rules for more information.\nNB: If releasing from a branch, e.g. 1-8-x, check out the branch with\ngit checkout 1-8-x rather than git checkout -b remotes/origin/1-8-x.\nThe scripts need git rev-parse --abbrev-ref HEAD to return a short name,\ne.g. no remotes/origin/\n\n\nRun the prepare-release script\nThe prepare release script will do the following:\n1. Check if a release is already in process and if so it will halt.\n2. Create a release branch.\n3. Bump the version number in several files. See this bump commit for an example.\n4. Create a draft release on GitHub with auto-generated release notes.\n5. Push the release branch.\n6. Call the APIs to run the release builds.\nOnce you have determined which type of version change is needed, run the\nprepare-release script with arguments according to your need:\n\n[major|minor|patch|beta] to increment one of the version numbers, or\n--stable to indicate this is a stable version\n\nFor example:\n\n\nMajor version change\nnpm run prepare-release -- major\n\n\nMinor version change\nnpm run prepare-release -- minor\n\n\nPatch version change\nnpm run prepare-release -- patch --stable\n\n\nBeta version change\nnpm run prepare-release -- beta\n\n\nPromote beta to stable\nnpm run prepare-release -- --stable\nTip: You can test the new version number before running prepare-release with\na dry run of the bump-version script with the same major/minor/patch/beta\narguments, e.g.:\n$ ./script/bump-version.py --bump minor --dry-run\n\n\nWait for builds ⏳\nThe prepare-release script will trigger the builds via API calls.\nTo monitor the build progress, see the following pages:\n\nelectron-release-mas-x64 for MAS builds.\nelectron-release-osx-x64 for OSX builds.\ncircleci.com/gh/electron/electron for Linux builds.\nwindows-ci.electronjs.org/project/AppVeyor/electron-39ng6 for Windows 32-bit builds.\nwindows-ci.electronjs.org/project/AppVeyor/electron for Windows 64-bit builds.\n\n\n\nCompile release notes\nWriting release notes is a good way to keep yourself busy while the builds are running.\nFor prior art, see existing releases on the releases page.\nTips:\n\nEach listed item should reference a PR on electron/electron, not an issue, nor a PR from another repo like libcc.\nNo need to use link markup when referencing PRs. Strings like #123 will automatically be converted to links on github.com.\nTo see the version of Chromium, V8, and Node in every version of Electron, visit atom.io/download/electron/index.json.\n\n\n\nPatch releases\nFor a patch release, use the following format:\n## Bug Fixes\n\n* Fixed a cross-platform thing. #123\n\n### Linux\n\n* Fixed a Linux thing. #123\n\n### macOS\n\n* Fixed a macOS thing. #123\n\n### Windows\n\n* Fixed a Windows thing. #1234\n\n\nMinor releases\nFor a minor release, e.g. 1.8.0, use this format:\n## Upgrades\n\n- Upgraded from Node `oldVersion` to `newVersion`. #123\n\n## API Changes\n\n* Changed a thing. #123\n\n### Linux\n\n* Changed a Linux thing. #123\n\n### macOS\n\n* Changed a macOS thing. #123\n\n### Windows\n\n* Changed a Windows thing. #123\n\n\nMajor releases\n## Upgrades\n\n- Upgraded from Chromium `oldVersion` to `newVersion`. #123\n- Upgraded from Node `oldVersion` to `newVersion`. #123\n\n## Breaking API changes\n\n* Changed a thing. #123\n\n### Linux\n\n* Changed a Linux thing. #123\n\n### macOS\n\n* Changed a macOS thing. #123\n\n### Windows\n\n* Changed a Windows thing. #123\n\n## Other Changes\n\n- Some other change. #123\n\n\nBeta releases\nUse the same formats as the ones suggested above, but add the following note at\nthe beginning of the changelog:\n**Note:** This is a beta release and most likely will have have some\ninstability and/or regressions.\n\nPlease file new issues for any bugs you find in it.\n\nThis release is published to [npm](https://www.npmjs.com/package/electron)\nunder the `beta` tag and can be installed via `npm install electron@beta`.\n\n\nEdit the release draft\n\nVisit the releases page and you'll see a new draft release with placeholder\nrelease notes.\nEdit the release and add release notes.\nClick 'Save draft'. Do not click 'Publish release'!\nWait for all builds to pass before proceeding.\nIn the branch, verify that the release's files have been created:\n\n$ npm run release -- --validateRelease\nNote, if you need to run --validateRelease more than once to check the assets,\nrun it as above the first time, then node ./script/release.js --validateRelease\nfor subsequent calls so that you don't have to rebuild each time you want to\ncheck the assets.\n\n\nPublish the release\nOnce the merge has finished successfully, run the release script\nvia npm run release to finish the release process. This script will do the\nfollowing:\n1. Build the project to validate that the correct version number is being released.\n2. Download the binaries and generate the node headers and the .lib linker used\non Windows by node-gyp to build native modules.\n3. Create and upload the SHASUMS files stored on S3 for the node files.\n4. Create and upload the SHASUMS256.txt file stored on the GitHub release.\n5. Validate that all of the required files are present on GitHub and S3 and have\nthe correct checksums as specified in the SHASUMS files.\n6. Publish the release on GitHub\n\n\nPublish to npm\nBefore publishing to npm, you'll need to log into npm as Electron. Optionally,\nyou may find npmrc to be a useful way\nto keep Electron's profile side-by-side with your own:\n$ sudo npm install -g npmrc\n$ npmrc -c electron\nRemoving old .npmrc (default)\nActivating .npmrc \"electron\"\nThe Electron account's credentials are kept by GitHub in a password manager.\nYou'll also need to have access to an 2FA authenticator app with the appropriate OTP generator code to log in.\n$ npm login\nUsername: electron-nightly\nPassword: \nEmail: (this IS public) electron@github.com\nPublish the release to npm. Before running this you'll need to have set ELECTRON_NPM_OTP as an environment variable using a code from the aforementioned 2FA authenticator app.\n$ npm whoami\nelectron-nightly\n$ npm run publish-to-npm\nAfter publishing, you can check the latest release:\n$ npm dist-tag ls electron\nIf for some reason npm run publish-to-npm fails,\nyou can tag the release manually:\n$ npm dist-tag add electron@ \ne.g.:\n$ npm dist-tag add electron@2.0.0 latest\n\n\nTroubleshooting\n\n\nRerun broken builds\nIf a release build fails for some reason, you can use script/ci-release-build.js to rerun a release build:\n\n\nRerun all linux builds:\nnode script/ci-release-build.js --ci=CircleCI --ghRelease TARGET_BRANCH\n(TARGET_BRANCH) is the branch you are releasing from.\n\n\nRerun all macOS builds:\nnode script/ci-release-build.js --ci=VSTS --ghRelease TARGET_BRANCH\n(TARGET_BRANCH) is the branch you are releasing from.\n\n\nRerun all Windows builds:\nnode script/ci-release-build.js --ci=AppVeyor --ghRelease TARGET_BRANCH\n(TARGET_BRANCH) is the branch you are releasing from.\nAdditionally you can pass a job name to the script to run an individual job, eg:\nnode script/ci-release-build.js --ci=AppVeyor --ghRelease --job=electron-x64 TARGET_BRANCH\n\n\nFix missing binaries of a release manually\nIn the case of a corrupted release with broken CI machines, we might have to\nre-upload the binaries for an already published release.\nThe first step is to go to the\nReleases page and delete the\ncorrupted binaries with the SHASUMS256.txt checksum file.\nThen manually create distributions for each platform and upload them:\n# Checkout the version to re-upload.\ngit checkout vX.Y.Z\n\n# Create release build\ngn gen out/Release --args=\"import(\\\"//electron/build/args/release.gn\\\") $GN_EXTRA_ARGS\"\n\n# To compile for specific arch, instead set\ngn gen out/Release- --args='import(\\\"//electron/build/args/release.gn\\\") target_cpu = \"[arm|x64|ia32]\"'\n\n# Build by running ninja with the electron target\nninja -C out/Release electron\nninja -C out/Release electron:dist_zip\n\n# Explicitly allow overwriting a published release.\n./script/upload.py --overwrite\nAllowable values for target_cpu and target_os.\nAfter re-uploading all distributions, publish again to upload the checksum\nfile:\nnpm run release\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -791,7 +839,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/security.md", "url": "https://electronjs.org/docs/tutorial/security", "slug": "security", - "body": "Security, Native Capabilities, and Your Responsibility\nAs web developers, we usually enjoy the strong security net of the browser -\nthe risks associated with the code we write are relatively small. Our websites\nare granted limited powers in a sandbox, and we trust that our users enjoy a\nbrowser built by a large team of engineers that is able to quickly respond to\nnewly discovered security threats.\nWhen working with Electron, it is important to understand that Electron is not\na web browser. It allows you to build feature-rich desktop applications with\nfamiliar web technologies, but your code wields much greater power. JavaScript\ncan access the filesystem, user shell, and more. This allows you to build\nhigh quality native applications, but the inherent security risks scale with\nthe additional powers granted to your code.\nWith that in mind, be aware that displaying arbitrary content from untrusted\nsources poses a severe security risk that Electron is not intended to handle.\nIn fact, the most popular Electron apps (Atom, Slack, Visual Studio Code, etc)\ndisplay primarily local content (or trusted, secure remote content without Node\nintegration) – if your application executes code from an online source, it is\nyour responsibility to ensure that the code is not malicious.\n\n\nReporting Security Issues\nFor information on how to properly disclose an Electron vulnerability,\nsee SECURITY.md\n\n\nChromium Security Issues and Upgrades\nWhile Electron strives to support new versions of Chromium as soon as possible,\ndevelopers should be aware that upgrading is a serious undertaking - involving\nhand-editing dozens or even hundreds of files. Given the resources and\ncontributions available today, Electron will often not be on the very latest\nversion of Chromium, lagging behind by either days or weeks.\nWe feel that our current system of updating the Chromium component strikes an\nappropriate balance between the resources we have available and the needs of\nthe majority of applications built on top of the framework. We definitely are\ninterested in hearing more about specific use cases from the people that build\nthings on top of Electron. Pull requests and contributions supporting this\neffort are always very welcome.\n\n\nIgnoring Above Advice\nA security issue exists whenever you receive code from a remote destination and\nexecute it locally. As an example, consider a remote website being displayed\ninside a BrowserWindow. If an attacker somehow manages to\nchange said content (either by attacking the source directly, or by sitting\nbetween your app and the actual destination), they will be able to execute\nnative code on the user's machine.\n\n:warning: Under no circumstances should you load and execute remote code with\nNode.js integration enabled. Instead, use only local files (packaged together\nwith your application) to execute Node.js code. To display remote content, use\nthe webview tag and make sure to disable the nodeIntegration.\n\n\n\nElectron Security Warnings\nFrom Electron 2.0 on, developers will see warnings and recommendations printed\nto the developer console. They only show up when the binary's name is Electron,\nindicating that a developer is currently looking at the console.\nYou can force-enable or force-disable these warnings by setting\nELECTRON_ENABLE_SECURITY_WARNINGS or ELECTRON_DISABLE_SECURITY_WARNINGS on\neither process.env or the window object.\n\n\nChecklist: Security Recommendations\nThis is not bulletproof, but at the least, you should follow these steps to\nimprove the security of your application.\n\nOnly load secure content\nDisable the Node.js integration in all renderers that display remote content\nEnable context isolation in all renderers that display remote content\nUse ses.setPermissionRequestHandler() in all sessions that load remote content\nDo not disable webSecurity\nDefine a Content-Security-Policy and use restrictive rules (i.e. script-src 'self')\nOverride and disable eval, which allows strings to be executed as code.\nDo not set allowRunningInsecureContent to true\nDo not enable experimental features\nDo not use blinkFeatures\nWebViews: Do not use allowpopups\nWebViews: Verify the options and params of all tags\n\n\n\n1) Only Load Secure Content\nAny resources not included with your application should be loaded using a\nsecure protocol like HTTPS. In other words, do not use insecure protocols\nlike HTTP. Similarly, we recommend the use of WSS over WS, FTPS over\nFTP, and so on.\n\n\nWhy?\nHTTPS has three main benefits:\n1) It authenticates the remote server, ensuring your app connects to the correct\nhost instead of an impersonator.\n2) It ensures data integrity, asserting that the data was not modified while in\ntransit between your application and the host.\n3) It encrypts the traffic between your user and the destination host, making it\nmore difficult to eavesdrop on the information sent between your app and\nthe host.\n\n\nHow?\n// Bad\nbrowserWindow.loadURL('http://my-website.com')\n\n// Good\nbrowserWindow.loadURL('https://my-website.com')\n\n\n\n\n\n\n\n\n\n2) Disable Node.js Integration for Remote Content\nIt is paramount that you disable Node.js integration in any renderer\n(BrowserWindow, BrowserView, or\nWebView) that loads remote content. The goal is to limit the\npowers you grant to remote content, thus making it dramatically more difficult\nfor an attacker to harm your users should they gain the ability to execute\nJavaScript on your website.\nAfter this, you can grant additional permissions for specific hosts. For example,\nif you are opening a BrowserWindow pointed at `https://my-website.com/\", you can\ngive that website exactly the abilities it needs, but no more.\n\n\nWhy?\nA cross-site-scripting (XSS) attack is more dangerous if an attacker can jump\nout of the renderer process and execute code on the user's computer.\nCross-site-scripting attacks are fairly common - and while an issue, their\npower is usually limited to messing with the website that they are executed on.\nDisabling Node.js integration helps prevent an XSS from being escalated into a\nso-called \"Remote Code Execution\" (RCE) attack.\n\n\nHow?\n// Bad\nconst mainWindow = new BrowserWindow()\nmainWindow.loadURL('https://my-website.com')\n// Good\nconst mainWindow = new BrowserWindow({\n webPreferences: {\n nodeIntegration: false,\n preload: './preload.js'\n }\n})\n\nmainWindow.loadURL('https://my-website.com')\n\n\n\n\n\nWhen disabling Node.js integration, you can still expose APIs to your website that\ndo consume Node.js modules or features. Preload scripts continue to have access\nto require and other Node.js features, allowing developers to expose a custom\nAPI to remotely loaded content.\nIn the following example preload script, the later loaded website will have\naccess to a window.readConfig() method, but no Node.js features.\nconst { readFileSync } = require('fs')\n\nwindow.readConfig = function () {\n const data = readFileSync('./config.json')\n return data\n}\n\n\n3) Enable Context Isolation for Remote Content\nContext isolation is an Electron feature that allows developers to run code\nin preload scripts and in Electron APIs in a dedicated JavaScript context. In\npractice, that means that global objects like Array.prototype.push or\nJSON.parse cannot be modified by scripts running in the renderer process.\nElectron uses the same technology as Chromium's Content Scripts\nto enable this behavior.\n\n\nWhy?\nContext isolation allows each the scripts on running in the renderer to make\nchanges to its JavaScript environment without worrying about conflicting with\nthe scripts in the Electron API or the preload script.\nWhile still an experimental Electron feature, context isolation adds an\nadditional layer of security. It creates a new JavaScript world for Electron\nAPIs and preload scripts.\nAt the same time, preload scripts still have access to the document and\nwindow objects. In other words, you're getting a decent return on a likely\nvery small investment.\n\n\nHow?\n// Main process\nconst mainWindow = new BrowserWindow({\n webPreferences: {\n contextIsolation: true,\n preload: 'preload.js'\n }\n})\n// Preload script\n\n// Set a variable in the page before it loads\nwebFrame.executeJavaScript('window.foo = \"foo\";')\n\n// The loaded page will not be able to access this, it is only available\n// in this context\nwindow.bar = 'bar'\n\ndocument.addEventListener('DOMContentLoaded', () => {\n // Will log out 'undefined' since window.foo is only available in the main\n // context\n console.log(window.foo)\n\n // Will log out 'bar' since window.bar is available in this context\n console.log(window.bar)\n})\n\n\n4) Handle Session Permission Requests From Remote Content\nYou may have seen permission requests while using Chrome: They pop up whenever\nthe website attempts to use a feature that the user has to manually approve (\nlike notifications).\nThe API is based on the Chromium permissions API\nand implements the same types of permissions.\n\n\nWhy?\nBy default, Electron will automatically approve all permission requests unless\nthe developer has manually configured a custom handler. While a solid default,\nsecurity-conscious developers might want to assume the very opposite.\n\n\nHow?\nconst { session } = require('electron')\n\nsession\n .fromPartition('some-partition')\n .setPermissionRequestHandler((webContents, permission, callback) => {\n const url = webContents.getURL()\n\n if (permission === 'notifications') {\n // Approves the permissions request\n callback(true)\n }\n\n if (!url.startsWith('https://my-website.com')) {\n // Denies the permissions request\n return callback(false)\n }\n })\n\n\n5) Do Not Disable WebSecurity\nRecommendation is Electron's default\nYou may have already guessed that disabling the webSecurity property on a\nrenderer process (BrowserWindow,\nBrowserView, or WebView) disables crucial\nsecurity features.\nDo not disable webSecurity in production applications.\n\n\nWhy?\nDisabling webSecurity will disable the same-origin policy and set\nallowRunningInsecureContent property to true. In other words, it allows\nthe execution of insecure code from different domains.\n\n\nHow?\n// Bad\nconst mainWindow = new BrowserWindow({\n webPreferences: {\n webSecurity: false\n }\n})\n// Good\nconst mainWindow = new BrowserWindow()\n\n\n\n\n\n\n\n6) Define a Content Security Policy\nA Content Security Policy (CSP) is an additional layer of protection against\ncross-site-scripting attacks and data injection attacks. We recommend that they\nbe enabled by any website you load inside Electron.\n\n\nWhy?\nCSP allows the server serving content to restrict and control the resources\nElectron can load for that given web page. https://your-page.com should\nbe allowed to load scripts from the origins you defined while scripts from\nhttps://evil.attacker.com should not be allowed to run. Defining a CSP is an\neasy way to improve your applications security.\n\n\nHow?\nElectron respects the Content-Security-Policy HTTP header\nand the respective tag.\nThe following CSP will allow Electron to execute scripts from the current\nwebsite and from apis.mydomain.com.\n// Bad\nContent-Security-Policy: '*'\n\n// Good\nContent-Security-Policy: script-src 'self' https://apis.mydomain.com\n\n\n7) Override and Disable eval\neval() is a core JavaScript method that allows the execution of JavaScript\nfrom a string. Disabling it disables your app's ability to evaluate JavaScript\nthat is not known in advance.\n\n\nWhy?\nThe eval() method has precisely one mission: To evaluate a series of\ncharacters as JavaScript and execute it. It is a required method whenever you\nneed to evaluate code that is not known ahead of time. While legitimate use\ncases exist, like any other code generators, eval() is difficult to harden.\nGenerally speaking, it is easier to completely disable eval() than to make\nit bulletproof. Thus, if you do not need it, it is a good idea to disable it.\n\n\nHow?\n// ESLint will warn about any use of eval(), even this one\n// eslint-disable-next-line\nwindow.eval = global.eval = function () {\n throw new Error(`Sorry, this app does not support window.eval().`)\n}\n\n\n8) Do Not Set allowRunningInsecureContent to true\nRecommendation is Electron's default\nBy default, Electron will not allow websites loaded over HTTPS to load and\nexecute scripts, CSS, or plugins from insecure sources (HTTP). Setting the\nproperty allowRunningInsecureContent to true disables that protection.\nLoading the initial HTML of a website over HTTPS and attempting to load\nsubsequent resources via HTTP is also known as \"mixed content\".\n\n\nWhy?\nLoading content over HTTPS assures the authenticity and integrity\nof the loaded resources while encrypting the traffic itself. See the section on\nonly displaying secure content for more details.\n\n\nHow?\n// Bad\nconst mainWindow = new BrowserWindow({\n webPreferences: {\n allowRunningInsecureContent: true\n }\n})\n// Good\nconst mainWindow = new BrowserWindow({})\n\n\n9) Do Not Enable Experimental Features\nRecommendation is Electron's default\nAdvanced users of Electron can enable experimental Chromium features using the\nexperimentalFeatures and experimentalCanvasFeatures properties.\n\n\nWhy?\nExperimental features are, as the name suggests, experimental and have not been\nenabled for all Chromium users. Furthermore, their impact on Electron as a whole\nhas likely not been tested.\nLegitimate use cases exist, but unless you know what you are doing, you should\nnot enable this property.\n\n\nHow?\n// Bad\nconst mainWindow = new BrowserWindow({\n webPreferences: {\n experimentalFeatures: true\n }\n})\n// Good\nconst mainWindow = new BrowserWindow({})\n\n\n10) Do Not Use blinkFeatures\nRecommendation is Electron's default\nBlink is the name of the rendering engine behind Chromium. As with\nexperimentalFeatures, the blinkFeatures property allows developers to\nenable features that have been disabled by default.\n\n\nWhy?\nGenerally speaking, there are likely good reasons if a feature was not enabled\nby default. Legitimate use cases for enabling specific features exist. As a\ndeveloper, you should know exactly why you need to enable a feature, what the\nramifications are, and how it impacts the security of your application. Under\nno circumstances should you enable features speculatively.\n\n\nHow?\n// Bad\nconst mainWindow = new BrowserWindow({\n webPreferences: {\n blinkFeatures: ['ExecCommandInJavaScript']\n }\n})\n// Good\nconst mainWindow = new BrowserWindow()\n\n\n11) Do Not Use allowpopups\nRecommendation is Electron's default\nIf you are using WebViews, you might need the pages and scripts\nloaded in your tag to open new windows. The allowpopups attribute\nenables them to create new BrowserWindows using the\nwindow.open() method. WebViews are otherwise not allowed to create new\nwindows.\n\n\nWhy?\nIf you do not need popups, you are better off not allowing the creation of\nnew BrowserWindows by default. This follows the principle\nof minimally required access: Don't let a website create new popups unless\nyou know it needs that feature.\n\n\nHow?\n\n\n\n\n\n\n\n12) Verify WebView Options Before Creation\nA WebView created in a renderer process that does not have Node.js integration\nenabled will not be able to enable integration itself. However, a WebView will\nalways create an independent renderer process with its own webPreferences.\nIt is a good idea to control the creation of new WebViews from\nthe main process and to verify that their webPreferences do not disable\nsecurity features.\n\n\nWhy?\nSince WebViews live in the DOM, they can be created by a script running on your\nwebsite even if Node.js integration is otherwise disabled.\nElectron enables developers to disable various security features that control\na renderer process. In most cases, developers do not need to disable any of\nthose features - and you should therefore not allow different configurations\nfor newly created tags.\n\n\nHow?\nBefore a tag is attached, Electron will fire the\nwill-attach-webview event on the hosting webContents. Use the event to\nprevent the creation of WebViews with possibly insecure options.\napp.on('web-contents-created', (event, contents) => {\n contents.on('will-attach-webview', (event, webPreferences, params) => {\n // Strip away preload scripts if unused or verify their location is legitimate\n delete webPreferences.preload\n delete webPreferences.preloadURL\n\n // Disable Node.js integration\n webPreferences.nodeIntegration = false\n\n // Verify URL being loaded\n if (!params.src.startsWith('https://yourapp.com/')) {\n event.preventDefault()\n }\n })\n})\nAgain, this list merely minimizes the risk, it does not remove it. If your goal\nis to display a website, a browser will be a more secure option.\n", + "body": "Security, Native Capabilities, and Your Responsibility\nAs web developers, we usually enjoy the strong security net of the browser -\nthe risks associated with the code we write are relatively small. Our websites\nare granted limited powers in a sandbox, and we trust that our users enjoy a\nbrowser built by a large team of engineers that is able to quickly respond to\nnewly discovered security threats.\nWhen working with Electron, it is important to understand that Electron is not\na web browser. It allows you to build feature-rich desktop applications with\nfamiliar web technologies, but your code wields much greater power. JavaScript\ncan access the filesystem, user shell, and more. This allows you to build\nhigh quality native applications, but the inherent security risks scale with\nthe additional powers granted to your code.\nWith that in mind, be aware that displaying arbitrary content from untrusted\nsources poses a severe security risk that Electron is not intended to handle.\nIn fact, the most popular Electron apps (Atom, Slack, Visual Studio Code, etc)\ndisplay primarily local content (or trusted, secure remote content without Node\nintegration) – if your application executes code from an online source, it is\nyour responsibility to ensure that the code is not malicious.\n\n\nReporting Security Issues\nFor information on how to properly disclose an Electron vulnerability,\nsee SECURITY.md\n\n\nChromium Security Issues and Upgrades\nWhile Electron strives to support new versions of Chromium as soon as possible,\ndevelopers should be aware that upgrading is a serious undertaking - involving\nhand-editing dozens or even hundreds of files. Given the resources and\ncontributions available today, Electron will often not be on the very latest\nversion of Chromium, lagging behind by several weeks or a few months.\nWe feel that our current system of updating the Chromium component strikes an\nappropriate balance between the resources we have available and the needs of\nthe majority of applications built on top of the framework. We definitely are\ninterested in hearing more about specific use cases from the people that build\nthings on top of Electron. Pull requests and contributions supporting this\neffort are always very welcome.\n\n\nIgnoring Above Advice\nA security issue exists whenever you receive code from a remote destination and\nexecute it locally. As an example, consider a remote website being displayed\ninside a BrowserWindow. If an attacker somehow manages to\nchange said content (either by attacking the source directly, or by sitting\nbetween your app and the actual destination), they will be able to execute\nnative code on the user's machine.\n\n⚠️ Under no circumstances should you load and execute remote code with\nNode.js integration enabled. Instead, use only local files (packaged together\nwith your application) to execute Node.js code. To display remote content, use\nthe tag and make sure to disable the nodeIntegration.\n\n\n\nElectron Security Warnings\nFrom Electron 2.0 on, developers will see warnings and recommendations printed\nto the developer console. They only show up when the binary's name is Electron,\nindicating that a developer is currently looking at the console.\nYou can force-enable or force-disable these warnings by setting\nELECTRON_ENABLE_SECURITY_WARNINGS or ELECTRON_DISABLE_SECURITY_WARNINGS on\neither process.env or the window object.\n\n\nChecklist: Security Recommendations\nThis is not bulletproof, but at the least, you should follow these steps to\nimprove the security of your application.\n\nOnly load secure content\nDisable the Node.js integration in all renderers that display remote content\nEnable context isolation in all renderers that display remote content\nUse ses.setPermissionRequestHandler() in all sessions that load remote content\nDo not disable webSecurity\nDefine a Content-Security-Policy and use restrictive rules (i.e. script-src 'self')\nDo not set allowRunningInsecureContent to true\nDo not enable experimental features\nDo not use enableBlinkFeatures\n: Do not use allowpopups\n: Verify options and params\nDisable or limit navigation\nDisable or limit creation of new windows\n\n\n\n1) Only Load Secure Content\nAny resources not included with your application should be loaded using a\nsecure protocol like HTTPS. In other words, do not use insecure protocols\nlike HTTP. Similarly, we recommend the use of WSS over WS, FTPS over\nFTP, and so on.\n\n\nWhy?\nHTTPS has three main benefits:\n1) It authenticates the remote server, ensuring your app connects to the correct\nhost instead of an impersonator.\n2) It ensures data integrity, asserting that the data was not modified while in\ntransit between your application and the host.\n3) It encrypts the traffic between your user and the destination host, making it\nmore difficult to eavesdrop on the information sent between your app and\nthe host.\n\n\nHow?\n// Bad\nbrowserWindow.loadURL('http://my-website.com')\n\n// Good\nbrowserWindow.loadURL('https://my-website.com')\n\n\n\n\n\n\n\n\n\n2) Disable Node.js Integration for Remote Content\nIt is paramount that you disable Node.js integration in any renderer\n(BrowserWindow, BrowserView, or\n) that loads remote content. The goal is to limit the\npowers you grant to remote content, thus making it dramatically more difficult\nfor an attacker to harm your users should they gain the ability to execute\nJavaScript on your website.\nAfter this, you can grant additional permissions for specific hosts. For example,\nif you are opening a BrowserWindow pointed at `https://my-website.com/\", you can\ngive that website exactly the abilities it needs, but no more.\n\n\nWhy?\nA cross-site-scripting (XSS) attack is more dangerous if an attacker can jump\nout of the renderer process and execute code on the user's computer.\nCross-site-scripting attacks are fairly common - and while an issue, their\npower is usually limited to messing with the website that they are executed on.\nDisabling Node.js integration helps prevent an XSS from being escalated into a\nso-called \"Remote Code Execution\" (RCE) attack.\n\n\nHow?\n// Bad\nconst mainWindow = new BrowserWindow()\nmainWindow.loadURL('https://my-website.com')\n// Good\nconst mainWindow = new BrowserWindow({\n webPreferences: {\n nodeIntegration: false,\n preload: './preload.js'\n }\n})\n\nmainWindow.loadURL('https://my-website.com')\n\n\n\n\n\nWhen disabling Node.js integration, you can still expose APIs to your website that\ndo consume Node.js modules or features. Preload scripts continue to have access\nto require and other Node.js features, allowing developers to expose a custom\nAPI to remotely loaded content.\nIn the following example preload script, the later loaded website will have\naccess to a window.readConfig() method, but no Node.js features.\nconst { readFileSync } = require('fs')\n\nwindow.readConfig = function () {\n const data = readFileSync('./config.json')\n return data\n}\n\n\n3) Enable Context Isolation for Remote Content\nContext isolation is an Electron feature that allows developers to run code\nin preload scripts and in Electron APIs in a dedicated JavaScript context. In\npractice, that means that global objects like Array.prototype.push or\nJSON.parse cannot be modified by scripts running in the renderer process.\nElectron uses the same technology as Chromium's Content Scripts\nto enable this behavior.\n\n\nWhy?\nContext isolation allows each the scripts on running in the renderer to make\nchanges to its JavaScript environment without worrying about conflicting with\nthe scripts in the Electron API or the preload script.\nWhile still an experimental Electron feature, context isolation adds an\nadditional layer of security. It creates a new JavaScript world for Electron\nAPIs and preload scripts.\nAt the same time, preload scripts still have access to the document and\nwindow objects. In other words, you're getting a decent return on a likely\nvery small investment.\n\n\nHow?\n// Main process\nconst mainWindow = new BrowserWindow({\n webPreferences: {\n contextIsolation: true,\n preload: 'preload.js'\n }\n})\n// Preload script\n\n// Set a variable in the page before it loads\nwebFrame.executeJavaScript('window.foo = \"foo\";')\n\n// The loaded page will not be able to access this, it is only available\n// in this context\nwindow.bar = 'bar'\n\ndocument.addEventListener('DOMContentLoaded', () => {\n // Will log out 'undefined' since window.foo is only available in the main\n // context\n console.log(window.foo)\n\n // Will log out 'bar' since window.bar is available in this context\n console.log(window.bar)\n})\n\n\n4) Handle Session Permission Requests From Remote Content\nYou may have seen permission requests while using Chrome: They pop up whenever\nthe website attempts to use a feature that the user has to manually approve (\nlike notifications).\nThe API is based on the Chromium permissions API\nand implements the same types of permissions.\n\n\nWhy?\nBy default, Electron will automatically approve all permission requests unless\nthe developer has manually configured a custom handler. While a solid default,\nsecurity-conscious developers might want to assume the very opposite.\n\n\nHow?\nconst { session } = require('electron')\n\nsession\n .fromPartition('some-partition')\n .setPermissionRequestHandler((webContents, permission, callback) => {\n const url = webContents.getURL()\n\n if (permission === 'notifications') {\n // Approves the permissions request\n callback(true)\n }\n\n // Verify URL\n if (!url.startsWith('https://my-website.com/')) {\n // Denies the permissions request\n return callback(false)\n }\n })\n\n\n5) Do Not Disable WebSecurity\nRecommendation is Electron's default\nYou may have already guessed that disabling the webSecurity property on a\nrenderer process (BrowserWindow,\nBrowserView, or ) disables crucial\nsecurity features.\nDo not disable webSecurity in production applications.\n\n\nWhy?\nDisabling webSecurity will disable the same-origin policy and set\nallowRunningInsecureContent property to true. In other words, it allows\nthe execution of insecure code from different domains.\n\n\nHow?\n// Bad\nconst mainWindow = new BrowserWindow({\n webPreferences: {\n webSecurity: false\n }\n})\n// Good\nconst mainWindow = new BrowserWindow()\n\n\n\n\n\n\n\n6) Define a Content Security Policy\nA Content Security Policy (CSP) is an additional layer of protection against\ncross-site-scripting attacks and data injection attacks. We recommend that they\nbe enabled by any website you load inside Electron.\n\n\nWhy?\nCSP allows the server serving content to restrict and control the resources\nElectron can load for that given web page. https://your-page.com should\nbe allowed to load scripts from the origins you defined while scripts from\nhttps://evil.attacker.com should not be allowed to run. Defining a CSP is an\neasy way to improve your application's security.\nThe following CSP will allow Electron to execute scripts from the current\nwebsite and from apis.mydomain.com.\n// Bad\nContent-Security-Policy: '*'\n\n// Good\nContent-Security-Policy: script-src 'self' https://apis.mydomain.com\n\n\nCSP HTTP Header\nElectron respects the Content-Security-Policy HTTP header\nwhich can be set using Electron's\nwebRequest.onHeadersReceived\nhandler:\nconst { session } = require('electron')\n\nsession.defaultSession.webRequest.onHeadersReceived((details, callback) => {\n callback({\n responseHeaders: {\n ...details.responseHeaders,\n 'Content-Security-Policy': ['default-src \\'none\\'']\n }\n })\n})\n\n\nCSP Meta Tag\nCSP's preferred delivery mechanism is an HTTP header, however it is not possible\nto use this method when loading a resource using the file:// protocol. It can\nbe useful in some cases, such as using the file:// protocol, to set a policy\non a page directly in the markup using a tag:\n\n\n\nwebRequest.onHeadersReceived([filter, ]listener)\n\n\n7) Do Not Set allowRunningInsecureContent to true\nRecommendation is Electron's default\nBy default, Electron will not allow websites loaded over HTTPS to load and\nexecute scripts, CSS, or plugins from insecure sources (HTTP). Setting the\nproperty allowRunningInsecureContent to true disables that protection.\nLoading the initial HTML of a website over HTTPS and attempting to load\nsubsequent resources via HTTP is also known as \"mixed content\".\n\n\nWhy?\nLoading content over HTTPS assures the authenticity and integrity\nof the loaded resources while encrypting the traffic itself. See the section on\nonly displaying secure content for more details.\n\n\nHow?\n// Bad\nconst mainWindow = new BrowserWindow({\n webPreferences: {\n allowRunningInsecureContent: true\n }\n})\n// Good\nconst mainWindow = new BrowserWindow({})\n\n\n8) Do Not Enable Experimental Features\nRecommendation is Electron's default\nAdvanced users of Electron can enable experimental Chromium features using the\nexperimentalFeatures property.\n\n\nWhy?\nExperimental features are, as the name suggests, experimental and have not been\nenabled for all Chromium users. Furthermore, their impact on Electron as a whole\nhas likely not been tested.\nLegitimate use cases exist, but unless you know what you are doing, you should\nnot enable this property.\n\n\nHow?\n// Bad\nconst mainWindow = new BrowserWindow({\n webPreferences: {\n experimentalFeatures: true\n }\n})\n// Good\nconst mainWindow = new BrowserWindow({})\n\n\n9) Do Not Use enableBlinkFeatures\nRecommendation is Electron's default\nBlink is the name of the rendering engine behind Chromium. As with\nexperimentalFeatures, the enableBlinkFeatures property allows developers to\nenable features that have been disabled by default.\n\n\nWhy?\nGenerally speaking, there are likely good reasons if a feature was not enabled\nby default. Legitimate use cases for enabling specific features exist. As a\ndeveloper, you should know exactly why you need to enable a feature, what the\nramifications are, and how it impacts the security of your application. Under\nno circumstances should you enable features speculatively.\n\n\nHow?\n// Bad\nconst mainWindow = new BrowserWindow({\n webPreferences: {\n enableBlinkFeatures: ['ExecCommandInJavaScript']\n }\n})\n// Good\nconst mainWindow = new BrowserWindow()\n\n\n10) Do Not Use allowpopups\nRecommendation is Electron's default\nIf you are using , you might need the pages and scripts\nloaded in your tag to open new windows. The allowpopups attribute\nenables them to create new BrowserWindows using the\nwindow.open() method. tags are otherwise not allowed to create new\nwindows.\n\n\nWhy?\nIf you do not need popups, you are better off not allowing the creation of\nnew BrowserWindows by default. This follows the principle\nof minimally required access: Don't let a website create new popups unless\nyou know it needs that feature.\n\n\nHow?\n\n\n\n\n\n\n\n11) Verify WebView Options Before Creation\nA WebView created in a renderer process that does not have Node.js integration\nenabled will not be able to enable integration itself. However, a WebView will\nalways create an independent renderer process with its own webPreferences.\nIt is a good idea to control the creation of new tags\nfrom the main process and to verify that their webPreferences do not disable\nsecurity features.\n\n\nWhy?\nSince live in the DOM, they can be created by a script running on your\nwebsite even if Node.js integration is otherwise disabled.\nElectron enables developers to disable various security features that control\na renderer process. In most cases, developers do not need to disable any of\nthose features - and you should therefore not allow different configurations\nfor newly created tags.\n\n\nHow?\nBefore a tag is attached, Electron will fire the\nwill-attach-webview event on the hosting webContents. Use the event to\nprevent the creation of webViews with possibly insecure options.\napp.on('web-contents-created', (event, contents) => {\n contents.on('will-attach-webview', (event, webPreferences, params) => {\n // Strip away preload scripts if unused or verify their location is legitimate\n delete webPreferences.preload\n delete webPreferences.preloadURL\n\n // Disable Node.js integration\n webPreferences.nodeIntegration = false\n\n // Verify URL being loaded\n if (!params.src.startsWith('https://yourapp.com/')) {\n event.preventDefault()\n }\n })\n})\nAgain, this list merely minimizes the risk, it does not remove it. If your goal\nis to display a website, a browser will be a more secure option.\n\n\n12) Disable or limit navigation\nIf your app has no need to navigate or only needs to navigate to known pages,\nit is a good idea to limit navigation outright to that known scope, disallowing\nany other kinds of navigation.\n\n\nWhy?\nNavigation is a common attack vector. If an attacker can convince your app to\nnavigate away from its current page, they can possibly force your app to open\nweb sites on the Internet. Even if your webContents are configured to be more\nsecure (like having nodeIntegration disabled or contextIsolation enabled),\ngetting your app to open a random web site will make the work of exploiting your\napp a lot easier.\nA common attack pattern is that the attacker convinces your app's users to\ninteract with the app in such a way that it navigates to one of the attacker's\npages. This is usually done via links, plugins, or other user-generated content.\n\n\nHow?\nIf your app has no need for navigation, you can call event.preventDefault()\nin a will-navigate handler. If you know which pages your app\nmight navigate to, check the URL in the event handler and only let navigation\noccur if it matches the URLs you're expecting.\nWe recommend that you use Node's parser for URLs. Simple string comparisons can\nsometimes be fooled - a startsWith('https://google.com') test would let\nhttps://google.com.attacker.com through.\nconst URL = require('url').URL\n\napp.on('web-contents-created', (event, contents) => {\n contents.on('will-navigate', (event, navigationUrl) => {\n const parsedUrl = new URL(navigationUrl)\n\n if (parsedUrl.origin !== 'https://my-own-server.com') {\n event.preventDefault()\n }\n })\n})\n\n\n13) Disable or limit creation of new windows\nIf you have a known set of windows, it's a good idea to limit the creation of\nadditional windows in your app.\n\n\nWhy?\nMuch like navigation, the creation of new webContents is a common attack\nvector. Attackers attempt to convince your app to create new windows, frames,\nor other renderer processes with more privileges than they had before; or\nwith pages opened that they couldn't open before.\nIf you have no need to create windows in addition to the ones you know you'll\nneed to create, disabling the creation buys you a little bit of extra\nsecurity at no cost. This is commonly the case for apps that open one\nBrowserWindow and do not need to open an arbitrary number of additional\nwindows at runtime.\n\n\nHow?\nwebContents will emit the new-window event\nbefore creating new windows. That event will be passed, amongst other\nparameters, the url the window was requested to open and the options used to\ncreate it. We recommend that you use the event to scrutinize the creation of\nwindows, limiting it to only what you need.\nconst { shell } = require('electron')\n\napp.on('web-contents-created', (event, contents) => {\n contents.on('new-window', (event, navigationUrl) => {\n // In this example, we'll ask the operating system\n // to open this event's url in the default browser.\n event.preventDefault()\n\n shell.openExternalSync(navigationUrl)\n })\n})\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -823,7 +871,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/snapcraft.md", "url": "https://electronjs.org/docs/tutorial/snapcraft", "slug": "snapcraft", - "body": "Snapcraft Guide (Ubuntu Software Center & More)\nThis guide provides information on how to package your Electron application\nfor any Snapcraft environment, including the Ubuntu Software Center.\n\n\nBackground and Requirements\nTogether with the broader Linux community, Canonical aims to fix many of the\ncommon software installation problems with the snapcraft\nproject. Snaps are containerized software packages that include required\ndependencies, auto-update, and work on all major Linux distributions without\nsystem modification.\nThere are three ways to create a .snap file:\n1) Using electron-forge or\nelectron-builder, both tools that come with snap\nsupport out of the box. This is the easiest option.\n2) Using electron-installer-snap, which takes electron-packager's output.\n3) Using an already created .deb package.\nIn all cases, you will need to have the snapcraft tool installed. We\nrecommend building on Ubuntu 16.04 (or the current LTS).\nsnap install snapcraft --classic\nWhile it is possible to install snapcraft on macOS using Homebrew, it\nis not able to build snap packages and is focused on managing packages\nin the store.\n\n\nUsing electron-installer-snap\nThe module works like electron-winstaller and similar\nmodules in that its scope is limited to building snap packages. You can install\nit with:\nnpm install --save-dev electron-installer-snap\n\n\nStep 1: Package Your Electron Application\nPackage the application using electron-packager (or a\nsimilar tool). Make sure to remove node_modules that you don't need in your\nfinal application, since any module you don't actually need will increase\nyour application's size.\nThe output should look roughly like this:\n.\n└── dist\n └── app-linux-x64\n ├── LICENSE\n ├── LICENSES.chromium.html\n ├── content_shell.pak\n ├── app\n ├── icudtl.dat\n ├── libgcrypt.so.11\n ├── libnode.so\n ├── locales\n ├── natives_blob.bin\n ├── resources\n ├── snapshot_blob.bin\n └── version\n\n\nStep 2: Running electron-installer-snap\nFrom a terminal that has snapcraft in its PATH, run electron-installer-snap\nwith the only required parameter --src, which is the location of your packaged\nElectron application created in the first step.\nnpx electron-installer-snap --src=out/myappname-linux-x64\nIf you have an existing build pipeline, you can use electron-installer-snap\nprogrammatically. For more information, see the Snapcraft API docs.\nconst snap = require('electron-installer-snap')\n\nsnap(options)\n .then(snapPath => console.log(`Created snap at ${snapPath}!`))\n\n\nUsing an Existing Debian Package\nSnapcraft is capable of taking an existing .deb file and turning it into\na .snap file. The creation of a snap is configured using a snapcraft.yaml\nfile that describes the sources, dependencies, description, and other core\nbuilding blocks.\n\n\nStep 1: Create a Debian Package\nIf you do not already have a .deb package, using electron-installer-snap\nmight be an easier path to create snap packages. However, multiple solutions\nfor creating Debian packages exist, including electron-forge,\nelectron-builder or\nelectron-installer-debian.\n\n\nStep 2: Create a snapcraft.yaml\nFor more information on the available configuration options, see the\ndocumentation on the snapcraft syntax.\nLet's look at an example:\nname: myApp\nversion: '2.0.0'\nsummary: A little description for the app.\ndescription: |\n You know what? This app is amazing! It does all the things\n for you. Some say it keeps you young, maybe even happy.\n\ngrade: stable\nconfinement: classic\n\nparts:\n slack:\n plugin: dump\n source: my-deb.deb\n source-type: deb\n after:\n - desktop-gtk3\n stage-packages:\n - libasound2\n - libgconf2-4\n - libnotify4\n - libnspr4\n - libnss3\n - libpcre3\n - libpulse0\n - libxss1\n - libxtst6\n electron-launch:\n plugin: dump\n source: files/\n prepare: |\n chmod +x bin/electron-launch\n\napps:\n myApp:\n command: bin/electron-launch $SNAP/usr/lib/myApp/myApp\n desktop: usr/share/applications/myApp.desktop\n # Correct the TMPDIR path for Chromium Framework/Electron to ensure\n # libappindicator has readable resources.\n environment:\n TMPDIR: $XDG_RUNTIME_DIR\nAs you can see, the snapcraft.yaml instructs the system to launch a file\ncalled electron-launch. In this example, it passes information on to the\napp's binary:\n#!/bin/sh\n\nexec \"$@\" --executed-from=\"$(pwd)\" --pid=$$ > /dev/null 2>&1 &\nAlternatively, if you're building your snap with strict confinement, you\ncan use the desktop-launch command:\napps:\n myApp:\n # Correct the TMPDIR path for Chromium Framework/Electron to ensure\n # libappindicator has readable resources.\n command: env TMPDIR=$XDG_RUNTIME_DIR PATH=/usr/local/bin:${PATH} ${SNAP}/bin/desktop-launch $SNAP/myApp/desktop\n desktop: usr/share/applications/desktop.desktop\n", + "body": "Snapcraft Guide (Ubuntu Software Center & More)\nThis guide provides information on how to package your Electron application\nfor any Snapcraft environment, including the Ubuntu Software Center.\n\n\nBackground and Requirements\nTogether with the broader Linux community, Canonical aims to fix many of the\ncommon software installation problems with the snapcraft\nproject. Snaps are containerized software packages that include required\ndependencies, auto-update, and work on all major Linux distributions without\nsystem modification.\nThere are three ways to create a .snap file:\n1) Using electron-forge or\nelectron-builder, both tools that come with snap\nsupport out of the box. This is the easiest option.\n2) Using electron-installer-snap, which takes electron-packager's output.\n3) Using an already created .deb package.\nIn all cases, you will need to have the snapcraft tool installed. We\nrecommend building on Ubuntu 16.04 (or the current LTS).\nsnap install snapcraft --classic\nWhile it is possible to install snapcraft on macOS using Homebrew, it\nis not able to build snap packages and is focused on managing packages\nin the store.\n\n\nUsing electron-installer-snap\nThe module works like electron-winstaller and similar\nmodules in that its scope is limited to building snap packages. You can install\nit with:\nnpm install --save-dev electron-installer-snap\n\n\nStep 1: Package Your Electron Application\nPackage the application using electron-packager (or a\nsimilar tool). Make sure to remove node_modules that you don't need in your\nfinal application, since any module you don't actually need will increase\nyour application's size.\nThe output should look roughly like this:\n.\n└── dist\n └── app-linux-x64\n ├── LICENSE\n ├── LICENSES.chromium.html\n ├── content_shell.pak\n ├── app\n ├── icudtl.dat\n ├── libgcrypt.so.11\n ├── libnode.so\n ├── locales\n ├── natives_blob.bin\n ├── resources\n ├── v8_context_snapshot.bin\n └── version\n\n\nStep 2: Running electron-installer-snap\nFrom a terminal that has snapcraft in its PATH, run electron-installer-snap\nwith the only required parameter --src, which is the location of your packaged\nElectron application created in the first step.\nnpx electron-installer-snap --src=out/myappname-linux-x64\nIf you have an existing build pipeline, you can use electron-installer-snap\nprogrammatically. For more information, see the Snapcraft API docs.\nconst snap = require('electron-installer-snap')\n\nsnap(options)\n .then(snapPath => console.log(`Created snap at ${snapPath}!`))\n\n\nUsing an Existing Debian Package\nSnapcraft is capable of taking an existing .deb file and turning it into\na .snap file. The creation of a snap is configured using a snapcraft.yaml\nfile that describes the sources, dependencies, description, and other core\nbuilding blocks.\n\n\nStep 1: Create a Debian Package\nIf you do not already have a .deb package, using electron-installer-snap\nmight be an easier path to create snap packages. However, multiple solutions\nfor creating Debian packages exist, including electron-forge,\nelectron-builder or\nelectron-installer-debian.\n\n\nStep 2: Create a snapcraft.yaml\nFor more information on the available configuration options, see the\ndocumentation on the snapcraft syntax.\nLet's look at an example:\nname: myApp\nversion: '2.0.0'\nsummary: A little description for the app.\ndescription: |\n You know what? This app is amazing! It does all the things\n for you. Some say it keeps you young, maybe even happy.\n\ngrade: stable\nconfinement: classic\n\nparts:\n slack:\n plugin: dump\n source: my-deb.deb\n source-type: deb\n after:\n - desktop-gtk3\n stage-packages:\n - libasound2\n - libgconf2-4\n - libnotify4\n - libnspr4\n - libnss3\n - libpcre3\n - libpulse0\n - libxss1\n - libxtst6\n electron-launch:\n plugin: dump\n source: files/\n prepare: |\n chmod +x bin/electron-launch\n\napps:\n myApp:\n command: bin/electron-launch $SNAP/usr/lib/myApp/myApp\n desktop: usr/share/applications/myApp.desktop\n # Correct the TMPDIR path for Chromium Framework/Electron to ensure\n # libappindicator has readable resources.\n environment:\n TMPDIR: $XDG_RUNTIME_DIR\nAs you can see, the snapcraft.yaml instructs the system to launch a file\ncalled electron-launch. In this example, it passes information on to the\napp's binary:\n#!/bin/sh\n\nexec \"$@\" --executed-from=\"$(pwd)\" --pid=$$ > /dev/null 2>&1 &\nAlternatively, if you're building your snap with strict confinement, you\ncan use the desktop-launch command:\napps:\n myApp:\n # Correct the TMPDIR path for Chromium Framework/Electron to ensure\n # libappindicator has readable resources.\n command: env TMPDIR=$XDG_RUNTIME_DIR PATH=/usr/local/bin:${PATH} ${SNAP}/bin/desktop-launch $SNAP/myApp/desktop\n desktop: usr/share/applications/desktop.desktop\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -839,7 +887,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/development/source-code-directory-structure.md", "url": "https://electronjs.org/docs/tutorial/source-code-directory-structure", "slug": "source-code-directory-structure", - "body": "Source Code Directory Structure\nThe source code of Electron is separated into a few parts, mostly\nfollowing Chromium on the separation conventions.\nYou may need to become familiar with Chromium's multi-process\narchitecture\nto understand the source code better.\n\n\nStructure of Source Code\nElectron\n├── atom/ - C++ source code.\n| ├── app/ - System entry code.\n| ├── browser/ - The frontend including the main window, UI, and all of the\n| | main process things. This talks to the renderer to manage web pages.\n| | ├── ui/ - Implementation of UI stuff for different platforms.\n| | | ├── cocoa/ - Cocoa specific source code.\n| | | ├── win/ - Windows GUI specific source code.\n| | | └── x/ - X11 specific source code.\n| | ├── api/ - The implementation of the main process APIs.\n| | ├── net/ - Network related code.\n| | ├── mac/ - Mac specific Objective-C source code.\n| | └── resources/ - Icons, platform-dependent files, etc.\n| ├── renderer/ - Code that runs in renderer process.\n| | └── api/ - The implementation of renderer process APIs.\n| └── common/ - Code that used by both the main and renderer processes,\n| including some utility functions and code to integrate node's message\n| loop into Chromium's message loop.\n| └── api/ - The implementation of common APIs, and foundations of\n| Electron's built-in modules.\n├── brightray/ - Thin shim over libcc that makes it easier to use.\n├── chromium_src/ - Source code copied from Chromium. See below.\n├── default_app/ - The default page to show when Electron is started without\n| providing an app.\n├── docs/ - Documentations.\n├── lib/ - JavaScript source code.\n| ├── browser/ - Javascript main process initialization code.\n| | └── api/ - Javascript API implementation.\n| ├── common/ - JavaScript used by both the main and renderer processes\n| | └── api/ - Javascript API implementation.\n| └── renderer/ - Javascript renderer process initialization code.\n| └── api/ - Javascript API implementation.\n├── spec/ - Automatic tests.\n├── electron.gyp - Building rules of Electron.\n└── common.gypi - Compiler specific settings and building rules for other\n components like `node` and `breakpad`.\n\n\n/chromium_src\nThe files in /chromium_src tend to be pieces of Chromium that aren't part of\nthe content layer. For example to implement Pepper API, we need some wiring\nsimilar to what official Chrome does. We could have built the relevant\nsources as a part of libcc but most\noften we don't require all the features (some tend to be proprietary,\nanalytics stuff) so we took parts of the code. These could have easily\nbeen patches in libcc, but at the time when these were written the goal of\nlibcc was to maintain very minimal patches and chromium_src changes tend to be\nbig ones. Also, note that these patches can never be upstreamed unlike other\nlibcc patches we maintain now.\n\n\nStructure of Other Directories\n\nscript - Scripts used for development purpose like building, packaging,\ntesting, etc.\ntools - Helper scripts used by gyp files, unlike script, scripts put\nhere should never be invoked by users directly.\nvendor - Source code of third party dependencies, we didn't use\nthird_party as name because it would confuse it with the same directory in\nChromium's source code tree.\nnode_modules - Third party node modules used for building.\nout - Temporary output directory of ninja.\ndist - Temporary directory created by script/create-dist.py script\nwhen creating a distribution.\nexternal_binaries - Downloaded binaries of third-party frameworks which\ndo not support building with gyp.\n\n\n\nKeeping Git Submodules Up to Date\nThe Electron repository has a few vendored dependencies, found in the\n/vendor directory. Occasionally you might see a message like this\nwhen running git status:\n$ git status\n\n\tmodified: vendor/libchromiumcontent (new commits)\n\tmodified: vendor/node (new commits)\nTo update these vendored dependencies, run the following command:\ngit submodule update --init --recursive\nIf you find yourself running this command often, you can create an alias for it\nin your ~/.gitconfig file:\n[alias]\n\tsu = submodule update --init --recursive\n", + "body": "Source Code Directory Structure\nThe source code of Electron is separated into a few parts, mostly\nfollowing Chromium on the separation conventions.\nYou may need to become familiar with Chromium's multi-process\narchitecture\nto understand the source code better.\n\n\nStructure of Source Code\nElectron\n├── atom/ - C++ source code.\n| ├── app/ - System entry code.\n| ├── browser/ - The frontend including the main window, UI, and all of the\n| | | main process things. This talks to the renderer to manage web\n| | | pages.\n| | ├── ui/ - Implementation of UI stuff for different platforms.\n| | | ├── cocoa/ - Cocoa specific source code.\n| | | ├── win/ - Windows GUI specific source code.\n| | | └── x/ - X11 specific source code.\n| | ├── api/ - The implementation of the main process APIs.\n| | ├── net/ - Network related code.\n| | ├── mac/ - Mac specific Objective-C source code.\n| | └── resources/ - Icons, platform-dependent files, etc.\n| ├── renderer/ - Code that runs in renderer process.\n| | └── api/ - The implementation of renderer process APIs.\n| └── common/ - Code that used by both the main and renderer processes,\n| | including some utility functions and code to integrate node's\n| | message loop into Chromium's message loop.\n| └── api/ - The implementation of common APIs, and foundations of\n| Electron's built-in modules.\n├── chromium_src/ - Source code copied from Chromium. See below.\n├── default_app/ - The default page to show when Electron is started without\n| providing an app.\n├── docs/ - Documentations.\n├── lib/ - JavaScript source code.\n| ├── browser/ - Javascript main process initialization code.\n| | └── api/ - Javascript API implementation.\n| ├── common/ - JavaScript used by both the main and renderer processes\n| | └── api/ - Javascript API implementation.\n| └── renderer/ - Javascript renderer process initialization code.\n| └── api/ - Javascript API implementation.\n├── native_mate/ - A fork of Chromium's gin library that makes it easier to marshal\n| types between C++ and JavaScript.\n├── spec/ - Automatic tests.\n└── BUILD.gn - Building rules of Electron.\n\n\n/chromium_src\nThe files in /chromium_src tend to be pieces of Chromium that aren't part of\nthe content layer. For example to implement Pepper API, we need some wiring\nsimilar to what official Chrome does. We could have built the relevant\nsources as a part of libcc but most\noften we don't require all the features (some tend to be proprietary,\nanalytics stuff) so we took parts of the code. These could have easily\nbeen patches in libcc, but at the time when these were written the goal of\nlibcc was to maintain very minimal patches and chromium_src changes tend to be\nbig ones. Also, note that these patches can never be upstreamed unlike other\nlibcc patches we maintain now.\n\n\nStructure of Other Directories\n\nscript - Scripts used for development purpose like building, packaging,\ntesting, etc.\ntools - Helper scripts used by GN files, unlike script, scripts put\nhere should never be invoked by users directly.\nvendor - Source code of third party dependencies, we didn't use\nthird_party as name because it would confuse it with the same directory in\nChromium's source code tree.\nnode_modules - Third party node modules used for building.\nout - Temporary output directory of ninja.\ndist - Temporary directory created by script/create-dist.py script\nwhen creating a distribution.\nexternal_binaries - Downloaded binaries of third-party frameworks which\ndo not support building with gn.\n\n\n\nKeeping Git Submodules Up to Date\nThe Electron repository has a few vendored dependencies, found in the\n/vendor directory. Occasionally you might see a message like this\nwhen running git status:\n$ git status\n\n\tmodified: vendor/depot_tools (new commits)\n\tmodified: vendor/boto (new commits)\nTo update these vendored dependencies, run the following command:\ngit submodule update --init --recursive\nIf you find yourself running this command often, you can create an alias for it\nin your ~/.gitconfig file:\n[alias]\n\tsu = submodule update --init --recursive\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -871,7 +919,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/support.md", "url": "https://electronjs.org/docs/tutorial/support", "slug": "support", - "body": "Electron Support\n\n\nFinding Support\nIf you have a security concern,\nplease see the security document.\nIf you're looking for programming help,\nfor answers to questions,\nor to join in discussion with other developers who use Electron,\nyou can interact with the community in these locations:\n\nelectron category on the Atom\nforums\n#atom-shell channel on Freenode\nElectron channel on Atom's Slack\nelectron-ru (Russian)\nelectron-br (Brazilian Portuguese)\nelectron-kr (Korean)\nelectron-jp (Japanese)\nelectron-tr (Turkish)\nelectron-id (Indonesia)\nelectron-pl (Poland)\n\nIf you'd like to contribute to Electron,\nsee the contributing document.\nIf you've found a bug in a supported version of Electron,\nplease report it with the issue tracker.\nawesome-electron\nis a community-maintained list of useful example apps,\ntools and resources.\n\n\nSupported Versions\nThe latest three release branches are supported by the Electron team.\nFor example, if the latest release is 2.0.x, then the 2-0-x series\nis supported, as are the two previous release series 1-7-x and 1-8-x.\nWhen a release branch reaches the end of its support cycle, the series\nwill be deprecated in NPM and a final end-of-support release will be\nmade. This release will add a warning to inform that an unsupported\nversion of Electron is in use.\nThese steps are to help app developers learn when a branch they're\nusing becomes unsupported, but without being excessively intrusive\nto end users.\nIf an application has exceptional circumstances and needs to stay\non an unsupported series of Electron, developers can silence the\nend-of-support warning by omitting the final release from the app's\npackage.json devDependencies. For example, since the 1-6-x series\nended with an end-of-support 1.6.18 release, developers could choose\nto stay in the 1-6-x series without warnings with devDependency of\n\"electron\": 1.6.0 - 1.6.17.\n\n\nSupported Platforms\nFollowing platforms are supported by Electron:\n\n\nmacOS\nOnly 64bit binaries are provided for macOS, and the minimum macOS version\nsupported is macOS 10.9.\n\n\nWindows\nWindows 7 and later are supported, older operating systems are not supported\n(and do not work).\nBoth ia32 (x86) and x64 (amd64) binaries are provided for Windows.\nRunning Electron apps on Windows for ARM devices is possible by using the\nia32 binary.\n\n\nLinux\nThe prebuilt ia32 (i686) and x64 (amd64) binaries of Electron are built on\nUbuntu 12.04, the armv7l binary is built against ARM v7 with hard-float ABI and\nNEON for Debian Wheezy.\nUntil the release of Electron 2.0, Electron will also\ncontinue to release the armv7l binary with a simple arm suffix. Both binaries\nare identical.\nWhether the prebuilt binary can run on a distribution depends on whether the\ndistribution includes the libraries that Electron is linked to on the building\nplatform, so only Ubuntu 12.04 is guaranteed to work, but following platforms\nare also verified to be able to run the prebuilt binaries of Electron:\n\nUbuntu 12.04 and newer\nFedora 21\nDebian 8\n\n", + "body": "Electron Support\n\n\nFinding Support\nIf you have a security concern,\nplease see the security document.\nIf you're looking for programming help,\nfor answers to questions,\nor to join in discussion with other developers who use Electron,\nyou can interact with the community in these locations:\n\nelectron category on the Atom\nforums\n#atom-shell channel on Freenode\nElectron channel on Atom's Slack\nelectron-ru (Russian)\nelectron-br (Brazilian Portuguese)\nelectron-kr (Korean)\nelectron-jp (Japanese)\nelectron-tr (Turkish)\nelectron-id (Indonesia)\nelectron-pl (Poland)\n\nIf you'd like to contribute to Electron,\nsee the contributing document.\nIf you've found a bug in a supported version of Electron,\nplease report it with the issue tracker.\nawesome-electron\nis a community-maintained list of useful example apps,\ntools and resources.\n\n\nSupported Versions\nThe latest three release branches are supported by the Electron team.\nFor example, if the latest release is 2.0.x, then the 2-0-x series\nis supported, as are the two previous release series 1-7-x and 1-8-x.\nWhen a release branch reaches the end of its support cycle, the series\nwill be deprecated in NPM and a final end-of-support release will be\nmade. This release will add a warning to inform that an unsupported\nversion of Electron is in use.\nThese steps are to help app developers learn when a branch they're\nusing becomes unsupported, but without being excessively intrusive\nto end users.\nIf an application has exceptional circumstances and needs to stay\non an unsupported series of Electron, developers can silence the\nend-of-support warning by omitting the final release from the app's\npackage.json devDependencies. For example, since the 1-6-x series\nended with an end-of-support 1.6.18 release, developers could choose\nto stay in the 1-6-x series without warnings with devDependency of\n\"electron\": 1.6.0 - 1.6.17.\n\n\nSupported Platforms\nFollowing platforms are supported by Electron:\n\n\nmacOS\nOnly 64bit binaries are provided for macOS, and the minimum macOS version\nsupported is macOS 10.10 (Yosemite).\n\n\nWindows\nWindows 7 and later are supported, older operating systems are not supported\n(and do not work).\nBoth ia32 (x86) and x64 (amd64) binaries are provided for Windows.\nRunning Electron apps on Windows for ARM devices is possible by using the\nia32 binary.\n\n\nLinux\nThe prebuilt ia32 (i686) and x64 (amd64) binaries of Electron are built on\nUbuntu 12.04, the armv7l binary is built against ARM v7 with hard-float ABI and\nNEON for Debian Wheezy.\nUntil the release of Electron 2.0, Electron will also\ncontinue to release the armv7l binary with a simple arm suffix. Both binaries\nare identical.\nWhether the prebuilt binary can run on a distribution depends on whether the\ndistribution includes the libraries that Electron is linked to on the building\nplatform, so only Ubuntu 12.04 is guaranteed to work, but following platforms\nare also verified to be able to run the prebuilt binaries of Electron:\n\nUbuntu 12.04 and newer\nFedora 21\nDebian 8\n\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -913,6 +961,22 @@ "tutorial:testing-on-headless-ci" ] }, + { + "objectID": "tutorial-testing-widevine-cdm", + "title": "Testing Widevine CDM", + "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/testing-widevine-cdm.md", + "url": "https://electronjs.org/docs/tutorial/testing-widevine-cdm", + "slug": "testing-widevine-cdm", + "body": "Testing Widevine CDM\nIn Electron you can use the Widevine CDM library shipped with Chrome browser.\nWidevine Content Decryption Modules (CDMs) are how streaming services protect\ncontent using HTML5 video to web browsers without relying on an NPAPI plugin\nlike Flash or Silverlight. Widevine support is an alternative solution for\nstreaming services that currently rely on Silverlight for playback of\nDRM-protected video content. It will allow websites to show DRM-protected video\ncontent in Firefox without the use of NPAPI plugins. The Widevine CDM runs in an\nopen-source CDM sandbox providing better user security than NPAPI plugins.\n\n\nNote on VMP\nAs of Electron v1.8.0 (Chrome v59),\nthe below steps are may only be some of the necessary steps to enable Widevine;\nany app on or after that version intending to use the Widevine CDM may need to\nbe signed using a license obtained from Widevine\nitself.\nPer Widevine:\n\nChrome 59 (and later) includes support for Verified Media Path (VMP). VMP\nprovides a method to verify the authenticity of a device platform. For browser\ndeployments, this will provide an additional signal to determine if a\nbrowser-based implementation is reliable and secure.\nThe proxy integration guide has been updated with information about VMP and\nhow to issue licenses.\nWidevine recommends our browser-based integrations (vendors and browser-based\napplications) add support for VMP.\n\nTo enable video playback with this new restriction,\ncastLabs has created a\nfork that has implemented the\nnecessary changes to enable Widevine to be played in an Electron application if\none has obtained the necessary licenses from widevine.\n\n\nGetting the library\nOpen chrome://components/ in Chrome browser, find Widevine Content Decryption Module\nand make sure it is up to date, then you can find the library files from the\napplication directory.\n\n\nOn Windows\nThe library file widevinecdm.dll will be under\nProgram Files(x86)/Google/Chrome/Application/CHROME_VERSION/WidevineCdm/_platform_specific/win_(x86|x64)/\ndirectory.\n\n\nOn MacOS\nThe library file libwidevinecdm.dylib will be under\n/Applications/Google Chrome.app/Contents/Versions/CHROME_VERSION/Google Chrome Framework.framework/Versions/A/Libraries/WidevineCdm/_platform_specific/mac_(x86|x64)/\ndirectory.\nNote: Make sure that chrome version used by Electron is greater than or\nequal to the min_chrome_version value of Chrome's widevine cdm component.\nThe value can be found in manifest.json under WidevineCdm directory.\n\n\nUsing the library\nAfter getting the library files, you should pass the path to the file\nwith --widevine-cdm-path command line switch, and the library's version\nwith --widevine-cdm-version switch. The command line switches have to be\npassed before the ready event of app module gets emitted.\nExample code:\nconst { app, BrowserWindow } = require('electron')\n\n// You have to pass the directory that contains widevine library here, it is\n// * `libwidevinecdm.dylib` on macOS,\n// * `widevinecdm.dll` on Windows.\napp.commandLine.appendSwitch('widevine-cdm-path', '/path/to/widevine_library')\n// The version of plugin can be got from `chrome://plugins` page in Chrome.\napp.commandLine.appendSwitch('widevine-cdm-version', '1.4.8.866')\n\nlet win = null\napp.on('ready', () => {\n win = new BrowserWindow()\n win.show()\n})\n\n\nVerifying Widevine CDM support\nTo verify whether widevine works, you can use following ways:\n\nOpen https://shaka-player-demo.appspot.com/ and load a manifest that uses\nWidevine.\nOpen http://www.dash-player.com/demo/drm-test-area/, check whether the page\nsays bitdash uses Widevine in your browser, then play the video.\n\n", + "keyValuePairs": [ + "is:doc", + "is:tutorial", + "doc:Testing Widevine CDM", + "doc:testing-widevine-cdm", + "tutorial:Testing Widevine CDM", + "tutorial:testing-widevine-cdm" + ] + }, { "objectID": "tutorial-updates", "title": "Updating Applications", @@ -935,7 +999,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/development/upgrading-chromium.md", "url": "https://electronjs.org/docs/tutorial/upgrading-chromium", "slug": "upgrading-chromium", - "body": "Upgrading Chromium\nThis is an overview of the steps needed to upgrade Chromium in Electron.\n\nUpgrade libcc to a new Chromium version\nMake Electron code compatible with the new libcc\nUpdate Electron dependencies (crashpad, NodeJS, etc.) if needed\nMake internal builds of libcc and electron\nUpdate Electron docs if necessary\n\n\n\nUpgrade libcc to a new Chromium version\n\n\nGet the code and initialize the project:\n$ git clone git@github.com:electron/libchromiumcontent.git\n$ cd libchromiumcontent\n$ ./script/bootstrap -v\n\nUpdate the Chromium snapshot\n\n\n\nChoose a version number from OmahaProxy\nand update the VERSION file with it\n\nThis can be done manually by visiting OmahaProxy in a browser, or automatically:\nOne-liner for the latest stable mac version: curl -so- https://omahaproxy.appspot.com/mac > VERSION\nOne-liner for the latest win64 beta version: curl -so- https://omahaproxy.appspot.com/all | grep \"win64,beta\" | awk -F, 'NR==1{print $3}' > VERSION\n\n\n\nrun $ ./script/update\n\nBrew some tea -- this may run for 30m or more.\nIt will probably fail applying patches.\n\n\n\n\nFix *.patch files in the patches/ and patches-mas/ folders.\n(Optional) script/update applies patches, but if multiple tries are needed\nyou can manually run the same script that update calls:\n$ ./script/apply-patches\n\n\nThere is a second script, script/patch.py that may be useful.\nRead ./script/patch.py -h for more information.\n\n\nRun the build when all patches can be applied without errors\n\n\n$ ./script/build\nIf some patches are no longer compatible with the Chromium code,\nfix compilation errors.\n\n\nWhen the build succeeds, create a dist for Electron\n\n\n\n$ ./script/create-dist --no_zip\n\nIt will create a dist/main folder in the libcc repo's root.\nYou will need this to build Electron.\n\n\n\n\n(Optional) Update script contents if there are errors resulting from files\nthat were removed or renamed. (--no_zip prevents script from create dist\narchives. You don't need them.)\n\n\n\nUpdate Electron's code\n\n\nGet the code:\n$ git clone git@github.com:electron/electron.git\n$ cd electron\n\n\nIf you have libcc built on your machine in its own repo,\ntell Electron to use it:\n$ ./script/bootstrap.py -v \\\n --libcc_source_path /src \\\n --libcc_shared_library_path /shared_library \\\n --libcc_static_library_path /static_library\n\nIf you haven't yet built libcc but it's already supposed to be upgraded\nto a new Chromium, bootstrap Electron as usual\n$ ./script/bootstrap.py -v\n\n\nEnsure that libcc submodule (vendor/libchromiumcontent) points to the\nright revision\n\n\nSet CLANG_REVISION in script/update-clang.sh to match the version\nChromium is using.\n\n\nLocated in electron/libchromiumcontent/src/tools/clang/scripts/update.py\n\n\nCheckout Chromium if you haven't already:\n\n\n\nhttps://chromium.googlesource.com/chromium/src.git/+/{VERSION}/tools/clang/scripts/update.py\n\n(Replace the {VERSION} placeholder in the url above to the Chromium\nversion libcc uses.)\n\n\n\n\nBuild Electron.\n\n\nTry to build Debug version first: $ ./script/build.py -c D\nYou will need it to run tests\n\n\nFix compilation and linking errors\nEnsure that Release build can be built too\n\n\n$ ./script/build.py -c R\nOften the Release build will have different linking errors that you'll\nneed to fix.\nSome compilation and linking errors are caused by missing source/object\nfiles in the libcc dist\n\n\nUpdate ./script/create-dist in the libcc repo, recreate a dist, and\nrun Electron bootstrap script once again.\n\n\n\nTips for fixing compilation errors\n\nFix build config errors first\nFix fatal errors first, like missing files and errors related to compiler\nflags or defines\n\nTry to identify complex errors as soon as possible.\n\nAsk for help if you're not sure how to fix them\n\n\nDisable all Electron features, fix the build, then enable them one by one\nAdd more build flags to disable features in build-time.\n\nWhen a Debug build of Electron succeeds, run the tests:\n$ ./script/test.py\nFix the failing tests.\nFollow all the steps above to fix Electron code on all supported platforms.\n\n\nUpdating Crashpad\nIf there are any compilation errors related to the Crashpad, it probably means\nyou need to update the fork to a newer revision. See\nUpgrading Crashpad\nfor instructions on how to do that.\n\n\nUpdating NodeJS\nUpgrade vendor/node to the Node release that corresponds to the v8 version\nused in the new Chromium release. See the v8 versions in Node on\nSee Upgrading Node\nfor instructions on this.\n\n\nVerify ffmpeg support\nElectron ships with a version of ffmpeg that includes proprietary codecs by\ndefault. A version without these codecs is built and distributed with each\nrelease as well. Each Chrome upgrade should verify that switching this version\nis still supported.\nYou can verify Electron's support for multiple ffmpeg builds by loading the\nfollowing page. It should work with the default ffmpeg library distributed\nwith Electron and not work with the ffmpeg library built without proprietary\ncodecs.\n\n\n \n \n Proprietary Codec Check\n \n \n

    Checking if Electron is using proprietary codecs by loading video from http://www.quirksmode.org/html5/videos/big_buck_bunny.mp4

    \n

    \n \n \n \n\n\n\nUseful links\n\nChrome Release Schedule\nOmahaProxy\nChromium Issue Tracker\n\n", + "body": "Upgrading Chromium\nThis is an overview of the steps needed to upgrade Chromium in Electron.\n\nUpgrade libcc to a new Chromium version\nMake Electron code compatible with the new libcc\nUpdate Electron dependencies (crashpad, NodeJS, etc.) if needed\nMake internal builds of libcc and electron\nUpdate Electron docs if necessary\n\n\n\nUpgrade libcc to a new Chromium version\n\n\nGet the code and initialize the project:\n$ git clone git@github.com:electron/libchromiumcontent.git\n$ cd libchromiumcontent\n$ ./script/bootstrap -v\n\nUpdate the Chromium snapshot\n\n\n\nChoose a version number from OmahaProxy\nand update the VERSION file with it\n\nThis can be done manually by visiting OmahaProxy in a browser, or automatically:\nOne-liner for the latest stable mac version: curl -so- https://omahaproxy.appspot.com/mac > VERSION\nOne-liner for the latest win64 beta version: curl -so- https://omahaproxy.appspot.com/all | grep \"win64,beta\" | awk -F, 'NR==1{print $3}' > VERSION\n\n\n\nrun $ ./script/update\n\nBrew some tea -- this may run for 30m or more.\nIt will probably fail applying patches.\n\n\n\n\nFix *.patch files in the patches/ and patches-mas/ folders.\n(Optional) script/update applies patches, but if multiple tries are needed\nyou can manually run the same script that update calls:\n$ ./script/apply-patches\n\n\nThere is a second script, script/patch.py that may be useful.\nRead ./script/patch.py -h for more information.\n\n\nRun the build when all patches can be applied without errors\n\n\n$ ./script/build\nIf some patches are no longer compatible with the Chromium code,\nfix compilation errors.\n\n\nWhen the build succeeds, create a dist for Electron\n\n\n\n$ ./script/create-dist --no_zip\n\nIt will create a dist/main folder in the libcc repo's root.\nYou will need this to build Electron.\n\n\n\n\n(Optional) Update script contents if there are errors resulting from files\nthat were removed or renamed. (--no_zip prevents script from create dist\narchives. You don't need them.)\n\n\n\nUpdate Electron's code\n\n\nGet the code:\n$ git clone git@github.com:electron/electron.git\n$ cd electron\n\n\nIf you have libcc built on your machine in its own repo,\ntell Electron to use it:\n$ ./script/bootstrap.py -v \\\n --libcc_source_path /src \\\n --libcc_shared_library_path /shared_library \\\n --libcc_static_library_path /static_library\n\nIf you haven't yet built libcc but it's already supposed to be upgraded\nto a new Chromium, bootstrap Electron as usual\n$ ./script/bootstrap.py -v\n\n\nEnsure that libcc submodule (vendor/libchromiumcontent) points to the\nright revision\n\n\nSet CLANG_REVISION in script/update-clang.sh to match the version\nChromium is using.\n\n\nLocated in electron/libchromiumcontent/src/tools/clang/scripts/update.py\n\n\nCheckout Chromium if you haven't already:\n\n\n\nhttps://chromium.googlesource.com/chromium/src.git/+/{VERSION}/tools/clang/scripts/update.py\n\n(Replace the {VERSION} placeholder in the url above to the Chromium\nversion libcc uses.)\n\n\n\n\nBuild Electron.\n\n\nTry to build Debug version first: $ ./script/build.py -c D\nYou will need it to run tests\n\n\nFix compilation and linking errors\nEnsure that Release build can be built too\n\n\n$ ./script/build.py -c R\nOften the Release build will have different linking errors that you'll\nneed to fix.\nSome compilation and linking errors are caused by missing source/object\nfiles in the libcc dist\n\n\nUpdate ./script/create-dist in the libcc repo, recreate a dist, and\nrun Electron bootstrap script once again.\n\n\n\nTips for fixing compilation errors\n\nFix build config errors first\nFix fatal errors first, like missing files and errors related to compiler\nflags or defines\n\nTry to identify complex errors as soon as possible.\n\nAsk for help if you're not sure how to fix them\n\n\nDisable all Electron features, fix the build, then enable them one by one\nAdd more build flags to disable features in build-time.\n\nWhen a Debug build of Electron succeeds, run the tests:\n$ npm run test\nFix the failing tests.\nFollow all the steps above to fix Electron code on all supported platforms.\n\n\nUpdating Crashpad\nIf there are any compilation errors related to the Crashpad, it probably means\nyou need to update the fork to a newer revision. See\nUpgrading Crashpad\nfor instructions on how to do that.\n\n\nUpdating NodeJS\nUpgrade vendor/node to the Node release that corresponds to the v8 version\nused in the new Chromium release. See the v8 versions in Node on\nSee Upgrading Node\nfor instructions on this.\n\n\nVerify ffmpeg support\nElectron ships with a version of ffmpeg that includes proprietary codecs by\ndefault. A version without these codecs is built and distributed with each\nrelease as well. Each Chrome upgrade should verify that switching this version\nis still supported.\nYou can verify Electron's support for multiple ffmpeg builds by loading the\nfollowing page. It should work with the default ffmpeg library distributed\nwith Electron and not work with the ffmpeg library built without proprietary\ncodecs.\n\n\n \n \n Proprietary Codec Check\n \n \n

    Checking if Electron is using proprietary codecs by loading video from http://www.quirksmode.org/html5/videos/big_buck_bunny.mp4

    \n

    \n \n \n \n\n\n\nUseful links\n\nChrome Release Schedule\nOmahaProxy\nChromium Issue Tracker\n\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -967,7 +1031,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/development/upgrading-node.md", "url": "https://electronjs.org/docs/tutorial/upgrading-node", "slug": "upgrading-node", - "body": "Upgrading Node\n\n\nDiscussion\nOne upgrade issue is building all of Electron with a single copy\nof V8 to ensure compatibility. This is important because\nupstream Node and libchromiumcontent\nboth use their own versions of V8.\nUpgrading Node is much easier than upgrading libchromiumcontent,\nso fewer conflicts arise if one upgrades libchromiumcontent first,\nthen chooses the upstream Node release whose V8 is closest to it.\nElectron has its own Node fork\nwith modifications for the V8 build details mentioned above\nand for exposing API needed by Electron. Once an upstream Node\nrelease is chosen, it's placed in a branch in Electron's Node fork\nand any Electron Node patches are applied there.\nAnother factor is that the Node project patches its version of V8.\nAs mentioned above, Electron builds everything with a single copy\nof V8, so Node's V8 patches must be ported to that copy.\nOnce all of Electron's dependencies are building and using the same\ncopy of V8, the next step is to fix any Electron code issues caused\nby the Node upgrade.\n[FIXME] something about a Node debugger in Atom that we (e.g. deepak)\nuse and need to confirm doesn't break with the Node upgrade?\nSo in short, the primary steps are:\n\nUpdate Electron's Node fork to the desired version\nBackport Node's V8 patches to our copy of V8\nUpdate Electron to use new version of Node\n\n\nUpdate submodules\nUpdate Node.js build configuration\n\n\n\nUpdating Electron's Node fork\n\nEnsure that master on electron/node has updated release tags from nodejs/node\nCreate a branch in https://github.com/electron/node: electron-node-vX.X.X where the base that you're branching from is the tag for the desired update\n\n\nvX.X.X Must use a version of node compatible with our current version of chromium\n\n\nRe-apply our commits from the previous version of node we were using (vY.Y.Y) to v.X.X.X\n\n\nCheck release tag and select the range of commits we need to re-apply\n\nCherry-pick commit range:\n\nCheckout both vY.Y.Y & v.X.X.X\ngit cherry-pick FIRST_COMMIT_HASH..LAST_COMMIT_HASH\n\n\n\nResolve merge conflicts in each file encountered, then:\n\ngit add \ngit cherry-pick --continue\nRepeat until finished\n\n\n\n\n\nUpdating V8 Patches\nWe need to generate a patch file from each patch applied to V8.\n\nGet a copy of Electron's libcc fork\n\n\n$ git clone https://github.com/electron/libchromiumcontent\n\n\nRun script/update to get the latest libcc\n\n\nThis will be time-consuming\n\n\nRemove our copies of the old Node v8 patches\n\n\n(In libchromiumcontent repo) Read patches/v8/README.md to see which patchfiles\nwere created during the last update\n\nRemove those files from patches/v8/:\n\ngit rm the patchfiles\nedit patches/v8/README.md\ncommit these removals\n\n\n\n\nInspect Node repo to see what patches upstream Node\nused with their v8 after bumping its version\n\n\ngit log --oneline deps/V8\n\n\nCreate a checklist of the patches. This is useful for tracking your work and for\nhaving a quick reference of commit hashes to use in the git diff-tree step below.\nRead patches/v8/README.md to see which patchfiles came from the previous version of V8 and therefore need to be removed.\n\n\nDelete each patchfile referenced in patches/v8/README.md\n\n\nFor each patch, do:\n\n\n\n(In node repo) git diff-tree --patch HASH > ~/path_to_libchromiumcontent/patches/v8/xxx-patch_name.patch\n\nxxx is an incremented three-digit number (to force patch order)\npatch_name should loosely match the node commit messages,\ne.g. 030-cherry_pick_cc55747,patch if the Node commit message was \"cherry-pick cc55747\"\n\n\n\n(remainder of steps in libchromium repo)\nManually edit the .patch file to match upstream V8's directory:\n\n\nIf a diff section has no instances of deps/V8, remove it altogether.\n\nWe don’t want those patches because we’re only patching V8.\n\n\n\nReplace instances of a/deps/v8/filename.ext with a/filename.ext\n\nThis is needed because upstream Node keeps its V8 files in a subdirectory\n\n\n\n\nEnsure that local status is clean: git status to make sure there are no unstaged changes.\nConfirm that the patch applies cleanly with\nscript/patch.py -r src/V8 -p patches/v8/xxx-patch_name.patch.patch\n\nCreate a new copy of the patch:\n\ncd src/v8 && git diff > ../../test.patch && cd ../..\nThis is needed because the first patch has Node commit checksums that we don't want\n\n\n\nConfirm that checksums are the only difference between the two patches:\n\ndiff -u test.patch patches/v8/xxx-patch_name.patch\n\n\n\nReplace the old patch with the new:\n\nmv test.patch patches/v8/xxx-patch_name.patch\n\n\n\nAdd the patched code to the index without committing:\n\ncd src/v8 && git add . && cd ../..\nWe don't want to commit the changes (they're kept in the patchfiles)\nbut need them locally so that they don't show up in subsequent diffs\nwhile we iterate through more patches\n\n\n\nAdd the patch file to the index:\n\ngit add a patches/v8/\n\n\n\n(Optionally) commit each patch file to ensure you can back up if you mess up a step:\n\ngit commit patches/v8/\n\n\n\n\nUpdate patches/v8/README.md with references to all new patches that have been added so that the next person will know which need to be removed.\n\nUpdate Electron's submodule references:\n$ cd electron/vendor/node\nelectron/vendor/node$ git fetch\nelectron/vendor/node$ git checkout electron-node-vA.B.C\nelectron/vendor/node$ cd ../libchromiumcontent\nelectron/vendor/libchromiumcontent$ git fetch\nelectron/vendor/libchromiumcontent$ git checkout upgrade-to-chromium-X\nelectron/vendor/libchromiumcontent$ cd ../..\nelectron$ git add vendor\nelectron$ git commit -m \"update submodule referefences for node and libc\"\nelectron$ git pso upgrade-to-chromium-62\nelectron$ script/bootstrap.py -d\nelectron$ script/build.py -c -D\n\n\n\n\nNotes\n\nlibcc and V8 are treated as a single unit\n\nNode maintains its own fork of V8\n\nThey backport a small amount of things as needed\nDocumentation in node about how they work with V8\n\n\n\nWe update code such that we only use one copy of V8 across all of electron\n\nE.g electron, libcc, and node\n\n\n\nWe don’t track upstream closely due to logistics:\n\nUpstream uses multiple repos and so merging into a single repo\nwould result in lost history. So we only update when we’re planning\na node version bump in electron.\n\n\n\nlibcc is large and time-consuming to update, so we typically\nchoose the node version based on which of its releases has a version\nof V8 that’s closest to the version in libcc that we’re using.\n\nWe sometimes have to wait for the next periodic Node release\nbecause it will sync more closely with the version of V8 in the new libcc\n\n\n\nElectron keeps all its patches in libcc because it’s simpler than\nmaintaining different repos for patches for each upstream project.\n\nCrashpad, node, libcc, etc. patches are all kept in the same place\n\n\n\nBuilding node:\n\nThere’s a chance we need to change our build configuration\nto match the build flags that node wants in node/common.gypi\n\n\n\n", + "body": "Upgrading Node\n\n\nDiscussion\nChromium and Node.js both depend on V8, and Electron contains\nonly a single copy of V8, so it's important to ensure that the\nversion of V8 chosen is compatible with the build's version of\nNode.js and Chromium.\nUpgrading Node is much easier than upgrading Chromium, so fewer\nconflicts arise if one upgrades Chromium first, then chooses the\nupstream Node release whose version of V8 is closest to the one\nChromium contains.\nElectron has its own Node fork\nwith modifications for the V8 build details mentioned above\nand for exposing API needed by Electron. Once an upstream Node\nrelease is chosen, it's placed in a branch in Electron's Node fork\nand any Electron Node patches are applied there.\nAnother factor is that the Node project patches its version of V8.\nAs mentioned above, Electron builds everything with a single copy\nof V8, so Node's V8 patches must be ported to that copy.\nOnce all of Electron's dependencies are building and using the same\ncopy of V8, the next step is to fix any Electron code issues caused\nby the Node upgrade.\n[FIXME] something about a Node debugger in Atom that we (e.g. deepak)\nuse and need to confirm doesn't break with the Node upgrade?\nSo in short, the primary steps are:\n\nUpdate Electron's Node fork to the desired version\nBackport Node's V8 patches to our copy of V8\nUpdate the GN build files, porting changes from node's GYP files\nUpdate Electron's DEPS to use new version of Node\n\n\n\nUpdating Electron's Node fork\n\nEnsure that master on electron/node has updated release tags from nodejs/node\nCreate a branch in https://github.com/electron/node: electron-node-vX.X.X where the base that you're branching from is the tag for the desired update\n\n\nvX.X.X Must use a version of Node compatible with our current version of Chromium\n\n\nRe-apply our commits from the previous version of Node we were using (vY.Y.Y) to v.X.X.X\n\n\nCheck release tag and select the range of commits we need to re-apply\n\nCherry-pick commit range:\n\nCheckout both vY.Y.Y & v.X.X.X\ngit cherry-pick FIRST_COMMIT_HASH..LAST_COMMIT_HASH\n\n\n\nResolve merge conflicts in each file encountered, then:\n\ngit add \ngit cherry-pick --continue\nRepeat until finished\n\n\n\n\n\nUpdating V8 Patches\nWe need to generate a patch file from each patch that Node\napplies to V8.\n$ cd third_party/electron_node\n$ CURRENT_NODE_VERSION=vX.Y.Z\n# Find the last commit with the message \"deps: update V8 to \"\n# This commit corresponds to Node resetting V8 to its pristine upstream\n# state at the stated version.\n$ LAST_V8_UPDATE=\"$(git log --grep='^deps: update V8' --format='%H' -1 deps/v8)\"\n# This creates a patch file containing all changes in deps/v8 from\n# $LAST_V8_UPDATE up to the current Node version, formatted in a way that\n# it will apply cleanly to the V8 repository (i.e. with `deps/v8`\n# stripped off the path and excluding the v8/gypfiles directory, which\n# isn't present in V8.\n$ git format-patch \\\n --relative=deps/v8 \\\n $LAST_V8_UPDATE..$CURRENT_NODE_VERSION \\\n deps/v8 \\\n ':(exclude)deps/v8/gypfiles' \\\n --stdout \\\n > ../../electron/common/patches/v8/node_v8_patches.patch\nThis list of patches will probably include one that claims to\nmake the V8 API backwards-compatible with a previous version of\nV8. Unfortunately, those patches almost always change the V8 API\nin a way that is incompatible with Chromium.\nIt's usually easier to update Node to work without the\ncompatibility patch than to update Chromium to work with the\ncompatibility patch, so it's recommended to revert the\ncompatibility patch and fix any errors that arise when compiling\nNode.\n\n\nUpdate Electron's DEPS file\nUpdate the DEPS file in the root of\nelectron/electron to\npoint to the git hash of the updated Node.\n\n\nNotes\n\n\nNode maintains its own fork of V8\n\nThey backport a small amount of things as needed\nDocumentation in Node about how they work with V8\n\n\n\nWe update code such that we only use one copy of V8 across all of Electron\n\nE.g Electron, Chromium, and Node.js\n\n\n\nWe don’t track upstream closely due to logistics:\n\nUpstream uses multiple repos and so merging into a single repo\nwould result in lost history. So we only update when we’re planning\na Node version bump in Electron.\n\n\n\nChromium is large and time-consuming to update, so we typically\nchoose the Node version based on which of its releases has a version\nof V8 that’s closest to the version in Chromium that we’re using.\n\nWe sometimes have to wait for the next periodic Node release\nbecause it will sync more closely with the version of V8 in the new Chromium\n\n\n\nElectron keeps all its patches in the repo because it’s simpler than\nmaintaining different repos for patches for each upstream project.\n\nCrashpad, Node.js, Chromium, Skia etc. patches are all kept in the same place\n\n\n\nBuilding Node:\n\nWe maintain our own GN build files for Node.js to make it easier to ensure\nthat eevrything is built with the same compiler flags.\nThis means that every time we upgrade Node.js we have to do a modest amount of\nwork to synchronize the GN files with the upstream GYP files.\n\n\n\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -983,7 +1047,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/using-native-node-modules.md", "url": "https://electronjs.org/docs/tutorial/using-native-node-modules", "slug": "using-native-node-modules", - "body": "Using Native Node Modules\nThe native Node modules are supported by Electron, but since Electron is very\nlikely to use a different V8 version from the Node binary installed in your\nsystem, you have to manually specify the location of Electron's headers when\nbuilding native modules.\n\n\nHow to install native modules\nThree ways to install native modules:\n\n\nUsing npm\nBy setting a few environment variables, you can use npm to install modules\ndirectly.\nAn example of installing all dependencies for Electron:\n# Electron's version.\nexport npm_config_target=1.2.3\n# The architecture of Electron, can be ia32 or x64.\nexport npm_config_arch=x64\nexport npm_config_target_arch=x64\n# Download headers for Electron.\nexport npm_config_disturl=https://atom.io/download/electron\n# Tell node-pre-gyp that we are building for Electron.\nexport npm_config_runtime=electron\n# Tell node-pre-gyp to build module from source code.\nexport npm_config_build_from_source=true\n# Install all dependencies, and store cache to ~/.electron-gyp.\nHOME=~/.electron-gyp npm install\n\n\nInstalling modules and rebuilding for Electron\nYou can also choose to install modules like other Node projects, and then\nrebuild the modules for Electron with the electron-rebuild\npackage. This module can get the version of Electron and handle the manual steps\nof downloading headers and building native modules for your app.\nAn example of installing electron-rebuild and then rebuild modules with it:\nnpm install --save-dev electron-rebuild\n\n# Every time you run \"npm install\", run this:\n./node_modules/.bin/electron-rebuild\n\n# On Windows if you have trouble, try:\n.\\node_modules\\.bin\\electron-rebuild.cmd\n\n\nManually building for Electron\nIf you are a developer developing a native module and want to test it against\nElectron, you might want to rebuild the module for Electron manually. You can\nuse node-gyp directly to build for Electron:\ncd /path-to-module/\nHOME=~/.electron-gyp node-gyp rebuild --target=1.2.3 --arch=x64 --dist-url=https://atom.io/download/electron\nThe HOME=~/.electron-gyp changes where to find development headers. The\n--target=1.2.3 is version of Electron. The --dist-url=... specifies\nwhere to download the headers. The --arch=x64 says the module is built for\n64bit system.\n\n\nTroubleshooting\nIf you installed a native module and found it was not working, you need to check\nfollowing things:\n\nThe architecture of the module has to match Electron's architecture (ia32 or x64).\nAfter you upgrade Electron, you usually need to rebuild the modules.\nWhen in doubt, run electron-rebuild first.\n\n\n\nModules that rely on prebuild\nprebuild provides a way to\npublish native Node modules with prebuilt binaries for multiple versions of Node\nand Electron.\nIf modules provide binaries for the usage in Electron, make sure to omit\n--build-from-source and the npm_config_build_from_source environment\nvariable in order to take full advantage of the prebuilt binaries.\n\n\nModules that rely on node-pre-gyp\nThe node-pre-gyp tool provides a way to deploy native Node\nmodules with prebuilt binaries, and many popular modules are using it.\nUsually those modules work fine under Electron, but sometimes when Electron uses\na newer version of V8 than Node, and there are ABI changes, bad things may\nhappen. So in general it is recommended to always build native modules from\nsource code.\nIf you are following the npm way of installing modules, then this is done\nby default, if not, you have to pass --build-from-source to npm, or set the\nnpm_config_build_from_source environment variable.\n", + "body": "Using Native Node Modules\nThe native Node modules are supported by Electron, but since Electron is very\nlikely to use a different V8 version from the Node binary installed in your\nsystem, you have to manually specify the location of Electron's headers when\nbuilding native modules.\n\n\nHow to install native modules\nThree ways to install native modules:\n\n\nUsing npm\nBy setting a few environment variables, you can use npm to install modules\ndirectly.\nAn example of installing all dependencies for Electron:\n# Electron's version.\nexport npm_config_target=1.2.3\n# The architecture of Electron, can be ia32 or x64.\nexport npm_config_arch=x64\nexport npm_config_target_arch=x64\n# Download headers for Electron.\nexport npm_config_disturl=https://atom.io/download/electron\n# Tell node-pre-gyp that we are building for Electron.\nexport npm_config_runtime=electron\n# Tell node-pre-gyp to build module from source code.\nexport npm_config_build_from_source=true\n# Install all dependencies, and store cache to ~/.electron-gyp.\nHOME=~/.electron-gyp npm install\n\n\nInstalling modules and rebuilding for Electron\nYou can also choose to install modules like other Node projects, and then\nrebuild the modules for Electron with the electron-rebuild\npackage. This module can get the version of Electron and handle the manual steps\nof downloading headers and building native modules for your app.\nAn example of installing electron-rebuild and then rebuild modules with it:\nnpm install --save-dev electron-rebuild\n\n# Every time you run \"npm install\", run this:\n./node_modules/.bin/electron-rebuild\n\n# On Windows if you have trouble, try:\n.\\node_modules\\.bin\\electron-rebuild.cmd\n\n\nManually building for Electron\nIf you are a developer developing a native module and want to test it against\nElectron, you might want to rebuild the module for Electron manually. You can\nuse node-gyp directly to build for Electron:\ncd /path-to-module/\nHOME=~/.electron-gyp node-gyp rebuild --target=1.2.3 --arch=x64 --dist-url=https://atom.io/download/electron\nThe HOME=~/.electron-gyp changes where to find development headers. The\n--target=1.2.3 is version of Electron. The --dist-url=... specifies\nwhere to download the headers. The --arch=x64 says the module is built for\n64bit system.\n\n\nManually building for a custom build of Electron\nTo compile native Node addons against a custom build of Electron that doesn't\nmatch a public release, instruct npm to use the version of Node you have bundled\nwith your custom build.\nnpm rebuild --nodedir=$HOME/.../path/to/electron/vendor/node\n\n\nTroubleshooting\nIf you installed a native module and found it was not working, you need to check\nfollowing things:\n\nThe architecture of the module has to match Electron's architecture (ia32 or x64).\nwin_delay_load_hook is not set to false in the module's binding.gyp.\nAfter you upgrade Electron, you usually need to rebuild the modules.\nWhen in doubt, run electron-rebuild first.\n\n\n\nA note about win_delay_load_hook\nOn Windows, by default, node-gyp links native modules against node.dll.\nHowever, in Electron 4.x and higher, the symbols needed by native modules are\nexported by electron.exe, and there is no node.dll in Electron 4.x. In\norder to load native modules on Windows, node-gyp installs a delay-load\nhook that triggers\nwhen the native module is loaded, and redirects the node.dll reference to use\nthe loading executable instead of looking for node.dll in the library search\npath (which would turn up nothing). As such, on Electron 4.x and higher,\n'win_delay_load_hook': 'true' is required to load native modules.\nIf you get an error like Module did not self-register, or The specified procedure could not be found, it may mean that the module you're trying to use\ndid not correctly include the delay-load hook. If the module is built with\nnode-gyp, ensure that the win_delay_load_hook variable is set to true in\nthe binding.gyp file, and isn't getting overridden anywhere. If the module\nis built with another system, you'll need to ensure that you build with a\ndelay-load hook installed in the main .node file. Your link.exe invocation\nshould look like this:\n link.exe /OUT:\"foo.node\" \"...\\node.lib\" delayimp.lib /DELAYLOAD:node.exe /DLL\n \"my_addon.obj\" \"win_delay_load_hook.obj\"\nIn particular, it's important that:\n\nyou link against node.lib from Electron and not Node. If you link against\nthe wrong node.lib you will get load-time errors when you require the\nmodule in Electron.\nyou include the flag /DELAYLOAD:node.exe. If the node.exe link is not\ndelayed, then the delay-load hook won't get a chance to fire and the node\nsymbols won't be correctly resolved.\nwin_delay_load_hook.obj is linked directly into the final DLL. If the hook\nis set up in a dependent DLL, it won't fire at the right time.\n\nSee node-gyp for an example delay-load hook if you're implementing your own.\n\n\nModules that rely on prebuild\nprebuild provides a way to\npublish native Node modules with prebuilt binaries for multiple versions of Node\nand Electron.\nIf modules provide binaries for the usage in Electron, make sure to omit\n--build-from-source and the npm_config_build_from_source environment\nvariable in order to take full advantage of the prebuilt binaries.\n\n\nModules that rely on node-pre-gyp\nThe node-pre-gyp tool provides a way to deploy native Node\nmodules with prebuilt binaries, and many popular modules are using it.\nUsually those modules work fine under Electron, but sometimes when Electron uses\na newer version of V8 than Node, and there are ABI changes, bad things may\nhappen. So in general it is recommended to always build native modules from\nsource code.\nIf you are following the npm way of installing modules, then this is done\nby default, if not, you have to pass --build-from-source to npm, or set the\nnpm_config_build_from_source environment variable.\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -999,7 +1063,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/using-pepper-flash-plugin.md", "url": "https://electronjs.org/docs/tutorial/using-pepper-flash-plugin", "slug": "using-pepper-flash-plugin", - "body": "Using Pepper Flash Plugin\nElectron supports the Pepper Flash plugin. To use the Pepper Flash plugin in\nElectron, you should manually specify the location of the Pepper Flash plugin\nand then enable it in your application.\n\n\nPrepare a Copy of Flash Plugin\nOn macOS and Linux, the details of the Pepper Flash plugin can be found by\nnavigating to chrome://plugins in the Chrome browser. Its location and version\nare useful for Electron's Pepper Flash support. You can also copy it to another\nlocation.\n\n\nAdd Electron Switch\nYou can directly add --ppapi-flash-path and --ppapi-flash-version to the\nElectron command line or by using the app.commandLine.appendSwitch method\nbefore the app ready event. Also, turn on plugins option of BrowserWindow.\nFor example:\nconst {app, BrowserWindow} = require('electron')\nconst path = require('path')\n\n// Specify flash path, supposing it is placed in the same directory with main.js.\nlet pluginName\nswitch (process.platform) {\n case 'win32':\n pluginName = 'pepflashplayer.dll'\n break\n case 'darwin':\n pluginName = 'PepperFlashPlayer.plugin'\n break\n case 'linux':\n pluginName = 'libpepflashplayer.so'\n break\n}\napp.commandLine.appendSwitch('ppapi-flash-path', path.join(__dirname, pluginName))\n\n// Optional: Specify flash version, for example, v17.0.0.169\napp.commandLine.appendSwitch('ppapi-flash-version', '17.0.0.169')\n\napp.on('ready', () => {\n let win = new BrowserWindow({\n width: 800,\n height: 600,\n webPreferences: {\n plugins: true\n }\n })\n win.loadURL(`file://${__dirname}/index.html`)\n // Something else\n})\nYou can also try loading the system wide Pepper Flash plugin instead of shipping\nthe plugins yourself, its path can be received by calling\napp.getPath('pepperFlashSystemPlugin').\n\n\nEnable Flash Plugin in a Tag\nAdd plugins attribute to tag.\n\n\n\nTroubleshooting\nYou can check if Pepper Flash plugin was loaded by inspecting\nnavigator.plugins in the console of devtools (although you can't know if the\nplugin's path is correct).\nThe architecture of Pepper Flash plugin has to match Electron's one. On Windows,\na common error is to use 32bit version of Flash plugin against 64bit version of\nElectron.\nOn Windows the path passed to --ppapi-flash-path has to use \\ as path\ndelimiter, using POSIX-style paths will not work.\nFor some operations, such as streaming media using RTMP, it is necessary to grant wider permissions to players’ .swf files. One way of accomplishing this, is to use nw-flash-trust.\n", + "body": "Using Pepper Flash Plugin\nElectron supports the Pepper Flash plugin. To use the Pepper Flash plugin in\nElectron, you should manually specify the location of the Pepper Flash plugin\nand then enable it in your application.\n\n\nPrepare a Copy of Flash Plugin\nOn macOS and Linux, the details of the Pepper Flash plugin can be found by\nnavigating to chrome://flash in the Chrome browser. Its location and version\nare useful for Electron's Pepper Flash support. You can also copy it to another\nlocation.\n\n\nAdd Electron Switch\nYou can directly add --ppapi-flash-path and --ppapi-flash-version to the\nElectron command line or by using the app.commandLine.appendSwitch method\nbefore the app ready event. Also, turn on plugins option of BrowserWindow.\nFor example:\nconst { app, BrowserWindow } = require('electron')\nconst path = require('path')\n\n// Specify flash path, supposing it is placed in the same directory with main.js.\nlet pluginName\nswitch (process.platform) {\n case 'win32':\n pluginName = 'pepflashplayer.dll'\n break\n case 'darwin':\n pluginName = 'PepperFlashPlayer.plugin'\n break\n case 'linux':\n pluginName = 'libpepflashplayer.so'\n break\n}\napp.commandLine.appendSwitch('ppapi-flash-path', path.join(__dirname, pluginName))\n\n// Optional: Specify flash version, for example, v17.0.0.169\napp.commandLine.appendSwitch('ppapi-flash-version', '17.0.0.169')\n\napp.on('ready', () => {\n let win = new BrowserWindow({\n width: 800,\n height: 600,\n webPreferences: {\n plugins: true\n }\n })\n win.loadURL(`file://${__dirname}/index.html`)\n // Something else\n})\nYou can also try loading the system wide Pepper Flash plugin instead of shipping\nthe plugins yourself, its path can be received by calling\napp.getPath('pepperFlashSystemPlugin').\n\n\nEnable Flash Plugin in a Tag\nAdd plugins attribute to tag.\n\n\n\nTroubleshooting\nYou can check if Pepper Flash plugin was loaded by inspecting\nnavigator.plugins in the console of devtools (although you can't know if the\nplugin's path is correct).\nThe architecture of Pepper Flash plugin has to match Electron's one. On Windows,\na common error is to use 32bit version of Flash plugin against 64bit version of\nElectron.\nOn Windows the path passed to --ppapi-flash-path has to use \\ as path\ndelimiter, using POSIX-style paths will not work.\nFor some operations, such as streaming media using RTMP, it is necessary to grant wider permissions to players’ .swf files. One way of accomplishing this, is to use nw-flash-trust.\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -1015,7 +1079,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/using-selenium-and-webdriver.md", "url": "https://electronjs.org/docs/tutorial/using-selenium-and-webdriver", "slug": "using-selenium-and-webdriver", - "body": "Using Selenium and WebDriver\nFrom ChromeDriver - WebDriver for Chrome:\n\nWebDriver is an open source tool for automated testing of web apps across many\nbrowsers. It provides capabilities for navigating to web pages, user input,\nJavaScript execution, and more. ChromeDriver is a standalone server which\nimplements WebDriver's wire protocol for Chromium. It is being developed by\nmembers of the Chromium and WebDriver teams.\n\n\n\nSetting up Spectron\nSpectron is the officially supported ChromeDriver testing framework\nfor Electron. It is built on top of WebdriverIO and\nhas helpers to access Electron APIs in your tests and bundles ChromeDriver.\n$ npm install --save-dev spectron\n// A simple test to verify a visible window is opened with a title\nvar Application = require('spectron').Application\nvar assert = require('assert')\n\nvar app = new Application({\n path: '/Applications/MyApp.app/Contents/MacOS/MyApp'\n})\n\napp.start().then(function () {\n // Check if the window is visible\n return app.browserWindow.isVisible()\n}).then(function (isVisible) {\n // Verify the window is visible\n assert.equal(isVisible, true)\n}).then(function () {\n // Get the window's title\n return app.client.getTitle()\n}).then(function (title) {\n // Verify the window's title\n assert.equal(title, 'My App')\n}).catch(function (error) {\n // Log any failures\n console.error('Test failed', error.message)\n}).then(function () {\n // Stop the application\n return app.stop()\n})\n\n\nSetting up with WebDriverJs\nWebDriverJs provides\na Node package for testing with web driver, we will use it as an example.\n\n\n1. Start ChromeDriver\nFirst you need to download the chromedriver binary, and run it:\n$ npm install electron-chromedriver\n$ ./node_modules/.bin/chromedriver\nStarting ChromeDriver (v2.10.291558) on port 9515\nOnly local connections are allowed.\nRemember the port number 9515, which will be used later\n\n\n2. Install WebDriverJS\n$ npm install selenium-webdriver\n\n\n3. Connect to ChromeDriver\nThe usage of selenium-webdriver with Electron is the same with\nupstream, except that you have to manually specify how to connect\nchrome driver and where to find Electron's binary:\nconst webdriver = require('selenium-webdriver')\n\nconst driver = new webdriver.Builder()\n // The \"9515\" is the port opened by chrome driver.\n .usingServer('http://localhost:9515')\n .withCapabilities({\n chromeOptions: {\n // Here is the path to your Electron binary.\n binary: '/Path-to-Your-App.app/Contents/MacOS/Electron'\n }\n })\n .forBrowser('electron')\n .build()\n\ndriver.get('http://www.google.com')\ndriver.findElement(webdriver.By.name('q')).sendKeys('webdriver')\ndriver.findElement(webdriver.By.name('btnG')).click()\ndriver.wait(() => {\n return driver.getTitle().then((title) => {\n return title === 'webdriver - Google Search'\n })\n}, 1000)\n\ndriver.quit()\n\n\nSetting up with WebdriverIO\nWebdriverIO provides a Node package for testing with web\ndriver.\n\n\n1. Start ChromeDriver\nFirst you need to download the chromedriver binary, and run it:\n$ npm install electron-chromedriver\n$ ./node_modules/.bin/chromedriver --url-base=wd/hub --port=9515\nStarting ChromeDriver (v2.10.291558) on port 9515\nOnly local connections are allowed.\nRemember the port number 9515, which will be used later\n\n\n2. Install WebdriverIO\n$ npm install webdriverio\n\n\n3. Connect to chrome driver\nconst webdriverio = require('webdriverio')\nconst options = {\n host: 'localhost', // Use localhost as chrome driver server\n port: 9515, // \"9515\" is the port opened by chrome driver.\n desiredCapabilities: {\n browserName: 'chrome',\n chromeOptions: {\n binary: '/Path-to-Your-App/electron', // Path to your Electron binary.\n args: [/* cli arguments */] // Optional, perhaps 'app=' + /path/to/your/app/\n }\n }\n}\n\nlet client = webdriverio.remote(options)\n\nclient\n .init()\n .url('http://google.com')\n .setValue('#q', 'webdriverio')\n .click('#btnG')\n .getTitle().then((title) => {\n console.log('Title was: ' + title)\n })\n .end()\n\n\nWorkflow\nTo test your application without rebuilding Electron,\nplace\nyour app source into Electron's resource directory.\nAlternatively, pass an argument to run with your electron binary that points to\nyour app's folder. This eliminates the need to copy-paste your app into\nElectron's resource directory.\n", + "body": "Using Selenium and WebDriver\nFrom ChromeDriver - WebDriver for Chrome:\n\nWebDriver is an open source tool for automated testing of web apps across many\nbrowsers. It provides capabilities for navigating to web pages, user input,\nJavaScript execution, and more. ChromeDriver is a standalone server which\nimplements WebDriver's wire protocol for Chromium. It is being developed by\nmembers of the Chromium and WebDriver teams.\n\n\n\nSetting up Spectron\nSpectron is the officially supported ChromeDriver testing framework\nfor Electron. It is built on top of WebdriverIO and\nhas helpers to access Electron APIs in your tests and bundles ChromeDriver.\n$ npm install --save-dev spectron\n// A simple test to verify a visible window is opened with a title\nconst Application = require('spectron').Application\nconst assert = require('assert')\n\nconst myApp = new Application({\n path: '/Applications/MyApp.app/Contents/MacOS/MyApp'\n})\n\nconst verifyWindowIsVisibleWithTitle = async (app) => {\n await app.start()\n try {\n // Check if the window is visible\n const isVisible = await app.browserWindow.isVisible()\n // Verify the window is visible\n assert.strictEqual(isVisible, true)\n // Get the window's title\n const title = await app.client.getTitle()\n // Verify the window's title\n assert.strictEqual(title, 'My App')\n } catch (error) {\n // Log any failures\n console.error('Test failed', error.message)\n }\n // Stop the application\n await app.stop()\n}\n\nverifyWindowIsVisibleWithTitle(myApp)\n\n\nSetting up with WebDriverJs\nWebDriverJs provides\na Node package for testing with web driver, we will use it as an example.\n\n\n1. Start ChromeDriver\nFirst you need to download the chromedriver binary, and run it:\n$ npm install electron-chromedriver\n$ ./node_modules/.bin/chromedriver\nStarting ChromeDriver (v2.10.291558) on port 9515\nOnly local connections are allowed.\nRemember the port number 9515, which will be used later\n\n\n2. Install WebDriverJS\n$ npm install selenium-webdriver\n\n\n3. Connect to ChromeDriver\nThe usage of selenium-webdriver with Electron is the same with\nupstream, except that you have to manually specify how to connect\nchrome driver and where to find Electron's binary:\nconst webdriver = require('selenium-webdriver')\n\nconst driver = new webdriver.Builder()\n // The \"9515\" is the port opened by chrome driver.\n .usingServer('http://localhost:9515')\n .withCapabilities({\n chromeOptions: {\n // Here is the path to your Electron binary.\n binary: '/Path-to-Your-App.app/Contents/MacOS/Electron'\n }\n })\n .forBrowser('electron')\n .build()\n\ndriver.get('http://www.google.com')\ndriver.findElement(webdriver.By.name('q')).sendKeys('webdriver')\ndriver.findElement(webdriver.By.name('btnG')).click()\ndriver.wait(() => {\n return driver.getTitle().then((title) => {\n return title === 'webdriver - Google Search'\n })\n}, 1000)\n\ndriver.quit()\n\n\nSetting up with WebdriverIO\nWebdriverIO provides a Node package for testing with web\ndriver.\n\n\n1. Start ChromeDriver\nFirst you need to download the chromedriver binary, and run it:\n$ npm install electron-chromedriver\n$ ./node_modules/.bin/chromedriver --url-base=wd/hub --port=9515\nStarting ChromeDriver (v2.10.291558) on port 9515\nOnly local connections are allowed.\nRemember the port number 9515, which will be used later\n\n\n2. Install WebdriverIO\n$ npm install webdriverio\n\n\n3. Connect to chrome driver\nconst webdriverio = require('webdriverio')\nconst options = {\n host: 'localhost', // Use localhost as chrome driver server\n port: 9515, // \"9515\" is the port opened by chrome driver.\n desiredCapabilities: {\n browserName: 'chrome',\n chromeOptions: {\n binary: '/Path-to-Your-App/electron', // Path to your Electron binary.\n args: [/* cli arguments */] // Optional, perhaps 'app=' + /path/to/your/app/\n }\n }\n}\n\nlet client = webdriverio.remote(options)\n\nclient\n .init()\n .url('http://google.com')\n .setValue('#q', 'webdriverio')\n .click('#btnG')\n .getTitle().then((title) => {\n console.log('Title was: ' + title)\n })\n .end()\n\n\nWorkflow\nTo test your application without rebuilding Electron,\nplace\nyour app source into Electron's resource directory.\nAlternatively, pass an argument to run with your Electron binary that points to\nyour app's folder. This eliminates the need to copy-paste your app into\nElectron's resource directory.\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -1025,22 +1089,6 @@ "tutorial:using-selenium-and-webdriver" ] }, - { - "objectID": "tutorial-using-widevine-cdm-plugin", - "title": "Using Widevine CDM Plugin", - "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/using-widevine-cdm-plugin.md", - "url": "https://electronjs.org/docs/tutorial/using-widevine-cdm-plugin", - "slug": "using-widevine-cdm-plugin", - "body": "Using Widevine CDM Plugin\nIn Electron you can use the Widevine CDM plugin shipped with Chrome browser.\n\n\nGetting the plugin\nElectron doesn't ship with the Widevine CDM plugin for license reasons, to get\nit, you need to install the official Chrome browser first, which should match\nthe architecture and Chrome version of the Electron build you use.\nNote: The major version of Chrome browser has to be the same with the Chrome\nversion used by Electron, otherwise the plugin will not work even though\nnavigator.plugins would show it has been loaded.\n\n\nWindows & macOS\nOpen chrome://components/ in Chrome browser, find WidevineCdm and make\nsure it is up to date, then you can find all the plugin binaries from the\nAPP_DATA/Google/Chrome/WidevineCDM/VERSION/_platform_specific/PLATFORM_ARCH/\ndirectory.\nAPP_DATA is system's location for storing app data, on Windows it is\n%LOCALAPPDATA%, on macOS it is ~/Library/Application Support. VERSION is\nWidevine CDM plugin's version string, like 1.4.8.866. PLATFORM is mac or\nwin. ARCH is x86 or x64.\nOn Windows the required binaries are widevinecdm.dll and\nwidevinecdmadapter.dll, on macOS they are libwidevinecdm.dylib and\nwidevinecdmadapter.plugin. You can copy them to anywhere you like, but they\nhave to be put together.\n\n\nLinux\nOn Linux the plugin binaries are shipped together with Chrome browser, you can\nfind them under /opt/google/chrome, the filenames are libwidevinecdm.so and\nlibwidevinecdmadapter.so.\n\n\nUsing the plugin\nAfter getting the plugin files, you should pass the widevinecdmadapter's path\nto Electron with --widevine-cdm-path command line switch, and the plugin's\nversion with --widevine-cdm-version switch.\nNote: Though only the widevinecdmadapter binary is passed to Electron, the\nwidevinecdm binary has to be put aside it.\nThe command line switches have to be passed before the ready event of app\nmodule gets emitted, and the page that uses this plugin must have plugin\nenabled.\nExample code:\nconst {app, BrowserWindow} = require('electron')\n\n// You have to pass the filename of `widevinecdmadapter` here, it is\n// * `widevinecdmadapter.plugin` on macOS,\n// * `libwidevinecdmadapter.so` on Linux,\n// * `widevinecdmadapter.dll` on Windows.\napp.commandLine.appendSwitch('widevine-cdm-path', '/path/to/widevinecdmadapter.plugin')\n// The version of plugin can be got from `chrome://plugins` page in Chrome.\napp.commandLine.appendSwitch('widevine-cdm-version', '1.4.8.866')\n\nlet win = null\napp.on('ready', () => {\n win = new BrowserWindow({\n webPreferences: {\n // The `plugins` have to be enabled.\n plugins: true\n }\n })\n win.show()\n})\n\n\nVerifying the plugin\nTo verify whether the plugin works, you can use following ways:\n\nOpen devtools and check whether navigator.plugins includes the Widevine\nCDM plugin.\nOpen https://shaka-player-demo.appspot.com/ and load a manifest that uses\nWidevine.\nOpen http://www.dash-player.com/demo/drm-test-area/, check whether the page\nsays bitdash uses Widevine in your browser, then play the video.\n\n", - "keyValuePairs": [ - "is:doc", - "is:tutorial", - "doc:Using Widevine CDM Plugin", - "doc:using-widevine-cdm-plugin", - "tutorial:Using Widevine CDM Plugin", - "tutorial:using-widevine-cdm-plugin" - ] - }, { "objectID": "tutorial-v8-development", "title": "V8 Development", @@ -1063,7 +1111,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/windows-store-guide.md", "url": "https://electronjs.org/docs/tutorial/windows-store-guide", "slug": "windows-store-guide", - "body": "Windows Store Guide\nWith Windows 10, the good old win32 executable got a new sibling: The Universal\nWindows Platform. The new .appx format does not only enable a number of new\npowerful APIs like Cortana or Push Notifications, but through the Windows Store,\nalso simplifies installation and updating.\nMicrosoft developed a tool that compiles Electron apps as .appx packages,\nenabling developers to use some of the goodies found in the new application\nmodel. This guide explains how to use it - and what the capabilities and\nlimitations of an Electron AppX package are.\n\n\nBackground and Requirements\nWindows 10 \"Anniversary Update\" is able to run win32 .exe binaries by\nlaunching them together with a virtualized filesystem and registry. Both are\ncreated during compilation by running app and installer inside a Windows\nContainer, allowing Windows to identify exactly which modifications to the\noperating system are done during installation. Pairing the executable with a\nvirtual filesystem and a virtual registry allows Windows to enable one-click\ninstallation and uninstallation.\nIn addition, the exe is launched inside the appx model - meaning that it can use\nmany of the APIs available to the Universal Windows Platform. To gain even more\ncapabilities, an Electron app can pair up with an invisible UWP background task\nlaunched together with the exe - sort of launched as a sidekick to run tasks\nin the background, receive push notifications, or to communicate with other UWP\napplications.\nTo compile any existing Electron app, ensure that you have the following\nrequirements:\n\nWindows 10 with Anniversary Update (released August 2nd, 2016)\nThe Windows 10 SDK, downloadable here\nAt least Node 4 (to check, run node -v)\n\nThen, go and install the electron-windows-store CLI:\nnpm install -g electron-windows-store\n\n\nStep 1: Package Your Electron Application\nPackage the application using electron-packager (or a similar tool).\nMake sure to remove node_modules that you don't need in your final application, since\nany module you don't actually need will increase your application's size.\nThe output should look roughly like this:\n├── Ghost.exe\n├── LICENSE\n├── content_resources_200_percent.pak\n├── content_shell.pak\n├── d3dcompiler_47.dll\n├── ffmpeg.dll\n├── icudtl.dat\n├── libEGL.dll\n├── libGLESv2.dll\n├── locales\n│   ├── am.pak\n│   ├── ar.pak\n│   ├── [...]\n├── natives_blob.bin\n├── node.dll\n├── resources\n│   ├── app\n│   └── atom.asar\n├── snapshot_blob.bin\n├── squirrel.exe\n└── ui_resources_200_percent.pak\n\n\nStep 2: Running electron-windows-store\nFrom an elevated PowerShell (run it \"as Administrator\"), run\nelectron-windows-store with the required parameters, passing both the input\nand output directories, the app's name and version, and confirmation that\nnode_modules should be flattened.\nelectron-windows-store `\n --input-directory C:\\myelectronapp `\n --output-directory C:\\output\\myelectronapp `\n --flatten true `\n --package-version 1.0.0.0 `\n --package-name myelectronapp\nOnce executed, the tool goes to work: It accepts your Electron app as an input,\nflattening the node_modules. Then, it archives your application as app.zip.\nUsing an installer and a Windows Container, the tool creates an \"expanded\" AppX\npackage - including the Windows Application Manifest (AppXManifest.xml) as\nwell as the virtual file system and the virtual registry inside your output\nfolder.\nOnce the expanded AppX files are created, the tool uses the Windows App Packager\n(MakeAppx.exe) to create a single-file AppX package from those files on disk.\nFinally, the tool can be used to create a trusted certificate on your computer\nto sign the new AppX package. With the signed AppX package, the CLI can also\nautomatically install the package on your machine.\n\n\nStep 3: Using the AppX Package\nIn order to run your package, your users will need Windows 10 with the so-called\n\"Anniversary Update\" - details on how to update Windows can be found here.\nIn opposition to traditional UWP apps, packaged apps currently need to undergo a\nmanual verification process, for which you can apply here.\nIn the meantime, all users will be able to install your package by double-clicking it,\nso a submission to the store might not be necessary if you're looking for an\neasier installation method. In managed environments (usually enterprises), the\nAdd-AppxPackage PowerShell Cmdlet can be used to install it in an automated fashion.\nAnother important limitation is that the compiled AppX package still contains a\nwin32 executable - and will therefore not run on Xbox, HoloLens, or Phones.\n\n\nOptional: Add UWP Features using a BackgroundTask\nYou can pair your Electron app up with an invisible UWP background task that\ngets to make full use of Windows 10 features - like push notifications,\nCortana integration, or live tiles.\nTo check out how an Electron app that uses a background task to send toast\nnotifications and live tiles, check out the Microsoft-provided sample.\n\n\nOptional: Convert using Container Virtualization\nTo generate the AppX package, the electron-windows-store CLI uses a template\nthat should work for most Electron apps. However, if you are using a custom\ninstaller, or should you experience any trouble with the generated package, you\ncan attempt to create a package using compilation with a Windows Container - in\nthat mode, the CLI will install and run your application in blank Windows Container\nto determine what modifications your application is exactly doing to the operating\nsystem.\nBefore running the CLI for the first time, you will have to setup the \"Windows Desktop App\nConverter\". This will take a few minutes, but don't worry - you only have to do\nthis once. Download and Desktop App Converter from here.\nYou will receive two files: DesktopAppConverter.zip and BaseImage-14316.wim.\n\nUnzip DesktopAppConverter.zip. From an elevated PowerShell (opened with\n\"run as Administrator\", ensure that your systems execution policy allows us to\nrun everything we intend to run by calling Set-ExecutionPolicy bypass.\nThen, run the installation of the Desktop App Converter, passing in the\nlocation of the Windows base Image (downloaded as BaseImage-14316.wim), by\ncalling .\\DesktopAppConverter.ps1 -Setup -BaseImage .\\BaseImage-14316.wim.\nIf running the above command prompts you for a reboot, please restart your\nmachine and run the above command again after a successful restart.\n\nOnce installation succeeded, you can move on to compiling your Electron app.\n", + "body": "Windows Store Guide\nWith Windows 10, the good old win32 executable got a new sibling: The Universal\nWindows Platform. The new .appx format does not only enable a number of new\npowerful APIs like Cortana or Push Notifications, but through the Windows Store,\nalso simplifies installation and updating.\nMicrosoft developed a tool that compiles Electron apps as .appx packages,\nenabling developers to use some of the goodies found in the new application\nmodel. This guide explains how to use it - and what the capabilities and\nlimitations of an Electron AppX package are.\n\n\nBackground and Requirements\nWindows 10 \"Anniversary Update\" is able to run win32 .exe binaries by\nlaunching them together with a virtualized filesystem and registry. Both are\ncreated during compilation by running app and installer inside a Windows\nContainer, allowing Windows to identify exactly which modifications to the\noperating system are done during installation. Pairing the executable with a\nvirtual filesystem and a virtual registry allows Windows to enable one-click\ninstallation and uninstallation.\nIn addition, the exe is launched inside the appx model - meaning that it can use\nmany of the APIs available to the Universal Windows Platform. To gain even more\ncapabilities, an Electron app can pair up with an invisible UWP background task\nlaunched together with the exe - sort of launched as a sidekick to run tasks\nin the background, receive push notifications, or to communicate with other UWP\napplications.\nTo compile any existing Electron app, ensure that you have the following\nrequirements:\n\nWindows 10 with Anniversary Update (released August 2nd, 2016)\nThe Windows 10 SDK, downloadable here\nAt least Node 4 (to check, run node -v)\n\nThen, go and install the electron-windows-store CLI:\nnpm install -g electron-windows-store\n\n\nStep 1: Package Your Electron Application\nPackage the application using electron-packager (or a similar tool).\nMake sure to remove node_modules that you don't need in your final application, since\nany module you don't actually need will increase your application's size.\nThe output should look roughly like this:\n├── Ghost.exe\n├── LICENSE\n├── content_resources_200_percent.pak\n├── content_shell.pak\n├── d3dcompiler_47.dll\n├── ffmpeg.dll\n├── icudtl.dat\n├── libEGL.dll\n├── libGLESv2.dll\n├── locales\n│   ├── am.pak\n│   ├── ar.pak\n│   ├── [...]\n├── natives_blob.bin\n├── node.dll\n├── resources\n│   ├── app\n│   └── atom.asar\n├── v8_context_snapshot.bin\n├── squirrel.exe\n└── ui_resources_200_percent.pak\n\n\nStep 2: Running electron-windows-store\nFrom an elevated PowerShell (run it \"as Administrator\"), run\nelectron-windows-store with the required parameters, passing both the input\nand output directories, the app's name and version, and confirmation that\nnode_modules should be flattened.\nelectron-windows-store `\n --input-directory C:\\myelectronapp `\n --output-directory C:\\output\\myelectronapp `\n --flatten true `\n --package-version 1.0.0.0 `\n --package-name myelectronapp\nOnce executed, the tool goes to work: It accepts your Electron app as an input,\nflattening the node_modules. Then, it archives your application as app.zip.\nUsing an installer and a Windows Container, the tool creates an \"expanded\" AppX\npackage - including the Windows Application Manifest (AppXManifest.xml) as\nwell as the virtual file system and the virtual registry inside your output\nfolder.\nOnce the expanded AppX files are created, the tool uses the Windows App Packager\n(MakeAppx.exe) to create a single-file AppX package from those files on disk.\nFinally, the tool can be used to create a trusted certificate on your computer\nto sign the new AppX package. With the signed AppX package, the CLI can also\nautomatically install the package on your machine.\n\n\nStep 3: Using the AppX Package\nIn order to run your package, your users will need Windows 10 with the so-called\n\"Anniversary Update\" - details on how to update Windows can be found here.\nIn opposition to traditional UWP apps, packaged apps currently need to undergo a\nmanual verification process, for which you can apply here.\nIn the meantime, all users will be able to install your package by double-clicking it,\nso a submission to the store might not be necessary if you're looking for an\neasier installation method. In managed environments (usually enterprises), the\nAdd-AppxPackage PowerShell Cmdlet can be used to install it in an automated fashion.\nAnother important limitation is that the compiled AppX package still contains a\nwin32 executable - and will therefore not run on Xbox, HoloLens, or Phones.\n\n\nOptional: Add UWP Features using a BackgroundTask\nYou can pair your Electron app up with an invisible UWP background task that\ngets to make full use of Windows 10 features - like push notifications,\nCortana integration, or live tiles.\nTo check out how an Electron app that uses a background task to send toast\nnotifications and live tiles, check out the Microsoft-provided sample.\n\n\nOptional: Convert using Container Virtualization\nTo generate the AppX package, the electron-windows-store CLI uses a template\nthat should work for most Electron apps. However, if you are using a custom\ninstaller, or should you experience any trouble with the generated package, you\ncan attempt to create a package using compilation with a Windows Container - in\nthat mode, the CLI will install and run your application in blank Windows Container\nto determine what modifications your application is exactly doing to the operating\nsystem.\nBefore running the CLI for the first time, you will have to setup the \"Windows Desktop App\nConverter\". This will take a few minutes, but don't worry - you only have to do\nthis once. Download and Desktop App Converter from here.\nYou will receive two files: DesktopAppConverter.zip and BaseImage-14316.wim.\n\nUnzip DesktopAppConverter.zip. From an elevated PowerShell (opened with\n\"run as Administrator\", ensure that your systems execution policy allows us to\nrun everything we intend to run by calling Set-ExecutionPolicy bypass.\nThen, run the installation of the Desktop App Converter, passing in the\nlocation of the Windows base Image (downloaded as BaseImage-14316.wim), by\ncalling .\\DesktopAppConverter.ps1 -Setup -BaseImage .\\BaseImage-14316.wim.\nIf running the above command prompts you for a reboot, please restart your\nmachine and run the above command again after a successful restart.\n\nOnce installation succeeded, you can move on to compiling your Electron app.\n", "keyValuePairs": [ "is:doc", "is:tutorial", @@ -1079,7 +1127,7 @@ "githubUrl": "https://github.com/electron/electron/tree/master/docs/tutorial/windows-taskbar.md", "url": "https://electronjs.org/docs/tutorial/windows-taskbar", "slug": "windows-taskbar", - "body": "Windows Taskbar\nElectron has APIs to configure the app's icon in the Windows taskbar. Supported\nare the creation of a JumpList,\ncustom thumbnails and toolbars,\nicon overlays, and the so-called\n\"Flash Frame\" effect, but\nElectron also uses the app's dock icon to implement cross-platform features\nlike recent documents and\napplication progress.\n\n\nJumpList\nWindows allows apps to define a custom context menu that shows up when users\nright-click the app's icon in the task bar. That context menu is called\nJumpList. You specify custom actions in the Tasks category of JumpList,\nas quoted from MSDN:\n\nApplications define tasks based on both the program's features and the key\nthings a user is expected to do with them. Tasks should be context-free, in\nthat the application does not need to be running for them to work. They\nshould also be the statistically most common actions that a normal user would\nperform in an application, such as compose an email message or open the\ncalendar in a mail program, create a new document in a word processor, launch\nan application in a certain mode, or launch one of its subcommands. An\napplication should not clutter the menu with advanced features that standard\nusers won't need or one-time actions such as registration. Do not use tasks\nfor promotional items such as upgrades or special offers.\nIt is strongly recommended that the task list be static. It should remain the\nsame regardless of the state or status of the application. While it is\npossible to vary the list dynamically, you should consider that this could\nconfuse the user who does not expect that portion of the destination list to\nchange.\n\nTasks of Internet Explorer:\n\nUnlike the dock menu in macOS which is a real menu, user tasks in Windows work\nlike application shortcuts such that when user clicks a task, a program will be\nexecuted with specified arguments.\nTo set user tasks for your application, you can use\napp.setUserTasks API:\nconst { app } = require('electron')\napp.setUserTasks([\n {\n program: process.execPath,\n arguments: '--new-window',\n iconPath: process.execPath,\n iconIndex: 0,\n title: 'New Window',\n description: 'Create a new window'\n }\n])\nTo clean your tasks list, call app.setUserTasks with an empty array:\nconst { app } = require('electron')\napp.setUserTasks([])\nThe user tasks will still show even after your application closes, so the icon\nand program path specified for a task should exist until your application is\nuninstalled.\n\n\nThumbnail Toolbars\nOn Windows you can add a thumbnail toolbar with specified buttons in a taskbar\nlayout of an application window. It provides users a way to access to a\nparticular window's command without restoring or activating the window.\nFrom MSDN, it's illustrated:\n\nThis toolbar is the familiar standard toolbar common control. It has a\nmaximum of seven buttons. Each button's ID, image, tooltip, and state are defined\nin a structure, which is then passed to the taskbar. The application can show,\nenable, disable, or hide buttons from the thumbnail toolbar as required by its\ncurrent state.\nFor example, Windows Media Player might offer standard media transport controls\nsuch as play, pause, mute, and stop.\n\nThumbnail toolbar of Windows Media Player:\n\nYou can use BrowserWindow.setThumbarButtons to set\nthumbnail toolbar in your application:\nconst { BrowserWindow } = require('electron')\nconst path = require('path')\n\nconst win = new BrowserWindow()\n\nwin.setThumbarButtons([\n {\n tooltip: 'button1',\n icon: path.join(__dirname, 'button1.png'),\n click () { console.log('button1 clicked') }\n }, {\n tooltip: 'button2',\n icon: path.join(__dirname, 'button2.png'),\n flags: ['enabled', 'dismissonclick'],\n click () { console.log('button2 clicked.') }\n }\n])\nTo clean thumbnail toolbar buttons, just call BrowserWindow.setThumbarButtons\nwith an empty array:\nconst { BrowserWindow } = require('electron')\n\nconst win = new BrowserWindow()\nwin.setThumbarButtons([])\n\n\nIcon Overlays in Taskbar\nOn Windows a taskbar button can use a small overlay to display application\nstatus, as quoted from MSDN:\n\nIcon overlays serve as a contextual notification of status, and are intended\nto negate the need for a separate notification area status icon to communicate\nthat information to the user. For instance, the new mail status in Microsoft\nOutlook, currently shown in the notification area, can now be indicated\nthrough an overlay on the taskbar button. Again, you must decide during your\ndevelopment cycle which method is best for your application. Overlay icons are\nintended to supply important, long-standing status or notifications such as\nnetwork status, messenger status, or new mail. The user should not be\npresented with constantly changing overlays or animations.\n\nOverlay on taskbar button:\n\nTo set the overlay icon for a window, you can use the\nBrowserWindow.setOverlayIcon API:\nconst {BrowserWindow} = require('electron')\nlet win = new BrowserWindow()\nwin.setOverlayIcon('path/to/overlay.png', 'Description for overlay')\n\n\nFlash Frame\nOn Windows you can highlight the taskbar button to get the user's attention.\nThis is similar to bouncing the dock icon on macOS.\nFrom the MSDN reference documentation:\n\nTypically, a window is flashed to inform the user that the window requires\nattention but that it does not currently have the keyboard focus.\n\nTo flash the BrowserWindow taskbar button, you can use the\nBrowserWindow.flashFrame API:\nconst {BrowserWindow} = require('electron')\nlet win = new BrowserWindow()\nwin.once('focus', () => win.flashFrame(false))\nwin.flashFrame(true)\nDon't forget to call the flashFrame method with false to turn off the flash. In\nthe above example, it is called when the window comes into focus, but you might\nuse a timeout or some other event to disable it.\n", + "body": "Windows Taskbar\nElectron has APIs to configure the app's icon in the Windows taskbar. Supported\nare the creation of a JumpList,\ncustom thumbnails and toolbars,\nicon overlays, and the so-called\n\"Flash Frame\" effect, but\nElectron also uses the app's dock icon to implement cross-platform features\nlike recent documents and\napplication progress.\n\n\nJumpList\nWindows allows apps to define a custom context menu that shows up when users\nright-click the app's icon in the task bar. That context menu is called\nJumpList. You specify custom actions in the Tasks category of JumpList,\nas quoted from MSDN:\n\nApplications define tasks based on both the program's features and the key\nthings a user is expected to do with them. Tasks should be context-free, in\nthat the application does not need to be running for them to work. They\nshould also be the statistically most common actions that a normal user would\nperform in an application, such as compose an email message or open the\ncalendar in a mail program, create a new document in a word processor, launch\nan application in a certain mode, or launch one of its subcommands. An\napplication should not clutter the menu with advanced features that standard\nusers won't need or one-time actions such as registration. Do not use tasks\nfor promotional items such as upgrades or special offers.\nIt is strongly recommended that the task list be static. It should remain the\nsame regardless of the state or status of the application. While it is\npossible to vary the list dynamically, you should consider that this could\nconfuse the user who does not expect that portion of the destination list to\nchange.\n\nTasks of Internet Explorer:\n\nUnlike the dock menu in macOS which is a real menu, user tasks in Windows work\nlike application shortcuts such that when user clicks a task, a program will be\nexecuted with specified arguments.\nTo set user tasks for your application, you can use\napp.setUserTasks API:\nconst { app } = require('electron')\napp.setUserTasks([\n {\n program: process.execPath,\n arguments: '--new-window',\n iconPath: process.execPath,\n iconIndex: 0,\n title: 'New Window',\n description: 'Create a new window'\n }\n])\nTo clean your tasks list, call app.setUserTasks with an empty array:\nconst { app } = require('electron')\napp.setUserTasks([])\nThe user tasks will still show even after your application closes, so the icon\nand program path specified for a task should exist until your application is\nuninstalled.\n\n\nThumbnail Toolbars\nOn Windows you can add a thumbnail toolbar with specified buttons in a taskbar\nlayout of an application window. It provides users a way to access to a\nparticular window's command without restoring or activating the window.\nFrom MSDN, it's illustrated:\n\nThis toolbar is the familiar standard toolbar common control. It has a\nmaximum of seven buttons. Each button's ID, image, tooltip, and state are defined\nin a structure, which is then passed to the taskbar. The application can show,\nenable, disable, or hide buttons from the thumbnail toolbar as required by its\ncurrent state.\nFor example, Windows Media Player might offer standard media transport controls\nsuch as play, pause, mute, and stop.\n\nThumbnail toolbar of Windows Media Player:\n\nYou can use BrowserWindow.setThumbarButtons to set\nthumbnail toolbar in your application:\nconst { BrowserWindow } = require('electron')\nconst path = require('path')\n\nconst win = new BrowserWindow()\n\nwin.setThumbarButtons([\n {\n tooltip: 'button1',\n icon: path.join(__dirname, 'button1.png'),\n click () { console.log('button1 clicked') }\n }, {\n tooltip: 'button2',\n icon: path.join(__dirname, 'button2.png'),\n flags: ['enabled', 'dismissonclick'],\n click () { console.log('button2 clicked.') }\n }\n])\nTo clean thumbnail toolbar buttons, just call BrowserWindow.setThumbarButtons\nwith an empty array:\nconst { BrowserWindow } = require('electron')\n\nconst win = new BrowserWindow()\nwin.setThumbarButtons([])\n\n\nIcon Overlays in Taskbar\nOn Windows a taskbar button can use a small overlay to display application\nstatus, as quoted from MSDN:\n\nIcon overlays serve as a contextual notification of status, and are intended\nto negate the need for a separate notification area status icon to communicate\nthat information to the user. For instance, the new mail status in Microsoft\nOutlook, currently shown in the notification area, can now be indicated\nthrough an overlay on the taskbar button. Again, you must decide during your\ndevelopment cycle which method is best for your application. Overlay icons are\nintended to supply important, long-standing status or notifications such as\nnetwork status, messenger status, or new mail. The user should not be\npresented with constantly changing overlays or animations.\n\nOverlay on taskbar button:\n\nTo set the overlay icon for a window, you can use the\nBrowserWindow.setOverlayIcon API:\nconst { BrowserWindow } = require('electron')\nlet win = new BrowserWindow()\nwin.setOverlayIcon('path/to/overlay.png', 'Description for overlay')\n\n\nFlash Frame\nOn Windows you can highlight the taskbar button to get the user's attention.\nThis is similar to bouncing the dock icon on macOS.\nFrom the MSDN reference documentation:\n\nTypically, a window is flashed to inform the user that the window requires\nattention but that it does not currently have the keyboard focus.\n\nTo flash the BrowserWindow taskbar button, you can use the\nBrowserWindow.flashFrame API:\nconst { BrowserWindow } = require('electron')\nlet win = new BrowserWindow()\nwin.once('focus', () => win.flashFrame(false))\nwin.flashFrame(true)\nDon't forget to call the flashFrame method with false to turn off the flash. In\nthe above example, it is called when the window comes into focus, but you might\nuse a timeout or some other event to disable it.\n", "keyValuePairs": [ "is:doc", "is:tutorial", diff --git a/electron-api.json b/electron-api.json index 449ae75..5f2d10f 100644 --- a/electron-api.json +++ b/electron-api.json @@ -6,11 +6,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "app", - "websiteUrl": "http://electron.atom.io/docs/api/app", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/app.md", + "websiteUrl": "http://electronjs.org/docs/api/app", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/app.md", "methods": [ { "name": "quit", @@ -20,7 +20,7 @@ { "name": "exit", "signature": "([exitCode])", - "description": "Exits immediately with exitCode. exitCode defaults to 0. All windows will be closed immediately without asking user and the before-quit and will-quit events will not be emitted.", + "description": "Exits immediately with exitCode. exitCode defaults to 0. All windows will be closed immediately without asking the user, and the before-quit and will-quit events will not be emitted.", "parameters": [ { "name": "exitCode", @@ -33,7 +33,7 @@ { "name": "relaunch", "signature": "([options])", - "description": "Relaunches the app when current instance exits. By default the new instance will use the same working directory and command line arguments with current instance. When args is specified, the args will be passed as command line arguments instead. When execPath is specified, the execPath will be executed for relaunch instead of current app. Note that this method does not quit the app when executed, you have to call app.quit or app.exit after calling app.relaunch to make the app restart. When app.relaunch is called for multiple times, multiple instances will be started after current instance exited. An example of restarting current instance immediately and adding a new command line argument to the new instance:", + "description": "Relaunches the app when current instance exits. By default, the new instance will use the same working directory and command line arguments with current instance. When args is specified, the args will be passed as command line arguments instead. When execPath is specified, the execPath will be executed for relaunch instead of current app. Note that this method does not quit the app when executed, you have to call app.quit or app.exit after calling app.relaunch to make the app restart. When app.relaunch is called for multiple times, multiple instances will be started after current instance exited. An example of restarting current instance immediately and adding a new command line argument to the new instance:", "parameters": [ { "name": "options", @@ -68,6 +68,16 @@ "description": "true if Electron has finished initializing, false otherwise." } }, + { + "name": "whenReady", + "signature": "()", + "returns": { + "type": "Promise", + "collection": false, + "innerType": "void", + "description": "fulfilled when Electron is initialized. May be used as a convenient alternative to checking app.isReady() and subscribing to the ready event if the app is not ready yet." + } + }, { "name": "focus", "signature": "()", @@ -113,13 +123,13 @@ "returns": { "type": "String", "collection": false, - "description": "A path to a special directory or file associated with name. On failure an Error is thrown." + "description": "A path to a special directory or file associated with name. On failure, an Error is thrown." } }, { "name": "getFileIcon", "signature": "(path[, options], callback)", - "description": "Fetches a path's associated icon. On Windows, there a 2 kinds of icons: On Linux and macOS, icons depend on the application associated with file mime type.", + "description": "Fetches a path's associated icon. On Windows, there a 2 kinds of icons: On Linux and macOS, icons depend on the application associated with file mime type. Deprecated Soon", "parameters": [ { "name": "path", @@ -180,6 +190,54 @@ } ] }, + { + "name": "getFileIcon", + "signature": "(path[, options])", + "description": "Fetches a path's associated icon. On Windows, there a 2 kinds of icons: On Linux and macOS, icons depend on the application associated with file mime type.", + "parameters": [ + { + "name": "path", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "options", + "type": "Object", + "collection": false, + "required": false, + "properties": [ + { + "name": "size", + "type": "String", + "collection": false, + "description": "", + "required": true, + "possibleValues": [ + { + "value": "small", + "description": "16x16" + }, + { + "value": "normal", + "description": "32x32" + }, + { + "value": "large", + "description": "48x48 on Linux, 32x32 on Windows, unsupported on macOS." + } + ] + } + ] + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "NativeImage", + "description": "fulfilled with the app's icon, which is a NativeImage." + } + }, { "name": "setPath", "signature": "(name, path)", @@ -234,13 +292,23 @@ { "name": "getLocale", "signature": "()", - "description": "Note: When distributing your packaged app, you have to also ship the locales folder. Note: On Windows you have to call it after the ready events gets emitted.", + "description": "To set the locale, you'll want to use a command line switch at app startup, which may be found here. Note: When distributing your packaged app, you have to also ship the locales folder. Note: On Windows, you have to call it after the ready events gets emitted.", "returns": { "type": "String", "collection": false, "description": "The current application locale. Possible return values are documented here." } }, + { + "name": "getLocaleCountryCode", + "signature": "()", + "description": "Note: When unable to detect locale country code, it returns empty string.", + "returns": { + "type": "string", + "collection": false, + "description": "User operating system's locale two-letter ISO 3166 country code. The value is taken from native OS APIs." + } + }, { "name": "addRecentDocument", "signature": "(path)", @@ -248,7 +316,7 @@ "macOS", "Windows" ], - "description": "Adds path to the recent documents list. This list is managed by the OS. On Windows you can visit the list from the task bar, and on macOS you can visit it from dock menu.", + "description": "Adds path to the recent documents list. This list is managed by the OS. On Windows, you can visit the list from the task bar, and on macOS, you can visit it from dock menu.", "parameters": [ { "name": "path", @@ -270,7 +338,7 @@ { "name": "setAsDefaultProtocolClient", "signature": "(protocol[, path, args])", - "description": "This method sets the current executable as the default handler for a protocol (aka URI scheme). It allows you to integrate your app deeper into the operating system. Once registered, all links with your-protocol:// will be opened with the current executable. The whole link, including protocol, will be passed to your application as a parameter. On Windows you can provide optional parameters path, the path to your executable, and args, an array of arguments to be passed to your executable when it launches. Note: On macOS, you can only register protocols that have been added to your app's info.plist, which can not be modified at runtime. You can however change the file with a simple text editor or script during build time. Please refer to Apple's documentation for details. The API uses the Windows Registry and LSSetDefaultHandlerForURLScheme internally.", + "description": "This method sets the current executable as the default handler for a protocol (aka URI scheme). It allows you to integrate your app deeper into the operating system. Once registered, all links with your-protocol:// will be opened with the current executable. The whole link, including protocol, will be passed to your application as a parameter. On Windows, you can provide optional parameters path, the path to your executable, and args, an array of arguments to be passed to your executable when it launches. Note: On macOS, you can only register protocols that have been added to your app's info.plist, which can not be modified at runtime. You can however change the file with a simple text editor or script during build time. Please refer to Apple's documentation for details. The API uses the Windows Registry and LSSetDefaultHandlerForURLScheme internally.", "parameters": [ { "name": "protocol", @@ -340,10 +408,6 @@ { "name": "isDefaultProtocolClient", "signature": "(protocol[, path, args])", - "platforms": [ - "macOS", - "Windows" - ], "description": "This method checks if the current executable is the default handler for a protocol (aka URI scheme). If so, it will return true. Otherwise, it will return false. Note: On macOS, you can use this method to check if the app has been registered as the default protocol handler for a protocol. You can also verify this by checking ~/Library/Preferences/com.apple.LaunchServices.plist on the macOS machine. Please refer to Apple's documentation for details. The API uses the Windows Registry and LSCopyDefaultHandlerForURLScheme internally.", "parameters": [ { @@ -440,43 +504,27 @@ ] }, { - "name": "makeSingleInstance", - "signature": "(callback)", - "description": "This method makes your application a Single Instance Application - instead of allowing multiple instances of your app to run, this will ensure that only a single instance of your app is running, and other instances signal this instance and exit. callback will be called by the first instance with callback(argv, workingDirectory) when a second instance has been executed. argv is an Array of the second instance's command line arguments, and workingDirectory is its current working directory. Usually applications respond to this by making their primary window focused and non-minimized. The callback is guaranteed to be executed after the ready event of app gets emitted. This method returns false if your process is the primary instance of the application and your app should continue loading. And returns true if your process has sent its parameters to another instance, and you should immediately quit. On macOS the system enforces single instance automatically when users try to open a second instance of your app in Finder, and the open-file and open-url events will be emitted for that. However when users start your app in command line the system's single instance mechanism will be bypassed and you have to use this method to ensure single instance. An example of activating the window of primary instance when a second instance starts:", - "parameters": [ - { - "name": "callback", - "type": "Function", - "collection": false, - "required": true, - "parameters": [ - { - "name": "argv", - "type": "String", - "collection": true, - "description": "An array of the second instance's command line arguments", - "required": true - }, - { - "name": "workingDirectory", - "type": "String", - "collection": false, - "description": "The second instance's working directory", - "required": true - } - ] - } - ], + "name": "requestSingleInstanceLock", + "signature": "()", + "description": "This method makes your application a Single Instance Application - instead of allowing multiple instances of your app to run, this will ensure that only a single instance of your app is running, and other instances signal this instance and exit. The return value of this method indicates whether or not this instance of your application successfully obtained the lock. If it failed to obtain the lock, you can assume that another instance of your application is already running with the lock and exit immediately. I.e. This method returns true if your process is the primary instance of your application and your app should continue loading. It returns false if your process should immediately quit as it has sent its parameters to another instance that has already acquired the lock. On macOS, the system enforces single instance automatically when users try to open a second instance of your app in Finder, and the open-file and open-url events will be emitted for that. However when users start your app in command line, the system's single instance mechanism will be bypassed, and you have to use this method to ensure single instance. An example of activating the window of primary instance when a second instance starts:", "returns": { "type": "Boolean", - "collection": false, - "description": "." + "collection": false } }, { - "name": "releaseSingleInstance", + "name": "hasSingleInstanceLock", "signature": "()", - "description": "Releases all locks that were created by makeSingleInstance. This will allow multiple instances of the application to once again run side by side." + "description": "This method returns whether or not this instance of your app is currently holding the single instance lock. You can request the lock with app.requestSingleInstanceLock() and release with app.releaseSingleInstanceLock()", + "returns": { + "type": "Boolean", + "collection": false + } + }, + { + "name": "releaseSingleInstanceLock", + "signature": "()", + "description": "Releases all locks that were created by requestSingleInstanceLock. This will allow multiple instances of the application to once again run side by side." }, { "name": "setUserActivity", @@ -584,7 +632,7 @@ "platforms": [ "LINUX" ], - "description": "Imports the certificate in pkcs12 format into the platform certificate store. callback is called with the result of import operation, a value of 0 indicates success while any other value indicates failure according to chromium net_error_list.", + "description": "Imports the certificate in pkcs12 format into the platform certificate store. callback is called with the result of import operation, a value of 0 indicates success while any other value indicates failure according to Chromium net_error_list.", "parameters": [ { "name": "options", @@ -653,6 +701,24 @@ "description": "The Graphics Feature Status from chrome://gpu/." } }, + { + "name": "getGPUInfo", + "signature": "(infoType)", + "description": "For infoType equal to complete: Promise is fulfilled with Object containing all the GPU Information as in chromium's GPUInfo object. This includes the version and driver information that's shown on chrome://gpu page. For infoType equal to basic: Promise is fulfilled with Object containing fewer attributes than when requested with complete. Here's an example of basic response: Using basic should be preferred if only basic information like vendorId or driverId is needed.", + "parameters": [ + { + "name": "infoType", + "type": "String", + "collection": false, + "description": "Values can be either `basic` for basic info or `complete` for complete info.", + "required": true + } + ], + "returns": { + "type": "Promise", + "collection": false + } + }, { "name": "setBadgeCount", "signature": "(count)", @@ -660,7 +726,7 @@ "Linux", "macOS" ], - "description": "Sets the counter badge for current app. Setting the count to 0 will hide the badge. On macOS it shows on the dock icon. On Linux it only works for Unity launcher, Note: Unity launcher requires the existence of a .desktop file to work, for more information please read Desktop Environment Integration.", + "description": "Sets the counter badge for current app. Setting the count to 0 will hide the badge. On macOS, it shows on the dock icon. On Linux, it only works for Unity launcher. Note: Unity launcher requires the existence of a .desktop file to work, for more information please read Desktop Environment Integration.", "parameters": [ { "name": "count", @@ -707,7 +773,7 @@ "macOS", "Windows" ], - "description": "If you provided path and args options to app.setLoginItemSettings then you need to pass the same arguments here for openAtLogin to be set correctly.", + "description": "If you provided path and args options to app.setLoginItemSettings, then you need to pass the same arguments here for openAtLogin to be set correctly.", "parameters": [ { "name": "options", @@ -823,7 +889,7 @@ "name": "openAsHidden", "type": "Boolean", "collection": false, - "description": "true to open the app as hidden. Defaults to false. The user can edit this setting from the System Preferences so app.getLoginItemStatus().wasOpenedAsHidden should be checked when the app is opened to know the current value. This setting is not available on .", + "description": "true to open the app as hidden. Defaults to false. The user can edit this setting from the System Preferences so app.getLoginItemSettings().wasOpenedAsHidden should be checked when the app is opened to know the current value. This setting is not available on .", "required": false }, { @@ -864,7 +930,7 @@ "macOS", "Windows" ], - "description": "Manually enables Chrome's accessibility support, allowing to expose accessibility switch to users in application settings. https://www.chromium.org/developers/design-documents/accessibility for more details. Disabled by default. Note: Rendering accessibility tree can significantly affect the performance of your app. It should not be enabled by default.", + "description": "Manually enables Chrome's accessibility support, allowing to expose accessibility switch to users in application settings. See Chromium's accessibility docs for more details. Disabled by default. This API must be called after the ready event is emitted. Note: Rendering accessibility tree can significantly affect the performance of your app. It should not be enabled by default.", "parameters": [ { "name": "enabled", @@ -875,13 +941,22 @@ } ] }, + { + "name": "showAboutPanel", + "platforms": [ + "macOS", + "Linux" + ], + "description": "Show the app's about panel options. These options can be overridden with app.setAboutPanelOptions(options)." + }, { "name": "setAboutPanelOptions", "signature": "(options)", "platforms": [ - "macOS" + "macOS", + "Linux" ], - "description": "Set the about panel options. This will override the values defined in the app's .plist file. See the Apple docs for more details.", + "description": "Set the about panel options. This will override the values defined in the app's .plist file on MacOS. See the Apple docs for more details. On Linux, values must be set in order to be shown; there are no defaults.", "parameters": [ { "name": "options", @@ -910,6 +985,13 @@ "description": "Copyright information.", "required": false }, + { + "name": "version", + "type": "String", + "collection": false, + "description": "The app's build version number.", + "required": false + }, { "name": "credits", "type": "String", @@ -918,10 +1000,17 @@ "required": false }, { - "name": "version", + "name": "website", "type": "String", "collection": false, - "description": "The app's build version number.", + "description": "The app's website.", + "required": false + }, + { + "name": "iconPath", + "type": "String", + "collection": false, + "description": "Path to the app's icon.", "required": false } ] @@ -934,7 +1023,7 @@ "platforms": [ "macOS (mas)" ], - "description": "Start accessing a security scoped resource. With this method electron applications that are packaged for the Mac App Store may reach outside their sandbox to access files chosen by the user. See Apple's documentation for a description of how this system works.", + "description": "Start accessing a security scoped resource. With this method Electron applications that are packaged for the Mac App Store may reach outside their sandbox to access files chosen by the user. See Apple's documentation for a description of how this system works.", "parameters": [ { "name": "bookmarkData", @@ -951,14 +1040,14 @@ } }, { - "name": "enableMixedSandbox", + "name": "enableSandbox", "signature": "()", "platforms": [ "Experimental", "macOS", "Windows" ], - "description": "Enables mixed sandbox mode on the app. This method can only be called before app is ready." + "description": "Enables full sandbox mode on the app. This method can only be called before app is ready." }, { "name": "isInApplicationsFolder", @@ -978,18 +1067,18 @@ "platforms": [ "macOS" ], - "description": "No confirmation dialog will be presented by default, if you wish to allow the user to confirm the operation you may do so using the dialog API. NOTE: This method throws errors if anything other than the user causes the move to fail. For instance if the user cancels the authorization dialog this method returns false. If we fail to perform the copy then this method will throw an error. The message in the error should be informative and tell you exactly what went wrong", + "description": "No confirmation dialog will be presented by default. If you wish to allow the user to confirm the operation, you may do so using the dialog API. NOTE: This method throws errors if anything other than the user causes the move to fail. For instance if the user cancels the authorization dialog, this method returns false. If we fail to perform the copy, then this method will throw an error. The message in the error should be informative and tell you exactly what went wrong", "returns": { "type": "Boolean", "collection": false, - "description": "Whether the move was successful. Please note that if the move is successful your application will quit and relaunch." + "description": "Whether the move was successful. Please note that if the move is successful, your application will quit and relaunch." } } ], "events": [ { "name": "will-finish-launching", - "description": "Emitted when the application has finished basic startup. On Windows and Linux, the will-finish-launching event is the same as the ready event; on macOS, this event represents the applicationWillFinishLaunching notification of NSApplication. You would usually set up listeners for the open-file and open-url events here, and start the crash reporter and auto updater. In most cases, you should just do everything in the ready event handler." + "description": "Emitted when the application has finished basic startup. On Windows and Linux, the will-finish-launching event is the same as the ready event; on macOS, this event represents the applicationWillFinishLaunching notification of NSApplication. You would usually set up listeners for the open-file and open-url events here, and start the crash reporter and auto updater. In most cases, you should do everything in the ready event handler." }, { "name": "ready", @@ -1009,7 +1098,7 @@ }, { "name": "before-quit", - "description": "Emitted before the application starts closing its windows. Calling event.preventDefault() will prevent the default behaviour, which is terminating the application. Note: If application quit was initiated by autoUpdater.quitAndInstall() then before-quit is emitted after emitting close event on all windows and closing them.", + "description": "Emitted before the application starts closing its windows. Calling event.preventDefault() will prevent the default behavior, which is terminating the application. Note: If application quit was initiated by autoUpdater.quitAndInstall(), then before-quit is emitted after emitting close event on all windows and closing them. Note: On Windows, this event will not be emitted if the app is closed due to a shutdown/restart of the system or a user logout.", "returns": [ { "name": "event", @@ -1021,7 +1110,7 @@ }, { "name": "will-quit", - "description": "Emitted when all windows have been closed and the application will quit. Calling event.preventDefault() will prevent the default behaviour, which is terminating the application. See the description of the window-all-closed event for the differences between the will-quit and window-all-closed events.", + "description": "Emitted when all windows have been closed and the application will quit. Calling event.preventDefault() will prevent the default behaviour, which is terminating the application. See the description of the window-all-closed event for the differences between the will-quit and window-all-closed events. Note: On Windows, this event will not be emitted if the app is closed due to a shutdown/restart of the system or a user logout.", "returns": [ { "name": "event", @@ -1033,7 +1122,7 @@ }, { "name": "quit", - "description": "Emitted when the application is quitting.", + "description": "Emitted when the application is quitting. Note: On Windows, this event will not be emitted if the app is closed due to a shutdown/restart of the system or a user logout.", "returns": [ { "name": "event", @@ -1223,7 +1312,7 @@ }, { "name": "update-activity-state", - "description": "Emitted when Handoff is about to be resumed on another device. If you need to update the state to be transferred, you should call event.preventDefault() immediately, construct a new userInfo dictionary and call app.updateCurrentActiviy() in a timely manner. Otherwise the operation will fail and continue-activity-error will be called.", + "description": "Emitted when Handoff is about to be resumed on another device. If you need to update the state to be transferred, you should call event.preventDefault() immediately, construct a new userInfo dictionary and call app.updateCurrentActiviy() in a timely manner. Otherwise, the operation will fail and continue-activity-error will be called.", "platforms": [ "macOS" ], @@ -1436,7 +1525,7 @@ }, { "name": "login", - "description": "Emitted when webContents wants to do basic auth. The default behavior is to cancel all authentications, to override this you should prevent the default behavior with event.preventDefault() and call callback(username, password) with the credentials.", + "description": "Emitted when webContents wants to do basic auth. The default behavior is to cancel all authentications. To override this you should prevent the default behavior with event.preventDefault() and call callback(username, password) with the credentials.", "returns": [ { "name": "event", @@ -1586,9 +1675,203 @@ "required": true } ] + }, + { + "name": "session-created", + "description": "Emitted when Electron has created a new session.", + "returns": [ + { + "name": "session", + "type": "Session", + "collection": false, + "required": true + } + ] + }, + { + "name": "second-instance", + "description": "This event will be emitted inside the primary instance of your application when a second instance has been executed. argv is an Array of the second instance's command line arguments, and workingDirectory is its current working directory. Usually applications respond to this by making their primary window focused and non-minimized. This event is guaranteed to be emitted after the ready event of app gets emitted. Note: Extra command line arguments might be added by Chromium, such as --original-process-start-time.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "argv", + "type": "String", + "collection": true, + "description": "An array of the second instance's command line arguments", + "required": true + }, + { + "name": "workingDirectory", + "type": "String", + "collection": false, + "description": "The second instance's working directory", + "required": true + } + ] + }, + { + "name": "desktop-capturer-get-sources", + "description": "Emitted when desktopCapturer.getSources() is called in the renderer process of webContents. Calling event.preventDefault() will make it return empty sources.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "webContents", + "type": "WebContents", + "collection": false, + "required": true + } + ] + }, + { + "name": "remote-require", + "description": "Emitted when remote.require() is called in the renderer process of webContents. Calling event.preventDefault() will prevent the module from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "webContents", + "type": "WebContents", + "collection": false, + "required": true + }, + { + "name": "moduleName", + "type": "String", + "collection": false, + "required": true + } + ] + }, + { + "name": "remote-get-global", + "description": "Emitted when remote.getGlobal() is called in the renderer process of webContents. Calling event.preventDefault() will prevent the global from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "webContents", + "type": "WebContents", + "collection": false, + "required": true + }, + { + "name": "globalName", + "type": "String", + "collection": false, + "required": true + } + ] + }, + { + "name": "remote-get-builtin", + "description": "Emitted when remote.getBuiltin() is called in the renderer process of webContents. Calling event.preventDefault() will prevent the module from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "webContents", + "type": "WebContents", + "collection": false, + "required": true + }, + { + "name": "moduleName", + "type": "String", + "collection": false, + "required": true + } + ] + }, + { + "name": "remote-get-current-window", + "description": "Emitted when remote.getCurrentWindow() is called in the renderer process of webContents. Calling event.preventDefault() will prevent the object from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "webContents", + "type": "WebContents", + "collection": false, + "required": true + } + ] + }, + { + "name": "remote-get-current-web-contents", + "description": "Emitted when remote.getCurrentWebContents() is called in the renderer process of webContents. Calling event.preventDefault() will prevent the object from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "webContents", + "type": "WebContents", + "collection": false, + "required": true + } + ] + }, + { + "name": "remote-get-guest-web-contents", + "description": "Emitted when .getWebContents() is called in the renderer process of webContents. Calling event.preventDefault() will prevent the object from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "webContents", + "type": "WebContents", + "collection": false, + "required": true + }, + { + "name": "guestWebContents", + "type": "WebContents", + "collection": false, + "required": true + } + ] } ], "properties": [ + { + "name": "isPackaged", + "description": "A Boolean property that returns true if the app is packaged, false otherwise. For many apps, this property can be used to distinguish development and production environments.", + "type": "Boolean", + "collection": false + }, { "name": "commandLine", "type": "Object", @@ -1630,6 +1913,45 @@ } ], "type": "Function" + }, + { + "name": "hasSwitch", + "signature": "(switch)", + "parameters": [ + { + "name": "switch", + "type": "String", + "collection": false, + "description": "A command-line switch", + "required": true + } + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the command-line switch is present." + }, + "type": "Function" + }, + { + "name": "getSwitchValue", + "signature": "(switch)", + "description": "Note: When the switch is not present, it returns empty string.", + "parameters": [ + { + "name": "switch", + "type": "String", + "collection": false, + "description": "A command-line switch", + "required": true + } + ], + "returns": { + "type": "String", + "collection": false, + "description": "The command-line switch value." + }, + "type": "Function" } ] }, @@ -1818,11 +2140,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "auto-updater", - "websiteUrl": "http://electron.atom.io/docs/api/auto-updater", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/auto-updater.md", + "websiteUrl": "http://electronjs.org/docs/api/auto-updater", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/auto-updater.md", "methods": [ { "name": "setFeedURL", @@ -1878,7 +2200,7 @@ { "name": "quitAndInstall", "signature": "()", - "description": "Restarts the app and installs the update after it has been downloaded. It should only be called after update-downloaded has been emitted. Under the hood calling autoUpdater.quitAndInstall() will close all application windows first, and automatically call app.quit() after all windows have been closed. Note: If the application is quit without calling this API after the update-downloaded event has been emitted, the application will still be replaced by the updated one on the next run." + "description": "Restarts the app and installs the update after it has been downloaded. It should only be called after update-downloaded has been emitted. Under the hood calling autoUpdater.quitAndInstall() will close all application windows first, and automatically call app.quit() after all windows have been closed. Note: It is not strictly necessary to call this function to apply an update, as a successfully downloaded update will always be applied the next time the application starts." } ], "events": [ @@ -1908,7 +2230,7 @@ }, { "name": "update-downloaded", - "description": "Emitted when an update has been downloaded. On Windows only releaseName is available.", + "description": "Emitted when an update has been downloaded. On Windows only releaseName is available. Note: It is not strictly necessary to handle this event. A successfully downloaded update will still be applied the next time the application starts.", "returns": [ { "name": "event", @@ -1941,16 +2263,20 @@ "required": true } ] + }, + { + "name": "before-quit-for-update", + "description": "This event is emitted after a user calls quitAndInstall(). When this API is called, the before-quit event is not emitted before all windows are closed. As a result you should listen to this event if you wish to perform actions before the windows are closed while a process is quitting, as well as listening to before-quit." } ] }, { "name": "BluetoothDevice", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "bluetooth-device", - "websiteUrl": "http://electron.atom.io/docs/api/structures/bluetooth-device", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/bluetooth-device.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/bluetooth-device", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/bluetooth-device.md", "properties": [ { "name": "deviceName", @@ -1975,11 +2301,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "browser-view", - "websiteUrl": "http://electron.atom.io/docs/api/browser-view", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/browser-view.md", + "websiteUrl": "http://electronjs.org/docs/api/browser-view", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/browser-view.md", "staticMethods": [ { "name": "getAllViews", @@ -2157,11 +2483,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "browser-window", - "websiteUrl": "http://electron.atom.io/docs/api/browser-window", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/browser-window.md", + "websiteUrl": "http://electronjs.org/docs/api/browser-window", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/browser-window.md", "staticMethods": [ { "name": "getAllWindows", @@ -2176,7 +2502,16 @@ "name": "getFocusedWindow", "signature": "()", "returns": { - "type": "BrowserWindow", + "type": [ + { + "typeName": "BrowserWindow", + "collection": false + }, + { + "typeName": "null", + "collection": false + } + ], "collection": false, "description": "The window that is focused in this application, otherwise returns null." } @@ -2481,7 +2816,7 @@ "name": "title", "type": "String", "collection": false, - "description": "Default window title. Default is \"Electron\".", + "description": "Default window title. Default is \"Electron\". If the HTML tag is defined in the HTML file loaded by loadURL(), this property will be ignored.", "required": false }, { @@ -2560,7 +2895,7 @@ "name": "backgroundColor", "type": "String", "collection": false, - "description": "Window's background color as a hexadecimal value, like #66CD00 or #FFF or #80FFFFFF (alpha is supported). Default is #FFF (white).", + "description": "Window's background color as a hexadecimal value, like #66CD00 or #FFF or #80FFFFFF (alpha in #AARRGGBB format is supported if transparent is set to true). Default is #FFF (white).", "required": false }, { @@ -2708,7 +3043,7 @@ "name": "nodeIntegration", "type": "Boolean", "collection": false, - "description": "Whether node integration is enabled. Default is true.", + "description": "Whether node integration is enabled. Default is false.", "required": false }, { @@ -2718,6 +3053,13 @@ "description": "Whether node integration is enabled in web workers. Default is false. More about this can be found in .", "required": false }, + { + "name": "nodeIntegrationInSubFrames", + "type": "Boolean", + "collection": false, + "description": "Experimental option for enabling NodeJS support in sub-frames such as iframes. All your preloads will load for every iframe, you can use process.isMainFrame to determine if you are in the main frame or not.", + "required": false + }, { "name": "preload", "type": "String", @@ -2732,6 +3074,13 @@ "description": "If set, this will sandbox the renderer associated with the window, making it compatible with the Chromium OS-level sandbox and disabling the Node.js engine. This is not the same as the nodeIntegration option and the APIs available to the preload script are more limited. Read more about the option . This option is currently experimental and may change or be removed in future Electron releases.", "required": false }, + { + "name": "enableRemoteModule", + "type": "Boolean", + "collection": false, + "description": "Whether to enable the module. Default is true.", + "required": false + }, { "name": "session", "type": "Session", @@ -2823,13 +3172,6 @@ "description": "Enables Chromium's experimental features. Default is false.", "required": false }, - { - "name": "experimentalCanvasFeatures", - "type": "Boolean", - "collection": false, - "description": "Enables Chromium's experimental canvas features. Default is false.", - "required": false - }, { "name": "scrollBounce", "type": "Boolean", @@ -2838,7 +3180,7 @@ "required": false }, { - "name": "blinkFeatures", + "name": "enableBlinkFeatures", "type": "String", "collection": false, "description": "A list of feature strings separated by ,, like CSSVariables,KeyboardEventKey to enable. The full list of supported feature strings can be found in the file.", @@ -2948,29 +3290,68 @@ "name": "contextIsolation", "type": "Boolean", "collection": false, - "description": "Whether to run Electron APIs and the specified preload script in a separate JavaScript context. Defaults to false. The context that the preload script runs in will still have full access to the document and window globals but it will use its own set of JavaScript builtins (Array, Object, JSON, etc.) and will be isolated from any changes made to the global environment by the loaded page. The Electron API will only be available in the preload script and not the loaded page. This option should be used when loading potentially untrusted remote content to ensure the loaded content cannot tamper with the preload script and any Electron APIs being used. This option uses the same technique used by . You can access this context in the dev tools by selecting the 'Electron Isolated Context' entry in the combo box at the top of the Console tab. This option is currently experimental and may change or be removed in future Electron releases.", + "description": "Whether to run Electron APIs and the specified preload script in a separate JavaScript context. Defaults to false. The context that the preload script runs in will still have full access to the document and window globals but it will use its own set of JavaScript builtins (Array, Object, JSON, etc.) and will be isolated from any changes made to the global environment by the loaded page. The Electron API will only be available in the preload script and not the loaded page. This option should be used when loading potentially untrusted remote content to ensure the loaded content cannot tamper with the preload script and any Electron APIs being used. This option uses the same technique used by . You can access this context in the dev tools by selecting the 'Electron Isolated Context' entry in the combo box at the top of the Console tab.", "required": false }, { "name": "nativeWindowOpen", "type": "Boolean", "collection": false, - "description": "Whether to use native window.open(). Defaults to false. This option is currently experimental.", + "description": "Whether to use native window.open(). Defaults to false. Child windows will always have node integration disabled. This option is currently experimental.", "required": false }, { "name": "webviewTag", "type": "Boolean", "collection": false, - "description": "Whether to enable the . Defaults to the value of the nodeIntegration option. The preload script configured for the will have node integration enabled when it is executed so you should ensure remote/untrusted content is not able to create a tag with a possibly malicious preload script. You can use the will-attach-webview event on to strip away the preload script and to validate or alter the 's initial settings.", + "description": "Whether to enable the . Defaults to false. The preload script configured for the will have node integration enabled when it is executed so you should ensure remote/untrusted content is not able to create a tag with a possibly malicious preload script. You can use the will-attach-webview event on to strip away the preload script and to validate or alter the 's initial settings.", "required": false }, { - "name": "additionArguments", + "name": "additionalArguments", "type": "String", "collection": true, "description": "A list of strings that will be appended to process.argv in the renderer process of this app. Useful for passing small bits of data down to renderer process preload scripts.", "required": false + }, + { + "name": "safeDialogs", + "type": "Boolean", + "collection": false, + "description": "Whether to enable browser style consecutive dialog protection. Default is false.", + "required": false + }, + { + "name": "safeDialogsMessage", + "type": "String", + "collection": false, + "description": "The message to display when consecutive dialog protection is triggered. If not defined the default message would be used, note that currently the default message is in English and not localized.", + "required": false + }, + { + "name": "navigateOnDragDrop", + "type": "Boolean", + "collection": false, + "description": "Whether dragging and dropping a file or link onto the page causes a navigation. Default is false.", + "required": false + }, + { + "name": "autoplayPolicy", + "type": "String", + "collection": false, + "description": "Autoplay policy to apply to content in the window, can be no-user-gesture-required, user-gesture-required, document-user-activation-required. Defaults to no-user-gesture-required.", + "required": false, + "possibleValues": [ + { + "value": "no-user-gesture-required" + }, + { + "value": "user-gesture-required" + }, + { + "value": "document-user-activation-required" + } + ] } ] } @@ -3139,13 +3520,22 @@ "description": "Whether the window is in simple (pre-Lion) fullscreen mode." } }, + { + "name": "isNormal", + "signature": "()", + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the window is in normal state (not maximized, not minimized, not in fullscreen mode)." + } + }, { "name": "setAspectRatio", "signature": "(aspectRatio[, extraSize])", "platforms": [ "macOS" ], - "description": "This will make a window maintain an aspect ratio. The extra size allows a developer to have space, specified in pixels, not included within the aspect ratio calculations. This API already takes into account the difference between a window's size and its content size. Consider a normal window with an HD video player and associated controls. Perhaps there are 15 pixels of controls on the left edge, 25 pixels of controls on the right edge and 50 pixels of controls below the player. In order to maintain a 16:9 aspect ratio (standard aspect ratio for HD @1920x1080) within the player itself we would call this function with arguments of 16/9 and [ 40, 50 ]. The second argument doesn't care where the extra width and height are within the content view--only that they exist. Just sum any extra width and height areas you have within the overall content view.", + "description": "This will make a window maintain an aspect ratio. The extra size allows a developer to have space, specified in pixels, not included within the aspect ratio calculations. This API already takes into account the difference between a window's size and its content size. Consider a normal window with an HD video player and associated controls. Perhaps there are 15 pixels of controls on the left edge, 25 pixels of controls on the right edge and 50 pixels of controls below the player. In order to maintain a 16:9 aspect ratio (standard aspect ratio for HD @1920x1080) within the player itself we would call this function with arguments of 16/9 and [ 40, 50 ]. The second argument doesn't care where the extra width and height are within the content view--only that they exist. Sum any extra width and height areas you have within the overall content view. Calling this function with a value of 0 will remove any previously set aspect ratios.", "parameters": [ { "name": "aspectRatio", @@ -3163,6 +3553,20 @@ } ] }, + { + "name": "setBackgroundColor", + "signature": "(backgroundColor)", + "description": "Sets the background color of the window. See Setting backgroundColor.", + "parameters": [ + { + "name": "backgroundColor", + "type": "String", + "collection": false, + "description": "Window's background color as a hexadecimal value, like `#66CD00` or `#FFF` or `#80FFFFFF` (alpha is supported if `transparent` is `true`). Default is `#FFF` (white).", + "required": true + } + ] + }, { "name": "previewFile", "signature": "(path[, displayName])", @@ -3198,7 +3602,7 @@ { "name": "setBounds", "signature": "(bounds[, animate])", - "description": "Resizes and moves the window to the supplied bounds", + "description": "Resizes and moves the window to the supplied bounds. Any properties that are not supplied will default to their current values.", "parameters": [ { "name": "bounds", @@ -3249,6 +3653,16 @@ "collection": false } }, + { + "name": "getNormalBounds", + "signature": "()", + "description": "Note: whatever the current state of the window : maximized, minimized or in fullscreen, this function always returns the position and size of the window in normal state. In normal state, getBounds and getNormalBounds returns the same Rectangle.", + "returns": { + "type": "Rectangle", + "collection": false, + "description": "Contains the window bounds of the normal state" + } + }, { "name": "setEnabled", "signature": "(enable)", @@ -3265,7 +3679,7 @@ { "name": "setSize", "signature": "(width, height[, animate])", - "description": "Resizes the window to width and height.", + "description": "Resizes the window to width and height. If width or height are below any set minimum size constraints the window will snap to its minimum size.", "parameters": [ { "name": "width", @@ -3616,6 +4030,15 @@ "description": "Whether the window is always on top of other windows." } }, + { + "name": "moveTop", + "signature": "()", + "platforms": [ + "macOS", + "Windows" + ], + "description": "Moves window to top(z-order) regardless of focus" + }, { "name": "center", "signature": "()", @@ -3671,7 +4094,7 @@ { "name": "getTitle", "signature": "()", - "description": "Note: The title of web page can be different from the title of the native window.", + "description": "Note: The title of the web page can be different from the title of the native window.", "returns": { "type": "String", "collection": false, @@ -3891,7 +4314,7 @@ { "name": "capturePage", "signature": "([rect, ]callback)", - "description": "Same as webContents.capturePage([rect, ]callback).", + "description": "Captures a snapshot of the page within rect. Upon completion callback will be called with callback(image). The image is an instance of NativeImage that stores data of the snapshot. Omitting rect will capture the whole visible page. Deprecated Soon", "parameters": [ { "name": "rect", @@ -3917,6 +4340,20 @@ } ] }, + { + "name": "capturePage", + "signature": "([rect])", + "description": "Captures a snapshot of the page within rect. Omitting rect will capture the whole visible page.", + "parameters": [ + { + "name": "rect", + "type": "Rectangle", + "collection": false, + "description": "The bounds to capture", + "required": false + } + ] + }, { "name": "loadURL", "signature": "(url[, options])", @@ -3936,9 +4373,18 @@ "properties": [ { "name": "httpReferrer", - "type": "String", + "type": [ + { + "typeName": "String", + "collection": false + }, + { + "typeName": "Referrer", + "collection": false + } + ], "collection": false, - "description": "A HTTP Referrer url.", + "description": "An HTTP Referrer url.", "required": false }, { @@ -3966,10 +4412,6 @@ "typeName": "UploadFile", "collection": true }, - { - "typeName": "UploadFileSystem", - "collection": true - }, { "typeName": "UploadBlob", "collection": true @@ -3988,11 +4430,17 @@ } ] } - ] + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "void", + "description": "the promise will resolve when the page has finished loading (see did-finish-load), and rejects if the page fails to load (see did-fail-load)." + } }, { "name": "loadFile", - "signature": "(filePath)", + "signature": "(filePath[, options])", "description": "Same as webContents.loadFile, filePath should be a path to an HTML file relative to the root of your application. See the webContents docs for more information.", "parameters": [ { @@ -4000,8 +4448,44 @@ "type": "String", "collection": false, "required": true + }, + { + "name": "options", + "type": "Object", + "collection": false, + "required": false, + "properties": [ + { + "name": "query", + "type": "Object", + "collection": false, + "description": "Passed to url.format().", + "required": false, + "properties": [] + }, + { + "name": "search", + "type": "String", + "collection": false, + "description": "Passed to url.format().", + "required": false + }, + { + "name": "hash", + "type": "String", + "collection": false, + "description": "Passed to url.format().", + "required": false + } + ] } - ] + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "void", + "description": "the promise will resolve when the page has finished loading (see did-finish-load), and rejects if the page fails to load (see did-fail-load)." + } }, { "name": "reload", @@ -4015,7 +4499,7 @@ "Linux", "Windows" ], - "description": "Sets the menu as the window's menu bar, setting it to null will remove the menu bar.", + "description": "Sets the menu as the window's menu bar.", "parameters": [ { "name": "menu", @@ -4034,6 +4518,15 @@ } ] }, + { + "name": "removeMenu", + "signature": "()", + "platforms": [ + "Linux", + "Windows" + ], + "description": "Remove the window's menu bar." + }, { "name": "setProgressBar", "signature": "(progress[, options])", @@ -4089,7 +4582,16 @@ "parameters": [ { "name": "overlay", - "type": "NativeImage", + "type": [ + { + "typeName": "NativeImage", + "collection": false + }, + { + "typeName": "null", + "collection": false + } + ], "collection": false, "description": "the icon to display on the bottom right corner of the taskbar icon. If this parameter is `null`, the overlay is cleared", "required": true @@ -4163,6 +4665,25 @@ "description": "between 0.0 (fully transparent) and 1.0 (fully opaque)" } }, + { + "name": "setShape", + "signature": "(rects)", + "platforms": [ + "Windows", + "Linux", + "Experimental" + ], + "description": "Setting a window shape determines the area within the window where the system permits drawing and user interaction. Outside of the given region, no pixels will be drawn and no mouse events will be registered. Mouse events outside of the region will not be received by that window, but will fall through to whatever is behind the window.", + "parameters": [ + { + "name": "rects", + "type": "Rectangle", + "collection": true, + "description": "Sets a shape on the window. Passing an empty list reverts the window to being rectangular.", + "required": true + } + ] + }, { "name": "setThumbarButtons", "signature": "(buttons)", @@ -4190,7 +4711,7 @@ "platforms": [ "Windows" ], - "description": "Sets the region of the window to show as the thumbnail image displayed when hovering over the window in the taskbar. You can reset the thumbnail to be the entire window by specifying an empty region: {x: 0, y: 0, width: 0, height: 0}.", + "description": "Sets the region of the window to show as the thumbnail image displayed when hovering over the window in the taskbar. You can reset the thumbnail to be the entire window by specifying an empty region: { x: 0, y: 0, width: 0, height: 0 }.", "parameters": [ { "name": "region", @@ -4295,6 +4816,22 @@ } ] }, + { + "name": "setWindowButtonVisibility", + "signature": "(visible)", + "platforms": [ + "macOS" + ], + "description": "Sets whether the window traffic light buttons should be visible. This cannot be called when titleBarStyle is set to customButtonsOnHover.", + "parameters": [ + { + "name": "visible", + "type": "Boolean", + "collection": false, + "required": true + } + ] + }, { "name": "setAutoHideMenuBar", "signature": "(hide)", @@ -4345,7 +4882,7 @@ }, { "name": "setVisibleOnAllWorkspaces", - "signature": "(visible)", + "signature": "(visible[, options])", "description": "Sets whether the window should be visible on all workspaces. Note: This API does nothing on Windows.", "parameters": [ { @@ -4353,6 +4890,21 @@ "type": "Boolean", "collection": false, "required": true + }, + { + "name": "options", + "type": "Object", + "collection": false, + "required": false, + "properties": [ + { + "name": "visibleOnFullScreen", + "type": "Boolean", + "collection": false, + "description": "Sets whether the window should be visible above fullscreen windows", + "required": false + } + ] } ] }, @@ -4430,10 +4982,6 @@ { "name": "setParentWindow", "signature": "(parent)", - "platforms": [ - "Linux", - "macOS" - ], "description": "Sets parent as current window's parent window, passing null will turn current window into a top-level window.", "parameters": [ { @@ -4611,6 +5159,7 @@ "name": "browserView", "type": "BrowserView", "collection": false, + "description": ". Attach browserView to win. If there is some other browserViews was attached they will be removed from this window.", "required": true } ] @@ -4621,7 +5170,6 @@ "platforms": [ "Experimental" ], - "description": "Note: The BrowserView API is currently experimental and may change or be removed in future Electron releases.", "returns": { "type": [ { @@ -4634,8 +5182,47 @@ } ], "collection": false, - "description": "an attached BrowserView. Returns null if none is attached." + "description": "an BrowserView what is attached. Returns null if none is attached. Throw error if multiple BrowserViews is attached." } + }, + { + "name": "addBrowserView", + "signature": "(browserView)", + "platforms": [ + "Experimental" + ], + "description": "Replacement API for setBrowserView supporting work with multi browser views.", + "parameters": [ + { + "name": "browserView", + "type": "BrowserView", + "collection": false, + "required": true + } + ] + }, + { + "name": "removeBrowserView", + "signature": "(browserView)", + "platforms": [ + "Experimental" + ], + "parameters": [ + { + "name": "browserView", + "type": "BrowserView", + "collection": false, + "required": true + } + ] + }, + { + "name": "getBrowserViews", + "signature": "()", + "platforms": [ + "Experimental" + ], + "description": "Returns array of BrowserView what was an attached with addBrowserView or setBrowserView. Note: The BrowserView API is currently experimental and may change or be removed in future Electron releases." } ], "instanceProperties": [ @@ -4673,7 +5260,7 @@ }, { "name": "close", - "description": "Emitted when the window is going to be closed. It's emitted before the beforeunload and unload event of the DOM. Calling event.preventDefault() will cancel the close. Usually you would want to use the beforeunload handler to decide whether the window should be closed, which will also be called when the window is reloaded. In Electron, returning any value other than undefined would cancel the close. For example: Note: There is a subtle difference between the behaviors of window.onbeforeunload = handler and window.addEventListener('beforeunload', handler). It is recommended to always set the event.returnValue explicitly, instead of just returning a value, as the former works more consistently within Electron.", + "description": "Emitted when the window is going to be closed. It's emitted before the beforeunload and unload event of the DOM. Calling event.preventDefault() will cancel the close. Usually you would want to use the beforeunload handler to decide whether the window should be closed, which will also be called when the window is reloaded. In Electron, returning any value other than undefined would cancel the close. For example: Note: There is a subtle difference between the behaviors of window.onbeforeunload = handler and window.addEventListener('beforeunload', handler). It is recommended to always set the event.returnValue explicitly, instead of only returning a value, as the former works more consistently within Electron.", "returns": [ { "name": "event", @@ -4738,13 +5325,58 @@ "name": "restore", "description": "Emitted when the window is restored from a minimized state." }, + { + "name": "will-resize", + "description": "Emitted before the window is resized. Calling event.preventDefault() will prevent the window from being resized. Note that this is only emitted when the window is being resized manually. Resizing the window with setBounds/setSize will not emit this event.", + "platforms": [ + "macOS", + "Windows" + ], + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "newBounds", + "type": "Rectangle", + "collection": false, + "description": "` Size the window is being resized to.", + "required": true + } + ] + }, { "name": "resize", - "description": "Emitted when the window is being resized." + "description": "Emitted after the window has been resized." + }, + { + "name": "will-move", + "description": "Emitted before the window is moved. Calling event.preventDefault() will prevent the window from being moved. Note that this is only emitted when the window is being resized manually. Resizing the window with setBounds/setSize will not emit this event.", + "platforms": [ + "Windows" + ], + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "newBounds", + "type": "Rectangle", + "collection": false, + "description": "` Location the window is being moved to.", + "required": true + } + ] }, { "name": "move", - "description": "Emitted when the window is being moved to a new position. Note: On macOS this event is just an alias of moved." + "description": "Emitted when the window is being moved to a new position. Note: On macOS this event is an alias of moved." }, { "name": "moved", @@ -4770,10 +5402,32 @@ "description": "Emitted when the window leaves a full-screen state triggered by HTML API." }, { - "name": "app-command", - "description": "Emitted when an App Command is invoked. These are typically related to keyboard media keys or browser commands, as well as the \"Back\" button built into some mice on Windows. Commands are lowercased, underscores are replaced with hyphens, and the APPCOMMAND_ prefix is stripped off. e.g. APPCOMMAND_BROWSER_BACKWARD is emitted as browser-backward.", + "name": "always-on-top-changed", + "description": "Emitted when the window is set or unset to show always on top of other windows.", "platforms": [ - "Windows" + "macOS" + ], + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "isAlwaysOnTop", + "type": "Boolean", + "collection": false, + "required": true + } + ] + }, + { + "name": "app-command", + "description": "Emitted when an App Command is invoked. These are typically related to keyboard media keys or browser commands, as well as the \"Back\" button built into some mice on Windows. Commands are lowercased, underscores are replaced with hyphens, and the APPCOMMAND_ prefix is stripped off. e.g. APPCOMMAND_BROWSER_BACKWARD is emitted as browser-backward. The following app commands are explictly supported on Linux:", + "platforms": [ + "Windows", + "Linux" ], "returns": [ { @@ -4862,11 +5516,11 @@ "main": false, "renderer": true }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "browser-window-proxy", - "websiteUrl": "http://electron.atom.io/docs/api/browser-window-proxy", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/browser-window-proxy.md", + "websiteUrl": "http://electronjs.org/docs/api/browser-window-proxy", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/browser-window-proxy.md", "instanceName": "win", "instanceMethods": [ { @@ -4933,11 +5587,11 @@ }, { "name": "Certificate", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "certificate", - "websiteUrl": "http://electron.atom.io/docs/api/structures/certificate", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/certificate.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/certificate", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/certificate.md", "properties": [ { "name": "data", @@ -5013,52 +5667,52 @@ }, { "name": "CertificatePrincipal", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "certificate-principal", - "websiteUrl": "http://electron.atom.io/docs/api/structures/certificate-principal", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/certificate-principal.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/certificate-principal", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/certificate-principal.md", "properties": [ { "name": "commonName", "type": "String", "collection": false, - "description": "Common Name", + "description": "Common Name.", "required": true }, { "name": "organizations", "type": "String", "collection": true, - "description": "Organization names", + "description": "Organization names.", "required": true }, { "name": "organizationUnits", "type": "String", "collection": true, - "description": "Organization Unit names", + "description": "Organization Unit names.", "required": true }, { "name": "locality", "type": "String", "collection": false, - "description": "Locality", + "description": "Locality.", "required": true }, { "name": "state", "type": "String", "collection": false, - "description": "State or province", + "description": "State or province.", "required": true }, { "name": "country", "type": "String", "collection": false, - "description": "Country or region", + "description": "Country or region.", "required": true } ] @@ -5070,11 +5724,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "client-request", - "websiteUrl": "http://electron.atom.io/docs/api/client-request", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/client-request.md", + "websiteUrl": "http://electronjs.org/docs/api/client-request", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/client-request.md", "constructorMethod": { "signature": "(options)", "parameters": [ @@ -5355,6 +6009,45 @@ "name": "followRedirect", "signature": "()", "description": "Continues any deferred redirection request when the redirection mode is manual." + }, + { + "name": "getUploadProgress", + "signature": "()", + "description": "You can use this method in conjunction with POST requests to get the progress of a file upload or other data transfer.", + "returns": { + "type": "Object", + "collection": false, + "properties": [ + { + "name": "active", + "type": "Boolean", + "collection": false, + "description": "Whether the request is currently active. If this is false no other properties will be set", + "required": true + }, + { + "name": "started", + "type": "Boolean", + "collection": false, + "description": "Whether the upload has started. If this is false both current and total will be set to 0.", + "required": true + }, + { + "name": "current", + "type": "Integer", + "collection": false, + "description": "The number of bytes that have been uploaded so far", + "required": true + }, + { + "name": "total", + "type": "Integer", + "collection": false, + "description": "The number of bytes that will be uploaded this request", + "required": true + } + ] + } } ], "instanceProperties": [ @@ -5513,11 +6206,11 @@ "main": true, "renderer": true }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "clipboard", - "websiteUrl": "http://electron.atom.io/docs/api/clipboard", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/clipboard.md", + "websiteUrl": "http://electronjs.org/docs/api/clipboard", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/clipboard.md", "methods": [ { "name": "readText", @@ -5938,16 +6631,16 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "content-tracing", - "websiteUrl": "http://electron.atom.io/docs/api/content-tracing", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/content-tracing.md", + "websiteUrl": "http://electronjs.org/docs/api/content-tracing", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/content-tracing.md", "methods": [ { "name": "getCategories", "signature": "(callback)", - "description": "Get a set of category groups. The category groups can change as new code paths are reached. Once all child processes have acknowledged the getCategories request the callback is invoked with an array of category groups.", + "description": "Get a set of category groups. The category groups can change as new code paths are reached. Once all child processes have acknowledged the getCategories request the callback is invoked with an array of category groups. Deprecated Soon", "parameters": [ { "name": "callback", @@ -5966,32 +6659,36 @@ } ] }, + { + "name": "getCategories", + "signature": "()", + "description": "Get a set of category groups. The category groups can change as new code paths are reached.", + "returns": { + "type": "Promise", + "collection": false, + "innerType": "String", + "description": "resolves with an array of category groups once all child processes have acknowledged the getCategories request" + } + }, { "name": "startRecording", "signature": "(options, callback)", - "description": "Start recording on all processes. Recording begins immediately locally and asynchronously on child processes as soon as they receive the EnableRecording request. The callback will be called once all child processes have acknowledged the startRecording request. categoryFilter is a filter to control what category groups should be traced. A filter can have an optional - prefix to exclude category groups that contain a matching category. Having both included and excluded category patterns in the same list is not supported. Examples: traceOptions controls what kind of tracing is enabled, it is a comma-delimited list. Possible options are: The first 3 options are trace recording modes and hence mutually exclusive. If more than one trace recording modes appear in the traceOptions string, the last one takes precedence. If none of the trace recording modes are specified, recording mode is record-until-full. The trace option will first be reset to the default option (record_mode set to record-until-full, enable_sampling and enable_systrace set to false) before options parsed from traceOptions are applied on it.", + "description": "Start recording on all processes. Recording begins immediately locally and asynchronously on child processes as soon as they receive the EnableRecording request. The callback will be called once all child processes have acknowledged the startRecording request. Deprecated Soon", "parameters": [ { "name": "options", - "type": "Object", - "collection": false, - "required": true, - "properties": [ + "type": [ { - "name": "categoryFilter", - "type": "String", - "collection": false, - "description": "", - "required": true + "typeName": "TraceCategoriesAndOptions", + "collection": false }, { - "name": "traceOptions", - "type": "String", - "collection": false, - "description": "", - "required": true + "typeName": "TraceConfig", + "collection": false } - ] + ], + "collection": false, + "required": true }, { "name": "callback", @@ -6001,109 +6698,80 @@ } ] }, + { + "name": "startRecording", + "signature": "(options)", + "description": "Start recording on all processes. Recording begins immediately locally and asynchronously on child processes as soon as they receive the EnableRecording request.", + "parameters": [ + { + "name": "options", + "type": [ + { + "typeName": "TraceCategoriesAndOptions", + "collection": false + }, + { + "typeName": "TraceConfig", + "collection": false + } + ], + "collection": false, + "required": true + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "void", + "description": "resolved once all child processes have acknowledged the startRecording request." + } + }, + { + "name": "stopRecording", + "signature": "(resultFilePath, callback)", + "description": "Stop recording on all processes. Child processes typically cache trace data and only rarely flush and send trace data back to the main process. This helps to minimize the runtime overhead of tracing since sending trace data over IPC can be an expensive operation. So, to end tracing, we must asynchronously ask all child processes to flush any pending trace data. Once all child processes have acknowledged the stopRecording request, callback will be called with a file that contains the traced data. Trace data will be written into resultFilePath if it is not empty or into a temporary file. The actual file path will be passed to callback if it's not null. Deprecated Soon", + "parameters": [ + { + "name": "resultFilePath", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "resultFilePath", + "type": "String", + "collection": false, + "description": "", + "required": true + } + ] + } + ] + }, { "name": "stopRecording", - "signature": "(resultFilePath, callback)", - "description": "Stop recording on all processes. Child processes typically cache trace data and only rarely flush and send trace data back to the main process. This helps to minimize the runtime overhead of tracing since sending trace data over IPC can be an expensive operation. So, to end tracing, we must asynchronously ask all child processes to flush any pending trace data. Once all child processes have acknowledged the stopRecording request, callback will be called with a file that contains the traced data. Trace data will be written into resultFilePath if it is not empty or into a temporary file. The actual file path will be passed to callback if it's not null.", + "signature": "(resultFilePath)", + "description": "Stop recording on all processes. Child processes typically cache trace data and only rarely flush and send trace data back to the main process. This helps to minimize the runtime overhead of tracing since sending trace data over IPC can be an expensive operation. So, to end tracing, we must asynchronously ask all child processes to flush any pending trace data. Trace data will be written into resultFilePath if it is not empty or into a temporary file.", "parameters": [ { "name": "resultFilePath", "type": "String", "collection": false, "required": true - }, - { - "name": "callback", - "type": "Function", - "collection": false, - "required": true, - "parameters": [ - { - "name": "resultFilePath", - "type": "String", - "collection": false, - "description": "", - "required": true - } - ] } - ] - }, - { - "name": "startMonitoring", - "signature": "(options, callback)", - "description": "Start monitoring on all processes. Monitoring begins immediately locally and asynchronously on child processes as soon as they receive the startMonitoring request. Once all child processes have acknowledged the startMonitoring request the callback will be called.", - "parameters": [ - { - "name": "options", - "type": "Object", - "collection": false, - "required": true, - "properties": [ - { - "name": "categoryFilter", - "type": "String", - "collection": false, - "description": "", - "required": true - }, - { - "name": "traceOptions", - "type": "String", - "collection": false, - "description": "", - "required": true - } - ] - }, - { - "name": "callback", - "type": "Function", - "collection": false, - "required": true - } - ] - }, - { - "name": "stopMonitoring", - "signature": "(callback)", - "description": "Stop monitoring on all processes. Once all child processes have acknowledged the stopMonitoring request the callback is called.", - "parameters": [ - { - "name": "callback", - "type": "Function", - "collection": false, - "required": true - } - ] - }, - { - "name": "captureMonitoringSnapshot", - "signature": "(resultFilePath, callback)", - "description": "Get the current monitoring traced data. Child processes typically cache trace data and only rarely flush and send trace data back to the main process. This is because it may be an expensive operation to send the trace data over IPC and we would like to avoid unneeded runtime overhead from tracing. So, to end tracing, we must asynchronously ask all child processes to flush any pending trace data. Once all child processes have acknowledged the captureMonitoringSnapshot request the callback will be called with a file that contains the traced data.", - "parameters": [ - { - "name": "resultFilePath", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "callback", - "type": "Function", - "collection": false, - "required": true, - "parameters": [ - { - "name": "resultFilePath", - "type": "String", - "collection": false, - "description": "", - "required": true - } - ] - } - ] + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "String", + "description": "resolves with a file that contains the traced data once all child processes have acknowledged the stopRecording request" + } }, { "name": "getTraceBufferUsage", @@ -6138,11 +6806,11 @@ }, { "name": "Cookie", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "cookie", - "websiteUrl": "http://electron.atom.io/docs/api/structures/cookie", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/cookie.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/cookie", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/cookie.md", "properties": [ { "name": "name", @@ -6216,17 +6884,80 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "cookies", - "websiteUrl": "http://electron.atom.io/docs/api/cookies", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/cookies.md", + "websiteUrl": "http://electronjs.org/docs/api/cookies", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/cookies.md", "instanceName": "cookies", "instanceMethods": [ + { + "name": "get", + "signature": "(filter)", + "description": "Sends a request to get all cookies matching filter, and resolves a promise with the response.", + "parameters": [ + { + "name": "filter", + "type": "Object", + "collection": false, + "required": true, + "properties": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "Retrieves cookies which are associated with url. Empty implies retrieving cookies of all urls.", + "required": false + }, + { + "name": "name", + "type": "String", + "collection": false, + "description": "Filters cookies by name.", + "required": false + }, + { + "name": "domain", + "type": "String", + "collection": false, + "description": "Retrieves cookies whose domains match or are subdomains of domains.", + "required": false + }, + { + "name": "path", + "type": "String", + "collection": false, + "description": "Retrieves cookies whose path matches path.", + "required": false + }, + { + "name": "secure", + "type": "Boolean", + "collection": false, + "description": "Filters cookies by their Secure property.", + "required": false + }, + { + "name": "session", + "type": "Boolean", + "collection": false, + "description": "Filters out session or persistent cookies.", + "required": false + } + ] + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "Cookie", + "description": "A promise which resolves an array of cookie objects." + } + }, { "name": "get", "signature": "(filter, callback)", - "description": "Sends a request to get all cookies matching filter, callback will be called with callback(error, cookies) on complete.", + "description": "Sends a request to get all cookies matching filter, callback will be called with callback(error, cookies) on complete. Deprecated Soon", "parameters": [ { "name": "filter", @@ -6302,10 +7033,87 @@ } ] }, + { + "name": "set", + "signature": "(details)", + "description": "Sets a cookie with details.", + "parameters": [ + { + "name": "details", + "type": "Object", + "collection": false, + "required": true, + "properties": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "The url to associate the cookie with.", + "required": true + }, + { + "name": "name", + "type": "String", + "collection": false, + "description": "The name of the cookie. Empty by default if omitted.", + "required": false + }, + { + "name": "value", + "type": "String", + "collection": false, + "description": "The value of the cookie. Empty by default if omitted.", + "required": false + }, + { + "name": "domain", + "type": "String", + "collection": false, + "description": "The domain of the cookie. Empty by default if omitted.", + "required": false + }, + { + "name": "path", + "type": "String", + "collection": false, + "description": "The path of the cookie. Empty by default if omitted.", + "required": false + }, + { + "name": "secure", + "type": "Boolean", + "collection": false, + "description": "Whether the cookie should be marked as Secure. Defaults to false.", + "required": false + }, + { + "name": "httpOnly", + "type": "Boolean", + "collection": false, + "description": "Whether the cookie should be marked as HTTP only. Defaults to false.", + "required": false + }, + { + "name": "expirationDate", + "type": "Double", + "collection": false, + "description": "The expiration date of the cookie as the number of seconds since the UNIX epoch. If omitted then the cookie becomes a session cookie and will not be retained between sessions.", + "required": false + } + ] + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "void", + "description": "A promise which resolves when the cookie has been set" + } + }, { "name": "set", "signature": "(details, callback)", - "description": "Sets a cookie with details, callback will be called with callback(error) on complete.", + "description": "Sets a cookie with details, callback will be called with callback(error) on complete. Deprecated Soon", "parameters": [ { "name": "details", @@ -6388,10 +7196,37 @@ } ] }, + { + "name": "remove", + "signature": "(url, name)", + "description": "Removes the cookies matching url and name", + "parameters": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "The URL associated with the cookie.", + "required": true + }, + { + "name": "name", + "type": "String", + "collection": false, + "description": "The name of cookie to remove.", + "required": true + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "void", + "description": "A promise which resolves when the cookie has been removed" + } + }, { "name": "remove", "signature": "(url, name, callback)", - "description": "Removes the cookies matching url and name, callback will called with callback() on complete.", + "description": "Removes the cookies matching url and name, callback will called with callback() on complete. Deprecated Soon", "parameters": [ { "name": "url", @@ -6417,8 +7252,19 @@ }, { "name": "flushStore", - "signature": "(callback)", + "signature": "()", "description": "Writes any unwritten cookies data to disk.", + "returns": { + "type": "Promise", + "collection": false, + "innerType": "void", + "description": "A promise which resolves when the cookie store has been flushed" + } + }, + { + "name": "flushStore", + "signature": "(callback)", + "description": "Writes any unwritten cookies data to disk. Deprecated Soon", "parameters": [ { "name": "callback", @@ -6489,11 +7335,11 @@ }, { "name": "CPUUsage", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "cpu-usage", - "websiteUrl": "http://electron.atom.io/docs/api/structures/cpu-usage", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/cpu-usage.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/cpu-usage", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/cpu-usage.md", "properties": [ { "name": "percentCPUUsage", @@ -6513,11 +7359,11 @@ }, { "name": "CrashReport", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "crash-report", - "websiteUrl": "http://electron.atom.io/docs/api/structures/crash-report", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/crash-report.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/crash-report", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/crash-report.md", "properties": [ { "name": "date", @@ -6542,11 +7388,11 @@ "main": true, "renderer": true }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "crash-reporter", - "websiteUrl": "http://electron.atom.io/docs/api/crash-reporter", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/crash-reporter.md", + "websiteUrl": "http://electronjs.org/docs/api/crash-reporter", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/crash-reporter.md", "methods": [ { "name": "start", @@ -6564,7 +7410,7 @@ "type": "String", "collection": false, "description": "", - "required": false + "required": true }, { "name": "submitURL", @@ -6711,6 +7557,74 @@ } ] }, + { + "name": "CustomScheme", + "version": "5.0.0-beta.3", + "type": "Structure", + "slug": "custom-scheme", + "websiteUrl": "http://electronjs.org/docs/api/structures/custom-scheme", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/custom-scheme.md", + "properties": [ + { + "name": "scheme", + "type": "String", + "collection": false, + "description": "Custom schemes to be registered with options.", + "required": true + }, + { + "name": "privileges", + "type": "Object", + "collection": false, + "description": "", + "required": false, + "properties": [ + { + "name": "standard", + "type": "Boolean", + "collection": false, + "description": "Default false.", + "required": false + }, + { + "name": "secure", + "type": "Boolean", + "collection": false, + "description": "Default false.", + "required": false + }, + { + "name": "bypassCSP", + "type": "Boolean", + "collection": false, + "description": "Default false.", + "required": false + }, + { + "name": "allowServiceWorkers", + "type": "Boolean", + "collection": false, + "description": "Default false.", + "required": false + }, + { + "name": "supportFetchAPI", + "type": "Boolean", + "collection": false, + "description": "Default false.", + "required": false + }, + { + "name": "corsEnabled", + "type": "Boolean", + "collection": false, + "description": "Default false.", + "required": false + } + ] + } + ] + }, { "name": "Debugger", "description": "An alternate transport for Chrome's remote debugging protocol.", @@ -6718,11 +7632,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "debugger", - "websiteUrl": "http://electron.atom.io/docs/api/debugger", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/debugger.md", + "websiteUrl": "http://electronjs.org/docs/api/debugger", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/debugger.md", "instanceName": "debugger", "instanceMethods": [ { @@ -6756,13 +7670,13 @@ { "name": "sendCommand", "signature": "(method[, commandParams, callback])", - "description": "Send given command to the debugging target.", + "description": "Send given command to the debugging target. Deprecated Soon", "parameters": [ { "name": "method", "type": "String", "collection": false, - "description": "Method name, should be one of the methods defined by the remote debugging protocol.", + "description": "Method name, should be one of the methods defined by the .", "required": true }, { @@ -6797,6 +7711,33 @@ ] } ] + }, + { + "name": "sendCommand", + "signature": "(method[, commandParams])", + "description": "Send given command to the debugging target.", + "parameters": [ + { + "name": "method", + "type": "String", + "collection": false, + "description": "Method name, should be one of the methods defined by the .", + "required": true + }, + { + "name": "commandParams", + "type": "Object", + "collection": false, + "description": "JSON object with request parameters.", + "required": false + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "any", + "description": "A promise that resolves with the response defined by the 'returns' attribute of the command description in the remote debugging protocol or is rejected indicating the failure of the command." + } } ], "instanceEvents": [ @@ -6854,16 +7795,16 @@ "main": false, "renderer": true }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "desktop-capturer", - "websiteUrl": "http://electron.atom.io/docs/api/desktop-capturer", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/desktop-capturer.md", + "websiteUrl": "http://electronjs.org/docs/api/desktop-capturer", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/desktop-capturer.md", "methods": [ { "name": "getSources", "signature": "(options, callback)", - "description": "Starts gathering information about all available desktop media sources, and calls callback(error, sources) when finished. sources is an array of DesktopCapturerSource objects, each DesktopCapturerSource represents a screen or an individual window that can be captured.", + "description": "Starts gathering information about all available desktop media sources, and calls callback(error, sources) when finished. sources is an array of DesktopCapturerSource objects, each DesktopCapturerSource represents a screen or an individual window that can be captured. Deprecated Soon", "parameters": [ { "name": "options", @@ -6884,6 +7825,13 @@ "collection": false, "description": "The size that the media source thumbnail should be scaled to. Default is 150 x 150.", "required": false + }, + { + "name": "fetchWindowIcons", + "type": "Boolean", + "collection": false, + "description": "Set to true to enable fetching window icons. The default value is false. When false the appIcon property of the sources return null. Same if a source has the type screen.", + "required": false } ] }, @@ -6910,16 +7858,57 @@ ] } ] + }, + { + "name": "getSources", + "signature": "(options)", + "parameters": [ + { + "name": "options", + "type": "Object", + "collection": false, + "required": true, + "properties": [ + { + "name": "types", + "type": "String", + "collection": true, + "description": "An array of Strings that lists the types of desktop sources to be captured, available types are screen and window.", + "required": true + }, + { + "name": "thumbnailSize", + "type": "Size", + "collection": false, + "description": "The size that the media source thumbnail should be scaled to. Default is 150 x 150.", + "required": false + }, + { + "name": "fetchWindowIcons", + "type": "Boolean", + "collection": false, + "description": "Set to true to enable fetching window icons. The default value is false. When false the appIcon property of the sources return null. Same if a source has the type screen.", + "required": false + } + ] + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "DesktopCapturerSource", + "description": "Resolves with an array of DesktopCapturerSource objects, each DesktopCapturerSource represents a screen or an individual window that can be captured." + } } ] }, { "name": "DesktopCapturerSource", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "desktop-capturer-source", - "websiteUrl": "http://electron.atom.io/docs/api/structures/desktop-capturer-source", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/desktop-capturer-source.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/desktop-capturer-source", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/desktop-capturer-source.md", "properties": [ { "name": "id", @@ -6932,7 +7921,7 @@ "name": "name", "type": "String", "collection": false, - "description": "A screen source will be named either Entire Screen or Screen , while the name of a window source will match the window title.", + "description": "A screen source will be named either Entire Screen or Screen , while the name of a window source will match the window title.", "required": true }, { @@ -6941,6 +7930,20 @@ "collection": false, "description": "A thumbnail image. There is no guarantee that the size of the thumbnail is the same as the thumbnailSize specified in the options passed to desktopCapturer.getSources. The actual size depends on the scale of the screen or window.", "required": true + }, + { + "name": "display_id", + "type": "String", + "collection": false, + "description": "A unique identifier that will correspond to the id of the matching returned by the . On some platforms, this is equivalent to the XX portion of the id field above and on others it will differ. It will be an empty string if not available.", + "required": true + }, + { + "name": "appIcon", + "type": "NativeImage", + "collection": false, + "description": "An icon image of the application that owns the window or null if the source has a type screen. The size of the icon is not known in advance and depends on what the the application provides.", + "required": true } ] }, @@ -6951,11 +7954,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "dialog", - "websiteUrl": "http://electron.atom.io/docs/api/dialog", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/dialog.md", + "websiteUrl": "http://electronjs.org/docs/api/dialog", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/dialog.md", "methods": [ { "name": "showOpenDialog", @@ -7069,15 +8072,15 @@ "name": "filePaths", "type": "String", "collection": true, - "description": "An array of file paths chosen by the user", - "required": true + "description": "An array of file paths chosen by the user. If the dialog is cancelled this will be undefined.", + "required": false }, { "name": "bookmarks", "type": "String", "collection": true, "description": "An array matching the filePaths array of base64 encoded strings which contains security scoped bookmark data. securityScopedBookmarks must be enabled for this to be populated.", - "required": true + "required": false } ] } @@ -7173,15 +8176,15 @@ "name": "filename", "type": "String", "collection": false, - "description": "", - "required": true + "description": "If the dialog is cancelled this will be undefined.", + "required": false }, { "name": "bookmark", "type": "String", "collection": false, "description": "Base64 encoded string which contains the security scoped bookmark data for the saved file. securityScopedBookmarks must be enabled for this to be present.", - "required": true + "required": false } ] } @@ -7276,7 +8279,7 @@ "name": "cancelId", "type": "Integer", "collection": false, - "description": "The index of the button to be used to cancel the dialog, via the Esc key. By default this is assigned to the first button with \"cancel\" or \"no\" as the label. If no such labeled buttons exist and this option is not set, 0 will be used as the return value or callback response. This option is ignored on Windows.", + "description": "The index of the button to be used to cancel the dialog, via the Esc key. By default this is assigned to the first button with \"cancel\" or \"no\" as the label. If no such labeled buttons exist and this option is not set, 0 will be used as the return value or callback response.", "required": false }, { @@ -7394,11 +8397,11 @@ }, { "name": "Display", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "display", - "websiteUrl": "http://electron.atom.io/docs/api/structures/display", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/display.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/display", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/display.md", "properties": [ { "name": "id", @@ -7476,11 +8479,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "download-item", - "websiteUrl": "http://electron.atom.io/docs/api/download-item", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/download-item.md", + "websiteUrl": "http://electronjs.org/docs/api/download-item", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/download-item.md", "instanceName": "downloadItem", "instanceMethods": [ { @@ -7506,6 +8509,29 @@ "description": "The save path of the download item. This will be either the path set via downloadItem.setSavePath(path) or the path selected from the shown save dialog." } }, + { + "name": "setSaveDialogOptions", + "signature": "(options)", + "description": "This API allows the user to set custom options for the save dialog that opens for the download item by default. The API is only available in session's will-download callback function.", + "parameters": [ + { + "name": "options", + "type": "SaveDialogOptions", + "collection": false, + "description": "Set the save file dialog options. This object has the same properties as the `options` parameter of .", + "required": true + } + ] + }, + { + "name": "getSaveDialogOptions", + "signature": "()", + "returns": { + "type": "SaveDialogOptions", + "collection": false, + "description": "Returns the object previously set by downloadItem.setSaveDialogOptions(options)." + } + }, { "name": "pause", "signature": "()", @@ -7727,11 +8753,11 @@ }, { "name": "FileFilter", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "file-filter", - "websiteUrl": "http://electron.atom.io/docs/api/structures/file-filter", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/file-filter.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/file-filter", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/file-filter.md", "properties": [ { "name": "name", @@ -7756,16 +8782,16 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "global-shortcut", - "websiteUrl": "http://electron.atom.io/docs/api/global-shortcut", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/global-shortcut.md", + "websiteUrl": "http://electronjs.org/docs/api/global-shortcut", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/global-shortcut.md", "methods": [ { "name": "register", "signature": "(accelerator, callback)", - "description": "Registers a global shortcut of accelerator. The callback is called when the registered shortcut is pressed by the user. When the accelerator is already taken by other applications, this call will silently fail. This behavior is intended by operating systems, since they don't want applications to fight for global shortcuts.", + "description": "Registers a global shortcut of accelerator. The callback is called when the registered shortcut is pressed by the user. When the accelerator is already taken by other applications, this call will silently fail. This behavior is intended by operating systems, since they don't want applications to fight for global shortcuts. The following accelerators will not be registered successfully on macOS 10.14 Mojave unless the app has been authorized as a trusted accessibility client:", "parameters": [ { "name": "accelerator", @@ -7781,6 +8807,26 @@ } ] }, + { + "name": "registerAll", + "signature": "(accelerators, callback)", + "description": "Registers a global shortcut of all accelerator items in accelerators. The callback is called when any of the registered shortcuts are pressed by the user. When a given accelerator is already taken by other applications, this call will silently fail. This behavior is intended by operating systems, since they don't want applications to fight for global shortcuts. The following accelerators will not be registered successfully on macOS 10.14 Mojave unless the app has been authorized as a trusted accessibility client:", + "parameters": [ + { + "name": "accelerators", + "type": "String", + "collection": true, + "description": "an array of s.", + "required": true + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "required": true + } + ] + }, { "name": "isRegistered", "signature": "(accelerator)", @@ -7821,101 +8867,101 @@ }, { "name": "GPUFeatureStatus", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "gpu-feature-status", - "websiteUrl": "http://electron.atom.io/docs/api/structures/gpu-feature-status", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/gpu-feature-status.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/gpu-feature-status", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/gpu-feature-status.md", "properties": [ { "name": "2d_canvas", "type": "String", "collection": false, - "description": "Canvas", + "description": "Canvas.", "required": true }, { "name": "flash_3d", "type": "String", "collection": false, - "description": "Flash", + "description": "Flash.", "required": true }, { "name": "flash_stage3d", "type": "String", "collection": false, - "description": "Flash Stage3D", + "description": "Flash Stage3D.", "required": true }, { "name": "flash_stage3d_baseline", "type": "String", "collection": false, - "description": "Flash Stage3D Baseline profile", + "description": "Flash Stage3D Baseline profile.", "required": true }, { "name": "gpu_compositing", "type": "String", "collection": false, - "description": "Compositing", + "description": "Compositing.", "required": true }, { "name": "multiple_raster_threads", "type": "String", "collection": false, - "description": "Multiple Raster Threads", + "description": "Multiple Raster Threads.", "required": true }, { "name": "native_gpu_memory_buffers", "type": "String", "collection": false, - "description": "Native GpuMemoryBuffers", + "description": "Native GpuMemoryBuffers.", "required": true }, { "name": "rasterization", "type": "String", "collection": false, - "description": "Rasterization", + "description": "Rasterization.", "required": true }, { "name": "video_decode", "type": "String", "collection": false, - "description": "Video Decode", + "description": "Video Decode.", "required": true }, { "name": "video_encode", "type": "String", "collection": false, - "description": "Video Encode", + "description": "Video Encode.", "required": true }, { "name": "vpx_decode", "type": "String", "collection": false, - "description": "VPx Video Decode", + "description": "VPx Video Decode.", "required": true }, { "name": "webgl", "type": "String", "collection": false, - "description": "WebGL", + "description": "WebGL.", "required": true }, { "name": "webgl2", "type": "String", "collection": false, - "description": "WebGL2", + "description": "WebGL2.", "required": true } ] @@ -7927,21 +8973,22 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "in-app-purchase", - "websiteUrl": "http://electron.atom.io/docs/api/in-app-purchase", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/in-app-purchase.md", + "websiteUrl": "http://electronjs.org/docs/api/in-app-purchase", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/in-app-purchase.md", "methods": [ { "name": "purchaseProduct", "signature": "(productID, quantity, callback)", + "description": "You should listen for the transactions-updated event as soon as possible and certainly before you call purchaseProduct.", "parameters": [ { "name": "productID", "type": "String", "collection": false, - "description": "The id of the product to purchase. (the id of `com.example.app.product1` is `product1`).", + "description": "The identifiers of the product to purchase. (The identifier of `com.example.app.product1` is `product1`).", "required": true }, { @@ -7955,7 +9002,7 @@ "name": "callback", "type": "Function", "collection": false, - "description": "The callback called when the payment is added to the PaymentQueue. (You should add a listener with `inAppPurchase.addTransactionsListener` to get the transaction status).", + "description": "The callback called when the payment is added to the PaymentQueue.", "required": false, "parameters": [ { @@ -7969,13 +9016,43 @@ } ] }, + { + "name": "getProducts", + "signature": "(productIDs, callback)", + "description": "Retrieves the product descriptions.", + "parameters": [ + { + "name": "productIDs", + "type": "String", + "collection": true, + "description": "The identifiers of the products to get.", + "required": true + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "description": "The callback called with the products or an empty array if the products don't exist.", + "required": true, + "parameters": [ + { + "name": "products", + "type": "Product", + "collection": true, + "description": "Array of objects", + "required": true + } + ] + } + ] + }, { "name": "canMakePayments", "signature": "()", "returns": { - "type": "true", + "type": "Boolean", "collection": false, - "description": "if the user can make a payment and false otherwise." + "description": ", whether a user can make a payment." } }, { @@ -7986,6 +9063,25 @@ "collection": false, "description": ", the path to the receipt." } + }, + { + "name": "finishAllTransactions", + "signature": "()", + "description": "Completes all pending transactions." + }, + { + "name": "finishTransactionByDate", + "signature": "(date)", + "description": "Completes the pending transactions corresponding to the date.", + "parameters": [ + { + "name": "date", + "type": "String", + "collection": false, + "description": "The ISO formatted date of the transaction to finish.", + "required": true + } + ] } ], "events": [ @@ -8003,7 +9099,7 @@ "name": "transactions", "type": "Transaction", "collection": true, - "description": "Array of transactions.", + "description": "Array of objects.", "required": true } ] @@ -8017,11 +9113,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "incoming-message", - "websiteUrl": "http://electron.atom.io/docs/api/incoming-message", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/incoming-message.md", + "websiteUrl": "http://electronjs.org/docs/api/incoming-message", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/incoming-message.md", "instanceName": "response", "instanceProperties": [ { @@ -8091,11 +9187,11 @@ }, { "name": "IOCounters", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "io-counters", - "websiteUrl": "http://electron.atom.io/docs/api/structures/io-counters", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/io-counters.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/io-counters", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/io-counters.md", "properties": [ { "name": "readOperationCount", @@ -8148,11 +9244,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "ipc-main", - "websiteUrl": "http://electron.atom.io/docs/api/ipc-main", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/ipc-main.md", + "websiteUrl": "http://electronjs.org/docs/api/ipc-main", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/ipc-main.md", "methods": [ { "name": "on", @@ -8233,11 +9329,11 @@ "main": false, "renderer": true }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "ipc-renderer", - "websiteUrl": "http://electron.atom.io/docs/api/ipc-renderer", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/ipc-renderer.md", + "websiteUrl": "http://electronjs.org/docs/api/ipc-renderer", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/ipc-renderer.md", "methods": [ { "name": "on", @@ -8354,11 +9450,11 @@ }, { "name": "sendTo", - "signature": "(windowId, channel, [, arg1][, arg2][, ...])", - "description": "Sends a message to a window with windowid via channel.", + "signature": "(webContentsId, channel, [, arg1][, arg2][, ...])", + "description": "Sends a message to a window with webContentsId via channel.", "parameters": [ { - "name": "windowId", + "name": "webContentsId", "type": "Number", "collection": false, "required": true @@ -8400,11 +9496,11 @@ }, { "name": "JumpListCategory", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "jump-list-category", - "websiteUrl": "http://electron.atom.io/docs/api/structures/jump-list-category", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/jump-list-category.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/jump-list-category", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/jump-list-category.md", "properties": [ { "name": "type", @@ -8449,11 +9545,11 @@ }, { "name": "JumpListItem", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "jump-list-item", - "websiteUrl": "http://electron.atom.io/docs/api/structures/jump-list-item", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/jump-list-item.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/jump-list-item", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/jump-list-item.md", "properties": [ { "name": "type", @@ -8529,11 +9625,11 @@ }, { "name": "MemoryInfo", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "memory-info", - "websiteUrl": "http://electron.atom.io/docs/api/structures/memory-info", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/memory-info.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/memory-info", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/memory-info.md", "properties": [ { "name": "pid", @@ -8574,11 +9670,11 @@ }, { "name": "MemoryUsageDetails", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "memory-usage-details", - "websiteUrl": "http://electron.atom.io/docs/api/structures/memory-usage-details", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/memory-usage-details.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/memory-usage-details", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/memory-usage-details.md", "properties": [ { "name": "count", @@ -8610,16 +9706,16 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "menu", - "websiteUrl": "http://electron.atom.io/docs/api/menu", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/menu.md", + "websiteUrl": "http://electronjs.org/docs/api/menu", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/menu.md", "staticMethods": [ { "name": "setApplicationMenu", "signature": "(menu)", - "description": "Sets menu as the application menu on macOS. On Windows and Linux, the menu will be set as each window's top menu. Passing null will remove the menu bar on Windows and Linux but has no effect on macOS. Note: This API has to be called after the ready event of app module.", + "description": "Sets menu as the application menu on macOS. On Windows and Linux, the menu will be set as each window's top menu. Also on Windows and Linux, you can use a & in the top-level item name to indicate which letter should get a generated accelerator. For example, using &File for the file menu would result in a generated Alt-F accelerator that opens the associated menu. The indicated character in the button label gets an underline. The & character is not displayed on the button label. Passing null will suppress the default menu. On Windows and Linux, this has the additional effect of removing the menu bar from the window. Note: The default menu will be created automatically if the app does not set one. It contains standard items such as File, Edit, View, Window and Help.", "parameters": [ { "name": "menu", @@ -8663,7 +9759,7 @@ "platforms": [ "macOS" ], - "description": "Sends the action to the first responder of application. This is used for emulating default macOS menu behaviors. Usually you would just use the role property of a MenuItem. See the macOS Cocoa Event Handling Guide for more information on macOS' native actions.", + "description": "Sends the action to the first responder of application. This is used for emulating default macOS menu behaviors. Usually you would use the role property of a MenuItem. See the macOS Cocoa Event Handling Guide for more information on macOS' native actions.", "parameters": [ { "name": "action", @@ -8676,11 +9772,20 @@ { "name": "buildFromTemplate", "signature": "(template)", - "description": "Generally, the template is just an array of options for constructing a MenuItem. The usage can be referenced above. You can also attach other fields to the element of the template and they will become properties of the constructed menu items.", + "description": "Generally, the template is an array of options for constructing a MenuItem. The usage can be referenced above. You can also attach other fields to the element of the template and they will become properties of the constructed menu items.", "parameters": [ { "name": "template", - "type": "MenuItemConstructorOptions", + "type": [ + { + "typeName": "MenuItemConstructorOptions", + "collection": false + }, + { + "typeName": "MenuItem", + "collection": false + } + ], "collection": true, "required": true } @@ -8705,7 +9810,7 @@ "name": "options", "type": "Object", "collection": false, - "required": true, + "required": false, "properties": [ { "name": "window", @@ -8853,11 +9958,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "menu-item", - "websiteUrl": "http://electron.atom.io/docs/api/menu-item", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/menu-item.md", + "websiteUrl": "http://electronjs.org/docs/api/menu-item", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/menu-item.md", "constructorMethod": { "signature": "(options)", "parameters": [ @@ -8901,8 +10006,103 @@ "name": "role", "type": "String", "collection": false, - "description": "Define the action of the menu item, when specified the click property will be ignored. See .", - "required": false + "description": "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 or front Define the action of the menu item, when specified the click property will be ignored. See .", + "required": false, + "possibleValues": [ + { + "value": "undo" + }, + { + "value": "redo" + }, + { + "value": "cut" + }, + { + "value": "copy" + }, + { + "value": "paste" + }, + { + "value": "pasteandmatchstyle" + }, + { + "value": "delete" + }, + { + "value": "selectall" + }, + { + "value": "reload" + }, + { + "value": "forcereload" + }, + { + "value": "toggledevtools" + }, + { + "value": "resetzoom" + }, + { + "value": "zoomin" + }, + { + "value": "zoomout" + }, + { + "value": "togglefullscreen" + }, + { + "value": "window" + }, + { + "value": "minimize" + }, + { + "value": "close" + }, + { + "value": "help" + }, + { + "value": "about" + }, + { + "value": "services" + }, + { + "value": "hide" + }, + { + "value": "hideothers" + }, + { + "value": "unhide" + }, + { + "value": "quit" + }, + { + "value": "startspeaking" + }, + { + "value": "stopspeaking" + }, + { + "value": "close" + }, + { + "value": "minimize" + }, + { + "value": "zoom" + }, + { + "value": "front" + } + ] }, { "name": "type", @@ -8986,6 +10186,13 @@ "description": "Should only be specified for checkbox or radio type menu items.", "required": false }, + { + "name": "registerAccelerator", + "type": "Boolean", + "collection": false, + "description": "If false, the accelerator won't be registered with the system, but it will still be displayed. Defaults to true.", + "required": false + }, { "name": "submenu", "type": [ @@ -9010,10 +10217,31 @@ "required": false }, { - "name": "position", + "name": "before", "type": "String", - "collection": false, - "description": "This field allows fine-grained definition of the specific location within a given menu.", + "collection": true, + "description": "Inserts this item before the item with the specified label. If the referenced item doesn't exist the item will be inserted at the end of the menu. Also implies that the menu item in question should be placed in the same “group” as the item.", + "required": false + }, + { + "name": "after", + "type": "String", + "collection": true, + "description": "Inserts this item after the item with the specified label. If the referenced item doesn't exist the item will be inserted at the end of the menu.", + "required": false + }, + { + "name": "beforeGroupContaining", + "type": "String", + "collection": true, + "description": "Provides a means for a single context menu to declare the placement of their containing group before the containing group of the item with the specified label.", + "required": false + }, + { + "name": "afterGroupContaining", + "type": "String", + "collection": true, + "description": "Provides a means for a single context menu to declare the placement of their containing group after the containing group of the item with the specified label.", "required": false } ] @@ -9056,28 +10284,158 @@ }, { "name": "MimeTypedBuffer", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "mime-typed-buffer", - "websiteUrl": "http://electron.atom.io/docs/api/structures/mime-typed-buffer", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/mime-typed-buffer.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/mime-typed-buffer", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/mime-typed-buffer.md", "properties": [ { "name": "mimeType", "type": "String", "collection": false, - "description": "The mimeType of the Buffer that you are sending", + "description": "The mimeType of the Buffer that you are sending.", "required": true }, { "name": "data", "type": "Buffer", "collection": false, - "description": "The actual Buffer content", + "description": "The actual Buffer content.", "required": true } ] }, + { + "name": "nativeImage", + "description": "Create tray, dock, and application icons using PNG or JPG files.", + "process": { + "main": true, + "renderer": true + }, + "version": "5.0.0-beta.3", + "type": "Module", + "slug": "native-image", + "websiteUrl": "http://electronjs.org/docs/api/native-image", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/native-image.md", + "methods": [ + { + "name": "createEmpty", + "signature": "()", + "description": "Creates an empty NativeImage instance.", + "returns": { + "type": "NativeImage", + "collection": false + } + }, + { + "name": "createFromPath", + "signature": "(path)", + "description": "Creates a new NativeImage instance from a file located at path. This method returns an empty image if the path does not exist, cannot be read, or is not a valid image.", + "parameters": [ + { + "name": "path", + "type": "String", + "collection": false, + "required": true + } + ], + "returns": { + "type": "NativeImage", + "collection": false + } + }, + { + "name": "createFromBuffer", + "signature": "(buffer[, options])", + "description": "Creates a new NativeImage instance from buffer.", + "parameters": [ + { + "name": "buffer", + "type": "Buffer", + "collection": false, + "required": true + }, + { + "name": "options", + "type": "Object", + "collection": false, + "required": false, + "properties": [ + { + "name": "width", + "type": "Integer", + "collection": false, + "description": "Required for bitmap buffers.", + "required": false + }, + { + "name": "height", + "type": "Integer", + "collection": false, + "description": "Required for bitmap buffers.", + "required": false + }, + { + "name": "scaleFactor", + "type": "Double", + "collection": false, + "description": "Defaults to 1.0.", + "required": false + } + ] + } + ], + "returns": { + "type": "NativeImage", + "collection": false + } + }, + { + "name": "createFromDataURL", + "signature": "(dataURL)", + "description": "Creates a new NativeImage instance from dataURL.", + "parameters": [ + { + "name": "dataURL", + "type": "String", + "collection": false, + "required": true + } + ], + "returns": { + "type": "NativeImage", + "collection": false + } + }, + { + "name": "createFromNamedImage", + "signature": "(imageName[, hslShift])", + "platforms": [ + "macOS" + ], + "description": "Creates a new NativeImage instance from the NSImage that maps to the given image name. See NSImageName for a list of possible values. The hslShift is applied to the image with the following rules This means that [-1, 0, 1] will make the image completely white and [-1, 1, 0] will make the image completely black.", + "parameters": [ + { + "name": "imageName", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "hslShift", + "type": "Number", + "collection": true, + "required": true + } + ], + "returns": { + "type": "NativeImage", + "collection": false + } + } + ] + }, { "name": "NativeImage", "description": "Natively wrap images such as tray, dock, and application icons.", @@ -9085,11 +10443,11 @@ "main": true, "renderer": true }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "native-image", - "websiteUrl": "http://electron.atom.io/docs/api/native-image", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/native-image.md", + "websiteUrl": "http://electronjs.org/docs/api/native-image", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/native-image.md", "instanceName": "image", "instanceMethods": [ { @@ -9387,136 +10745,6 @@ } ] }, - { - "name": "nativeImage", - "description": "Create tray, dock, and application icons using PNG or JPG files.", - "process": { - "main": true, - "renderer": true - }, - "version": "2.0.0", - "type": "Module", - "slug": "native-image", - "websiteUrl": "http://electron.atom.io/docs/api/native-image", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/native-image.md", - "methods": [ - { - "name": "createEmpty", - "signature": "()", - "description": "Creates an empty NativeImage instance.", - "returns": { - "type": "NativeImage", - "collection": false - } - }, - { - "name": "createFromPath", - "signature": "(path)", - "description": "Creates a new NativeImage instance from a file located at path. This method returns an empty image if the path does not exist, cannot be read, or is not a valid image.", - "parameters": [ - { - "name": "path", - "type": "String", - "collection": false, - "required": true - } - ], - "returns": { - "type": "NativeImage", - "collection": false - } - }, - { - "name": "createFromBuffer", - "signature": "(buffer[, options])", - "description": "Creates a new NativeImage instance from buffer.", - "parameters": [ - { - "name": "buffer", - "type": "Buffer", - "collection": false, - "required": true - }, - { - "name": "options", - "type": "Object", - "collection": false, - "required": false, - "properties": [ - { - "name": "width", - "type": "Integer", - "collection": false, - "description": "Required for bitmap buffers.", - "required": false - }, - { - "name": "height", - "type": "Integer", - "collection": false, - "description": "Required for bitmap buffers.", - "required": false - }, - { - "name": "scaleFactor", - "type": "Double", - "collection": false, - "description": "Defaults to 1.0.", - "required": false - } - ] - } - ], - "returns": { - "type": "NativeImage", - "collection": false - } - }, - { - "name": "createFromDataURL", - "signature": "(dataURL)", - "description": "Creates a new NativeImage instance from dataURL.", - "parameters": [ - { - "name": "dataURL", - "type": "String", - "collection": false, - "required": true - } - ], - "returns": { - "type": "NativeImage", - "collection": false - } - }, - { - "name": "createFromNamedImage", - "signature": "(imageName[, hslShift])", - "platforms": [ - "macOS" - ], - "description": "Creates a new NativeImage instance from the NSImage that maps to the given image name. See NSImageName for a list of possible values. The hslShift is applied to the image with the following rules This means that [-1, 0, 1] will make the image completely white and [-1, 1, 0] will make the image completely black.", - "parameters": [ - { - "name": "imageName", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "hslShift", - "type": "Number", - "collection": true, - "required": true - } - ], - "returns": { - "type": "NativeImage", - "collection": false - } - } - ] - }, { "name": "net", "description": "Issue HTTP/HTTPS requests using Chromium's native networking library", @@ -9524,11 +10752,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "net", - "websiteUrl": "http://electron.atom.io/docs/api/net", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/net.md", + "websiteUrl": "http://electronjs.org/docs/api/net", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/net.md", "methods": [ { "name": "request", @@ -9559,6 +10787,71 @@ } ] }, + { + "name": "netLog", + "description": "Logging network events for a session.", + "process": { + "main": true, + "renderer": false + }, + "version": "5.0.0-beta.3", + "type": "Module", + "slug": "net-log", + "websiteUrl": "http://electronjs.org/docs/api/net-log", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/net-log.md", + "methods": [ + { + "name": "startLogging", + "signature": "(path)", + "description": "Starts recording network events to path.", + "parameters": [ + { + "name": "path", + "type": "String", + "collection": false, + "description": "File path to record network logs.", + "required": true + } + ] + }, + { + "name": "stopLogging", + "signature": "([callback])", + "description": "Stops recording network events. If not called, net logging will automatically end when app quits.", + "parameters": [ + { + "name": "callback", + "type": "Function", + "collection": false, + "required": false, + "parameters": [ + { + "name": "path", + "type": "String", + "collection": false, + "description": "File path to which network logs were recorded.", + "required": true + } + ] + } + ] + } + ], + "properties": [ + { + "name": "currentlyLogging", + "description": "A Boolean property that indicates whether network logs are recorded.", + "type": "Boolean", + "collection": false + }, + { + "name": "currentlyLoggingPath", + "description": "A String property that returns the path to the current log file.", + "type": "String", + "collection": false + } + ] + }, { "name": "Notification", "description": "Create OS desktop notifications", @@ -9566,11 +10859,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "notification", - "websiteUrl": "http://electron.atom.io/docs/api/notification", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/notification.md", + "websiteUrl": "http://electronjs.org/docs/api/notification", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/notification.md", "staticMethods": [ { "name": "isSupported", @@ -9679,7 +10972,7 @@ { "name": "show", "signature": "()", - "description": "Immediately shows the notification to the user, please note this means unlike the HTML5 Notification implementation, simply instantiating a new Notification does not immediately show it to the user, you need to call this method before the OS will display it. If the notification has been shown before, this method will dismiss the previously shown notification and create a new one with identical properties." + "description": "Immediately shows the notification to the user, please note this means unlike the HTML5 Notification implementation, instantiating a new Notification does not immediately show it to the user, you need to call this method before the OS will display it. If the notification has been shown before, this method will dismiss the previously shown notification and create a new one with identical properties." }, { "name": "close", @@ -9771,11 +11064,11 @@ }, { "name": "NotificationAction", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "notification-action", - "websiteUrl": "http://electron.atom.io/docs/api/structures/notification-action", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/notification-action.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/notification-action", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/notification-action.md", "properties": [ { "name": "type", @@ -9800,11 +11093,11 @@ }, { "name": "Point", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "point", - "websiteUrl": "http://electron.atom.io/docs/api/structures/point", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/point.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/point", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/point.md", "properties": [ { "name": "x", @@ -9829,11 +11122,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "power-monitor", - "websiteUrl": "http://electron.atom.io/docs/api/power-monitor", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/power-monitor.md", + "websiteUrl": "http://electronjs.org/docs/api/power-monitor", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/power-monitor.md", "events": [ { "name": "suspend", @@ -9864,6 +11157,22 @@ "Linux", "macOS" ] + }, + { + "name": "lock-screen", + "description": "Emitted when the system is about to lock the screen.", + "platforms": [ + "macOS", + "Windows" + ] + }, + { + "name": "unlock-screen", + "description": "Emitted as soon as the systems screen is unlocked.", + "platforms": [ + "macOS", + "Windows" + ] } ] }, @@ -9874,11 +11183,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "power-save-blocker", - "websiteUrl": "http://electron.atom.io/docs/api/power-save-blocker", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/power-save-blocker.md", + "websiteUrl": "http://electronjs.org/docs/api/power-save-blocker", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/power-save-blocker.md", "methods": [ { "name": "start", @@ -9945,11 +11254,11 @@ }, { "name": "PrinterInfo", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "printer-info", - "websiteUrl": "http://electron.atom.io/docs/api/structures/printer-info", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/printer-info.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/printer-info", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/printer-info.md", "properties": [ { "name": "name", @@ -9988,17 +11297,36 @@ "main": true, "renderer": true }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "process", - "websiteUrl": "http://electron.atom.io/docs/api/process", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/process.md", + "websiteUrl": "http://electronjs.org/docs/api/process", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/process.md", "methods": [ { "name": "crash", "signature": "()", "description": "Causes the main thread of the current process crash." }, + { + "name": "getCreationTime", + "signature": "()", + "description": "Indicates the creation time of the application. The time is represented as number of milliseconds since epoch. It returns null if it is unable to get the process creation time.", + "returns": { + "type": [ + { + "typeName": "Number", + "collection": false + }, + { + "typeName": "null", + "collection": false + } + ], + "collection": false, + "description": "The number of milliseconds since epoch, or null if the information is unavailable" + } + }, { "name": "getCPUUsage", "signature": "()", @@ -10020,39 +11348,106 @@ } }, { - "name": "getProcessMemoryInfo", + "name": "getHeapStatistics", "signature": "()", - "description": "Returns an object giving memory usage statistics about the current process. Note that all statistics are reported in Kilobytes.", + "description": "Returns an object with V8 heap statistics. Note that all statistics are reported in Kilobytes.", "returns": { "type": "Object", "collection": false, "properties": [ { - "name": "workingSetSize", + "name": "totalHeapSize", "type": "Integer", "collection": false, - "description": "The amount of memory currently pinned to actual physical RAM.", + "description": "", "required": true }, { - "name": "peakWorkingSetSize", + "name": "totalHeapSizeExecutable", "type": "Integer", "collection": false, - "description": "The maximum amount of memory that has ever been pinned to actual physical RAM.", + "description": "", "required": true }, { - "name": "privateBytes", + "name": "totalPhysicalSize", "type": "Integer", "collection": false, - "description": "The amount of memory not shared by other processes, such as JS heap or HTML content.", + "description": "", "required": true }, { - "name": "sharedBytes", + "name": "totalAvailableSize", "type": "Integer", "collection": false, - "description": "The amount of memory shared between processes, typically memory consumed by the Electron code itself.", + "description": "", + "required": true + }, + { + "name": "usedHeapSize", + "type": "Integer", + "collection": false, + "description": "", + "required": true + }, + { + "name": "heapSizeLimit", + "type": "Integer", + "collection": false, + "description": "", + "required": true + }, + { + "name": "mallocedMemory", + "type": "Integer", + "collection": false, + "description": "", + "required": true + }, + { + "name": "peakMallocedMemory", + "type": "Integer", + "collection": false, + "description": "", + "required": true + }, + { + "name": "doesZapGarbage", + "type": "Boolean", + "collection": false, + "description": "", + "required": true + } + ] + } + }, + { + "name": "getProcessMemoryInfo", + "signature": "()", + "description": "Returns an object giving memory usage statistics about the current process. Note that all statistics are reported in Kilobytes. This api should be called after app ready. Chromium does not provide residentSet value for macOS. This is because macOS performs in-memory compression of pages that haven't been recently used. As a result the resident set size value is not what one would expect. private memory is more representative of the actual pre-compression memory usage of the process on macOS.", + "returns": { + "type": "Object", + "collection": false, + "properties": [ + { + "name": "residentSet", + "type": "Integer", + "collection": false, + "description": "and The amount of memory currently pinned to actual physical RAM in Kilobytes.", + "required": true + }, + { + "name": "private", + "type": "Integer", + "collection": false, + "description": "The amount of memory not shared by other processes, such as JS heap or HTML content in Kilobytes.", + "required": true + }, + { + "name": "shared", + "type": "Integer", + "collection": false, + "description": "The amount of memory shared between processes, typically memory consumed by the Electron code itself in Kilobytes.", "required": true } ] @@ -10097,6 +11492,25 @@ ] } }, + { + "name": "takeHeapSnapshot", + "signature": "(filePath)", + "description": "Takes a V8 heap snapshot and saves it to filePath.", + "parameters": [ + { + "name": "filePath", + "type": "String", + "collection": false, + "description": "Path to the output file.", + "required": true + } + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Indicates whether the snapshot has been created successfully." + } + }, { "name": "hang", "signature": "()", @@ -10133,6 +11547,12 @@ "type": "Boolean", "collection": false }, + { + "name": "isMainFrame", + "description": "A Boolean, true when the current renderer context is the \"main\" renderer frame. If you want the ID of the current frame you should use webFrame.routingId.", + "type": "Boolean", + "collection": false + }, { "name": "mas", "description": "A Boolean. For Mac App Store build, this property is true, for other builds it is undefined.", @@ -10151,12 +11571,24 @@ "type": "Boolean", "collection": false }, + { + "name": "enablePromiseAPIs", + "description": "A Boolean that controls whether or not deprecation warnings are printed to stderr when formerly callback-based APIs converted to Promises are invoked using callbacks. Setting this to true will enable deprecation warnings.", + "type": "Boolean", + "collection": false + }, { "name": "resourcesPath", "description": "A String representing the path to the resources directory.", "type": "String", "collection": false }, + { + "name": "sandboxed", + "description": "A Boolean. When the renderer process is sandboxed, this property is true, otherwise it is undefined.", + "type": "Boolean", + "collection": false + }, { "name": "throwDeprecation", "description": "A Boolean that controls whether or not deprecation warnings will be thrown as exceptions. Setting this to true will throw errors for deprecations. This property is used instead of the --throw-deprecation command line flag.", @@ -10177,7 +11609,7 @@ }, { "name": "type", - "description": "A String representing the current process's type, can be \"browser\" (i.e. main process) or \"renderer\".", + "description": "A String representing the current process's type, can be \"browser\" (i.e. main process), \"renderer\", or \"worker\" (i.e. web worker).", "type": "String", "collection": false }, @@ -10212,11 +11644,11 @@ }, { "name": "ProcessMetric", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "process-metric", - "websiteUrl": "http://electron.atom.io/docs/api/structures/process-metric", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/process-metric.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/process-metric", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/process-metric.md", "properties": [ { "name": "pid", @@ -10232,13 +11664,6 @@ "description": "Process type (Browser or Tab or GPU etc).", "required": true }, - { - "name": "memory", - "type": "MemoryInfo", - "collection": false, - "description": "Memory information for the process.", - "required": true - }, { "name": "cpu", "type": "CPUUsage", @@ -10248,6 +11673,72 @@ } ] }, + { + "name": "Product", + "version": "5.0.0-beta.3", + "type": "Structure", + "slug": "product", + "websiteUrl": "http://electronjs.org/docs/api/structures/product", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/product.md", + "properties": [ + { + "name": "productIdentifier", + "type": "String", + "collection": false, + "description": "The string that identifies the product to the Apple App Store.", + "required": true + }, + { + "name": "localizedDescription", + "type": "String", + "collection": false, + "description": "A description of the product.", + "required": true + }, + { + "name": "localizedTitle", + "type": "String", + "collection": false, + "description": "The name of the product.", + "required": true + }, + { + "name": "contentVersion", + "type": "String", + "collection": false, + "description": "A string that identifies the version of the content.", + "required": true + }, + { + "name": "contentLengths", + "type": "Number", + "collection": true, + "description": "The total size of the content, in bytes.", + "required": true + }, + { + "name": "price", + "type": "Number", + "collection": false, + "description": "The cost of the product in the local currency.", + "required": true + }, + { + "name": "formattedPrice", + "type": "String", + "collection": false, + "description": "The locale formatted price of the product.", + "required": true + }, + { + "name": "downloadable", + "type": "Boolean", + "collection": false, + "description": "A Boolean value that indicates whether the App Store has downloadable content for this product.", + "required": true + } + ] + }, { "name": "protocol", "description": "Register a custom protocol and intercept existing protocol requests.", @@ -10255,50 +11746,21 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "protocol", - "websiteUrl": "http://electron.atom.io/docs/api/protocol", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/protocol.md", + "websiteUrl": "http://electronjs.org/docs/api/protocol", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/protocol.md", "methods": [ { - "name": "registerStandardSchemes", - "signature": "(schemes[, options])", - "description": "A standard scheme adheres to what RFC 3986 calls generic URI syntax. For example http and https are standard schemes, while file is not. Registering a scheme as standard, will allow relative and absolute resources to be resolved correctly when served. Otherwise the scheme will behave like the file protocol, but without the ability to resolve relative URLs. For example when you load following page with custom protocol without registering it as standard scheme, the image will not be loaded because non-standard schemes can not recognize relative URLs: Registering a scheme as standard will allow access to files through the FileSystem API. Otherwise the renderer will throw a security error for the scheme. By default web storage apis (localStorage, sessionStorage, webSQL, indexedDB, cookies) are disabled for non standard schemes. So in general if you want to register a custom protocol to replace the http protocol, you have to register it as a standard scheme: Note: This method can only be used before the ready event of the app module gets emitted.", + "name": "registerSchemesAsPrivileged", + "signature": "(customSchemes)", + "description": "Note: This method can only be used before the ready event of the app module gets emitted and can be called only once. Registers the scheme as standard, secure, bypasses content security policy for resources, allows registering ServiceWorker and supports fetch API. Specify a privilege with the value of true to enable the capability. An example of registering a privileged scheme, with bypassing Content Security Policy: A standard scheme adheres to what RFC 3986 calls generic URI syntax. For example http and https are standard schemes, while file is not. Registering a scheme as standard, will allow relative and absolute resources to be resolved correctly when served. Otherwise the scheme will behave like the file protocol, but without the ability to resolve relative URLs. For example when you load following page with custom protocol without registering it as standard scheme, the image will not be loaded because non-standard schemes can not recognize relative URLs: Registering a scheme as standard will allow access to files through the FileSystem API. Otherwise the renderer will throw a security error for the scheme. By default web storage apis (localStorage, sessionStorage, webSQL, indexedDB, cookies) are disabled for non standard schemes. So in general if you want to register a custom protocol to replace the http protocol, you have to register it as a standard scheme.", "parameters": [ { - "name": "schemes", - "type": "String", + "name": "customSchemes", + "type": "CustomScheme", "collection": true, - "description": "Custom schemes to be registered as standard schemes.", - "required": true - }, - { - "name": "options", - "type": "Object", - "collection": false, - "required": false, - "properties": [ - { - "name": "secure", - "type": "Boolean", - "collection": false, - "description": "true to register the scheme as secure. Default false.", - "required": false - } - ] - } - ] - }, - { - "name": "registerServiceWorkerSchemes", - "signature": "(schemes)", - "parameters": [ - { - "name": "schemes", - "type": "String", - "collection": true, - "description": "Custom schemes to be registered to handle service workers.", "required": true } ] @@ -10306,7 +11768,7 @@ { "name": "registerFileProtocol", "signature": "(scheme, handler[, completion])", - "description": "Registers a protocol of scheme that will send the file as a response. The handler will be called with handler(request, callback) when a request is going to be created with scheme. completion will be called with completion(null) when scheme is successfully registered or completion(error) when failed. To handle the request, the callback should be called with either the file's path or an object that has a path property, e.g. callback(filePath) or callback({path: filePath}). When callback is called with nothing, a number, or an object that has an error property, the request will fail with the error number you specified. For the available error numbers you can use, please see the net error list. By default the scheme is treated like http:, which is parsed differently than protocols that follow the \"generic URI syntax\" like file:, so you probably want to call protocol.registerStandardSchemes to have your scheme treated as a standard scheme.", + "description": "Registers a protocol of scheme that will send the file as a response. The handler will be called with handler(request, callback) when a request is going to be created with scheme. completion will be called with completion(null) when scheme is successfully registered or completion(error) when failed. To handle the request, the callback should be called with either the file's path or an object that has a path property, e.g. callback(filePath) or callback({ path: filePath }). The object may also have a headers property which gives a list of strings for the response headers, e.g. callback({ path: filePath, headers: [\"Content-Security-Policy: default-src 'none'\"]}). When callback is called with nothing, a number, or an object that has an error property, the request will fail with the error number you specified. For the available error numbers you can use, please see the net error list. By default the scheme is treated like http:, which is parsed differently than protocols that follow the \"generic URI syntax\" like file:, so you probably want to call protocol.registerStandardSchemes to have your scheme treated as a standard scheme.", "parameters": [ { "name": "scheme", @@ -10610,6 +12072,14 @@ "description": "", "required": true }, + { + "name": "headers", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [] + }, { "name": "referrer", "type": "String", @@ -10852,7 +12322,7 @@ { "name": "isProtocolHandled", "signature": "(scheme, callback)", - "description": "The callback will be called with a boolean that indicates whether there is already a handler for scheme.", + "description": "The callback will be called with a boolean that indicates whether there is already a handler for scheme. Deprecated Soon", "parameters": [ { "name": "scheme", @@ -10867,8 +12337,8 @@ "required": true, "parameters": [ { - "name": "error", - "type": "Error", + "name": "handled", + "type": "Boolean", "collection": false, "description": "", "required": true @@ -10877,6 +12347,24 @@ } ] }, + { + "name": "isProtocolHandled", + "signature": "(scheme)", + "parameters": [ + { + "name": "scheme", + "type": "String", + "collection": false, + "required": true + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "Boolean", + "description": "fulfilled with a boolean that indicates whether there is already a handler for scheme." + } + }, { "name": "interceptFileProtocol", "signature": "(scheme, handler[, completion])", @@ -11175,6 +12663,14 @@ "description": "", "required": true }, + { + "name": "headers", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [] + }, { "name": "referrer", "type": "String", @@ -11418,42 +12914,92 @@ }, { "name": "Rectangle", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "rectangle", - "websiteUrl": "http://electron.atom.io/docs/api/structures/rectangle", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/rectangle.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/rectangle", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/rectangle.md", "properties": [ { "name": "x", "type": "Number", "collection": false, - "description": "The x coordinate of the origin of the rectangle (must be an integer)", + "description": "The x coordinate of the origin of the rectangle (must be an integer).", "required": true }, { "name": "y", "type": "Number", "collection": false, - "description": "The y coordinate of the origin of the rectangle (must be an integer)", + "description": "The y coordinate of the origin of the rectangle (must be an integer).", "required": true }, { "name": "width", "type": "Number", "collection": false, - "description": "The width of the rectangle (must be an integer)", + "description": "The width of the rectangle (must be an integer).", "required": true }, { "name": "height", "type": "Number", "collection": false, - "description": "The height of the rectangle (must be an integer)", + "description": "The height of the rectangle (must be an integer).", "required": true } ] }, + { + "name": "Referrer", + "version": "5.0.0-beta.3", + "type": "Structure", + "slug": "referrer", + "websiteUrl": "http://electronjs.org/docs/api/structures/referrer", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/referrer.md", + "properties": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "HTTP Referrer URL.", + "required": true + }, + { + "name": "policy", + "type": "String", + "collection": false, + "description": "Can be default, unsafe-url, no-referrer-when-downgrade, no-referrer, origin, strict-origin-when-cross-origin, same-origin or strict-origin. See the for more details on the meaning of these values.", + "required": true, + "possibleValues": [ + { + "value": "default" + }, + { + "value": "unsafe-url" + }, + { + "value": "no-referrer-when-downgrade" + }, + { + "value": "no-referrer" + }, + { + "value": "origin" + }, + { + "value": "strict-origin-when-cross-origin" + }, + { + "value": "same-origin" + }, + { + "value": "strict-origin" + } + ] + } + ] + }, { "name": "remote", "description": "Use main process modules from the renderer process.", @@ -11461,11 +13007,11 @@ "main": false, "renderer": true }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "remote", - "websiteUrl": "http://electron.atom.io/docs/api/remote", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/remote.md", + "websiteUrl": "http://electronjs.org/docs/api/remote", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/remote.md", "methods": [ { "name": "require", @@ -11488,6 +13034,7 @@ { "name": "getCurrentWindow", "signature": "()", + "description": "Note: Do not use removeAllListeners on BrowserWindow. Use of this can remove all blur listeners, disable click events on touch bar buttons, and other unintended consequences.", "returns": { "type": "BrowserWindow", "collection": false, @@ -11530,11 +13077,11 @@ }, { "name": "RemoveClientCertificate", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "remove-client-certificate", - "websiteUrl": "http://electron.atom.io/docs/api/structures/remove-client-certificate", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/remove-client-certificate.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/remove-client-certificate", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/remove-client-certificate.md", "properties": [ { "name": "type", @@ -11554,11 +13101,11 @@ }, { "name": "RemovePassword", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "remove-password", - "websiteUrl": "http://electron.atom.io/docs/api/structures/remove-password", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/remove-password.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/remove-password", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/remove-password.md", "properties": [ { "name": "type", @@ -11625,11 +13172,11 @@ "main": true, "renderer": true }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "screen", - "websiteUrl": "http://electron.atom.io/docs/api/screen", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/screen.md", + "websiteUrl": "http://electronjs.org/docs/api/screen", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/screen.md", "methods": [ { "name": "getCursorScreenPoint", @@ -11640,18 +13187,6 @@ "collection": false } }, - { - "name": "getMenuBarHeight", - "signature": "()", - "platforms": [ - "macOS" - ], - "returns": { - "type": "Integer", - "collection": false, - "description": "The height of the menu bar in pixels." - } - }, { "name": "getPrimaryDisplay", "signature": "()", @@ -11703,6 +13238,116 @@ "collection": false, "description": "The display that most closely intersects the provided bounds." } + }, + { + "name": "screenToDipPoint", + "signature": "(point)", + "platforms": [ + "Windows" + ], + "description": "Converts a screen physical point to a screen DIP point. The DPI scale is performed relative to the display containing the physical point.", + "parameters": [ + { + "name": "point", + "type": "Point", + "collection": false, + "required": true + } + ], + "returns": { + "type": "Point", + "collection": false + } + }, + { + "name": "dipToScreenPoint", + "signature": "(point)", + "platforms": [ + "Windows" + ], + "description": "Converts a screen DIP point to a screen physical point. The DPI scale is performed relative to the display containing the DIP point.", + "parameters": [ + { + "name": "point", + "type": "Point", + "collection": false, + "required": true + } + ], + "returns": { + "type": "Point", + "collection": false + } + }, + { + "name": "screenToDipRect", + "signature": "(window, rect)", + "platforms": [ + "Windows" + ], + "description": "Converts a screen physical rect to a screen DIP rect. The DPI scale is performed relative to the display nearest to window. If window is null, scaling will be performed to the display nearest to rect.", + "parameters": [ + { + "name": "window", + "type": [ + { + "typeName": "BrowserWindow", + "collection": false + }, + { + "typeName": "null", + "collection": false + } + ], + "collection": false, + "required": true + }, + { + "name": "rect", + "type": "Rectangle", + "collection": false, + "required": true + } + ], + "returns": { + "type": "Rectangle", + "collection": false + } + }, + { + "name": "dipToScreenRect", + "signature": "(window, rect)", + "platforms": [ + "Windows" + ], + "description": "Converts a screen DIP rect to a screen physical rect. The DPI scale is performed relative to the display nearest to window. If window is null, scaling will be performed to the display nearest to rect.", + "parameters": [ + { + "name": "window", + "type": [ + { + "typeName": "BrowserWindow", + "collection": false + }, + { + "typeName": "null", + "collection": false + } + ], + "collection": false, + "required": true + }, + { + "name": "rect", + "type": "Rectangle", + "collection": false, + "required": true + } + ], + "returns": { + "type": "Rectangle", + "collection": false + } } ], "events": [ @@ -11770,55 +13415,55 @@ }, { "name": "ScrubberItem", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "scrubber-item", - "websiteUrl": "http://electron.atom.io/docs/api/structures/scrubber-item", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/scrubber-item.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/scrubber-item", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/scrubber-item.md", "properties": [ { "name": "label", "type": "String", "collection": false, - "description": "The text to appear in this item", + "description": "The text to appear in this item.", "required": false }, { "name": "icon", "type": "NativeImage", "collection": false, - "description": "The image to appear in this item", + "description": "The image to appear in this item.", "required": false } ] }, { "name": "SegmentedControlSegment", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "segmented-control-segment", - "websiteUrl": "http://electron.atom.io/docs/api/structures/segmented-control-segment", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/segmented-control-segment.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/segmented-control-segment", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/segmented-control-segment.md", "properties": [ { "name": "label", "type": "String", "collection": false, - "description": "The text to appear in this segment", + "description": "The text to appear in this segment.", "required": false }, { "name": "icon", "type": "NativeImage", "collection": false, - "description": "The image to appear in this segment", + "description": "The image to appear in this segment.", "required": false }, { "name": "enabled", "type": "Boolean", "collection": false, - "description": "Whether this segment is selectable. Default: true", + "description": "Whether this segment is selectable. Default: true.", "required": false } ] @@ -11830,11 +13475,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "session", - "websiteUrl": "http://electron.atom.io/docs/api/session", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/session.md", + "websiteUrl": "http://electronjs.org/docs/api/session", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/session.md", "methods": [ { "name": "fromPartition", @@ -11886,11 +13531,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "session", - "websiteUrl": "http://electron.atom.io/docs/api/session", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/session.md", + "websiteUrl": "http://electronjs.org/docs/api/session", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/session.md", "instanceName": "ses", "instanceMethods": [ { @@ -11951,7 +13596,7 @@ "name": "storages", "type": "String", "collection": true, - "description": "The types of storages to clear, can contain: appcache, cookies, filesystem, indexdb, localstorage, shadercache, websql, serviceworkers.", + "description": "The types of storages to clear, can contain: appcache, cookies, filesystem, indexdb, localstorage, shadercache, websql, serviceworkers, cachestorage.", "required": false }, { @@ -12241,6 +13886,101 @@ "collection": false, "description": "The url of the openExternal request.", "required": true + }, + { + "name": "mediaTypes", + "type": "String", + "collection": true, + "description": "The types of media access being requested, elements can be video or audio", + "required": true, + "possibleValues": [ + { + "value": "video" + }, + { + "value": "audio" + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "setPermissionCheckHandler", + "signature": "(handler)", + "description": "Sets the handler which can be used to respond to permission checks for the session. Returning true will allow the permission and false will reject it. To clear the handler, call setPermissionCheckHandler(null).", + "parameters": [ + { + "name": "handler", + "type": [ + { + "typeName": "Function", + "collection": false, + "innerType": "Boolean" + }, + { + "typeName": "null", + "collection": false + } + ], + "collection": false, + "required": true, + "parameters": [ + { + "name": "webContents", + "type": "WebContents", + "collection": false, + "description": "WebContents checking the permission.", + "required": true + }, + { + "name": "permission", + "type": "String", + "collection": false, + "description": "Enum of 'media'.", + "required": true + }, + { + "name": "requestingOrigin", + "type": "String", + "collection": false, + "description": "The origin URL of the permission check", + "required": true + }, + { + "name": "details", + "type": "Object", + "collection": false, + "description": "Some properties are only available on certain permission types.", + "required": true, + "properties": [ + { + "name": "securityOrigin", + "type": "String", + "collection": false, + "description": "The security orign of the media check.", + "required": true + }, + { + "name": "mediaType", + "type": "String", + "collection": false, + "description": "The type of media access being requested, can be video, audio or unknown", + "required": true, + "possibleValues": [ + { + "value": "video" + }, + { + "value": "audio" + }, + { + "value": "unknown" + } + ] } ] } @@ -12474,6 +14214,12 @@ "description": "A Protocol object for this session.", "type": "Protocol", "collection": false + }, + { + "name": "netLog", + "description": "A NetLog object for this session.", + "type": "NetLog", + "collection": false } ], "instanceEvents": [ @@ -12510,11 +14256,11 @@ "main": true, "renderer": true }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "shell", - "websiteUrl": "http://electron.atom.io/docs/api/shell", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/shell.md", + "websiteUrl": "http://electronjs.org/docs/api/shell", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/shell.md", "methods": [ { "name": "showItemInFolder", @@ -12553,15 +14299,15 @@ } }, { - "name": "openExternal", - "signature": "(url[, options, callback])", + "name": "openExternalSync", + "signature": "(url[, options])", "description": "Open the given external protocol URL in the desktop's default manner. (For example, mailto: URLs in the user's default mail agent).", "parameters": [ { "name": "url", "type": "String", "collection": false, - "description": "max 2081 characters on windows, or the function returns false.", + "description": "Max 2081 characters on Windows, or the function returns false.", "required": true }, { @@ -12575,23 +14321,14 @@ "type": "Boolean", "collection": false, "description": "true to bring the opened application to the foreground. The default is true.", - "required": true - } - ] - }, - { - "name": "callback", - "type": "Function", - "collection": false, - "description": "If specified will perform the open asynchronously.", - "required": false, - "parameters": [ + "required": false + }, { - "name": "error", - "type": "Error", + "name": "workingDirectory", + "type": "String", "collection": false, - "description": "", - "required": true + "description": "The working directory.", + "required": false } ] } @@ -12599,7 +14336,48 @@ "returns": { "type": "Boolean", "collection": false, - "description": "Whether an application was available to open the URL. If callback is specified, always returns true." + "description": "Whether an application was available to open the URL." + } + }, + { + "name": "openExternal", + "signature": "(url[, options])", + "description": "Open the given external protocol URL in the desktop's default manner. (For example, mailto: URLs in the user's default mail agent).", + "parameters": [ + { + "name": "url", + "type": "String", + "collection": false, + "description": "Max 2081 characters on windows.", + "required": true + }, + { + "name": "options", + "type": "Object", + "collection": false, + "required": false, + "properties": [ + { + "name": "activate", + "type": "Boolean", + "collection": false, + "description": "true to bring the opened application to the foreground. The default is true.", + "required": false + }, + { + "name": "workingDirectory", + "type": "String", + "collection": false, + "description": "The working directory.", + "required": false + } + ] + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "void" } }, { @@ -12697,11 +14475,11 @@ }, { "name": "ShortcutDetails", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "shortcut-details", - "websiteUrl": "http://electron.atom.io/docs/api/structures/shortcut-details", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/shortcut-details.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/shortcut-details", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/shortcut-details.md", "properties": [ { "name": "target", @@ -12756,11 +14534,11 @@ }, { "name": "Size", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "size", - "websiteUrl": "http://electron.atom.io/docs/api/structures/size", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/size.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/size", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/size.md", "properties": [ { "name": "width", @@ -12780,24 +14558,24 @@ }, { "name": "StreamProtocolResponse", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "stream-protocol-response", - "websiteUrl": "http://electron.atom.io/docs/api/structures/stream-protocol-response", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/stream-protocol-response.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/stream-protocol-response", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/stream-protocol-response.md", "properties": [ { "name": "statusCode", "type": "Number", "collection": false, - "description": "The HTTP response code", + "description": "The HTTP response code.", "required": true }, { "name": "headers", "type": "Object", "collection": false, - "description": "An object containing the response headers", + "description": "An object containing the response headers.", "required": true, "properties": [] }, @@ -12805,7 +14583,7 @@ "name": "data", "type": "ReadableStream", "collection": false, - "description": "A Node.js readable stream representing the response body", + "description": "A Node.js readable stream representing the response body.", "required": true } ] @@ -12817,11 +14595,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "system-preferences", - "websiteUrl": "http://electron.atom.io/docs/api/system-preferences", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/system-preferences.md", + "websiteUrl": "http://electronjs.org/docs/api/system-preferences", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/system-preferences.md", "methods": [ { "name": "isDarkMode", @@ -12849,6 +14627,35 @@ }, { "name": "postNotification", + "signature": "(event, userInfo[, deliverImmediately])", + "platforms": [ + "macOS" + ], + "description": "Posts event as native notifications of macOS. The userInfo is an Object that contains the user information dictionary sent along with the notification.", + "parameters": [ + { + "name": "event", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "userInfo", + "type": "Object", + "collection": false, + "required": true + }, + { + "name": "deliverImmediately", + "type": "Boolean", + "collection": false, + "description": "`true` to post notifications immediately even when the subscribing app is inactive.", + "required": false + } + ] + }, + { + "name": "postLocalNotification", "signature": "(event, userInfo)", "platforms": [ "macOS" @@ -12870,7 +14677,7 @@ ] }, { - "name": "postLocalNotification", + "name": "postWorkspaceNotification", "signature": "(event, userInfo)", "platforms": [ "macOS" @@ -12928,23 +14735,12 @@ } ] } - ] - }, - { - "name": "unsubscribeNotification", - "signature": "(id)", - "platforms": [ - "macOS" ], - "description": "Removes the subscriber with id.", - "parameters": [ - { - "name": "id", - "type": "Integer", - "collection": false, - "required": true - } - ] + "returns": { + "type": "Number", + "collection": false, + "description": "The ID of this subscription" + } }, { "name": "subscribeLocalNotification", @@ -12983,6 +14779,66 @@ } ] } + ], + "returns": { + "type": "Number", + "collection": false, + "description": "The ID of this subscription" + } + }, + { + "name": "subscribeWorkspaceNotification", + "signature": "(event, callback)", + "platforms": [ + "macOS" + ], + "description": "Same as subscribeNotification, but uses NSWorkspace.sharedWorkspace.notificationCenter. This is necessary for events such as NSWorkspaceDidActivateApplicationNotification.", + "parameters": [ + { + "name": "event", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "required": true, + "parameters": [ + { + "name": "event", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "userInfo", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [] + } + ] + } + ] + }, + { + "name": "unsubscribeNotification", + "signature": "(id)", + "platforms": [ + "macOS" + ], + "description": "Removes the subscriber with id.", + "parameters": [ + { + "name": "id", + "type": "Integer", + "collection": false, + "required": true + } ] }, { @@ -13001,6 +14857,22 @@ } ] }, + { + "name": "unsubscribeWorkspaceNotification", + "signature": "(id)", + "platforms": [ + "macOS" + ], + "description": "Same as unsubscribeNotification, but removes the subscriber from NSWorkspace.sharedWorkspace.notificationCenter.", + "parameters": [ + { + "name": "id", + "type": "Integer", + "collection": false, + "required": true + } + ] + }, { "name": "registerDefaults", "signature": "(defaults)", @@ -13090,7 +14962,7 @@ "name": "type", "type": "String", "collection": false, - "description": "See [`getUserDefault`][#systempreferencesgetuserdefaultkey-type-macos].", + "description": "See .", "required": true }, { @@ -13134,8 +15006,10 @@ "name": "getAccentColor", "signature": "()", "platforms": [ - "Windows" + "Windows", + "macOS" ], + "description": "This API is only available on macOS 10.14 Mojave or newer.", "returns": { "type": "String", "collection": false, @@ -13146,7 +15020,8 @@ "name": "getColor", "signature": "(color)", "platforms": [ - "Windows" + "Windows", + "macOS" ], "parameters": [ { @@ -13156,6 +15031,10 @@ "description": "One of the following values:", "required": true, "possibleValues": [ + { + "value": "3d-dark-shadow", + "description": "Dark shadow for three-dimensional display elements.
  • 3d-face Face color for three-dimensional display elements and for dialog box backgrounds.
  • 3d-highlight Highlight color for three-dimensional display elements.
  • 3d-light Light color for three-dimensional display elements.
  • 3d-shadow Shadow color for three-dimensional display elements.
  • active-border Active window border.
  • active-caption Active window title bar. Specifies the left side color in the color gradient of an active window's title bar if the gradient effect is enabled.
  • active-caption-gradient Right side color in the color gradient of an active window's title bar.
  • app-workspace Background color of multiple document interface (MDI) applications.
  • button-text Text on push buttons.
  • caption-text Text in caption, size box, and scroll bar arrow box.
  • desktop Desktop background color.
  • disabled-text Grayed (disabled) text.
  • highlight Item(s) selected in a control.
  • highlight-text Text of item(s) selected in a control.
  • hotlight Color for a hyperlink or hot-tracked item.
  • inactive-border Inactive window border.
  • inactive-caption Inactive window caption. Specifies the left side color in the color gradient of an inactive window's title bar if the gradient effect is enabled.
  • inactive-caption-gradient Right side color in the color gradient of an inactive window's title bar.
  • inactive-caption-text Color of text in an inactive caption.
  • info-background Background color for tooltip controls.
  • info-text Text color for tooltip controls.
  • menu Menu background.
  • menu-highlight The color used to highlight menu items when the menu appears as a flat menu.
  • menubar The background color for the menu bar when menus appear as flat menus.
  • menu-text Text in menus.
  • scrollbar Scroll bar gray area.
  • window Window background.
  • window-frame Window frame.
  • window-text Text in windows.
  • " + }, { "value": "3d-dark-shadow", "description": "Dark shadow for three-dimensional display elements." @@ -13275,6 +15154,142 @@ { "value": "window-text", "description": "Text in windows." + }, + { + "value": "alternate-selected-control-text", + "description": "The text on a selected surface in a list or table.
  • control-background The background of a large interface element, such as a browser or table.
  • control The surface of a control.
  • control-text -The text of a control that isn’t disabled.
  • disabled-control-text The text of a control that’s disabled.
  • find-highlight The color of a find indicator.
  • grid The gridlines of an interface element such as a table.
  • header-text The text of a header cell in a table.
  • highlight The virtual light source onscreen.
  • keyboard-focus-indicator The ring that appears around the currently focused control when using the keyboard for interface navigation.
  • label The text of a label containing primary content.
  • link A link to other content.
  • placeholder-text A placeholder string in a control or text view.
  • quaternary-label The text of a label of lesser importance than a tertiary label such as watermark text.
  • scrubber-textured-background The background of a scrubber in the Touch Bar.
  • secondary-label The text of a label of lesser importance than a normal label such as a label used to represent a subheading or additional information.
  • selected-content-background The background for selected content in a key window or view.
  • selected-control The surface of a selected control.
  • selected-control-text The text of a selected control.
  • selected-menu-item The text of a selected menu.
  • selected-text-background The background of selected text.
  • selected-text Selected text.
  • separator A separator between different sections of content.
  • shadow The virtual shadow cast by a raised object onscreen.
  • tertiary-label The text of a label of lesser importance than a secondary label such as a label used to represent disabled text.
  • text-background Text background.
  • text The text in a document.
  • under-page-background The background behind a document's content.
  • unemphasized-selected-content-background The selected content in a non-key window or view.
  • unemphasized-selected-text-background A background for selected text in a non-key window or view.
  • unemphasized-selected-text Selected text in a non-key window or view.
  • window-background The background of a window.
  • window-frame-text The text in the window's titlebar area.
  • " + }, + { + "value": "alternate-selected-control-text", + "description": "The text on a selected surface in a list or table." + }, + { + "value": "control-background", + "description": "The background of a large interface element, such as a browser or table." + }, + { + "value": "control", + "description": "The surface of a control." + }, + { + "value": "control-text", + "description": "" + }, + { + "value": "disabled-control-text", + "description": "The text of a control that’s disabled." + }, + { + "value": "find-highlight", + "description": "The color of a find indicator." + }, + { + "value": "grid", + "description": "The gridlines of an interface element such as a table." + }, + { + "value": "header-text", + "description": "The text of a header cell in a table." + }, + { + "value": "highlight", + "description": "The virtual light source onscreen." + }, + { + "value": "keyboard-focus-indicator", + "description": "The ring that appears around the currently focused control when using the keyboard for interface navigation." + }, + { + "value": "label", + "description": "The text of a label containing primary content." + }, + { + "value": "link", + "description": "A link to other content." + }, + { + "value": "placeholder-text", + "description": "A placeholder string in a control or text view." + }, + { + "value": "quaternary-label", + "description": "The text of a label of lesser importance than a tertiary label such as watermark text." + }, + { + "value": "scrubber-textured-background", + "description": "The background of a scrubber in the Touch Bar." + }, + { + "value": "secondary-label", + "description": "The text of a label of lesser importance than a normal label such as a label used to represent a subheading or additional information." + }, + { + "value": "selected-content-background", + "description": "The background for selected content in a key window or view." + }, + { + "value": "selected-control", + "description": "The surface of a selected control." + }, + { + "value": "selected-control-text", + "description": "The text of a selected control." + }, + { + "value": "selected-menu-item", + "description": "The text of a selected menu." + }, + { + "value": "selected-text-background", + "description": "The background of selected text." + }, + { + "value": "selected-text", + "description": "Selected text." + }, + { + "value": "separator", + "description": "A separator between different sections of content." + }, + { + "value": "shadow", + "description": "The virtual shadow cast by a raised object onscreen." + }, + { + "value": "tertiary-label", + "description": "The text of a label of lesser importance than a secondary label such as a label used to represent disabled text." + }, + { + "value": "text-background", + "description": "Text background." + }, + { + "value": "text", + "description": "The text in a document." + }, + { + "value": "under-page-background", + "description": "The background behind a document's content." + }, + { + "value": "unemphasized-selected-content-background", + "description": "The selected content in a non-key window or view." + }, + { + "value": "unemphasized-selected-text-background", + "description": "A background for selected text in a non-key window or view." + }, + { + "value": "unemphasized-selected-text", + "description": "Selected text in a non-key window or view." + }, + { + "value": "window-background", + "description": "The background of a window." + }, + { + "value": "window-frame-text", + "description": "The text in the window's titlebar area." } ] } @@ -13282,9 +15297,64 @@ "returns": { "type": "String", "collection": false, - "description": "The system color setting in RGB hexadecimal form (#ABCDEF). See the Windows docs for more details." + "description": "The system color setting in RGB hexadecimal form (#ABCDEF). See the Windows docs and the MacOS docs for more details." } }, + { + "name": "getSystemColor", + "signature": "(color)", + "platforms": [ + "macOS" + ], + "description": "Returns one of several standard system colors that automatically adapt to vibrancy and changes in accessibility settings like 'Increase contrast' and 'Reduce transparency'. See Apple Documentation for more details.", + "parameters": [ + { + "name": "color", + "type": "String", + "collection": false, + "description": "One of the following values:", + "required": true, + "possibleValues": [ + { + "value": "blue", + "description": "" + }, + { + "value": "brown", + "description": "" + }, + { + "value": "gray", + "description": "" + }, + { + "value": "green", + "description": "" + }, + { + "value": "orange", + "description": "" + }, + { + "value": "pink", + "description": "" + }, + { + "value": "purple", + "description": "" + }, + { + "value": "red", + "description": "" + }, + { + "value": "yellow", + "description": "" + } + ] + } + ] + }, { "name": "isInvertedColorScheme", "signature": "()", @@ -13294,7 +15364,192 @@ "returns": { "type": "Boolean", "collection": false, - "description": "true if an inverted color scheme, such as a high contrast theme, is active, false otherwise." + "description": "true if an inverted color scheme (a high contrast color scheme with light text and dark backgrounds) is active, false otherwise." + } + }, + { + "name": "isHighContrastColorScheme", + "signature": "()", + "platforms": [ + "Windows" + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "true if a high contrast theme is active, false otherwise." + } + }, + { + "name": "getEffectiveAppearance", + "signature": "()", + "platforms": [ + "macOS" + ], + "description": "Gets the macOS appearance setting that is currently applied to your application, maps to NSApplication.effectiveAppearance Please note that until Electron is built targeting the 10.14 SDK, your application's effectiveAppearance will default to 'light' and won't inherit the OS preference. In the interim in order for your application to inherit the OS preference you must set the NSRequiresAquaSystemAppearance key in your apps Info.plist to false. If you are using electron-packager or electron-forge just set the enableDarwinDarkMode packager option to true. See the Electron Packager API for more details.", + "returns": { + "type": "String", + "collection": false, + "description": "Can be dark, light or unknown.", + "possibleValues": [ + { + "value": "dark" + }, + { + "value": "light" + }, + { + "value": "unknown" + } + ] + } + }, + { + "name": "getAppLevelAppearance", + "signature": "()", + "platforms": [ + "macOS" + ], + "description": "Gets the macOS appearance setting that you have declared you want for your application, maps to NSApplication.appearance. You can use the setAppLevelAppearance API to set this value.", + "returns": { + "type": "String", + "collection": false, + "description": "| null Can be dark, light or unknown.", + "possibleValues": [ + { + "value": "dark" + }, + { + "value": "light" + }, + { + "value": "unknown" + } + ] + } + }, + { + "name": "setAppLevelAppearance", + "signature": "(appearance)", + "platforms": [ + "macOS" + ], + "description": "Sets the appearance setting for your application, this should override the system default and override the value of getEffectiveAppearance.", + "parameters": [ + { + "name": "appearance", + "type": [ + { + "typeName": "String", + "collection": false + }, + { + "typeName": "null", + "collection": false + } + ], + "collection": false, + "description": "Can be `dark` or `light`", + "required": true, + "possibleValues": [ + { + "value": "dark" + }, + { + "value": "light" + } + ] + } + ] + }, + { + "name": "isTrustedAccessibilityClient", + "signature": "(prompt)", + "platforms": [ + "macOS" + ], + "parameters": [ + { + "name": "prompt", + "type": "Boolean", + "collection": false, + "description": "whether or not the user will be informed via prompt if the current process is untrusted.", + "required": true + } + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "true if the current process is a trusted accessibility client and false if it is not." + } + }, + { + "name": "getMediaAccessStatus", + "signature": "(mediaType)", + "platforms": [ + "macOS" + ], + "description": "This user consent was not required until macOS 10.14 Mojave, so this method will always return granted if your system is running 10.13 High Sierra or lower.", + "parameters": [ + { + "name": "mediaType", + "type": "String", + "collection": false, + "description": "`microphone` or `camera`.", + "required": true + } + ], + "returns": { + "type": "String", + "collection": false, + "description": "Can be not-determined, granted, denied, restricted or unknown.", + "possibleValues": [ + { + "value": "not-determined" + }, + { + "value": "granted" + }, + { + "value": "denied" + }, + { + "value": "restricted" + }, + { + "value": "unknown" + } + ] + } + }, + { + "name": "askForMediaAccess", + "signature": "(mediaType)", + "platforms": [ + "macOS" + ], + "description": "Important: In order to properly leverage this API, you must set the NSMicrophoneUsageDescription and NSCameraUsageDescription strings in your app's Info.plist file. The values for these keys will be used to populate the permission dialogs so that the user will be properly informed as to the purpose of the permission request. See Electron Application Distribution for more information about how to set these in the context of Electron. This user consent was not required until macOS 10.14 Mojave, so this method will always return true if your system is running 10.13 High Sierra or lower.", + "parameters": [ + { + "name": "mediaType", + "type": "String", + "collection": false, + "description": "the type of media being requested; can be `microphone`, `camera`.", + "required": true, + "possibleValues": [ + { + "value": "microphone" + }, + { + "value": "camera" + } + ] + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "Boolean", + "description": "A promise that resolves with true if consent was granted and false if it was denied. If an invalid mediaType is passed, the promise will be rejected. If an access request was denied and later is changed through the System Preferences pane, a restart of the app will be required for the new permissions to take effect. If access has already been requested and denied, it must be changed through the preference pane; an alert will not pop up and the promise will resolve with the existing access status." } } ], @@ -13350,20 +15605,65 @@ "name": "invertedColorScheme", "type": "Boolean", "collection": false, - "description": "`true` if an inverted color scheme, such as a high contrast theme, is being used, `false` otherwise.", + "description": "`true` if an inverted color scheme (a high contrast color scheme with light text and dark backgrounds) is being used, `false` otherwise.", "required": true } ] + }, + { + "name": "high-contrast-color-scheme-changed", + "platforms": [ + "Windows" + ], + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "highContrastColorScheme", + "type": "Boolean", + "collection": false, + "description": "`true` if a high contrast theme is being used, `false` otherwise.", + "required": true + } + ] + }, + { + "name": "appearance-changed", + "description": "NOTE: This event is only emitted after you have called startAppLevelAppearanceTrackingOS", + "platforms": [ + "macOS" + ], + "returns": [ + { + "name": "newAppearance", + "type": "String", + "collection": false, + "description": "Can be `dark` or `light`", + "required": true, + "possibleValues": [ + { + "value": "dark" + }, + { + "value": "light" + } + ] + } + ] } ] }, { "name": "Task", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "task", - "websiteUrl": "http://electron.atom.io/docs/api/structures/task", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/task.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/task", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/task.md", "properties": [ { "name": "program", @@ -13411,11 +15711,11 @@ }, { "name": "ThumbarButton", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "thumbar-button", - "websiteUrl": "http://electron.atom.io/docs/api/structures/thumbar-button", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/thumbar-button.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/thumbar-button", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/thumbar-button.md", "properties": [ { "name": "icon", @@ -13455,11 +15755,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "touch-bar", - "websiteUrl": "http://electron.atom.io/docs/api/touch-bar", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/touch-bar.md", + "websiteUrl": "http://electronjs.org/docs/api/touch-bar", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/touch-bar.md", "staticProperties": [ { "name": "TouchBarButton", @@ -13468,11 +15768,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "touch-bar-button", - "websiteUrl": "http://electron.atom.io/docs/api/touch-bar-button", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/touch-bar-button.md", + "websiteUrl": "http://electronjs.org/docs/api/touch-bar-button", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/touch-bar-button.md", "constructorMethod": { "signature": "(options)", "parameters": [ @@ -13562,11 +15862,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "touch-bar-color-picker", - "websiteUrl": "http://electron.atom.io/docs/api/touch-bar-color-picker", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/touch-bar-color-picker.md", + "websiteUrl": "http://electronjs.org/docs/api/touch-bar-color-picker", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/touch-bar-color-picker.md", "constructorMethod": { "signature": "(options)", "parameters": [ @@ -13633,11 +15933,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "touch-bar-group", - "websiteUrl": "http://electron.atom.io/docs/api/touch-bar-group", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/touch-bar-group.md", + "websiteUrl": "http://electronjs.org/docs/api/touch-bar-group", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/touch-bar-group.md", "constructorMethod": { "signature": "(options)", "parameters": [ @@ -13667,11 +15967,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "touch-bar-label", - "websiteUrl": "http://electron.atom.io/docs/api/touch-bar-label", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/touch-bar-label.md", + "websiteUrl": "http://electronjs.org/docs/api/touch-bar-label", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/touch-bar-label.md", "constructorMethod": { "signature": "(options)", "parameters": [ @@ -13722,11 +16022,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "touch-bar-popover", - "websiteUrl": "http://electron.atom.io/docs/api/touch-bar-popover", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/touch-bar-popover.md", + "websiteUrl": "http://electronjs.org/docs/api/touch-bar-popover", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/touch-bar-popover.md", "constructorMethod": { "signature": "(options)", "parameters": [ @@ -13791,11 +16091,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "touch-bar-scrubber", - "websiteUrl": "http://electron.atom.io/docs/api/touch-bar-scrubber", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/touch-bar-scrubber.md", + "websiteUrl": "http://electronjs.org/docs/api/touch-bar-scrubber", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/touch-bar-scrubber.md", "constructorMethod": { "signature": "(options)", "parameters": [ @@ -13930,11 +16230,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "touch-bar-segmented-control", - "websiteUrl": "http://electron.atom.io/docs/api/touch-bar-segmented-control", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/touch-bar-segmented-control.md", + "websiteUrl": "http://electronjs.org/docs/api/touch-bar-segmented-control", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/touch-bar-segmented-control.md", "constructorMethod": { "signature": "(options)", "parameters": [ @@ -14076,11 +16376,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "touch-bar-slider", - "websiteUrl": "http://electron.atom.io/docs/api/touch-bar-slider", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/touch-bar-slider.md", + "websiteUrl": "http://electronjs.org/docs/api/touch-bar-slider", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/touch-bar-slider.md", "constructorMethod": { "signature": "(options)", "parameters": [ @@ -14173,11 +16473,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "touch-bar-spacer", - "websiteUrl": "http://electron.atom.io/docs/api/touch-bar-spacer", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/touch-bar-spacer.md", + "websiteUrl": "http://electronjs.org/docs/api/touch-bar-spacer", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/touch-bar-spacer.md", "constructorMethod": { "signature": "(options)", "parameters": [ @@ -14330,54 +16630,127 @@ } ] }, + { + "name": "TraceCategoriesAndOptions", + "version": "5.0.0-beta.3", + "type": "Structure", + "slug": "trace-categories-and-options", + "websiteUrl": "http://electronjs.org/docs/api/structures/trace-categories-and-options", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/trace-categories-and-options.md", + "properties": [ + { + "name": "categoryFilter", + "type": "String", + "collection": false, + "description": "– is a filter to control what category groups should be traced. A filter can have an optional prefix to exclude category groups that contain a matching category. Having both included and excluded category patterns in the same list is not supported. Examples: test_MyTest*, test_MyTest*,test_OtherStuff, -excluded_category1,-excluded_category2.", + "required": true + }, + { + "name": "traceOptions", + "type": "String", + "collection": false, + "description": "Controls what kind of tracing is enabled, it is a comma-delimited sequence of the following strings: record-until-full, record-continuously, trace-to-console, enable-sampling, enable-systrace, e.g. 'record-until-full,enable-sampling'. The first 3 options are trace recording modes and hence mutually exclusive. If more than one trace recording modes appear in the traceOptions string, the last one takes precedence. If none of the trace recording modes are specified, recording mode is record-until-full. The trace option will first be reset to the default option (record_mode set to record-until-full, enable_sampling and enable_systrace set to false) before options parsed from traceOptions are applied on it.", + "required": true + } + ] + }, + { + "name": "TraceConfig", + "version": "5.0.0-beta.3", + "type": "Structure", + "slug": "trace-config", + "websiteUrl": "http://electronjs.org/docs/api/structures/trace-config", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/trace-config.md", + "properties": [ + { + "name": "included_categories", + "type": "String", + "collection": true, + "description": "", + "required": false + }, + { + "name": "excluded_categories", + "type": "String", + "collection": true, + "description": "", + "required": false + }, + { + "name": "memory_dump_config", + "type": "Object", + "collection": false, + "description": "", + "required": false, + "properties": [] + } + ] + }, { "name": "Transaction", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "transaction", - "websiteUrl": "http://electron.atom.io/docs/api/structures/transaction", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/transaction.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/transaction", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/transaction.md", "properties": [ { "name": "transactionIdentifier", "type": "String", "collection": false, - "description": "", + "description": "A string that uniquely identifies a successful payment transaction.", "required": true }, { "name": "transactionDate", "type": "String", "collection": false, - "description": "", + "description": "The date the transaction was added to the App Store’s payment queue.", "required": true }, { "name": "originalTransactionIdentifier", "type": "String", "collection": false, - "description": "", + "description": "The identifier of the restored transaction by the App Store.", "required": true }, { "name": "transactionState", "type": "String", "collection": false, - "description": "The transaction sate (\"purchasing\", \"purchased\", \"failed\", \"restored\", or \"deferred\")", - "required": true + "description": "The transaction state, can be purchasing, purchased, failed, restored or deferred.", + "required": true, + "possibleValues": [ + { + "value": "purchasing" + }, + { + "value": "purchased" + }, + { + "value": "failed" + }, + { + "value": "restored" + }, + { + "value": "deferred" + } + ] }, { "name": "errorCode", "type": "Integer", "collection": false, - "description": "", + "description": "The error code if an error occurred while processing the transaction.", "required": true }, { "name": "errorMessage", "type": "String", "collection": false, - "description": "", + "description": "The error message if an error occurred while processing the transaction.", "required": true }, { @@ -14391,14 +16764,14 @@ "name": "productIdentifier", "type": "String", "collection": false, - "description": "", + "description": "The identifier of the purchased product.", "required": true }, { "name": "quantity", "type": "Integer", "collection": false, - "description": "", + "description": "The quantity purchased.", "required": true } ] @@ -14412,11 +16785,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "tray", - "websiteUrl": "http://electron.atom.io/docs/api/tray", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/tray.md", + "websiteUrl": "http://electronjs.org/docs/api/tray", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/tray.md", "constructorMethod": { "signature": "(image)", "parameters": [ @@ -14476,7 +16849,16 @@ "parameters": [ { "name": "image", - "type": "NativeImage", + "type": [ + { + "typeName": "NativeImage", + "collection": false + }, + { + "typeName": "String", + "collection": false + } + ], "collection": false, "required": true } @@ -14542,6 +16924,34 @@ } ] }, + { + "name": "setIgnoreDoubleClickEvents", + "signature": "(ignore)", + "platforms": [ + "macOS" + ], + "description": "Sets the option to ignore double click events. Ignoring these events allows you to detect every individual click of the tray icon. This value is set to false by default.", + "parameters": [ + { + "name": "ignore", + "type": "Boolean", + "collection": false, + "required": true + } + ] + }, + { + "name": "getIgnoreDoubleClickEvents", + "signature": "()", + "platforms": [ + "macOS" + ], + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether double click events will be ignored." + } + }, { "name": "displayBalloon", "signature": "(options)", @@ -14621,7 +17031,16 @@ "parameters": [ { "name": "menu", - "type": "Menu", + "type": [ + { + "typeName": "Menu", + "collection": false + }, + { + "typeName": "null", + "collection": false + } + ], "collection": false, "required": true } @@ -14886,11 +17305,11 @@ }, { "name": "UploadBlob", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "upload-blob", - "websiteUrl": "http://electron.atom.io/docs/api/structures/upload-blob", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/upload-blob.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/upload-blob", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/upload-blob.md", "properties": [ { "name": "type", @@ -14910,11 +17329,11 @@ }, { "name": "UploadData", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "upload-data", - "websiteUrl": "http://electron.atom.io/docs/api/structures/upload-data", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/upload-data.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/upload-data", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/upload-data.md", "properties": [ { "name": "bytes", @@ -14941,11 +17360,11 @@ }, { "name": "UploadFile", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "upload-file", - "websiteUrl": "http://electron.atom.io/docs/api/structures/upload-file", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/upload-file.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/upload-file", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/upload-file.md", "properties": [ { "name": "type", @@ -14984,58 +17403,13 @@ } ] }, - { - "name": "UploadFileSystem", - "version": "2.0.0", - "type": "Structure", - "slug": "upload-file-system", - "websiteUrl": "http://electron.atom.io/docs/api/structures/upload-file-system", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/upload-file-system.md", - "properties": [ - { - "name": "type", - "type": "String", - "collection": false, - "description": "fileSystem.", - "required": true - }, - { - "name": "filsSystemURL", - "type": "String", - "collection": false, - "description": "FileSystem url to read data for upload.", - "required": true - }, - { - "name": "offset", - "type": "Integer", - "collection": false, - "description": "Defaults to 0.", - "required": true - }, - { - "name": "length", - "type": "Integer", - "collection": false, - "description": "Number of bytes to read from offset. Defaults to 0.", - "required": true - }, - { - "name": "modificationTime", - "type": "Double", - "collection": false, - "description": "Last Modification time in number of seconds since the UNIX epoch.", - "required": true - } - ] - }, { "name": "UploadRawData", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "upload-raw-data", - "websiteUrl": "http://electron.atom.io/docs/api/structures/upload-raw-data", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/upload-raw-data.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/upload-raw-data", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/upload-raw-data.md", "properties": [ { "name": "type", @@ -15060,11 +17434,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "web-contents", - "websiteUrl": "http://electron.atom.io/docs/api/web-contents", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/web-contents.md", + "websiteUrl": "http://electronjs.org/docs/api/web-contents", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/web-contents.md", "methods": [ { "name": "getAllWebContents", @@ -15110,11 +17484,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "web-contents", - "websiteUrl": "http://electron.atom.io/docs/api/web-contents", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/web-contents.md", + "websiteUrl": "http://electronjs.org/docs/api/web-contents", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/web-contents.md", "instanceName": "contents", "instanceMethods": [ { @@ -15136,9 +17510,18 @@ "properties": [ { "name": "httpReferrer", - "type": "String", + "type": [ + { + "typeName": "String", + "collection": false + }, + { + "typeName": "Referrer", + "collection": false + } + ], "collection": false, - "description": "A HTTP Referrer url.", + "description": "An HTTP Referrer url.", "required": false }, { @@ -15166,10 +17549,6 @@ "typeName": "UploadFile", "collection": true }, - { - "typeName": "UploadFileSystem", - "collection": true - }, { "typeName": "UploadBlob", "collection": true @@ -15188,11 +17567,17 @@ } ] } - ] + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "void", + "description": "the promise will resolve when the page has finished loading (see did-finish-load), and rejects if the page fails to load (see did-fail-load)." + } }, { "name": "loadFile", - "signature": "(filePath)", + "signature": "(filePath[, options])", "description": "Loads the given file in the window, filePath should be a path to an HTML file relative to the root of your application. For instance an app structure like this: Would require code like this", "parameters": [ { @@ -15200,8 +17585,44 @@ "type": "String", "collection": false, "required": true + }, + { + "name": "options", + "type": "Object", + "collection": false, + "required": false, + "properties": [ + { + "name": "query", + "type": "Object", + "collection": false, + "description": "Passed to url.format().", + "required": false, + "properties": [] + }, + { + "name": "search", + "type": "String", + "collection": false, + "description": "Passed to url.format().", + "required": false + }, + { + "name": "hash", + "type": "String", + "collection": false, + "description": "Passed to url.format().", + "required": false + } + ] } - ] + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "void", + "description": "the promise will resolve when the page has finished loading (see did-finish-load), and rejects if the page fails to load (see did-fail-load)." + } }, { "name": "downloadURL", @@ -15457,6 +17878,7 @@ "returns": { "type": "Promise", "collection": false, + "innerType": "any", "description": "A promise that resolves with the result of the executed code or is rejected if the result of the code is a rejected promise." } }, @@ -15498,6 +17920,15 @@ "description": "Whether this page has been muted." } }, + { + "name": "isCurrentlyAudible", + "signature": "()", + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether audio is currently playing." + } + }, { "name": "setZoomFactor", "signature": "(factor)", @@ -15514,25 +17945,12 @@ }, { "name": "getZoomFactor", - "signature": "(callback)", - "description": "Sends a request to get current zoom factor, the callback will be called with callback(zoomFactor).", - "parameters": [ - { - "name": "callback", - "type": "Function", - "collection": false, - "required": true, - "parameters": [ - { - "name": "zoomFactor", - "type": "Number", - "collection": false, - "description": "", - "required": true - } - ] - } - ] + "signature": "()", + "returns": { + "type": "Number", + "collection": false, + "description": "the current zoom factor." + } }, { "name": "setZoomLevel", @@ -15550,25 +17968,12 @@ }, { "name": "getZoomLevel", - "signature": "(callback)", - "description": "Sends a request to get current zoom level, the callback will be called with callback(zoomLevel).", - "parameters": [ - { - "name": "callback", - "type": "Function", - "collection": false, - "required": true, - "parameters": [ - { - "name": "zoomLevel", - "type": "Number", - "collection": false, - "description": "", - "required": true - } - ] - } - ] + "signature": "()", + "returns": { + "type": "Number", + "collection": false, + "description": "the current zoom level." + } }, { "name": "setVisualZoomLevelLimits", @@ -15804,13 +18209,13 @@ { "name": "capturePage", "signature": "([rect, ]callback)", - "description": "Captures a snapshot of the page within rect. Upon completion callback will be called with callback(image). The image is an instance of NativeImage that stores data of the snapshot. Omitting rect will capture the whole visible page.", + "description": "Captures a snapshot of the page within rect. Upon completion callback will be called with callback(image). The image is an instance of NativeImage that stores data of the snapshot. Omitting rect will capture the whole visible page. Deprecated Soon", "parameters": [ { "name": "rect", "type": "Rectangle", "collection": false, - "description": "The area of the page to be captured.", + "description": "The bounds to capture", "required": false }, { @@ -15830,6 +18235,20 @@ } ] }, + { + "name": "capturePage", + "signature": "([rect])", + "description": "Captures a snapshot of the page within rect. Omitting rect will capture the whole visible page.", + "parameters": [ + { + "name": "rect", + "type": "Rectangle", + "collection": false, + "description": "The area of the page to be captured.", + "required": false + } + ] + }, { "name": "hasServiceWorker", "signature": "(callback)", @@ -15887,7 +18306,7 @@ { "name": "print", "signature": "([options], [callback])", - "description": "Prints window's web page. When silent is set to true, Electron will pick the system's default printer if deviceName is empty and the default settings for printing. Calling window.print() in web page is equivalent to calling webContents.print({silent: false, printBackground: false, deviceName: ''}). Use page-break-before: always; CSS style to force to print to a new page.", + "description": "Prints window's web page. When silent is set to true, Electron will pick the system's default printer if deviceName is empty and the default settings for printing. Calling window.print() in web page is equivalent to calling webContents.print({ silent: false, printBackground: false, deviceName: '' }). Use page-break-before: always; CSS style to force to print to a new page.", "parameters": [ { "name": "options", @@ -15955,7 +18374,16 @@ }, { "name": "pageSize", - "type": "String", + "type": [ + { + "typeName": "String", + "collection": false + }, + { + "typeName": "Size", + "collection": false + } + ], "collection": false, "description": "Specify page size of the generated PDF. Can be A3, A4, A5, Legal, Letter, Tabloid or an Object containing height and width in microns.", "required": false @@ -16077,6 +18505,13 @@ "value": "detach" } ] + }, + { + "name": "activate", + "type": "Boolean", + "collection": false, + "description": "Whether to bring the opened devtools window to the foreground. The default is true.", + "required": false } ] } @@ -16153,6 +18588,31 @@ } ] }, + { + "name": "sendToFrame", + "signature": "(frameId, channel[, arg1][, arg2][, ...])", + "description": "Send an asynchronous message to a specific frame in a renderer process via channel. Arguments will be serialized as JSON internally and as such no functions or prototype chains will be included. The renderer process can handle the message by listening to channel with the ipcRenderer module. If you want to get the frameId of a given renderer context you should use the webFrame.routingId value. E.g. You can also read frameId from all incoming IPC messages in the main process.", + "parameters": [ + { + "name": "frameId", + "type": "Integer", + "collection": false, + "required": true + }, + { + "name": "channel", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "...args", + "type": "any", + "collection": true, + "required": true + } + ] + }, { "name": "enableDeviceEmulation", "signature": "(parameters)", @@ -16192,7 +18652,7 @@ "name": "viewPosition", "type": "Point", "collection": false, - "description": "Position the view on the screen (screenPosition == mobile) (default: {x: 0, y: 0}).", + "description": "Position the view on the screen (screenPosition == mobile) (default: { x: 0, y: 0 }).", "required": true }, { @@ -16289,7 +18749,7 @@ { "name": "beginFrameSubscription", "signature": "([onlyDirty ,]callback)", - "description": "Begin subscribing for presentation events and captured frames, the callback will be called with callback(frameBuffer, dirtyRect) when there is a presentation event. The frameBuffer is a Buffer that contains raw pixel data. On most machines, the pixel data is effectively stored in 32bit BGRA format, but the actual representation depends on the endianness of the processor (most modern processors are little-endian, on machines with big-endian processors the data is in 32bit ARGB format). The dirtyRect is an object with x, y, width, height properties that describes which part of the page was repainted. If onlyDirty is set to true, frameBuffer will only contain the repainted area. onlyDirty defaults to false.", + "description": "Begin subscribing for presentation events and captured frames, the callback will be called with callback(image, dirtyRect) when there is a presentation event. The image is an instance of NativeImage that stores the captured frame. The dirtyRect is an object with x, y, width, height properties that describes which part of the page was repainted. If onlyDirty is set to true, image will only contain the repainted area. onlyDirty defaults to false.", "parameters": [ { "name": "onlyDirty", @@ -16305,8 +18765,8 @@ "required": true, "parameters": [ { - "name": "frameBuffer", - "type": "Buffer", + "name": "image", + "type": "NativeImage", "collection": false, "description": "", "required": true @@ -16419,44 +18879,6 @@ ], "description": "Shows pop-up dictionary that searches the selected word on the page." }, - { - "name": "setSize", - "signature": "(options)", - "description": "Set the size of the page. This is only supported for guest contents.", - "parameters": [ - { - "name": "options", - "type": "Object", - "collection": false, - "required": true, - "properties": [ - { - "name": "normal", - "type": "Object", - "collection": false, - "description": "Normal size of the page. This can be used in combination with the attribute to manually resize the webview guest contents.", - "required": false, - "properties": [ - { - "name": "width", - "type": "Integer", - "collection": false, - "description": "", - "required": true - }, - { - "name": "height", - "type": "Integer", - "collection": false, - "description": "", - "required": true - } - ] - } - ] - } - ] - }, { "name": "isOffscreen", "signature": "()", @@ -16559,7 +18981,78 @@ "returns": { "type": "Integer", "collection": false, - "description": "The pid of the associated renderer process." + "description": "The operating system pid of the associated renderer process." + } + }, + { + "name": "getProcessId", + "signature": "()", + "returns": { + "type": "Integer", + "collection": false, + "description": "The Chromium internal pid of the associated renderer. Can be compared to the frameProcessId passed by frame specific navigation events (e.g. did-frame-navigate)" + } + }, + { + "name": "takeHeapSnapshot", + "signature": "(filePath)", + "description": "Takes a V8 heap snapshot and saves it to filePath.", + "parameters": [ + { + "name": "filePath", + "type": "String", + "collection": false, + "description": "Path to the output file.", + "required": true + } + ], + "returns": { + "type": "Promise", + "collection": false, + "innerType": "void", + "description": "Indicates whether the snapshot has been created successfully." + } + }, + { + "name": "setBackgroundThrottling", + "signature": "(allowed)", + "description": "Controls whether or not this WebContents will throttle animations and timers when the page becomes backgrounded. This also affects the Page Visibility API.", + "parameters": [ + { + "name": "allowed", + "type": "Boolean", + "collection": false, + "required": true + } + ] + }, + { + "name": "getType", + "signature": "()", + "returns": { + "type": "String", + "collection": false, + "description": "the type of the webContent. Can be backgroundPage, window, browserView, remote, webview or offscreen.", + "possibleValues": [ + { + "value": "backgroundPage" + }, + { + "value": "window" + }, + { + "value": "browserView" + }, + { + "value": "remote" + }, + { + "value": "webview" + }, + { + "value": "offscreen" + } + ] } } ], @@ -16633,6 +19126,18 @@ "type": "Boolean", "collection": false, "required": true + }, + { + "name": "frameProcessId", + "type": "Integer", + "collection": false, + "required": true + }, + { + "name": "frameRoutingId", + "type": "Integer", + "collection": false, + "required": true } ] }, @@ -16651,6 +19156,18 @@ "type": "Boolean", "collection": false, "required": true + }, + { + "name": "frameProcessId", + "type": "Integer", + "collection": false, + "required": true + }, + { + "name": "frameRoutingId", + "type": "Integer", + "collection": false, + "required": true } ] }, @@ -16662,120 +19179,6 @@ "name": "did-stop-loading", "description": "Corresponds to the points in time when the spinner of the tab stopped spinning." }, - { - "name": "did-get-response-details", - "description": "Emitted when details regarding a requested resource are available. status indicates the socket connection to download the resource.", - "returns": [ - { - "name": "event", - "type": "Event", - "collection": false, - "required": true - }, - { - "name": "status", - "type": "Boolean", - "collection": false, - "required": true - }, - { - "name": "newURL", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "originalURL", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "httpResponseCode", - "type": "Integer", - "collection": false, - "required": true - }, - { - "name": "requestMethod", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "referrer", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "headers", - "type": "Object", - "collection": false, - "required": true - }, - { - "name": "resourceType", - "type": "String", - "collection": false, - "required": true - } - ] - }, - { - "name": "did-get-redirect-request", - "description": "Emitted when a redirect is received while requesting a resource.", - "returns": [ - { - "name": "event", - "type": "Event", - "collection": false, - "required": true - }, - { - "name": "oldURL", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "newURL", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "isMainFrame", - "type": "Boolean", - "collection": false, - "required": true - }, - { - "name": "httpResponseCode", - "type": "Integer", - "collection": false, - "required": true - }, - { - "name": "requestMethod", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "referrer", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "headers", - "type": "Object", - "collection": false, - "required": true - } - ] - }, { "name": "dom-ready", "description": "Emitted when the document in the given frame is loaded.", @@ -16869,6 +19272,13 @@ "collection": true, "description": "The non-standard features (features not handled by Chromium or Electron) given to `window.open()`.", "required": true + }, + { + "name": "referrer", + "type": "Referrer", + "collection": false, + "description": "The referrer that will be passed to the new window. May or may not result in the `Referer` header being sent, depending on the referrer policy.", + "required": true } ] }, @@ -16891,8 +19301,8 @@ ] }, { - "name": "did-navigate", - "description": "Emitted when a navigation is done. This event is not emitted for in-page navigations, such as clicking anchor links or updating the window.location.hash. Use did-navigate-in-page event for this purpose.", + "name": "did-start-navigation", + "description": "Emitted when any frame (including main) starts navigating. isInplace will be true for in-page navigations.", "returns": [ { "name": "event", @@ -16905,12 +19315,202 @@ "type": "String", "collection": false, "required": true + }, + { + "name": "isInPlace", + "type": "Boolean", + "collection": false, + "required": true + }, + { + "name": "isMainFrame", + "type": "Boolean", + "collection": false, + "required": true + }, + { + "name": "frameProcessId", + "type": "Integer", + "collection": false, + "required": true + }, + { + "name": "frameRoutingId", + "type": "Integer", + "collection": false, + "required": true + } + ] + }, + { + "name": "will-redirect", + "description": "Emitted as a server side redirect occurs during navigation. For example a 302 redirect. This event will be emitted after did-start-navigation and always before the did-redirect-navigation event for the same navigation. Calling event.preventDefault() will prevent the navigation (not just the redirect).", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "url", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "isInPlace", + "type": "Boolean", + "collection": false, + "required": true + }, + { + "name": "isMainFrame", + "type": "Boolean", + "collection": false, + "required": true + }, + { + "name": "frameProcessId", + "type": "Integer", + "collection": false, + "required": true + }, + { + "name": "frameRoutingId", + "type": "Integer", + "collection": false, + "required": true + } + ] + }, + { + "name": "did-redirect-navigation", + "description": "Emitted after a server side redirect occurs during navigation. For example a 302 redirect. This event can not be prevented, if you want to prevent redirects you should checkout out the will-redirect event above.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "url", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "isInPlace", + "type": "Boolean", + "collection": false, + "required": true + }, + { + "name": "isMainFrame", + "type": "Boolean", + "collection": false, + "required": true + }, + { + "name": "frameProcessId", + "type": "Integer", + "collection": false, + "required": true + }, + { + "name": "frameRoutingId", + "type": "Integer", + "collection": false, + "required": true + } + ] + }, + { + "name": "did-navigate", + "description": "Emitted when a main frame navigation is done. This event is not emitted for in-page navigations, such as clicking anchor links or updating the window.location.hash. Use did-navigate-in-page event for this purpose.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "url", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "httpResponseCode", + "type": "Integer", + "collection": false, + "description": "-1 for non HTTP navigations", + "required": true + }, + { + "name": "httpStatusText", + "type": "String", + "collection": false, + "description": "empty for non HTTP navigations", + "required": true + } + ] + }, + { + "name": "did-frame-navigate", + "description": "Emitted when any frame navigation is done. This event is not emitted for in-page navigations, such as clicking anchor links or updating the window.location.hash. Use did-navigate-in-page event for this purpose.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "url", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "httpResponseCode", + "type": "Integer", + "collection": false, + "description": "-1 for non HTTP navigations", + "required": true + }, + { + "name": "httpStatusText", + "type": "String", + "collection": false, + "description": "empty for non HTTP navigations,", + "required": true + }, + { + "name": "isMainFrame", + "type": "Boolean", + "collection": false, + "required": true + }, + { + "name": "frameProcessId", + "type": "Integer", + "collection": false, + "required": true + }, + { + "name": "frameRoutingId", + "type": "Integer", + "collection": false, + "required": true } ] }, { "name": "did-navigate-in-page", - "description": "Emitted when an in-page navigation happened. When in-page navigation happens, the page URL changes but does not cause navigation outside of the page. Examples of this occurring are when anchor links are clicked or when the DOM hashchange event is triggered.", + "description": "Emitted when an in-page navigation happened in any frame. When in-page navigation happens, the page URL changes but does not cause navigation outside of the page. Examples of this occurring are when anchor links are clicked or when the DOM hashchange event is triggered.", "returns": [ { "name": "event", @@ -16929,6 +19529,18 @@ "type": "Boolean", "collection": false, "required": true + }, + { + "name": "frameProcessId", + "type": "Integer", + "collection": false, + "required": true + }, + { + "name": "frameRoutingId", + "type": "Integer", + "collection": false, + "required": true } ] }, @@ -16962,6 +19574,14 @@ } ] }, + { + "name": "unresponsive", + "description": "Emitted when the web page becomes unresponsive." + }, + { + "name": "responsive", + "description": "Emitted when the unresponsive web page becomes responsive again." + }, { "name": "plugin-crashed", "description": "Emitted when a plugin process has crashed.", @@ -17803,7 +20423,7 @@ "name": "params", "type": "Object", "collection": false, - "description": "The other `` parameters such as the `src` URL. This object can be modified to adjust the parameters of the guest page.", + "description": "The other `", "required": true } ] @@ -17822,7 +20442,7 @@ "name": "webContents", "type": "WebContents", "collection": false, - "description": "The guest web contents that is used by the ``.", + "description": "The guest web contents that is used by the `", "required": true } ] @@ -17831,6 +20451,12 @@ "name": "console-message", "description": "Emitted when the associated window logs a console message. Will not be emitted for windows with offscreen rendering enabled.", "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, { "name": "level", "type": "Integer", @@ -17856,6 +20482,186 @@ "required": true } ] + }, + { + "name": "preload-error", + "description": "Emitted when the preload script preloadPath throws an unhandled exception error.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "preloadPath", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "error", + "type": "Error", + "collection": false, + "required": true + } + ] + }, + { + "name": "ipc-message", + "description": "Emitted when the renderer process sends an asynchronous message via ipcRenderer.send().", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "channel", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "...args", + "type": "any", + "collection": true, + "required": true + } + ] + }, + { + "name": "ipc-message-sync", + "description": "Emitted when the renderer process sends a synchronous message via ipcRenderer.sendSync().", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "channel", + "type": "String", + "collection": false, + "required": true + }, + { + "name": "...args", + "type": "any", + "collection": true, + "required": true + } + ] + }, + { + "name": "desktop-capturer-get-sources", + "description": "Emitted when desktopCapturer.getSources() is called in the renderer process. Calling event.preventDefault() will make it return empty sources.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + } + ] + }, + { + "name": "remote-require", + "description": "Emitted when remote.require() is called in the renderer process. Calling event.preventDefault() will prevent the module from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "moduleName", + "type": "String", + "collection": false, + "required": true + } + ] + }, + { + "name": "remote-get-global", + "description": "Emitted when remote.getGlobal() is called in the renderer process. Calling event.preventDefault() will prevent the global from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "globalName", + "type": "String", + "collection": false, + "required": true + } + ] + }, + { + "name": "remote-get-builtin", + "description": "Emitted when remote.getBuiltin() is called in the renderer process. Calling event.preventDefault() will prevent the module from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "moduleName", + "type": "String", + "collection": false, + "required": true + } + ] + }, + { + "name": "remote-get-current-window", + "description": "Emitted when remote.getCurrentWindow() is called in the renderer process. Calling event.preventDefault() will prevent the object from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + } + ] + }, + { + "name": "remote-get-current-web-contents", + "description": "Emitted when remote.getCurrentWebContents() is called in the renderer process. Calling event.preventDefault() will prevent the object from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + } + ] + }, + { + "name": "remote-get-guest-web-contents", + "description": "Emitted when .getWebContents() is called in the renderer process. Calling event.preventDefault() will prevent the object from being returned. Custom value can be returned by setting event.returnValue.", + "returns": [ + { + "name": "event", + "type": "Event", + "collection": false, + "required": true + }, + { + "name": "guestWebContents", + "type": "WebContents", + "collection": false, + "required": true + } + ] } ] }, @@ -17866,11 +20672,11 @@ "main": false, "renderer": true }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Module", "slug": "web-frame", - "websiteUrl": "http://electron.atom.io/docs/api/web-frame", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/web-frame.md", + "websiteUrl": "http://electronjs.org/docs/api/web-frame", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/web-frame.md", "methods": [ { "name": "setZoomFactor", @@ -17958,8 +20764,8 @@ }, { "name": "setSpellCheckProvider", - "signature": "(language, autoCorrectWord, provider)", - "description": "Sets a provider for spell checking in input fields and text areas. The provider must be an object that has a spellCheck method that returns whether the word passed is correctly spelled. An example of using node-spellchecker as provider:", + "signature": "(language, provider)", + "description": "Sets a provider for spell checking in input fields and text areas. The provider must be an object that has a spellCheck method that accepts an array of individual words for spellchecking. The spellCheck function runs asynchronously and calls the callback function with an array of misspelt words when complete. An example of using node-spellchecker as provider:", "parameters": [ { "name": "language", @@ -17967,12 +20773,6 @@ "collection": false, "required": true }, - { - "name": "autoCorrectWord", - "type": "Boolean", - "collection": false, - "required": true - }, { "name": "provider", "type": "Object", @@ -17983,15 +20783,31 @@ "name": "spellCheck", "type": "Function", "collection": false, - "description": "Returns Boolean.", + "description": ".", "required": true, "parameters": [ { - "name": "text", + "name": "words", "type": "String", - "collection": false, + "collection": true, "description": "", "required": true + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "description": "", + "required": true, + "parameters": [ + { + "name": "misspeltWords", + "type": "String", + "collection": true, + "description": "", + "required": true + } + ] } ] } @@ -17999,88 +20815,6 @@ } ] }, - { - "name": "registerURLSchemeAsSecure", - "signature": "(scheme)", - "description": "Registers the scheme as secure scheme. Secure schemes do not trigger mixed content warnings. For example, https and data are secure schemes because they cannot be corrupted by active network attackers.", - "parameters": [ - { - "name": "scheme", - "type": "String", - "collection": false, - "required": true - } - ] - }, - { - "name": "registerURLSchemeAsBypassingCSP", - "signature": "(scheme)", - "description": "Resources will be loaded from this scheme regardless of the current page's Content Security Policy.", - "parameters": [ - { - "name": "scheme", - "type": "String", - "collection": false, - "required": true - } - ] - }, - { - "name": "registerURLSchemeAsPrivileged", - "signature": "(scheme[, options])", - "description": "Registers the scheme as secure, bypasses content security policy for resources, allows registering ServiceWorker and supports fetch API. Specify an option with the value of false to omit it from the registration. An example of registering a privileged scheme, without bypassing Content Security Policy:", - "parameters": [ - { - "name": "scheme", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "options", - "type": "Object", - "collection": false, - "required": false, - "properties": [ - { - "name": "secure", - "type": "Boolean", - "collection": false, - "description": "Default true.", - "required": false - }, - { - "name": "bypassCSP", - "type": "Boolean", - "collection": false, - "description": "Default true.", - "required": false - }, - { - "name": "allowServiceWorkers", - "type": "Boolean", - "collection": false, - "description": "Default true.", - "required": false - }, - { - "name": "supportFetchAPI", - "type": "Boolean", - "collection": false, - "description": "Default true.", - "required": false - }, - { - "name": "corsEnabled", - "type": "Boolean", - "collection": false, - "description": "Default true.", - "required": false - } - ] - } - ] - }, { "name": "insertText", "signature": "(text)", @@ -18132,18 +20866,20 @@ "returns": { "type": "Promise", "collection": false, + "innerType": "any", "description": "A promise that resolves with the result of the executed code or is rejected if the result of the code is a rejected promise." } }, { "name": "executeJavaScriptInIsolatedWorld", "signature": "(worldId, scripts[, userGesture, callback])", - "description": "Work like executeJavaScript but evaluates scripts in isolated context.", + "description": "Work like executeJavaScript but evaluates scripts in an isolated context.", "parameters": [ { "name": "worldId", "type": "Integer", "collection": false, + "description": "The ID of the world to run the javascript in, `0` is the default world, `999` is the world used by Electrons `contextIsolation` feature. You can provide any integer here.", "required": true }, { @@ -18180,12 +20916,16 @@ { "name": "setIsolatedWorldContentSecurityPolicy", "signature": "(worldId, csp)", + "platforms": [ + "(Deprecated)" + ], "description": "Set the content security policy of the isolated world.", "parameters": [ { "name": "worldId", "type": "Integer", "collection": false, + "description": "The ID of the world to run the javascript in, `0` is the default world, `999` is the world used by Electrons `contextIsolation` feature. You can provide any integer here.", "required": true }, { @@ -18199,12 +20939,16 @@ { "name": "setIsolatedWorldHumanReadableName", "signature": "(worldId, name)", + "platforms": [ + "(Deprecated)" + ], "description": "Set the name of the isolated world. Useful in devtools.", "parameters": [ { "name": "worldId", "type": "Integer", "collection": false, + "description": "The ID of the world to run the javascript in, `0` is the default world, `999` is the world used by Electrons `contextIsolation` feature. You can provide any integer here.", "required": true }, { @@ -18218,12 +20962,16 @@ { "name": "setIsolatedWorldSecurityOrigin", "signature": "(worldId, securityOrigin)", + "platforms": [ + "(Deprecated)" + ], "description": "Set the security origin of the isolated world.", "parameters": [ { "name": "worldId", "type": "Integer", "collection": false, + "description": "The ID of the world to run the javascript in, `0` is the default world, `999` is the world used by Electrons `contextIsolation` feature. You can provide any integer here.", "required": true }, { @@ -18234,6 +20982,49 @@ } ] }, + { + "name": "setIsolatedWorldInfo", + "signature": "(worldId, info)", + "description": "Set the security origin, content security policy and name of the isolated world. Note: If the csp is specified, then the securityOrigin also has to be specified.", + "parameters": [ + { + "name": "worldId", + "type": "Integer", + "collection": false, + "description": "The ID of the world to run the javascript in, `0` is the default world, `999` is the world used by Electrons `contextIsolation` feature. You can provide any integer here.", + "required": true + }, + { + "name": "info", + "type": "Object", + "collection": false, + "required": true, + "properties": [ + { + "name": "securityOrigin", + "type": "String", + "collection": false, + "description": "Security origin for the isolated world.", + "required": false + }, + { + "name": "csp", + "type": "String", + "collection": false, + "description": "Content Security Policy for the isolated world.", + "required": false + }, + { + "name": "name", + "type": "String", + "collection": false, + "description": "Name for isolated world. Useful in devtools.", + "required": false + } + ] + } + ] + }, { "name": "getResourceUsage", "signature": "()", @@ -18249,6 +21040,13 @@ "description": "", "required": true }, + { + "name": "scripts", + "type": "MemoryUsageDetails", + "collection": false, + "description": "", + "required": true + }, { "name": "cssStyleSheets", "type": "MemoryUsageDetails", @@ -18284,6 +21082,97 @@ "name": "clearCache", "signature": "()", "description": "Attempts to free memory that is no longer being used (like images from a previous navigation). Note that blindly calling this method probably makes Electron slower since it will have to refill these emptied caches, you should only call it if an event in your app has occurred that makes you think your page is actually using less memory (i.e. you have navigated from a super heavy page to a mostly empty one, and intend to stay there)." + }, + { + "name": "getFrameForSelector", + "signature": "(selector)", + "parameters": [ + { + "name": "selector", + "type": "String", + "collection": false, + "description": "CSS selector for a frame element.", + "required": true + } + ], + "returns": { + "type": "WebFrame", + "collection": false, + "description": "The frame element in webFrame's document selected by selector, null would be returned if selector does not select a frame or if the frame is not in the current renderer process." + } + }, + { + "name": "findFrameByName", + "signature": "(name)", + "parameters": [ + { + "name": "name", + "type": "String", + "collection": false, + "required": true + } + ], + "returns": { + "type": "WebFrame", + "collection": false, + "description": "A child of webFrame with the supplied name, null would be returned if there's no such frame or if the frame is not in the current renderer process." + } + }, + { + "name": "findFrameByRoutingId", + "signature": "(routingId)", + "parameters": [ + { + "name": "routingId", + "type": "Integer", + "collection": false, + "description": "An `Integer` representing the unique frame id in the current renderer process. Routing IDs can be retrieved from `WebFrame` instances (`webFrame.routingId`) and are also passed by frame specific `WebContents` navigation events (e.g. `did-frame-navigate`)", + "required": true + } + ], + "returns": { + "type": "WebFrame", + "collection": false, + "description": "that has the supplied routingId, null if not found." + } + } + ], + "properties": [ + { + "name": "top", + "description": "A WebFrame representing top frame in frame hierarchy to which webFrame belongs, the property would be null if top frame is not in the current renderer process.", + "type": "WebFrame", + "collection": false + }, + { + "name": "opener", + "description": "A WebFrame representing the frame which opened webFrame, the property would be null if there's no opener or opener is not in the current renderer process.", + "type": "WebFrame", + "collection": false + }, + { + "name": "parent", + "description": "A WebFrame representing parent frame of webFrame, the property would be null if webFrame is top or parent is not in the current renderer process.", + "type": "WebFrame", + "collection": false + }, + { + "name": "firstChild", + "description": "A WebFrame representing the first child frame of webFrame, the property would be null if webFrame has no children or if first child is not in the current renderer process.", + "type": "WebFrame", + "collection": false + }, + { + "name": "nextSibling", + "description": "A WebFrame representing next sibling frame, the property would be null if webFrame is the last frame in its parent or if the next sibling is not in the current renderer process.", + "type": "WebFrame", + "collection": false + }, + { + "name": "routingId", + "description": "An Integer representing the unique frame id in the current renderer process. Distinct WebFrame instances that refer to the same underlying frame will have the same routingId.", + "type": "Integer", + "collection": false } ] }, @@ -18294,11 +21183,11 @@ "main": true, "renderer": false }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Class", "slug": "web-request", - "websiteUrl": "http://electron.atom.io/docs/api/web-request", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/web-request.md", + "websiteUrl": "http://electronjs.org/docs/api/web-request", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/web-request.md", "instanceName": "webRequest", "instanceMethods": [ { @@ -18445,7 +21334,101 @@ "name": "listener", "type": "Function", "collection": false, - "required": true + "required": true, + "parameters": [ + { + "name": "details", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [ + { + "name": "id", + "type": "Integer", + "collection": false, + "description": "", + "required": true + }, + { + "name": "url", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "method", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "webContentsId", + "type": "Integer", + "collection": false, + "description": "", + "required": false + }, + { + "name": "resourceType", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "timestamp", + "type": "Double", + "collection": false, + "description": "", + "required": true + }, + { + "name": "requestHeaders", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [] + } + ] + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "description": "", + "required": true, + "parameters": [ + { + "name": "response", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [ + { + "name": "cancel", + "type": "Boolean", + "collection": false, + "description": "", + "required": false + }, + { + "name": "requestHeaders", + "type": "Object", + "collection": false, + "description": "When provided, request will be made with these headers.", + "required": false, + "properties": [] + } + ] + } + ] + } + ] } ] }, @@ -18562,7 +21545,122 @@ "name": "listener", "type": "Function", "collection": false, - "required": true + "required": true, + "parameters": [ + { + "name": "details", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [ + { + "name": "id", + "type": "Integer", + "collection": false, + "description": "", + "required": true + }, + { + "name": "url", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "method", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "webContentsId", + "type": "Integer", + "collection": false, + "description": "", + "required": false + }, + { + "name": "resourceType", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "timestamp", + "type": "Double", + "collection": false, + "description": "", + "required": true + }, + { + "name": "statusLine", + "type": "String", + "collection": false, + "description": "", + "required": true + }, + { + "name": "statusCode", + "type": "Integer", + "collection": false, + "description": "", + "required": true + }, + { + "name": "responseHeaders", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [] + } + ] + }, + { + "name": "callback", + "type": "Function", + "collection": false, + "description": "", + "required": true, + "parameters": [ + { + "name": "response", + "type": "Object", + "collection": false, + "description": "", + "required": true, + "properties": [ + { + "name": "cancel", + "type": "Boolean", + "collection": false, + "description": "", + "required": false + }, + { + "name": "responseHeaders", + "type": "Object", + "collection": false, + "description": "When provided, the server is assumed to have responded with these headers.", + "required": false, + "properties": [] + }, + { + "name": "statusLine", + "type": "String", + "collection": false, + "description": "Should be provided when overriding responseHeaders to change header status otherwise original response header's status will be used.", + "required": false + } + ] + } + ] + } + ] } ] }, @@ -18861,6 +21959,13 @@ "description": "", "required": true }, + { + "name": "referrer", + "type": "String", + "collection": false, + "description": "", + "required": true + }, { "name": "timestamp", "type": "Double", @@ -19002,11 +22107,11 @@ }, { "name": "WebSource", - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Structure", "slug": "web-source", - "websiteUrl": "http://electron.atom.io/docs/api/structures/web-source", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/structures/web-source.md", + "websiteUrl": "http://electronjs.org/docs/api/structures/web-source", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/structures/web-source.md", "properties": [ { "name": "code", @@ -19038,11 +22143,11 @@ "main": false, "renderer": true }, - "version": "2.0.0", + "version": "5.0.0-beta.3", "type": "Element", "slug": "webview-tag", - "websiteUrl": "http://electron.atom.io/docs/api/webview-tag", - "repoUrl": "https://github.com/electron/electron/blob/v2.0.0/docs/api/webview-tag.md", + "websiteUrl": "http://electronjs.org/docs/api/webview-tag", + "repoUrl": "https://github.com/electron/electron/blob/v5.0.0-beta.3/docs/api/webview-tag.md", "methods": [ { "name": "loadURL", @@ -19063,9 +22168,18 @@ "properties": [ { "name": "httpReferrer", - "type": "String", + "type": [ + { + "typeName": "String", + "collection": false + }, + { + "typeName": "Referrer", + "collection": false + } + ], "collection": false, - "description": "A HTTP Referrer url.", + "description": "An HTTP Referrer url.", "required": false }, { @@ -19093,17 +22207,13 @@ "typeName": "UploadFile", "collection": true }, - { - "typeName": "UploadFileSystem", - "collection": true - }, { "typeName": "UploadBlob", "collection": true } ], "collection": false, - "description": "-", + "description": "", "required": false }, { @@ -19117,6 +22227,19 @@ } ] }, + { + "name": "downloadURL", + "signature": "(url)", + "description": "Initiates a download of the resource at url without navigating.", + "parameters": [ + { + "name": "url", + "type": "String", + "collection": false, + "required": true + } + ] + }, { "name": "getURL", "signature": "()", @@ -19144,6 +22267,15 @@ "description": "Whether guest page is still loading resources." } }, + { + "name": "isLoadingMainFrame", + "signature": "()", + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether the main frame (and not just iframes or frames within it) is still loading." + } + }, { "name": "isWaitingForResponse", "signature": "()", @@ -19398,6 +22530,15 @@ "description": "Whether guest page has been muted." } }, + { + "name": "isCurrentlyAudible", + "signature": "()", + "returns": { + "type": "Boolean", + "collection": false, + "description": "Whether audio is currently playing." + } + }, { "name": "undo", "signature": "()", @@ -19628,7 +22769,16 @@ }, { "name": "pageSize", - "type": "String", + "type": [ + { + "typeName": "String", + "collection": false + }, + { + "typeName": "Size", + "collection": false + } + ], "collection": false, "description": "Specify page size of the generated PDF. Can be A3, A4, A5, Legal, Letter, Tabloid or an Object containing height and width in microns.", "required": false @@ -19683,13 +22833,13 @@ { "name": "capturePage", "signature": "([rect, ]callback)", - "description": "Captures a snapshot of the webview's page. Same as webContents.capturePage([rect, ]callback).", + "description": "Captures a snapshot of the page within rect. Upon completion callback will be called with callback(image). The image is an instance of NativeImage that stores data of the snapshot. Omitting rect will capture the whole visible page. Deprecated Soon", "parameters": [ { "name": "rect", "type": "Rectangle", "collection": false, - "description": "The area of the page to be captured.", + "description": "The bounds to capture", "required": false }, { @@ -19709,6 +22859,20 @@ } ] }, + { + "name": "capturePage", + "signature": "([rect])", + "description": "Captures a snapshot of the page within rect. Omitting rect will capture the whole visible page.", + "parameters": [ + { + "name": "rect", + "type": "Rectangle", + "collection": false, + "description": "The area of the page to be captured.", + "required": false + } + ] + }, { "name": "send", "signature": "(channel[, arg1][, arg2][, ...])", @@ -19758,7 +22922,7 @@ { "name": "setZoomLevel", "signature": "(level)", - "description": "Changes the zoom level to the specified level. The original size is 0 and each increment above or below represents zooming 20% larger or smaller to default limits of 300% and 50% of original size, respectively.", + "description": "Changes the zoom level to the specified level. The original size is 0 and each increment above or below represents zooming 20% larger or smaller to default limits of 300% and 50% of original size, respectively. The formula for this is scale := 1.2 ^ level.", "parameters": [ { "name": "level", @@ -19769,6 +22933,62 @@ } ] }, + { + "name": "getZoomFactor", + "signature": "()", + "returns": { + "type": "Number", + "collection": false, + "description": "the current zoom factor." + } + }, + { + "name": "getZoomLevel", + "signature": "()", + "returns": { + "type": "Number", + "collection": false, + "description": "the current zoom level." + } + }, + { + "name": "setVisualZoomLevelLimits", + "signature": "(minimumLevel, maximumLevel)", + "description": "Sets the maximum and minimum pinch-to-zoom level.", + "parameters": [ + { + "name": "minimumLevel", + "type": "Number", + "collection": false, + "required": true + }, + { + "name": "maximumLevel", + "type": "Number", + "collection": false, + "required": true + } + ] + }, + { + "name": "setLayoutZoomLevelLimits", + "signature": "(minimumLevel, maximumLevel)", + "description": "Sets the maximum and minimum layout-based (i.e. non-visual) zoom level.", + "parameters": [ + { + "name": "minimumLevel", + "type": "Number", + "collection": false, + "required": true + }, + { + "name": "maximumLevel", + "type": "Number", + "collection": false, + "required": true + } + ] + }, { "name": "showDefinitionForSelection", "signature": "()", @@ -19780,6 +23000,7 @@ { "name": "getWebContents", "signature": "()", + "description": "It depends on the remote module, it is therefore not available when this module is disabled.", "returns": { "type": "WebContents", "collection": false, @@ -19800,6 +23021,10 @@ "name": "nodeintegration", "description": "When this attribute is present the guest page in webview will have node integration and can use node APIs like require and process to access low level system resources. Node integration is disabled by default in the guest page." }, + { + "name": "enableremotemodule", + "description": "When this attribute is false the guest page in webview will not have access to the remote module. The remote module is avaiable by default." + }, { "name": "plugins", "description": "When this attribute is present the guest page in webview will be able to use browser plugins. Plugins are disabled by default." @@ -19833,20 +23058,12 @@ "description": "A list of strings which specifies the web preferences to be set on the webview, separated by ,. The full list of supported preference strings can be found in BrowserWindow. The string follows the same format as the features string in window.open. A name by itself is given a true boolean value. A preference can be set to another value by including an =, followed by the value. Special values yes and 1 are interpreted as true, while no and 0 are interpreted as false." }, { - "name": "blinkfeatures", + "name": "enableblinkfeatures", "description": "A list of strings which specifies the blink features to be enabled separated by ,. The full list of supported feature strings can be found in the RuntimeEnabledFeatures.json5 file." }, { "name": "disableblinkfeatures", "description": "A list of strings which specifies the blink features to be disabled separated by ,. The full list of supported feature strings can be found in the RuntimeEnabledFeatures.json5 file." - }, - { - "name": "guestinstance", - "description": "A value that links the webview to a specific webContents. When a webview first loads a new webContents is created and this attribute is set to its instance identifier. Setting this attribute on a new or existing webview connects it to the existing webContents that currently renders in a different webview. The existing webview will see the destroy event and will then create a new webContents when a new url is loaded." - }, - { - "name": "disableguestresize", - "description": "When this attribute is present the webview contents will be prevented from resizing when the webview element itself is resized. This can be used in combination with webContents.setSize to manually resize the webview contents in reaction to a window size change. This can make resizing faster compared to relying on the webview element bounds to automatically resize the contents." } ], "domEvents": [ @@ -19922,84 +23139,6 @@ "name": "did-stop-loading", "description": "Corresponds to the points in time when the spinner of the tab stops spinning." }, - { - "name": "did-get-response-details", - "description": "Fired when details regarding a requested resource is available. status indicates socket connection to download the resource.", - "returns": [ - { - "name": "status", - "type": "Boolean", - "collection": false, - "required": true - }, - { - "name": "newURL", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "originalURL", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "httpResponseCode", - "type": "Integer", - "collection": false, - "required": true - }, - { - "name": "requestMethod", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "referrer", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "headers", - "type": "Object", - "collection": false, - "required": true - }, - { - "name": "resourceType", - "type": "String", - "collection": false, - "required": true - } - ] - }, - { - "name": "did-get-redirect-request", - "description": "Fired when a redirect was received while requesting a resource.", - "returns": [ - { - "name": "oldURL", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "newURL", - "type": "String", - "collection": false, - "required": true - }, - { - "name": "isMainFrame", - "type": "Boolean", - "collection": false, - "required": true - } - ] - }, { "name": "dom-ready", "description": "Fired when document in the given frame is loaded." @@ -20223,7 +23362,7 @@ }, { "name": "ipc-message", - "description": "Fired when the guest page has sent an asynchronous message to embedder page. With sendToHost method and ipc-message event you can easily communicate between guest page and embedder page:", + "description": "Fired when the guest page has sent an asynchronous message to embedder page. With sendToHost method and ipc-message event you can communicate between guest page and embedder page:", "returns": [ { "name": "channel", diff --git a/indices/apis.js b/indices/apis.js index 3ff2ddc..36d22a2 100644 --- a/indices/apis.js +++ b/indices/apis.js @@ -9,17 +9,43 @@ function getRecords () { apis.forEach(api => { // TODO constructorMethod - // TODO properties - // TODO instanceProperties + const properties = api.properties || [] + properties.forEach(property => { + property.apiType = 'properties' + property.fullSignature = `${api.name}.${property.name}` + property.tldr = getTLDR(property) + property.slug = slugger.slug(property.fullSignature, false) + property.url = `https://electronjs.org/docs/api/${api.slug}#${property.slug}` + records.push(property) + }) + + const instanceProperties = api.instanceProperties || [] + instanceProperties.forEach(property => { + property.apiType = 'instanceProperties' + property.fullSignature = `${api.name}.${property.name}` + property.tldr = getTLDR(property) + property.slug = slugger.slug(property.fullSignature, false) + property.url = `https://electronjs.org/docs/api/${api.slug}#${property.slug}` + records.push(property) + }) + + const methods = api.methods || [] + methods.forEach(method => { + method.apiType = 'methods' + method.fullSignature = `${api.name}.${method.name}` + method.tldr = getTLDR(method) + method.slug = slugger.slug(method.fullSignature, false) + method.url = `https://electronjs.org/docs/api/${api.slug}#${method.slug}` + records.push(method) + }) const staticMethods = api.staticMethods || [] staticMethods.forEach(method => { method.apiType = 'staticMethod' method.fullSignature = `${api.name}.${method.name}${method.signature}` method.tldr = getTLDR(method) - method.slug = slugger.slug(method.fullSignature) + method.slug = slugger.slug(method.fullSignature, false) method.url = `https://electronjs.org/docs/api/${api.slug}#${method.slug}` - delete method.signature records.push(method) }) @@ -28,9 +54,8 @@ function getRecords () { method.apiType = 'instanceMethod' method.fullSignature = `${api.instanceName}.${method.name}${method.signature}` method.tldr = getTLDR(method) - method.slug = slugger.slug(method.fullSignature) + method.slug = slugger.slug(method.fullSignature, false) method.url = `https://electronjs.org/docs/api/${api.slug}#${method.slug}` - delete method.signature records.push(method) }) @@ -39,6 +64,7 @@ function getRecords () { event.apiType = 'event' event.fullSignature = `${api.name}.on('${event.name}')` event.url = `https://electronjs.org/docs/api/${api.slug}#event-${event.name}` + event.slug = slugger.slug(event.fullSignature, false) event.tldr = getTLDR(event) records.push(event) }) @@ -48,6 +74,7 @@ function getRecords () { event.apiType = 'event' event.fullSignature = `${api.instanceName}.on('${event.name}')` event.url = `https://electronjs.org/docs/api/${api.slug}#event-${event.name}` + event.slug = slugger.slug(event.fullSignature, false) event.tldr = getTLDR(event) records.push(event) }) @@ -66,7 +93,7 @@ function getRecords () { ] return Object.assign( - {objectID: record.url.replace('https://electronjs.org/docs/api/', 'api-')}, + { objectID: record.url.replace('https://electronjs.org/docs/api/', 'api-') }, record ) }) diff --git a/indices/apps.js b/indices/apps.js index c5f4943..6b3a7d3 100644 --- a/indices/apps.js +++ b/indices/apps.js @@ -17,7 +17,7 @@ function getRecords () { ] return Object.assign( - {objectID: `app-${app.slug}`}, + { objectID: `app-${app.slug}` }, app ) }) diff --git a/indices/glossary.js b/indices/glossary.js new file mode 100644 index 0000000..ab73150 --- /dev/null +++ b/indices/glossary.js @@ -0,0 +1,29 @@ +const { chain } = require('lodash') +const AlgoliaIndex = require('../lib/algolia-index') + +module.exports = new AlgoliaIndex('glossary', getRecords()) + +function getRecords () { + return chain(Object.values(require('electron-i18n').glossary['en-US'])) + .map(glossary => { + const { term, description } = glossary + const objectID = `glossary-${term}` + + const keyValuePairs = [ + 'is:doc', + 'is:glossary', + `glossary:${term}` + ] + + const url = `https://electronjs.org/docs/glossary#${term.toLowerCase()}`.replace(/ /g, '-') + return { + objectID, + term, + description, + url, + keyValuePairs + } + }) + .compact() // remove nulls from early returns above + .value() +} diff --git a/indices/packages.js b/indices/packages.js index 3140e66..dd2b24d 100644 --- a/indices/packages.js +++ b/indices/packages.js @@ -1,4 +1,4 @@ -const {pick} = require('lodash') +const { pick } = require('lodash') const packages = require('electron-npm-packages') const AlgoliaIndex = require('../lib/algolia-index') const props = 'name description sourcerank repository keywords license homepage owners created modified dependencies devDependencies scripts'.split(' ') @@ -8,7 +8,7 @@ module.exports = new AlgoliaIndex('packages', getRecords()) function getRecords () { return packages.map(pkg => { pkg = Object.assign( - {objectID: `package-${pkg.name}`}, + { objectID: `package-${pkg.name}` }, pick(pkg, props) ) @@ -24,7 +24,7 @@ function getRecords () { ] if (Array.isArray(pkg.owners)) { - pkg.owners.forEach(({name}) => { + pkg.owners.forEach(({ name }) => { if (!name) return pkg.keyValuePairs.push(`owner:${name}`) pkg.keyValuePairs.push(`author:${name}`) diff --git a/indices/tutorials.js b/indices/tutorials.js index 0f19844..e7277ce 100644 --- a/indices/tutorials.js +++ b/indices/tutorials.js @@ -1,4 +1,4 @@ -const {chain} = require('lodash') +const { chain } = require('lodash') const cheerio = require('cheerio') const AlgoliaIndex = require('../lib/algolia-index') @@ -8,7 +8,7 @@ function getRecords () { return chain(Object.values(require('electron-i18n').docs['en-US'])) .filter(tutorial => !tutorial.isApiDoc && !tutorial.isApiStructureDoc) .map(tutorial => { - const {title, githubUrl, slug, sections} = tutorial + const { title, githubUrl, slug, sections } = tutorial const objectID = `tutorial-${slug}` const html = sections.map(section => section.html).join('\n\n') const body = cheerio.load(html).text() diff --git a/lib/algolia-index.js b/lib/algolia-index.js index 3933dd6..540979e 100644 --- a/lib/algolia-index.js +++ b/lib/algolia-index.js @@ -1,5 +1,5 @@ const assert = require('assert') -const {chunk, isArray, isString} = require('lodash') +const { chunk, isArray, isString } = require('lodash') const algoliasearch = require('algoliasearch') const countArrayValues = require('count-array-values') @@ -18,8 +18,8 @@ module.exports = class AlgoliaIndex { // each ID is unique const objectIDs = this.records.map(record => record.objectID) const dupes = countArrayValues(objectIDs) - .filter(({value, count}) => count > 1) - .map(({value}) => value) + .filter(({ value, count }) => count > 1) + .map(({ value }) => value) assert(!dupes.length, `every objectID must be unique. dupes: ${dupes.join('; ')}`) this.records.forEach(record => { @@ -37,11 +37,12 @@ module.exports = class AlgoliaIndex { return true } - upload () { + async upload () { this.validate() - const {ALGOLIA_APPLICATION_ID, ALGOLIA_API_KEY} = process.env + const { ALGOLIA_APPLICATION_ID, ALGOLIA_API_KEY } = process.env const client = algoliasearch(ALGOLIA_APPLICATION_ID, ALGOLIA_API_KEY) + await client.deleteIndex(this.name) const index = client.initIndex(this.name) const chunks = chunk(this.records, 1000) diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..19d2e71 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,14542 @@ +{ + "name": "electron-algolia-indices", + "version": "0.0.0-development", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/core": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.2.2.tgz", + "integrity": "sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.2.2", + "@babel/helpers": "^7.2.0", + "@babel/parser": "^7.2.2", + "@babel/template": "^7.2.2", + "@babel/traverse": "^7.2.2", + "@babel/types": "^7.2.2", + "convert-source-map": "^1.1.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.10", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.2.tgz", + "integrity": "sha512-f3QCuPppXxtZOEm5GWPra/uYUjmNQlu9pbAD8D/9jze4pTY83rTtB1igTBSwvkeNlC5gR24zFFkz+2WHLFQhqQ==", + "dev": true, + "requires": { + "@babel/types": "^7.3.2", + "jsesc": "^2.5.1", + "lodash": "^4.17.10", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", + "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", + "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-call-delegate": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz", + "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.0.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-define-map": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz", + "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/types": "^7.0.0", + "lodash": "^4.17.10" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", + "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz", + "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", + "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", + "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz", + "integrity": "sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/template": "^7.2.2", + "@babel/types": "^7.2.2", + "lodash": "^4.17.10" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", + "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", + "dev": true + }, + "@babel/helper-regex": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz", + "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", + "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-wrap-function": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz", + "integrity": "sha512-GyieIznGUfPXPWu0yLS6U55Mz67AZD9cUk0BfirOWlPrXlBcan9Gz+vHGz+cPfuoweZSnPzPIm67VtQM0OWZbA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/traverse": "^7.2.3", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", + "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", + "dev": true, + "requires": { + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", + "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-wrap-function": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", + "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.2.0" + } + }, + "@babel/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-Q82R3jKsVpUV99mgX50gOPCWwco9Ec5Iln/8Vyu4osNIOQgSrd9RFrQeUvmvddFNoLwMyOUWU+5ckioEKpDoGA==", + "dev": true, + "requires": { + "@babel/template": "^7.1.2", + "@babel/traverse": "^7.1.5", + "@babel/types": "^7.3.0" + } + }, + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "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" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.2.tgz", + "integrity": "sha512-QzNUC2RO1gadg+fs21fi0Uu0OuGNzRKEmgCxoLNzbCdoprLwjfmZwzUrpUNfJPaVRwBpDY47A17yYEGWyRelnQ==", + "dev": true + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", + "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0", + "@babel/plugin-syntax-async-generators": "^7.2.0" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", + "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-json-strings": "^7.2.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.2.tgz", + "integrity": "sha512-DjeMS+J2+lpANkYLLO+m6GjoTMygYglKmRe6cDTbFv3L9i6mmiE8fe6B8MtCSLZpVXscD5kn7s6SgtHrDoBWoA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz", + "integrity": "sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0", + "regexpu-core": "^4.2.0" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", + "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", + "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", + "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz", + "integrity": "sha512-CEHzg4g5UraReozI9D4fblBYABs7IM6UerAVG7EJVrTLC5keh00aEuLUT+O40+mJCEzaXkYfTCUKIyeDfMOFFQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", + "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz", + "integrity": "sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "lodash": "^4.17.10" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz", + "integrity": "sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-define-map": "^7.1.0", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", + "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.3.2.tgz", + "integrity": "sha512-Lrj/u53Ufqxl/sGxyjsJ2XNtNuEjDyjpqdhMNh5aZ+XFOdThL46KBj27Uem4ggoezSYBxKWAil6Hu8HtwqesYw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz", + "integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0", + "regexpu-core": "^4.1.3" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", + "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", + "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz", + "integrity": "sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz", + "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", + "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", + "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz", + "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz", + "integrity": "sha512-aYJwpAhoK9a+1+O625WIjvMY11wkB/ok0WClVwmeo3mCjcNRjt+/8gHWrB5i+00mUju0gWsBkQnPpdvQ7PImmQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", + "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.3.0.tgz", + "integrity": "sha512-NxIoNVhk9ZxS+9lSoAQ/LM0V2UEvARLttEHUrRDGKFaAxOYQcrkN/nLRE+BbbicCAvZPl7wMP0X60HsHE5DtQw==", + "dev": true, + "requires": { + "regexp-tree": "^0.1.0" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz", + "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", + "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.1.0" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz", + "integrity": "sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA==", + "dev": true, + "requires": { + "@babel/helper-call-delegate": "^7.1.0", + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz", + "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==", + "dev": true, + "requires": { + "regenerator-transform": "^0.13.3" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", + "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", + "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", + "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz", + "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", + "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz", + "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0", + "regexpu-core": "^4.1.3" + } + }, + "@babel/polyfill": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.2.5.tgz", + "integrity": "sha512-8Y/t3MWThtMLYr0YNC/Q76tqN1w30+b0uQMeFUYauG2UGTR19zyUtFrAzT23zNtBxPp+LbE5E/nwV/q/r3y6ug==", + "dev": true, + "requires": { + "core-js": "^2.5.7", + "regenerator-runtime": "^0.12.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", + "dev": true + } + } + }, + "@babel/preset-env": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.1.tgz", + "integrity": "sha512-FHKrD6Dxf30e8xgHQO0zJZpUPfVZg+Xwgz5/RdSWCbza9QLNk4Qbp40ctRoqDxml3O8RMzB1DU55SXeDG6PqHQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-json-strings": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.3.1", + "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.2.0", + "@babel/plugin-transform-block-scoped-functions": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.2.0", + "@babel/plugin-transform-classes": "^7.2.0", + "@babel/plugin-transform-computed-properties": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.2.0", + "@babel/plugin-transform-dotall-regex": "^7.2.0", + "@babel/plugin-transform-duplicate-keys": "^7.2.0", + "@babel/plugin-transform-exponentiation-operator": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.2.0", + "@babel/plugin-transform-function-name": "^7.2.0", + "@babel/plugin-transform-literals": "^7.2.0", + "@babel/plugin-transform-modules-amd": "^7.2.0", + "@babel/plugin-transform-modules-commonjs": "^7.2.0", + "@babel/plugin-transform-modules-systemjs": "^7.2.0", + "@babel/plugin-transform-modules-umd": "^7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0", + "@babel/plugin-transform-new-target": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.2.0", + "@babel/plugin-transform-parameters": "^7.2.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.2.0", + "@babel/plugin-transform-spread": "^7.2.0", + "@babel/plugin-transform-sticky-regex": "^7.2.0", + "@babel/plugin-transform-template-literals": "^7.2.0", + "@babel/plugin-transform-typeof-symbol": "^7.2.0", + "@babel/plugin-transform-unicode-regex": "^7.2.0", + "browserslist": "^4.3.4", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.3.0" + } + }, + "@babel/register": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.0.0.tgz", + "integrity": "sha512-f/+CRmaCe7rVEvcvPvxeA8j5aJhHC3aJie7YuqcMDhUOuyWLA7J/aNrTaHIzoWPEhpHA54mec4Mm8fv8KBlv3g==", + "dev": true, + "requires": { + "core-js": "^2.5.7", + "find-cache-dir": "^1.0.0", + "home-or-tmp": "^3.0.0", + "lodash": "^4.17.10", + "mkdirp": "^0.5.1", + "pirates": "^4.0.0", + "source-map-support": "^0.5.9" + } + }, + "@babel/template": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", + "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.2.2", + "@babel/types": "^7.2.2" + } + }, + "@babel/traverse": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz", + "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.2.2", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/parser": "^7.2.3", + "@babel/types": "^7.2.2", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.10" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.2.tgz", + "integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.10", + "to-fast-properties": "^2.0.0" + } + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true + }, + "@octokit/endpoint": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-3.1.2.tgz", + "integrity": "sha512-iRx4kDYybAv9tOrHDBE6HwlgiFi8qmbZl8SHliZWtxbUFuXLZXh2yv8DxGIK9wzD9J0wLDMZneO8vNYJNUSJ9Q==", + "dev": true, + "requires": { + "deepmerge": "3.1.0", + "is-plain-object": "^2.0.4", + "universal-user-agent": "^2.0.1", + "url-template": "^2.0.8" + } + }, + "@octokit/request": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-2.3.0.tgz", + "integrity": "sha512-5YRqYNZOAaL7+nt7w3Scp6Sz4P2g7wKFP9npx1xdExMomk8/M/ICXVLYVam2wzxeY0cIc6wcKpjC5KI4jiNbGw==", + "dev": true, + "requires": { + "@octokit/endpoint": "^3.1.1", + "is-plain-object": "^2.0.4", + "node-fetch": "^2.3.0", + "universal-user-agent": "^2.0.1" + } + }, + "@octokit/rest": { + "version": "16.15.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.15.0.tgz", + "integrity": "sha512-Un+e7rgh38RtPOTe453pT/KPM/p2KZICimBmuZCd2wEo8PacDa4h6RqTPZs+f2DPazTTqdM7QU4LKlUjgiBwWw==", + "dev": true, + "requires": { + "@octokit/request": "2.3.0", + "before-after-hook": "^1.2.0", + "btoa-lite": "^1.0.0", + "lodash.get": "^4.4.2", + "lodash.set": "^4.3.2", + "lodash.uniq": "^4.5.0", + "octokit-pagination-methods": "^1.1.0", + "universal-user-agent": "^2.0.0", + "url-template": "^2.0.8" + } + }, + "@semantic-release/commit-analyzer": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-6.1.0.tgz", + "integrity": "sha512-2lb+t6muGenI86mYGpZYOgITx9L3oZYF697tJoqXeQEk0uw0fm+OkkOuDTBA3Oax9ftoNIrCKv9bwgYvxrbM6w==", + "dev": true, + "requires": { + "conventional-changelog-angular": "^5.0.0", + "conventional-commits-filter": "^2.0.0", + "conventional-commits-parser": "^3.0.0", + "debug": "^4.0.0", + "import-from": "^2.1.0", + "lodash": "^4.17.4" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "@semantic-release/error": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-2.2.0.tgz", + "integrity": "sha512-9Tj/qn+y2j+sjCI3Jd+qseGtHjOAeg7dU2/lVcqIQ9TV3QDaDXDYXcoOHU+7o2Hwh8L8ymL4gfuO7KxDs3q2zg==", + "dev": true + }, + "@semantic-release/github": { + "version": "5.2.10", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-5.2.10.tgz", + "integrity": "sha512-z/UwIxKb+EMiJDIy/57MBzJ80ar5H9GJQRyML/ILQ8dlrPwXs7cTyTvC7AesrF7t1mJZtg3ht9Qf9RdtR/LGzw==", + "dev": true, + "requires": { + "@octokit/rest": "^16.13.1", + "@semantic-release/error": "^2.2.0", + "aggregate-error": "^2.0.0", + "bottleneck": "^2.0.1", + "debug": "^4.0.0", + "dir-glob": "^2.0.0", + "fs-extra": "^7.0.0", + "globby": "^9.0.0", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "issue-parser": "^3.0.0", + "lodash": "^4.17.4", + "mime": "^2.0.3", + "p-filter": "^1.0.0", + "p-retry": "^3.0.0", + "parse-github-url": "^1.0.1", + "url-join": "^4.0.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "mime": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "dev": true + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "@semantic-release/npm": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-5.1.4.tgz", + "integrity": "sha512-YRl8VTVwnRTl/sVRvTXs1ncYcuvuGrqPEXYy+lUK1YRLq25hkrhIdv3Ju0u1zGLqVCA8qRlF3NzWl7pULJXVog==", + "dev": true, + "requires": { + "@semantic-release/error": "^2.2.0", + "aggregate-error": "^2.0.0", + "execa": "^1.0.0", + "fs-extra": "^7.0.0", + "lodash": "^4.17.4", + "nerf-dart": "^1.0.0", + "normalize-url": "^4.0.0", + "npm": "6.5.0", + "rc": "^1.2.8", + "read-pkg": "^4.0.0", + "registry-auth-token": "^3.3.1" + }, + "dependencies": { + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "read-pkg": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "dev": true, + "requires": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + } + } + } + }, + "@semantic-release/release-notes-generator": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-7.1.4.tgz", + "integrity": "sha512-pWPouZujddgb6t61t9iA9G3yIfp3TeQ7bPbV1ixYSeP6L7gI1+Du82fY/OHfEwyifpymLUQW0XnIKgKct5IMMw==", + "dev": true, + "requires": { + "conventional-changelog-angular": "^5.0.0", + "conventional-changelog-writer": "^4.0.0", + "conventional-commits-filter": "^2.0.0", + "conventional-commits-parser": "^3.0.0", + "debug": "^4.0.0", + "get-stream": "^4.0.0", + "import-from": "^2.1.0", + "into-stream": "^4.0.0", + "lodash": "^4.17.4" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "@sheerun/eslint-config-standard": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/@sheerun/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz", + "integrity": "sha512-aalIRUtcR6nPf50kEwnYvepSJIdpulrbMeeNMwiOmFgBg4MgScCmlI7SqOmsGJNqaH65+benoqt0H4N0RR2Okg==", + "dev": true + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@types/node": { + "version": "10.12.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.23.tgz", + "integrity": "sha512-EKhb5NveQ3NlW5EV7B0VRtDKwUfVey8LuJRl9pp5iW0se87/ZqLjG0PMf2MCzPXAJYWZN5Ltg7pHIAf9/Dm1tQ==", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "acorn": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.0.tgz", + "integrity": "sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "dev": true + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "^3.0.4" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "acorn-node": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.6.2.tgz", + "integrity": "sha512-rIhNEZuNI8ibQcL7ANm/mGyPukIaZsRNX9psFNQURyJW0nu6k8wjSDld20z6v2mDBWqX13pIEnk9gGZJHIlEXg==", + "dev": true, + "requires": { + "acorn": "^6.0.2", + "acorn-dynamic-import": "^4.0.0", + "acorn-walk": "^6.1.0", + "xtend": "^4.0.1" + } + }, + "acorn-walk": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", + "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", + "dev": true + }, + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + } + } + }, + "agentkeepalive": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-2.2.0.tgz", + "integrity": "sha1-xdG9SxKQCPEWPyNvhuX66iAm4u8=", + "dev": true + }, + "aggregate-error": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-2.0.0.tgz", + "integrity": "sha512-xA1VQPApQdDehIIpS3gBFkMGDRb9pDYwZPVUOoX8A0lU3GB0mjiACqsa9ByBurU53erhjamf5I4VNRitCfXhjg==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^3.0.0" + } + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true + }, + "algoliasearch": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-3.32.0.tgz", + "integrity": "sha512-C8oQnPTf0wPuyD2jSZwtBAPvz+lHOE7zRIPpgXGBuNt6ZNcC4omsbytG26318rT77a8h4759vmIp6n9p8iw4NA==", + "dev": true, + "requires": { + "agentkeepalive": "^2.2.0", + "debug": "^2.6.8", + "envify": "^4.0.0", + "es6-promise": "^4.1.0", + "events": "^1.1.0", + "foreach": "^2.0.5", + "global": "^4.3.2", + "inherits": "^2.0.1", + "isarray": "^2.0.1", + "load-script": "^1.0.0", + "object-keys": "^1.0.11", + "querystring-es3": "^0.2.1", + "reduce": "^1.0.1", + "semver": "^5.1.0", + "tunnel-agent": "^0.6.0" + } + }, + "algoliasearch-helper": { + "version": "2.26.1", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-2.26.1.tgz", + "integrity": "sha512-fQBZZXC3rac4wadRj5wA/gxy88Twb+GQF3n8foew8SAsqe9Q59PFq1y3j08pr6eNSRYkZJV7qMpe7ox5D27KOw==", + "dev": true, + "requires": { + "events": "^1.1.1", + "lodash": "^4.17.5", + "qs": "^6.5.1", + "util": "^0.10.3" + } + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "requires": { + "string-width": "^2.0.0" + } + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", + "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", + "dev": true + }, + "ansi-styles": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", + "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", + "dev": true + }, + "ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "argv-formatter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", + "integrity": "sha1-oMoMvCmltz6Dbuvhy/bF4OTrgvk=", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-to-gen": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-to-gen/-/async-to-gen-1.3.3.tgz", + "integrity": "sha1-1SyftIAfDfRKvE0t4YcLSLYOILs=", + "dev": true, + "requires": { + "babylon": "^6.14.0", + "magic-string": "^0.19.0" + } + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "await-outside": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/await-outside/-/await-outside-2.1.2.tgz", + "integrity": "sha1-E058NXw4FSKwSUGrzicQALcztF8=", + "dev": true, + "requires": { + "async-to-gen": "~1.3.2" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-eslint": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", + "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "^1.0.0" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "dev": true + }, + "before-after-hook": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-1.3.2.tgz", + "integrity": "sha512-zyPgY5dgbf99c0uGUjhY4w+mxqEGxPKg9RQDl34VvrVh2bM31lFN+mwR1ZHepq/KA3VCPk1gwJZL6IIJqjLy2w==", + "dev": true + }, + "binary-extensions": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", + "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "bole": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bole/-/bole-2.0.0.tgz", + "integrity": "sha1-2KocaQRnv7T+Ebh0rLLoOH44JhU=", + "dev": true, + "requires": { + "core-util-is": ">=1.0.1 <1.1.0-0", + "individual": ">=3.0.0 <3.1.0-0", + "json-stringify-safe": ">=5.0.0 <5.1.0-0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "bottleneck": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.16.1.tgz", + "integrity": "sha512-OOHt4HXiMoXKUcQR/LBzwMYWCQxOU74c8zs6/VPCe6xO3kOAZBZqYKmrgsamVXa1wm9iztD1DAoV46KmGKLl5g==", + "dev": true + }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "dev": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + }, + "dependencies": { + "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" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-pack": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", + "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "combine-source-map": "~0.8.0", + "defined": "^1.0.0", + "safe-buffer": "^5.1.1", + "through2": "^2.0.0", + "umd": "^3.0.0" + } + }, + "browser-process-hrtime": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", + "dev": true + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "browserify": { + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.2.3.tgz", + "integrity": "sha512-zQt/Gd1+W+IY+h/xX2NYMW4orQWhqSwyV+xsblycTtpOuB27h1fZhhNQuipJ4t79ohw4P4mMem0jp/ZkISQtjQ==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^1.11.0", + "browserify-zlib": "~0.2.0", + "buffer": "^5.0.2", + "cached-path-relative": "^1.0.0", + "concat-stream": "^1.6.0", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.0", + "domain-browser": "^1.2.0", + "duplexer2": "~0.1.2", + "events": "^2.0.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "^1.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.0.0", + "labeled-stream-splicer": "^2.0.0", + "mkdirp": "^0.5.0", + "module-deps": "^6.0.0", + "os-browserify": "~0.3.0", + "parents": "^1.0.1", + "path-browserify": "~0.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^2.0.0", + "stream-http": "^2.0.0", + "string_decoder": "^1.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "0.0.1", + "url": "~0.11.0", + "util": "~0.10.1", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "events": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", + "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + } + } + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.1.tgz", + "integrity": "sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000929", + "electron-to-chromium": "^1.3.103", + "node-releases": "^1.1.3" + } + }, + "btoa-lite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", + "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=", + "dev": true + }, + "budo": { + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/budo/-/budo-11.6.0.tgz", + "integrity": "sha512-UAPkUVzg6pMD0Qu4O8wqetdlM+D8q3QJyn1Vi4IGD4ljNI0kbL+WGq9tucO9dkkK2uIJe+rvnoGL43rmcO/Smw==", + "dev": true, + "requires": { + "bole": "^2.0.0", + "browserify": "^16.2.3", + "chokidar": "^2.0.4", + "connect-pushstate": "^1.1.0", + "escape-html": "^1.0.3", + "events": "^1.0.2", + "garnish": "^5.0.0", + "get-ports": "^1.0.2", + "inject-lr-script": "^2.1.0", + "internal-ip": "^3.0.1", + "micromatch": "^2.2.0", + "on-finished": "^2.3.0", + "on-headers": "^1.0.1", + "once": "^1.3.2", + "opn": "^3.0.2", + "path-is-absolute": "^1.0.1", + "pem": "^1.13.2", + "reload-css": "^1.0.0", + "resolve": "^1.1.6", + "serve-static": "^1.10.0", + "simple-html-index": "^1.4.0", + "stacked": "^1.1.1", + "stdout-stream": "^1.4.0", + "strip-ansi": "^3.0.0", + "subarg": "^1.0.0", + "term-color": "^1.0.1", + "url-trim": "^1.0.0", + "watchify-middleware": "^1.8.0", + "ws": "^1.1.1", + "xtend": "^4.0.0" + } + }, + "buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", + "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-shims": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cacheable-request": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.0.0.tgz", + "integrity": "sha512-2N7AmszH/WPPpl5Z3XMw1HAP+8d+xugnKQAeKvxFZ/04dbT/CAznqwbl+7eSr3HkwdepNwtb2yx3CAMQWvG01Q==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^4.0.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^1.0.1", + "normalize-url": "^3.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + } + } + }, + "cached-path-relative": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", + "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", + "dev": true + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + } + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "^0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + } + }, + "caniuse-lite": { + "version": "1.0.30000935", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000935.tgz", + "integrity": "sha512-1Y2uJ5y56qDt3jsDTdBHL1OqiImzjoQcBG6Yl3Qizq8mcc2SgCFpi+ZwLLqkztYnk9l87IYqRlNBnPSOTbFkXQ==", + "dev": true + }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", + "dev": true + }, + "cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", + "dev": true, + "requires": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + } + }, + "chalk": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", + "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", + "dev": true, + "requires": { + "ansi-styles": "^1.1.0", + "escape-string-regexp": "^1.0.0", + "has-ansi": "^0.1.0", + "strip-ansi": "^0.3.0", + "supports-color": "^0.2.0" + }, + "dependencies": { + "strip-ansi": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", + "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", + "dev": true, + "requires": { + "ansi-regex": "^0.2.1" + } + } + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "dev": true + }, + "cheerio": { + "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": "^4.15.0", + "parse5": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.0.tgz", + "integrity": "sha512-5t6G2SH8eO6lCvYOoUpaRnF5Qfd//gd7qJAkwRUw9qlGVkiQ13uwQngqbWWaurOsaAm9+kUGbITADxt6H0XFNQ==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.0" + } + }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "classnames": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==", + "dev": true + }, + "clean-stack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.0.0.tgz", + "integrity": "sha512-VEoL9Qh7I8s8iHnV53DaeWSt8NJ0g3khMfK6NiCPB7H657juhro+cSw2O88uo3bo0c0X5usamtXk0/Of0wXa5A==", + "dev": true + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, + "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-table": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", + "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", + "dev": true, + "requires": { + "colors": "1.0.3" + } + }, + "cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "dev": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + }, + "dependencies": { + "colors": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", + "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", + "dev": true, + "optional": true + } + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true + }, + "combine-source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", + "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", + "dev": true, + "requires": { + "convert-source-map": "~1.1.0", + "inline-source-map": "~0.6.0", + "lodash.memoize": "~3.0.3", + "source-map": "~0.5.3" + } + }, + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true, + "optional": true + }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "compare-func": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz", + "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=", + "dev": true, + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^3.0.0" + } + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "configstore": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "dev": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "dependencies": { + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + } + } + }, + "connect-pushstate": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/connect-pushstate/-/connect-pushstate-1.1.0.tgz", + "integrity": "sha1-vKsiQnHEOWBKD7D2FMCl9WPojiQ=", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "^0.1.4" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "conventional-changelog-angular": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.2.tgz", + "integrity": "sha512-yx7m7lVrXmt4nKWQgWZqxSALEiAKZhOAcbxdUaU9575mB0CzXVbgrgpfSnSP7OqWDUTYGD0YVJ0MSRdyOPgAwA==", + "dev": true, + "requires": { + "compare-func": "^1.3.1", + "q": "^1.5.1" + } + }, + "conventional-changelog-writer": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.2.tgz", + "integrity": "sha512-d8/FQY/fix2xXEBUhOo8u3DCbyEw3UOQgYHxLsPDw+wHUDma/GQGAGsGtoH876WyNs32fViHmTOUrgRKVLvBug==", + "dev": true, + "requires": { + "compare-func": "^1.3.1", + "conventional-commits-filter": "^2.0.1", + "dateformat": "^3.0.0", + "handlebars": "^4.0.2", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.2.1", + "meow": "^4.0.0", + "semver": "^5.5.0", + "split": "^1.0.0", + "through2": "^2.0.0" + } + }, + "conventional-commits-filter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.1.tgz", + "integrity": "sha512-92OU8pz/977udhBjgPEbg3sbYzIxMDFTlQT97w7KdhR9igNqdJvy8smmedAAgn4tPiqseFloKkrVfbXCVd+E7A==", + "dev": true, + "requires": { + "is-subset": "^0.1.1", + "modify-values": "^1.0.0" + } + }, + "conventional-commits-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.1.tgz", + "integrity": "sha512-P6U5UOvDeidUJ8ebHVDIoXzI7gMlQ1OF/id6oUvp8cnZvOXMt1n8nYl74Ey9YMn0uVQtxmCtjPQawpsssBWtGg==", + "dev": true, + "requires": { + "JSONStream": "^1.0.4", + "is-text-path": "^1.0.0", + "lodash": "^4.2.1", + "meow": "^4.0.0", + "split2": "^2.0.0", + "through2": "^2.0.0", + "trim-off-newlines": "^1.0.0" + }, + "dependencies": { + "split2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", + "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", + "dev": true, + "requires": { + "through2": "^2.0.2" + } + } + } + }, + "convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.4.tgz", + "integrity": "sha512-05qQ5hXShcqGkPZpXEFLIpxayZscVD2kuMBZewxiIPPEagukO4mqgPA9CWhUvFBJfy3ODdK2p9xyHh7FTU9/7A==", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.7.tgz", + "integrity": "sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0" + } + }, + "count-array-values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/count-array-values/-/count-array-values-1.2.1.tgz", + "integrity": "sha1-v1JMJWJrJPCMxUooWZzXH97Wt6k=", + "dev": true + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "dev": true + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", + "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "dash-ast": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", + "dev": true + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, + "debounce": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz", + "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "debug-log": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", + "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deepmerge": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.1.0.tgz", + "integrity": "sha512-/TnecbwXEdycfbsM2++O3eGiatEFHjjNciHEwJclM+T5Kd94qD1AP+2elP/Mq0L5b9VZJao5znR01Mz6eX8Seg==", + "dev": true + }, + "default-gateway": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-2.7.2.tgz", + "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==", + "dev": true, + "requires": { + "execa": "^0.10.0", + "ip-regex": "^2.1.0" + } + }, + "defer-to-connect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.0.2.tgz", + "integrity": "sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw==", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "deglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.1.tgz", + "integrity": "sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==", + "dev": true, + "requires": { + "find-root": "^1.0.0", + "glob": "^7.0.5", + "ignore": "^3.0.9", + "pkg-config": "^1.1.0", + "run-parallel": "^1.1.2", + "uniq": "^1.0.1" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "deps-sort": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", + "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "shasum": "^1.0.0", + "subarg": "^1.0.0", + "through2": "^2.0.0" + } + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dev": true, + "requires": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + } + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "dlv": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.2.tgz", + "integrity": "sha512-xxD4VSH67GbRvSGUrckvha94RD7hjgOH7rqGxiytLpkaeMvixOHFZTGFK6EkIm3T761OVHT8ABHmGkq9gXgu6Q==", + "dev": true + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "~1.1.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 + } + } + }, + "dom-walk": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=", + "dev": true + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", + "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "dotenv": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", + "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==", + "dev": true + }, + "dotenv-safe": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/dotenv-safe/-/dotenv-safe-6.1.0.tgz", + "integrity": "sha512-O02OUTS+XmoRNZR4kRjJ9jlUGvQoXpMeTVVEBc8hUtgvPTgVZpsZH7TOocq4RVDpPrs2xGPwj6gIWjqRX+ErHA==", + "dev": true, + "requires": { + "dotenv": "^6.1.0" + } + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-apps": { + "version": "1.7360.0", + "resolved": "https://registry.npmjs.org/electron-apps/-/electron-apps-1.7360.0.tgz", + "integrity": "sha512-CcVBStVdB4vkr147ysdmvCxVtMc1ToAbNm7fO1k72ppLO9arO85oedaQKH6QFDTdQ2/gMjQUNs6mDDft7TGeEg==", + "dev": true, + "requires": { + "json-stable-stringify": "^1.0.1", + "mime-types": "^2.1.19", + "rev-hash": "^2.0.0" + }, + "dependencies": { + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "~0.0.0" + } + } + } + }, + "electron-i18n": { + "version": "1.1081.0", + "resolved": "https://registry.npmjs.org/electron-i18n/-/electron-i18n-1.1081.0.tgz", + "integrity": "sha512-Y97F7HUuKJwBIENUvu0CKEM5L7cUyTxj9eQ9LXDaokMEmjxYbl1irNgZwt8CbT4E0hQGxxelRWlt8lBHcfqdaw==", + "dev": true + }, + "electron-npm-packages": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/electron-npm-packages/-/electron-npm-packages-4.1.2.tgz", + "integrity": "sha512-qhpbXoECwM68Ys2J9FkAGsJdBYbtojKZ4ENjZIGqrJimhpz2H/ktxeWQcBjDejgNuV0oaYvOMX7JjSIWTBcSZg==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.113", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz", + "integrity": "sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==", + "dev": true + }, + "elliptic": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", + "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emoji-regex": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", + "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "env-ci": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-3.2.0.tgz", + "integrity": "sha512-TFjNiDlXrL8/pfHswdvJGEZzJcq3aBPb8Eka83hlGLwuNw9F9BC9S9ETlkfkItLRT9k5JgpGgeP+rL6/3cEbcw==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "java-properties": "^0.2.9" + }, + "dependencies": { + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "envify": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/envify/-/envify-4.1.0.tgz", + "integrity": "sha512-IKRVVoAYr4pIx4yIWNsz9mOsboxlNXiu7TNBnem/K/uTHdkyzXWDzHCK7UTolqBbgaBz0tQHsD3YNls0uIIjiw==", + "dev": true, + "requires": { + "esprima": "^4.0.0", + "through": "~2.3.4" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-promise": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz", + "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==", + "dev": true + }, + "es6-promisify": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.0.1.tgz", + "integrity": "sha512-J3ZkwbEnnO+fGAKrjVpeUAnZshAdfZvbhQpqfIH9kSAspReRC4nJnu8ewm55b4y9ElyeuhCTzJD0XiH8Tsbhlw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "dev": true, + "requires": { + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.4", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", + "table": "4.0.2", + "text-table": "~0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.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" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "eslint-config-standard": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz", + "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==", + "dev": true + }, + "eslint-config-standard-jsx": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-6.0.2.tgz", + "integrity": "sha512-D+YWAoXw+2GIdbMBRAzWwr1ZtvnSf4n4yL0gKGg7ShUOGXkSOLerI17K4F6LdQMJPNMoWYqepzQD/fKY+tXNSg==", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.5.0" + } + }, + "eslint-module-utils": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz", + "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==", + "dev": true, + "requires": { + "debug": "^2.6.8", + "pkg-dir": "^2.0.0" + } + }, + "eslint-plugin-es": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz", + "integrity": "sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw==", + "dev": true, + "requires": { + "eslint-utils": "^1.3.0", + "regexpp": "^2.0.1" + }, + "dependencies": { + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", + "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", + "dev": true, + "requires": { + "contains-path": "^0.1.0", + "debug": "^2.6.8", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.1", + "eslint-module-utils": "^2.2.0", + "has": "^1.0.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.3", + "read-pkg-up": "^2.0.0", + "resolve": "^1.6.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + } + } + }, + "eslint-plugin-node": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-7.0.1.tgz", + "integrity": "sha512-lfVw3TEqThwq0j2Ba/Ckn2ABdwmL5dkOgAux1rvOk6CO7A6yGyPI2+zIxN6FyNkp1X1X/BSvKOceD6mBWSj4Yw==", + "dev": true, + "requires": { + "eslint-plugin-es": "^1.3.1", + "eslint-utils": "^1.3.1", + "ignore": "^4.0.2", + "minimatch": "^3.0.4", + "resolve": "^1.8.1", + "semver": "^5.5.0" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, + "eslint-plugin-promise": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz", + "integrity": "sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==", + "dev": true + }, + "eslint-plugin-react": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz", + "integrity": "sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.0.1", + "prop-types": "^15.6.2" + } + }, + "eslint-plugin-standard": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz", + "integrity": "sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA==", + "dev": true + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "requires": { + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "estree-is-member-expression": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-member-expression/-/estree-is-member-expression-1.0.0.tgz", + "integrity": "sha512-Ec+X44CapIGExvSZN+pGkmr5p7HwUVQoPQSd458Lqwvaf4/61k/invHSh4BYK8OXnCkfEhWuIoG5hayKLQStIg==", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "^2.1.0" + }, + "dependencies": { + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "fast-glob": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz", + "integrity": "sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "dependencies": { + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" + } + }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "dev": true + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "find-versions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.0.0.tgz", + "integrity": "sha512-IUvtItVFNmTtKoB0PRfbkR0zR9XMG5rWNO3qI1S8L0zdv+v2gqzM0pAunloxqbqAfT8w7bg8n/5gHzTXte8H5A==", + "dev": true, + "requires": { + "array-uniq": "^2.0.0", + "semver-regex": "^2.0.0" + }, + "dependencies": { + "array-uniq": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-2.0.0.tgz", + "integrity": "sha512-O3QZEr+3wDj7otzF7PjNGs6CA3qmYMLvt5xGkjY/V0VxS+ovvqVo/5wKM/OVOAyuX4DTh9H31zE/yKtO66hTkg==", + "dev": true + } + } + }, + "flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "dev": true, + "requires": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + } + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "from2-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/from2-string/-/from2-string-1.1.0.tgz", + "integrity": "sha1-GCgrJ9CKJnyzAwzSuLSw8hKvdSo=", + "dev": true, + "requires": { + "from2": "^2.0.3" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", + "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": 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" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "garnish": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/garnish/-/garnish-5.2.0.tgz", + "integrity": "sha1-vtQ2WTguSxmOM8eTiXvnxwHmVXc=", + "dev": true, + "requires": { + "chalk": "^0.5.1", + "minimist": "^1.1.0", + "pad-left": "^2.0.0", + "pad-right": "^0.2.2", + "prettier-bytes": "^1.0.3", + "pretty-ms": "^2.1.0", + "right-now": "^1.0.0", + "split2": "^0.2.1", + "stdout-stream": "^1.4.0", + "url-trim": "^1.0.0" + } + }, + "get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", + "dev": true + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "get-ports": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-ports/-/get-ports-1.0.3.tgz", + "integrity": "sha1-9AvVgKyn7A77e5bL/L6wPviUteg=", + "dev": true, + "requires": { + "map-limit": "0.0.1" + } + }, + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "git-log-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", + "integrity": "sha1-LmpMGxP8AAKCB7p5WnrDFme5/Uo=", + "dev": true, + "requires": { + "argv-formatter": "~1.0.0", + "spawn-error-forwarder": "~1.0.0", + "split2": "~1.0.0", + "stream-combiner2": "~1.1.1", + "through2": "~2.0.0", + "traverse": "~0.6.6" + }, + "dependencies": { + "split2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", + "integrity": "sha1-UuLiIdiMdfmnP5BVbiY/+WdysxQ=", + "dev": true, + "requires": { + "through2": "~2.0.0" + } + } + } + }, + "github-slugger": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.2.1.tgz", + "integrity": "sha512-SsZUjg/P03KPzQBt7OxJPasGw6NRO5uOgiZ5RGXVud5iSIZ0eNZeNp5rTwCxtavrRUa/A77j8mePVc5lEvk0KQ==", + "dev": true, + "requires": { + "emoji-regex": ">=6.0.0 <=6.1.1" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "global": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", + "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "~0.5.1" + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, + "globals": { + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.10.0.tgz", + "integrity": "sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==", + "dev": true + }, + "globby": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.0.0.tgz", + "integrity": "sha512-q0qiO/p1w/yJ0hk8V9x1UXlgsXUxlGd0AHUOXZVXBO6aznDtpx7M8D1kBrCAItoPm+4l8r6ATXV1JpjY2SBQOw==", + "dev": true, + "requires": { + "array-union": "^1.0.2", + "dir-glob": "^2.2.1", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "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 + } + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "dependencies": { + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "handlebars": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz", + "integrity": "sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==", + "dev": true, + "requires": { + "async": "^2.5.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", + "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", + "dev": true, + "requires": { + "ansi-regex": "^0.2.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hogan.js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/hogan.js/-/hogan.js-3.0.2.tgz", + "integrity": "sha1-TNnhq9QpQUbnZ55B14mHMrAse/0=", + "dev": true, + "requires": { + "mkdirp": "0.3.0", + "nopt": "1.0.10" + }, + "dependencies": { + "mkdirp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", + "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", + "dev": true + } + } + }, + "home-or-tmp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-3.0.0.tgz", + "integrity": "sha1-V6j+JM8zzdUkhgoVgh3cJchmcfs=", + "dev": true + }, + "hook-std": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-1.2.0.tgz", + "integrity": "sha512-yntre2dbOAjgQ5yoRykyON0D9T96BfshR8IuiL/r3celeHD8I/76w4qo8m3z99houR4Z678jakV3uXrQdSvW/w==", + "dev": true + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, + "htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", + "dev": true + }, + "htmlparser2": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz", + "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", + "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "http-cache-semantics": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.2.tgz", + "integrity": "sha512-laeSTWIkuFa6lUgZAt+ic9RwOSEwbi9VDQNcCvMFO4sZiDc2Ha8DaZVCJnfpLLQCcS8rvCnIWYmz0POLxt7Dew==", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "dev": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "https-proxy-agent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", + "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "dev": true, + "requires": { + "agent-base": "^4.1.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "hyperscript-attribute-to-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hyperscript-attribute-to-property/-/hyperscript-attribute-to-property-1.0.2.tgz", + "integrity": "sha512-oerMul16jZCmrbNsUw8QgrtDzF8lKgFri1bKQjReLw1IhiiNkI59CWuzZjJDGT79UQ1YiWqXhJMv/tRMVqgtkA==", + "dev": true + }, + "hyperx": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hyperx/-/hyperx-2.5.0.tgz", + "integrity": "sha512-k/Xxid10hReiiAXZ8LtheiABewkn3Y/rNzzsCZlvGE4U+0CDRuPGQu+d7btB/PchgPKr1RZAy3fDEUFBmB+xJg==", + "dev": true, + "requires": { + "hyperscript-attribute-to-property": "^1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "immutability-helper": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/immutability-helper/-/immutability-helper-2.9.1.tgz", + "integrity": "sha512-r/RmRG8xO06s/k+PIaif2r5rGc3j4Yhc01jSBfwPCXDLYZwp/yxralI37Df1mwmuzcCsen/E/ITKcTEvc1PQmQ==", + "dev": true, + "requires": { + "invariant": "^2.2.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "dependencies": { + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + } + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "individual": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/individual/-/individual-3.0.0.tgz", + "integrity": "sha1-58pPhfiVewGHNPKFdQ3CLsL5hi0=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "inject-lr-script": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/inject-lr-script/-/inject-lr-script-2.1.0.tgz", + "integrity": "sha1-5htehMEYczkGy+oB7D10Zpijn2U=", + "dev": true, + "requires": { + "resp-modifier": "^6.0.0" + } + }, + "inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "dev": true, + "requires": { + "source-map": "~0.5.3" + } + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.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" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "insert-module-globals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz", + "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "acorn-node": "^1.5.2", + "combine-source-map": "^0.8.0", + "concat-stream": "^1.6.1", + "is-buffer": "^1.1.0", + "path-is-absolute": "^1.0.1", + "process": "~0.11.0", + "through2": "^2.0.0", + "undeclared-identifiers": "^1.1.2", + "xtend": "^4.0.0" + }, + "dependencies": { + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + } + } + }, + "instantsearch.js": { + "version": "2.10.4", + "resolved": "https://registry.npmjs.org/instantsearch.js/-/instantsearch.js-2.10.4.tgz", + "integrity": "sha512-hhGdYQJBejN4Xm1ElirNenD1BUsP6HE9HOoAII13psn1vXnKE89oQ7/3Z/fpVRBKM0P2KopXJZ5WVn2JFp7ZDQ==", + "dev": true, + "requires": { + "algoliasearch": "^3.27.0", + "algoliasearch-helper": "^2.26.0", + "classnames": "^2.2.5", + "events": "^1.1.0", + "hogan.js": "^3.0.2", + "lodash": "^4.17.5", + "preact": "^8.2.7", + "preact-compat": "^3.18.0", + "preact-rheostat": "^2.1.1", + "prop-types": "^15.5.10", + "qs": "^6.5.1", + "to-factory": "^1.0.0" + } + }, + "internal-ip": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-3.0.1.tgz", + "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==", + "dev": true, + "requires": { + "default-gateway": "^2.6.0", + "ipaddr.js": "^1.5.2" + } + }, + "into-stream": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-4.0.0.tgz", + "integrity": "sha512-i29KNyE5r0Y/UQzcQ0IbZO1MYJ53Jn0EcFRZPj5FzWKYH17kDFEOwuA+3jroymOI06SW1dEDnly9A1CAreC5dg==", + "dev": true, + "requires": { + "from2": "^2.1.1", + "p-is-promise": "^2.0.0" + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.1.tgz", + "integrity": "sha1-+kt5+kf9Pe9eOxWYJRYcClGclCc=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-boolean-attribute": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/is-boolean-attribute/-/is-boolean-attribute-0.0.1.tgz", + "integrity": "sha1-JKtZt9y52jYSx3PmDGVlZeWgmAw=", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "requires": { + "ci-info": "^1.5.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-subset": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", + "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", + "dev": true + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "dev": true, + "requires": { + "text-extensions": "^1.0.0" + } + }, + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isarray": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz", + "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "issue-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-3.0.1.tgz", + "integrity": "sha512-5wdT3EE8Kq38x/hJD8QZCJ9scGoOZ5QnzwXyClkviSWTS+xOCE6hJ0qco3H5n5jCsFqpbofZCcMWqlXJzF72VQ==", + "dev": true, + "requires": { + "lodash.capitalize": "^4.2.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.uniqby": "^4.7.0" + } + }, + "java-properties": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-0.2.10.tgz", + "integrity": "sha512-CpKJh9VRNhS+XqZtg1UMejETGEiqwCGDC/uwPEEQwc2nfdbSm73SIE29TplG2gLYuBOOTNDqxzG6A9NtEPLt0w==", + "dev": true + }, + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", + "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stable-stringify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "dev": true, + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", + "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsx-ast-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", + "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", + "dev": true, + "requires": { + "array-includes": "^3.0.3" + } + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "labeled-stream-splicer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz", + "integrity": "sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "isarray": "^2.0.4", + "stream-splicer": "^2.0.0" + } + }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true, + "requires": { + "package-json": "^4.0.0" + } + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "load-script": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", + "integrity": "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ=", + "dev": true + }, + "local-repl": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/local-repl/-/local-repl-4.0.0.tgz", + "integrity": "sha512-HUM5E6nlyt6k+Iew+paPD1xZL4KnWNO7FvRJbldfKXsk3vHl1eIUZNl980hDgzp6nxZUO1GVCr5Bf1Cdi+WEIg==", + "dev": true, + "requires": { + "await-outside": "^2.1.2", + "chalk": "^2.0.0", + "lodash": "^4.17.4", + "p-props": "^1.0.0", + "read-pkg": "^3.0.0", + "req-cwd": "^2.0.0" + }, + "dependencies": { + "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" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, + "lodash.capitalize": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", + "integrity": "sha1-+CbJtOKoUR2E46yinbBeGk87cqk=", + "dev": true + }, + "lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=", + "dev": true + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true + }, + "lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", + "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==", + "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.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", + "dev": true + }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=", + "dev": true + }, + "loglevel": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", + "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "dev": true + }, + "loglevel-colored-level-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz", + "integrity": "sha1-akAhj9x64V/HbD0PPmdsRlOIYD4=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "loglevel": "^1.4.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "macos-release": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.0.0.tgz", + "integrity": "sha512-iCM3ZGeqIzlrH7KxYK+fphlJpCCczyHXc+HhRVbEu9uNTCrzYJjvvtefzeKTCVHd5AP/aD/fzC80JZ4ZP+dQ/A==", + "dev": true + }, + "magic-string": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.19.1.tgz", + "integrity": "sha1-FNdoATyvLsj96hakmvgvw3fnUgE=", + "dev": true, + "requires": { + "vlq": "^0.2.1" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "make-plural": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-4.3.0.tgz", + "integrity": "sha512-xTYd4JVHpSCW+aqDof6w/MebaMVNTVYBZhbB/vi513xXdiPT92JMVCo0Jq8W2UZnzYRFeVbQiQ+I25l13JuKvA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-limit": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz", + "integrity": "sha1-63lhAxwPDo0AG/LVb6toXViCLzg=", + "dev": true, + "requires": { + "once": "~1.3.0" + }, + "dependencies": { + "once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "dev": true, + "requires": { + "wrappy": "1" + } + } + } + }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "marked": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.6.0.tgz", + "integrity": "sha512-HduzIW2xApSXKXJSpCipSxKyvMbwRRa/TwMbepmlZziKdH8548WSoDP4SxzulEKjlo8BE39l+2fwJZuRKOln6g==", + "dev": true + }, + "marked-terminal": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-3.2.0.tgz", + "integrity": "sha512-Yr1yVS0BbDG55vx7be1D0mdv+jGs9AW563o/Tt/7FTsId2J0yqhrTeXAqq/Q0DyyXltIn6CSxzesQuFqXgafjQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.1.0", + "cardinal": "^2.1.1", + "chalk": "^2.4.1", + "cli-table": "^0.3.1", + "node-emoji": "^1.4.1", + "supports-hyperlinks": "^1.0.1" + }, + "dependencies": { + "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" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "dev": true + }, + "md5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", + "dev": true, + "requires": { + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mem": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", + "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^2.0.0" + } + }, + "meow": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", + "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist": "^1.1.3", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0" + }, + "dependencies": { + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + } + } + }, + "merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=", + "dev": true, + "requires": { + "source-map": "^0.5.6" + } + }, + "merge2": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", + "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", + "dev": true + }, + "messageformat": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/messageformat/-/messageformat-1.1.1.tgz", + "integrity": "sha512-Q0uXcDtF5pEZsVSyhzDOGgZZK6ykN79VY9CwU3Nv0gsqx62BjdJW0MT+63UkHQ4exe3HE33ZlxR2/YwoJarRTg==", + "dev": true, + "requires": { + "glob": "~7.0.6", + "make-plural": "^4.1.1", + "messageformat-parser": "^1.1.0", + "nopt": "~3.0.6", + "reserved-words": "^0.1.2" + }, + "dependencies": { + "glob": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + } + } + }, + "messageformat-parser": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/messageformat-parser/-/messageformat-parser-1.1.0.tgz", + "integrity": "sha512-Hwem6G3MsKDLS1FtBRGIs8T50P1Q00r3srS6QJePCFbad9fq0nYxwf3rnU2BreApRGhmpKMV7oZI06Sy1c9TPA==", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + }, + "mime-db": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", + "dev": true + }, + "mime-types": { + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", + "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "dev": true, + "requires": { + "mime-db": "~1.37.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "dev": true, + "requires": { + "dom-walk": "^0.1.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "minimist-options": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", + "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + } + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true + }, + "module-deps": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.0.tgz", + "integrity": "sha512-hKPmO06so6bL/ZvqVNVqdTVO8UAYsi3tQWlCa+z9KuWhoN4KDQtb5hcqQQv58qYiDE21wIvnttZEPiDgEbpwbA==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "browser-resolve": "^1.7.0", + "cached-path-relative": "^1.0.0", + "concat-stream": "~1.6.0", + "defined": "^1.0.0", + "detective": "^5.0.2", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.4.0", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "mutexify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mutexify/-/mutexify-1.2.0.tgz", + "integrity": "sha512-oprzxd2zhfrJqEuB98qc1dRMMonClBQ57UPDjnbcrah4orEMTq1jq3+AcdFe5ePzdbJXI7zmdhfftIdMnhYFoQ==", + "dev": true + }, + "nan": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", + "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", + "dev": true, + "optional": true + }, + "nanoassert": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", + "integrity": "sha1-TzFS4JVA/eKMdvRLGbvNHVpCR40=", + "dev": true + }, + "nanobench": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nanobench/-/nanobench-2.1.1.tgz", + "integrity": "sha512-z+Vv7zElcjN+OpzAxAquUayFLGK3JI/ubCl0Oh64YQqsTGG09CGqieJVQw4ui8huDnnAgrvTv93qi5UaOoNj8A==", + "dev": true, + "requires": { + "browser-process-hrtime": "^0.1.2", + "chalk": "^1.1.3", + "mutexify": "^1.1.0", + "pretty-hrtime": "^1.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "nanohtml": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/nanohtml/-/nanohtml-1.4.0.tgz", + "integrity": "sha512-UceOMAdudLvo0piPDy+NhAEJpGD4H/pE2OWgV8xZ9D4oqJv9RjzxbyucajqJkjSsNU22XahuFAJoJJOhzJ2AVQ==", + "dev": true, + "requires": { + "acorn": "^5.2.1", + "camel-case": "^3.0.0", + "convert-source-map": "^1.5.1", + "estree-is-member-expression": "^1.0.0", + "hyperx": "^2.5.0", + "is-boolean-attribute": "0.0.1", + "nanoassert": "^1.1.0", + "nanobench": "^2.1.0", + "normalize-html-whitespace": "^0.2.0", + "through2": "^2.0.3", + "transform-ast": "^2.4.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + } + } + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "nerf-dart": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", + "integrity": "sha1-5tq3/r9a2Bbqgc9cYpxaDr3nLBo=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, + "node-emoji": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.8.1.tgz", + "integrity": "sha512-+ktMAh1Jwas+TnGodfCfjUbJKoANqPaJFN0z0iqh41eqD8dvguNzcitVSBSVK1pidz0AqGbLKcoVuVLRVZ/aVg==", + "dev": true, + "requires": { + "lodash.toarray": "^4.4.0" + } + }, + "node-fetch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", + "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==", + "dev": true + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-releases": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.7.tgz", + "integrity": "sha512-bKdrwaqJUPHqlCzDD7so/R+Nk0jGv9a11ZhLrD9f6i947qGLrGAhU3OxRENa19QQmwzGy/g6zCDEuLGDO8HPvA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-html-whitespace": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/normalize-html-whitespace/-/normalize-html-whitespace-0.2.0.tgz", + "integrity": "sha1-EBci9kI1Ucdc24+dEE/4UNrx4Q4=", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.1.0.tgz", + "integrity": "sha512-X781mkWeK6PDMAZJfGn/wnwil4dV6pIdF9euiNqtA89uJvZuNDJO2YyJxiwpPhTQcF5pYUU1v+kcOxzYV6rZlA==", + "dev": true + }, + "npm": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/npm/-/npm-6.5.0.tgz", + "integrity": "sha512-SPq8zG2Kto+Xrq55E97O14Jla13PmQT5kSnvwBj88BmJZ5Nvw++OmlWfhjkB67pcgP5UEXljEtnGFKZtOgt6MQ==", + "dev": true, + "requires": { + "JSONStream": "^1.3.4", + "abbrev": "~1.1.1", + "ansicolors": "~0.3.2", + "ansistyles": "~0.1.3", + "aproba": "~1.2.0", + "archy": "~1.0.0", + "bin-links": "^1.1.2", + "bluebird": "^3.5.3", + "byte-size": "^4.0.3", + "cacache": "^11.2.0", + "call-limit": "~1.1.0", + "chownr": "~1.0.1", + "ci-info": "^1.6.0", + "cli-columns": "^3.1.2", + "cli-table3": "^0.5.0", + "cmd-shim": "~2.0.2", + "columnify": "~1.5.4", + "config-chain": "^1.1.12", + "debuglog": "*", + "detect-indent": "~5.0.0", + "detect-newline": "^2.1.0", + "dezalgo": "~1.0.3", + "editor": "~1.0.0", + "figgy-pudding": "^3.5.1", + "find-npm-prefix": "^1.0.2", + "fs-vacuum": "~1.2.10", + "fs-write-stream-atomic": "~1.0.10", + "gentle-fs": "^2.0.1", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "has-unicode": "~2.0.1", + "hosted-git-info": "^2.7.1", + "iferr": "^1.0.2", + "imurmurhash": "*", + "inflight": "~1.0.6", + "inherits": "~2.0.3", + "ini": "^1.3.5", + "init-package-json": "^1.10.3", + "is-cidr": "^2.0.6", + "json-parse-better-errors": "^1.0.2", + "lazy-property": "~1.0.0", + "libcipm": "^2.0.2", + "libnpmhook": "^4.0.1", + "libnpx": "^10.2.0", + "lock-verify": "^2.0.2", + "lockfile": "^1.0.4", + "lodash._baseindexof": "*", + "lodash._baseuniq": "~4.6.0", + "lodash._bindcallback": "*", + "lodash._cacheindexof": "*", + "lodash._createcache": "*", + "lodash._getnative": "*", + "lodash.clonedeep": "~4.5.0", + "lodash.restparam": "*", + "lodash.union": "~4.6.0", + "lodash.uniq": "~4.5.0", + "lodash.without": "~4.4.0", + "lru-cache": "^4.1.3", + "meant": "~1.0.1", + "mississippi": "^3.0.0", + "mkdirp": "~0.5.1", + "move-concurrently": "^1.0.1", + "node-gyp": "^3.8.0", + "nopt": "~4.0.1", + "normalize-package-data": "~2.4.0", + "npm-audit-report": "^1.3.1", + "npm-cache-filename": "~1.0.2", + "npm-install-checks": "~3.0.0", + "npm-lifecycle": "^2.1.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.12", + "npm-pick-manifest": "^2.1.0", + "npm-profile": "^3.0.2", + "npm-registry-client": "^8.6.0", + "npm-registry-fetch": "^1.1.0", + "npm-user-validate": "~1.0.0", + "npmlog": "~4.1.2", + "once": "~1.4.0", + "opener": "^1.5.1", + "osenv": "^0.1.5", + "pacote": "^8.1.6", + "path-is-inside": "~1.0.2", + "promise-inflight": "~1.0.1", + "qrcode-terminal": "^0.12.0", + "query-string": "^6.1.0", + "qw": "~1.0.1", + "read": "~1.0.7", + "read-cmd-shim": "~1.0.1", + "read-installed": "~4.0.3", + "read-package-json": "^2.0.13", + "read-package-tree": "^5.2.1", + "readable-stream": "^2.3.6", + "readdir-scoped-modules": "*", + "request": "^2.88.0", + "retry": "^0.12.0", + "rimraf": "~2.6.2", + "safe-buffer": "^5.1.2", + "semver": "^5.5.1", + "sha": "~2.0.1", + "slide": "~1.1.6", + "sorted-object": "~2.0.1", + "sorted-union-stream": "~2.1.3", + "ssri": "^6.0.1", + "stringify-package": "^1.0.0", + "tar": "^4.4.8", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "uid-number": "0.0.6", + "umask": "~1.1.0", + "unique-filename": "~1.1.0", + "unpipe": "~1.0.0", + "update-notifier": "^2.5.0", + "uuid": "^3.3.2", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "~3.0.0", + "which": "^1.3.1", + "worker-farm": "^1.6.0", + "write-file-atomic": "^2.3.0" + }, + "dependencies": { + "JSONStream": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.4.tgz", + "integrity": "sha512-Y7vfi3I5oMOYIr+WxV8NZxDSwcbNgzdKYsTNInmycOq9bUYwGg9ryu57Wg5NLmCjqdFPNUmpMBo3kSJN9tCbXg==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "agent-base": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.0.tgz", + "integrity": "sha512-c+R/U5X+2zz2+UCrCFv6odQzJdoqI+YecuhnAJLa1zYaMc13zPfwMwZrr91Pd1DYNo/yPRbiM4WVf9whgwFsIg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "agentkeepalive": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.4.1.tgz", + "integrity": "sha512-MPIwsZU9PP9kOrZpyu2042kYA8Fdt/AedQYkYXucHgF9QoD9dXVp0ypuGnHXSR0hTstBxdt85Xkh4JolYfK5wg==", + "dev": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "requires": { + "string-width": "^2.0.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "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" + } + }, + "ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=", + "dev": true + }, + "ansistyles": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ansistyles/-/ansistyles-0.1.3.tgz", + "integrity": "sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk=", + "dev": true + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bin-links": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-1.1.2.tgz", + "integrity": "sha512-8eEHVgYP03nILphilltWjeIjMbKyJo3wvp9K816pHbhP301ismzw15mxAAEVQ/USUwcP++1uNrbERbp8lOA6Fg==", + "dev": true, + "requires": { + "bluebird": "^3.5.0", + "cmd-shim": "^2.0.2", + "gentle-fs": "^2.0.0", + "graceful-fs": "^4.1.11", + "write-file-atomic": "^2.3.0" + } + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "~2.0.0" + } + }, + "bluebird": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "dev": true + }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "dev": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-from": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "byline": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", + "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", + "dev": true + }, + "byte-size": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-4.0.3.tgz", + "integrity": "sha512-JGC3EV2bCzJH/ENSh3afyJrH4vwxbHTuO5ljLoI5+2iJOcEpMgP8T782jH9b5qGxf2mSUIp1lfGnfKNrRHpvVg==", + "dev": true + }, + "cacache": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.2.0.tgz", + "integrity": "sha512-IFWl6lfK6wSeYCHUXh+N1lY72UDrpyrYQJNIVQf48paDuWbv5RbAtJYf/4gUQFObTCHZwdZ5sI8Iw7nqwP6nlQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "figgy-pudding": "^3.1.0", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.3", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^6.0.0", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + } + }, + "call-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/call-limit/-/call-limit-1.1.0.tgz", + "integrity": "sha1-b9YbA/PaQqLNDsK2DwK9DnGZH+o=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "capture-stack-trace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "dev": true + }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, + "cidr-regex": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/cidr-regex/-/cidr-regex-2.0.9.tgz", + "integrity": "sha512-F7/fBRUU45FnvSPjXdpIrc++WRSBdCiSTlyq4ZNhLKOlHFNWgtzZ0Fd+zrqI/J1j0wmlx/f5ZQDmD2GcbrNcmw==", + "dev": true, + "requires": { + "ip-regex": "^2.1.0" + } + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, + "cli-columns": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cli-columns/-/cli-columns-3.1.2.tgz", + "integrity": "sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4=", + "dev": true, + "requires": { + "string-width": "^2.0.0", + "strip-ansi": "^3.0.1" + } + }, + "cli-table3": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.0.tgz", + "integrity": "sha512-c7YHpUyO1SaKaO7kYtxd5NZ8FjAmSK3LpKkuzdwn+2CwpFxBpdoQLm+OAnnCfoEl7onKhN9PKQi1lsHuAIUqGQ==", + "dev": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + } + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "cmd-shim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-2.0.2.tgz", + "integrity": "sha1-b8vamUg6j9FdfTChlspp1oii79s=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "mkdirp": "~0.5.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "^1.1.1" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true, + "optional": true + }, + "columnify": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", + "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", + "dev": true, + "requires": { + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" + } + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "configstore": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "dev": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + }, + "dependencies": { + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-extend": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", + "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", + "dev": true + }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true + }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "dotenv": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", + "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==", + "dev": true + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "duplexify": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", + "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "editor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/editor/-/editor-1.0.0.tgz", + "integrity": "sha1-YMf4e9YrzGqJT6jM1q+3gjok90I=", + "dev": true + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "dev": true, + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "err-code": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", + "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "es6-promise": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", + "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "dev": true + }, + "find-npm-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz", + "integrity": "sha512-KEftzJ+H90x6pcKtdXZEPsQse8/y/UnvzRKrOSQFprnrGaFuJ62fVkP34Iu2IYuMvyauCyoLTNkJZgrrGA2wkA==", + "dev": true + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flush-write-stream": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "dev": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs-vacuum": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/fs-vacuum/-/fs-vacuum-1.2.10.tgz", + "integrity": "sha1-t2Kb7AekAxolSP35n17PHMizHjY=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "path-is-inside": "^1.0.1", + "rimraf": "^2.5.2" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + }, + "dependencies": { + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "genfun": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/genfun/-/genfun-4.0.1.tgz", + "integrity": "sha1-7RAEHy5KfxsKOEZtF6XD4n3x38E=", + "dev": true + }, + "gentle-fs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/gentle-fs/-/gentle-fs-2.0.1.tgz", + "integrity": "sha512-cEng5+3fuARewXktTEGbwsktcldA+YsnUEaXZwcK/3pjSE1X9ObnTs+/8rYf8s+RnIcQm2D5x3rwpN7Zom8Bew==", + "dev": true, + "requires": { + "aproba": "^1.1.2", + "fs-vacuum": "^1.2.10", + "graceful-fs": "^4.1.11", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "path-is-inside": "^1.0.2", + "read-cmd-shim": "^1.0.1", + "slide": "^1.1.6" + }, + "dependencies": { + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + } + } + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", + "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", + "dev": true, + "requires": { + "ajv": "^5.3.0", + "har-schema": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "dev": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", + "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "dev": true, + "requires": { + "agent-base": "^4.1.0", + "debug": "^3.1.0" + } + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "iferr": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-1.0.2.tgz", + "integrity": "sha512-9AfeLfji44r5TKInjhz3W9DyZI1zR1JAf2hVBMGhddAKPqBsupb89jGfbCTHIGZd6fGZl9WlHdn4AObygyMKwg==", + "dev": true + }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "init-package-json": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.10.3.tgz", + "integrity": "sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw==", + "dev": true, + "requires": { + "glob": "^7.1.1", + "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "1 || 2", + "semver": "2.x || 3.x || 4 || 5", + "validate-npm-package-license": "^3.0.1", + "validate-npm-package-name": "^3.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "^1.0.0" + } + }, + "is-ci": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", + "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", + "dev": true, + "requires": { + "ci-info": "^1.0.0" + } + }, + "is-cidr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/is-cidr/-/is-cidr-2.0.6.tgz", + "integrity": "sha512-A578p1dV22TgPXn6NCaDAPj6vJvYsBgAzUrAd28a4oldeXJjWqEUuSZOLIW3im51mazOKsoyVp8NU/OItlWacw==", + "dev": true, + "requires": { + "cidr-regex": "^2.0.8" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true, + "requires": { + "package-json": "^4.0.0" + } + }, + "lazy-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazy-property/-/lazy-property-1.0.0.tgz", + "integrity": "sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc=", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "libcipm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/libcipm/-/libcipm-2.0.2.tgz", + "integrity": "sha512-9uZ6/LAflVEijksTRq/RX0e+pGA4mr8tND9Cmk2JMg7j2fFUBrs8PpFX2DOAJR/XoxPzz+5h8bkWmtIYLunKAg==", + "dev": true, + "requires": { + "bin-links": "^1.1.2", + "bluebird": "^3.5.1", + "find-npm-prefix": "^1.0.2", + "graceful-fs": "^4.1.11", + "lock-verify": "^2.0.2", + "mkdirp": "^0.5.1", + "npm-lifecycle": "^2.0.3", + "npm-logical-tree": "^1.2.1", + "npm-package-arg": "^6.1.0", + "pacote": "^8.1.6", + "protoduck": "^5.0.0", + "read-package-json": "^2.0.13", + "rimraf": "^2.6.2", + "worker-farm": "^1.6.0" + } + }, + "libnpmhook": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/libnpmhook/-/libnpmhook-4.0.1.tgz", + "integrity": "sha512-3qqpfqvBD1712WA6iGe0stkG40WwAeoWcujA6BlC0Be1JArQbqwabnEnZ0CRcD05Tf1fPYJYdCbSfcfedEJCOg==", + "dev": true, + "requires": { + "figgy-pudding": "^3.1.0", + "npm-registry-fetch": "^3.0.0" + }, + "dependencies": { + "npm-registry-fetch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-3.1.1.tgz", + "integrity": "sha512-xBobENeenvjIG8PgQ1dy77AXTI25IbYhmA3DusMIfw/4EL5BaQ5e1V9trkPrqHvyjR3/T0cnH6o0Wt/IzcI5Ag==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "figgy-pudding": "^3.1.0", + "lru-cache": "^4.1.2", + "make-fetch-happen": "^4.0.0", + "npm-package-arg": "^6.0.0" + } + } + } + }, + "libnpx": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/libnpx/-/libnpx-10.2.0.tgz", + "integrity": "sha512-X28coei8/XRCt15cYStbLBph+KGhFra4VQhRBPuH/HHMkC5dxM8v24RVgUsvODKCrUZ0eTgiTqJp6zbl0sskQQ==", + "dev": true, + "requires": { + "dotenv": "^5.0.1", + "npm-package-arg": "^6.0.0", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.0", + "update-notifier": "^2.3.0", + "which": "^1.3.0", + "y18n": "^4.0.0", + "yargs": "^11.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lock-verify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lock-verify/-/lock-verify-2.0.2.tgz", + "integrity": "sha512-QNVwK0EGZBS4R3YQ7F1Ox8p41Po9VGl2QG/2GsuvTbkJZYSsPeWHKMbbH6iZMCHWSMww5nrJroZYnGzI4cePuw==", + "dev": true, + "requires": { + "npm-package-arg": "^5.1.2 || 6", + "semver": "^5.4.1" + } + }, + "lockfile": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", + "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", + "dev": true, + "requires": { + "signal-exit": "^3.0.2" + } + }, + "lodash._baseindexof": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz", + "integrity": "sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw=", + "dev": true + }, + "lodash._baseuniq": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz", + "integrity": "sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg=", + "dev": true, + "requires": { + "lodash._createset": "~4.0.0", + "lodash._root": "~3.0.0" + } + }, + "lodash._bindcallback": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", + "dev": true + }, + "lodash._cacheindexof": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz", + "integrity": "sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI=", + "dev": true + }, + "lodash._createcache": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash._createcache/-/lodash._createcache-3.1.2.tgz", + "integrity": "sha1-VtagZAF2JeeevKa4AY4XRAvc8JM=", + "dev": true, + "requires": { + "lodash._getnative": "^3.0.0" + } + }, + "lodash._createset": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/lodash._createset/-/lodash._createset-4.0.3.tgz", + "integrity": "sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY=", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "lodash.without": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.without/-/lodash.without-4.4.0.tgz", + "integrity": "sha1-PNRXSgC2e643OpS3SHcmQFB7eqw=", + "dev": true + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "make-fetch-happen": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz", + "integrity": "sha512-7R5ivfy9ilRJ1EMKIOziwrns9fGeAD4bAha8EB7BIiBBLHm2KeTUGCrICFt2rbHfzheTLynv50GnNTK1zDTrcQ==", + "dev": true, + "requires": { + "agentkeepalive": "^3.4.1", + "cacache": "^11.0.1", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "lru-cache": "^4.1.2", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" + } + }, + "meant": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/meant/-/meant-1.0.1.tgz", + "integrity": "sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg==", + "dev": true + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "mime-db": { + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", + "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", + "dev": true, + "requires": { + "mime-db": "~1.35.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "minipass": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.3.tgz", + "integrity": "sha512-/jAn9/tEX4gnpyRATxgHEOV6xbcyxgT7iUnxo9Y3+OB0zX00TgKIv/2FZCf5brBbICcwbLqVv2ImjvWWrQMSYw==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "yallist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", + "dev": true + } + } + }, + "minizlib": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.1.tgz", + "integrity": "sha512-TrfjCjk4jLhcJyGMYymBH6oTXcWjYbUAXTHDbtnWHjZC25h0cdajHuPE1zxb4DVmu8crfh+HwH/WMuyLG0nHBg==", + "dev": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "node-fetch-npm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", + "integrity": "sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw==", + "dev": true, + "requires": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "dev": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" + } + } + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "npm-audit-report": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/npm-audit-report/-/npm-audit-report-1.3.1.tgz", + "integrity": "sha512-SjTF8ZP4rOu3JiFrTMi4M1CmVo2tni2sP4TzhyCMHwnMGf6XkdGLZKt9cdZ12esKf0mbQqFyU9LtY0SoeahL7g==", + "dev": true, + "requires": { + "cli-table3": "^0.5.0", + "console-control-strings": "^1.1.0" + } + }, + "npm-bundled": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz", + "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==", + "dev": true + }, + "npm-cache-filename": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz", + "integrity": "sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE=", + "dev": true + }, + "npm-install-checks": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-3.0.0.tgz", + "integrity": "sha1-1K7N/VGlPjcjt7L5Oy7ijjB7wNc=", + "dev": true, + "requires": { + "semver": "^2.3.0 || 3.x || 4 || 5" + } + }, + "npm-lifecycle": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-2.1.0.tgz", + "integrity": "sha512-QbBfLlGBKsktwBZLj6AviHC6Q9Y3R/AY4a2PYSIRhSKSS0/CxRyD/PfxEX6tPeOCXQgMSNdwGeECacstgptc+g==", + "dev": true, + "requires": { + "byline": "^5.0.0", + "graceful-fs": "^4.1.11", + "node-gyp": "^3.8.0", + "resolve-from": "^4.0.0", + "slide": "^1.1.6", + "uid-number": "0.0.6", + "umask": "^1.1.0", + "which": "^1.3.1" + } + }, + "npm-logical-tree": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz", + "integrity": "sha512-AJI/qxDB2PWI4LG1CYN579AY1vCiNyWfkiquCsJWqntRu/WwimVrC8yXeILBFHDwxfOejxewlmnvW9XXjMlYIg==", + "dev": true + }, + "npm-package-arg": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.0.tgz", + "integrity": "sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.6.0", + "osenv": "^0.1.5", + "semver": "^5.5.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.12.tgz", + "integrity": "sha512-WJKFOVMeAlsU/pjXuqVdzU0WfgtIBCupkEVwn+1Y0ERAbUfWw8R4GjgVbaKnUjRoD2FoQbHOCbOyT5Mbs9Lw4g==", + "dev": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-2.1.0.tgz", + "integrity": "sha512-q9zLP8cTr8xKPmMZN3naxp1k/NxVFsjxN6uWuO1tiw9gxg7wZWQ/b5UTfzD0ANw2q1lQxdLKTeCCksq+bPSgbQ==", + "dev": true, + "requires": { + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + } + }, + "npm-profile": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/npm-profile/-/npm-profile-3.0.2.tgz", + "integrity": "sha512-rEJOFR6PbwOvvhGa2YTNOJQKNuc6RovJ6T50xPU7pS9h/zKPNCJ+VHZY2OFXyZvEi+UQYtHRTp8O/YM3tUD20A==", + "dev": true, + "requires": { + "aproba": "^1.1.2 || 2", + "make-fetch-happen": "^2.5.0 || 3 || 4" + } + }, + "npm-registry-client": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-8.6.0.tgz", + "integrity": "sha512-Qs6P6nnopig+Y8gbzpeN/dkt+n7IyVd8f45NTMotGk6Qo7GfBmzwYx6jRLoOOgKiMnaQfYxsuyQlD8Mc3guBhg==", + "dev": true, + "requires": { + "concat-stream": "^1.5.2", + "graceful-fs": "^4.1.6", + "normalize-package-data": "~1.0.1 || ^2.0.0", + "npm-package-arg": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", + "npmlog": "2 || ^3.1.0 || ^4.0.0", + "once": "^1.3.3", + "request": "^2.74.0", + "retry": "^0.10.0", + "safe-buffer": "^5.1.1", + "semver": "2 >=2.2.1 || 3.x || 4 || 5", + "slide": "^1.1.3", + "ssri": "^5.2.4" + }, + "dependencies": { + "retry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", + "dev": true + }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" + } + } + } + }, + "npm-registry-fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-1.1.0.tgz", + "integrity": "sha512-XJPIBfMtgaooRtZmuA42xCeLf3tkxdIX0xqRsGWwNrcVvJ9UYFccD7Ho7QWCzvkM3i/QrkUC37Hu0a+vDBmt5g==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "figgy-pudding": "^2.0.1", + "lru-cache": "^4.1.2", + "make-fetch-happen": "^3.0.0", + "npm-package-arg": "^6.0.0", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + }, + "dependencies": { + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + } + } + }, + "figgy-pudding": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-2.0.1.tgz", + "integrity": "sha512-yIJPhIBi/oFdU/P+GSXjmk/rmGjuZkm7A5LTXZxNrEprXJXRK012FiI1BR1Pga+0d/d6taWWD+B5d2ozqaxHig==", + "dev": true + }, + "make-fetch-happen": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-3.0.0.tgz", + "integrity": "sha512-FmWY7gC0mL6Z4N86vE14+m719JKE4H0A+pyiOH18B025gF/C113pyfb4gHDDYP5cqnRMHOz06JGdmffC/SES+w==", + "dev": true, + "requires": { + "agentkeepalive": "^3.4.1", + "cacache": "^10.0.4", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.0", + "lru-cache": "^4.1.2", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^3.0.1", + "ssri": "^5.2.4" + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "smart-buffer": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz", + "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=", + "dev": true + }, + "socks": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.10.tgz", + "integrity": "sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o=", + "dev": true, + "requires": { + "ip": "^1.1.4", + "smart-buffer": "^1.0.13" + } + }, + "socks-proxy-agent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-3.0.1.tgz", + "integrity": "sha512-ZwEDymm204mTzvdqyUqOdovVr2YRd2NYskrYrF2LXyZ9qDiMAoFESGK8CRphiO7rtbo2Y757k2Nia3x2hGtalA==", + "dev": true, + "requires": { + "agent-base": "^4.1.0", + "socks": "^1.1.10" + } + }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" + } + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npm-user-validate": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-1.0.0.tgz", + "integrity": "sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE=", + "dev": true + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "opener": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", + "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, + "pacote": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-8.1.6.tgz", + "integrity": "sha512-wTOOfpaAQNEQNtPEx92x9Y9kRWVu45v583XT8x2oEV2xRB74+xdqMZIeGW4uFvAyZdmSBtye+wKdyyLaT8pcmw==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "cacache": "^11.0.2", + "get-stream": "^3.0.0", + "glob": "^7.1.2", + "lru-cache": "^4.1.3", + "make-fetch-happen": "^4.0.1", + "minimatch": "^3.0.4", + "minipass": "^2.3.3", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.10", + "npm-pick-manifest": "^2.1.0", + "osenv": "^0.1.5", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.0", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.2", + "semver": "^5.5.0", + "ssri": "^6.0.0", + "tar": "^4.4.3", + "unique-filename": "^1.1.0", + "which": "^1.3.0" + } + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "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 + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise-retry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", + "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", + "dev": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + }, + "dependencies": { + "retry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", + "dev": true + } + } + }, + "promzard": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", + "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=", + "dev": true, + "requires": { + "read": "1" + } + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, + "protoduck": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.0.tgz", + "integrity": "sha512-agsGWD8/RZrS4ga6v82Fxb0RHIS2RZnbsSue6A9/MBRhB/jcqOANAMNrqM9900b8duj+Gx+T/JMy5IowDoO/hQ==", + "dev": true, + "requires": { + "genfun": "^4.0.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.1.29", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", + "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "qrcode-terminal": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", + "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "query-string": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.1.0.tgz", + "integrity": "sha512-pNB/Gr8SA8ff8KpUFM36o/WFAlthgaThka5bV19AD9PNTH20Pwq5Zxodif2YyHwrctp6SkL4GqlOot0qR/wGaw==", + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "strict-uri-encode": "^2.0.0" + } + }, + "qw": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/qw/-/qw-1.0.1.tgz", + "integrity": "sha1-77/cdA+a0FQwRCassYNBLMi5ltQ=", + "dev": true + }, + "rc": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz", + "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", + "dev": true, + "requires": { + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "dev": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-cmd-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz", + "integrity": "sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "read-installed": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/read-installed/-/read-installed-4.0.3.tgz", + "integrity": "sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc=", + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "graceful-fs": "^4.1.2", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "slide": "~1.1.3", + "util-extend": "^1.0.1" + } + }, + "read-package-json": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.0.13.tgz", + "integrity": "sha512-/1dZ7TRZvGrYqE0UAfN6qQb5GYBsNcqS1C0tNK601CFOJmtHI7NIGXwetEPU/OtoFHZL3hDxm4rolFFVE9Bnmg==", + "dev": true, + "requires": { + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "json-parse-better-errors": "^1.0.1", + "normalize-package-data": "^2.0.0", + "slash": "^1.0.0" + } + }, + "read-package-tree": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.2.1.tgz", + "integrity": "sha512-2CNoRoh95LxY47LvqrehIAfUVda2JbuFE/HaGYs42bNrGG+ojbw1h3zOcPcQ+1GQ3+rkzNndZn85u1XyZ3UsIA==", + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "once": "^1.3.0", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0" + } + }, + "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==", + "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" + } + }, + "readdir-scoped-modules": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz", + "integrity": "sha1-n6+jfShr5dksuuve4DDcm19AZ0c=", + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "registry-auth-token": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "dev": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "^1.0.1" + } + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "^7.0.5" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "semver": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", + "dev": true + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "requires": { + "semver": "^5.0.3" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "sha": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/sha/-/sha-2.0.1.tgz", + "integrity": "sha1-YDCCL70smCOUn49y7WQR7lzyWq4=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "readable-stream": "^2.0.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "dev": true + }, + "smart-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.1.tgz", + "integrity": "sha512-RFqinRVJVcCAL9Uh1oVqE6FZkqsyLiVOYEZ20TqIOjuX7iFVJ+zsbs4RIghnw/pTs7mZvt8ZHhvm1ZUrR4fykg==", + "dev": true + }, + "socks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.2.0.tgz", + "integrity": "sha512-uRKV9uXQ9ytMbGm2+DilS1jB7N3AC0mmusmW5TVWjNuBZjxS8+lX38fasKVY9I4opv/bY/iqTbcpFFaTwpfwRg==", + "dev": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.0.1" + } + }, + "socks-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz", + "integrity": "sha512-Kezx6/VBguXOsEe5oU3lXYyKMi4+gva72TwJ7pQY5JfqUx2nMk7NXA6z/mpNqIlfQjWYVfeuNvQjexiTaTn6Nw==", + "dev": true, + "requires": { + "agent-base": "~4.2.0", + "socks": "~2.2.0" + } + }, + "sorted-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/sorted-object/-/sorted-object-2.0.1.tgz", + "integrity": "sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw=", + "dev": true + }, + "sorted-union-stream": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz", + "integrity": "sha1-x3lMfgd4gAUv9xqNSi27Sppjisc=", + "dev": true, + "requires": { + "from2": "^1.3.0", + "stream-iterate": "^1.1.0" + }, + "dependencies": { + "from2": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-1.3.0.tgz", + "integrity": "sha1-iEE7qqX5pZfP3pIh2GmGzTwGHf0=", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "~1.1.10" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "dev": true + }, + "sshpk": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stream-each": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", + "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-iterate": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stream-iterate/-/stream-iterate-1.2.0.tgz", + "integrity": "sha1-K9fHcpbBcCpGSIuK1B95hl7s1OE=", + "dev": true, + "requires": { + "readable-stream": "^2.1.5", + "stream-shift": "^1.0.0" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringify-package": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.0.tgz", + "integrity": "sha512-JIQqiWmLiEozOC0b0BtxZ/AOUtdUZHCBPgqIZ2kSJJqGwgb9neo44XdTHUC4HZSGqi03hOeB7W/E8rAlKnGe9g==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tar": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + }, + "dependencies": { + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "dev": true + }, + "minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } + } + }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "^0.7.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, + "tiny-relative-date": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz", + "integrity": "sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uid-number": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", + "dev": true + }, + "umask": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz", + "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=", + "dev": true + }, + "unique-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", + "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", + "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true + }, + "update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "dev": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util-extend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", + "integrity": "sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "dev": true, + "requires": { + "string-width": "^1.0.2" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "widest-line": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", + "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", + "dev": true, + "requires": { + "string-width": "^2.1.1" + } + }, + "worker-farm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", + "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.0.0.tgz", + "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" + }, + "dependencies": { + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + } + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "nth-check": { + "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" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "dev": true + }, + "object-keys": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "octokit-pagination-methods": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz", + "integrity": "sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "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" + } + }, + "opn": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/opn/-/opn-3.0.3.tgz", + "integrity": "sha1-ttmec5n3jWXDuq/+8fsojpuFJDo=", + "dev": true, + "requires": { + "object-assign": "^4.0.1" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "dev": true + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + }, + "dependencies": { + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "os-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.0.0.tgz", + "integrity": "sha512-7c74tib2FsdFbQ3W+qj8Tyd1R3Z6tuVRNNxXjJcZ4NgjIEQU9N/prVMqcW29XZPXGACqaXN3jq58/6hoaoXH6g==", + "dev": true, + "requires": { + "macos-release": "^2.0.0", + "windows-release": "^3.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "outpipe": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz", + "integrity": "sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I=", + "dev": true, + "requires": { + "shell-quote": "^1.4.2" + } + }, + "p-cancelable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.0.0.tgz", + "integrity": "sha512-USgPoaC6tkTGlS831CxsVdmZmyb8tR1D+hStI84MyckLOzfJlYQUweomrwE3D8T7u5u5GVuW064LT501wHTYYA==", + "dev": true + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-1.0.0.tgz", + "integrity": "sha1-Yp0xcVAgnI/VCLoTdxPvS7kg6ds=", + "dev": true, + "requires": { + "p-map": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", + "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, + "p-props": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-props/-/p-props-1.2.0.tgz", + "integrity": "sha512-OySQ6ZtqN/DjsQ0Vj1U3E7Q4hG0kz8hJvTnQtxSJGtZM13ECO3gOaAiUnHU4bQyvppCnUPoase1g1SysWaQJ2w==", + "dev": true, + "requires": { + "p-map": "^1.2.0" + } + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + }, + "dependencies": { + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } + } + } + }, + "pad-left": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pad-left/-/pad-left-2.1.0.tgz", + "integrity": "sha1-FuajstRKjhOMsIOMx8tAOk/J6ZQ=", + "dev": true, + "requires": { + "repeat-string": "^1.5.4" + } + }, + "pad-right": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz", + "integrity": "sha1-b7ySQEXSRPKiokRQMGDTv8YAl3Q=", + "dev": true, + "requires": { + "repeat-string": "^1.5.2" + } + }, + "pako": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", + "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==", + "dev": true + }, + "parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "dev": true, + "requires": { + "path-platform": "~0.11.15" + } + }, + "parse-asn1": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.3.tgz", + "integrity": "sha512-VrPoetlz7B/FqjBLD2f5wBVZvsZVLnRUrxVLfRYhGXCODa/NWE4p3Wp+6+aV3ZPL3KM7/OZmxDIwwijD7yuucg==", + "dev": true, + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-github-url": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz", + "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==", + "dev": true + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse-ms": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz", + "integrity": "sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0=", + "dev": true + }, + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "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 + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "pem": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/pem/-/pem-1.14.1.tgz", + "integrity": "sha512-WY3IzMoh+Gwp4xJTT2MqIOaVzNqU7jHqj7k0pOnLIkNSnOpjhy3PHr9mXGi+C5tRC2z1EX5lvzEbd9BtHumHLQ==", + "dev": true, + "requires": { + "es6-promisify": "^6.0.0", + "md5": "^2.2.1", + "os-tmpdir": "^1.0.1", + "which": "^1.3.1" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pirates": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.0.tgz", + "integrity": "sha512-8t5BsXy1LUIjn3WWOlOuFDuKswhQb/tkak641lvBgmPOBUQHXveORtlMCp6OdPV1dtuTaEahKA8VNz6uLfKBtA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" + } + }, + "pkg-config": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", + "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=", + "dev": true, + "requires": { + "debug-log": "^1.0.0", + "find-root": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "plur": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz", + "integrity": "sha1-24XGgU9eXlo7Se/CjWBP7GKXUVY=", + "dev": true + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "preact": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/preact/-/preact-8.4.2.tgz", + "integrity": "sha512-TsINETWiisfB6RTk0wh3/mvxbGRvx+ljeBccZ4Z6MPFKgu/KFGyf2Bmw3Z/jlXhL5JlNKY6QAbA9PVyzIy9//A==", + "dev": true + }, + "preact-compat": { + "version": "3.18.4", + "resolved": "https://registry.npmjs.org/preact-compat/-/preact-compat-3.18.4.tgz", + "integrity": "sha512-aR5CvCIDerE2Y201ERVkWQdTAQKhKGNYujEk4tbyfQDInFTrnCCa3KCeGtULZrwy0PNRBjdQa2/Za7qv7ALNFg==", + "dev": true, + "requires": { + "immutability-helper": "^2.7.1", + "preact-render-to-string": "^3.8.2", + "preact-transition-group": "^1.1.1", + "prop-types": "^15.6.2", + "standalone-react-addons-pure-render-mixin": "^0.1.1" + } + }, + "preact-render-to-string": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-3.8.2.tgz", + "integrity": "sha512-przuZPajiurStGgxMoJP0EJeC4xj5CgHv+M7GfF3YxAdhGgEWAkhOSE0xympAFN20uMayntBZpttIZqqLl77fw==", + "dev": true, + "requires": { + "pretty-format": "^3.5.1" + } + }, + "preact-rheostat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/preact-rheostat/-/preact-rheostat-2.1.1.tgz", + "integrity": "sha512-d03JgkpbjknALYl+zfNiJQ60sFd4A0YjnLCe/DB+rqKQck7jXpsW9RqSN0R50/lV8fEezhVCjq2WMPDDOKmwaA==", + "dev": true, + "requires": { + "object.assign": "^4.0.4", + "preact": "^8.2.5", + "preact-compat": "^3.17.0", + "prop-types": "^15.5.10" + } + }, + "preact-transition-group": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/preact-transition-group/-/preact-transition-group-1.1.1.tgz", + "integrity": "sha1-8KSTJ+pRXs406ivoZMSn0p5dbhA=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "prettier": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.9.2.tgz", + "integrity": "sha512-piXx9N2WT8hWb7PBbX1glAuJVIkEyUV9F5fMXFINpZ0x3otVOFKKeGmeuiclFJlP/UrgTckyV606VjH2rNK4bw==", + "dev": true + }, + "prettier-bytes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prettier-bytes/-/prettier-bytes-1.0.4.tgz", + "integrity": "sha1-mUsCqkb2mcULYle1+qp/4lV+YtY=", + "dev": true + }, + "prettier-eslint": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-8.8.2.tgz", + "integrity": "sha512-2UzApPuxi2yRoyMlXMazgR6UcH9DKJhNgCviIwY3ixZ9THWSSrUww5vkiZ3C48WvpFl1M1y/oU63deSy1puWEA==", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "common-tags": "^1.4.0", + "dlv": "^1.1.0", + "eslint": "^4.0.0", + "indent-string": "^3.2.0", + "lodash.merge": "^4.6.0", + "loglevel-colored-level-prefix": "^1.0.0", + "prettier": "^1.7.0", + "pretty-format": "^23.0.1", + "require-relative": "^0.8.7", + "typescript": "^2.5.1", + "typescript-eslint-parser": "^16.0.0", + "vue-eslint-parser": "^2.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.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" + } + }, + "pretty-format": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", + "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0", + "ansi-styles": "^3.2.0" + } + } + } + }, + "prettier-standard": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/prettier-standard/-/prettier-standard-8.0.1.tgz", + "integrity": "sha512-egiIKvmlizoXuRkh83myjB4elmdIahCaUACLDaZyCgvspZQyps0fUayQpvcv4/gW/XahMTu95a3f9Fu8ouGYZw==", + "dev": true, + "requires": { + "@sheerun/eslint-config-standard": "^10.2.1", + "babel-eslint": ">=7.2.3", + "babel-runtime": "^6.23.0", + "chalk": "^2.3.0", + "core-js": "^2.5.3", + "eslint": "^4.7.2", + "find-up": "^2.1.0", + "get-stdin": "^5.0.1", + "glob": "^7.1.2", + "ignore": "^3.3.3", + "indent-string": "^3.1.0", + "lodash.memoize": "^4.1.2", + "loglevel-colored-level-prefix": "^1.0.0", + "messageformat": "^1.0.2", + "minimist": "1.2.0", + "prettier": "1.9.x", + "prettier-eslint": "^8.1.1", + "regenerator-runtime": "^0.11.1", + "rxjs": "^5.4.0" + }, + "dependencies": { + "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" + } + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "pretty-format": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz", + "integrity": "sha1-v77VbV6ad2ZF9LH/eqGjrE+jw4U=", + "dev": true + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "pretty-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-2.1.0.tgz", + "integrity": "sha1-QlfCVt8/sLRR1q/6qwIYhBJpgdw=", + "dev": true, + "requires": { + "is-finite": "^1.0.1", + "parse-ms": "^1.0.0", + "plur": "^1.0.0" + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "prop-types": { + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", + "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", + "dev": true, + "requires": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.6.0.tgz", + "integrity": "sha512-KIJqT9jQJDQx5h5uAVPimw6yVg2SekOKu959OCtktD3FjzbpvaPr8i4zzg07DOMz+igA4W/aNM7OV8H37pFYfA==", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "quick-lru": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", + "dev": true + }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "randombytes": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "re-emitter": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/re-emitter/-/re-emitter-1.1.3.tgz", + "integrity": "sha1-+p4xn/3u6zWycpbvDz03TawvUqc=", + "dev": true + }, + "read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "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==", + "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" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } + } + }, + "redent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "dev": true, + "requires": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + } + }, + "redeyed": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", + "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", + "dev": true, + "requires": { + "esprima": "~4.0.0" + } + }, + "reduce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/reduce/-/reduce-1.0.1.tgz", + "integrity": "sha1-FPouX/H8VgcDoCDLtfuqtpFWWAQ=", + "dev": true, + "requires": { + "object-keys": "~1.0.0" + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz", + "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz", + "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==", + "dev": true, + "requires": { + "private": "^0.1.6" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp-tree": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.1.tgz", + "integrity": "sha512-HwRjOquc9QOwKTgbxvZTcddS5mlNlwePMQ3NFL8broajMLD5CXDAqas8Y5yxJH5QtZp5iRor3YCILd5pz71Cgw==", + "dev": true, + "requires": { + "cli-table3": "^0.5.0", + "colors": "^1.1.2", + "yargs": "^12.0.5" + }, + "dependencies": { + "colors": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", + "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", + "dev": true + } + } + }, + "regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true + }, + "regexpu-core": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.4.0.tgz", + "integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^7.0.0", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.0.2" + } + }, + "registry-auth-token": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "dev": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "^1.0.1" + } + }, + "regjsgen": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", + "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", + "dev": true + }, + "regjsparser": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "reload-css": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/reload-css/-/reload-css-1.0.2.tgz", + "integrity": "sha1-avsRFi4jFP7M2tbcX96CH9cxgzE=", + "dev": true, + "requires": { + "query-string": "^4.2.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "req-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", + "integrity": "sha1-1AgrTURZgDZkD7c93qAe1T20nrw=", + "dev": true, + "requires": { + "req-from": "^2.0.0" + } + }, + "req-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", + "integrity": "sha1-10GI5H+TeW9Kpx327jWuaJ8+DnA=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "require-relative": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", + "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", + "dev": true + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + } + } + }, + "reserved-words": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.2.tgz", + "integrity": "sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=", + "dev": true + }, + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "resp-modifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", + "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", + "dev": true, + "requires": { + "debug": "^2.2.0", + "minimatch": "^3.0.2" + } + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^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" + } + }, + "resumer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", + "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", + "dev": true, + "requires": { + "through": "~2.3.4" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "rev-hash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/rev-hash/-/rev-hash-2.0.0.tgz", + "integrity": "sha1-dyCiNu0MJY3z5kvsA+wEiwW5JMQ=", + "dev": true + }, + "right-now": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/right-now/-/right-now-1.0.0.tgz", + "integrity": "sha1-bolgne69fc2vja7Mmuo5z1haCRg=", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "dev": true + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "*" + } + }, + "rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "semantic-release": { + "version": "15.13.3", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-15.13.3.tgz", + "integrity": "sha512-cax0xPPTtsxHlrty2HxhPql2TTvS74Ni2O8BzwFHxNY/mviVKEhI4OxHzBYJkpVxx1fMVj36+oH7IlP+SJtPNA==", + "dev": true, + "requires": { + "@semantic-release/commit-analyzer": "^6.1.0", + "@semantic-release/error": "^2.2.0", + "@semantic-release/github": "^5.1.0", + "@semantic-release/npm": "^5.0.5", + "@semantic-release/release-notes-generator": "^7.1.2", + "aggregate-error": "^2.0.0", + "cosmiconfig": "^5.0.1", + "debug": "^4.0.0", + "env-ci": "^3.0.0", + "execa": "^1.0.0", + "figures": "^2.0.0", + "find-versions": "^3.0.0", + "get-stream": "^4.0.0", + "git-log-parser": "^1.2.0", + "hook-std": "^1.1.0", + "hosted-git-info": "^2.7.1", + "lodash": "^4.17.4", + "marked": "^0.6.0", + "marked-terminal": "^3.2.0", + "p-locate": "^3.0.0", + "p-reduce": "^1.0.0", + "read-pkg-up": "^4.0.0", + "resolve-from": "^4.0.0", + "semver": "^5.4.1", + "signale": "^1.2.1", + "yargs": "^12.0.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "p-limit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "requires": { + "semver": "^5.0.3" + } + }, + "semver-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", + "dev": true + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shasum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "dev": true, + "requires": { + "json-stable-stringify": "~0.0.0", + "sha.js": "~2.4.4" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true, + "requires": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "signale": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/signale/-/signale-1.3.0.tgz", + "integrity": "sha512-TyFhsQ9wZDYDfsPqWMyjCxsDoMwfpsT0130Mce7wDiVCSDdtWSg83dOqoj8aGpGCs3n1YPcam6sT1OFPuGT/OQ==", + "dev": true, + "requires": { + "chalk": "^2.3.2", + "figures": "^2.0.0", + "pkg-conf": "^2.1.0" + }, + "dependencies": { + "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" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "simple-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", + "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", + "dev": true + }, + "simple-html-index": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/simple-html-index/-/simple-html-index-1.5.0.tgz", + "integrity": "sha1-LJPurrrAAdihNfwAIr1K3o9YmW8=", + "dev": true, + "requires": { + "from2-string": "^1.1.0" + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0" + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", + "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz", + "integrity": "sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg==", + "dev": true + }, + "spawn-error-forwarder": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", + "integrity": "sha1-Gv2Uc46ZmwNG17n8NzvlXgdXcCk=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", + "dev": true + }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "requires": { + "through": "2" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "split2": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz", + "integrity": "sha1-At2smtwD7Au3jBKC7Aecpuha6QA=", + "dev": true, + "requires": { + "through2": "~0.6.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "stacked": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stacked/-/stacked-1.1.1.tgz", + "integrity": "sha1-LH+jjMfjejQRp3zY55LeRI+faXU=", + "dev": true + }, + "standalone-react-addons-pure-render-mixin": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/standalone-react-addons-pure-render-mixin/-/standalone-react-addons-pure-render-mixin-0.1.1.tgz", + "integrity": "sha1-PHQJ9MecQN6axyxhbPZ5qZTzdVE=", + "dev": true + }, + "standard": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/standard/-/standard-12.0.1.tgz", + "integrity": "sha512-UqdHjh87OG2gUrNCSM4QRLF5n9h3TFPwrCNyVlkqu31Hej0L/rc8hzKqVvkb2W3x0WMq7PzZdkLfEcBhVOR6lg==", + "dev": true, + "requires": { + "eslint": "~5.4.0", + "eslint-config-standard": "12.0.0", + "eslint-config-standard-jsx": "6.0.2", + "eslint-plugin-import": "~2.14.0", + "eslint-plugin-node": "~7.0.1", + "eslint-plugin-promise": "~4.0.0", + "eslint-plugin-react": "~7.11.1", + "eslint-plugin-standard": "~4.0.0", + "standard-engine": "~9.0.0" + }, + "dependencies": { + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "dev": true + }, + "ajv": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.8.1.tgz", + "integrity": "sha512-eqxCp82P+JfqL683wwsL73XmFs1eG6qjw+RD3YHx+Jll1r0jNd4dh8QG9NYAeNGA/hnZjeEDgtTskgJULbxpWQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.3.0.tgz", + "integrity": "sha512-CMzN9S62ZOO4sA/mJZIO4S++ZM7KFWzH3PPWkveLhy4OZ9i1/VatgwWMD46w/XbGCBy7Ye0gCk+Za6mmyfKK7g==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.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" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "eslint": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.4.0.tgz", + "integrity": "sha512-UIpL91XGex3qtL6qwyCQJar2j3osKxK9e3ano3OcGEIRM4oWIpCkDg9x95AXEC2wMs7PnxzOkPZ2gq+tsMS9yg==", + "dev": true, + "requires": { + "ajv": "^6.5.0", + "babel-code-frame": "^6.26.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^4.0.0", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^4.0.0", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.2", + "imurmurhash": "^0.1.4", + "inquirer": "^5.2.0", + "is-resolvable": "^1.1.0", + "js-yaml": "^3.11.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.5", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^2.0.0", + "require-uncached": "^1.0.3", + "semver": "^5.5.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^4.0.3", + "text-table": "^0.2.0" + } + }, + "eslint-scope": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", + "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "espree": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", + "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", + "dev": true, + "requires": { + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "inquirer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", + "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.1.0", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^5.5.2", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz", + "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", + "dev": true, + "requires": { + "ajv": "^6.0.1", + "ajv-keywords": "^3.0.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", + "string-width": "^2.1.1" + } + } + } + }, + "standard-engine": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-9.0.0.tgz", + "integrity": "sha512-ZfNfCWZ2Xq67VNvKMPiVMKHnMdvxYzvZkf1AH8/cw2NLDBm5LRsxMqvEJpsjLI/dUosZ3Z1d6JlHDp5rAvvk2w==", + "dev": true, + "requires": { + "deglob": "^2.1.0", + "get-stdin": "^6.0.0", + "minimist": "^1.1.0", + "pkg-conf": "^2.0.0" + }, + "dependencies": { + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + } + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dev": true, + "requires": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-splicer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", + "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.trim": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", + "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.0", + "function-bind": "^1.0.2" + } + }, + "string_decoder": { + "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" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "dev": true, + "requires": { + "minimist": "^1.1.0" + } + }, + "supports-color": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", + "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", + "dev": true + }, + "supports-hyperlinks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz", + "integrity": "sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==", + "dev": true, + "requires": { + "has-flag": "^2.0.0", + "supports-color": "^5.0.0" + }, + "dependencies": { + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + } + } + } + } + }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true + }, + "syntax-error": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", + "dev": true, + "requires": { + "acorn-node": "^1.2.0" + } + }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "requires": { + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", + "string-width": "^2.1.1" + }, + "dependencies": { + "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" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "tap-out": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tap-out/-/tap-out-2.1.0.tgz", + "integrity": "sha512-LJE+TBoVbOWhwdz4+FQk40nmbIuxJLqaGvj3WauQw3NYYU5TdjoV3C0x/yq37YAvVyi+oeBXmWnxWSjJ7IEyUw==", + "dev": true, + "requires": { + "re-emitter": "1.1.3", + "readable-stream": "2.2.9", + "split": "1.0.0", + "trim": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "readable-stream": { + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true, + "requires": { + "buffer-shims": "~1.0.0", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~1.0.0", + "util-deprecate": "~1.0.1" + } + }, + "split": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.0.tgz", + "integrity": "sha1-xDlc5oOrzSVLwo/h2rtuXCfc/64=", + "dev": true, + "requires": { + "through": "2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "tap-spec": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tap-spec/-/tap-spec-5.0.0.tgz", + "integrity": "sha512-zMDVJiE5I6Y4XGjlueGXJIX2YIkbDN44broZlnypT38Hj/czfOXrszHNNJBF/DXR8n+x6gbfSx68x04kIEHdrw==", + "dev": true, + "requires": { + "chalk": "^1.0.0", + "duplexer": "^0.1.1", + "figures": "^1.4.0", + "lodash": "^4.17.10", + "pretty-ms": "^2.1.0", + "repeat-string": "^1.5.2", + "tap-out": "^2.1.0", + "through2": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "tape": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/tape/-/tape-4.9.2.tgz", + "integrity": "sha512-lPXKRKILZ1kZaUy5ynWKs8ATGSUO7HAFHCFnBam6FaGSqPdOwMWbxXHq4EXFLE8WRTleo/YOMXkaUTRmTB1Fiw==", + "dev": true, + "requires": { + "deep-equal": "~1.0.1", + "defined": "~1.0.0", + "for-each": "~0.3.3", + "function-bind": "~1.1.1", + "glob": "~7.1.2", + "has": "~1.0.3", + "inherits": "~2.0.3", + "minimist": "~1.2.0", + "object-inspect": "~1.6.0", + "resolve": "~1.7.1", + "resumer": "~0.0.0", + "string.prototype.trim": "~1.1.2", + "through": "~2.3.8" + }, + "dependencies": { + "resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } + } + } + }, + "term-color": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/term-color/-/term-color-1.0.1.tgz", + "integrity": "sha1-OOGSVTpHPjXkFgT/UZmEa/gRejo=", + "dev": true, + "requires": { + "ansi-styles": "2.0.1", + "supports-color": "1.3.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.0.1.tgz", + "integrity": "sha1-sDP1f5Pi0oreuLwRE4+hPaD9IKM=", + "dev": true + }, + "supports-color": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.3.1.tgz", + "integrity": "sha1-FXWN8J2P87SswwdTn6vicJXhBC0=", + "dev": true + } + } + }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "^0.7.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + } + } + }, + "text-extensions": { + "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": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, + "timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "dev": true, + "requires": { + "process": "~0.11.0" + }, + "dependencies": { + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + } + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-factory": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-factory/-/to-factory-1.0.0.tgz", + "integrity": "sha1-hzivi9lxIK0dQEeXKtpVY7+UebE=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "transform-ast": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/transform-ast/-/transform-ast-2.4.4.tgz", + "integrity": "sha512-AxjeZAcIOUO2lev2GDe3/xZ1Q0cVGjIMk5IsriTy8zbWlsEnjeB025AhkhBJHoy997mXpLd4R+kRbvnnQVuQHQ==", + "dev": true, + "requires": { + "acorn-node": "^1.3.0", + "convert-source-map": "^1.5.1", + "dash-ast": "^1.0.0", + "is-buffer": "^2.0.0", + "magic-string": "^0.23.2", + "merge-source-map": "1.0.4", + "nanobench": "^2.1.1" + }, + "dependencies": { + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", + "dev": true + }, + "magic-string": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.23.2.tgz", + "integrity": "sha512-oIUZaAxbcxYIp4AyLafV6OVKoB3YouZs0UTCJ8mOKBHNyJgGDaMJ4TgA+VylJh6fx7EQCC52XkbURxxG9IoJXA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.1" + } + } + } + }, + "traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", + "dev": true + }, + "travis-deploy-once": { + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/travis-deploy-once/-/travis-deploy-once-5.0.11.tgz", + "integrity": "sha512-iyctEtFvgXxin3Ur6jqqM9QdUqUKU8DShdVlRMDFwhLZ8+IGt3PnYPNZDSW45iDKCiUNJ0tGVidNpVDBG2ioKQ==", + "dev": true, + "requires": { + "@babel/core": "^7.0.0", + "@babel/polyfill": "^7.0.0", + "@babel/preset-env": "^7.0.0", + "@babel/register": "^7.0.0", + "chalk": "^2.1.0", + "execa": "^1.0.0", + "got": "^9.1.0", + "p-retry": "^3.0.0", + "semver": "^5.4.1", + "update-notifier": "^2.3.0", + "url-join": "^4.0.0", + "yargs": "^12.0.1" + }, + "dependencies": { + "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" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", + "dev": true + }, + "trim-newlines": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", + "dev": true + }, + "trim-off-newlines": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", + "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typescript": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", + "dev": true + }, + "typescript-eslint-parser": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-16.0.1.tgz", + "integrity": "sha512-IKawLTu4A2xN3aN/cPLxvZ0bhxZHILGDKTZWvWNJ3sLNhJ3PjfMEDQmR2VMpdRPrmWOadgWXRwjLBzSA8AGsaQ==", + "dev": true, + "requires": { + "lodash.unescape": "4.0.1", + "semver": "5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + } + } + }, + "uglify-js": { + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "dev": true, + "optional": true, + "requires": { + "commander": "~2.17.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "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 + } + } + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "dev": true + }, + "umd": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", + "dev": true + }, + "undeclared-identifiers": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.2.tgz", + "integrity": "sha512-13EaeocO4edF/3JKime9rD7oB6QI8llAGhgn5fKOPyfkJbRb6NFv9pYV6dFEmpa4uRjKeBqLZP8GpuzqHlKDMQ==", + "dev": true, + "requires": { + "acorn-node": "^1.3.0", + "get-assigned-identifiers": "^1.2.0", + "simple-concat": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz", + "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz", + "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==", + "dev": true + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + } + } + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "universal-user-agent": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-2.0.3.tgz", + "integrity": "sha512-eRHEHhChCBHrZsA4WEhdgiOKgdvgrMIHwnwnqD0r5C6AO8kwKcG7qSku3iXdhvHL3YvsS9ZkSGN8h/hIpoFC8g==", + "dev": true, + "requires": { + "os-name": "^3.0.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true + }, + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "dev": true + }, + "update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "dev": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "dependencies": { + "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" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "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 + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-join": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", + "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=", + "dev": true + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "url-template": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", + "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=", + "dev": true + }, + "url-trim": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-trim/-/url-trim-1.0.0.tgz", + "integrity": "sha1-QAV+LxZLiOXaynJp2kfm0d2Detw=", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true + }, + "vm-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", + "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==", + "dev": true + }, + "vue-eslint-parser": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz", + "integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.2", + "esquery": "^1.0.0", + "lodash": "^4.17.4" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "watchify": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/watchify/-/watchify-3.11.0.tgz", + "integrity": "sha512-7jWG0c3cKKm2hKScnSAMUEUjRJKXUShwMPk0ASVhICycQhwND3IMAdhJYmc1mxxKzBUJTSF5HZizfrKrS6BzkA==", + "dev": true, + "requires": { + "anymatch": "^1.3.0", + "browserify": "^16.1.0", + "chokidar": "^1.0.0", + "defined": "^1.0.0", + "outpipe": "^1.1.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "requires": { + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "watchify-middleware": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/watchify-middleware/-/watchify-middleware-1.8.0.tgz", + "integrity": "sha512-INYU5/3zTZtWQvJKPelr47j0JeLTZK4GUDF0PoMltMPzMUEh/lW6g1t+Qe/tGHxm70AUc0NQrth3k3PTfOU9Nw==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "debounce": "^1.0.0", + "events": "^1.0.2", + "object-assign": "^4.0.1", + "strip-ansi": "^3.0.0", + "watchify": "^3.3.1" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "dev": true, + "requires": { + "string-width": "^2.1.1" + } + }, + "windows-release": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.1.0.tgz", + "integrity": "sha512-hBb7m7acFgQPQc222uEQTmdcGLeBmQLNLFIh0rDk3CwFOBrfjefLzEfEfmpMq8Af/n/GnFf3eYf203FY1PmudA==", + "dev": true, + "requires": { + "execa": "^0.10.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.2.tgz", + "integrity": "sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "dev": true, + "requires": { + "options": ">=0.0.5", + "ultron": "1.0.x" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + } + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "dev": true + } + } + } + } +} diff --git a/package.json b/package.json index 64c9e30..a13083f 100644 --- a/package.json +++ b/package.json @@ -7,9 +7,9 @@ "license": "MIT", "main": "index.js", "scripts": { - "build": "script/build.js", + "build": "node script/build.js", "preupload": "npm run test", - "upload": "script/upload.js", + "upload": "node script/upload.js", "update": "script/update.sh", "pretest": "npm run build", "test": "tape test.js | tap-spec && standard --fix", diff --git a/test.js b/test.js index 132f3d3..2e48da7 100644 --- a/test.js +++ b/test.js @@ -10,7 +10,7 @@ test('electron-search', t => { // All Indices // ---------------------------------------------------------------------- - const indexNames = ['apis', 'apps', 'packages', 'tutorials'] + const indexNames = ['apis', 'apps', 'glossary', 'packages', 'tutorials'] t.deepEqual(Object.keys(indices), indexNames, 'defines expected indexNames as keys') t.deepEqual(Object.values(indices).map(index => index.name), indexNames, 'has expected index names') @@ -40,7 +40,7 @@ test('electron-search', t => { }) const apisWithTldrs = apis.filter(api => api.tldr && api.tldr.length > 10) - const tldrThreshold = 95 + const tldrThreshold = 80 t.ok(apisWithTldrs.length / apis.length * 100 > tldrThreshold, `At least ${tldrThreshold}% of APIs have a tldr`) // method URLs should match the slugs generated by github.com (and hubdown) @@ -64,6 +64,21 @@ test('electron-search', t => { t.ok(tutorial.keyValuePairs.includes('is:tutorial'), `${tutorial.title} has is:tutorial key-value pair`) }) + // Glossary + // ---------------------------------------------------------------------- + const glossarys = indices.glossary.records + + t.ok(glossarys.length > 15, 'lots of glossary') + + glossarys.forEach(glossary => { + if (!glossary.term) console.log(glossary) + t.equal(typeof glossary.term, 'string', `${glossary.title} has a title`) + t.equal(typeof glossary.description, 'string', `${glossary.title} has a body`) + t.ok(isURL(glossary.url), `${glossary.title} has a valid website URL`) + t.ok(glossary.keyValuePairs.includes('is:doc'), `${glossary.title} has is:doc key-value pair`) + t.ok(glossary.keyValuePairs.includes('is:glossary'), `${glossary.title} has is:glossary key-value pair`) + }) + // Packages // ---------------------------------------------------------------------- const packages = indices.packages.records @@ -79,8 +94,23 @@ test('electron-search', t => { // t.ok(isURL(pkg.repository), `${pkg.title} has a valid repository`) }) - // TODO: Apps + // Apps // ---------------------------------------------------------------------- + const apps = indices.apps.records + + t.ok(apps.length > 500, 'lots of APPS') + + apps.forEach(app => { + if (!app.name) console.log(app) + t.equal(typeof app.name, 'string', `${app.name} has a name`) + t.ok(app.keyValuePairs.includes('is:app'), `${app.name} has is:pkg key-value pair`) + t.ok(app.keyValuePairs.includes('is:app'), `${app.name} has is:package key-value pair`) + t.equal(typeof app.category, 'string', `${app.name} has category`) + t.equal(typeof app.icon, 'string', `${app.name} has icon`) + // Skipped, not all apps have a website or repository. + // t.ok(isURL(app.website), `${app.title} has a valid website URL`) + // t.ok(isURL(app.repository), `${app.title} has a valid repository`) + }) // TODO: Repos // ----------------------------------------------------------------------