From d22e05ac34950e82ed6f78450966d254066df622 Mon Sep 17 00:00:00 2001 From: Ryan Plessner Date: Mon, 11 Mar 2019 17:52:48 -0400 Subject: [PATCH 1/8] Add ability to optionally use Hawk payload validation. (#1339) * Add ability to optionally use Hawk payload validation. * Simplify signature of 'getAuthHeader' --- packages/insomnia-app/app/common/har.js | 7 +-- .../network/__tests__/authentication.test.js | 18 ++++--- .../app/network/authentication.js | 25 ++++++--- packages/insomnia-app/app/network/network.js | 7 +-- .../ui/components/editors/auth/hawk-auth.js | 53 ++++++++++++++++++- 5 files changed, 83 insertions(+), 27 deletions(-) diff --git a/packages/insomnia-app/app/common/har.js b/packages/insomnia-app/app/common/har.js index cd8ef6eeb9..4065bd38dc 100644 --- a/packages/insomnia-app/app/common/har.js +++ b/packages/insomnia-app/app/common/har.js @@ -339,12 +339,7 @@ export async function exportHarWithRenderedRequest( // Set auth header if we have it if (!misc.hasAuthHeader(renderedRequest.headers)) { - const header = await getAuthHeader( - renderedRequest._id, - url, - renderedRequest.method, - renderedRequest.authentication, - ); + const header = await getAuthHeader(renderedRequest, url); if (header) { renderedRequest.headers.push({ name: header.name, diff --git a/packages/insomnia-app/app/network/__tests__/authentication.test.js b/packages/insomnia-app/app/network/__tests__/authentication.test.js index d5edece4f3..779a3c6239 100644 --- a/packages/insomnia-app/app/network/__tests__/authentication.test.js +++ b/packages/insomnia-app/app/network/__tests__/authentication.test.js @@ -3,7 +3,7 @@ import { AUTH_OAUTH_1 } from '../../common/constants'; describe('OAuth 1.0', () => { it('Does OAuth 1.0', async () => { - const header = await getAuthHeader('req_123', 'https://insomnia.rest/', 'GET', { + const authentication = { type: AUTH_OAUTH_1, consumerKey: 'consumerKey', consumerSecret: 'consumerSecret', @@ -13,7 +13,9 @@ describe('OAuth 1.0', () => { signatureMethod: 'HMAC-SHA1', nonce: 'nonce', timestamp: '1234567890', - }); + }; + const request = { url: 'https://insomnia.rest/', method: 'GET', authentication }; + const header = await getAuthHeader(request, 'https://insomnia.rest/'); expect(header).toEqual({ name: 'Authorization', @@ -31,7 +33,7 @@ describe('OAuth 1.0', () => { }); it('Does OAuth 1.0 with RSA-SHA1', async () => { - const header = await getAuthHeader('req_123', 'https://insomnia.rest/', 'GET', { + const authentication = { type: AUTH_OAUTH_1, consumerKey: 'consumerKey', consumerSecret: 'consumerSecret', @@ -57,7 +59,9 @@ describe('OAuth 1.0', () => { '-----END RSA PRIVATE KEY-----', nonce: 'nonce', timestamp: '1234567890', - }); + }; + const request = { url: 'https://insomnia.rest/', method: 'GET', authentication }; + const header = await getAuthHeader(request, 'https://insomnia.rest/'); expect(header).toEqual({ name: 'Authorization', @@ -75,12 +79,14 @@ describe('OAuth 1.0', () => { }); it('Does OAuth 1.0 with defaults', async () => { - const header = await getAuthHeader('req_123', 'https://insomnia.rest/', 'GET', { + const authentication = { type: AUTH_OAUTH_1, consumerKey: 'consumerKey', consumerSecret: 'consumerSecret', signatureMethod: 'HMAC-SHA1', - }); + }; + const request = { url: 'https://insomnia.rest/', method: 'GET', authentication }; + const header = await getAuthHeader(request, 'https://insomnia.rest/'); expect(header.name).toBe('Authorization'); expect(header.value).toMatch( diff --git a/packages/insomnia-app/app/network/authentication.js b/packages/insomnia-app/app/network/authentication.js index 0d9dc5da91..7b451a346b 100644 --- a/packages/insomnia-app/app/network/authentication.js +++ b/packages/insomnia-app/app/network/authentication.js @@ -11,7 +11,7 @@ import getOAuth2Token from './o-auth-2/get-token'; import getOAuth1Token from './o-auth-1/get-token'; import * as Hawk from 'hawk'; import jwtAuthentication from 'jwt-authentication'; -import type { RequestAuthentication } from '../models/request'; +import type { RenderedRequest } from '../common/render'; import { getBasicAuthHeader } from './basic-auth/get-header'; import { getBearerAuthHeader } from './bearer-auth/get-header'; @@ -21,11 +21,12 @@ type Header = { }; export async function getAuthHeader( - requestId: string, + renderedRequest: RenderedRequest, url: string, - method: string, - authentication: RequestAuthentication, ): Promise
{ + const { method, authentication } = renderedRequest; + const requestId = renderedRequest._id; + if (authentication.disabled) { return null; } @@ -69,11 +70,21 @@ export async function getAuthHeader( } if (authentication.type === AUTH_HAWK) { - const { id, key, algorithm, ext } = authentication; - const header = Hawk.client.header(url, method, { + const { id, key, algorithm, ext, validatePayload } = authentication; + let headerOptions = { credentials: { id, key, algorithm }, ext: ext, - }); + }; + + if (validatePayload) { + const payloadValidationFields = { + payload: renderedRequest.body.text, + contentType: renderedRequest.body.mimeType, + }; + headerOptions = Object.assign({}, payloadValidationFields, headerOptions); + } + + const header = Hawk.client.header(url, method, headerOptions); return { name: 'Authorization', value: header.field, diff --git a/packages/insomnia-app/app/network/network.js b/packages/insomnia-app/app/network/network.js index 250665e773..4886718c80 100644 --- a/packages/insomnia-app/app/network/network.js +++ b/packages/insomnia-app/app/network/network.js @@ -594,12 +594,7 @@ export async function _actuallySend( } else if (renderedRequest.authentication.type === AUTH_NETRC) { setOpt(Curl.option.NETRC, Curl.netrc.REQUIRED); } else { - const authHeader = await getAuthHeader( - renderedRequest._id, - finalUrl, - renderedRequest.method, - renderedRequest.authentication, - ); + const authHeader = await getAuthHeader(renderedRequest, finalUrl); if (authHeader) { headers.push({ diff --git a/packages/insomnia-app/app/ui/components/editors/auth/hawk-auth.js b/packages/insomnia-app/app/ui/components/editors/auth/hawk-auth.js index 5ac43a008c..3e28cd6480 100644 --- a/packages/insomnia-app/app/ui/components/editors/auth/hawk-auth.js +++ b/packages/insomnia-app/app/ui/components/editors/auth/hawk-auth.js @@ -49,6 +49,11 @@ class HawkAuth extends React.PureComponent { this._handleChangeProperty('ext', value); } + _handleChangePayloadValidation(): void { + const { request } = this.props; + this._handleChangeProperty('validatePayload', !request.authentication.validatePayload); + } + renderHawkAuthenticationFields(): React.Node { const hawkAuthId = this.renderInputRow('Auth ID', 'id', this._handleChangeHawkAuthId); @@ -66,7 +71,13 @@ class HawkAuth extends React.PureComponent { const ext = this.renderInputRow('Ext', 'ext', this._handleChangeExt); - return [hawkAuthId, hawkAuthKey, algorithm, ext]; + const payloadValidation = this.renderButtonRow( + 'Validate Payload', + 'validatePayload', + this._handleChangePayloadValidation, + ); + + return [hawkAuthId, hawkAuthKey, algorithm, ext, payloadValidation]; } renderSelectRow( @@ -115,7 +126,7 @@ class HawkAuth extends React.PureComponent { isVariableUncovered, } = this.props; - const {authentication} = request; + const { authentication } = request; const id = label.replace(/ /g, '-'); return ( @@ -146,6 +157,44 @@ class HawkAuth extends React.PureComponent { ); } + renderButtonRow(label: string, property: string, onChange: Function): React.Element<*> { + const { request } = this.props; + const { authentication } = request; + const id = label.replace(/ /g, '-'); + return ( + + + + + +
+ +
+ + + ); + } + render() { const fields = this.renderHawkAuthenticationFields(); const { authentication } = this.props.request; From 086f338182591cf49f3a014e71b81055891c07f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Serta=C3=A7=20=C3=96zercan?= Date: Mon, 11 Mar 2019 14:54:32 -0700 Subject: [PATCH 2/8] add darkModeSupport (#1366) --- packages/insomnia-app/.electronbuilder | 1 + packages/insomnia-app/package-lock.json | 1664 ++++++++--------- packages/insomnia-app/package.json | 6 +- packages/insomnia-cookies/package-lock.json | 2 +- .../insomnia-httpsnippet/package-lock.json | 2 +- packages/insomnia-importers/package-lock.json | 2 +- packages/insomnia-libcurl/package-lock.json | 2 +- packages/insomnia-xpath/package-lock.json | 2 +- .../package-lock.json | 2 +- .../package-lock.json | 2 +- plugins/insomnia-plugin-now/package-lock.json | 2 +- plugins/insomnia-plugin-os/package-lock.json | 2 +- .../package-lock.json | 2 +- .../insomnia-plugin-uuid/package-lock.json | 2 +- 14 files changed, 760 insertions(+), 933 deletions(-) diff --git a/packages/insomnia-app/.electronbuilder b/packages/insomnia-app/.electronbuilder index ab0c8373f5..9f3979e125 100644 --- a/packages/insomnia-app/.electronbuilder +++ b/packages/insomnia-app/.electronbuilder @@ -24,6 +24,7 @@ }, "mac": { "category": "public.app-category.developer-tools", + "darkModeSupport": true, "target": [ "dmg", "zip" diff --git a/packages/insomnia-app/package-lock.json b/packages/insomnia-app/package-lock.json index a858f13e1b..4a6d5d0252 100644 --- a/packages/insomnia-app/package-lock.json +++ b/packages/insomnia-app/package-lock.json @@ -1,36 +1,15 @@ { "name": "insomnia-app", - "version": "1.0.48", + "version": "1.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { "7zip-bin": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-4.0.2.tgz", - "integrity": "sha512-XtGk+IF57pr852UK1AhQJXqmm1WmSgS5uISL+LPs0z/iAxXouMvdlLJrHPeukP6gd7yR2rDTMSMkHNODgwIq7A==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-4.1.0.tgz", + "integrity": "sha512-AsnBZN3a8/JcNt+KPkGGODaA4c7l3W5+WpeKgGSbstSLxqWtTXqd1ieJGBQ8IFCtRg8DmmKUcSkIkUc0A4p3YA==", "dev": true }, - "7zip-bin-linux": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/7zip-bin-linux/-/7zip-bin-linux-1.3.1.tgz", - "integrity": "sha512-Wv1uEEeHbTiS1+ycpwUxYNuIcyohU6Y6vEqY3NquBkeqy0YhVdsNUGsj0XKSRciHR6LoJSEUuqYUexmws3zH7Q==", - "dev": true, - "optional": true - }, - "7zip-bin-mac": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/7zip-bin-mac/-/7zip-bin-mac-1.0.1.tgz", - "integrity": "sha1-Pmh3i78JJq3GgVlCcHRQXUdVXAI=", - "dev": true, - "optional": true - }, - "7zip-bin-win": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/7zip-bin-win/-/7zip-bin-win-2.2.0.tgz", - "integrity": "sha512-uPHXapEmUtlUKTBx4asWMlxtFUWXzEY0KVEgU7QKhgO2LJzzM3kYxM6yOyUZTtYE6mhK4dDn3FDut9SCQWHzgg==", - "dev": true, - "optional": true - }, "@babel/code-frame": { "version": "7.0.0-beta.44", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz", @@ -605,11 +584,82 @@ } }, "app-builder-bin": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-1.11.3.tgz", - "integrity": "sha512-ZNctydrq0tXRTCMNvjsnFKV1jpo3/0yhcwNKAeTKpqHIHxugANoU1tep/CxBCt0cA6AsNPlm8hQXR2O4qF4NoA==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-2.6.3.tgz", + "integrity": "sha512-JL8C41e6yGIchFsHP/q15aGNedAaUakLhkV6ER0Yxafx08sRnlDnlkAkEIKjX7edg/4i7swpGa6CBv1zX9GgCA==", "dev": true }, + "app-builder-lib": { + "version": "20.38.5", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-20.38.5.tgz", + "integrity": "sha512-vVgM9d9twwlhr+8vNAJOAD9dyVBRk7reuVa1BE1OmvaHb1M+fS8KpvcDKVdBqX9KDHy7zSc57mnIcHgax4/XMA==", + "dev": true, + "requires": { + "7zip-bin": "~4.1.0", + "app-builder-bin": "2.6.3", + "async-exit-hook": "^2.0.1", + "bluebird-lst": "^1.0.6", + "builder-util": "9.6.2", + "builder-util-runtime": "8.1.1", + "chromium-pickle-js": "^0.2.0", + "debug": "^4.1.1", + "ejs": "^2.6.1", + "electron-osx-sign": "0.4.11", + "electron-publish": "20.38.5", + "fs-extra-p": "^7.0.0", + "hosted-git-info": "^2.7.1", + "is-ci": "^2.0.0", + "isbinaryfile": "^4.0.0", + "js-yaml": "^3.12.1", + "lazy-val": "^1.0.3", + "minimatch": "^3.0.4", + "normalize-package-data": "^2.4.0", + "plist": "^3.0.1", + "read-config-file": "3.2.1", + "sanitize-filename": "^1.6.1", + "semver": "^5.6.0", + "temp-file": "^3.3.2" + }, + "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" + } + }, + "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 + }, + "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" + } + }, + "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 + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + } + } + }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", @@ -617,33 +667,52 @@ "dev": true }, "archiver": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-2.1.1.tgz", - "integrity": "sha1-/2YrSnggFJSj7lRNOjP+dJZQnrw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.0.0.tgz", + "integrity": "sha512-5QeR6Xc5hSA9X1rbQfcuQ6VZuUXOaEdB65Dhmk9duuRJHYif/ZyJfuyJqsQrj34PFjU5emv5/MmfgA8un06onw==", "dev": true, "requires": { - "archiver-utils": "^1.3.0", + "archiver-utils": "^2.0.0", "async": "^2.0.0", "buffer-crc32": "^0.2.1", "glob": "^7.0.0", - "lodash": "^4.8.0", "readable-stream": "^2.0.0", "tar-stream": "^1.5.0", - "zip-stream": "^1.2.0" + "zip-stream": "^2.0.1" } }, "archiver-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", - "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.0.0.tgz", + "integrity": "sha512-JRBgcVvDX4Mwu2RBF8bBaHcQCSxab7afsxAPYDQ5W+19quIPP5CfKE7Ql+UHs9wYvwsaNR8oDuhtf5iqrKmzww==", "dev": true, "requires": { "glob": "^7.0.0", "graceful-fs": "^4.1.0", "lazystream": "^1.0.0", - "lodash": "^4.8.0", - "normalize-path": "^2.0.0", + "lodash.assign": "^4.2.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.toarray": "^4.4.0", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", "readable-stream": "^2.0.0" + }, + "dependencies": { + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + }, + "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 + } } }, "are-we-there-yet": { @@ -797,12 +866,12 @@ "integrity": "sha1-ju8IJ/BN/w7IhXupJavj/qYZTlI=" }, "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "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.14.0" + "lodash": "^4.17.10" } }, "async-each": { @@ -1972,12 +2041,20 @@ "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" }, "bluebird-lst": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.5.tgz", - "integrity": "sha512-Ey0bDNys5qpYPhZ/oQ9vOEvD0TYQDTILMXWP2iGfvMg7rSDde+oV4aQQgqRH+CvBFNz2BSDQnPGMUl6LKBUUQA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.6.tgz", + "integrity": "sha512-CBWFoPuUPpcvMUxfyr8DKdI5d4kjxFl1h39+VbKxP3KJWJHEsLtuT4pPLkjpxCGU6Ask21tvbnftWXdqIxYldQ==", "dev": true, "requires": { - "bluebird": "^3.5.1" + "bluebird": "^3.5.2" + }, + "dependencies": { + "bluebird": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "dev": true + } } }, "bn.js": { @@ -2074,9 +2151,9 @@ "dev": true }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "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", @@ -2309,25 +2386,23 @@ "dev": true }, "builder-util": { - "version": "5.16.3", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-5.16.3.tgz", - "integrity": "sha512-BC4UgY3K8IjdFaGOZeHeERjh4i3U+lvXj7nxdt+RIyDgSEGUzBVX6f3hBl1IAf0/hSnNkqTQZH6QYhdeswiKmg==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-9.6.2.tgz", + "integrity": "sha512-cWl/0/Q851lesMmXp1IjreeAX1QAWA9e+iU2IT61oh+CvMYJnDwao2m9ZCHammdw2zllrwWu4fOC3gvsb/yOCw==", "dev": true, "requires": { - "7zip-bin": "~4.0.2", - "app-builder-bin": "1.11.3", - "bluebird-lst": "^1.0.5", - "builder-util-runtime": "^4.4.1", - "chalk": "^2.4.1", - "debug": "^3.1.0", - "fs-extra-p": "^4.6.1", - "is-ci": "^1.1.0", - "js-yaml": "^3.12.0", - "lazy-val": "^1.0.3", - "semver": "^5.5.0", - "source-map-support": "^0.5.6", + "7zip-bin": "~4.1.0", + "app-builder-bin": "2.6.3", + "bluebird-lst": "^1.0.6", + "builder-util-runtime": "^8.1.1", + "chalk": "^2.4.2", + "debug": "^4.1.1", + "fs-extra-p": "^7.0.0", + "is-ci": "^2.0.0", + "js-yaml": "^3.12.1", + "source-map-support": "^0.5.10", "stat-mode": "^0.2.2", - "temp-file": "^3.1.3" + "temp-file": "^3.3.2" }, "dependencies": { "ansi-styles": { @@ -2340,9 +2415,9 @@ } }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "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", @@ -2351,9 +2426,9 @@ } }, "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "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" @@ -2366,9 +2441,9 @@ "dev": true }, "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "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", @@ -2381,16 +2456,10 @@ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "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 - }, "source-map-support": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", - "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "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", @@ -2409,21 +2478,21 @@ } }, "builder-util-runtime": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-4.4.1.tgz", - "integrity": "sha512-8L2pbL6D3VdI1f8OMknlZJpw0c7KK15BRz3cY77AOUElc4XlCv2UhVV01jJM7+6Lx7henaQh80ALULp64eFYAQ==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.1.1.tgz", + "integrity": "sha512-+ieS4PMB33vVE2S3ZNWBEQJ1zKmAs/agrBdh7XadE1lKLjrH4aXYuOh9OOGdxqIRldhlhNBaF+yKMMEFOdNVig==", "dev": true, "requires": { - "bluebird-lst": "^1.0.5", - "debug": "^3.1.0", - "fs-extra-p": "^4.6.1", + "bluebird-lst": "^1.0.6", + "debug": "^4.1.1", + "fs-extra-p": "^7.0.0", "sax": "^1.2.4" }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "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" @@ -2662,9 +2731,9 @@ "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, "cipher-base": { @@ -3704,211 +3773,21 @@ "integrity": "sha1-NsamdEdfVaLWkTVnpgFETkh7S24=" }, "dmg-builder": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-4.14.0.tgz", - "integrity": "sha512-zTlb3VFkOGqCzsSSEVkfzCRl0Gd3LINMfplI6mCvTSU825OVG7W1IvZSp2gikLT5OJIgJzx2YuomKntWhXOJWA==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-6.5.4.tgz", + "integrity": "sha512-EaEkF8weXez3iAwgYffjcYfumauUh5x+BggMgn/IuihNIA5/WfzRAUR4wMq9aII2zwArlw+rIrX6ZHKbmtkQmA==", "dev": true, "requires": { - "bluebird-lst": "^1.0.5", - "builder-util": "~5.16.0", - "electron-builder-lib": "~20.20.4", - "fs-extra-p": "^4.6.1", - "iconv-lite": "^0.4.23", - "js-yaml": "^3.12.0", + "app-builder-lib": "~20.38.5", + "bluebird-lst": "^1.0.6", + "builder-util": "~9.6.2", + "fs-extra-p": "^7.0.0", + "iconv-lite": "^0.4.24", + "js-yaml": "^3.12.1", "parse-color": "^1.0.0", "sanitize-filename": "^1.6.1" }, "dependencies": { - "ajv": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz", - "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", - "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.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", - "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" - } - }, - "app-builder-bin": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-1.11.3.tgz", - "integrity": "sha512-ZNctydrq0tXRTCMNvjsnFKV1jpo3/0yhcwNKAeTKpqHIHxugANoU1tep/CxBCt0cA6AsNPlm8hQXR2O4qF4NoA==", - "dev": true - }, - "builder-util": { - "version": "5.16.3", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-5.16.3.tgz", - "integrity": "sha512-BC4UgY3K8IjdFaGOZeHeERjh4i3U+lvXj7nxdt+RIyDgSEGUzBVX6f3hBl1IAf0/hSnNkqTQZH6QYhdeswiKmg==", - "dev": true, - "requires": { - "7zip-bin": "~4.0.2", - "app-builder-bin": "1.11.3", - "bluebird-lst": "^1.0.5", - "builder-util-runtime": "^4.4.1", - "chalk": "^2.4.1", - "debug": "^3.1.0", - "fs-extra-p": "^4.6.1", - "is-ci": "^1.1.0", - "js-yaml": "^3.12.0", - "lazy-val": "^1.0.3", - "semver": "^5.5.0", - "source-map-support": "^0.5.6", - "stat-mode": "^0.2.2", - "temp-file": "^3.1.3" - } - }, - "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" - } - }, - "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" - } - }, - "dotenv": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.1.0.tgz", - "integrity": "sha512-/veDn2ztgRlB7gKmE3i9f6CmDIyXAy6d5nBq+whO9SLX+Zs1sXEgFLPi+aSuWqUuusMfbi84fT8j34fs1HaYUw==", - "dev": true - }, - "electron-builder-lib": { - "version": "20.20.4", - "resolved": "https://registry.npmjs.org/electron-builder-lib/-/electron-builder-lib-20.20.4.tgz", - "integrity": "sha512-84n1ELXP/leF1IuDIsx2pyUJuz889Um3sb2tjBxDbEhq0oaLnp1ifB3j5iO+OV7ZfGnXKyvds6nPcNt1AYQy7A==", - "dev": true, - "requires": { - "7zip-bin": "~4.0.2", - "app-builder-bin": "1.11.1", - "async-exit-hook": "^2.0.1", - "bluebird-lst": "^1.0.5", - "builder-util": "5.16.0", - "builder-util-runtime": "4.4.0", - "chromium-pickle-js": "^0.2.0", - "debug": "^3.1.0", - "ejs": "^2.6.1", - "electron-osx-sign": "0.4.10", - "electron-publish": "20.22.0", - "env-paths": "^1.0.0", - "fs-extra-p": "^4.6.1", - "hosted-git-info": "^2.7.1", - "is-ci": "^1.1.0", - "isbinaryfile": "^3.0.2", - "js-yaml": "^3.12.0", - "lazy-val": "^1.0.3", - "minimatch": "^3.0.4", - "normalize-package-data": "^2.4.0", - "plist": "^3.0.1", - "read-config-file": "3.1.0", - "sanitize-filename": "^1.6.1", - "semver": "^5.5.0", - "sumchecker": "^2.0.2", - "temp-file": "^3.1.3" - }, - "dependencies": { - "app-builder-bin": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-1.11.1.tgz", - "integrity": "sha512-EYzPq59A3AMAD0/a6QSSBGzrXvKCm19t5utO5qeMTSAeWx0HDZxMyUBRUoOZIFd6+uJRF1HMTofIAushLu7PhQ==", - "dev": true - }, - "builder-util": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-5.16.0.tgz", - "integrity": "sha512-HN7EyZF+WPcncty4fy7AVZxfR8TMkX/ZxxQfsji4dWyzDZ8nAqMadXKZlqySfLr5ckEjwEsOrDqO2ZsqkVoCtg==", - "dev": true, - "requires": { - "7zip-bin": "~4.0.2", - "app-builder-bin": "1.11.1", - "bluebird-lst": "^1.0.5", - "builder-util-runtime": "^4.4.0", - "chalk": "^2.4.1", - "debug": "^3.1.0", - "fs-extra-p": "^4.6.1", - "is-ci": "^1.1.0", - "js-yaml": "^3.12.0", - "lazy-val": "^1.0.3", - "semver": "^5.5.0", - "source-map-support": "^0.5.6", - "stat-mode": "^0.2.2", - "temp-file": "^3.1.3" - } - }, - "builder-util-runtime": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-4.4.0.tgz", - "integrity": "sha512-tkTF1o7XAX79ZkMo8822ZdQMpEBGSgfJ9kEYgyTAja90BPu7HO8C02pb8iSlFXfmK0Q0UA6D8MmnSNNPi0JLeg==", - "dev": true, - "requires": { - "bluebird-lst": "^1.0.5", - "debug": "^3.1.0", - "fs-extra-p": "^4.6.1", - "sax": "^1.2.4" - } - } - } - }, - "electron-publish": { - "version": "20.22.0", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-20.22.0.tgz", - "integrity": "sha512-ZF6GV1y5l1+auMBdISOk3yrltkGxOo1DQaGXVpABuenfgXgrHen6EgkgMy6wHhvBm1tOTZnANJSUV4zDBIFewQ==", - "dev": true, - "requires": { - "bluebird-lst": "^1.0.5", - "builder-util": "^5.14.0", - "builder-util-runtime": "^4.4.0", - "chalk": "^2.4.1", - "fs-extra-p": "^4.6.1", - "lazy-val": "^1.0.3", - "mime": "^2.3.1" - } - }, - "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 - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "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 - }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -3919,104 +3798,14 @@ } }, "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "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" } - }, - "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 - }, - "json5": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", - "dev": true - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "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 - }, - "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 - }, - "read-config-file": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-3.1.0.tgz", - "integrity": "sha512-z3VTrR9fgFu+Ll6MhTdtxbPFBKNGKgzYYnRjOcZvQeE/zwJTjPYVrps0ATgaSWU2/BnucUg3knP+Oz4zo9vEoA==", - "dev": true, - "requires": { - "ajv": "^6.5.2", - "ajv-keywords": "^3.2.0", - "bluebird-lst": "^1.0.5", - "dotenv": "^6.0.0", - "dotenv-expand": "^4.2.0", - "fs-extra-p": "^4.6.1", - "js-yaml": "^3.12.0", - "json5": "^1.0.1", - "lazy-val": "^1.0.3" - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, - "source-map-support": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", - "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.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" - } - }, - "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" - } } } }, @@ -4143,9 +3932,9 @@ } }, "dotenv": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.1.0.tgz", - "integrity": "sha512-/veDn2ztgRlB7gKmE3i9f6CmDIyXAy6d5nBq+whO9SLX+Zs1sXEgFLPi+aSuWqUuusMfbi84fT8j34fs1HaYUw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", + "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==", "dev": true }, "dotenv-expand": { @@ -4223,44 +4012,26 @@ } }, "electron-builder": { - "version": "20.20.4", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-20.20.4.tgz", - "integrity": "sha512-6X2T21/v35dvt9Rd+L9Dlb3EbIVGiqePh2sirngPa2wT6QnmVdVJsvnlxKsWWYrsQzowVSGxkho5FGiCwanDiw==", + "version": "20.38.5", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-20.38.5.tgz", + "integrity": "sha512-p88IDHhH2J4hA6KwRBJY+OfVZuFtFIShY3Uh/TwYAfbX0v1RhKZytuGdO8sty2zcWxDYX74xDBv+X9oN6qEIRQ==", "dev": true, "requires": { - "bluebird-lst": "^1.0.5", - "builder-util": "5.16.0", - "builder-util-runtime": "4.4.0", - "chalk": "^2.4.1", - "dmg-builder": "4.14.0", - "electron-builder-lib": "20.20.4", - "fs-extra-p": "^4.6.1", - "is-ci": "^1.1.0", + "app-builder-lib": "20.38.5", + "bluebird-lst": "^1.0.6", + "builder-util": "9.6.2", + "builder-util-runtime": "8.1.1", + "chalk": "^2.4.2", + "dmg-builder": "6.5.4", + "fs-extra-p": "^7.0.0", + "is-ci": "^2.0.0", "lazy-val": "^1.0.3", - "read-config-file": "3.1.0", + "read-config-file": "3.2.1", "sanitize-filename": "^1.6.1", "update-notifier": "^2.5.0", - "yargs": "^12.0.1" + "yargs": "^12.0.5" }, "dependencies": { - "ajv": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz", - "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", - "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.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", - "dev": true - }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", @@ -4276,50 +4047,16 @@ "color-convert": "^1.9.0" } }, - "app-builder-bin": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-1.11.1.tgz", - "integrity": "sha512-EYzPq59A3AMAD0/a6QSSBGzrXvKCm19t5utO5qeMTSAeWx0HDZxMyUBRUoOZIFd6+uJRF1HMTofIAushLu7PhQ==", + "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 }, - "builder-util": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-5.16.0.tgz", - "integrity": "sha512-HN7EyZF+WPcncty4fy7AVZxfR8TMkX/ZxxQfsji4dWyzDZ8nAqMadXKZlqySfLr5ckEjwEsOrDqO2ZsqkVoCtg==", - "dev": true, - "requires": { - "7zip-bin": "~4.0.2", - "app-builder-bin": "1.11.1", - "bluebird-lst": "^1.0.5", - "builder-util-runtime": "^4.4.0", - "chalk": "^2.4.1", - "debug": "^3.1.0", - "fs-extra-p": "^4.6.1", - "is-ci": "^1.1.0", - "js-yaml": "^3.12.0", - "lazy-val": "^1.0.3", - "semver": "^5.5.0", - "source-map-support": "^0.5.6", - "stat-mode": "^0.2.2", - "temp-file": "^3.1.3" - } - }, - "builder-util-runtime": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-4.4.0.tgz", - "integrity": "sha512-tkTF1o7XAX79ZkMo8822ZdQMpEBGSgfJ9kEYgyTAja90BPu7HO8C02pb8iSlFXfmK0Q0UA6D8MmnSNNPi0JLeg==", - "dev": true, - "requires": { - "bluebird-lst": "^1.0.5", - "debug": "^3.1.0", - "fs-extra-p": "^4.6.1", - "sax": "^1.2.4" - } - }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "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", @@ -4351,87 +4088,14 @@ "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" - } - }, - "decamelize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", - "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", - "dev": true, - "requires": { - "xregexp": "4.0.0" - } - }, - "dotenv": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.1.0.tgz", - "integrity": "sha512-/veDn2ztgRlB7gKmE3i9f6CmDIyXAy6d5nBq+whO9SLX+Zs1sXEgFLPi+aSuWqUuusMfbi84fT8j34fs1HaYUw==", - "dev": true - }, - "electron-builder-lib": { - "version": "20.20.4", - "resolved": "https://registry.npmjs.org/electron-builder-lib/-/electron-builder-lib-20.20.4.tgz", - "integrity": "sha512-84n1ELXP/leF1IuDIsx2pyUJuz889Um3sb2tjBxDbEhq0oaLnp1ifB3j5iO+OV7ZfGnXKyvds6nPcNt1AYQy7A==", - "dev": true, - "requires": { - "7zip-bin": "~4.0.2", - "app-builder-bin": "1.11.1", - "async-exit-hook": "^2.0.1", - "bluebird-lst": "^1.0.5", - "builder-util": "5.16.0", - "builder-util-runtime": "4.4.0", - "chromium-pickle-js": "^0.2.0", - "debug": "^3.1.0", - "ejs": "^2.6.1", - "electron-osx-sign": "0.4.10", - "electron-publish": "20.22.0", - "env-paths": "^1.0.0", - "fs-extra-p": "^4.6.1", - "hosted-git-info": "^2.7.1", - "is-ci": "^1.1.0", - "isbinaryfile": "^3.0.2", - "js-yaml": "^3.12.0", - "lazy-val": "^1.0.3", - "minimatch": "^3.0.4", - "normalize-package-data": "^2.4.0", - "plist": "^3.0.1", - "read-config-file": "3.1.0", - "sanitize-filename": "^1.6.1", - "semver": "^5.5.0", - "sumchecker": "^2.0.2", - "temp-file": "^3.1.3" - } - }, - "electron-publish": { - "version": "20.22.0", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-20.22.0.tgz", - "integrity": "sha512-ZF6GV1y5l1+auMBdISOk3yrltkGxOo1DQaGXVpABuenfgXgrHen6EgkgMy6wHhvBm1tOTZnANJSUV4zDBIFewQ==", - "dev": true, - "requires": { - "bluebird-lst": "^1.0.5", - "builder-util": "^5.14.0", - "builder-util-runtime": "^4.4.0", - "chalk": "^2.4.1", - "fs-extra-p": "^4.6.1", - "lazy-val": "^1.0.3", - "mime": "^2.3.1" - } - }, "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "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": "^3.0.0", + "get-stream": "^4.0.0", "is-stream": "^1.1.0", "npm-run-path": "^2.0.0", "p-finally": "^1.0.0", @@ -4439,12 +4103,6 @@ "strip-eof": "^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 - }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", @@ -4454,18 +4112,21 @@ "locate-path": "^3.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" + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "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 - }, "invert-kv": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", @@ -4478,31 +4139,6 @@ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "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 - }, - "json5": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, "lcid": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", @@ -4522,39 +4158,21 @@ "path-exists": "^3.0.0" } }, - "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", - "dev": true - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "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 - }, "os-locale": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz", - "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", + "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": "^0.10.0", + "execa": "^1.0.0", "lcid": "^2.0.0", "mem": "^4.0.0" } }, "p-limit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", - "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "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" @@ -4569,6 +4187,378 @@ "p-limit": "^2.0.0" } }, + "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" + } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + } + } + }, + "electron-builder-lib": { + "version": "20.23.1", + "resolved": "https://registry.npmjs.org/electron-builder-lib/-/electron-builder-lib-20.23.1.tgz", + "integrity": "sha512-9bYeANVqFPpSmswPwXv8efu9voPE1Q8hw/jNwiWGICjPeYjHyKwa4ao+Vd1beY6ZhUDVhxxXIdlJWnmvH7Mcxw==", + "dev": true, + "requires": { + "7zip-bin": "~4.0.2", + "app-builder-bin": "1.11.4", + "async-exit-hook": "^2.0.1", + "bluebird-lst": "^1.0.5", + "builder-util": "5.17.0", + "builder-util-runtime": "4.4.1", + "chromium-pickle-js": "^0.2.0", + "debug": "^3.1.0", + "ejs": "^2.6.1", + "electron-osx-sign": "0.4.10", + "electron-publish": "20.23.1", + "env-paths": "^1.0.0", + "fs-extra-p": "^4.6.1", + "hosted-git-info": "^2.7.1", + "is-ci": "^1.1.0", + "isbinaryfile": "^3.0.2", + "js-yaml": "^3.12.0", + "lazy-val": "^1.0.3", + "minimatch": "^3.0.4", + "normalize-package-data": "^2.4.0", + "plist": "^3.0.1", + "read-config-file": "3.1.0", + "sanitize-filename": "^1.6.1", + "semver": "^5.5.0", + "sumchecker": "^2.0.2", + "temp-file": "^3.1.3" + }, + "dependencies": { + "7zip-bin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-4.0.2.tgz", + "integrity": "sha512-XtGk+IF57pr852UK1AhQJXqmm1WmSgS5uISL+LPs0z/iAxXouMvdlLJrHPeukP6gd7yR2rDTMSMkHNODgwIq7A==", + "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-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" + } + }, + "app-builder-bin": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-1.11.4.tgz", + "integrity": "sha512-04sgoFSz6q5pbAxAXcxfUFPl16gJsay5b8dudFXUwQbFfS7ox2uGgbOO5LGHF0t7sM7q/N82ztGePuuCSkKZHQ==", + "dev": true + }, + "base64-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz", + "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=", + "dev": true + }, + "builder-util": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-5.17.0.tgz", + "integrity": "sha512-F4s0uU/H0ZBes4CXkICDvUoC3MS9eW4rv5r+wkzcijJBqDfYNV7LLXxnN50P1bOVpFXa8Cw/NUHnsq95Xf478g==", + "dev": true, + "requires": { + "7zip-bin": "~4.0.2", + "app-builder-bin": "1.11.4", + "bluebird-lst": "^1.0.5", + "builder-util-runtime": "^4.4.1", + "chalk": "^2.4.1", + "debug": "^3.1.0", + "fs-extra-p": "^4.6.1", + "is-ci": "^1.1.0", + "js-yaml": "^3.12.0", + "lazy-val": "^1.0.3", + "semver": "^5.5.0", + "source-map-support": "^0.5.6", + "stat-mode": "^0.2.2", + "temp-file": "^3.1.3" + } + }, + "builder-util-runtime": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-4.4.1.tgz", + "integrity": "sha512-8L2pbL6D3VdI1f8OMknlZJpw0c7KK15BRz3cY77AOUElc4XlCv2UhVV01jJM7+6Lx7henaQh80ALULp64eFYAQ==", + "dev": true, + "requires": { + "bluebird-lst": "^1.0.5", + "debug": "^3.1.0", + "fs-extra-p": "^4.6.1", + "sax": "^1.2.4" + } + }, + "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" + } + }, + "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 + }, + "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" + } + }, + "electron-osx-sign": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.10.tgz", + "integrity": "sha1-vk87ibKnWh3F8eckkIGrKSnKOiY=", + "dev": true, + "requires": { + "bluebird": "^3.5.0", + "compare-version": "^0.1.2", + "debug": "^2.6.8", + "isbinaryfile": "^3.0.2", + "minimist": "^1.2.0", + "plist": "^2.1.0" + }, + "dependencies": { + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "plist": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-2.1.0.tgz", + "integrity": "sha1-V8zbeggh3yGDEhejytVOPhRqECU=", + "dev": true, + "requires": { + "base64-js": "1.2.0", + "xmlbuilder": "8.2.2", + "xmldom": "0.1.x" + } + } + } + }, + "electron-publish": { + "version": "20.23.1", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-20.23.1.tgz", + "integrity": "sha512-FsNL5bY4/Uab5YGYWE+/7wL8znkghEPwJvDyD0985Obw0Eg9JZP1MpUbt4jUxrK8z5wTLVMFdSv7ymV8yq6ypA==", + "dev": true, + "requires": { + "bluebird-lst": "^1.0.5", + "builder-util": "~5.17.0", + "builder-util-runtime": "^4.4.1", + "chalk": "^2.4.1", + "fs-extra-p": "^4.6.1", + "lazy-val": "^1.0.3", + "mime": "^2.3.1" + } + }, + "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 + }, + "fs-extra": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", + "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-extra-p": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-4.6.1.tgz", + "integrity": "sha512-IsTMbUS0svZKZTvqF4vDS9c/L7Mw9n8nZQWWeSzAGacOSe+8CzowhUN0tdZEZFIJNP5HC7L9j3MMikz/G4hDeQ==", + "dev": true, + "requires": { + "bluebird-lst": "^1.0.5", + "fs-extra": "^6.0.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "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 + }, + "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" + } + }, + "isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "requires": { + "buffer-alloc": "^1.2.0" + } + }, + "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" + } + }, + "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 + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "mime": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "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 + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -4599,34 +4589,15 @@ "dev": true }, "source-map-support": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", - "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "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" } }, - "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" - } - }, - "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", @@ -4645,211 +4616,34 @@ "punycode": "^2.1.0" } }, - "yargs": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", - "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^2.0.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": "^10.1.0" - } - } - } - }, - "electron-builder-lib": { - "version": "20.20.4", - "resolved": "https://registry.npmjs.org/electron-builder-lib/-/electron-builder-lib-20.20.4.tgz", - "integrity": "sha512-84n1ELXP/leF1IuDIsx2pyUJuz889Um3sb2tjBxDbEhq0oaLnp1ifB3j5iO+OV7ZfGnXKyvds6nPcNt1AYQy7A==", - "dev": true, - "requires": { - "7zip-bin": "~4.0.2", - "app-builder-bin": "1.11.1", - "async-exit-hook": "^2.0.1", - "bluebird-lst": "^1.0.5", - "builder-util": "5.16.0", - "builder-util-runtime": "4.4.0", - "chromium-pickle-js": "^0.2.0", - "debug": "^3.1.0", - "ejs": "^2.6.1", - "electron-osx-sign": "0.4.10", - "electron-publish": "20.22.0", - "env-paths": "^1.0.0", - "fs-extra-p": "^4.6.1", - "hosted-git-info": "^2.7.1", - "is-ci": "^1.1.0", - "isbinaryfile": "^3.0.2", - "js-yaml": "^3.12.0", - "lazy-val": "^1.0.3", - "minimatch": "^3.0.4", - "normalize-package-data": "^2.4.0", - "plist": "^3.0.1", - "read-config-file": "3.1.0", - "sanitize-filename": "^1.6.1", - "semver": "^5.5.0", - "sumchecker": "^2.0.2", - "temp-file": "^3.1.3" - }, - "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" - } - }, - "app-builder-bin": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-1.11.1.tgz", - "integrity": "sha512-EYzPq59A3AMAD0/a6QSSBGzrXvKCm19t5utO5qeMTSAeWx0HDZxMyUBRUoOZIFd6+uJRF1HMTofIAushLu7PhQ==", + "xmlbuilder": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", + "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=", "dev": true - }, - "builder-util": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-5.16.0.tgz", - "integrity": "sha512-HN7EyZF+WPcncty4fy7AVZxfR8TMkX/ZxxQfsji4dWyzDZ8nAqMadXKZlqySfLr5ckEjwEsOrDqO2ZsqkVoCtg==", - "dev": true, - "requires": { - "7zip-bin": "~4.0.2", - "app-builder-bin": "1.11.1", - "bluebird-lst": "^1.0.5", - "builder-util-runtime": "^4.4.0", - "chalk": "^2.4.1", - "debug": "^3.1.0", - "fs-extra-p": "^4.6.1", - "is-ci": "^1.1.0", - "js-yaml": "^3.12.0", - "lazy-val": "^1.0.3", - "semver": "^5.5.0", - "source-map-support": "^0.5.6", - "stat-mode": "^0.2.2", - "temp-file": "^3.1.3" - } - }, - "builder-util-runtime": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-4.4.0.tgz", - "integrity": "sha512-tkTF1o7XAX79ZkMo8822ZdQMpEBGSgfJ9kEYgyTAja90BPu7HO8C02pb8iSlFXfmK0Q0UA6D8MmnSNNPi0JLeg==", - "dev": true, - "requires": { - "bluebird-lst": "^1.0.5", - "debug": "^3.1.0", - "fs-extra-p": "^4.6.1", - "sax": "^1.2.4" - } - }, - "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" - } - }, - "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" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "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 - }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.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 - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, - "source-map-support": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", - "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.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" - } } } }, "electron-builder-squirrel-windows": { - "version": "20.20.4", - "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-20.20.4.tgz", - "integrity": "sha512-lrtwmf9DBFzA//+oP+CmAX5muNQIgVpKasyMLid+Dr7PTyBBRrmjkJgYkXql43VQ7fpYr24mWtfcQ3bsgAvnHw==", + "version": "20.38.5", + "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-20.38.5.tgz", + "integrity": "sha512-OaxEwRyPCpX7cgy7gMTrS98zdkDvTmG4D+DvZ0kwUQ/osxS0ySuawY2mHBr8ZRz85Fs7iXA3EzB1PEiAYM++MQ==", "dev": true, "requires": { - "7zip-bin": "~3.1.0", - "archiver": "^2.1.1", - "bluebird-lst": "^1.0.5", - "builder-util": "~5.16.0", - "fs-extra-p": "^4.6.1", + "7zip-bin": "~4.0.2", + "archiver": "^3.0.0", + "bluebird-lst": "^1.0.6", + "builder-util": "~9.6.2", + "fs-extra-p": "^7.0.0", "sanitize-filename": "^1.6.1" }, "dependencies": { "7zip-bin": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-3.1.0.tgz", - "integrity": "sha512-juYJNi8JEpTUWXwz8ssa8Oop4n/kwJ/pIQP22vJAVAe6RTRD+0m+e9LRNnfK2EDaX8uwmUzLNGviFQRD6SxeOw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-4.0.2.tgz", + "integrity": "sha512-XtGk+IF57pr852UK1AhQJXqmm1WmSgS5uISL+LPs0z/iAxXouMvdlLJrHPeukP6gd7yR2rDTMSMkHNODgwIq7A==", "dev": true, - "optional": true, - "requires": { - "7zip-bin-linux": "~1.3.1", - "7zip-bin-mac": "~1.0.1", - "7zip-bin-win": "~2.2.0" - } + "optional": true } } }, @@ -4929,9 +4723,9 @@ "integrity": "sha1-FOb9pcaOnk7L7/nM8DfL18BcWv4=" }, "electron-osx-sign": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.10.tgz", - "integrity": "sha1-vk87ibKnWh3F8eckkIGrKSnKOiY=", + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.11.tgz", + "integrity": "sha512-VVd40nrnVqymvFrY9ZkOYgHJOvexHHYTR3di/SN+mjJ0OWhR1I8BRVj3U+Yamw6hnkZZNKZp52rqL5EFAAPFkQ==", "dev": true, "requires": { "bluebird": "^3.5.0", @@ -4939,47 +4733,39 @@ "debug": "^2.6.8", "isbinaryfile": "^3.0.2", "minimist": "^1.2.0", - "plist": "^2.1.0" + "plist": "^3.0.1" }, "dependencies": { - "base64-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz", - "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=", - "dev": true + "isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "requires": { + "buffer-alloc": "^1.2.0" + } }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true - }, - "plist": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/plist/-/plist-2.1.0.tgz", - "integrity": "sha1-V8zbeggh3yGDEhejytVOPhRqECU=", - "dev": true, - "requires": { - "base64-js": "1.2.0", - "xmlbuilder": "8.2.2", - "xmldom": "0.1.x" - } } } }, "electron-publish": { - "version": "20.22.0", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-20.22.0.tgz", - "integrity": "sha512-ZF6GV1y5l1+auMBdISOk3yrltkGxOo1DQaGXVpABuenfgXgrHen6EgkgMy6wHhvBm1tOTZnANJSUV4zDBIFewQ==", + "version": "20.38.5", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-20.38.5.tgz", + "integrity": "sha512-EhdPm6t0nKDfa0r3KjV1kSFcz03VrzgJRv7v5nHkkpQZB6OSmDNlHq7k66NBwQhPK3i4CK+uvehljZAP28vbCA==", "dev": true, "requires": { - "bluebird-lst": "^1.0.5", - "builder-util": "^5.14.0", - "builder-util-runtime": "^4.4.0", - "chalk": "^2.4.1", - "fs-extra-p": "^4.6.1", + "bluebird-lst": "^1.0.6", + "builder-util": "~9.6.2", + "builder-util-runtime": "^8.1.1", + "chalk": "^2.4.2", + "fs-extra-p": "^7.0.0", "lazy-val": "^1.0.3", - "mime": "^2.3.1" + "mime": "^2.4.0" }, "dependencies": { "ansi-styles": { @@ -4992,9 +4778,9 @@ } }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "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", @@ -5009,9 +4795,9 @@ "dev": true }, "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", "dev": true }, "supports-color": { @@ -6325,19 +6111,19 @@ } }, "fs-extra-p": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-4.6.1.tgz", - "integrity": "sha512-IsTMbUS0svZKZTvqF4vDS9c/L7Mw9n8nZQWWeSzAGacOSe+8CzowhUN0tdZEZFIJNP5HC7L9j3MMikz/G4hDeQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-7.0.0.tgz", + "integrity": "sha512-5tg5jBOd0xIXjwj4PDnafOXL5TyPVzjxLby4DPKev53wurEXp7IsojBaD4Lj5M5w7jxw0pbkEU0fFEPmcKoMnA==", "dev": true, "requires": { - "bluebird-lst": "^1.0.5", - "fs-extra": "^6.0.1" + "bluebird-lst": "^1.0.6", + "fs-extra": "^7.0.0" }, "dependencies": { "fs-extra": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", - "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "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", @@ -8169,12 +7955,12 @@ "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "requires": { - "ci-info": "^1.5.0" + "ci-info": "^2.0.0" } }, "is-data-descriptor": { @@ -8445,13 +8231,10 @@ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isbinaryfile": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", - "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", - "dev": true, - "requires": { - "buffer-alloc": "^1.2.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.0.tgz", + "integrity": "sha512-RBtmso6l2mCaEsUvXngMTIjg3oheXo0MgYzzfT6sk44RYggPnm9fT+cQJAmzRnJIxPHXg9FZglqDJGW28dvcqA==", + "dev": true }, "isexe": { "version": "2.0.0", @@ -9172,6 +8955,24 @@ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", + "dev": true + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, "lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", @@ -9184,6 +8985,12 @@ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", "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.kebabcase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", @@ -9219,6 +9026,18 @@ "integrity": "sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40=", "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.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", @@ -10678,12 +10497,6 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", "dev": true - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", - "dev": true } } }, @@ -11751,26 +11564,26 @@ } }, "read-config-file": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-3.1.0.tgz", - "integrity": "sha512-z3VTrR9fgFu+Ll6MhTdtxbPFBKNGKgzYYnRjOcZvQeE/zwJTjPYVrps0ATgaSWU2/BnucUg3knP+Oz4zo9vEoA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-3.2.1.tgz", + "integrity": "sha512-yW4hZZXdNN+Paij5JVAiTv1lUsAN5QRBU5NqotQqwYdVkUczSmDzm66VLu0eojiZt2zFeYptTFDAYlalDGuHdA==", "dev": true, "requires": { - "ajv": "^6.5.2", + "ajv": "^6.7.0", "ajv-keywords": "^3.2.0", - "bluebird-lst": "^1.0.5", - "dotenv": "^6.0.0", + "bluebird-lst": "^1.0.6", + "dotenv": "^6.2.0", "dotenv-expand": "^4.2.0", - "fs-extra-p": "^4.6.1", - "js-yaml": "^3.12.0", - "json5": "^1.0.1", + "fs-extra-p": "^7.0.0", + "js-yaml": "^3.12.1", + "json5": "^2.1.0", "lazy-val": "^1.0.3" }, "dependencies": { "ajv": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz", - "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", + "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", @@ -11780,9 +11593,9 @@ } }, "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "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 }, "fast-deep-equal": { @@ -11792,9 +11605,9 @@ "dev": true }, "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "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", @@ -11808,9 +11621,9 @@ "dev": true }, "json5": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "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" @@ -11818,7 +11631,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -13440,15 +13253,14 @@ } }, "temp-file": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.1.3.tgz", - "integrity": "sha512-oz2J77loDE9sGrlRTqBzwbsUvoBD2BpyXeaRPKyGwBIwaamSs2jdqAfhutw7Tch9llr1u8E2ruoug09rNPa3PA==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.3.2.tgz", + "integrity": "sha512-FGKccAW0Mux9hC/2bdUIe4bJRv4OyVo4RpVcuplFird1V/YoplIFbnPZjfzbJSf/qNvRZIRB9/4n/RkI0GziuQ==", "dev": true, "requires": { "async-exit-hook": "^2.0.1", - "bluebird-lst": "^1.0.5", - "fs-extra-p": "^4.6.1", - "lazy-val": "^1.0.3" + "bluebird-lst": "^1.0.6", + "fs-extra-p": "^7.0.0" } }, "term-size": { @@ -14258,9 +14070,9 @@ } }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "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", @@ -14268,12 +14080,27 @@ "supports-color": "^5.3.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 + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "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" + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -16744,9 +16571,9 @@ } }, "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==", + "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", @@ -16761,9 +16588,9 @@ "dev": true }, "xmlbuilder": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", - "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=", + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", "dev": true }, "xmlcreate": { @@ -16834,14 +16661,13 @@ } }, "zip-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", - "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.0.1.tgz", + "integrity": "sha512-c+eUhhkDpaK87G/py74wvWLtz2kzMPNCCkUApkun50ssE0oQliIQzWpTnwjB+MTKVIf2tGzIgHyqW/Y+W77ecQ==", "dev": true, "requires": { - "archiver-utils": "^1.3.0", + "archiver-utils": "^2.0.0", "compress-commons": "^1.2.0", - "lodash": "^4.8.0", "readable-stream": "^2.0.0" } }, diff --git a/packages/insomnia-app/package.json b/packages/insomnia-app/package.json index 7f838974c9..a254b3ec19 100644 --- a/packages/insomnia-app/package.json +++ b/packages/insomnia-app/package.json @@ -180,9 +180,9 @@ "cross-env": "^2.0.0", "css-loader": "^0.28.11", "electron": "^3.0.4", - "electron-builder": "^20.20.4", - "electron-builder-lib": "^20.20.4", - "electron-builder-squirrel-windows": "^20.20.4", + "electron-builder": "^20.38.5", + "electron-builder-lib": "^20.23.1", + "electron-builder-squirrel-windows": "^20.38.5", "electron-rebuild": "^1.8.2", "eslint": "^4.19.1", "eslint-config-semistandard": "^12.0.1", diff --git a/packages/insomnia-cookies/package-lock.json b/packages/insomnia-cookies/package-lock.json index 07e40d592c..4653fab92a 100644 --- a/packages/insomnia-cookies/package-lock.json +++ b/packages/insomnia-cookies/package-lock.json @@ -1,6 +1,6 @@ { "name": "insomnia-cookies", - "version": "0.0.11", + "version": "0.0.13", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/insomnia-httpsnippet/package-lock.json b/packages/insomnia-httpsnippet/package-lock.json index 9cae4c191c..9e1089a61b 100644 --- a/packages/insomnia-httpsnippet/package-lock.json +++ b/packages/insomnia-httpsnippet/package-lock.json @@ -1,6 +1,6 @@ { "name": "insomnia-httpsnippet", - "version": "1.16.17", + "version": "1.16.19", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/insomnia-importers/package-lock.json b/packages/insomnia-importers/package-lock.json index c287090b72..7ba5fb2fa9 100644 --- a/packages/insomnia-importers/package-lock.json +++ b/packages/insomnia-importers/package-lock.json @@ -1,6 +1,6 @@ { "name": "insomnia-importers", - "version": "2.0.12", + "version": "2.0.14", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/insomnia-libcurl/package-lock.json b/packages/insomnia-libcurl/package-lock.json index 6b0f2babd6..7810a6acc2 100644 --- a/packages/insomnia-libcurl/package-lock.json +++ b/packages/insomnia-libcurl/package-lock.json @@ -1,6 +1,6 @@ { "name": "insomnia-libcurl", - "version": "0.0.22", + "version": "0.0.24", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/insomnia-xpath/package-lock.json b/packages/insomnia-xpath/package-lock.json index 4cb06d4fed..233b1bd517 100644 --- a/packages/insomnia-xpath/package-lock.json +++ b/packages/insomnia-xpath/package-lock.json @@ -1,6 +1,6 @@ { "name": "insomnia-xpath", - "version": "1.0.8", + "version": "1.0.10", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/plugins/insomnia-plugin-cookie-jar/package-lock.json b/plugins/insomnia-plugin-cookie-jar/package-lock.json index df77a30acb..1b79fc71a1 100644 --- a/plugins/insomnia-plugin-cookie-jar/package-lock.json +++ b/plugins/insomnia-plugin-cookie-jar/package-lock.json @@ -1,6 +1,6 @@ { "name": "insomnia-plugin-cookie-jar", - "version": "1.0.7", + "version": "1.0.9", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/plugins/insomnia-plugin-jsonpath/package-lock.json b/plugins/insomnia-plugin-jsonpath/package-lock.json index 733d8d72aa..131abf315b 100644 --- a/plugins/insomnia-plugin-jsonpath/package-lock.json +++ b/plugins/insomnia-plugin-jsonpath/package-lock.json @@ -1,6 +1,6 @@ { "name": "insomnia-plugin-jsonpath", - "version": "1.0.11", + "version": "1.0.13", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/plugins/insomnia-plugin-now/package-lock.json b/plugins/insomnia-plugin-now/package-lock.json index 02da645c22..4c88e1173c 100644 --- a/plugins/insomnia-plugin-now/package-lock.json +++ b/plugins/insomnia-plugin-now/package-lock.json @@ -1,6 +1,6 @@ { "name": "insomnia-plugin-now", - "version": "1.0.10", + "version": "1.0.12", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/plugins/insomnia-plugin-os/package-lock.json b/plugins/insomnia-plugin-os/package-lock.json index 6130c32dda..da18bef3f3 100644 --- a/plugins/insomnia-plugin-os/package-lock.json +++ b/plugins/insomnia-plugin-os/package-lock.json @@ -1,6 +1,6 @@ { "name": "insomnia-plugin-os", - "version": "1.0.12", + "version": "1.0.14", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/plugins/insomnia-plugin-response/package-lock.json b/plugins/insomnia-plugin-response/package-lock.json index 520533054b..173c560196 100644 --- a/plugins/insomnia-plugin-response/package-lock.json +++ b/plugins/insomnia-plugin-response/package-lock.json @@ -1,6 +1,6 @@ { "name": "insomnia-plugin-response", - "version": "1.0.15", + "version": "1.0.17", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/plugins/insomnia-plugin-uuid/package-lock.json b/plugins/insomnia-plugin-uuid/package-lock.json index a239f3ca18..831a4636e2 100644 --- a/plugins/insomnia-plugin-uuid/package-lock.json +++ b/plugins/insomnia-plugin-uuid/package-lock.json @@ -1,6 +1,6 @@ { "name": "insomnia-plugin-uuid", - "version": "1.0.9", + "version": "1.0.11", "lockfileVersion": 1, "requires": true, "dependencies": { From 7fe101ba9bcb42e335eda3a9f7238d467b207bdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81ngel=20Paredes?= Date: Mon, 11 Mar 2019 22:20:38 +0000 Subject: [PATCH 3/8] Fetch JS snippet (#1343) * Add test for fetch snippet * Add fetch snippet * Fix jQuery doc comment --- .../src/targets/javascript/fetch.js | 84 +++++++++++++++++++ .../src/targets/javascript/index.js | 1 + .../src/targets/javascript/jquery.js | 2 +- .../test/fixtures/available-targets.json | 12 ++- .../fetch/application-form-encoded.js | 15 ++++ .../javascript/fetch/application-json.js | 13 +++ .../output/javascript/fetch/cookies.js | 11 +++ .../output/javascript/fetch/custom-method.js | 9 ++ .../fixtures/output/javascript/fetch/full.js | 16 ++++ .../output/javascript/fetch/headers.js | 12 +++ .../fixtures/output/javascript/fetch/https.js | 9 ++ .../output/javascript/fetch/multipart-data.js | 12 +++ .../output/javascript/fetch/multipart-file.js | 12 +++ .../javascript/fetch/multipart-form-data.js | 12 +++ .../fixtures/output/javascript/fetch/query.js | 9 ++ .../fixtures/output/javascript/fetch/short.js | 9 ++ .../output/javascript/fetch/text-plain.js | 12 +++ .../test/targets/javascript/fetch.js | 3 + 18 files changed, 249 insertions(+), 4 deletions(-) create mode 100644 packages/insomnia-httpsnippet/src/targets/javascript/fetch.js create mode 100755 packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/application-form-encoded.js create mode 100755 packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/application-json.js create mode 100755 packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/cookies.js create mode 100755 packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/custom-method.js create mode 100755 packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/full.js create mode 100755 packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/headers.js create mode 100755 packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/https.js create mode 100755 packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/multipart-data.js create mode 100755 packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/multipart-file.js create mode 100755 packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/multipart-form-data.js create mode 100755 packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/query.js create mode 100755 packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/short.js create mode 100755 packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/text-plain.js create mode 100644 packages/insomnia-httpsnippet/test/targets/javascript/fetch.js diff --git a/packages/insomnia-httpsnippet/src/targets/javascript/fetch.js b/packages/insomnia-httpsnippet/src/targets/javascript/fetch.js new file mode 100644 index 0000000000..102f4bc279 --- /dev/null +++ b/packages/insomnia-httpsnippet/src/targets/javascript/fetch.js @@ -0,0 +1,84 @@ +/** + * @description + * HTTP code snippet generator for the browser Fetch API + * + * @author + * @peoplenarthax + * + * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author. + */ + +'use strict'; + +var util = require('util'); +var CodeBuilder = require('../../helpers/code-builder'); + +module.exports = function(source, options) { + var opts = util._extend( + { + indent: ' ', + }, + options, + ); + + var code = new CodeBuilder(opts.indent); + + var url = source.fullUrl; + var fetchOptions = { + mode: 'cors', + method: source.method, + headers: source.allHeaders, + }; + + switch (source.postData.mimeType) { + case 'application/x-www-form-urlencoded': + fetchOptions.body = source.postData.paramsObj + ? source.postData.paramsObj + : source.postData.text; + break; + + case 'application/json': + fetchOptions.body = source.postData.text; + break; + + case 'multipart/form-data': + code.push('let form = new FormData();'); + + source.postData.params.forEach(function(param) { + code.push( + 'form.append(%s, %s);', + JSON.stringify(param.name), + JSON.stringify(param.value || param.fileName || ''), + ); + }); + delete fetchOptions.headers; + fetchOptions.body = '[form]'; + + code.blank(); + break; + + default: + if (source.postData.text) { + fetchOptions.data = source.postData.text; + } + } + + code + .push( + 'const fetchOptions = ' + + JSON.stringify(fetchOptions, null, opts.indent).replace('"[form]"', 'form'), + ) + .blank() + .push('fetch("' + url + '", fetchOptions)') + .push(1, '.then(response => response.json())') + .push(1, '.then(data => console.log(data));'); + + return code.join(); +}; + +module.exports.info = { + key: 'fetch', + title: 'Fetch API', + link: 'https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API', + description: 'Browser API that offers a simple interface for fetching resources', +}; diff --git a/packages/insomnia-httpsnippet/src/targets/javascript/index.js b/packages/insomnia-httpsnippet/src/targets/javascript/index.js index 7a97d4c0a1..5a8993b904 100755 --- a/packages/insomnia-httpsnippet/src/targets/javascript/index.js +++ b/packages/insomnia-httpsnippet/src/targets/javascript/index.js @@ -9,5 +9,6 @@ module.exports = { }, jquery: require('./jquery'), + fetch: require('./fetch'), xhr: require('./xhr'), }; diff --git a/packages/insomnia-httpsnippet/src/targets/javascript/jquery.js b/packages/insomnia-httpsnippet/src/targets/javascript/jquery.js index 9a4a8b1891..e49978c16c 100755 --- a/packages/insomnia-httpsnippet/src/targets/javascript/jquery.js +++ b/packages/insomnia-httpsnippet/src/targets/javascript/jquery.js @@ -1,6 +1,6 @@ /** * @description - * HTTP code snippet generator for native XMLHttpRequest + * HTTP code snippet generator for jQuery * * @author * @AhmadNassri diff --git a/packages/insomnia-httpsnippet/test/fixtures/available-targets.json b/packages/insomnia-httpsnippet/test/fixtures/available-targets.json index 5d78841dca..0c308b3ec3 100755 --- a/packages/insomnia-httpsnippet/test/fixtures/available-targets.json +++ b/packages/insomnia-httpsnippet/test/fixtures/available-targets.json @@ -63,6 +63,12 @@ "link": "http://api.jquery.com/jquery.ajax/", "description": "Perform an asynchronous HTTP (Ajax) requests with jQuery" }, + { + "key": "fetch", + "title": "Fetch API", + "link": "https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API", + "description": "Browser API that offers a simple interface for fetching resources" + }, { "key": "xhr", "title": "XMLHttpRequest", @@ -137,7 +143,7 @@ "extname": ".m", "default": "nsurlsession", "clients": [ - { + { "key": "nsurlsession", "title": "NSURLSession", "link": "https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSURLSession_class/index.html", @@ -151,7 +157,7 @@ "extname": ".swift", "default": "nsurlsession", "clients": [ - { + { "key": "nsurlsession", "title": "NSURLSession", "link": "https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSURLSession_class/index.html", @@ -165,7 +171,7 @@ "extname": ".go", "default": "native", "clients": [ - { + { "key": "native", "title": "NewRequest", "link": "http://golang.org/pkg/net/http/#NewRequest", diff --git a/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/application-form-encoded.js b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/application-form-encoded.js new file mode 100755 index 0000000000..b8b3f635b9 --- /dev/null +++ b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/application-form-encoded.js @@ -0,0 +1,15 @@ +const fetchOptions = { + mode: 'cors', + method: 'POST', + headers: { + 'content-type': 'application/x-www-form-urlencoded', + }, + body: { + foo: 'bar', + hello: 'world', + }, +}; + +fetch('http://mockbin.com/har', fetchOptions) + .then(response => response.json()) + .then(data => console.log(data)); diff --git a/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/application-json.js b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/application-json.js new file mode 100755 index 0000000000..2e424a3492 --- /dev/null +++ b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/application-json.js @@ -0,0 +1,13 @@ +const fetchOptions = { + mode: 'cors', + method: 'POST', + headers: { + 'content-type': 'application/json', + }, + body: + '{"number":1,"string":"f\\"oo","arr":[1,2,3],"nested":{"a":"b"},"arr_mix":[1,"a",{"arr_mix_nested":{}}],"boolean":false}', +}; + +fetch('http://mockbin.com/har', fetchOptions) + .then(response => response.json()) + .then(data => console.log(data)); diff --git a/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/cookies.js b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/cookies.js new file mode 100755 index 0000000000..c04b978ba0 --- /dev/null +++ b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/cookies.js @@ -0,0 +1,11 @@ +const fetchOptions = { + mode: 'cors', + method: 'POST', + headers: { + cookie: 'foo=bar; bar=baz', + }, +}; + +fetch('http://mockbin.com/har', fetchOptions) + .then(response => response.json()) + .then(data => console.log(data)); diff --git a/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/custom-method.js b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/custom-method.js new file mode 100755 index 0000000000..125d8a76aa --- /dev/null +++ b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/custom-method.js @@ -0,0 +1,9 @@ +const fetchOptions = { + mode: 'cors', + method: 'PROPFIND', + headers: {}, +}; + +fetch('http://mockbin.com/har', fetchOptions) + .then(response => response.json()) + .then(data => console.log(data)); diff --git a/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/full.js b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/full.js new file mode 100755 index 0000000000..c3f74c5395 --- /dev/null +++ b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/full.js @@ -0,0 +1,16 @@ +const fetchOptions = { + mode: 'cors', + method: 'POST', + headers: { + cookie: 'foo=bar; bar=baz', + accept: 'application/json', + 'content-type': 'application/x-www-form-urlencoded', + }, + body: { + foo: 'bar', + }, +}; + +fetch('http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value', fetchOptions) + .then(response => response.json()) + .then(data => console.log(data)); diff --git a/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/headers.js b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/headers.js new file mode 100755 index 0000000000..f1bff07205 --- /dev/null +++ b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/headers.js @@ -0,0 +1,12 @@ +const fetchOptions = { + mode: 'cors', + method: 'GET', + headers: { + accept: 'application/json', + 'x-foo': 'Bar', + }, +}; + +fetch('http://mockbin.com/har', fetchOptions) + .then(response => response.json()) + .then(data => console.log(data)); diff --git a/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/https.js b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/https.js new file mode 100755 index 0000000000..f57434fb87 --- /dev/null +++ b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/https.js @@ -0,0 +1,9 @@ +const fetchOptions = { + mode: 'cors', + method: 'GET', + headers: {}, +}; + +fetch('https://mockbin.com/har', fetchOptions) + .then(response => response.json()) + .then(data => console.log(data)); diff --git a/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/multipart-data.js b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/multipart-data.js new file mode 100755 index 0000000000..279dc005d1 --- /dev/null +++ b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/multipart-data.js @@ -0,0 +1,12 @@ +let form = new FormData(); +form.append('foo', 'Hello World'); + +const fetchOptions = { + mode: 'cors', + method: 'POST', + body: form, +}; + +fetch('http://mockbin.com/har', fetchOptions) + .then(response => response.json()) + .then(data => console.log(data)); diff --git a/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/multipart-file.js b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/multipart-file.js new file mode 100755 index 0000000000..e422f22482 --- /dev/null +++ b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/multipart-file.js @@ -0,0 +1,12 @@ +let form = new FormData(); +form.append('foo', 'test/fixtures/files/hello.txt'); + +const fetchOptions = { + mode: 'cors', + method: 'POST', + body: form, +}; + +fetch('http://mockbin.com/har', fetchOptions) + .then(response => response.json()) + .then(data => console.log(data)); diff --git a/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/multipart-form-data.js b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/multipart-form-data.js new file mode 100755 index 0000000000..30c4ae687d --- /dev/null +++ b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/multipart-form-data.js @@ -0,0 +1,12 @@ +let form = new FormData(); +form.append('foo', 'bar'); + +const fetchOptions = { + mode: 'cors', + method: 'POST', + body: form, +}; + +fetch('http://mockbin.com/har', fetchOptions) + .then(response => response.json()) + .then(data => console.log(data)); diff --git a/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/query.js b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/query.js new file mode 100755 index 0000000000..1bb16af44b --- /dev/null +++ b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/query.js @@ -0,0 +1,9 @@ +const fetchOptions = { + mode: 'cors', + method: 'GET', + headers: {}, +}; + +fetch('http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value', fetchOptions) + .then(response => response.json()) + .then(data => console.log(data)); diff --git a/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/short.js b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/short.js new file mode 100755 index 0000000000..a2bfda4927 --- /dev/null +++ b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/short.js @@ -0,0 +1,9 @@ +const fetchOptions = { + mode: 'cors', + method: 'GET', + headers: {}, +}; + +fetch('http://mockbin.com/har', fetchOptions) + .then(response => response.json()) + .then(data => console.log(data)); diff --git a/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/text-plain.js b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/text-plain.js new file mode 100755 index 0000000000..700d947170 --- /dev/null +++ b/packages/insomnia-httpsnippet/test/fixtures/output/javascript/fetch/text-plain.js @@ -0,0 +1,12 @@ +const fetchOptions = { + mode: 'cors', + method: 'POST', + headers: { + 'content-type': 'text/plain', + }, + data: 'Hello World', +}; + +fetch('http://mockbin.com/har', fetchOptions) + .then(response => response.json()) + .then(data => console.log(data)); diff --git a/packages/insomnia-httpsnippet/test/targets/javascript/fetch.js b/packages/insomnia-httpsnippet/test/targets/javascript/fetch.js new file mode 100644 index 0000000000..3dc1cbe56d --- /dev/null +++ b/packages/insomnia-httpsnippet/test/targets/javascript/fetch.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = function(snippet, fixtures) {}; From bb8b48adc351139fa3e860459943f626880b3328 Mon Sep 17 00:00:00 2001 From: Ricky Chandra Date: Tue, 12 Mar 2019 23:38:30 +0700 Subject: [PATCH 4/8] New data models for hotkeys and store the key bindings in settings (#1314) * New data models for hotkeys and store the key bindings in settings * Merge win and linux key bindings, remove generic key combinations, and add documents --- package-lock.json | 20 +- packages/insomnia-app/app/common/constants.js | 7 +- .../app/common/hotkeys-listener.js | 72 ++ packages/insomnia-app/app/common/hotkeys.js | 629 ++++++++++-------- packages/insomnia-app/app/models/settings.js | 3 + .../components/base/dropdown/dropdown-hint.js | 8 +- .../ui/components/base/dropdown/dropdown.js | 5 +- .../app/ui/components/base/modal.js | 7 +- .../dropdowns/environments-dropdown.js | 11 +- .../dropdowns/request-actions-dropdown.js | 12 +- .../request-group-actions-dropdown.js | 8 +- .../dropdowns/response-history-dropdown.js | 5 +- .../dropdowns/workspace-dropdown.js | 11 +- .../insomnia-app/app/ui/components/hotkey.js | 24 +- .../ui/components/modals/settings-modal.js | 2 +- .../app/ui/components/request-pane.js | 71 +- .../app/ui/components/request-url-bar.js | 16 +- .../app/ui/components/response-pane.js | 15 +- .../app/ui/components/settings/shortcuts.js | 67 +- .../ui/components/sidebar/sidebar-children.js | 5 + .../ui/components/sidebar/sidebar-filter.js | 15 +- .../sidebar/sidebar-request-group-row.js | 4 + .../components/sidebar/sidebar-request-row.js | 3 + .../app/ui/components/sidebar/sidebar.js | 6 + .../ui/components/viewers/response-viewer.js | 5 +- .../insomnia-app/app/ui/components/wrapper.js | 2 + .../insomnia-app/app/ui/containers/app.js | 32 +- 27 files changed, 635 insertions(+), 430 deletions(-) create mode 100644 packages/insomnia-app/app/common/hotkeys-listener.js diff --git a/package-lock.json b/package-lock.json index f23a1ff975..23426ce3d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1785,7 +1785,7 @@ }, "array-equal": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", "dev": true }, @@ -1916,7 +1916,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -1929,7 +1929,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -2036,7 +2036,7 @@ }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", "dev": true }, @@ -2329,7 +2329,7 @@ }, "callsites": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", "dev": true }, @@ -3291,7 +3291,7 @@ }, "expand-range": { "version": "1.8.2", - "resolved": "http://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { @@ -6129,7 +6129,7 @@ }, "jsesc": { "version": "1.3.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true }, @@ -6159,7 +6159,7 @@ }, "json5": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true }, @@ -8315,7 +8315,7 @@ }, "resolve": { "version": "1.1.7", - "resolved": "http://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", "dev": true }, @@ -9736,7 +9736,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } diff --git a/packages/insomnia-app/app/common/constants.js b/packages/insomnia-app/app/common/constants.js index 907e84c7b3..80ea9ccb48 100644 --- a/packages/insomnia-app/app/common/constants.js +++ b/packages/insomnia-app/app/common/constants.js @@ -71,10 +71,11 @@ export const PLUGIN_PATH = path.join(getDataDirectory(), 'plugins'); // Hotkeys export const MNEMONIC_SYM = isMac() ? '' : '&'; -export const MOD_SYM = isMac() ? '⌘' : 'Ctrl'; -export const ALT_SYM = isMac() ? '⌃' : 'Alt'; -export const SHIFT_SYM = isMac() ? '⇧' : 'Shift'; export const CTRL_SYM = isMac() ? '⌃' : 'Ctrl'; +export const ALT_SYM = isMac() ? '⌥' : 'Alt'; +export const SHIFT_SYM = isMac() ? '⇧' : 'Shift'; +export const META_SYM = isMac() ? '⌘' : 'Super'; + export function joinHotKeys(keys) { return keys.join(isMac() ? '' : '+'); } diff --git a/packages/insomnia-app/app/common/hotkeys-listener.js b/packages/insomnia-app/app/common/hotkeys-listener.js new file mode 100644 index 0000000000..74b2ce7eef --- /dev/null +++ b/packages/insomnia-app/app/common/hotkeys-listener.js @@ -0,0 +1,72 @@ +// @flow +import type { HotKeyDefinition, KeyBindings } from './hotkeys'; +import { getPlatformKeyCombinations } from './hotkeys'; +import * as models from '../models'; + +function _pressedHotKey(e: KeyboardEvent, bindings: KeyBindings): boolean { + const isCtrlPressed = e.ctrlKey; + const isAltPressed = e.altKey; + const isShiftPressed = e.shiftKey; + const isMetaPressed = e.metaKey; + const keyCombList = getPlatformKeyCombinations(bindings); + + for (const keyComb of keyCombList) { + const { ctrl, alt, shift, meta, keyCode } = keyComb; + + if ((ctrl && !isCtrlPressed) || (!ctrl && isCtrlPressed)) { + continue; + } + + if ((alt && !isAltPressed) || (!alt && isAltPressed)) { + continue; + } + + if ((shift && !isShiftPressed) || (!shift && isShiftPressed)) { + continue; + } + + if ((meta && !isMetaPressed) || (!meta && isMetaPressed)) { + continue; + } + + if (keyCode !== e.keyCode) { + continue; + } + + return true; + } + + return false; +} + +/** + * Check whether a hotkey has been pressed. + * @param e the activated keyboard event. + * @param definition the hotkey definition being checked. + * @returns {Promise} + */ +export async function pressedHotKey( + e: KeyboardEvent, + definition: HotKeyDefinition, +): Promise { + const settings = await models.settings.getOrCreate(); + return _pressedHotKey(e, settings.hotKeyRegistry[definition.id]); +} + +/** + * Call callback if the hotkey has been pressed. + * @param e the activated keyboard event. + * @param definition the hotkey definition being checked. + * @param callback to be called if the hotkey has been activated. + * @returns {Promise} + */ +export async function executeHotKey( + e: KeyboardEvent, + definition: HotKeyDefinition, + callback: Function, +): Promise { + const settings = await models.settings.getOrCreate(); + if (_pressedHotKey(e, settings.hotKeyRegistry[definition.id])) { + callback(); + } +} diff --git a/packages/insomnia-app/app/common/hotkeys.js b/packages/insomnia-app/app/common/hotkeys.js index ba1e536ec7..b734b4185f 100644 --- a/packages/insomnia-app/app/common/hotkeys.js +++ b/packages/insomnia-app/app/common/hotkeys.js @@ -2,304 +2,371 @@ import keycodes from './keycodes'; import { isMac } from './constants'; -export type Hotkey = { +/** + * The readable definition of a hotkey. + * The {@code id} the hotkey's reference id. + */ +export type HotKeyDefinition = { + id: string, description: string, - meta: boolean, +}; + +/** + * The combination of key presses that will activate a hotkey if pressed. + */ +export type KeyCombination = { + ctrl: boolean, alt: boolean, shift: boolean, - keycode: number | Array, - metaIsCtrl?: boolean, + meta: boolean, + keyCode: number, }; -export const SHOW_WORKSPACE_SETTINGS: Hotkey = { - description: 'Show Workspace Settings', - meta: true, - alt: false, - shift: true, - keycode: keycodes.comma, +/** + * The collection of a hotkey's key combinations for each platforms. + */ +export type KeyBindings = { + macKeys: Array, + // The key combinations for both Windows and Linux. + winLinuxKeys: Array, }; -export const SHOW_REQUEST_SETTINGS: Hotkey = { - description: 'Show Request Settings', - meta: true, - alt: true, - shift: true, - keycode: keycodes.comma, +/** + * The collection of defined hotkeys. + * The registry maps a hotkey by its reference id to its key bindings. + */ +export type HotKeyRegistry = { + [refId: string]: KeyBindings, }; -export const SHOW_KEYBOARD_SHORTCUTS: Hotkey = { - description: 'Show Keyboard Shortcuts', - meta: true, - alt: false, - shift: true, - keycode: keycodes.forwardslash, -}; - -export const SHOW_SETTINGS: Hotkey = { - description: 'Show App Preferences', - meta: true, - alt: false, - shift: false, - keycode: keycodes.comma, -}; - -export const TOGGLE_MAIN_MENU: Hotkey = { - description: 'Toggle Main Menu', - meta: true, - alt: true, - shift: false, - keycode: keycodes.comma, -}; - -export const TOGGLE_SIDEBAR: Hotkey = { - description: 'Toggle Sidebar', - meta: true, - alt: false, - shift: false, - keycode: keycodes.backslash, -}; - -export const SHOW_QUICK_SWITCHER: Hotkey = { - description: 'Switch Requests', - meta: true, - alt: false, - shift: false, - keycode: keycodes.p, -}; - -export const RELOAD_PLUGINS: Hotkey = { - description: 'Reload Plugins', - meta: true, - alt: false, - shift: true, - keycode: keycodes.r, -}; - -export const SHOW_AUTOCOMPLETE: Hotkey = { - description: 'Show Autocomplete', - meta: true, - metaIsCtrl: true, - alt: false, - shift: false, - keycode: keycodes.space, -}; - -export const SEND_REQUEST: Hotkey = { - description: 'Send Request', - meta: true, - alt: false, - shift: false, - keycode: [keycodes.enter, keycodes.r], -}; - -export const SEND_REQUEST_F5: Hotkey = { - description: 'Send Request', - meta: false, - alt: false, - shift: false, - keycode: keycodes.f5, -}; - -export const SHOW_SEND_OPTIONS: Hotkey = { - description: 'Send Request (Options)', - meta: true, - alt: false, - shift: true, - keycode: keycodes.enter, -}; - -export const SHOW_ENVIRONMENTS: Hotkey = { - description: 'Show Environment Editor', - meta: true, - alt: false, - shift: false, - keycode: keycodes.e, -}; - -export const TOGGLE_ENVIRONMENTS_MENU: Hotkey = { - description: 'Switch Environments', - meta: true, - alt: false, - shift: true, - keycode: keycodes.e, -}; - -export const TOGGLE_METHOD_DROPDOWN: Hotkey = { - description: 'Change HTTP Method', - meta: true, - alt: false, - shift: true, - keycode: keycodes.l, -}; - -export const TOGGLE_HISTORY_DROPDOWN: Hotkey = { - description: 'Show Request History', - meta: true, - alt: false, - shift: true, - keycode: keycodes.h, -}; - -export const FOCUS_URL: Hotkey = { - description: 'Focus URL', - meta: true, - alt: false, - shift: false, - keycode: keycodes.l, -}; - -export const GENERATE_CODE: Hotkey = { - description: 'Generate Code', - meta: true, - alt: false, - shift: true, - keycode: keycodes.g, -}; - -export const FOCUS_FILTER: Hotkey = { - description: 'Filter Sidebar', - meta: true, - alt: false, - shift: true, - keycode: keycodes.f, -}; - -export const FOCUS_RESPONSE: Hotkey = { - description: 'Focus Response', - meta: true, - alt: false, - shift: false, - keycode: keycodes.singlequote, -}; - -export const SHOW_COOKIES: Hotkey = { - description: 'Edit Cookies', - meta: true, - alt: false, - shift: false, - keycode: keycodes.k, -}; - -export const CREATE_REQUEST: Hotkey = { - description: 'Create Request', - meta: true, - alt: false, - shift: false, - keycode: keycodes.n, -}; - -export const DELETE_REQUEST: Hotkey = { - description: 'Delete Request', - meta: true, - alt: false, - shift: true, - keycode: keycodes.delete, -}; - -export const CREATE_FOLDER: Hotkey = { - description: 'Create Folder', - meta: true, - alt: false, - shift: true, - keycode: keycodes.n, -}; - -export const DUPLICATE_REQUEST: Hotkey = { - description: 'Duplicate Request', - meta: true, - alt: false, - shift: false, - keycode: keycodes.d, -}; - -export const CLOSE_DROPDOWN: Hotkey = { - description: 'Close Dropdown', - meta: false, - alt: false, - shift: false, - keycode: keycodes.esc, -}; - -export const CLOSE_MODAL: Hotkey = { - description: 'Close Modal', - meta: false, - alt: false, - shift: false, - keycode: keycodes.esc, -}; - -export const UNCOVER_VARIABLES: Hotkey = { - description: 'Uncover Variables', - meta: false, - alt: true, - shift: true, - keycode: keycodes.u, -}; - -export function pressedHotKey(e: KeyboardEvent, definition: Hotkey): boolean { - const isMetaPressed = isMac() ? e.metaKey : e.ctrlKey; - const isAltPressed = isMac() ? e.ctrlKey : e.altKey; - const isShiftPressed = e.shiftKey; - - const { meta, alt, shift, keycode } = definition; - const codes = Array.isArray(keycode) ? keycode : [keycode]; - - for (const code of codes) { - if ((alt && !isAltPressed) || (!alt && isAltPressed)) { - continue; - } - - if ((meta && !isMetaPressed) || (!meta && isMetaPressed)) { - continue; - } - - if ((shift && !isShiftPressed) || (!shift && isShiftPressed)) { - continue; - } - - if (code !== e.keyCode) { - continue; - } - - return true; - } - - return false; +function defineHotKey(id: string, description: string): HotKeyDefinition { + return { + id: id, + description: description, + }; } -export function executeHotKey(e: KeyboardEvent, definition: Hotkey, callback: Function): void { - if (pressedHotKey(e, definition)) { - callback(); - } +function keyComb( + ctrl: boolean, + alt: boolean, + shift: boolean, + meta: boolean, + keyCode: number, +): KeyCombination { + return { + ctrl: ctrl, + alt: alt, + shift: shift, + meta: meta, + keyCode: keyCode, + }; } -export function getChar(hotkey: Hotkey) { - const codes = Array.isArray(hotkey.keycode) ? hotkey.keycode : [hotkey.keycode]; - const chars = []; +function keyBinds( + mac: KeyCombination | Array, + winLinux: KeyCombination | Array, +): KeyBindings { + if (!Array.isArray(mac)) { + mac = [mac]; + } - for (const keycode of codes) { - const v = Object.keys(keycodes).find(k => keycodes[k] === keycode); + if (!Array.isArray(winLinux)) { + winLinux = [winLinux]; + } - if (!v) { - console.error('Invalid hotkey', hotkey); - } else if (v.toUpperCase() === 'ENTER') { - chars.push('Enter'); - } else if (v.toUpperCase() === 'DELETE') { - chars.push('Delete'); - } else if (v.toUpperCase() === 'COMMA') { - chars.push(','); - } else if (v.toUpperCase() === 'BACKSLASH') { - chars.push('\\'); - } else if (v.toUpperCase() === 'FORWARDSLASH') { - chars.push('/'); - } else if (v.toUpperCase() === 'SINGLEQUOTE') { - chars.push("'"); - } else if (v.toUpperCase() === 'SPACE') { - chars.push('Space'); + return { + macKeys: mac, + winLinuxKeys: winLinux, + }; +} + +/** + * The collection of available hotkeys' and their definitions. + */ +// Not using dot, because NeDB prohibits field names to contain dots. +export const hotKeyRefs = { + WORKSPACE_SHOW_SETTINGS: defineHotKey('workspace_showSettings', 'Show Workspace Settings'), + + REQUEST_SHOW_SETTINGS: defineHotKey('request_showSettings', 'Show Request Settings'), + + PREFERENCES_SHOW_KEYBOARD_SHORTCUTS: defineHotKey( + 'preferences_showKeyboardShortcuts', + 'Show Keyboard Shortcuts', + ), + + PREFERENCES_SHOW_GENERAL: defineHotKey('preferences_showGeneral', 'Show App Preferences'), + + TOGGLE_MAIN_MENU: defineHotKey('toggleMainMenu', 'Toggle Main Menu'), + + SIDEBAR_TOGGLE: defineHotKey('sidebar_toggle', 'Toggle Sidebar'), + + REQUEST_QUICK_SWITCH: defineHotKey('request_quickSwitch', 'Switch Requests'), + + PLUGIN_RELOAD: defineHotKey('plugin_reload', 'Reload Plugins'), + + SHOW_AUTOCOMPLETE: defineHotKey('showAutocomplete', 'Show Autocomplete'), + + REQUEST_SEND: defineHotKey('request_send', 'Send Request'), + + REQUEST_SHOW_OPTIONS: defineHotKey('request_showOptions', 'Send Request (Options)'), + + ENVIRONMENT_SHOW_EDITOR: defineHotKey('environment_showEditor', 'Show Environment Editor'), + + ENVIRONMENT_SHOW_SWITCH_MENU: defineHotKey('environment_showSwitchMenu', 'Switch Environments'), + + REQUEST_TOGGLE_HTTP_METHOD_MENU: defineHotKey( + 'request_toggleHttpMethodMenu', + 'Change HTTP Method', + ), + + REQUEST_TOGGLE_HISTORY: defineHotKey('request_toggleHistory', 'Show Request History'), + + REQUEST_FOCUS_URL: defineHotKey('request_focusUrl', 'Focus URL'), + + REQUEST_SHOW_GENERATE_CODE_EDITOR: defineHotKey( + 'request_showGenerateCodeEditor', + 'Generate Code', + ), + + SIDEBAR_FOCUS_FILTER: defineHotKey('sidebar_focusFilter', 'Filter Sidebar'), + + RESPONSE_FOCUS: defineHotKey('response_focus', 'Focus Response'), + + SHOW_COOKIES_EDITOR: defineHotKey('showCookiesEditor', 'Edit Cookies'), + + REQUEST_SHOW_CREATE: defineHotKey('request_showCreate', 'Create Request'), + + REQUEST_SHOW_DELETE: defineHotKey('request_showDelete', 'Delete Request'), + + REQUEST_SHOW_CREATE_FOLDER: defineHotKey('request_showCreateFolder', 'Create Folder'), + + REQUEST_SHOW_DUPLICATE: defineHotKey('request_showDuplicate', 'Duplicate Request'), + + CLOSE_DROPDOWN: defineHotKey('closeDropdown', 'Close Dropdown'), + + CLOSE_MODAL: defineHotKey('closeModal', 'Close Modal'), + + ENVIRONMENT_UNCOVER_VARIABLES: defineHotKey('environment_uncoverVariables', 'Uncover Variables'), +}; + +/** + * The default key bindings values of all available hotkeys. + */ +const defaultRegistry: HotKeyRegistry = { + [hotKeyRefs.WORKSPACE_SHOW_SETTINGS.id]: keyBinds( + keyComb(false, false, true, true, keycodes.comma), + keyComb(true, false, true, false, keycodes.comma), + ), + + [hotKeyRefs.REQUEST_SHOW_SETTINGS.id]: keyBinds( + keyComb(false, true, true, true, keycodes.comma), + keyComb(true, true, true, false, keycodes.comma), + ), + + [hotKeyRefs.PREFERENCES_SHOW_KEYBOARD_SHORTCUTS.id]: keyBinds( + keyComb(false, false, true, true, keycodes.forwardslash), + keyComb(true, false, true, false, keycodes.forwardslash), + ), + + [hotKeyRefs.PREFERENCES_SHOW_GENERAL.id]: keyBinds( + keyComb(false, false, false, true, keycodes.comma), + keyComb(true, false, false, false, keycodes.comma), + ), + + [hotKeyRefs.TOGGLE_MAIN_MENU.id]: keyBinds( + keyComb(false, true, false, true, keycodes.comma), + keyComb(true, true, false, false, keycodes.comma), + ), + + [hotKeyRefs.SIDEBAR_TOGGLE.id]: keyBinds( + keyComb(false, false, false, true, keycodes.backslash), + keyComb(true, false, false, false, keycodes.backslash), + ), + + [hotKeyRefs.REQUEST_QUICK_SWITCH.id]: keyBinds( + keyComb(false, false, false, true, keycodes.p), + keyComb(true, false, false, false, keycodes.p), + ), + + [hotKeyRefs.PLUGIN_RELOAD.id]: keyBinds( + keyComb(false, false, true, true, keycodes.r), + keyComb(true, false, true, false, keycodes.r), + ), + + [hotKeyRefs.SHOW_AUTOCOMPLETE.id]: keyBinds( + keyComb(true, false, false, false, keycodes.space), + keyComb(true, false, false, false, keycodes.space), + ), + + [hotKeyRefs.REQUEST_SEND.id]: keyBinds( + [ + keyComb(false, false, false, true, keycodes.enter), + keyComb(false, false, false, true, keycodes.r), + keyComb(false, false, false, false, keycodes.f5), + ], + [ + keyComb(true, false, false, false, keycodes.enter), + keyComb(true, false, false, false, keycodes.r), + keyComb(false, false, false, false, keycodes.f5), + ], + ), + + [hotKeyRefs.REQUEST_SHOW_OPTIONS.id]: keyBinds( + keyComb(false, false, true, true, keycodes.enter), + keyComb(true, false, true, false, keycodes.enter), + ), + + [hotKeyRefs.ENVIRONMENT_SHOW_EDITOR.id]: keyBinds( + keyComb(false, false, false, true, keycodes.e), + keyComb(true, false, false, false, keycodes.e), + ), + + [hotKeyRefs.ENVIRONMENT_SHOW_SWITCH_MENU.id]: keyBinds( + keyComb(false, false, true, true, keycodes.e), + keyComb(true, false, true, false, keycodes.e), + ), + + [hotKeyRefs.REQUEST_TOGGLE_HTTP_METHOD_MENU.id]: keyBinds( + keyComb(false, false, true, true, keycodes.l), + keyComb(true, false, true, false, keycodes.l), + ), + + [hotKeyRefs.REQUEST_TOGGLE_HISTORY.id]: keyBinds( + keyComb(false, false, true, true, keycodes.h), + keyComb(true, false, true, false, keycodes.h), + ), + + [hotKeyRefs.REQUEST_FOCUS_URL.id]: keyBinds( + keyComb(false, false, false, true, keycodes.l), + keyComb(true, false, false, false, keycodes.l), + ), + + [hotKeyRefs.REQUEST_SHOW_GENERATE_CODE_EDITOR.id]: keyBinds( + keyComb(false, false, true, true, keycodes.g), + keyComb(true, false, true, false, keycodes.g), + ), + + [hotKeyRefs.SIDEBAR_FOCUS_FILTER.id]: keyBinds( + keyComb(false, false, true, true, keycodes.f), + keyComb(true, false, true, false, keycodes.f), + ), + + [hotKeyRefs.RESPONSE_FOCUS.id]: keyBinds( + keyComb(false, false, false, true, keycodes.singlequote), + keyComb(true, false, false, false, keycodes.singlequote), + ), + + [hotKeyRefs.SHOW_COOKIES_EDITOR.id]: keyBinds( + keyComb(false, false, false, true, keycodes.k), + keyComb(true, false, false, false, keycodes.k), + ), + + [hotKeyRefs.REQUEST_SHOW_CREATE.id]: keyBinds( + keyComb(false, false, false, true, keycodes.n), + keyComb(true, false, false, false, keycodes.n), + ), + + [hotKeyRefs.REQUEST_SHOW_DELETE.id]: keyBinds( + keyComb(false, false, true, true, keycodes.delete), + keyComb(true, false, true, false, keycodes.delete), + ), + + [hotKeyRefs.REQUEST_SHOW_CREATE_FOLDER.id]: keyBinds( + keyComb(false, false, true, true, keycodes.n), + keyComb(true, false, true, false, keycodes.n), + ), + + [hotKeyRefs.REQUEST_SHOW_DUPLICATE.id]: keyBinds( + keyComb(false, false, false, true, keycodes.d), + keyComb(true, false, false, false, keycodes.d), + ), + + [hotKeyRefs.CLOSE_DROPDOWN.id]: keyBinds( + keyComb(false, false, false, false, keycodes.esc), + keyComb(false, false, false, false, keycodes.esc), + ), + + [hotKeyRefs.CLOSE_MODAL.id]: keyBinds( + keyComb(false, false, false, false, keycodes.esc), + keyComb(false, false, false, false, keycodes.esc), + ), + + [hotKeyRefs.ENVIRONMENT_UNCOVER_VARIABLES.id]: keyBinds( + keyComb(false, true, true, false, keycodes.u), + keyComb(false, true, true, false, keycodes.u), + ), +}; + +function copyKeyCombs(sources: Array): Array { + let targets: Array = []; + sources.forEach(keyComb => { + targets.push(Object.assign({}, keyComb)); + }); + return targets; +} + +/** + * Get a new copy of hotkey registry with default values. + * @returns {HotKeyRegistry} + */ +export function newDefaultRegistry(): HotKeyRegistry { + let newDefaults: HotKeyRegistry = {}; + for (const refId in defaultRegistry) { + if (!defaultRegistry.hasOwnProperty(refId)) { + continue; + } + const keyBindings: KeyBindings = defaultRegistry[refId]; + newDefaults[refId] = { + macKeys: copyKeyCombs(keyBindings.macKeys), + winLinuxKeys: copyKeyCombs(keyBindings.winLinuxKeys), + }; + } + return newDefaults; +} + +/** + * Get the key combinations based on the current platform. + * @param bindings + * @returns {Array} + */ +export function getPlatformKeyCombinations(bindings: KeyBindings): Array { + if (isMac()) { + return bindings.macKeys; + } + return bindings.winLinuxKeys; +} + +/** + * Gets the displayed text of a key code. + * @param keyCode + * @returns {string} + */ +export function getChar(keyCode: number): string { + let char; + const keyCodeStr = Object.keys(keycodes).find(k => keycodes[k] === keyCode); + + if (!keyCodeStr) { + console.error('Invalid key code', keyCode); + } else { + const cap = keyCodeStr.toUpperCase(); + if (cap === 'ENTER') { + char = 'Enter'; + } else if (cap === 'DELETE') { + char = 'Delete'; + } else if (cap === 'COMMA') { + char = ','; + } else if (cap === 'BACKSLASH') { + char = '\\'; + } else if (cap === 'FORWARDSLASH') { + char = '/'; + } else if (cap === 'SINGLEQUOTE') { + char = "'"; + } else if (cap === 'SPACE') { + char = 'Space'; } else { - chars.push(v.toUpperCase()); + char = cap; } } - return chars[0] || 'unknown'; + return char || 'unknown'; } diff --git a/packages/insomnia-app/app/models/settings.js b/packages/insomnia-app/app/models/settings.js index 9310f99461..c1dfd93b81 100644 --- a/packages/insomnia-app/app/models/settings.js +++ b/packages/insomnia-app/app/models/settings.js @@ -2,6 +2,7 @@ import type { BaseModel } from './index'; import * as db from '../common/database'; import { UPDATE_CHANNEL_STABLE } from '../common/constants'; +import * as hotkeys from '../common/hotkeys'; type BaseSettings = { showPasswords: boolean, @@ -34,6 +35,7 @@ type BaseSettings = { fontInterface: string | null, fontSize: number, fontVariantLigatures: boolean, + hotKeyRegistry: hotkeys.HotKeyRegistry, }; export type Settings = BaseModel & BaseSettings; @@ -75,6 +77,7 @@ export function init(): BaseSettings { fontInterface: null, fontSize: 13, fontVariantLigatures: false, + hotKeyRegistry: hotkeys.newDefaultRegistry(), }; } diff --git a/packages/insomnia-app/app/ui/components/base/dropdown/dropdown-hint.js b/packages/insomnia-app/app/ui/components/base/dropdown/dropdown-hint.js index 703ab27389..d2123ee431 100644 --- a/packages/insomnia-app/app/ui/components/base/dropdown/dropdown-hint.js +++ b/packages/insomnia-app/app/ui/components/base/dropdown/dropdown-hint.js @@ -1,16 +1,16 @@ // @flow import * as React from 'react'; -import type { Hotkey as HotkeyType } from '../../../../common/hotkeys'; import Hotkey from '../../hotkey'; +import type { KeyBindings } from '../../../../common/hotkeys'; type Props = { - hotkey: HotkeyType, + keyBindings: KeyBindings, }; class DropdownHint extends React.PureComponent { render() { - const { hotkey } = this.props; - return ; + const { keyBindings } = this.props; + return ; } } diff --git a/packages/insomnia-app/app/ui/components/base/dropdown/dropdown.js b/packages/insomnia-app/app/ui/components/base/dropdown/dropdown.js index a94d4b7cec..490609e684 100644 --- a/packages/insomnia-app/app/ui/components/base/dropdown/dropdown.js +++ b/packages/insomnia-app/app/ui/components/base/dropdown/dropdown.js @@ -8,7 +8,8 @@ import DropdownItem from './dropdown-item'; import DropdownDivider from './dropdown-divider'; import { fuzzyMatch } from '../../../../common/misc'; import KeydownBinder from '../../keydown-binder'; -import * as hotkeys from '../../../../common/hotkeys'; +import { executeHotKey } from '../../../../common/hotkeys-listener'; +import { hotKeyRefs } from '../../../../common/hotkeys'; const dropdownsContainer = document.querySelector('#dropdowns-container'); @@ -115,7 +116,7 @@ class Dropdown extends PureComponent { this._handleDropdownNavigation(e); - hotkeys.executeHotKey(e, hotkeys.CLOSE_DROPDOWN, () => { + executeHotKey(e, hotKeyRefs.CLOSE_DROPDOWN, () => { this.hide(); }); } diff --git a/packages/insomnia-app/app/ui/components/base/modal.js b/packages/insomnia-app/app/ui/components/base/modal.js index 7afb6e662b..8775c5ceb8 100644 --- a/packages/insomnia-app/app/ui/components/base/modal.js +++ b/packages/insomnia-app/app/ui/components/base/modal.js @@ -3,7 +3,8 @@ import PropTypes from 'prop-types'; import autobind from 'autobind-decorator'; import classnames from 'classnames'; import KeydownBinder from '../keydown-binder'; -import * as hotkeys from '../../../common/hotkeys'; +import { hotKeyRefs } from '../../../common/hotkeys'; +import { pressedHotKey } from '../../../common/hotkeys-listener'; // Keep global z-index reference so that every modal will // appear over top of an existing one. @@ -21,7 +22,7 @@ class Modal extends PureComponent { }; } - _handleKeyDown(e) { + async _handleKeyDown(e) { if (!this.state.open) { return; } @@ -32,7 +33,7 @@ class Modal extends PureComponent { } const closeOnKeyCodes = this.props.closeOnKeyCodes || []; - const pressedEscape = hotkeys.pressedHotKey(e, hotkeys.CLOSE_MODAL); + const pressedEscape = await pressedHotKey(e, hotKeyRefs.CLOSE_MODAL); const pressedCloseButton = closeOnKeyCodes.find(c => c === e.keyCode); // Pressed escape diff --git a/packages/insomnia-app/app/ui/components/dropdowns/environments-dropdown.js b/packages/insomnia-app/app/ui/components/dropdowns/environments-dropdown.js index 1ac8a95a39..19e3469d36 100644 --- a/packages/insomnia-app/app/ui/components/dropdowns/environments-dropdown.js +++ b/packages/insomnia-app/app/ui/components/dropdowns/environments-dropdown.js @@ -11,17 +11,19 @@ import { } from '../base/dropdown'; import { showModal } from '../modals/index'; import Tooltip from '../tooltip'; -import * as hotkeys from '../../../common/hotkeys'; import KeydownBinder from '../keydown-binder'; import type { Workspace } from '../../../models/workspace'; import type { Environment } from '../../../models/environment'; +import type { HotKeyRegistry } from '../../../common/hotkeys'; +import { hotKeyRefs } from '../../../common/hotkeys'; +import { executeHotKey } from '../../../common/hotkeys-listener'; type Props = { - workspace: Workspace, handleChangeEnvironment: Function, workspace: Workspace, environments: Array, environmentHighlightColorStyle: String, + hotKeyRegistry: HotKeyRegistry, // Optional className?: string, @@ -57,7 +59,7 @@ class EnvironmentsDropdown extends React.PureComponent { } _handleKeydown(e: KeyboardEvent) { - hotkeys.executeHotKey(e, hotkeys.TOGGLE_ENVIRONMENTS_MENU, () => { + executeHotKey(e, hotKeyRefs.ENVIRONMENT_SHOW_SWITCH_MENU, () => { this._dropdown && this._dropdown.toggle(true); }); } @@ -69,6 +71,7 @@ class EnvironmentsDropdown extends React.PureComponent { environments, activeEnvironment, environmentHighlightColorStyle, + hotKeyRegistry, ...other } = this.props; @@ -125,7 +128,7 @@ class EnvironmentsDropdown extends React.PureComponent { Manage Environments - + diff --git a/packages/insomnia-app/app/ui/components/dropdowns/request-actions-dropdown.js b/packages/insomnia-app/app/ui/components/dropdowns/request-actions-dropdown.js index c515f8d3f1..1aa69d6dfd 100644 --- a/packages/insomnia-app/app/ui/components/dropdowns/request-actions-dropdown.js +++ b/packages/insomnia-app/app/ui/components/dropdowns/request-actions-dropdown.js @@ -10,7 +10,7 @@ import { DropdownItem, } from '../base/dropdown/index'; import * as models from '../../../models'; -import * as hotkeys from '../../../common/hotkeys'; +import { hotKeyRefs } from '../../../common/hotkeys'; @autobind class RequestActionsDropdown extends PureComponent { @@ -44,6 +44,7 @@ class RequestActionsDropdown extends PureComponent { const { request, // eslint-disable-line no-unused-vars handleShowSettings, + hotKeyRegistry, ...other } = this.props; @@ -54,11 +55,13 @@ class RequestActionsDropdown extends PureComponent { Duplicate - + Generate Code - + Copy as Curl @@ -71,7 +74,7 @@ class RequestActionsDropdown extends PureComponent { Settings - + ); @@ -84,6 +87,7 @@ RequestActionsDropdown.propTypes = { handleCopyAsCurl: PropTypes.func.isRequired, handleShowSettings: PropTypes.func.isRequired, request: PropTypes.object.isRequired, + hotKeyRegistry: PropTypes.object.isRequired, }; export default RequestActionsDropdown; diff --git a/packages/insomnia-app/app/ui/components/dropdowns/request-group-actions-dropdown.js b/packages/insomnia-app/app/ui/components/dropdowns/request-group-actions-dropdown.js index 5134ae3085..a964bd268f 100644 --- a/packages/insomnia-app/app/ui/components/dropdowns/request-group-actions-dropdown.js +++ b/packages/insomnia-app/app/ui/components/dropdowns/request-group-actions-dropdown.js @@ -12,7 +12,7 @@ import { import EnvironmentEditModal from '../modals/environment-edit-modal'; import * as models from '../../../models'; import { showPrompt, showModal } from '../modals/index'; -import * as hotkeys from '../../../common/hotkeys'; +import { hotKeyRefs } from '../../../common/hotkeys'; @autobind class RequestGroupActionsDropdown extends PureComponent { @@ -63,6 +63,7 @@ class RequestGroupActionsDropdown extends PureComponent { render() { const { requestGroup, // eslint-disable-line no-unused-vars + hotKeyRegistry, ...other } = this.props; @@ -73,11 +74,11 @@ class RequestGroupActionsDropdown extends PureComponent { New Request - + New Folder - + @@ -102,6 +103,7 @@ class RequestGroupActionsDropdown extends PureComponent { RequestGroupActionsDropdown.propTypes = { workspace: PropTypes.object.isRequired, + hotKeyRegistry: PropTypes.object.isRequired, handleCreateRequest: PropTypes.func.isRequired, handleCreateRequestGroup: PropTypes.func.isRequired, handleDuplicateRequestGroup: PropTypes.func.isRequired, diff --git a/packages/insomnia-app/app/ui/components/dropdowns/response-history-dropdown.js b/packages/insomnia-app/app/ui/components/dropdowns/response-history-dropdown.js index d1fec75add..992420609d 100644 --- a/packages/insomnia-app/app/ui/components/dropdowns/response-history-dropdown.js +++ b/packages/insomnia-app/app/ui/components/dropdowns/response-history-dropdown.js @@ -6,9 +6,10 @@ import StatusTag from '../tags/status-tag'; import URLTag from '../tags/url-tag'; import PromptButton from '../base/prompt-button'; import KeydownBinder from '../keydown-binder'; -import * as hotkeys from '../../../common/hotkeys'; import TimeTag from '../tags/time-tag'; import SizeTag from '../tags/size-tag'; +import { executeHotKey } from '../../../common/hotkeys-listener'; +import { hotKeyRefs } from '../../../common/hotkeys'; @autobind class ResponseHistoryDropdown extends PureComponent { @@ -29,7 +30,7 @@ class ResponseHistoryDropdown extends PureComponent { } _handleKeydown(e) { - hotkeys.executeHotKey(e, hotkeys.TOGGLE_HISTORY_DROPDOWN, () => { + executeHotKey(e, hotKeyRefs.REQUEST_TOGGLE_HISTORY, () => { this._dropdown && this._dropdown.toggle(true); }); } diff --git a/packages/insomnia-app/app/ui/components/dropdowns/workspace-dropdown.js b/packages/insomnia-app/app/ui/components/dropdowns/workspace-dropdown.js index fa55637be1..6850972f6c 100644 --- a/packages/insomnia-app/app/ui/components/dropdowns/workspace-dropdown.js +++ b/packages/insomnia-app/app/ui/components/dropdowns/workspace-dropdown.js @@ -17,8 +17,9 @@ import WorkspaceShareSettingsModal from '../modals/workspace-share-settings-moda import * as session from '../../../sync/session'; import LoginModal from '../modals/login-modal'; import Tooltip from '../tooltip'; -import * as hotkeys from '../../../common/hotkeys'; import KeydownBinder from '../keydown-binder'; +import { hotKeyRefs } from '../../../common/hotkeys'; +import { executeHotKey } from '../../../common/hotkeys-listener'; @autobind class WorkspaceDropdown extends PureComponent { @@ -91,7 +92,7 @@ class WorkspaceDropdown extends PureComponent { } _handleKeydown(e) { - hotkeys.executeHotKey(e, hotkeys.TOGGLE_MAIN_MENU, () => { + executeHotKey(e, hotKeyRefs.TOGGLE_MAIN_MENU, () => { this._dropdown && this._dropdown.toggle(true); }); } @@ -103,6 +104,7 @@ class WorkspaceDropdown extends PureComponent { activeWorkspace, unseenWorkspaces, isLoading, + hotKeyRegistry, ...other } = this.props; @@ -145,7 +147,7 @@ class WorkspaceDropdown extends PureComponent { {activeWorkspace.name} Workspace Settings - + @@ -176,7 +178,7 @@ class WorkspaceDropdown extends PureComponent { Preferences - + Import/Export @@ -215,6 +217,7 @@ WorkspaceDropdown.propTypes = { workspaces: PropTypes.arrayOf(PropTypes.object).isRequired, unseenWorkspaces: PropTypes.arrayOf(PropTypes.object).isRequired, activeWorkspace: PropTypes.object.isRequired, + hotKeyRegistry: PropTypes.object.isRequired, // Optional className: PropTypes.string, diff --git a/packages/insomnia-app/app/ui/components/hotkey.js b/packages/insomnia-app/app/ui/components/hotkey.js index 6cd6c22181..33de89c00f 100644 --- a/packages/insomnia-app/app/ui/components/hotkey.js +++ b/packages/insomnia-app/app/ui/components/hotkey.js @@ -1,12 +1,12 @@ // @flow import * as React from 'react'; import classnames from 'classnames'; -import type { Hotkey as HotkeyType } from '../../common/hotkeys'; +import { ALT_SYM, CTRL_SYM, isMac, joinHotKeys, META_SYM, SHIFT_SYM } from '../../common/constants'; +import type { KeyBindings } from '../../common/hotkeys'; import * as hotkeys from '../../common/hotkeys'; -import { ALT_SYM, CTRL_SYM, isMac, joinHotKeys, MOD_SYM, SHIFT_SYM } from '../../common/constants'; type Props = { - hotkey: HotkeyType, + keyBindings: KeyBindings, // Optional className?: string, @@ -14,22 +14,18 @@ type Props = { class Hotkey extends React.PureComponent { render() { - const { hotkey, className } = this.props; - const { alt, shift, meta, metaIsCtrl } = hotkey; + const { keyBindings, className } = this.props; + + const keyComb = hotkeys.getPlatformKeyCombinations(keyBindings)[0]; + const { ctrl, alt, shift, meta, keyCode } = keyComb; const chars = []; alt && chars.push(ALT_SYM); shift && chars.push(SHIFT_SYM); + ctrl && chars.push(CTRL_SYM); + meta && chars.push(META_SYM); - if (meta) { - if (metaIsCtrl) { - chars.push(CTRL_SYM); - } else { - chars.push(isMac() ? MOD_SYM : CTRL_SYM); - } - } - - chars.push(hotkeys.getChar(hotkey)); + chars.push(hotkeys.getChar(keyCode)); return ( diff --git a/packages/insomnia-app/app/ui/components/modals/settings-modal.js b/packages/insomnia-app/app/ui/components/modals/settings-modal.js index 7461c711cf..23ad070f55 100644 --- a/packages/insomnia-app/app/ui/components/modals/settings-modal.js +++ b/packages/insomnia-app/app/ui/components/modals/settings-modal.js @@ -137,7 +137,7 @@ class SettingsModal extends PureComponent { - + diff --git a/packages/insomnia-app/app/ui/components/request-pane.js b/packages/insomnia-app/app/ui/components/request-pane.js index 94b99b5961..d128e5fbb8 100644 --- a/packages/insomnia-app/app/ui/components/request-pane.js +++ b/packages/insomnia-app/app/ui/components/request-pane.js @@ -29,8 +29,8 @@ import { showModal } from './modals/index'; import RequestSettingsModal from './modals/request-settings-modal'; import MarkdownPreview from './markdown-preview'; import type { Settings } from '../../models/settings'; -import * as hotkeys from '../../common/hotkeys'; import ErrorBoundary from './error-boundary'; +import { hotKeyRefs } from '../../common/hotkeys'; type Props = { // Functions @@ -171,38 +171,42 @@ class RequestPane extends React.PureComponent { const paneHeaderClasses = 'pane__header theme--pane__header'; const paneBodyClasses = 'pane__body theme--pane__body'; + const hotKeyRegistry = settings.hotKeyRegistry; + if (!request) { return (
-
+
- - - - - - - - - - - - + + + + + + + + + + + +
New Request - - - -
Switch Requests - - - -
Edit Environments - - - -
New Request + + + +
Switch Requests + + + +
Edit Environments + + + +
@@ -251,6 +255,7 @@ class RequestPane extends React.PureComponent { isVariableUncovered={isVariableUncovered} handleGetRenderContext={handleGetRenderContext} request={request} + hotKeyRegistry={settings.hotKeyRegistry} />
@@ -266,7 +271,7 @@ class RequestPane extends React.PureComponent { ? getContentTypeName(request.body.mimeType) : 'Body'} {numBodyParams ? {numBodyParams} : null} - + @@ -275,7 +280,7 @@ class RequestPane extends React.PureComponent { request={request} className="tall"> {getAuthTypeName(request.authentication.type) || 'Auth'} - + @@ -295,7 +300,7 @@ class RequestPane extends React.PureComponent { Docs {request.description && ( - + )} @@ -341,7 +346,7 @@ class RequestPane extends React.PureComponent { - + @@ -419,10 +424,10 @@ class RequestPane extends React.PureComponent {

- + -
-
+
+

@@ -122,6 +124,7 @@ class SidebarRequestGroupRow extends PureComponent { workspace={workspace} requestCreate={handleCreateRequest} filter={filter} + hotKeyRegistry={hotKeyRegistry} /> )} @@ -146,6 +149,7 @@ SidebarRequestGroupRow.propTypes = { isCollapsed: PropTypes.bool.isRequired, workspace: PropTypes.object.isRequired, requestGroup: PropTypes.object.isRequired, + hotKeyRegistry: PropTypes.object.isRequired, // React DnD isDragging: PropTypes.bool, diff --git a/packages/insomnia-app/app/ui/components/sidebar/sidebar-request-row.js b/packages/insomnia-app/app/ui/components/sidebar/sidebar-request-row.js index fbf266408f..518e951be7 100644 --- a/packages/insomnia-app/app/ui/components/sidebar/sidebar-request-row.js +++ b/packages/insomnia-app/app/ui/components/sidebar/sidebar-request-row.js @@ -78,6 +78,7 @@ class SidebarRequestRow extends PureComponent { request, requestGroup, isActive, + hotKeyRegistry, } = this.props; const { dragDirection } = this.state; @@ -134,6 +135,7 @@ class SidebarRequestRow extends PureComponent { handleShowSettings={this._handleShowRequestSettings} request={request} requestGroup={requestGroup} + hotKeyRegistry={hotKeyRegistry} /> @@ -161,6 +163,7 @@ SidebarRequestRow.propTypes = { // Other filter: PropTypes.string.isRequired, isActive: PropTypes.bool.isRequired, + hotKeyRegistry: PropTypes.object.isRequired, // React DnD isDragging: PropTypes.bool, diff --git a/packages/insomnia-app/app/ui/components/sidebar/sidebar.js b/packages/insomnia-app/app/ui/components/sidebar/sidebar.js index d34fa1b5ba..291b26485d 100644 --- a/packages/insomnia-app/app/ui/components/sidebar/sidebar.js +++ b/packages/insomnia-app/app/ui/components/sidebar/sidebar.js @@ -55,6 +55,7 @@ class Sidebar extends PureComponent { handleActivateRequest, activeRequest, environmentHighlightColorStyle, + hotKeyRegistry, } = this.props; return ( @@ -77,6 +78,7 @@ class Sidebar extends PureComponent { activeWorkspace={workspace} workspaces={workspaces} unseenWorkspaces={unseenWorkspaces} + hotKeyRegistry={hotKeyRegistry} handleExportFile={handleExportFile} handleImportFile={handleImportFile} handleSetActiveWorkspace={handleSetActiveWorkspace} @@ -90,6 +92,7 @@ class Sidebar extends PureComponent { environments={environments} workspace={workspace} environmentHighlightColorStyle={environmentHighlightColorStyle} + hotKeyRegistry={hotKeyRegistry} />