From 577575305f0db28b153fb38ddaac27c8dab2c9e5 Mon Sep 17 00:00:00 2001 From: Alexey Nalivaiko Date: Fri, 26 Apr 2019 17:05:53 +0300 Subject: [PATCH 01/32] [AMSA-41] add clear data button --- src/core/delete-data-connector.ts | 40 +++++++++++++++++++ src/core/sync-apps/sync.service.ts | 4 +- src/lib/actions.ts | 2 + src/lib/ui-windows.ts | 10 ++++- src/lib/window.ts | 8 +--- src/main.ts | 7 +++- src/ui/clear-data/clear-data.ejs | 11 +++++ src/ui/clear-data/clear-data.tsx | 13 ++++++ src/ui/components/clear-data/ClearData.scss | 9 +++++ .../clear-data/ClearDataComponent.tsx | 35 ++++++++++++++++ src/ui/components/root/RootComponent.tsx | 2 +- .../updates-settings/UpdatesSettings.scss | 2 + .../UpdatesSettingsComponent.tsx | 15 +++++-- webpack/default.ts | 3 +- webpack/entries/clear-data.ts | 32 +++++++++++++++ 15 files changed, 178 insertions(+), 15 deletions(-) create mode 100644 src/core/delete-data-connector.ts create mode 100644 src/ui/clear-data/clear-data.ejs create mode 100644 src/ui/clear-data/clear-data.tsx create mode 100644 src/ui/components/clear-data/ClearData.scss create mode 100644 src/ui/components/clear-data/ClearDataComponent.tsx create mode 100644 webpack/entries/clear-data.ts diff --git a/src/core/delete-data-connector.ts b/src/core/delete-data-connector.ts new file mode 100644 index 0000000..e138da8 --- /dev/null +++ b/src/core/delete-data-connector.ts @@ -0,0 +1,40 @@ +import {Connector} from 'core/connector'; +import {Store} from 'core/store'; +import {app} from 'electron'; +import * as fs from 'fs-extra'; +import {Action, ActionTypes} from 'lib/actions'; +import {openClearDataWindow} from 'lib/ui-windows'; +import {SyncService} from './sync-apps/sync.service'; + + +export class DeleteDataConnector extends Connector { + + constructor (private store: Store, private syncService: SyncService) { + super('delete-data'); + } + + async onAction ({type, payload}: Action) { + switch (type) { + case ActionTypes.showDeleteAllAccountsDataDialog: + return openClearDataWindow(); + case ActionTypes.deleteAllAccountsData: + await this.syncService.destroy(); + this.removeData(); + this.stopApp(); + + return; + default: + return; + } + } + + removeData () { + console.log('[DeleteDataConnector] removing local data'); + fs.removeSync(app.getPath('userData')); + console.log('[DeleteDataConnector] local data removed'); + } + + stopApp () { + app.exit(0); + } +} diff --git a/src/core/sync-apps/sync.service.ts b/src/core/sync-apps/sync.service.ts index 5c6f6a9..e33eb28 100644 --- a/src/core/sync-apps/sync.service.ts +++ b/src/core/sync-apps/sync.service.ts @@ -23,6 +23,7 @@ type FinishPromise = Promise; export class SyncService { private activeSyncs = new Map(); + private destroying = false; constructor (private store: Store, private appodealApi: AppodealApi, private onlineService: OnlineService) { @@ -34,7 +35,7 @@ export class SyncService { * @param admobAccount */ public canRun (admobAccount: AdMobAccount) { - return ![...this.activeSyncs.keys()].some(sync => sync.adMobAccount.id === admobAccount.id); + return !this.destroying && ![...this.activeSyncs.keys()].some(sync => sync.adMobAccount.id === admobAccount.id); } @@ -169,6 +170,7 @@ export class SyncService { } public destroy () { + this.destroying = true; return Promise.all( [...this.activeSyncs.entries()].map( ([sync, finishPromise]: [Sync, Promise]) => diff --git a/src/lib/actions.ts b/src/lib/actions.ts index 6088119..67d903e 100644 --- a/src/lib/actions.ts +++ b/src/lib/actions.ts @@ -12,6 +12,8 @@ export enum ActionTypes { runSync = 'RunSync', openAdmobPage = 'openAdmobPage', selectAccount = 'selectAdmobAccount', + showDeleteAllAccountsDataDialog = 'showDeleteAllAccountsDataDialog', + deleteAllAccountsData = 'deleteLocalData', selectAppodealAccount = 'selectAppodealAccount', openLogFile = 'openLogFile', submitLogToAppodeal = 'submitLogToAppodeal', diff --git a/src/lib/ui-windows.ts b/src/lib/ui-windows.ts index e0aa84a..3455c8e 100644 --- a/src/lib/ui-windows.ts +++ b/src/lib/ui-windows.ts @@ -33,6 +33,14 @@ export async function openSettingsWindow () { }); } +export function openClearDataWindow () { + return openDialogWindow('./clear-data.html', { + width: 350, + height: 220, + parent: null + }); +} + export function openAboutWindow () { return openOrFocus('about', () => openWindow('./about.html', { frame: true, @@ -40,7 +48,7 @@ export function openAboutWindow () { titleBarStyle: 'default', height: 270, parent: null - })) + })); } export function openAppodealSignInWindow (account: AppodealAccountState = null): Promise { diff --git a/src/lib/window.ts b/src/lib/window.ts index 4f1753a..8ec817f 100644 --- a/src/lib/window.ts +++ b/src/lib/window.ts @@ -115,18 +115,14 @@ export function waitForNavigation (window: BrowserWindow, urlFragment: RegExp = }); } -export function confirmDialog (message) { +export function confirmDialog (message): Promise { return new Promise(resolve => { const OKButton = 0; const dialogOptions = {type: 'question', buttons: ['OK', 'Cancel'], message}; (dialog || remote.dialog).showMessageBox(dialogOptions, i => { - if (i === OKButton) { - - return resolve(true); - } - return resolve(false); + return resolve(i === OKButton); }); }); } diff --git a/src/main.ts b/src/main.ts index 3df29ff..6329723 100644 --- a/src/main.ts +++ b/src/main.ts @@ -26,6 +26,7 @@ import {TrayIcon} from 'lib/tray-icon'; import {openAppodealAccountsWindow, openAppodealSignInWindow} from 'lib/ui-windows'; import {UpdatesService} from 'lib/updates'; import * as path from 'path'; +import {DeleteDataConnector} from './core/delete-data-connector'; if (environment.development) { @@ -69,7 +70,8 @@ app.on('ready', async () => { logsConnector = new LogsConnector(store, appodealApi), onlineConnector = new OnlineConnector(store), syncScheduler = new SyncScheduler(syncService, store, onlineService), - syncConnector = new SyncConnector(store, syncService); + syncConnector = new SyncConnector(store, syncService), + deleteDataConnector = new DeleteDataConnector(store, syncService); // EVENTS appodealApi.onError.subscribe(async ({account, error}) => { @@ -138,7 +140,8 @@ app.on('ready', async () => { syncService.destroy(), updatesConnector.destroy(), onlineService.destroy(), - syncScheduler.destroy() + syncScheduler.destroy(), + deleteDataConnector.destroy() ]); onlineService.on('statusChange', isOnline => { diff --git a/src/ui/clear-data/clear-data.ejs b/src/ui/clear-data/clear-data.ejs new file mode 100644 index 0000000..ab04877 --- /dev/null +++ b/src/ui/clear-data/clear-data.ejs @@ -0,0 +1,11 @@ + + + + + + Clear data + + +
+ + diff --git a/src/ui/clear-data/clear-data.tsx b/src/ui/clear-data/clear-data.tsx new file mode 100644 index 0000000..cd0c6de --- /dev/null +++ b/src/ui/clear-data/clear-data.tsx @@ -0,0 +1,13 @@ +import * as Sentry from '@sentry/browser'; +import React from 'react'; +import ReactDOM from 'react-dom'; +import {ClearData} from '../components/clear-data/ClearDataComponent'; + +import '../style.scss'; + + +ReactDOM.render(, document.getElementById('content')); + +if (environment.sentry && environment.sentry.dsn) { + Sentry.init(environment.sentry); +} diff --git a/src/ui/components/clear-data/ClearData.scss b/src/ui/components/clear-data/ClearData.scss new file mode 100644 index 0000000..dfd8a62 --- /dev/null +++ b/src/ui/components/clear-data/ClearData.scss @@ -0,0 +1,9 @@ +:global body { + --title-height: 0px; +} + +.root { + button { + float: right; + } +} diff --git a/src/ui/components/clear-data/ClearDataComponent.tsx b/src/ui/components/clear-data/ClearDataComponent.tsx new file mode 100644 index 0000000..acb22c8 --- /dev/null +++ b/src/ui/components/clear-data/ClearDataComponent.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import {action, ActionTypes} from '../../../lib/actions'; +import {singleEvent} from '../../../lib/dom'; +import {sendToMain} from '../../../lib/messages'; +import {confirmDialog} from '../../../lib/window'; +import style from './ClearData.scss'; + + +export function ClearData () { + + return (
+

+ The app stores following info locally: +

+
    +
  • Appodeal access token
  • +
  • Cookies for admob accounts which you have signed in
  • +
  • Sync history for each admob account
  • +
  • Sync log files
  • +
+ +
); +} + + +function confirmDeleteLocalData () { + confirmDialog( + `Confirm your intention to delete the data! +All the data will be immediately deleted, +all active syncs will be stopped, +you will immediately signed out. +App will be closed. +This action cannot be undone!` + ).then((confirmed) => confirmed ? sendToMain('delete-data', action(ActionTypes.deleteAllAccountsData)) : null); +} diff --git a/src/ui/components/root/RootComponent.tsx b/src/ui/components/root/RootComponent.tsx index 5ebee25..cfe519c 100644 --- a/src/ui/components/root/RootComponent.tsx +++ b/src/ui/components/root/RootComponent.tsx @@ -19,7 +19,7 @@ interface RootComponentState { export class RootComponent extends React.Component { private tabs = [ {id: 'accounts', label: 'Accounts', isDisabled: () => this.props.store.outdatedVersion}, - {id: 'updates', label: 'Updates', isDisabled: () => false}, + {id: 'updates', label: 'Settings', isDisabled: () => false}, {id: 'development', label: 'Development', isDisabled: () => false} ]; diff --git a/src/ui/components/updates-settings/UpdatesSettings.scss b/src/ui/components/updates-settings/UpdatesSettings.scss index 6aeba33..9f18ade 100644 --- a/src/ui/components/updates-settings/UpdatesSettings.scss +++ b/src/ui/components/updates-settings/UpdatesSettings.scss @@ -1,9 +1,11 @@ .settingsForm { align-self: flex-start; width: 100%; + flex-direction: column; .inlineActions { margin-inline-start: 20px; + button + button { margin-inline-start: 10px; } diff --git a/src/ui/components/updates-settings/UpdatesSettingsComponent.tsx b/src/ui/components/updates-settings/UpdatesSettingsComponent.tsx index 76a6e8f..c8ccd0c 100644 --- a/src/ui/components/updates-settings/UpdatesSettingsComponent.tsx +++ b/src/ui/components/updates-settings/UpdatesSettingsComponent.tsx @@ -25,8 +25,8 @@ export function UpdatesSettings ({currentVersion, availableVersion, lastCheck, c interval: customOptions.interval } }; - return (<> -
e.preventDefault()} className={classNames(style.settingsForm)}> + return (
+ e.preventDefault()}> {currentVersion} @@ -76,8 +76,17 @@ export function UpdatesSettings ({currentVersion, availableVersion, lastCheck, c
} +
+ + + +
- ); + ); +} + +function openClearDataDialog () { + return sendToMain('delete-data', action(ActionTypes.showDeleteAllAccountsDataDialog)); } function preventNonDigitKeys (event: React.KeyboardEvent) { diff --git a/webpack/default.ts b/webpack/default.ts index 91d72a1..944e58a 100644 --- a/webpack/default.ts +++ b/webpack/default.ts @@ -8,12 +8,13 @@ import settings from './entries/settings'; import signIn from './entries/sign-in'; import accounts from './entries/accounts'; import about from './entries/about'; +import clearData from './entries/clear-data'; export const SRC_PATH = path.resolve(__dirname, '../src'); export const BUILD_PATH = path.resolve(__dirname, '../build'); export const PACKAGE = require(path.join(__dirname, '../package.json')); -export const entries = [main, settings, signIn, accounts, about].map(entry => (env: webpack.Configuration): webpack.Configuration => { +export const entries = [main, settings, signIn, accounts, about, clearData].map(entry => (env: webpack.Configuration): webpack.Configuration => { return merge(entry(env), { output: { path: BUILD_PATH, diff --git a/webpack/entries/clear-data.ts b/webpack/entries/clear-data.ts new file mode 100644 index 0000000..8780baa --- /dev/null +++ b/webpack/entries/clear-data.ts @@ -0,0 +1,32 @@ +import HtmlWebpackPlugin from 'html-webpack-plugin'; +import CSSExtractPlugin from 'mini-css-extract-plugin'; +import * as path from 'path'; +import ScriptExtHtmlWebpackPlugin from 'script-ext-html-webpack-plugin'; +import webpack from 'webpack'; +import {SRC_PATH} from '../default'; + + +export default (env: webpack.Configuration): webpack.Configuration => { + return { + context: SRC_PATH, + entry: { + 'clear-data': path.join(SRC_PATH, './ui/clear-data/clear-data.tsx') + }, + target: 'electron-renderer', + plugins: [ + new HtmlWebpackPlugin({ + hash: true, + template: path.join(SRC_PATH, './ui/clear-data/clear-data.ejs'), + chunks: ['clear-data'], + inject: 'head', + filename: 'clear-data.html' + }), + new ScriptExtHtmlWebpackPlugin({ + defaultAttribute: 'defer' + }), + new CSSExtractPlugin({ + filename: 'assets/[name].css' + }) + ] + }; +} From 2702b4d467e71037533ba36334a114356d653314 Mon Sep 17 00:00:00 2001 From: Alexey Nalivaiko Date: Thu, 2 May 2019 15:05:43 +0300 Subject: [PATCH 02/32] [AMSA-45] add version at download page & file name --- Dockerfile_mac | 6 +- Makefile | 2 +- download-page/.gitignore | 10 + .../nginx/nginx.conf.ejs | 12 +- download-page/{index.html => src/index.ejs} | 46 +++- download-page/src/index.js | 2 + download-page/{ => src}/logo.png | Bin download-page/tsconfig.json | 9 + download-page/webpack.config.ts | 61 +++++ package-lock.json | 225 +++++++++++++++++- package.json | 8 +- 11 files changed, 358 insertions(+), 23 deletions(-) create mode 100644 download-page/.gitignore rename nginx.conf => download-page/nginx/nginx.conf.ejs (70%) rename download-page/{index.html => src/index.ejs} (86%) create mode 100644 download-page/src/index.js rename download-page/{ => src}/logo.png (100%) create mode 100644 download-page/tsconfig.json create mode 100644 download-page/webpack.config.ts diff --git a/Dockerfile_mac b/Dockerfile_mac index 67a62d5..5528a82 100644 --- a/Dockerfile_mac +++ b/Dockerfile_mac @@ -1,5 +1,5 @@ # -- Release --- FROM nginx:1.15.9 -COPY dist/*.* /usr/share/nginx/html/ -COPY download-page/*.* /usr/share/nginx/html/ -COPY nginx.conf /etc/nginx/conf.d/default.conf +COPY app/*.* /usr/share/nginx/html/ +COPY html/* /usr/share/nginx/html/ +COPY nginx/nginx.conf /etc/nginx/conf.d/default.conf diff --git a/Makefile b/Makefile index 83c5002..fc5ee44 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,6 @@ APP_NAME ?= admob-sync-app docker-build: docker build -t $(REGISTRY_BASE_URL)/$(COMPANY_NAME)/$(APP_NAME):$(TAG) . docker-build-mac: - docker build -f Dockerfile_mac -t $(REGISTRY_BASE_URL)/$(COMPANY_NAME)/$(APP_NAME):$(TAG) . + docker build -f Dockerfile_mac -t $(REGISTRY_BASE_URL)/$(COMPANY_NAME)/$(APP_NAME):$(TAG) ./dist docker-push: docker push $(REGISTRY_BASE_URL)/$(COMPANY_NAME)/$(APP_NAME):$(TAG) diff --git a/download-page/.gitignore b/download-page/.gitignore new file mode 100644 index 0000000..3a83bbe --- /dev/null +++ b/download-page/.gitignore @@ -0,0 +1,10 @@ +node_modules +build +/.idea +**/.DS_Store +*.iml +config/*.json +/release +/dist +tmp +userData diff --git a/nginx.conf b/download-page/nginx/nginx.conf.ejs similarity index 70% rename from nginx.conf rename to download-page/nginx/nginx.conf.ejs index d525f5e..57150af 100644 --- a/nginx.conf +++ b/download-page/nginx/nginx.conf.ejs @@ -16,16 +16,16 @@ server { } if ($http_user_agent ~ Windows ) { - add_header Content-Disposition 'attachment; filename="admob-sync-app-setup-latest.exe"'; - rewrite ^(.*) /admob-sync-app-setup-setup-latest.exe break; + add_header Content-Disposition 'attachment; filename="<%= dist.win.fileName %>"'; + rewrite ^(.*) /<%= dist.win.fileName %> break; } if ($http_user_agent ~ "Mac OS" ) { - add_header Content-Disposition 'attachment; filename="admob-sync-app-latest.dmg"'; - rewrite ^(.*) /admob-sync-app-latest.dmg break; + add_header Content-Disposition 'attachment; filename="<%= dist.mac.fileName %>"'; + rewrite ^(.*) /<%= dist.mac.fileName %> break; } if ($http_user_agent ~ Linux ) { - add_header Content-Disposition 'attachment; filename="admob-sync-app-setup-latest.deb"'; - rewrite ^(.*) /admob-sync-app-setup-latest.deb break; + add_header Content-Disposition 'attachment; filename="<%= dist.linux.fileName %>"'; + rewrite ^(.*) /<%= dist.linux.fileName %> break; } rewrite ^(.*) /index.html last; diff --git a/download-page/index.html b/download-page/src/index.ejs similarity index 86% rename from download-page/index.html rename to download-page/src/index.ejs index 7913d77..a4be061 100644 --- a/download-page/index.html +++ b/download-page/src/index.ejs @@ -36,6 +36,7 @@ align-self: center; } + .platforms a { display: flex; background: #e01a17; @@ -46,12 +47,26 @@ margin: 20px; border-radius: 8px; padding: 10px; + height: 60px; + } + + .platforms a .label { + text-align: left; + padding: 10px; } + .platforms a small { + font-size: small; + } + + .platforms svg { height: 60px; margin: 0 10px; } + .platforms svg.mac { + height: 55px; + } @media all and (min-width: 767px) { .platforms { @@ -62,11 +77,11 @@
- +

Choose your platform to download app

- + - Windows +
+ Windows +
+ <%= dist.win.version %> +
+
- + - Linux +
+ Linux +
+ <%= dist.linux.version %> +
+
diff --git a/download-page/src/index.js b/download-page/src/index.js new file mode 100644 index 0000000..f1806c7 --- /dev/null +++ b/download-page/src/index.js @@ -0,0 +1,2 @@ +// just empty js +// to be able use webpack with ejs for index.html diff --git a/download-page/logo.png b/download-page/src/logo.png similarity index 100% rename from download-page/logo.png rename to download-page/src/logo.png diff --git a/download-page/tsconfig.json b/download-page/tsconfig.json new file mode 100644 index 0000000..4fdcb57 --- /dev/null +++ b/download-page/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "esModuleInterop": false + }, + "include": [ + "./**/*" + ] +} diff --git a/download-page/webpack.config.ts b/download-page/webpack.config.ts new file mode 100644 index 0000000..164d297 --- /dev/null +++ b/download-page/webpack.config.ts @@ -0,0 +1,61 @@ +import CopyPlugin from 'copy-webpack-plugin'; +import HtmlWebpackPlugin from 'html-webpack-plugin'; +import * as path from 'path'; +import webpack from 'webpack'; +import * as dist from '../dist/app/dist-info.json'; + + +export const SRC_PATH = path.resolve(__dirname, './src'); +export const NGINX_PATH = path.resolve(__dirname, './nginx'); + +export const BUILD_PATH = path.resolve(__dirname, '..', 'dist'); + +export default (env: webpack.Configuration): webpack.Configuration => { + return { + context: __dirname, + target: 'web', + entry: path.resolve(SRC_PATH, 'index.js'), + output: { + path: BUILD_PATH, + filename: 'html/main.js' + }, + module: { + rules: [ + { + test: /\.(ejs)$/, + use: [ + { + loader: 'ejs-webpack-loader', + options: { + data: {dist}, + htmlmin: false + } + } + ] + + } + ] + }, + plugins: [ + new HtmlWebpackPlugin({ + template: path.join(SRC_PATH, 'index.ejs'), + filename: 'html/index.html', + htmlmin: true, + inject: false + }), + new HtmlWebpackPlugin({ + hash: false, + inject: false, + template: path.join(NGINX_PATH, 'nginx.conf.ejs'), + filename: 'nginx/nginx.conf' + + }), + new CopyPlugin([ + { + from: path.join(SRC_PATH, 'logo.png'), + to: 'html/logo.png' + } + ]) + ] + }; +} diff --git a/package-lock.json b/package-lock.json index 3f19890..f907987 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "admob-sync-app", - "version": "0.1.8", + "version": "0.1.12", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1103,6 +1103,28 @@ "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", "dev": true }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", @@ -2768,6 +2790,16 @@ "url-to-options": "^1.0.1" } }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -4265,6 +4297,134 @@ "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", "dev": true }, + "ejs-loader": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/ejs-loader/-/ejs-loader-0.3.3.tgz", + "integrity": "sha512-1pQNFYu+4VIeLLNrSZ8QaiyFk9oXv8koUyQ2Pz5k0dw89HHjeiliTPQ46GfqAzCqJ8cEq8QFNj/HsVjyIuzKEA==", + "dev": true, + "requires": { + "loader-utils": "^0.2.7", + "lodash": "^4.17.11" + }, + "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + } + } + }, + "ejs-webpack-loader": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ejs-webpack-loader/-/ejs-webpack-loader-2.2.2.tgz", + "integrity": "sha512-fuZ5djtVnvoMv4xlyQs3sh9JfIh167iPg7Q1ABFdQIbPHqRgeRWQCvodGybQhiRRCUIeqH9HPtfB8hJimPSPbA==", + "dev": true, + "requires": { + "ejs": "^2.0.0", + "html-minifier": "^3", + "loader-utils": "^0.2.7", + "merge": "^1.2.0", + "uglify-js": "~2.6.1" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "uglify-js": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz", + "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=", + "dev": true, + "requires": { + "async": "~0.2.6", + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + } + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } + } + }, "electron": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/electron/-/electron-4.0.6.tgz", @@ -8848,6 +9008,12 @@ "package-json": "^4.0.0" } }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, "lazy-val": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.3.tgz", @@ -11607,6 +11773,15 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "^0.1.1" + } + }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -13682,6 +13857,12 @@ } } }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true + }, "unbzip2-stream": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", @@ -13704,6 +13885,42 @@ } } }, + "underscore-template-loader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/underscore-template-loader/-/underscore-template-loader-1.0.0.tgz", + "integrity": "sha512-4tzm3DY8nLD6mKCQmPk51vu5HW8T61fSGpfkUrlrwF0oOPTinL8Zk7W08xHOmCZ2Sh9bZHVMzVgr/DUM+10iUA==", + "dev": true, + "requires": { + "fastparse": "^1.1.1", + "loader-utils": "^0.2.11" + }, + "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + } + } + }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", @@ -14491,6 +14708,12 @@ } } }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, "winston": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", diff --git a/package.json b/package.json index 4d47ae2..995e74d 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "build": "webpack --progress --config=webpack/production.ts", "dist": "electron-builder", "dist:all": "node tools/dist.js", + "postdist:all": "webpack -p --config=download-page/webpack.config.ts", "release:github": "node tools/release.js", "release:sentry": "sentry-cli releases new $(npm run -s package:version) && sentry-cli releases files $(npm run -s package:version) upload-sourcemaps build/*.{map,js} && sentry-cli releases finalize $(npm run -s package:version)", "release:deploy": "sentry-cli releases deploys $(npm run -s package:version) new", @@ -28,7 +29,7 @@ "directories": { "buildResources": "./resources", "app": "./build", - "output": "./dist" + "output": "./dist/app" }, "extraResources": [ { @@ -115,6 +116,7 @@ }, "devDependencies": { "@brigad/ideal-image-loader": "^1.1.0", + "@sentry/cli": "^1.41.1", "@types/fs-extra": "^5.0.5", "@types/graphql": "^14.0.7", "@types/jest": "^24.0.9", @@ -130,6 +132,7 @@ "clean-webpack-plugin": "^1.0.1", "copy-webpack-plugin": "^5.0.0", "css-loader": "^2.1.0", + "ejs-webpack-loader": "^2.2.2", "electron": "^4.0.6", "electron-builder": "^20.38.5", "file-loader": "^3.0.1", @@ -149,8 +152,7 @@ "webpack": "^4.29.5", "webpack-cli": "^3.2.3", "webpack-dev-server": "^3.2.0", - "webpack-merge": "^4.2.1", - "@sentry/cli": "^1.41.1" + "webpack-merge": "^4.2.1" }, "dependencies": { "@sentry/electron": "^0.16.0", From e067ca1b4048f2c2590bb9f3c831dfb94a7edc07 Mon Sep 17 00:00:00 2001 From: Alexey Nalivaiko Date: Thu, 2 May 2019 15:27:00 +0300 Subject: [PATCH 03/32] [AMSA-46] update tray icon on appodeal user updating --- src/lib/tray-icon.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/tray-icon.ts b/src/lib/tray-icon.ts index 019c587..193a454 100644 --- a/src/lib/tray-icon.ts +++ b/src/lib/tray-icon.ts @@ -23,7 +23,7 @@ export class TrayIcon { listenStatusChanges () { this.sub = observe(this.store.state, (change) => { - if (['account', 'history', 'syncProgress'].includes(change.name)) { + if (['account', 'history', 'syncProgress', 'selectedAppodealAccount'].includes(change.name)) { this.checkIcon(); } }); From 3e08f2430777e5a739ed32e593042107d377ba42 Mon Sep 17 00:00:00 2001 From: Alexey Nalivaiko Date: Thu, 2 May 2019 15:41:20 +0300 Subject: [PATCH 04/32] [AMSA-46] do not run sync while user explicitly sign in into admob account --- src/core/sync-apps/sync.service.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/core/sync-apps/sync.service.ts b/src/core/sync-apps/sync.service.ts index 5c6f6a9..180fc53 100644 --- a/src/core/sync-apps/sync.service.ts +++ b/src/core/sync-apps/sync.service.ts @@ -58,8 +58,7 @@ export class SyncService { const admobSession = await AdMobSessions.getSession(admobAccount); - if (!admobSession) { - await SyncHistory.setAuthorizationRequired(admobAccount); + if (!admobSession || (await SyncHistory.getHistory(admobAccount)).admobAuthorizationRequired) { console.warn(`[Sync Service] [${admobAccount.id} ${admobAccount.email}] can not run sync. User has to Sign In in account first.`); return reject(new Error(`Can not run sync for ${admobAccount.email}. User has to Sign In in account first.`)); } From 0d0e3ffc9090b3e03a5d62d2dbac302a1008ca50 Mon Sep 17 00:00:00 2001 From: Alexey Nalivaiko Date: Thu, 2 May 2019 16:17:42 +0300 Subject: [PATCH 05/32] [AMSA-46] Make AdSense oAuth window more user friendly --- src/core/store.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/core/store.ts b/src/core/store.ts index d92a40f..b2c70a1 100644 --- a/src/core/store.ts +++ b/src/core/store.ts @@ -7,7 +7,7 @@ import {AppodealAccount} from 'core/appdeal-api/interfaces/appodeal.account.inte import {OnlineService} from 'core/appdeal-api/online.service'; import {SyncHistory, SyncHistoryInfo} from 'core/sync-apps/sync-history'; import {SyncEvent, SyncEventsTypes, SyncReportProgressEvent} from 'core/sync-apps/sync.events'; -import {BrowserWindow, Notification} from 'electron'; +import {BrowserWindow, Notification, screen} from 'electron'; import {AppodealAccountState, UserAccount} from 'interfaces/common.interfaces'; import {getAppVersion} from 'lib/about'; import {ActionTypes} from 'lib/actions'; @@ -366,11 +366,14 @@ export class Store { ) { return this.appodealApi.getFor(appodealAccountId).setAdMobAccountCredentials(accountId, clientId, clientSecret) .then(async oAuthUrl => { + const {height} = screen.getPrimaryDisplay().workAreaSize; let window = await openWindow(oAuthUrl, { frame: true, titleBarStyle: 'default', - width: 400, - minWidth: 400, + width: 500, + minHeight: Math.min(600, height), + height: Math.min(700, height), + minWidth: 500, webPreferences: { session: AdMobSessions.getSession(accountId) } From 81a0ec771546ef59ff16cc538c73e42e4a1fd957 Mon Sep 17 00:00:00 2001 From: Alexey Nalivaiko Date: Fri, 3 May 2019 13:59:14 +0300 Subject: [PATCH 06/32] [AMSA-48] add electron license link --- src/core/about-connector.ts | 21 +++++++++++++-------- src/lib/actions.ts | 1 + src/lib/ui-windows.ts | 2 +- src/ui/components/about/About.tsx | 27 ++++++++++++++++++--------- 4 files changed, 33 insertions(+), 18 deletions(-) diff --git a/src/core/about-connector.ts b/src/core/about-connector.ts index 57d3592..fc2cbcc 100644 --- a/src/core/about-connector.ts +++ b/src/core/about-connector.ts @@ -1,20 +1,25 @@ import {Connector} from 'core/connector'; +import {shell} from 'electron'; import {Action, ActionTypes} from 'lib/actions'; import packageInfo from './../../package.json'; -import {shell} from 'electron'; + export class AboutConnector extends Connector { - constructor() { + constructor () { super('about'); } - async onAction({type, payload}: Action) { - switch(type) { - case ActionTypes.packageInfo: - return packageInfo; - case ActionTypes.openPrivacyPolicy: - shell.openExternal('https://www.appodeal.com/home/privacy-policy') + async onAction ({type, payload}: Action) { + switch (type) { + case ActionTypes.packageInfo: + return packageInfo; + case ActionTypes.openElectronLicence: + shell.openExternal('https://github.com/electron/electron/blob/master/LICENSE'); + return; + case ActionTypes.openPrivacyPolicy: + shell.openExternal('https://www.appodeal.com/home/privacy-policy'); + return; } return; } diff --git a/src/lib/actions.ts b/src/lib/actions.ts index 6088119..7c35dc7 100644 --- a/src/lib/actions.ts +++ b/src/lib/actions.ts @@ -24,6 +24,7 @@ export enum ActionTypes { addAppodealAccount = 'addAppodealAccount', manageAppodealAccounts = 'manageAppodealAccounts', packageInfo = 'packageInfo', + openElectronLicence = 'openElectronLicence', openPrivacyPolicy = 'openPrivacyPolicy' } diff --git a/src/lib/ui-windows.ts b/src/lib/ui-windows.ts index 5cd5b30..bc3b563 100644 --- a/src/lib/ui-windows.ts +++ b/src/lib/ui-windows.ts @@ -39,7 +39,7 @@ export function openAboutWindow () { frame: true, width: 450, titleBarStyle: 'default', - height: 270, + height: 300, parent: null })); } diff --git a/src/ui/components/about/About.tsx b/src/ui/components/about/About.tsx index 9cb6abe..d652f4e 100644 --- a/src/ui/components/about/About.tsx +++ b/src/ui/components/about/About.tsx @@ -1,13 +1,14 @@ -import React from "react"; -import style from "./About.scss"; -import {sendToMain} from "lib/messages"; -import {action, ActionTypes} from "lib/actions"; +import {action, ActionTypes} from 'lib/actions'; +import {sendToMain} from 'lib/messages'; +import React from 'react'; +import style from './About.scss'; + interface AboutProps { packageInfo: any } -export function About({packageInfo}: AboutProps) { +export function About ({packageInfo}: AboutProps) { let yearStart = 2019, yearEnd = new Date().getFullYear(); return (
@@ -20,10 +21,18 @@ export function About({packageInfo}: AboutProps) { packageInfo.author}

- { + { event.preventDefault(); - sendToMain('about', action(ActionTypes.openPrivacyPolicy)).then(() => window.close()) - }}>Privacy Policy + sendToMain('about', action(ActionTypes.openPrivacyPolicy)).then(() => window.close()); + }} + >Privacy Policy +

+

+ Powered by Electron. { + event.preventDefault(); + sendToMain('about', action(ActionTypes.openElectronLicence)).then(() => window.close()); + }} + >Electron License

-
) +
); } From c580bb63c45ef0f705c6da73fc236fd009ffd609 Mon Sep 17 00:00:00 2001 From: alex-skakun Date: Fri, 3 May 2019 16:07:37 +0300 Subject: [PATCH 07/32] [AMSA-43] Developer Google Console UI --- package-lock.json | 2 +- src/core/accounts-connector.ts | 41 ++++- src/core/store.ts | 70 +++++++++ src/lib/task-runner.ts | 141 ++++++++++++++++++ .../components/accounts/AccountsComponent.tsx | 9 +- .../AdMobAccountSetup.scss | 66 ++++++++ .../AdMobAccountSetupComponent.tsx | 133 +++++++++++++++++ .../admob-account/AdmobAccount.scss | 27 ---- .../admob-account/AdmobAccountComponent.tsx | 104 ++++--------- 9 files changed, 484 insertions(+), 109 deletions(-) create mode 100644 src/lib/task-runner.ts create mode 100644 src/ui/components/admob-account-setup/AdMobAccountSetup.scss create mode 100644 src/ui/components/admob-account-setup/AdMobAccountSetupComponent.tsx diff --git a/package-lock.json b/package-lock.json index 3f19890..c3907c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "admob-sync-app", - "version": "0.1.8", + "version": "0.1.12", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/src/core/accounts-connector.ts b/src/core/accounts-connector.ts index ba88f0f..3d06095 100644 --- a/src/core/accounts-connector.ts +++ b/src/core/accounts-connector.ts @@ -6,6 +6,8 @@ import {openAppodealAccountsWindow, openAppodealSignInWindow} from 'lib/ui-windo export class AccountsConnector extends Connector { + private setups = new Map(); + constructor (private store: Store) { super('accounts'); @@ -24,7 +26,10 @@ export class AccountsConnector extends Connector { case ActionTypes.selectAccount: return this.store.selectAdMobAccount(payload.adMobAccount); case ActionTypes.adMobSetCredentials: - return this.store.setAdMobCredentials(payload.appodealAccountId, payload.credentialsInfo); + return this.store.setAdMobCredentials(payload.appodealAccountId, payload.credentialsInfo) + .then(() => { + this.store.setupState(payload.credentialsInfo.accountId, {visible: false, mode: null}); + }); case ActionTypes.adMobSetupTutorial: return AdMobSessions.openSetupTutorial(); case ActionTypes.openAdmobPage: @@ -39,4 +44,38 @@ export class AccountsConnector extends Connector { return; } } + + private setupAccount (appodealAccountId: string, adMobAccount: AdMobAccount) { + let setup = new AccountSetup(adMobAccount); + this.setups.set(adMobAccount.id, setup); + setup + .on('progress', progress => this.store.setAccountSetupProgress(adMobAccount.id, progress.percent)) + .once('start', () => this.store.startAccountSetup(adMobAccount.id)) + .once('finish', ({clientId, clientSecret}) => { + this.setups.delete(adMobAccount.id); + this.store.setAdMobCredentials(appodealAccountId, { + clientId, + clientSecret, + accountId: adMobAccount.id + }).finally(() => { + this.store.removeAccountSetup(adMobAccount.id); + this.store.setupState(adMobAccount.id, {visible: false, mode: null}); + }); + }) + .once('cancel', () => { + this.setups.delete(adMobAccount.id); + this.store.removeAccountSetup(adMobAccount.id); + }) + .once('error', () => { + this.store.errorAccountSetup(adMobAccount.id); + }) + .start(); + } + + async destroy (): Promise { + await super.destroy(); + for (let setup of this.setups.values()) { + await setup.stop(); + } + } } diff --git a/src/core/store.ts b/src/core/store.ts index d92a40f..4699c27 100644 --- a/src/core/store.ts +++ b/src/core/store.ts @@ -29,6 +29,17 @@ export interface SyncProgress { lastEvent: SyncEventsTypes.ReportProgress | SyncEventsTypes.CalculatingProgress | SyncEventsTypes.Started | SyncEventsTypes.Stopped; } + +export interface SetupProgress { + percent: number; + state: 'idle' | 'progress' | 'error' +} + +export interface AccountSetupState { + mode: 'auto' | 'manual'; + visible: boolean; +} + export interface AppState { selectedAccount: { account: AdMobAccount; @@ -36,6 +47,8 @@ export interface AppState { selectedAppodealAccount: AppodealAccount; syncHistory: Record; syncProgress: Record; + setupProgress: Record; + accountSetup: Record; preferences: AppPreferences; online: boolean; outdatedVersion: boolean; @@ -53,6 +66,8 @@ export class Store { selectedAppodealAccount: null, syncHistory: {}, syncProgress: {}, + setupProgress: {}, + accountSetup: {}, preferences: null, online: false, outdatedVersion: false, @@ -465,4 +480,59 @@ Do you what to add new Account (${resultAccount.email})?` await Preferences.save(this.state.preferences); } + + @action + startAccountSetup (accountId: string) { + set(this.state, 'setupProgress', { + ...this.state.setupProgress, + [accountId]: { + state: 'idle', + percent: 0 + } + }); + } + + @action + setAccountSetupProgress (accountId: string, percent: number) { + set(this.state, 'setupProgress', { + ...this.state.setupProgress, + [accountId]: { + state: 'progress', + percent + } + }); + } + + @action + errorAccountSetup (accountId: string) { + set(this.state, 'setupProgress', { + ...this.state.setupProgress, + [accountId]: { + state: 'error', + percent: 0 + } + }); + } + + @action + removeAccountSetup (accountId: string) { + let newProgress = { + ...this.state.setupProgress + }; + delete newProgress[accountId]; + set(this.state, 'setupProgress', newProgress); + } + + + @action + setupState (accountId: string, {visible, mode}: AccountSetupState) { + set(this.state, 'accountSetup', { + ...this.state.accountSetup, + [accountId]: { + visible, + mode + } + }); + } + } diff --git a/src/lib/task-runner.ts b/src/lib/task-runner.ts new file mode 100644 index 0000000..e843037 --- /dev/null +++ b/src/lib/task-runner.ts @@ -0,0 +1,141 @@ +import {EventEmitter} from 'events'; + + +class Task { + + constructor ( + private func: (...args: Array) => Promise, + public name?: string + ) {} + + async execute (...args: Array) { + return this.func(...args); + } +} + +export enum TaskRunnerState { + idle, + running, + cancelled, + finished +} + +export class TaskRunner extends EventEmitter { + private tasks: Array = []; + private currentSkip: string = null; + private currentReturn: string = null; + private taskArgs: Array = null; + state = TaskRunnerState.idle; + + get total () { + return this.tasks.length; + } + + completed = 0; + + createTask (func: (...args: Array) => Promise | any, taskName?: string) { + let task = new Task(func, taskName); + this.tasks.push(task); + } + + runTasks () { + this.state = TaskRunnerState.running; + return this.exec(this.tasks) + .then(() => { + this.state = TaskRunnerState.finished; + }) + .catch(err => { + if (err.message === 'Canceled') { + this.emit('cancel'); + } else { + throw err; + } + }); + } + + break () { + return new Promise(resolve => { + if (this.state === TaskRunnerState.running) { + this.once('cancel', () => resolve()); + } else { + resolve(); + } + this.state = TaskRunnerState.cancelled; + }); + } + + private exec (tasks: Array, noProgress = false) { + return tasks.reduce((promise, task, index) => { + return promise.then(() => { + if (this.state === TaskRunnerState.cancelled) { + throw new Error('Canceled'); + } + let currentStep = Promise.resolve(); + if (this.hasSkip()) { + if (this.currentSkip === task.name) { + this.currentSkip = null; + } else { + if (!noProgress) { + this.increaseCompleted(); + } + return currentStep; + } + } + if (this.hasReturn()) { + let returnIndex = this.tasks.findIndex(task => task.name === this.currentReturn); + this.currentReturn = null; + if (returnIndex !== -1) { + let tasksToRepeat = this.tasks.slice(returnIndex, index); + currentStep = currentStep.then(() => this.exec(tasksToRepeat, true)); + } + } + return currentStep + .then(() => { + let taskArgs = this.taskArgs || []; + this.taskArgs = null; + console.log(`Execute task: ${task['func'].toString()}`); + return task.execute(...taskArgs) + .catch(err => { + console.error(err); + console.error(task['func'].toString()); + throw err; + }); + }) + .then(() => { + if (!noProgress) { + this.increaseCompleted(); + } + }); + }); + }, Promise.resolve()); + } + + private hasSkip () { + return !!this.currentSkip; + } + + private hasReturn () { + return !!this.currentReturn; + } + + private increaseCompleted () { + this.completed++; + this.emit('progress', { + total: this.total, + completed: this.completed, + percent: (this.completed / this.total) * 100 + }); + } + + skipTo (name: string, ...args: Array) { + this.currentSkip = name; + this.currentReturn = null; + this.taskArgs = args; + } + + returnTo (name: string, ...args: Array) { + this.currentReturn = name; + this.currentSkip = null; + this.taskArgs = args; + } +} diff --git a/src/ui/components/accounts/AccountsComponent.tsx b/src/ui/components/accounts/AccountsComponent.tsx index 99a49e2..07296e3 100644 --- a/src/ui/components/accounts/AccountsComponent.tsx +++ b/src/ui/components/accounts/AccountsComponent.tsx @@ -20,7 +20,9 @@ export function AccountsComponent ( selectedAccount: {account: selectedAccount}, preferences: {accounts: {appodealAccounts}, multipleAccountsSupport}, syncHistory, - syncProgress + syncProgress, + setupProgress, + accountSetup }: AccountsComponentProps ) { let adMobAccounts = selectedAppodealAccount ? selectedAppodealAccount.accounts : []; @@ -77,6 +79,11 @@ export function AccountsComponent ( appodealAccountId={appodealAccount.id} historyInfo={syncHistory[selectedAccount.id]} syncProgress={syncProgress[selectedAccount.id]} + setupProgress={setupProgress[selectedAccount.id]} + setupState={accountSetup[selectedAccount.id] || { + mode: null, + visible: !selectedAccount.isReadyForReports + }} /> :
Choose account
) diff --git a/src/ui/components/admob-account-setup/AdMobAccountSetup.scss b/src/ui/components/admob-account-setup/AdMobAccountSetup.scss new file mode 100644 index 0000000..678653d --- /dev/null +++ b/src/ui/components/admob-account-setup/AdMobAccountSetup.scss @@ -0,0 +1,66 @@ +.setupRequired { + --warn-color: #e4a228; + + color: #fff; + border: 1px solid var(--warn-color); + border-radius: 5px; + overflow: hidden; + margin-block-end: 10px; + flex: 0 0 auto; + + h1 { + margin: 0; + font-size: 1.1em; + font-weight: 500; + line-height: 1; + padding: 0 14px; + height: 30px; + display: flex; + align-items: center; + background: url('data:image/svg+xml;utf-8,') top center repeat-x, var(--warn-color); + background-size: 43px 43px; + position: relative; + -webkit-text-stroke: 1.5px #000; + + &::after { + content: 'Setup required'; + position: absolute; + height: 100%; + top: 0; + left: 14px; + display: flex; + align-items: center; + -webkit-text-stroke: 0 transparent; + } + + button { + margin-left: auto; + -webkit-text-stroke: 0 transparent; + } + } + + section { + padding: 14px; + } + + p { + margin: 0 0 14px; + } + + form { + margin-block-start: 14px; + grid-gap: 14px 10px; + } + + a { + color: #009dff; + } + + .errorMessage { + color: var(--warn-color); + } + + .setupOptions + * { + margin-top: 14px; + } +} diff --git a/src/ui/components/admob-account-setup/AdMobAccountSetupComponent.tsx b/src/ui/components/admob-account-setup/AdMobAccountSetupComponent.tsx new file mode 100644 index 0000000..c113836 --- /dev/null +++ b/src/ui/components/admob-account-setup/AdMobAccountSetupComponent.tsx @@ -0,0 +1,133 @@ +import {AdMobAccount} from 'core/appdeal-api/interfaces/admob-account.interface'; +import {AccountSetupState, SetupProgress} from 'core/store'; +import {action, ActionTypes} from 'lib/actions'; +import {sendToMain} from 'lib/messages'; +import {messageDialog} from 'lib/window'; +import React from 'react'; +import {ProgressBar} from 'ui/components/progress-bar/ProgressBarComponent'; +import style from './AdMobAccountSetup.scss'; + + +interface AdMobAccountSetupProps { + setupProgress: SetupProgress; + setupState: AccountSetupState; + account: AdMobAccount; + appodealAccountId: string +} + +export function AdMobAccountSetup ({setupProgress, setupState, account, appodealAccountId}: AdMobAccountSetupProps) { + let {mode, visible} = setupState || { + mode: null, + visible: !account.isReadyForReports + }, + formRef = React.createRef(); + return <> + {(visible || !account.isReadyForReports) &&
+

Setup required {account.isReadyForReports && + }

+
+ { + (!!setupProgress && setupProgress.state !== 'error' || !setupProgress && mode === 'auto') && <> + Progress: {setupProgress ? `${Math.round(setupProgress.percent)}%` : 'Initializing…'} + + + } + { + !!setupProgress && setupProgress.state === 'error' &&

+ Auto setup was unsuccessful.  + +

+ } + { + mode === null && !setupProgress && <> +

Setup your project on Google developer console.

+
+ + +
+ + + } + {(mode === 'manual' || (setupProgress && setupProgress.state === 'error')) && <> +

Setup account manually according to this tutorial.

+
onFormSubmit(e, account, appodealAccountId)} onInput={() => onFormInput(formRef)} ref={formRef}> + + + + +
+ +
+
+ } +
+
} + ; +} + +function closeSetup (adMobAccount: AdMobAccount) { + sendToMain('accounts', action(ActionTypes.adMobSetupState, { + adMobAccount, + state: { + visible: false, + mode: null + } + })); + sendToMain('accounts', action(ActionTypes.adMobCancelSetup, { + adMobAccount + })); +} + +function autoSetup (adMobAccount: AdMobAccount, appodealAccountId: string) { + sendToMain('accounts', action(ActionTypes.adMobSetupState, { + adMobAccount, + state: { + visible: true, + mode: 'auto' + } + })); + sendToMain('accounts', action(ActionTypes.adMobSetupAccount, { + appodealAccountId, + adMobAccount + })); + +} + +function manualSetup (adMobAccount: AdMobAccount) { + sendToMain('accounts', action(ActionTypes.adMobSetupState, { + adMobAccount, + state: { + visible: true, + mode: 'manual' + } + })); +} + +function onFormInput (formRef: React.RefObject) { + if (formRef && formRef.current) { + let formData = new FormData(formRef.current); + (formRef.current.elements.namedItem('saveBtn') as HTMLButtonElement).disabled = !(formData.get('clientId') && + formData.get('clientSecret')); + } +} + +function onFormSubmit (event: React.SyntheticEvent, adMobAccount: AdMobAccount, appodealAccountId: string) { + event.preventDefault(); + let formData = new FormData(event.target as HTMLFormElement); + return sendToMain('accounts', action(ActionTypes.adMobSetCredentials, { + appodealAccountId, + credentialsInfo: { + clientId: formData.get('clientId'), + clientSecret: formData.get('clientSecret'), + accountId: adMobAccount.id + } + })).catch(error => messageDialog(error.message)) +} + +function viewTutorial (event: React.MouseEvent) { + event.preventDefault(); + sendToMain('accounts', action(ActionTypes.adMobSetupTutorial)); +} diff --git a/src/ui/components/admob-account/AdmobAccount.scss b/src/ui/components/admob-account/AdmobAccount.scss index 55f9968..ceb68b3 100644 --- a/src/ui/components/admob-account/AdmobAccount.scss +++ b/src/ui/components/admob-account/AdmobAccount.scss @@ -1,31 +1,4 @@ -.setupRequired { - background-color: rgba(255, 165, 0, 0.2); - padding: 14px; - color: #fff; - text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5); - border: 1px solid rgba(255, 165, 0, 0.4); - border-radius: 5px; - margin-block-end: 10px; - h1 { - margin-inline-start: 0; - margin-inline-end: 0; - margin-block-start: 0; - margin-block-end: 14px; - font-size: 1.1em; - font-weight: 500; - line-height: 1; - } - - p { - margin: 0; - } - - form { - margin-block-start: 14px; - grid-gap: 14px 10px; - } -} .syncProgress { margin: 10px 0; diff --git a/src/ui/components/admob-account/AdmobAccountComponent.tsx b/src/ui/components/admob-account/AdmobAccountComponent.tsx index 3ce591c..f3c4978 100644 --- a/src/ui/components/admob-account/AdmobAccountComponent.tsx +++ b/src/ui/components/admob-account/AdmobAccountComponent.tsx @@ -1,13 +1,14 @@ import {AdMobAccount} from 'core/appdeal-api/interfaces/admob-account.interface'; -import {SyncProgress} from 'core/store'; +import {AccountSetupState, SetupProgress, SyncProgress} from 'core/store'; import {SyncHistoryInfo} from 'core/sync-apps/sync-history'; import {SyncEventsTypes} from 'core/sync-apps/sync.events'; import {action, ActionTypes} from 'lib/actions'; -import {getFormElement, singleEvent} from 'lib/dom'; +import {singleEvent} from 'lib/dom'; import {sendToMain} from 'lib/messages'; import {messageDialog} from 'lib/window'; import React, {Component} from 'react'; import {AccountStatusComponent} from 'ui/components/account-status/AccountStatusComponent'; +import {AdMobAccountSetup} from 'ui/components/admob-account-setup/AdMobAccountSetupComponent'; import {LogListComponent} from 'ui/components/log-list/LogListComponent'; import {ProgressBar} from 'ui/components/progress-bar/ProgressBarComponent'; import style from './AdmobAccount.scss'; @@ -17,58 +18,26 @@ interface AdmobAccountComponentProps { appodealAccountId: string; account: AdMobAccount; syncProgress: SyncProgress; + setupProgress: SetupProgress; + setupState: AccountSetupState; historyInfo: SyncHistoryInfo; } interface AdmobAccountComponentState { - saveAllowed: boolean; - displaySetupForm: boolean; + } export class AdmobAccountComponent extends Component { - formRef: React.RefObject; constructor (props) { super(props); - this.state = { - saveAllowed: false, - displaySetupForm: false - }; - this.formRef = React.createRef(); + this.state = {}; } get signedIn () { return !!this.props.historyInfo && !this.props.historyInfo.admobAuthorizationRequired; } - componentWillReceiveProps (nextProps: Readonly) { - if (this.formRef.current) { - this.formRef.current.reset(); - } - this.setState({ - displaySetupForm: !nextProps.account.isReadyForReports - }); - } - - private onFormInput () { - this.setState({ - saveAllowed: this.isSaveAllowed(this.formRef.current) - }); - } - - private isSaveAllowed (form: HTMLFormElement): boolean { - if (!form) { - return false; - } - let clientId = getFormElement(form, 'clientId').value.trim(), - clientSecret = getFormElement(form, 'clientSecret').value.trim(); - return !!(clientId && clientSecret); - } - - private viewTutorial () { - return sendToMain('accounts', action(ActionTypes.adMobSetupTutorial)); - } - private runSync () { return sendToMain('sync', action(ActionTypes.runSync, { appodealAccountId: this.props.appodealAccountId, @@ -90,32 +59,18 @@ export class AdmobAccountComponent extends Component alert(e.message)); } - private setupDone (event: Event) { - event.preventDefault(); - let form = event.target as HTMLFormElement, - clientId = getFormElement(form, 'clientId').value.trim(), - clientSecret = getFormElement(form, 'clientSecret').value.trim(), - accountId = this.props.account.id; - return sendToMain('accounts', action(ActionTypes.adMobSetCredentials, { - appodealAccountId: this.props.appodealAccountId, - credentialsInfo: { - clientId, - clientSecret, - accountId - } - })) - .then(() => this.displaySetupForm(this.props.account.isReadyForReports)) - .catch(error => messageDialog(error.message)); + private isSetupFormVisible (): boolean { + return this.props.setupState.visible || !this.props.account.isReadyForReports; } - private isSetupFormVisible (account: AdMobAccount): boolean { - return this.state.displaySetupForm || !account.isReadyForReports; - } - - private displaySetupForm (value: boolean) { - this.setState({ - displaySetupForm: value - }); + private displaySetupForm () { + sendToMain('accounts', action(ActionTypes.adMobSetupState, { + adMobAccount: this.props.account, + state: { + visible: true, + mode: null + } + })); } private getProgressBarStatus ({lastEvent}: SyncProgress): 'progress' | 'pending' { @@ -126,22 +81,13 @@ export class AdmobAccountComponent extends Component - {this.isSetupFormVisible(account) &&
this.onFormInput()}> -

Setup required

-

Setup your project on Google developer console.

-
- - - - -
- - -
-
-
} +
{this.signedIn && <> { @@ -159,8 +105,8 @@ export class AdmobAccountComponent extends Component - {!this.isSetupFormVisible(account) && - } + {!this.isSetupFormVisible() && + } } {!this.signedIn && <> -
- } - - - {!this.isSetupFormVisible() && - } - } - {!this.signedIn && <> - - } - - - {!!this.props.syncProgress && -
- - -
- } - + {account.isReadyForReports && <> +
+ {this.signedIn && <> + { + // make public when open admob safe browsing admob is implemented + environment.development && +
+ +
+ } + + + {!this.isSetupFormVisible() && + } + } + {!this.signedIn && <> + + } +
+ + {!!this.props.syncProgress && +
+ + +
+ } + + } ; } } From 10a5998903daff3b218d2283b441737677659f67 Mon Sep 17 00:00:00 2001 From: Alexey Nalivaiko Date: Fri, 3 May 2019 18:09:49 +0300 Subject: [PATCH 10/32] [AMSA-46] Retry api requests on catching network error --- src/core/admob-api/admob.api.ts | 2 +- src/core/sync-apps/sync.ts | 23 ++++++++++-- src/lib/retry.ts | 62 +++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 3 deletions(-) diff --git a/src/core/admob-api/admob.api.ts b/src/core/admob-api/admob.api.ts index 8cc4369..1cbd782 100644 --- a/src/core/admob-api/admob.api.ts +++ b/src/core/admob-api/admob.api.ts @@ -31,7 +31,7 @@ export class AdmobApiService { } - setXrfToken (xsrfToken) { + private setXrfToken (xsrfToken) { this.xsrfToken = xsrfToken; } diff --git a/src/core/sync-apps/sync.ts b/src/core/sync-apps/sync.ts index a16e2ce..fe6d379 100644 --- a/src/core/sync-apps/sync.ts +++ b/src/core/sync-apps/sync.ts @@ -7,7 +7,7 @@ import {getAdUnitTemplate} from 'core/sync-apps/ad-unit-templates'; import {SyncStats} from 'core/sync-apps/sync-stats'; import {SyncRunner} from 'core/sync-apps/sync.service'; import stringify from 'json-stable-stringify'; -import {retry} from 'lib/retry'; +import {retryProxy} from 'lib/retry'; import {AppTranslator} from 'lib/translators/admob-app.translator'; import {AdMobPlatform} from 'lib/translators/admob.constants'; import {AdUnitTranslator} from 'lib/translators/admop-ad-unit.translator'; @@ -15,6 +15,7 @@ import {AdMobAdUnit, CpmFloorMode, CpmFloorSettings} from 'lib/translators/inter import {AdMobApp} from 'lib/translators/interfaces/admob-app.interface'; import {getTranslator} from 'lib/translators/translator.helpers'; import uuid from 'uuid'; +import {UnavailableEndpointError} from '../error-factory/errors/network/unavailable-endpoint-error'; import {SyncContext} from './sync-context'; import {SyncEventEmitter} from './sync-event.emitter'; import {SyncErrorEvent, SyncEvent, SyncEventsTypes, SyncReportProgressEvent} from './sync.events'; @@ -67,6 +68,7 @@ export class Sync { public readonly runner: SyncRunner ) { this.id = id || uuid.v4(); + this.beforeRun(); } async stop (reason: string) { @@ -79,6 +81,23 @@ export class Sync { this.logger.info(`Stopping Sync Reason: ${reason}`); } + beforeRun () { + + const retryCondition = e => + e.message.substring(0, 'net::ERR'.length) === 'net::ERR' + || e instanceof UnavailableEndpointError + || e.stats === 502; + + const terminateIfConnectionLost = e => { + if (retryCondition(e)) { + this.stop('Seems to be disconnected. ' + (e && e.message ? e.message : JSON.stringify(e))); + } + }; + + this.adMobApi = retryProxy(this.adMobApi, retryCondition, 3, 5000, terminateIfConnectionLost); + this.appodealApi = retryProxy(this.appodealApi, retryCondition, 3, 5000, terminateIfConnectionLost); + } + async run () { this.logger.info(`Sync started`); this.terminated = false; @@ -163,7 +182,7 @@ export class Sync { yield `refrech Admob xsrf Token`; try { - await retry(async () => this.adMobApi.refreshXsrfToken(), 3, 1000); + await this.adMobApi.refreshXsrfToken(); } catch (e) { if (e instanceof RefreshXsrfTokenError) { // this error is not supposed to be emitted and handler further diff --git a/src/lib/retry.ts b/src/lib/retry.ts index 09e9e85..b96872c 100644 --- a/src/lib/retry.ts +++ b/src/lib/retry.ts @@ -2,6 +2,10 @@ import {sleep} from 'lib/time'; export async function retry (cb: CallableFunction, maxAttempts = 3, sleepBetweenMs?: number) { + return retryOn(cb, () => true, maxAttempts, sleepBetweenMs); +} + +export async function retryOn (cb: CallableFunction, condition: (e: Error) => boolean, maxAttempts = 3, sleepBetweenMs?: number) { let attempt = 0, lastError; while (attempt < maxAttempts) { @@ -10,6 +14,9 @@ export async function retry (cb: CallableFunction, maxAttempts = 3, sleepBetween return await cb(); } catch (e) { lastError = e; + if (!condition(e)) { + throw lastError; + } if (typeof sleepBetweenMs === 'number') { await sleep(sleepBetweenMs); } @@ -17,3 +24,58 @@ export async function retry (cb: CallableFunction, maxAttempts = 3, sleepBetween } throw lastError; } + +export function retryIfPromise ( + cb: CallableFunction, + retryCondition: (e: Error) => boolean, + maxAttempts = 3, + sleepBetweenMs?: number +) { + + const firstAttemptResult = cb(); + if (!(firstAttemptResult instanceof Promise)) { + return firstAttemptResult; + } + return firstAttemptResult.catch(e => { + if (retryCondition(e)) { + return retryOn( + cb, + retryCondition, + maxAttempts - 1, + sleepBetweenMs + ); + } + throw e; + }); + +} + +export function retryProxy ( + target: T, + retryCondition: (e: Error) => boolean, + maxAttempts = 3, + sleepBetweenMs?: number, + onEmitError?: (e: Error) => any +): T { + return new Proxy(target, { + get (target, p) { + const propValue = target[p]; + + if (typeof propValue !== 'function') { + return propValue; + } + + return function (...args) { + return retryIfPromise( + () => propValue.apply(target, args), + retryCondition, + maxAttempts, + sleepBetweenMs + ).catch(e => { + onEmitError ? onEmitError(e) : null; + throw e; + }); + }; + } + }); +} From 54c24e33c97588d26aa4d0a5ea1399799bd0612f Mon Sep 17 00:00:00 2001 From: Alexey Nalivaiko Date: Fri, 3 May 2019 18:11:19 +0300 Subject: [PATCH 11/32] [AMSA-46] fix displaying sync status for terminated syncs --- src/ui/components/admob-account/AdmobAccountComponent.tsx | 1 + src/ui/components/log-list/LogListComponent.tsx | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/ui/components/admob-account/AdmobAccountComponent.tsx b/src/ui/components/admob-account/AdmobAccountComponent.tsx index 3ce591c..28efc69 100644 --- a/src/ui/components/admob-account/AdmobAccountComponent.tsx +++ b/src/ui/components/admob-account/AdmobAccountComponent.tsx @@ -177,6 +177,7 @@ export class AdmobAccountComponent extends Component } diff --git a/src/ui/components/log-list/LogListComponent.tsx b/src/ui/components/log-list/LogListComponent.tsx index c0c9062..90beb2d 100644 --- a/src/ui/components/log-list/LogListComponent.tsx +++ b/src/ui/components/log-list/LogListComponent.tsx @@ -13,6 +13,7 @@ import style from './LogList.scss'; interface LogListComponentProps { + activeSyncId: string | null; historyInfo: SyncHistoryInfo; admobAccount: AdMobAccount; appodealAccountId: string; @@ -53,13 +54,13 @@ export class LogListComponent extends React.Component { } statusIcon (syncInfo: SyncInfo) { - if (!syncInfo.endTs) { + if (syncInfo.id === this.props.activeSyncId) { return ; } - if (syncInfo.terminated) { + if (syncInfo.terminated || !syncInfo.endTs) { return ; } From dfce5df60e5ffcb3fdefd6903f52c402ef023471 Mon Sep 17 00:00:00 2001 From: Alexey Nalivaiko Date: Fri, 3 May 2019 20:03:09 +0300 Subject: [PATCH 12/32] [AMSA-46] improve detection && handling network errors --- src/core/appdeal-api/appodeal-api.factory.ts | 11 ++++++++--- src/core/error-factory/error-factory.service.ts | 17 ++++++++++++----- src/core/sync-apps/sync.ts | 5 +++-- src/lib/fetch.ts | 8 ++++++-- src/main.ts | 10 +++++++--- 5 files changed, 36 insertions(+), 15 deletions(-) diff --git a/src/core/appdeal-api/appodeal-api.factory.ts b/src/core/appdeal-api/appodeal-api.factory.ts index ee73bdd..99c6727 100644 --- a/src/core/appdeal-api/appodeal-api.factory.ts +++ b/src/core/appdeal-api/appodeal-api.factory.ts @@ -52,7 +52,7 @@ export class AppodealApi extends EventEmitter { this.destroyApi(account.id); this.saveApi(api, account); sessionInfo.save(account.id); - this.emit('signIn', account) + this.emit('signIn', account); } else { api.destroy(); } @@ -71,7 +71,7 @@ export class AppodealApi extends EventEmitter { }); this.destroyApi(accountId); await AppodealSessions.remove(accountId); - this.emit('signOut', account) + this.emit('signOut', account); } async fetchAllAccounts (): Promise> { @@ -79,7 +79,12 @@ export class AppodealApi extends EventEmitter { [...this.APIs.entries()] .map(([accountId, api]) => { return api.fetchCurrentUser() - .catch(() => null) + .catch((e) => { + if (e instanceof AuthorizationError) { + return null; + } + throw e; + }) .then<[string, AppodealAccount]>(account => [accountId, account]); }) )); diff --git a/src/core/error-factory/error-factory.service.ts b/src/core/error-factory/error-factory.service.ts index 24b1437..b258652 100644 --- a/src/core/error-factory/error-factory.service.ts +++ b/src/core/error-factory/error-factory.service.ts @@ -23,7 +23,8 @@ export declare type ServerError = Error & { statusCode: number; }; -const isNetworkError = (err) => err && err.statusCode !== undefined || err.message === 'net::ERR_INTERNET_DISCONNECTED'; +const isNetworkError = (err) => err && err.response && err.response.status !== undefined + || err.message.substring(0, 'net::ERR'.length) === 'net::ERR'; const isApolloResponseError = (err) => err && err.hasOwnProperty('operation') && (err.hasOwnProperty('graphQLErrors') || err.hasOwnProperty('networkError')); @@ -139,20 +140,26 @@ export class ErrorFactoryService { * @return {NoConnectionError|InternalServerError|UnavailableEndpointError|AuthorizationError} */ createNetworkError (httpError: ServerError, operationName?: string) { - if (httpError.statusCode === 0 || httpError.message === 'net::ERR_INTERNET_DISCONNECTED') { + + // electron network error + if (!httpError.response) { + return new NoConnectionError(httpError); + } + + if (httpError.response.status === 0) { return new NoConnectionError(httpError); } - if (httpError.statusCode === HttpStatus.InternalServerError) { + if (httpError.response.status === HttpStatus.InternalServerError) { return new InternalServerError(httpError, operationName); } - if (httpError.statusCode === HttpStatus.Unauthorized) { + if (httpError.response.status === HttpStatus.Unauthorized) { return new AuthorizationError(httpError, operationName); } // has any status - if (httpError.statusCode > 0) { + if (httpError.response.status > 0) { return new UnavailableEndpointError(httpError); } diff --git a/src/core/sync-apps/sync.ts b/src/core/sync-apps/sync.ts index fe6d379..f63c1d8 100644 --- a/src/core/sync-apps/sync.ts +++ b/src/core/sync-apps/sync.ts @@ -15,6 +15,7 @@ import {AdMobAdUnit, CpmFloorMode, CpmFloorSettings} from 'lib/translators/inter import {AdMobApp} from 'lib/translators/interfaces/admob-app.interface'; import {getTranslator} from 'lib/translators/translator.helpers'; import uuid from 'uuid'; +import {NoConnectionError} from '../error-factory/errors/network/no-connection-error'; import {UnavailableEndpointError} from '../error-factory/errors/network/unavailable-endpoint-error'; import {SyncContext} from './sync-context'; import {SyncEventEmitter} from './sync-event.emitter'; @@ -85,8 +86,8 @@ export class Sync { const retryCondition = e => e.message.substring(0, 'net::ERR'.length) === 'net::ERR' - || e instanceof UnavailableEndpointError - || e.stats === 502; + || e instanceof NoConnectionError + || e instanceof UnavailableEndpointError; const terminateIfConnectionLost = e => { if (retryCondition(e)) { diff --git a/src/lib/fetch.ts b/src/lib/fetch.ts index 0b50b31..96943e5 100644 --- a/src/lib/fetch.ts +++ b/src/lib/fetch.ts @@ -35,7 +35,7 @@ export function nodeFetch ( url: string, options: Partial = {}, session?: Session -): Promise<{ text: () => Promise, json: () => Promise }> { +): Promise<{ ok: boolean, status: number, statusText: string, headers: Record, text: () => Promise, json: () => Promise }> { return new Promise(async (resolve, reject) => { let config = { ...DEFAULT_FETCH_CONFIG, @@ -73,6 +73,10 @@ export function nodeFetch ( response.removeAllListeners(); let data = Buffer.concat(chunks).toString(); resolve({ + ok: response.statusCode === 200, + headers: response.headers, + status: response.statusCode, + statusText: response.statusMessage, text: async () => data, json: async () => JSON.parse(data) }); @@ -90,6 +94,6 @@ export function nodeFetch ( }); } -export function getSessionCookies (session: Session): Promise> { +export function getSessionCookies (session: Session): Promise> { return new Promise(resolve => session.cookies.get({}, (error, cookies = []) => resolve(cookies))); } diff --git a/src/main.ts b/src/main.ts index 1d2230f..a2aaefc 100644 --- a/src/main.ts +++ b/src/main.ts @@ -26,6 +26,7 @@ import {TrayIcon} from 'lib/tray-icon'; import {openAppodealAccountsWindow, openAppodealSignInWindow} from 'lib/ui-windows'; import {UpdatesService} from 'lib/updates'; import * as path from 'path'; +import {InternalError} from './core/error-factory/errors/internal-error'; import {hideDock} from './lib/dock'; @@ -117,12 +118,15 @@ app.on('ready', async () => { } } }) - .then(() => store.updateUserWhenOnline()) .catch(e => { console.error('FAILED TO FETCH CURRENT USER'); - Sentry.captureException(e); + if (e instanceof InternalError && e.isCritical() || !(e instanceof InternalError)) { + Sentry.captureException(e); + } + onlineService.setOffline(); console.log(e); - }); + }) + .then(() => store.updateUserWhenOnline()); }); From 0ed40c11237270f5bbf53d1eceff0f757982e46e Mon Sep 17 00:00:00 2001 From: Alexey Nalivaiko Date: Sat, 4 May 2019 12:07:20 +0300 Subject: [PATCH 13/32] [AMSA-chore] extend build info for sentry --- src/lib/sentry.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/lib/sentry.ts b/src/lib/sentry.ts index dd0bee4..ef668ba 100644 --- a/src/lib/sentry.ts +++ b/src/lib/sentry.ts @@ -3,6 +3,8 @@ import {SentryEvent} from '@sentry/electron'; import {init} from '@sentry/electron/dist/main'; import {SentryEventHint} from '@sentry/types'; +import * as pkgInfo from '../../package.json'; + export const Sentry = SentryElectron; @@ -14,6 +16,11 @@ export function initBugTracker (sentryOptions: SentryOptions) { init({ ...sentryOptions, beforeSend (event: SentryEvent, hint?: SentryEventHint): SentryEvent { + + event.release = pkgInfo.version; + if (event.contexts.app) { + event.contexts.app['build_type'] = environment.development ? 'dev' : 'prod'; + } // to extend error context if (hint && hint.originalException) { if (hint.originalException['extraInfo']) { From 7e7bc422776354c5890996779bfb9c5e8549578f Mon Sep 17 00:00:00 2001 From: Alexey Nalivaiko Date: Fri, 10 May 2019 13:07:07 +0300 Subject: [PATCH 14/32] [AMSA-50] fix fetching new new app version when minimal app version increased --- src/main.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main.ts b/src/main.ts index a2aaefc..fcbb853 100644 --- a/src/main.ts +++ b/src/main.ts @@ -85,7 +85,7 @@ app.on('ready', async () => { } }); for (let acc of store.state.preferences.accounts.appodealAccounts) { - if (!acc.active) { + if (!acc.active && !store.state.outdatedVersion) { await openAppodealSignInWindow(acc); } } @@ -99,7 +99,12 @@ app.on('ready', async () => { store.validateAppVersion() .then(async versionValid => { if (!versionValid) { - updates.availableDist.showUpdateDialog(); + if (!updates.availableDist) { + await updates.check(); + } + if (updates.availableDist) { + return updates.availableDist.showUpdateDialog(); + } return; } await store.fetchAllAppodealUsers(); From 4069fa56900f574850c4a5943b0c4ff7011c7805 Mon Sep 17 00:00:00 2001 From: alex-skakun Date: Fri, 10 May 2019 18:27:02 +0300 Subject: [PATCH 15/32] added checking of terms of service, bug fixes --- config/development.json.example | 14 + config/production.json.example | 14 + package-lock.json | 5334 +++++++++-------- package.json | 4 +- src/core/accounts-connector.ts | 8 +- src/core/admob-api/account-setup.helper.ts | 129 +- src/core/store.ts | 56 +- src/core/sync-apps/sync.service.ts | 5 + src/lib/app-menu.ts | 28 +- src/lib/core.ts | 13 +- src/lib/debug.ts | 46 +- src/lib/fetch.ts | 6 +- src/lib/messages.ts | 8 +- src/lib/theme.ts | 9 +- src/lib/window.ts | 39 +- src/main.ts | 9 +- .../account-status/AccountStatusComponent.tsx | 14 +- src/ui/components/accounts/Accounts.scss | 1 + .../components/accounts/AccountsComponent.tsx | 10 +- .../AdMobAccountSetup.scss | 2 +- .../admob-account/AdmobAccountComponent.tsx | 57 +- src/ui/components/root/RootComponent.tsx | 7 +- tsconfig.json | 1 + typings/environment.d.ts | 8 + webpack/development.ts | 2 +- 25 files changed, 3027 insertions(+), 2797 deletions(-) diff --git a/config/development.json.example b/config/development.json.example index f23cc30..6c76202 100644 --- a/config/development.json.example +++ b/config/development.json.example @@ -15,6 +15,20 @@ "updates": { "releaseNotesUrl": "https://wiki.appodeal.com", "updatesServerUrl": "https://amsa-updates.appodeal.com" + }, + "setupOptions": { + "projectName": "Appodeal", + "appName": "Appodeal Revenue", + "clientName": "Appodeal AdMob Sync App", + "domains": [ + "appodeal.com" + ], + "allowedJs": [ + "https://staging7.appodeal.com" + ], + "allowedCallbacks": [ + "https://staging7.appodeal.com/admob_plugin/api/v3/oauth/callback" + ] } } } diff --git a/config/production.json.example b/config/production.json.example index 11f5f27..08935d0 100644 --- a/config/production.json.example +++ b/config/production.json.example @@ -11,6 +11,20 @@ "updates": { "releaseNotesUrl": "https://wiki.appodeal.com", "updatesServerUrl": "https://amsa-updates.appodeal.com" + }, + "setupOptions": { + "projectName": "Appodeal", + "appName": "Appodeal Revenue", + "clientName": "Appodeal AdMob Sync App", + "domains": [ + "appodeal.com" + ], + "allowedJs": [ + "https://api-services.appodeal.com" + ], + "allowedCallbacks": [ + "https://api-services.appodeal.com/admob_plugin/api/v3/oauth/callback" + ] } } } diff --git a/package-lock.json b/package-lock.json index 0e9dc45..cef2c78 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,18 +20,18 @@ } }, "@babel/core": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.3.4.tgz", - "integrity": "sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.4.tgz", + "integrity": "sha512-lQgGX3FPRgbz2SKmhMtYgJvVzGZrmjaF4apZ2bLwofAKiSjxU0drPh4S/VasyYXwaTs+A1gvQ45BN8SQJzHsQQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.3.4", - "@babel/helpers": "^7.2.0", - "@babel/parser": "^7.3.4", - "@babel/template": "^7.2.2", - "@babel/traverse": "^7.3.4", - "@babel/types": "^7.3.4", + "@babel/generator": "^7.4.4", + "@babel/helpers": "^7.4.4", + "@babel/parser": "^7.4.4", + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4", "convert-source-map": "^1.1.0", "debug": "^4.1.0", "json5": "^2.1.0", @@ -68,12 +68,12 @@ } }, "@babel/generator": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz", - "integrity": "sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", + "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", "dev": true, "requires": { - "@babel/types": "^7.3.4", + "@babel/types": "^7.4.4", "jsesc": "^2.5.1", "lodash": "^4.17.11", "source-map": "^0.5.0", @@ -107,23 +107,23 @@ "dev": true }, "@babel/helper-split-export-declaration": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", - "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", + "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.4.4" } }, "@babel/helpers": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.3.1.tgz", - "integrity": "sha512-Q82R3jKsVpUV99mgX50gOPCWwco9Ec5Iln/8Vyu4osNIOQgSrd9RFrQeUvmvddFNoLwMyOUWU+5ckioEKpDoGA==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz", + "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==", "dev": true, "requires": { - "@babel/template": "^7.1.2", - "@babel/traverse": "^7.1.5", - "@babel/types": "^7.3.0" + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4" } }, "@babel/highlight": { @@ -138,9 +138,9 @@ } }, "@babel/parser": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz", - "integrity": "sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz", + "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==", "dev": true }, "@babel/plugin-syntax-object-rest-spread": { @@ -153,38 +153,38 @@ } }, "@babel/polyfill": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.2.5.tgz", - "integrity": "sha512-8Y/t3MWThtMLYr0YNC/Q76tqN1w30+b0uQMeFUYauG2UGTR19zyUtFrAzT23zNtBxPp+LbE5E/nwV/q/r3y6ug==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.4.4.tgz", + "integrity": "sha512-WlthFLfhQQhh+A2Gn5NSFl0Huxz36x86Jn+E9OW7ibK8edKPq+KLy4apM1yDpQ8kJOVi1OVjpP4vSDLdrI04dg==", "dev": true, "requires": { - "core-js": "^2.5.7", - "regenerator-runtime": "^0.12.0" + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.2" } }, "@babel/template": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", - "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", + "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.2.2", - "@babel/types": "^7.2.2" + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4" } }, "@babel/traverse": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz", - "integrity": "sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", + "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.3.4", + "@babel/generator": "^7.4.4", "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/parser": "^7.3.4", - "@babel/types": "^7.3.4", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.11" @@ -202,9 +202,9 @@ } }, "@babel/types": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz", - "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", + "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -227,6 +227,252 @@ "xxhashjs": "0.2.2" } }, + "@cnakazawa/watch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", + "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@jest/console": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz", + "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==", + "dev": true, + "requires": { + "@jest/source-map": "^24.3.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + } + } + }, + "@jest/core": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.7.1.tgz", + "integrity": "sha512-ivlZ8HX/FOASfHcb5DJpSPFps8ydfUYzLZfgFFqjkLijYysnIEOieg72YRhO4ZUB32xu40hsSMmaw+IGYeKONA==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/reporters": "^24.7.1", + "@jest/test-result": "^24.7.1", + "@jest/transform": "^24.7.1", + "@jest/types": "^24.7.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-changed-files": "^24.7.0", + "jest-config": "^24.7.1", + "jest-haste-map": "^24.7.1", + "jest-message-util": "^24.7.1", + "jest-regex-util": "^24.3.0", + "jest-resolve-dependencies": "^24.7.1", + "jest-runner": "^24.7.1", + "jest-runtime": "^24.7.1", + "jest-snapshot": "^24.7.1", + "jest-util": "^24.7.1", + "jest-validate": "^24.7.0", + "jest-watcher": "^24.7.1", + "micromatch": "^3.1.10", + "p-each-series": "^1.0.0", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "rimraf": "^2.5.4", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "@jest/environment": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.7.1.tgz", + "integrity": "sha512-wmcTTYc4/KqA+U5h1zQd5FXXynfa7VGP2NfF+c6QeGJ7c+2nStgh65RQWNX62SC716dTtqheTRrZl0j+54oGHw==", + "dev": true, + "requires": { + "@jest/fake-timers": "^24.7.1", + "@jest/transform": "^24.7.1", + "@jest/types": "^24.7.0", + "jest-mock": "^24.7.0" + } + }, + "@jest/fake-timers": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.7.1.tgz", + "integrity": "sha512-4vSQJDKfR2jScOe12L9282uiwuwQv9Lk7mgrCSZHA9evB9efB/qx8i0KJxsAKtp8fgJYBJdYY7ZU6u3F4/pyjA==", + "dev": true, + "requires": { + "@jest/types": "^24.7.0", + "jest-message-util": "^24.7.1", + "jest-mock": "^24.7.0" + } + }, + "@jest/reporters": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.7.1.tgz", + "integrity": "sha512-bO+WYNwHLNhrjB9EbPL4kX/mCCG4ZhhfWmO3m4FSpbgr7N83MFejayz30kKjgqr7smLyeaRFCBQMbXpUgnhAJw==", + "dev": true, + "requires": { + "@jest/environment": "^24.7.1", + "@jest/test-result": "^24.7.1", + "@jest/transform": "^24.7.1", + "@jest/types": "^24.7.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "istanbul-api": "^2.1.1", + "istanbul-lib-coverage": "^2.0.2", + "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-source-maps": "^3.0.1", + "jest-haste-map": "^24.7.1", + "jest-resolve": "^24.7.1", + "jest-runtime": "^24.7.1", + "jest-util": "^24.7.1", + "jest-worker": "^24.6.0", + "node-notifier": "^5.2.1", + "slash": "^2.0.0", + "source-map": "^0.6.0", + "string-length": "^2.0.0" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/source-map": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz", + "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/test-result": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.7.1.tgz", + "integrity": "sha512-3U7wITxstdEc2HMfBX7Yx3JZgiNBubwDqQMh+BXmZXHa3G13YWF3p6cK+5g0hGkN3iufg/vGPl3hLxQXD74Npg==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/types": "^24.7.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/test-sequencer": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.7.1.tgz", + "integrity": "sha512-84HQkCpVZI/G1zq53gHJvSmhUer4aMYp9tTaffW28Ih5OxfCg8hGr3nTSbL1OhVDRrFZwvF+/R9gY6JRkDUpUA==", + "dev": true, + "requires": { + "@jest/test-result": "^24.7.1", + "jest-haste-map": "^24.7.1", + "jest-runner": "^24.7.1", + "jest-runtime": "^24.7.1" + } + }, + "@jest/transform": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.7.1.tgz", + "integrity": "sha512-EsOUqP9ULuJ66IkZQhI5LufCHlTbi7hrcllRMUEV/tOgqBVQi93+9qEvkX0n8mYpVXQ8VjwmICeRgg58mrtIEw==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.7.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.7.1", + "jest-regex-util": "^24.3.0", + "jest-util": "^24.7.1", + "micromatch": "^3.1.10", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "write-file-atomic": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", + "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + } + } + }, + "@jest/types": { + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.7.0.tgz", + "integrity": "sha512-ipJUa2rFWiKoBqMKP63Myb6h9+iT3FHRTF2M8OR6irxWzItisa8i4dcSg14IbvmXUnBlHBlUQPYUHWyX3UPpYA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/yargs": "^12.0.9" + } + }, "@jimp/bmp": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.5.4.tgz", @@ -265,16 +511,6 @@ "tinycolor2": "^1.4.1" }, "dependencies": { - "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, "file-type": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", @@ -316,9 +552,9 @@ }, "dependencies": { "jpeg-js": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.4.tgz", - "integrity": "sha512-6IzjQxvnlT8UlklNmDXIJMWxijULjqGrzgqc0OG7YadZdvm7KPQ1j0ehmQQHckgEWOfgpptzcnWgESovxudpTA==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.5.tgz", + "integrity": "sha512-hvaExqwmQDS8O9qnZAVDXGWU43Tbu1V0wMZmjROjT11jloSgGICZpscG+P6Nyi1BVAvyu2ARRx8qmEW30sxgdQ==", "dev": true } } @@ -584,20 +820,20 @@ "dev": true }, "@sentry/browser": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-4.6.4.tgz", - "integrity": "sha512-w2ITpQbs2vTKS5vtPXDgeDyr+5C4lCnTXugJrqn8u8w/XaDb3vRogfMWpQcaUENllO5xdZSItSAAHsQucY/LvA==", + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-4.6.6.tgz", + "integrity": "sha512-+9VsQ+oQYU+PYlLJG2ex7JCMSVQbnUvWPI2uZOofWdI9sWIPUub3boWItMzRQNQ1T4S3FZd4FqAWNFd3azdnBw==", "requires": { - "@sentry/core": "4.6.4", + "@sentry/core": "4.6.6", "@sentry/types": "4.5.3", - "@sentry/utils": "4.6.4", + "@sentry/utils": "4.6.5", "tslib": "^1.9.3" } }, "@sentry/cli": { - "version": "1.41.1", - "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-1.41.1.tgz", - "integrity": "sha512-bcsud8ZMNIskmm8COPdyco4qy8VI5YxknRuidqoecyjZ+76IU9dCd8NwJlrYoPNTcM/7gfbRQQFkY2mU/LLrGQ==", + "version": "1.41.2", + "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-1.41.2.tgz", + "integrity": "sha512-fLDjyrSXjBcCwseKSjVwMOIxBNeFMi7/eb+cxpM7V+8jUMmtRzbTedcuCLdolIwqWoojy175Xm/YRIi+tsIaMA==", "dev": true, "requires": { "fs-copy-file-sync": "^1.1.1", @@ -609,14 +845,14 @@ } }, "@sentry/core": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-4.6.4.tgz", - "integrity": "sha512-NGl2nkAaQ8dGqJAMS1Hb+7RyVjW4tmCbK6d7H/zKnOpBuU+qSW4XCm2NoGLLa8qb4SZUPIBRv6U0ByvEQlGtqw==", + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-4.6.6.tgz", + "integrity": "sha512-7z9HKLTNr3zVBR3tBRheTxkkkuK2IqISUc5Iyo3crN2OecOLtpptT96f5XjLndBEL2ab39eCBPpA5OFjbpzrIA==", "requires": { - "@sentry/hub": "4.6.4", - "@sentry/minimal": "4.6.4", + "@sentry/hub": "4.6.5", + "@sentry/minimal": "4.6.5", "@sentry/types": "4.5.3", - "@sentry/utils": "4.6.4", + "@sentry/utils": "4.6.5", "tslib": "^1.9.3" } }, @@ -634,57 +870,37 @@ "electron-fetch": "1.1.0", "form-data": "2.3.2", "util.promisify": "1.0.0" - }, - "dependencies": { - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" - } - } } }, "@sentry/hub": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-4.6.4.tgz", - "integrity": "sha512-R3ACxUZbrAMP6vyIvt1k4bE3OIyg1CzbEhzknKljPrk1abVmJVP7W/X1vBysdRtI3m/9RjOSO7Lxx3XXqoHoQg==", + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-4.6.5.tgz", + "integrity": "sha512-v9vee8s8C1fK/DPtNOzv6r+AMbPDOWfnasouNcBUkbQUSN5wUNyCDvt51QbWaw5kMMY5TSqjdVqY6gXQZI0APQ==", "requires": { "@sentry/types": "4.5.3", - "@sentry/utils": "4.6.4", + "@sentry/utils": "4.6.5", "tslib": "^1.9.3" } }, "@sentry/minimal": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-4.6.4.tgz", - "integrity": "sha512-jZa9mfzDzJI98tg6uxFG3gdVLyz0nOHpLP9H8Kn/BelZ7WEG/ogB8PDi1hI9JvCTXAr8kV81mEecldADa9L9Yg==", + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-4.6.5.tgz", + "integrity": "sha512-tf+J+uUNmSgzC7d9JSN8Ekw1HeBAX87Efa/jyFbzLvaw80oibvTiLSLqDjQ9PgvyIzBUuuPImkS2NpvPQGWFtg==", "requires": { - "@sentry/hub": "4.6.4", + "@sentry/hub": "4.6.5", "@sentry/types": "4.5.3", "tslib": "^1.9.3" } }, "@sentry/node": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-4.6.4.tgz", - "integrity": "sha512-nfaLB+cE0dddjWD0yI0nB/UqXkPw/6FKDRpB1NZ61amAM4QRXa4hRTdHvqjUovzV/5/pVMQYsOyCk0pNWMtMUQ==", + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-4.6.6.tgz", + "integrity": "sha512-+zZHE2uOwQTgypP6N9oBd0Io6BKXaJh6mdmZBauF0G46/8V28sBQ/dXBtJJNZ8tW7eVlLGpLSGuJb9Ai7c/rNw==", "requires": { - "@sentry/core": "4.6.4", - "@sentry/hub": "4.6.4", + "@sentry/core": "4.6.6", + "@sentry/hub": "4.6.5", "@sentry/types": "4.5.3", - "@sentry/utils": "4.6.4", + "@sentry/utils": "4.6.5", "@types/stack-trace": "0.0.29", "cookie": "0.3.1", "https-proxy-agent": "2.2.1", @@ -700,9 +916,9 @@ "integrity": "sha512-7ll1PAFNjrBNX9rzy3P2qAQrpQwHaDO3uKj735qsnGw34OtAS8Xr8WYrjI14f9fMPa/XIeWvMPb4GMic28V/ag==" }, "@sentry/utils": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-4.6.4.tgz", - "integrity": "sha512-Tc5R46z7ve9Z+uU34ceDoEUR7skfQgXVIZqjbrTQphgm6EcMSNdRfkK3SJYZL5MNKiKhb7Tt/O3aPBy5bTZy6w==", + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-4.6.5.tgz", + "integrity": "sha512-rTISJtRRbWsd3UE+TkA3QG1C0VzPKPW8w74tieBwYhtTCGmOHNwz2nDC/MZGbGj4OgDmNKKl4CCyQr88EX08hA==", "requires": { "@sentry/types": "4.5.3", "tslib": "^1.9.3" @@ -714,6 +930,62 @@ "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", "dev": true }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@types/babel__core": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.1.tgz", + "integrity": "sha512-+hjBtgcFPYyCTo0A15+nxrCVJL7aC6Acg87TXd5OW3QhHswdrOLoles+ldL2Uk8q++7yIfl4tURtztccdeeyOw==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz", + "integrity": "sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", + "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.6.tgz", + "integrity": "sha512-XYVgHF2sQ0YblLRMLNPB3CkFMewzFmlDsH/TneZFHUXDlABQgh88uOxuez7ZcXxayLFrqLwtDH1t+FmlFwNZxw==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "dev": true + }, "@types/fs-extra": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.5.tgz", @@ -723,16 +995,33 @@ "@types/node": "*" } }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, "@types/graphql": { - "version": "14.0.7", - "resolved": "https://registry.npmjs.org/@types/graphql/-/graphql-14.0.7.tgz", - "integrity": "sha512-BoLDjdvLQsXPZLJux3lEZANwGr3Xag56Ngy0U3y8uoRSDdeLcn43H3oBcgZlnd++iOQElBpaRVDHPzEDekyvXQ==", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/@types/graphql/-/graphql-14.2.0.tgz", + "integrity": "sha512-lELg5m6eBOmATWyCZl8qULEOvnPIUG6B443yXKj930glXIgwQirIBPp5rthP2amJW0YSzUg2s5sfgba4mRRCNw==", + "dev": true + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", + "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", "dev": true }, "@types/jest": { - "version": "24.0.9", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.9.tgz", - "integrity": "sha512-k3OOeevcBYLR5pdsOv5g3OP94h3mrJmLPHFEPWgbbVy2tGv0TZ/TlygiC848ogXhK8NL0I5up7YYtwpCp8xCJA==", + "version": "24.0.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.12.tgz", + "integrity": "sha512-60sjqMhat7i7XntZckcSGV8iREJyXXI6yFHZkSZvCPUeOnEJ/VP1rU/WpEWQ56mvoh8NhC+sfKAuJRTyGtCOow==", "dev": true, "requires": { "@types/jest-diff": "*" @@ -757,39 +1046,48 @@ "dev": true }, "@types/lodash": { - "version": "4.14.121", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.121.tgz", - "integrity": "sha512-ORj7IBWj13iYufXt/VXrCNMbUuCTJfhzme5kx9U/UtcIPdJYuvPDUAlHlbNhz/8lKCLy9XGIZnGrqXOtQbPGoQ==", + "version": "4.14.123", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.123.tgz", + "integrity": "sha512-pQvPkc4Nltyx7G1Ww45OjVqUsJP4UsZm+GWJpigXgkikZqJgRm4c48g027o6tdgubWHwFRF15iFd+Y4Pmqv6+Q==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, "@types/node": { - "version": "11.9.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.9.6.tgz", - "integrity": "sha512-4hS2K4gwo9/aXIcoYxCtHpdgd8XUeDmo1siRCAH3RziXB65JlPqUFMtfy9VPj+og7dp3w1TFjGwYga4e0m9GwA==", + "version": "11.13.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.10.tgz", + "integrity": "sha512-leUNzbFTMX94TWaIKz8N15Chu55F9QSH+INKayQr5xpkasBQBRF3qQXfo3/dOnMU/dEIit+Y/SU8HyOjq++GwA==", "dev": true }, "@types/package-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/package-json/-/package-json-5.0.0.tgz", - "integrity": "sha512-WqgImkz7tkh6c9PUCchGrAkFpyWsrLMuxwoe267IBVs5hxnyG6piWQ69KrV+cESDPz5np2d06ocqBkQYO41jKQ==", - "dev": true + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/package-json/-/package-json-5.0.1.tgz", + "integrity": "sha512-0M6UdBDyGmgWly5Dtenf1U9HPMNCXtAnvvxIKoK9u6b5CCrxiVxc32eoqBzLccH/1Z8ApY927UiYoQ5cwPKcJw==", + "dev": true, + "requires": { + "package-json": "*" + } }, "@types/prop-types": { - "version": "15.5.9", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.9.tgz", - "integrity": "sha512-Nha5b+jmBI271jdTMwrHiNXM+DvThjHOfyZtMX9kj/c/LUj2xiLHsG/1L3tJ8DjAoQN48cHwUwtqBotjyXaSdQ==", + "version": "15.7.1", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.1.tgz", + "integrity": "sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg==", "dev": true }, "@types/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz", - "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", "dev": true }, "@types/react": { - "version": "16.8.5", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.5.tgz", - "integrity": "sha512-8LRySaaSJVLNZb2dbOGvGmzn88cbAfrgDpuWy+6lLgQ0OJFgHHvyuaCX4/7ikqJlpmCPf4uazJAZcfTQRdJqdQ==", + "version": "16.8.16", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.16.tgz", + "integrity": "sha512-A0+6kS6zwPtvubOLiCJmZ8li5bm3wKIkoKV0h3RdMDOnCj9cYkUnj3bWbE03/lcICdQmwBmUfoFiHeNhbFiyHQ==", "dev": true, "requires": { "@types/prop-types": "*", @@ -801,6 +1099,12 @@ "resolved": "https://registry.npmjs.org/@types/stack-trace/-/stack-trace-0.0.29.tgz", "integrity": "sha512-TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g==" }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, "@types/uuid": { "version": "3.4.4", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.4.tgz", @@ -819,193 +1123,199 @@ "winston": "*" } }, + "@types/yargs": { + "version": "12.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz", + "integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==", + "dev": true + }, "@types/zen-observable": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.0.tgz", "integrity": "sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg==" }, "@types/zen-push": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@types/zen-push/-/zen-push-0.1.0.tgz", - "integrity": "sha512-tFY/LgXWJsKTf6sZrPoPWf3SZzqIA7FSr/xmhKMEHhCGCcGA0YZMl72gvsVrxJZA7QHHiOHSRfOf4+0pUCIA/Q==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@types/zen-push/-/zen-push-0.1.1.tgz", + "integrity": "sha512-lc6wO0vtv3LFNXj1U8cDrtB5hajXzXCWYO0cztPf5xzHKbciVPf5H5uccVLgApE1KlXb4z0X1bjvYkLwhXIQfA==", "dev": true, "requires": { "@types/zen-observable": "*" } }, "@webassemblyjs/ast": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.3.tgz", - "integrity": "sha512-xy3m06+Iu4D32+6soz6zLnwznigXJRuFNTovBX2M4GqVqLb0dnyWLbPnpcXvUSdEN+9DVyDeaq2jyH1eIL2LZQ==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", + "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.8.3", - "@webassemblyjs/helper-wasm-bytecode": "1.8.3", - "@webassemblyjs/wast-parser": "1.8.3" + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.3.tgz", - "integrity": "sha512-vq1TISG4sts4f0lDwMUM0f3kpe0on+G3YyV5P0IySHFeaLKRYZ++n2fCFfG4TcCMYkqFeTUYFxm75L3ddlk2xA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", + "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.3.tgz", - "integrity": "sha512-BmWEynI4FnZbjk8CaYZXwcv9a6gIiu+rllRRouQUo73hglanXD3AGFJE7Q4JZCoVE0p5/jeX6kf5eKa3D4JxwQ==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", + "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.3.tgz", - "integrity": "sha512-iVIMhWnNHoFB94+/2l7LpswfCsXeMRnWfExKtqsZ/E2NxZyUx9nTeKK/MEMKTQNEpyfznIUX06OchBHQ+VKi/Q==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", + "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", "dev": true }, "@webassemblyjs/helper-code-frame": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.3.tgz", - "integrity": "sha512-K1UxoJML7GKr1QXR+BG7eXqQkvu+eEeTjlSl5wUFQ6W6vaOc5OwSxTcb3oE9x/3+w4NHhrIKD4JXXCZmLdL2cg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", + "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.8.3" + "@webassemblyjs/wast-printer": "1.8.5" } }, "@webassemblyjs/helper-fsm": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.3.tgz", - "integrity": "sha512-387zipfrGyO77/qm7/SDUiZBjQ5KGk4qkrVIyuoubmRNIiqn3g+6ijY8BhnlGqsCCQX5bYKOnttJobT5xoyviA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", + "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", "dev": true }, "@webassemblyjs/helper-module-context": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.3.tgz", - "integrity": "sha512-lPLFdQfaRssfnGEJit5Sk785kbBPPPK4ZS6rR5W/8hlUO/5v3F+rN8XuUcMj/Ny9iZiyKhhuinWGTUuYL4VKeQ==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", + "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.3", + "@webassemblyjs/ast": "1.8.5", "mamacro": "^0.0.3" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.3.tgz", - "integrity": "sha512-R1nJW7bjyJLjsJQR5t3K/9LJ0QWuZezl8fGa49DZq4IVaejgvkbNlKEQxLYTC579zgT4IIIVHb5JA59uBPHXyw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", + "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.3.tgz", - "integrity": "sha512-P6F7D61SJY73Yz+fs49Q3+OzlYAZP86OfSpaSY448KzUy65NdfzDmo2NPVte+Rw4562MxEAacvq/mnDuvRWOcg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", + "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.3", - "@webassemblyjs/helper-buffer": "1.8.3", - "@webassemblyjs/helper-wasm-bytecode": "1.8.3", - "@webassemblyjs/wasm-gen": "1.8.3" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5" } }, "@webassemblyjs/ieee754": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.3.tgz", - "integrity": "sha512-UD4HuLU99hjIvWz1pD68b52qsepWQlYCxDYVFJQfHh3BHyeAyAlBJ+QzLR1nnS5J6hAzjki3I3AoJeobNNSZlg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", + "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.3.tgz", - "integrity": "sha512-XXd3s1BmkC1gpGABuCRLqCGOD6D2L+Ma2BpwpjrQEHeQATKWAQtxAyU9Z14/z8Ryx6IG+L4/NDkIGHrccEhRUg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", + "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.3.tgz", - "integrity": "sha512-Wv/WH9Zo5h5ZMyfCNpUrjFsLZ3X1amdfEuwdb7MLdG3cPAjRS6yc6ElULlpjLiiBTuzvmLhr3ENsuGyJ3wyCgg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", + "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.3.tgz", - "integrity": "sha512-nB19eUx3Yhi1Vvv3yev5r+bqQixZprMtaoCs1brg9Efyl8Hto3tGaUoZ0Yb4Umn/gQCyoEGFfUxPLp1/8+Jvnw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", + "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.3", - "@webassemblyjs/helper-buffer": "1.8.3", - "@webassemblyjs/helper-wasm-bytecode": "1.8.3", - "@webassemblyjs/helper-wasm-section": "1.8.3", - "@webassemblyjs/wasm-gen": "1.8.3", - "@webassemblyjs/wasm-opt": "1.8.3", - "@webassemblyjs/wasm-parser": "1.8.3", - "@webassemblyjs/wast-printer": "1.8.3" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/helper-wasm-section": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-opt": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "@webassemblyjs/wast-printer": "1.8.5" } }, "@webassemblyjs/wasm-gen": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.3.tgz", - "integrity": "sha512-sDNmu2nLBJZ/huSzlJvd9IK8B1EjCsOl7VeMV9VJPmxKYgTJ47lbkSP+KAXMgZWGcArxmcrznqm7FrAPQ7vVGg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", + "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.3", - "@webassemblyjs/helper-wasm-bytecode": "1.8.3", - "@webassemblyjs/ieee754": "1.8.3", - "@webassemblyjs/leb128": "1.8.3", - "@webassemblyjs/utf8": "1.8.3" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" } }, "@webassemblyjs/wasm-opt": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.3.tgz", - "integrity": "sha512-j8lmQVFR+FR4/645VNgV4R/Jz8i50eaPAj93GZyd3EIJondVshE/D9pivpSDIXyaZt+IkCodlzOoZUE4LnQbeA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", + "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.3", - "@webassemblyjs/helper-buffer": "1.8.3", - "@webassemblyjs/wasm-gen": "1.8.3", - "@webassemblyjs/wasm-parser": "1.8.3" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5" } }, "@webassemblyjs/wasm-parser": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.3.tgz", - "integrity": "sha512-NBI3SNNtRoy4T/KBsRZCAWUzE9lI94RH2nneLwa1KKIrt/2zzcTavWg6oY05ArCbb/PZDk3OUi63CD1RYtN65w==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", + "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.3", - "@webassemblyjs/helper-api-error": "1.8.3", - "@webassemblyjs/helper-wasm-bytecode": "1.8.3", - "@webassemblyjs/ieee754": "1.8.3", - "@webassemblyjs/leb128": "1.8.3", - "@webassemblyjs/utf8": "1.8.3" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" } }, "@webassemblyjs/wast-parser": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.3.tgz", - "integrity": "sha512-gZPst4CNcmGtKC1eYQmgCx6gwQvxk4h/nPjfPBbRoD+Raw3Hs+BS3yhrfgyRKtlYP+BJ8LcY9iFODEQofl2qbg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", + "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.3", - "@webassemblyjs/floating-point-hex-parser": "1.8.3", - "@webassemblyjs/helper-api-error": "1.8.3", - "@webassemblyjs/helper-code-frame": "1.8.3", - "@webassemblyjs/helper-fsm": "1.8.3", + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/floating-point-hex-parser": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-code-frame": "1.8.5", + "@webassemblyjs/helper-fsm": "1.8.5", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.3.tgz", - "integrity": "sha512-DTA6kpXuHK4PHu16yAD9QVuT1WZQRT7079oIFFmFSjqjLWGXS909I/7kiLTn931mcj7wGsaUNungjwNQ2lGQ3Q==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", + "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.3", - "@webassemblyjs/wast-parser": "1.8.3", + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5", "@xtuc/long": "4.2.2" } }, @@ -1034,19 +1344,19 @@ "dev": true }, "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" } }, "acorn": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.0.tgz", - "integrity": "sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", "dev": true }, "acorn-dynamic-import": { @@ -1056,13 +1366,21 @@ "dev": true }, "acorn-globals": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz", - "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", + "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", "dev": true, "requires": { "acorn": "^6.0.1", "acorn-walk": "^6.0.1" + }, + "dependencies": { + "acorn": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "dev": true + } } }, "acorn-walk": { @@ -1080,10 +1398,9 @@ } }, "ajv": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", - "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", - "dev": true, + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", @@ -1174,9 +1491,9 @@ } }, "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", "dev": true }, "ansi-escapes": { @@ -1194,8 +1511,7 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "ansi-styles": { "version": "3.2.1", @@ -1271,99 +1587,98 @@ } }, "apollo-link": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.8.tgz", - "integrity": "sha512-lfzGRxhK9RmiH3HPFi7TIEBhhDY9M5a2ZDnllcfy5QDk7cCQHQ1WQArcw1FK0g1B+mV4Kl72DSrlvZHZJEolrA==", + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.11.tgz", + "integrity": "sha512-PQvRCg13VduLy3X/0L79M6uOpTh5iHdxnxYuo8yL7sJlWybKRJwsv4IcRBJpMFbChOOaHY7Og9wgPo6DLKDKDA==", "requires": { - "zen-observable-ts": "^0.8.15" + "apollo-utilities": "^1.2.1", + "ts-invariant": "^0.3.2", + "tslib": "^1.9.3", + "zen-observable-ts": "^0.8.18" + }, + "dependencies": { + "ts-invariant": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.3.tgz", + "integrity": "sha512-UReOKsrJFGC9tUblgSRWo+BsVNbEd77Cl6WiV/XpMlkifXwNIJbknViCucHvVZkXSC/mcWeRnIGdY7uprcwvdQ==", + "requires": { + "tslib": "^1.9.3" + } + } } }, "apollo-link-batch": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/apollo-link-batch/-/apollo-link-batch-1.1.9.tgz", - "integrity": "sha512-eZ89oTJQSHo8ND31DXll287UFzyqP3VUbESuJ8pgFBIgGUVA/V3unQP/72rLcVaEEwpl9kL4hWKyH4ZnukAUdg==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/apollo-link-batch/-/apollo-link-batch-1.1.12.tgz", + "integrity": "sha512-6NqLiB9tEGxRiyhtnX/7CPHkmFG0IXfEP7pC5kirhjV+4KxqBaWvJnJGKpGp7Owgdph7KJlV+9+niOKEkcwreg==", "requires": { - "apollo-link": "^1.2.8" + "apollo-link": "^1.2.11", + "tslib": "^1.9.3" } }, "apollo-link-batch-http": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/apollo-link-batch-http/-/apollo-link-batch-http-1.2.8.tgz", - "integrity": "sha512-sR7HK9bW0lWPjykOtpf5vy9p8eTGjd5lD0Os9qG+BOzQFy7TfMCHXdqgsCJK7391wxj3mhcZU4f55ZZZvrxqCQ==", + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/apollo-link-batch-http/-/apollo-link-batch-http-1.2.11.tgz", + "integrity": "sha512-f+KEdbP51I3AeEaBDW2lKS3eaPK/1IXaTM9F2moj02s1hgC/TzeUORRuUeOExW8ggXveW1Jzp6aYMJ2SQkZJyA==", "requires": { - "apollo-link": "^1.2.8", - "apollo-link-batch": "^1.1.9", - "apollo-link-http-common": "^0.2.10" + "apollo-link": "^1.2.11", + "apollo-link-batch": "^1.1.12", + "apollo-link-http-common": "^0.2.13", + "tslib": "^1.9.3" } }, "apollo-link-context": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/apollo-link-context/-/apollo-link-context-1.0.15.tgz", - "integrity": "sha512-CkUB0CaaNGCsiNxG6GImPSsXHL8f+lQZukl2TLdpDKao3EyCuPC9gSWvclUagwZ1TDnY8O+wJnNBDGymQiZTsA==", + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/apollo-link-context/-/apollo-link-context-1.0.17.tgz", + "integrity": "sha512-W5UUfHcrrlP5uqJs5X1zbf84AMXhPZGAqX/7AQDgR6wY/7//sMGfJvm36KDkpIeSOElztGtM9z6zdPN1NbT41Q==", "requires": { - "apollo-link": "^1.2.9", + "apollo-link": "^1.2.11", "tslib": "^1.9.3" - }, - "dependencies": { - "apollo-link": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.9.tgz", - "integrity": "sha512-ZLUwthOFZq4lxchQ2jeBfVqS/UDdcVmmh8aUw6Ar9awZH4r+RgkcDeu2ooFLUfodWE3mZr7wIZuYsBas/MaNVA==", - "requires": { - "apollo-utilities": "^1.2.1", - "ts-invariant": "^0.3.2", - "tslib": "^1.9.3", - "zen-observable-ts": "^0.8.16" - } - }, - "ts-invariant": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.2.tgz", - "integrity": "sha512-QsY8BCaRnHiB5T6iE4DPlJMAKEG3gzMiUco9FEt1jUXQf0XP6zi0idT0i0rMTu8A326JqNSDsmlkA9dRSh1TRg==", - "requires": { - "tslib": "^1.9.3" - } - }, - "zen-observable-ts": { - "version": "0.8.16", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.16.tgz", - "integrity": "sha512-pQl75N7qwgybKVsh6WFO+WwPRijeQ52Gn1vSf4uvPFXald9CbVQXLa5QrOPEJhdZiC+CD4quqOVqSG+Ptz5XLA==", - "requires": { - "tslib": "^1.9.3", - "zen-observable": "^0.8.0" - } - } } }, "apollo-link-dedup": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/apollo-link-dedup/-/apollo-link-dedup-1.0.15.tgz", - "integrity": "sha512-14/+Tg7ogcYVrvZa8C7uBQIvX2B/dCKSnojI41yDYGp/t2eWD5ITCWdgjhciXpi0Ij6z+NRyMEebACz3EOwm4w==", + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/apollo-link-dedup/-/apollo-link-dedup-1.0.18.tgz", + "integrity": "sha512-1rr54wyMTuqUmbWvcXbwduIcaCDcuIgU6MqQ599nAMuTrbSOXthGfoAD8BDTxBGQ9roVlM7ABP0VZVEWRoHWSg==", "requires": { - "apollo-link": "^1.2.8" + "apollo-link": "^1.2.11", + "tslib": "^1.9.3" } }, "apollo-link-error": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/apollo-link-error/-/apollo-link-error-1.1.7.tgz", - "integrity": "sha512-olPTKr3yFoavFHSXSLqC5QSWrRACN8TK3+E0pVL8uVR0zILJflUSCRb8HizKQmxZWtr9yM+D2gRLu9mStI8qTA==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/apollo-link-error/-/apollo-link-error-1.1.10.tgz", + "integrity": "sha512-itG5UV7mQqaalmRkuRsF0cUS4zW2ja8XCbxkMZnIEeN24X3yoJi5hpJeAaEkXf0KgYNsR0+rmtCQNruWyxDnZQ==", "requires": { - "apollo-link": "^1.2.8", - "apollo-link-http-common": "^0.2.10" + "apollo-link": "^1.2.11", + "apollo-link-http-common": "^0.2.13", + "tslib": "^1.9.3" } }, "apollo-link-http-common": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/apollo-link-http-common/-/apollo-link-http-common-0.2.10.tgz", - "integrity": "sha512-KY9nhpAurw3z48OIYV0sCZFXrzWp/wjECsveK+Q9GUhhSe1kEbbUjFfmi+qigg+iELgdp5V8ioRJhinl1vPojw==", - "requires": { - "apollo-link": "^1.2.8" - } - }, - "apollo-utilities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.2.1.tgz", - "integrity": "sha512-Zv8Udp9XTSFiN8oyXOjf6PMHepD4yxxReLsl6dPUy5Ths7jti3nmlBzZUOxuTWRwZn0MoclqL7RQ5UEJN8MAxg==", + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/apollo-link-http-common/-/apollo-link-http-common-0.2.13.tgz", + "integrity": "sha512-Uyg1ECQpTTA691Fwx5e6Rc/6CPSu4TB4pQRTGIpwZ4l5JDOQ+812Wvi/e3IInmzOZpwx5YrrOfXrtN8BrsDXoA==", + "requires": { + "apollo-link": "^1.2.11", + "ts-invariant": "^0.3.2", + "tslib": "^1.9.3" + }, + "dependencies": { + "ts-invariant": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.3.tgz", + "integrity": "sha512-UReOKsrJFGC9tUblgSRWo+BsVNbEd77Cl6WiV/XpMlkifXwNIJbknViCucHvVZkXSC/mcWeRnIGdY7uprcwvdQ==", + "requires": { + "tslib": "^1.9.3" + } + } + } + }, + "apollo-utilities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.2.1.tgz", + "integrity": "sha512-Zv8Udp9XTSFiN8oyXOjf6PMHepD4yxxReLsl6dPUy5Ths7jti3nmlBzZUOxuTWRwZn0MoclqL7RQ5UEJN8MAxg==", "requires": { "fast-json-stable-stringify": "^2.0.0", "ts-invariant": "^0.2.1", @@ -1371,38 +1686,38 @@ } }, "app-builder-bin": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-2.6.3.tgz", - "integrity": "sha512-JL8C41e6yGIchFsHP/q15aGNedAaUakLhkV6ER0Yxafx08sRnlDnlkAkEIKjX7edg/4i7swpGa6CBv1zX9GgCA==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-2.6.4.tgz", + "integrity": "sha512-wC9HYqiC1XqpunT/9y2VuF90KbarnIHL90Tv8BD3TITTgbVIdRTXAsvWvmaR/ImvAX0+l5Z3jZtXjdJ7Pw3bLQ==", "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==", + "version": "20.39.0", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-20.39.0.tgz", + "integrity": "sha512-lkxGyBrQwueYb3ViqHt5WjyzVVBQqXMXc7TF+JqkuuUWp5DF7SXAYZYd+rsR3gmCbdNxw4SPIEmWmm+I9LK2gw==", "dev": true, "requires": { "7zip-bin": "~4.1.0", - "app-builder-bin": "2.6.3", + "app-builder-bin": "2.6.4", "async-exit-hook": "^2.0.1", - "bluebird-lst": "^1.0.6", - "builder-util": "9.6.2", - "builder-util-runtime": "8.1.1", + "bluebird-lst": "^1.0.7", + "builder-util": "9.7.0", + "builder-util-runtime": "8.2.0", "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", + "electron-publish": "20.39.0", + "fs-extra-p": "^7.0.1", "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", + "lazy-val": "^1.0.4", "minimatch": "^3.0.4", - "normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", "plist": "^3.0.1", - "read-config-file": "3.2.1", + "read-config-file": "3.2.2", "sanitize-filename": "^1.6.1", "semver": "^5.6.0", "temp-file": "^3.3.2" @@ -1567,8 +1882,7 @@ "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" }, "array-flatten": { "version": "2.1.2", @@ -1607,7 +1921,6 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, "requires": { "safer-buffer": "~2.1.0" } @@ -1652,8 +1965,7 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "assign-symbols": { "version": "1.0.0", @@ -1668,15 +1980,17 @@ "dev": true }, "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "requires": { + "lodash": "^4.17.11" + } }, "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true }, "async-exit-hook": { @@ -1711,23 +2025,24 @@ "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, "babel-jest": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.1.0.tgz", - "integrity": "sha512-MLcagnVrO9ybQGLEfZUqnOzv36iQzU7Bj4elm39vCukumLVSfoX+tRy3/jW7lUKc7XdpRmB/jech6L/UCsSZjw==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.7.1.tgz", + "integrity": "sha512-GPnLqfk8Mtt0i4OemjWkChi73A3ALs4w2/QbG64uAj8b5mmwzxc7jbJVRZt8NJkxi6FopVHog9S3xX6UJKb2qg==", "dev": true, "requires": { + "@jest/transform": "^24.7.1", + "@jest/types": "^24.7.0", + "@types/babel__core": "^7.1.0", "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.1.0", + "babel-preset-jest": "^24.6.0", "chalk": "^2.4.2", "slash": "^2.0.0" }, @@ -1741,14 +2056,14 @@ } }, "babel-plugin-istanbul": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.1.tgz", - "integrity": "sha512-RNNVv2lsHAXJQsEJ5jonQwrJVWK8AcZpG1oxhnjCUaAjL7xahYLANhPUZbzEQHjKy1NMYUwn+0NPKQc8iSY4xQ==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.4.tgz", + "integrity": "sha512-dySz4VJMH+dpndj0wjJ8JPs/7i1TdSPb1nRrn56/92pKOF9VKC1FMFJmMXjzlGGusnCAqujP6PBCiKq0sVA+YQ==", "dev": true, "requires": { "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.0.0", - "test-exclude": "^5.0.0" + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" }, "dependencies": { "find-up": { @@ -1763,19 +2078,22 @@ } }, "babel-plugin-jest-hoist": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.1.0.tgz", - "integrity": "sha512-gljYrZz8w1b6fJzKcsfKsipSru2DU2DmQ39aB6nV3xQ0DDv3zpIzKGortA5gknrhNnPN8DweaEgrnZdmbGmhnw==", - "dev": true + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz", + "integrity": "sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==", + "dev": true, + "requires": { + "@types/babel__traverse": "^7.0.6" + } }, "babel-preset-jest": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.1.0.tgz", - "integrity": "sha512-FfNLDxFWsNX9lUmtwY7NheGlANnagvxq8LZdl5PKnVG3umP+S/g0XbVBfwtA4Ai3Ri/IMkWabBz3Tyk9wdspcw==", + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz", + "integrity": "sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==", "dev": true, "requires": { "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.1.0" + "babel-plugin-jest-hoist": "^24.6.0" } }, "balanced-match": { @@ -1855,7 +2173,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, "requires": { "tweetnacl": "^0.14.3" } @@ -1883,56 +2200,6 @@ "execa": "^0.7.0", "p-map-series": "^1.0.0", "tempfile": "^2.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } } }, "bin-check": { @@ -1943,27 +2210,39 @@ "requires": { "execa": "^0.7.0", "executable": "^4.1.0" + } + }, + "bin-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz", + "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "find-versions": "^3.0.0" }, "dependencies": { "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "lru-cache": "^4.0.1", + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "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": "^5.0.1", - "get-stream": "^3.0.0", + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", "is-stream": "^1.1.0", "npm-run-path": "^2.0.0", "p-finally": "^1.0.0", @@ -1972,39 +2251,22 @@ } }, "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "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": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "pump": "^3.0.0" } }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", "dev": true } } }, - "bin-version": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.0.0.tgz", - "integrity": "sha512-Ekhwm6AUiMbZ1LgVCNMkgjovpMR30FyQN74laAW9gs0NPjZR5gdY0ARNB0YsQG8GOme3CsHbxmeyq/7Ofq6QYQ==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "find-versions": "^3.0.0" - } - }, "bin-version-check": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz", @@ -2111,12 +2373,6 @@ } } }, - "import-lazy": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", - "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", - "dev": true - }, "p-cancelable": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", @@ -2165,9 +2421,9 @@ } }, "binary-extensions": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", - "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, "bl": { @@ -2222,18 +2478,18 @@ } }, "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", + "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==", "dev": true }, "bluebird-lst": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.6.tgz", - "integrity": "sha512-CBWFoPuUPpcvMUxfyr8DKdI5d4kjxFl1h39+VbKxP3KJWJHEsLtuT4pPLkjpxCGU6Ask21tvbnftWXdqIxYldQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.7.tgz", + "integrity": "sha512-5ix04IbXVIZ6nSRM4aZnwQfk40Td0D57WAl8LfhnICF6XwT4efCZYh0veOHvfDmgpbqE4ju5L5XEAMIcAe13Kw==", "dev": true, "requires": { - "bluebird": "^3.5.2" + "bluebird": "^3.5.3" } }, "bmp-js": { @@ -2275,6 +2531,15 @@ "ms": "2.0.0" } }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -2515,22 +2780,13 @@ } }, "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", + "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", "dev": true, "requires": { "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } + "ieee754": "^1.1.4" } }, "buffer-alloc": { @@ -2570,8 +2826,7 @@ "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, "buffer-indexof": { "version": "1.1.1", @@ -2586,18 +2841,18 @@ "dev": true }, "builder-util": { - "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==", + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-9.7.0.tgz", + "integrity": "sha512-QA2RxbaSKvaFVNGcYsjmlkTn03tcdPxgIxHCOgw38G7NK91QWc76RBY9+T1sU8BLVEZJ4qNRWx+pd5rG9tTi+Q==", "dev": true, "requires": { "7zip-bin": "~4.1.0", - "app-builder-bin": "2.6.3", - "bluebird-lst": "^1.0.6", - "builder-util-runtime": "^8.1.1", + "app-builder-bin": "2.6.4", + "bluebird-lst": "^1.0.7", + "builder-util-runtime": "^8.2.0", "chalk": "^2.4.2", "debug": "^4.1.1", - "fs-extra-p": "^7.0.0", + "fs-extra-p": "^7.0.1", "is-ci": "^2.0.0", "js-yaml": "^3.12.1", "source-map-support": "^0.5.10", @@ -2617,14 +2872,14 @@ } }, "builder-util-runtime": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.1.1.tgz", - "integrity": "sha512-+ieS4PMB33vVE2S3ZNWBEQJ1zKmAs/agrBdh7XadE1lKLjrH4aXYuOh9OOGdxqIRldhlhNBaF+yKMMEFOdNVig==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.2.0.tgz", + "integrity": "sha512-2Q3YrxANTrDs2NjSG5mbNGLPuUhPnSNYF9w5i4jWfHcNfQ3TgRrGXq4UfnkCiZVX8Axp4eAOSscaLLScKp/XLg==", "dev": true, "requires": { - "bluebird-lst": "^1.0.6", + "bluebird-lst": "^1.0.7", "debug": "^4.1.1", - "fs-extra-p": "^7.0.0", + "fs-extra-p": "^7.0.1", "sax": "^1.2.4" }, "dependencies": { @@ -2671,6 +2926,23 @@ "ssri": "^6.0.1", "unique-filename": "^1.1.1", "y18n": "^4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } } }, "cache-base": { @@ -2726,9 +2998,9 @@ "dev": true }, "callsites": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", - "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, "camel-case": { @@ -2744,26 +3016,24 @@ "camelcase": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" }, "camelcase-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, "requires": { "camelcase": "^2.0.0", "map-obj": "^1.0.0" } }, "capture-exit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz", - "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", "dev": true, "requires": { - "rsvp": "^3.3.3" + "rsvp": "^4.8.4" } }, "capture-stack-trace": { @@ -2775,8 +3045,7 @@ "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "caw": { "version": "2.0.1", @@ -2812,9 +3081,9 @@ } }, "chokidar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz", - "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", + "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", "dev": true, "requires": { "anymatch": "^2.0.0", @@ -2828,7 +3097,7 @@ "normalize-path": "^3.0.0", "path-is-absolute": "^1.0.0", "readdirp": "^2.2.1", - "upath": "^1.1.0" + "upath": "^1.1.1" } }, "chownr": { @@ -3008,8 +3277,7 @@ "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "collection-visit": { "version": "1.0.0", @@ -3063,28 +3331,30 @@ "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==" }, "colorspace": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.1.tgz", - "integrity": "sha512-pI3btWyiuz7Ken0BWh9Elzsmv2bM9AhA7psXib4anUXy/orfZ/E0MbQwhSOG/9L8hLlalqrU0UhOuqxW1YjmVw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", + "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", "requires": { "color": "3.0.x", "text-hex": "1.0.x" } }, "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "dev": true, + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { "delayed-stream": "~1.0.0" } }, "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "dev": true, + "requires": { + "graceful-readlink": ">= 1.0.0" + } }, "commondir": { "version": "1.0.1", @@ -3104,31 +3374,31 @@ "integrity": "sha512-tK69D7oNXXqUW3ZNo/z7NXTEz22TCF0pTE+YF9cxvaAM9XnkLo1fV621xCLrRR6aevJlKxExkss0vWqUCUpqdg==" }, "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, "compressible": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.16.tgz", - "integrity": "sha512-JQfEOdnI7dASwCuSPWIeVYwc/zMsu/+tRhoUvEfXz2gxOA2DNjmG5vhtFdBlhWPPGo+RdT9S3tgc/uH5qgDiiA==", + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", "dev": true, "requires": { - "mime-db": ">= 1.38.0 < 2" + "mime-db": ">= 1.40.0 < 2" } }, "compression": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", - "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "requires": { "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "~2.0.14", + "compressible": "~2.0.16", "debug": "2.6.9", - "on-headers": "~1.0.1", + "on-headers": "~1.0.2", "safe-buffer": "5.1.2", "vary": "~1.1.2" }, @@ -3160,7 +3430,6 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -3171,14 +3440,12 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -3193,7 +3460,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -3258,10 +3524,13 @@ "dev": true }, "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } }, "content-type": { "version": "1.0.4", @@ -3310,21 +3579,45 @@ "dev": true }, "copy-webpack-plugin": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.0.0.tgz", - "integrity": "sha512-iiDj+8nnZeW/i8vYJ3+ABSZkOefJnDYIGLojiZKKFDvf1wcEInABXH1+hN7axQMn04qvJxKjgVOee0e14XPtCg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.0.3.tgz", + "integrity": "sha512-PlZRs9CUMnAVylZq+vg2Juew662jWtwOXOqH4lbQD9ZFhRG9R7tVStOgHt21CBGVq7k5yIJaz8TXDLSjV+Lj8Q==", "dev": true, "requires": { - "cacache": "^11.3.1", - "find-cache-dir": "^2.0.0", + "cacache": "^11.3.2", + "find-cache-dir": "^2.1.0", + "glob-parent": "^3.1.0", "globby": "^7.1.1", - "is-glob": "^4.0.0", - "loader-utils": "^1.1.0", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", "minimatch": "^3.0.4", "normalize-path": "^3.0.0", - "p-limit": "^2.1.0", - "serialize-javascript": "^1.4.0", + "p-limit": "^2.2.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.7.0", "webpack-log": "^2.0.0" + }, + "dependencies": { + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "core-js": { @@ -3385,24 +3678,14 @@ } }, "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", + "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true - } } }, "crypto-browserify": { @@ -3431,33 +3714,42 @@ "dev": true }, "css-loader": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-2.1.0.tgz", - "integrity": "sha512-MoOu+CStsGrSt5K2OeZ89q3Snf+IkxRfAIt9aAKg4piioTrhtP1iEFPu+OVn3Ohz24FO6L+rw9UJxBILiSBw5Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-2.1.1.tgz", + "integrity": "sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==", "dev": true, "requires": { - "icss-utils": "^4.0.0", - "loader-utils": "^1.2.1", - "lodash": "^4.17.11", - "postcss": "^7.0.6", + "camelcase": "^5.2.0", + "icss-utils": "^4.1.0", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.14", "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^2.0.3", - "postcss-modules-scope": "^2.0.0", + "postcss-modules-local-by-default": "^2.0.6", + "postcss-modules-scope": "^2.1.0", "postcss-modules-values": "^2.0.0", "postcss-value-parser": "^3.3.0", "schema-utils": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } } }, "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", + "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", "dev": true, "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "boolbase": "^1.0.0", + "css-what": "^2.1.2", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" } }, "css-select-base-adapter": { @@ -3466,17 +3758,6 @@ "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", "dev": true }, - "css-selector-tokenizer": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", - "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", - "dev": true, - "requires": { - "cssesc": "^0.1.0", - "fastparse": "^1.1.1", - "regexpu-core": "^1.0.0" - } - }, "css-tree": { "version": "1.0.0-alpha.28", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", @@ -3500,9 +3781,9 @@ "dev": true }, "cssesc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, "csso": { @@ -3533,18 +3814,18 @@ "dev": true }, "cssstyle": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.1.tgz", - "integrity": "sha512-7DYm8qe+gPx/h77QlCyFmX80+fGaE/6A/Ekl0zaszYOubvySO2saYFdQ78P29D0UsULxFKCetDGNaNRUdSF+2A==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz", + "integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==", "dev": true, "requires": { "cssom": "0.3.x" } }, "csstype": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.2.tgz", - "integrity": "sha512-Rl7PvTae0pflc1YtxtKbiSqq20Ts6vpIYOD5WBafl4y123DyHUeLrRdQP66sQW8/6gmX8jrYJLXwNeMqYVJcow==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.4.tgz", + "integrity": "sha512-lAJUJP3M6HxFXbqtGRc0iZrdyeN+WzOWeY0q/VnFzI+kqVrYIzC7bWlKqCW7oCIdzoPkvfp82EVvrTlQ8zsWQg==", "dev": true }, "cuint": { @@ -3557,7 +3838,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, "requires": { "array-find-index": "^1.0.1" } @@ -3583,7 +3863,6 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -3629,8 +3908,7 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, "decode-uri-component": { "version": "0.2.0", @@ -3749,16 +4027,6 @@ "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", "dev": true }, - "get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - } - }, "yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -3780,8 +4048,7 @@ "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, "deep-is": { "version": "0.1.3", @@ -3790,23 +4057,73 @@ "dev": true }, "default-gateway": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-3.1.0.tgz", - "integrity": "sha512-MRhxv1cqdpKZh93zMFBkXcZfr2QFasrDlxjGa+M22Hv9EBmdWCccFe03KqSnkPLpYXlFhrR152kDX99S//3/Xw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", "dev": true, "requires": { "execa": "^1.0.0", - "idb-connector": "^1.1.8", "ip-regex": "^2.1.0" - } - }, - "default-require-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", - "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", - "dev": true, - "requires": { - "strip-bom": "^3.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + } + } + }, + "default-require-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", + "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", + "dev": true, + "requires": { + "strip-bom": "^3.0.0" }, "dependencies": { "strip-bom": { @@ -3817,19 +4134,18 @@ } } }, + "defer-to-connect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.0.2.tgz", + "integrity": "sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw==", + "dev": true + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "requires": { "object-keys": "^1.0.12" - }, - "dependencies": { - "object-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", - "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" - } } }, "define-property": { @@ -3874,17 +4190,18 @@ } }, "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", "dev": true, "requires": { + "@types/glob": "^7.1.1", "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" }, "dependencies": { "globby": { @@ -3909,9 +4226,9 @@ } }, "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true } } @@ -3984,9 +4301,9 @@ "dev": true }, "diff-sequences": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.0.0.tgz", - "integrity": "sha512-46OkIuVGBBnrC0soO/4LHu5LHGHx0uhP65OVz8XOrAJpqiCB2aVIuESvjI1F9oqebuvY8lekS1pt6TN7vt7qsw==", + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz", + "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==", "dev": true }, "diffie-hellman": { @@ -4001,11 +4318,12 @@ } }, "dir-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", "dev": true, "requires": { + "arrify": "^1.0.1", "path-type": "^3.0.0" }, "dependencies": { @@ -4027,30 +4345,19 @@ } }, "dmg-builder": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-6.5.4.tgz", - "integrity": "sha512-EaEkF8weXez3iAwgYffjcYfumauUh5x+BggMgn/IuihNIA5/WfzRAUR4wMq9aII2zwArlw+rIrX6ZHKbmtkQmA==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-6.6.0.tgz", + "integrity": "sha512-voodd3qdpdRiaciFZTfrFq/e82UPmUqSJq6R3Wc2Ql6XqXYLQcKo1h9rSZiivwls8PqE4Mk1IHTIOwmvJaq+MA==", "dev": true, "requires": { - "app-builder-lib": "~20.38.5", - "bluebird-lst": "^1.0.6", - "builder-util": "~9.6.2", - "fs-extra-p": "^7.0.0", + "app-builder-lib": "~20.39.0", + "bluebird-lst": "^1.0.7", + "builder-util": "~9.7.0", + "fs-extra-p": "^7.0.1", "iconv-lite": "^0.4.24", "js-yaml": "^3.12.1", "parse-color": "^1.0.0", "sanitize-filename": "^1.6.1" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } } }, "dns-equal": { @@ -4125,18 +4432,18 @@ } }, "domhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", - "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "dev": true, "requires": { "domelementtype": "1" } }, "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dev": true, "requires": { "dom-serializer": "0", @@ -4195,28 +4502,6 @@ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "dev": true, - "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - } - }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -4279,7 +4564,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -4426,10 +4710,9 @@ } }, "electron": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/electron/-/electron-4.0.6.tgz", - "integrity": "sha512-r2ow/EmDibjoCNJp35mB1CcPs2xBF9fp2eoWuUOJmpVQyzdba6EnqsSD1BxwXzF9vQ5WkQ2UbfXBIvpomrdioQ==", - "dev": true, + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-5.0.1.tgz", + "integrity": "sha512-8KksyhAPcpXVeO8ViVGxfZAuf8yEVBCtV0h/lMBD8VFbCQ9icej1K5csCFAGirbZbqOz5IdsBZX9Gpb9n4RCag==", "requires": { "@types/node": "^10.12.18", "electron-download": "^4.1.0", @@ -4437,39 +4720,37 @@ }, "dependencies": { "@types/node": { - "version": "10.12.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.27.tgz", - "integrity": "sha512-e9wgeY6gaY21on3ve0xAjgBVjGDWq/xUteK0ujsE53bUoxycMkqfnkUgMt6ffZtykZ5X12Mg3T7Pw4TRCObDKg==", - "dev": true + "version": "10.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.6.tgz", + "integrity": "sha512-Fvm24+u85lGmV4hT5G++aht2C5I4Z4dYlWZIh62FAfFO/TfzXtPpoLI6I7AuBWkIFqZCnhFOoTT7RjjaIL5Fjg==" } } }, "electron-builder": { - "version": "20.38.5", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-20.38.5.tgz", - "integrity": "sha512-p88IDHhH2J4hA6KwRBJY+OfVZuFtFIShY3Uh/TwYAfbX0v1RhKZytuGdO8sty2zcWxDYX74xDBv+X9oN6qEIRQ==", + "version": "20.39.0", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-20.39.0.tgz", + "integrity": "sha512-50SNZ/G+iE9MpTwxzeHt1Cqg8jZKeFLuJ9wubR4e/8VIzAe0ERUmwAQw+77UrlwXZD/PKKoYblc0Sr08Vm4exg==", "dev": true, "requires": { - "app-builder-lib": "20.38.5", - "bluebird-lst": "^1.0.6", - "builder-util": "9.6.2", - "builder-util-runtime": "8.1.1", + "app-builder-lib": "20.39.0", + "bluebird-lst": "^1.0.7", + "builder-util": "9.7.0", + "builder-util-runtime": "8.2.0", "chalk": "^2.4.2", - "dmg-builder": "6.5.4", - "fs-extra-p": "^7.0.0", + "dmg-builder": "6.6.0", + "fs-extra-p": "^7.0.1", "is-ci": "^2.0.0", - "lazy-val": "^1.0.3", - "read-config-file": "3.2.1", + "lazy-val": "^1.0.4", + "read-config-file": "3.2.2", "sanitize-filename": "^1.6.1", "update-notifier": "^2.5.0", - "yargs": "^12.0.5" + "yargs": "^13.2.1" } }, "electron-download": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-4.1.1.tgz", "integrity": "sha512-FjEWG9Jb/ppK/2zToP+U5dds114fM1ZOJqMAR4aXXL5CvyPE9fiqBK/9YcwC9poIFQTEJk/EM/zyRwziziRZrg==", - "dev": true, "requires": { "debug": "^3.0.0", "env-paths": "^1.0.0", @@ -4486,7 +4767,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -4496,8 +4776,7 @@ "semver": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" } } }, @@ -4555,24 +4834,24 @@ "integrity": "sha1-L8cLzlP7cy7IF2m9bEjhDEClUao=" }, "electron-publish": { - "version": "20.38.5", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-20.38.5.tgz", - "integrity": "sha512-EhdPm6t0nKDfa0r3KjV1kSFcz03VrzgJRv7v5nHkkpQZB6OSmDNlHq7k66NBwQhPK3i4CK+uvehljZAP28vbCA==", + "version": "20.39.0", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-20.39.0.tgz", + "integrity": "sha512-PWrGUru994CSmtsA56GnjyLB3EnIS3zyEmrW0hDXtwuctZLGMnrxjK/7WEORYkgTQ/GufD5b/8T05Q2Kr42nqQ==", "dev": true, "requires": { - "bluebird-lst": "^1.0.6", - "builder-util": "~9.6.2", - "builder-util-runtime": "^8.1.1", + "bluebird-lst": "^1.0.7", + "builder-util": "~9.7.0", + "builder-util-runtime": "^8.2.0", "chalk": "^2.4.2", - "fs-extra-p": "^7.0.0", - "lazy-val": "^1.0.3", + "fs-extra-p": "^7.0.1", + "lazy-val": "^1.0.4", "mime": "^2.4.0" }, "dependencies": { "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.2.tgz", + "integrity": "sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg==", "dev": true } } @@ -4592,6 +4871,12 @@ "minimalistic-crypto-utils": "^1.0.0" } }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", @@ -4649,8 +4934,7 @@ "env-paths": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz", - "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=", - "dev": true + "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=" }, "env-variable": { "version": "0.0.5", @@ -4670,7 +4954,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, "requires": { "is-arrayish": "^0.2.1" } @@ -4686,13 +4969,6 @@ "is-callable": "^1.1.4", "is-regex": "^1.0.4", "object-keys": "^1.0.12" - }, - "dependencies": { - "object-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", - "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" - } } }, "es-to-primitive": { @@ -4706,10 +4982,9 @@ } }, "es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", - "dev": true + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", + "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==" }, "es6-promisify": { "version": "5.0.0", @@ -4717,13 +4992,6 @@ "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "requires": { "es6-promise": "^4.0.3" - }, - "dependencies": { - "es6-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", - "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==" - } } }, "escape-html": { @@ -4767,9 +5035,9 @@ } }, "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "requires": { "esrecurse": "^4.1.0", @@ -4810,9 +5078,9 @@ "dev": true }, "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", "dev": true }, "events": { @@ -4853,84 +5121,41 @@ "tempfile": "^2.0.0" }, "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true } } }, "exec-sh": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", - "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", - "dev": true, - "requires": { - "merge": "^1.2.0" - } + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", + "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==", + "dev": true }, "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", "is-stream": "^1.1.0", "npm-run-path": "^2.0.0", "p-finally": "^1.0.0", "signal-exit": "^3.0.0", "strip-eof": "^1.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + } } }, "executable": { @@ -5014,16 +5239,17 @@ } }, "expect": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.1.0.tgz", - "integrity": "sha512-lVcAPhaYkQcIyMS+F8RVwzbm1jro20IG8OkvxQ6f1JfqhVZyyudCwYogQ7wnktlf14iF3ii7ArIUO/mqvrW9Gw==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.7.1.tgz", + "integrity": "sha512-mGfvMTPduksV3xoI0xur56pQsg2vJjNf5+a+bXOjqCkiCBbmCayrBbHS/75y9K430cfqyocPr2ZjiNiRx4SRKw==", "dev": true, "requires": { + "@jest/types": "^24.7.0", "ansi-styles": "^3.2.0", - "jest-get-type": "^24.0.0", - "jest-matcher-utils": "^24.0.0", - "jest-message-util": "^24.0.0", - "jest-regex-util": "^24.0.0" + "jest-get-type": "^24.3.0", + "jest-matcher-utils": "^24.7.0", + "jest-message-util": "^24.7.1", + "jest-regex-util": "^24.3.0" } }, "express": { @@ -5070,11 +5296,16 @@ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -5109,8 +5340,7 @@ "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "extend-shallow": { "version": "3.0.2", @@ -5202,7 +5432,6 @@ "version": "1.6.7", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", - "dev": true, "requires": { "concat-stream": "1.6.2", "debug": "2.6.9", @@ -5222,22 +5451,19 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "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 + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, "fast-glob": { "version": "2.2.6", @@ -5275,12 +5501,6 @@ "integrity": "sha1-XFVDRisiru79NtBbNOUceMuG0xM=", "dev": true }, - "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", - "dev": true - }, "faye-websocket": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", @@ -5303,7 +5523,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "dev": true, "requires": { "pend": "~1.2.0" } @@ -5340,9 +5559,9 @@ } }, "file-type": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.8.0.tgz", - "integrity": "sha512-287YScp3cpRWzhM+/E+A85O4FJi4dHus0eA6eBUzkRc08d/JAwqeczU/nwLstRuzzq/S7TqvQg9mhv7xVsdINQ==", + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", + "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==", "dev": true }, "filename-reserved-regex": { @@ -5428,21 +5647,44 @@ } }, "find-cache-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz", - "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "requires": { "commondir": "^1.0.1", - "make-dir": "^1.0.0", + "make-dir": "^2.0.0", "pkg-dir": "^3.0.0" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + } } }, "find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, "requires": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" @@ -5452,7 +5694,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, "requires": { "pinkie-promise": "^2.0.0" } @@ -5460,19 +5701,19 @@ } }, "find-versions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.0.0.tgz", - "integrity": "sha512-IUvtItVFNmTtKoB0PRfbkR0zR9XMG5rWNO3qI1S8L0zdv+v2gqzM0pAunloxqbqAfT8w7bg8n/5gHzTXte8H5A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.1.0.tgz", + "integrity": "sha512-NCTfNiVzeE/xL+roNDffGuRbrWI6atI18lTJ22vKp7rs2OhYzMK3W1dIdO2TUndH/QMcacM4d1uWwgcZcHK69Q==", "dev": true, "requires": { - "array-uniq": "^2.0.0", + "array-uniq": "^2.1.0", "semver-regex": "^2.0.0" }, "dependencies": { "array-uniq": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-2.0.0.tgz", - "integrity": "sha512-O3QZEr+3wDj7otzF7PjNGs6CA3qmYMLvt5xGkjY/V0VxS+ovvqVo/5wKM/OVOAyuX4DTh9H31zE/yKtO66hTkg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-2.1.0.tgz", + "integrity": "sha512-bdHxtev7FN6+MXI1YFW0Q8mQ8dTJc2S8AMfju+ZR77pbg2yAdVyDlwkaUI7Har0LyOMRFPHrJ9lYdyjZZswdlQ==", "dev": true } } @@ -5578,17 +5819,15 @@ "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "requires": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "1.0.6", "mime-types": "^2.1.12" } }, @@ -5678,26 +5917,13 @@ } }, "fs-extra-p": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-7.0.0.tgz", - "integrity": "sha512-5tg5jBOd0xIXjwj4PDnafOXL5TyPVzjxLby4DPKev53wurEXp7IsojBaD4Lj5M5w7jxw0pbkEU0fFEPmcKoMnA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-7.0.1.tgz", + "integrity": "sha512-yhd2OV0HnHt2oitlp+X9hl2ReX4X/7kQeL7/72qzPHTZj5eUPGzAKOvEglU02Fa1OeG2rSy/aKB4WGVaLiF8tw==", "dev": true, "requires": { - "bluebird-lst": "^1.0.6", - "fs-extra": "^7.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } + "bluebird-lst": "^1.0.7", + "fs-extra": "^7.0.1" } }, "fs-write-stream-atomic": { @@ -5719,14 +5945,14 @@ "dev": true }, "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", "dev": true, "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" }, "dependencies": { "abbrev": { @@ -5804,12 +6030,12 @@ "optional": true }, "debug": { - "version": "2.6.9", + "version": "4.1.1", "bundled": true, "dev": true, "optional": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "deep-extend": { @@ -5980,24 +6206,24 @@ } }, "ms": { - "version": "2.0.0", + "version": "2.1.1", "bundled": true, "dev": true, "optional": true }, "needle": { - "version": "2.2.4", + "version": "2.3.0", "bundled": true, "dev": true, "optional": true, "requires": { - "debug": "^2.1.2", + "debug": "^4.1.0", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.10.3", + "version": "0.12.0", "bundled": true, "dev": true, "optional": true, @@ -6025,13 +6251,13 @@ } }, "npm-bundled": { - "version": "1.0.5", + "version": "1.0.6", "bundled": true, "dev": true, "optional": true }, "npm-packlist": { - "version": "1.2.0", + "version": "1.4.1", "bundled": true, "dev": true, "optional": true, @@ -6170,7 +6396,7 @@ "optional": true }, "semver": { - "version": "5.6.0", + "version": "5.7.0", "bundled": true, "dev": true, "optional": true @@ -6315,9 +6541,9 @@ "dev": true }, "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "get-proxy": { @@ -6332,16 +6558,16 @@ "get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" }, "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", "dev": true, "requires": { - "pump": "^3.0.0" + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" } }, "get-value": { @@ -6354,7 +6580,6 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -6417,14 +6642,6 @@ "requires": { "min-document": "^2.19.0", "process": "~0.5.1" - }, - "dependencies": { - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", - "dev": true - } } }, "global-dirs": { @@ -6461,19 +6678,20 @@ } }, "globals": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", - "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "globby": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", - "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", "dev": true, "requires": { "array-union": "^1.0.1", - "dir-glob": "^2.0.0", + "dir-glob": "2.0.0", + "fast-glob": "^2.0.2", "glob": "^7.1.2", "ignore": "^3.3.5", "pify": "^3.0.0", @@ -6500,22 +6718,25 @@ } }, "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", "dev": true, "requires": { - "create-error-class": "^3.0.0", + "decompress-response": "^3.2.0", "duplexer3": "^0.1.4", "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", + "is-plain-obj": "^1.1.0", "is-retry-allowed": "^1.0.0", "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", "safe-buffer": "^5.0.1", "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" }, "dependencies": { "get-stream": { @@ -6538,9 +6759,9 @@ "dev": true }, "graphql": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.1.1.tgz", - "integrity": "sha512-C5zDzLqvfPAgTtP8AUPIt9keDabrdRAqSWjj2OPRKrKxI9Fb65I36s1uCs1UUBFnSWTdO7hyHi7z1ZbwKMKF6Q==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.2.1.tgz", + "integrity": "sha512-2PL1UbvKeSjy/lUeJqHk+eR9CvuErXoCNwJI4jm3oNFEeY+9ELqHNKO1ZuSxAkasPkpWbmT/iMRMFxd3cEL3tQ==", "requires": { "iterall": "^1.2.2" } @@ -6563,26 +6784,17 @@ "dev": true }, "handlebars": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz", - "integrity": "sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", + "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", "dev": true, "requires": { - "async": "^2.5.0", + "neo-async": "^2.6.0", "optimist": "^0.6.1", "source-map": "^0.6.1", "uglify-js": "^3.1.4" }, "dependencies": { - "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "dev": true, - "requires": { - "lodash": "^4.17.11" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -6594,14 +6806,12 @@ "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, "requires": { "ajv": "^6.5.5", "har-schema": "^2.0.0" @@ -6726,9 +6936,9 @@ } }, "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, "requires": { "parse-passwd": "^1.0.0" @@ -6737,8 +6947,7 @@ "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 + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" }, "hpack.js": { "version": "2.1.6", @@ -6818,6 +7027,14 @@ "param-case": "2.1.x", "relateurl": "0.2.x", "uglify-js": "3.4.x" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + } } }, "html-webpack-plugin": { @@ -6862,36 +7079,37 @@ } }, "htmlparser2": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", - "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "dev": true, "requires": { - "domelementtype": "1", - "domhandler": "2.1", - "domutils": "1.1", - "readable-stream": "1.0" + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" }, "dependencies": { - "domutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", - "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", + "readable-stream": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", + "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", "dev": true, "requires": { - "domelementtype": "1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "string_decoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", + "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "safe-buffer": "~5.1.0" } } } @@ -6953,7 +7171,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -6976,9 +7193,9 @@ } }, "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -6990,644 +7207,46 @@ "dev": true }, "icss-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.0.0.tgz", - "integrity": "sha512-bA/xGiwWM17qjllIs9X/y0EjsB7e0AV08F3OL8UPsoNkNRibIuu8f1eKTnQ8QO1DteKKTxTUAn+IEWUToIwGOA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.0.tgz", + "integrity": "sha512-3DEun4VOeMvSczifM3F2cKQrDQ5Pj6WKhkOq6HD4QTnDUAq8MQRxy5TX6Sy1iY6WPBe4gQ3p5vTECjbIkglkkQ==", "dev": true, "requires": { - "postcss": "^7.0.5" + "postcss": "^7.0.14" } }, - "idb-connector": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/idb-connector/-/idb-connector-1.1.8.tgz", - "integrity": "sha512-x+NIYJYmBnmFSbALM0GniG6idlEx3z+wnWqe+nKn948+sjY3TRzMmdG2ZqcBrlV/AsOTl3CidCIgdqRnxL1jiA==", + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "imagemin": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-6.1.0.tgz", + "integrity": "sha512-8ryJBL1CN5uSHpiBMX0rJw79C9F9aJqMnjGnrd/1CafegpNuA81RBAAru/jQQEOWlOJJlpRnlcVFF6wq+Ist0A==", "dev": true, - "optional": true, "requires": { - "node-addon-api": "^1.2.0", - "node-pre-gyp": "^0.11.0" + "file-type": "^10.7.0", + "globby": "^8.0.1", + "make-dir": "^1.0.0", + "p-pipe": "^1.1.0", + "pify": "^4.0.1", + "replace-ext": "^1.0.0" }, "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.11.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - }, - "imagemin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-6.1.0.tgz", - "integrity": "sha512-8ryJBL1CN5uSHpiBMX0rJw79C9F9aJqMnjGnrd/1CafegpNuA81RBAAru/jQQEOWlOJJlpRnlcVFF6wq+Ist0A==", - "dev": true, - "requires": { - "file-type": "^10.7.0", - "globby": "^8.0.1", - "make-dir": "^1.0.0", - "p-pipe": "^1.1.0", - "pify": "^4.0.1", - "replace-ext": "^1.0.0" - }, - "dependencies": { - "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "path-type": "^3.0.0" - } - }, - "globby": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", - "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "dir-glob": "2.0.0", - "fast-glob": "^2.0.2", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -7663,9 +7282,9 @@ "integrity": "sha512-45jheDbc3Kr5Cw8EtDD+4woGRUV0utIrJBZT8XH0TPZRfm8tzT0/sLGGzyyCCFqFMG5Pv5Igf3WY/arn6+8V9Q==" }, "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", + "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", "dev": true }, "import-local": { @@ -7694,11 +7313,16 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, "requires": { "repeating": "^2.0.0" } }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", @@ -7723,25 +7347,16 @@ "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "internal-ip": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.1.0.tgz", - "integrity": "sha512-vMbCq5+5xM6cQ5Zpzw2fPirS3uOAabk0ep+plu8P659c7XuvaVN3G//utF0AWboZIKKL5YDpti7PO51m/wfomw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", "dev": true, "requires": { - "default-gateway": "^3.1.0", + "default-gateway": "^4.2.0", "ipaddr.js": "^1.9.0" - }, - "dependencies": { - "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", - "dev": true - } } }, "interpret": { @@ -7758,14 +7373,6 @@ "requires": { "from2": "^2.1.1", "p-is-promise": "^1.1.0" - }, - "dependencies": { - "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", - "dev": true - } } }, "invariant": { @@ -7790,15 +7397,15 @@ "dev": true }, "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", + "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=", "dev": true }, "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", "dev": true }, "is-accessor-descriptor": { @@ -7824,8 +7431,7 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, "is-binary-path": { "version": "1.0.1", @@ -7933,7 +7539,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -7942,7 +7547,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -7954,15 +7558,15 @@ "dev": true }, "is-generator-fn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.0.0.tgz", - "integrity": "sha512-elzyIdM7iKoFHzcrndIqjYomImhxrFRnGP3galODoII4TB9gI7mZ+FnlLQmmjf27SxHS2gKEeyhX5/+YRS6H9g==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true }, "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -8023,18 +7627,29 @@ "dev": true }, "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.1.0.tgz", + "integrity": "sha512-Sc5j3/YnM8tDeyCsVeKlm/0p95075DyLmDEIkSgQ7mXkrOX+uTCtmQFm0CYzVyJwcCCmO3k8qfJt17SxQwB5Zw==", "dev": true }, "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", "dev": true, "requires": { - "is-path-inside": "^1.0.0" + "is-path-inside": "^2.1.0" + }, + "dependencies": { + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + } } }, "is-path-inside": { @@ -8106,14 +7721,12 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" }, "is-windows": { "version": "1.0.2", @@ -8130,8 +7743,7 @@ "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, "isbinaryfile": { "version": "4.0.0", @@ -8154,90 +7766,116 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "istanbul-api": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.1.1.tgz", - "integrity": "sha512-kVmYrehiwyeBAk/wE71tW6emzLiHGjYIiDrc8sfyty4F8M02/lrgXSm+R1kXysmF20zArvmZXjlE/mg24TVPJw==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.1.6.tgz", + "integrity": "sha512-x0Eicp6KsShG1k1rMgBAi/1GgY7kFGEBwQpw3PXGEmu+rBcBNhqU8g2DgY9mlepAsLPzrzrbqSgCGANnki4POA==", "dev": true, "requires": { - "async": "^2.6.1", - "compare-versions": "^3.2.1", + "async": "^2.6.2", + "compare-versions": "^3.4.0", "fileset": "^2.0.3", - "istanbul-lib-coverage": "^2.0.3", - "istanbul-lib-hook": "^2.0.3", - "istanbul-lib-instrument": "^3.1.0", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.2", - "istanbul-reports": "^2.1.1", - "js-yaml": "^3.12.0", - "make-dir": "^1.3.0", + "istanbul-lib-coverage": "^2.0.5", + "istanbul-lib-hook": "^2.0.7", + "istanbul-lib-instrument": "^3.3.0", + "istanbul-lib-report": "^2.0.8", + "istanbul-lib-source-maps": "^3.0.6", + "istanbul-reports": "^2.2.4", + "js-yaml": "^3.13.1", + "make-dir": "^2.1.0", "minimatch": "^3.0.4", "once": "^1.4.0" }, "dependencies": { - "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "lodash": "^4.17.11" + "pify": "^4.0.1", + "semver": "^5.6.0" } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true } } }, "istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true }, "istanbul-lib-hook": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.3.tgz", - "integrity": "sha512-CLmEqwEhuCYtGcpNVJjLV1DQyVnIqavMLFHV/DP+np/g3qvdxu3gsPqYoJMXm15sN84xOlckFB3VNvRbf5yEgA==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", + "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", "dev": true, "requires": { "append-transform": "^1.0.0" } }, "istanbul-lib-instrument": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.1.0.tgz", - "integrity": "sha512-ooVllVGT38HIk8MxDj/OIHXSYvH+1tq/Vb38s8ixt9GoJadXska4WkGY+0wkmtYCZNYtaARniH/DixUGGLZ0uA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", "dev": true, "requires": { - "@babel/generator": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "istanbul-lib-coverage": "^2.0.3", - "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true - } + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" } }, "istanbul-lib-report": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.4.tgz", - "integrity": "sha512-sOiLZLAWpA0+3b5w5/dq0cjm2rrNdAfHWaGhmn7XEFW6X++IV9Ohn+pnELAl9K3rfpaeBfbmH9JU5sejacdLeA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", "dev": true, "requires": { - "istanbul-lib-coverage": "^2.0.3", - "make-dir": "^1.3.0", - "supports-color": "^6.0.0" + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" }, "dependencies": { + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + }, "supports-color": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", @@ -8250,15 +7888,15 @@ } }, "istanbul-lib-source-maps": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.2.tgz", - "integrity": "sha512-JX4v0CiKTGp9fZPmoxpu9YEkPbEqCqBbO3403VabKjH+NRXo72HafD5UgnjTEqHL2SAjaZK1XDuDOkn6I5QVfQ==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", "dev": true, "requires": { "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.3", - "make-dir": "^1.3.0", - "rimraf": "^2.6.2", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", "source-map": "^0.6.1" }, "dependencies": { @@ -8271,6 +7909,28 @@ "ms": "^2.1.1" } }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -8280,12 +7940,12 @@ } }, "istanbul-reports": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.1.1.tgz", - "integrity": "sha512-FzNahnidyEPBCI0HcufJoSEoKykesRlFcSzQqjH9x0+LC8tnnE/p/90PBLu8iZTxr8yYZNyTtiAujUqyN+CIxw==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.4.tgz", + "integrity": "sha512-QCHGyZEK0bfi9GR215QSm+NJwFKEShbtc7tfbUdLAEzn3kKhLDDZqvljn8rPZM9v8CEOhzL1nlYoO4r1ryl67w==", "dev": true, "requires": { - "handlebars": "^4.1.0" + "handlebars": "^4.1.2" } }, "isurl": { @@ -8304,241 +7964,349 @@ "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" }, "jest": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.1.0.tgz", - "integrity": "sha512-+q91L65kypqklvlRFfXfdzUKyngQLOcwGhXQaLmVHv+d09LkNXuBuGxlofTFW42XMzu3giIcChchTsCNUjQ78A==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.7.1.tgz", + "integrity": "sha512-AbvRar5r++izmqo5gdbAjTeA6uNRGoNRuj5vHB0OnDXo2DXWZJVuaObiGgtlvhKb+cWy2oYbQSfxv7Q7GjnAtA==", "dev": true, "requires": { "import-local": "^2.0.0", - "jest-cli": "^24.1.0" + "jest-cli": "^24.7.1" }, "dependencies": { "ansi-regex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", - "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, "jest-cli": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.1.0.tgz", - "integrity": "sha512-U/iyWPwOI0T1CIxVLtk/2uviOTJ/OiSWJSe8qt6X1VkbbgP+nrtLJlmT9lPBe4lK78VNFJtrJ7pttcNv/s7yCw==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.7.1.tgz", + "integrity": "sha512-32OBoSCVPzcTslGFl6yVCMzB2SqX3IrWwZCY5mZYkb0D2WsogmU3eV2o8z7+gRQa4o4sZPX/k7GU+II7CxM6WQ==", "dev": true, "requires": { - "ansi-escapes": "^3.0.0", + "@jest/core": "^24.7.1", + "@jest/test-result": "^24.7.1", + "@jest/types": "^24.7.0", "chalk": "^2.0.1", "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.1.15", "import-local": "^2.0.0", "is-ci": "^2.0.0", - "istanbul-api": "^2.0.8", - "istanbul-lib-coverage": "^2.0.2", - "istanbul-lib-instrument": "^3.0.1", - "istanbul-lib-source-maps": "^3.0.1", - "jest-changed-files": "^24.0.0", - "jest-config": "^24.1.0", - "jest-environment-jsdom": "^24.0.0", - "jest-get-type": "^24.0.0", - "jest-haste-map": "^24.0.0", - "jest-message-util": "^24.0.0", - "jest-regex-util": "^24.0.0", - "jest-resolve-dependencies": "^24.1.0", - "jest-runner": "^24.1.0", - "jest-runtime": "^24.1.0", - "jest-snapshot": "^24.1.0", - "jest-util": "^24.0.0", - "jest-validate": "^24.0.0", - "jest-watcher": "^24.0.0", - "jest-worker": "^24.0.0", - "micromatch": "^3.1.10", - "node-notifier": "^5.2.1", - "p-each-series": "^1.0.0", - "pirates": "^4.0.0", + "jest-config": "^24.7.1", + "jest-util": "^24.7.1", + "jest-validate": "^24.7.0", "prompts": "^2.0.1", - "realpath-native": "^1.0.0", - "rimraf": "^2.5.4", - "slash": "^2.0.0", - "string-length": "^2.0.0", - "strip-ansi": "^5.0.0", - "which": "^1.2.12", + "realpath-native": "^1.1.0", "yargs": "^12.0.2" } }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, + "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": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", - "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "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" + } + }, + "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": { - "ansi-regex": "^4.0.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } }, "jest-changed-files": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.0.0.tgz", - "integrity": "sha512-nnuU510R9U+UX0WNb5XFEcsrMqriSiRLeO9KWDFgPrpToaQm60prfQYpxsXigdClpvNot5bekDY440x9dNGnsQ==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.7.0.tgz", + "integrity": "sha512-33BgewurnwSfJrW7T5/ZAXGE44o7swLslwh8aUckzq2e17/2Os1V0QU506ZNik3hjs8MgnEMKNkcud442NCDTw==", "dev": true, "requires": { + "@jest/types": "^24.7.0", "execa": "^1.0.0", "throat": "^4.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + } } }, "jest-config": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.1.0.tgz", - "integrity": "sha512-FbbRzRqtFC6eGjG5VwsbW4E5dW3zqJKLWYiZWhB0/4E5fgsMw8GODLbGSrY5t17kKOtCWb/Z7nsIThRoDpuVyg==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.7.1.tgz", + "integrity": "sha512-8FlJNLI+X+MU37j7j8RE4DnJkvAghXmBWdArVzypW6WxfGuxiL/CCkzBg0gHtXhD2rxla3IMOSUAHylSKYJ83g==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "babel-jest": "^24.1.0", + "@jest/test-sequencer": "^24.7.1", + "@jest/types": "^24.7.0", + "babel-jest": "^24.7.1", "chalk": "^2.0.1", "glob": "^7.1.1", - "jest-environment-jsdom": "^24.0.0", - "jest-environment-node": "^24.0.0", - "jest-get-type": "^24.0.0", - "jest-jasmine2": "^24.1.0", - "jest-regex-util": "^24.0.0", - "jest-resolve": "^24.1.0", - "jest-util": "^24.0.0", - "jest-validate": "^24.0.0", + "jest-environment-jsdom": "^24.7.1", + "jest-environment-node": "^24.7.1", + "jest-get-type": "^24.3.0", + "jest-jasmine2": "^24.7.1", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.7.1", + "jest-util": "^24.7.1", + "jest-validate": "^24.7.0", "micromatch": "^3.1.10", - "pretty-format": "^24.0.0", - "realpath-native": "^1.0.2" + "pretty-format": "^24.7.0", + "realpath-native": "^1.1.0" } }, "jest-diff": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.0.0.tgz", - "integrity": "sha512-XY5wMpRaTsuMoU+1/B2zQSKQ9RdE9gsLkGydx3nvApeyPijLA8GtEvIcPwISRCer+VDf9W1mStTYYq6fPt8ryA==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.7.0.tgz", + "integrity": "sha512-ULQZ5B1lWpH70O4xsANC4tf4Ko6RrpwhE3PtG6ERjMg1TiYTC2Wp4IntJVGro6a8HG9luYHhhmF4grF0Pltckg==", "dev": true, "requires": { + "@jest/types": "^24.7.0", "chalk": "^2.0.1", - "diff-sequences": "^24.0.0", - "jest-get-type": "^24.0.0", - "pretty-format": "^24.0.0" + "diff-sequences": "^24.3.0", + "jest-get-type": "^24.3.0", + "pretty-format": "^24.7.0" } }, "jest-docblock": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.0.0.tgz", - "integrity": "sha512-KfAKZ4SN7CFOZpWg4i7g7MSlY0M+mq7K0aMqENaG2vHuhC9fc3vkpU/iNN9sOus7v3h3Y48uEjqz3+Gdn2iptA==", + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz", + "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==", "dev": true, "requires": { "detect-newline": "^2.1.0" } }, "jest-each": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.0.0.tgz", - "integrity": "sha512-gFcbY4Cu55yxExXMkjrnLXov3bWO3dbPAW7HXb31h/DNWdNc/6X8MtxGff8nh3/MjkF9DpVqnj0KsPKuPK0cpA==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.7.1.tgz", + "integrity": "sha512-4fsS8fEfLa3lfnI1Jw6NxjhyRTgfpuOVTeUZZFyVYqeTa4hPhr2YkToUhouuLTrL2eMGOfpbdMyRx0GQ/VooKA==", "dev": true, "requires": { "chalk": "^2.0.1", - "jest-get-type": "^24.0.0", - "jest-util": "^24.0.0", - "pretty-format": "^24.0.0" + "jest-get-type": "^24.3.0", + "jest-util": "^24.7.1", + "pretty-format": "^24.7.0" } }, "jest-environment-jsdom": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.0.0.tgz", - "integrity": "sha512-1YNp7xtxajTRaxbylDc2pWvFnfDTH5BJJGyVzyGAKNt/lEULohwEV9zFqTgG4bXRcq7xzdd+sGFws+LxThXXOw==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.7.1.tgz", + "integrity": "sha512-Gnhb+RqE2JuQGb3kJsLF8vfqjt3PHKSstq4Xc8ic+ax7QKo4Z0RWGucU3YV+DwKR3T9SYc+3YCUQEJs8r7+Jxg==", "dev": true, "requires": { - "jest-mock": "^24.0.0", - "jest-util": "^24.0.0", + "@jest/environment": "^24.7.1", + "@jest/fake-timers": "^24.7.1", + "@jest/types": "^24.7.0", + "jest-mock": "^24.7.0", + "jest-util": "^24.7.1", "jsdom": "^11.5.1" } }, "jest-environment-node": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.0.0.tgz", - "integrity": "sha512-62fOFcaEdU0VLaq8JL90TqwI7hLn0cOKOl8vY2n477vRkCJRojiRRtJVRzzCcgFvs6gqU97DNqX5R0BrBP6Rxg==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.7.1.tgz", + "integrity": "sha512-GJJQt1p9/C6aj6yNZMvovZuxTUd+BEJprETdvTKSb4kHcw4mFj8777USQV0FJoJ4V3djpOwA5eWyPwfq//PFBA==", "dev": true, "requires": { - "jest-mock": "^24.0.0", - "jest-util": "^24.0.0" + "@jest/environment": "^24.7.1", + "@jest/fake-timers": "^24.7.1", + "@jest/types": "^24.7.0", + "jest-mock": "^24.7.0", + "jest-util": "^24.7.1" } }, "jest-get-type": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.0.0.tgz", - "integrity": "sha512-z6/Eyf6s9ZDGz7eOvl+fzpuJmN9i0KyTt1no37/dHu8galssxz5ZEgnc1KaV8R31q1khxyhB4ui/X5ZjjPk77w==", + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.3.0.tgz", + "integrity": "sha512-HYF6pry72YUlVcvUx3sEpMRwXEWGEPlJ0bSPVnB3b3n++j4phUEoSPcS6GC0pPJ9rpyPSe4cb5muFo6D39cXow==", "dev": true }, "jest-haste-map": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.0.0.tgz", - "integrity": "sha512-CcViJyUo41IQqttLxXVdI41YErkzBKbE6cS6dRAploCeutePYfUimWd3C9rQEWhX0YBOQzvNsC0O9nYxK2nnxQ==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.7.1.tgz", + "integrity": "sha512-g0tWkzjpHD2qa03mTKhlydbmmYiA2KdcJe762SbfFo/7NIMgBWAA0XqQlApPwkWOF7Cxoi/gUqL0i6DIoLpMBw==", "dev": true, "requires": { + "@jest/types": "^24.7.0", + "anymatch": "^2.0.0", "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", "graceful-fs": "^4.1.15", "invariant": "^2.2.4", - "jest-serializer": "^24.0.0", - "jest-util": "^24.0.0", - "jest-worker": "^24.0.0", + "jest-serializer": "^24.4.0", + "jest-util": "^24.7.1", + "jest-worker": "^24.6.0", "micromatch": "^3.1.10", - "sane": "^3.0.0" + "sane": "^4.0.3", + "walker": "^1.0.7" } }, "jest-jasmine2": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.1.0.tgz", - "integrity": "sha512-H+o76SdSNyCh9fM5K8upK45YTo/DiFx5w2YAzblQebSQmukDcoVBVeXynyr7DDnxh+0NTHYRCLwJVf3tC518wg==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.7.1.tgz", + "integrity": "sha512-Y/9AOJDV1XS44wNwCaThq4Pw3gBPiOv/s6NcbOAkVRRUEPu+36L2xoPsqQXsDrxoBerqeyslpn2TpCI8Zr6J2w==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", + "@jest/environment": "^24.7.1", + "@jest/test-result": "^24.7.1", + "@jest/types": "^24.7.0", "chalk": "^2.0.1", "co": "^4.6.0", - "expect": "^24.1.0", + "expect": "^24.7.1", "is-generator-fn": "^2.0.0", - "jest-each": "^24.0.0", - "jest-matcher-utils": "^24.0.0", - "jest-message-util": "^24.0.0", - "jest-snapshot": "^24.1.0", - "jest-util": "^24.0.0", - "pretty-format": "^24.0.0", + "jest-each": "^24.7.1", + "jest-matcher-utils": "^24.7.0", + "jest-message-util": "^24.7.1", + "jest-runtime": "^24.7.1", + "jest-snapshot": "^24.7.1", + "jest-util": "^24.7.1", + "pretty-format": "^24.7.0", "throat": "^4.0.0" } }, "jest-leak-detector": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.0.0.tgz", - "integrity": "sha512-ZYHJYFeibxfsDSKowjDP332pStuiFT2xfc5R67Rjm/l+HFJWJgNIOCOlQGeXLCtyUn3A23+VVDdiCcnB6dTTrg==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.7.0.tgz", + "integrity": "sha512-zV0qHKZGXtmPVVzT99CVEcHE9XDf+8LwiE0Ob7jjezERiGVljmqKFWpV2IkG+rkFIEUHFEkMiICu7wnoPM/RoQ==", "dev": true, "requires": { - "pretty-format": "^24.0.0" + "pretty-format": "^24.7.0" } }, "jest-matcher-utils": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.0.0.tgz", - "integrity": "sha512-LQTDmO+aWRz1Tf9HJg+HlPHhDh1E1c65kVwRFo5mwCVp5aQDzlkz4+vCvXhOKFjitV2f0kMdHxnODrXVoi+rlA==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.7.0.tgz", + "integrity": "sha512-158ieSgk3LNXeUhbVJYRXyTPSCqNgVXOp/GT7O94mYd3pk/8+odKTyR1JLtNOQSPzNi8NFYVONtvSWA/e1RDXg==", "dev": true, "requires": { "chalk": "^2.0.1", - "jest-diff": "^24.0.0", - "jest-get-type": "^24.0.0", - "pretty-format": "^24.0.0" + "jest-diff": "^24.7.0", + "jest-get-type": "^24.3.0", + "pretty-format": "^24.7.0" } }, "jest-message-util": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.0.0.tgz", - "integrity": "sha512-J9ROJIwz/IeC+eV1XSwnRK4oAwPuhmxEyYx1+K5UI+pIYwFZDSrfZaiWTdq0d2xYFw4Xiu+0KQWsdsQpgJMf3Q==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.7.1.tgz", + "integrity": "sha512-dk0gqVtyqezCHbcbk60CdIf+8UHgD+lmRHifeH3JRcnAqh4nEyPytSc9/L1+cQyxC+ceaeP696N4ATe7L+omcg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.7.1", + "@jest/types": "^24.7.0", + "@types/stack-utils": "^1.0.1", "chalk": "^2.0.1", "micromatch": "^3.1.10", "slash": "^2.0.0", @@ -8554,125 +8322,233 @@ } }, "jest-mock": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.0.0.tgz", - "integrity": "sha512-sQp0Hu5fcf5NZEh1U9eIW2qD0BwJZjb63Yqd98PQJFvf/zzUTBoUAwv/Dc/HFeNHIw1f3hl/48vNn+j3STaI7A==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.7.0.tgz", + "integrity": "sha512-6taW4B4WUcEiT2V9BbOmwyGuwuAFT2G8yghF7nyNW1/2gq5+6aTqSPcS9lS6ArvEkX55vbPAS/Jarx5LSm4Fng==", + "dev": true, + "requires": { + "@jest/types": "^24.7.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", + "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", "dev": true }, "jest-regex-util": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.0.0.tgz", - "integrity": "sha512-Jv/uOTCuC+PY7WpJl2mpoI+WbY2ut73qwwO9ByJJNwOCwr1qWhEW2Lyi2S9ZewUdJqeVpEBisdEVZSI+Zxo58Q==", + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz", + "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==", "dev": true }, "jest-resolve": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.1.0.tgz", - "integrity": "sha512-TPiAIVp3TG6zAxH28u/6eogbwrvZjBMWroSLBDkwkHKrqxB/RIdwkWDye4uqPlZIXWIaHtifY3L0/eO5Z0f2wg==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.7.1.tgz", + "integrity": "sha512-Bgrc+/UUZpGJ4323sQyj85hV9d+ANyPNu6XfRDUcyFNX1QrZpSoM0kE4Mb2vZMAYTJZsBFzYe8X1UaOkOELSbw==", "dev": true, "requires": { + "@jest/types": "^24.7.0", "browser-resolve": "^1.11.3", "chalk": "^2.0.1", - "realpath-native": "^1.0.0" + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" } }, "jest-resolve-dependencies": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.1.0.tgz", - "integrity": "sha512-2VwPsjd3kRPu7qe2cpytAgowCObk5AKeizfXuuiwgm1a9sijJDZe8Kh1sFj6FKvSaNEfCPlBVkZEJa2482m/Uw==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.7.1.tgz", + "integrity": "sha512-2Eyh5LJB2liNzfk4eo7bD1ZyBbqEJIyyrFtZG555cSWW9xVHxII2NuOkSl1yUYTAYCAmM2f2aIT5A7HzNmubyg==", "dev": true, "requires": { - "jest-regex-util": "^24.0.0", - "jest-snapshot": "^24.1.0" + "@jest/types": "^24.7.0", + "jest-regex-util": "^24.3.0", + "jest-snapshot": "^24.7.1" } }, "jest-runner": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.1.0.tgz", - "integrity": "sha512-CDGOkT3AIFl16BLL/OdbtYgYvbAprwJ+ExKuLZmGSCSldwsuU2dEGauqkpvd9nphVdAnJUcP12e/EIlnTX0QXg==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.7.1.tgz", + "integrity": "sha512-aNFc9liWU/xt+G9pobdKZ4qTeG/wnJrJna3VqunziDNsWT3EBpmxXZRBMKCsNMyfy+A/XHiV+tsMLufdsNdgCw==", "dev": true, "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.7.1", + "@jest/test-result": "^24.7.1", + "@jest/types": "^24.7.0", "chalk": "^2.4.2", "exit": "^0.1.2", "graceful-fs": "^4.1.15", - "jest-config": "^24.1.0", - "jest-docblock": "^24.0.0", - "jest-haste-map": "^24.0.0", - "jest-jasmine2": "^24.1.0", - "jest-leak-detector": "^24.0.0", - "jest-message-util": "^24.0.0", - "jest-runtime": "^24.1.0", - "jest-util": "^24.0.0", - "jest-worker": "^24.0.0", + "jest-config": "^24.7.1", + "jest-docblock": "^24.3.0", + "jest-haste-map": "^24.7.1", + "jest-jasmine2": "^24.7.1", + "jest-leak-detector": "^24.7.0", + "jest-message-util": "^24.7.1", + "jest-resolve": "^24.7.1", + "jest-runtime": "^24.7.1", + "jest-util": "^24.7.1", + "jest-worker": "^24.6.0", "source-map-support": "^0.5.6", "throat": "^4.0.0" } }, "jest-runtime": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.1.0.tgz", - "integrity": "sha512-59/BY6OCuTXxGeDhEMU7+N33dpMQyXq7MLK07cNSIY/QYt2QZgJ7Tjx+rykBI0skAoigFl0A5tmT8UdwX92YuQ==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.7.1.tgz", + "integrity": "sha512-0VAbyBy7tll3R+82IPJpf6QZkokzXPIS71aDeqh+WzPRXRCNz6StQ45otFariPdJ4FmXpDiArdhZrzNAC3sj6A==", "dev": true, "requires": { - "@babel/core": "^7.1.0", - "babel-plugin-istanbul": "^5.1.0", + "@jest/console": "^24.7.1", + "@jest/environment": "^24.7.1", + "@jest/source-map": "^24.3.0", + "@jest/transform": "^24.7.1", + "@jest/types": "^24.7.0", + "@types/yargs": "^12.0.2", "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", "exit": "^0.1.2", - "fast-json-stable-stringify": "^2.0.0", "glob": "^7.1.3", "graceful-fs": "^4.1.15", - "jest-config": "^24.1.0", - "jest-haste-map": "^24.0.0", - "jest-message-util": "^24.0.0", - "jest-regex-util": "^24.0.0", - "jest-resolve": "^24.1.0", - "jest-snapshot": "^24.1.0", - "jest-util": "^24.0.0", - "jest-validate": "^24.0.0", - "micromatch": "^3.1.10", - "realpath-native": "^1.0.0", + "jest-config": "^24.7.1", + "jest-haste-map": "^24.7.1", + "jest-message-util": "^24.7.1", + "jest-mock": "^24.7.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.7.1", + "jest-snapshot": "^24.7.1", + "jest-util": "^24.7.1", + "jest-validate": "^24.7.0", + "realpath-native": "^1.1.0", "slash": "^2.0.0", "strip-bom": "^3.0.0", - "write-file-atomic": "2.4.1", "yargs": "^12.0.2" }, "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, "slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "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" + } + }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "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" + } } } }, "jest-serializer": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.0.0.tgz", - "integrity": "sha512-9FKxQyrFgHtx3ozU+1a8v938ILBE7S8Ko3uiAVjT8Yfi2o91j/fj81jacCQZ/Ihjiff/VsUCXVgQ+iF1XdImOw==", + "version": "24.4.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz", + "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==", "dev": true }, "jest-snapshot": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.1.0.tgz", - "integrity": "sha512-th6TDfFqEmXvuViacU1ikD7xFb7lQsPn2rJl7OEmnfIVpnrx3QNY2t3PE88meeg0u/mQ0nkyvmC05PBqO4USFA==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.7.1.tgz", + "integrity": "sha512-8Xk5O4p+JsZZn4RCNUS3pxA+ORKpEKepE+a5ejIKrId9CwrVN0NY+vkqEkXqlstA5NMBkNahXkR/4qEBy0t5yA==", "dev": true, "requires": { "@babel/types": "^7.0.0", + "@jest/types": "^24.7.0", "chalk": "^2.0.1", - "jest-diff": "^24.0.0", - "jest-matcher-utils": "^24.0.0", - "jest-message-util": "^24.0.0", - "jest-resolve": "^24.1.0", + "expect": "^24.7.1", + "jest-diff": "^24.7.0", + "jest-matcher-utils": "^24.7.0", + "jest-message-util": "^24.7.1", + "jest-resolve": "^24.7.1", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "pretty-format": "^24.0.0", + "pretty-format": "^24.7.0", "semver": "^5.5.0" }, "dependencies": { @@ -8685,16 +8561,20 @@ } }, "jest-util": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.0.0.tgz", - "integrity": "sha512-QxsALc4wguYS7cfjdQSOr5HTkmjzkHgmZvIDkcmPfl1ib8PNV8QUWLwbKefCudWS0PRKioV+VbQ0oCUPC691fQ==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.7.1.tgz", + "integrity": "sha512-/KilOue2n2rZ5AnEBYoxOXkeTu6vi7cjgQ8MXEkih0oeAXT6JkS3fr7/j8+engCjciOU1Nq5loMSKe0A1oeX0A==", "dev": true, "requires": { + "@jest/console": "^24.7.1", + "@jest/fake-timers": "^24.7.1", + "@jest/source-map": "^24.3.0", + "@jest/test-result": "^24.7.1", + "@jest/types": "^24.7.0", "callsites": "^3.0.0", "chalk": "^2.0.1", "graceful-fs": "^4.1.15", "is-ci": "^2.0.0", - "jest-message-util": "^24.0.0", "mkdirp": "^0.5.1", "slash": "^2.0.0", "source-map": "^0.6.0" @@ -8715,42 +8595,46 @@ } }, "jest-validate": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.0.0.tgz", - "integrity": "sha512-vMrKrTOP4BBFIeOWsjpsDgVXATxCspC9S1gqvbJ3Tnn/b9ACsJmteYeVx9830UMV28Cob1RX55x96Qq3Tfad4g==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.7.0.tgz", + "integrity": "sha512-cgai/gts9B2chz1rqVdmLhzYxQbgQurh1PEQSvSgPZ8KGa1AqXsqC45W5wKEwzxKrWqypuQrQxnF4+G9VejJJA==", "dev": true, "requires": { + "@jest/types": "^24.7.0", "camelcase": "^5.0.0", "chalk": "^2.0.1", - "jest-get-type": "^24.0.0", + "jest-get-type": "^24.3.0", "leven": "^2.1.0", - "pretty-format": "^24.0.0" + "pretty-format": "^24.7.0" }, "dependencies": { "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true } } }, "jest-watcher": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.0.0.tgz", - "integrity": "sha512-GxkW2QrZ4YxmW1GUWER05McjVDunBlKMFfExu+VsGmXJmpej1saTEKvONdx5RJBlVdpPI5x6E3+EDQSIGgl53g==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.7.1.tgz", + "integrity": "sha512-Wd6TepHLRHVKLNPacEsBwlp9raeBIO+01xrN24Dek4ggTS8HHnOzYSFnvp+6MtkkJ3KfMzy220KTi95e2rRkrw==", "dev": true, "requires": { + "@jest/test-result": "^24.7.1", + "@jest/types": "^24.7.0", + "@types/yargs": "^12.0.9", "ansi-escapes": "^3.0.0", "chalk": "^2.0.1", - "jest-util": "^24.0.0", + "jest-util": "^24.7.1", "string-length": "^2.0.0" } }, "jest-worker": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.0.0.tgz", - "integrity": "sha512-s64/OThpfQvoCeHG963MiEZOAAxu8kHsaL/rCMF7lpdzo7vgF0CtPml9hfguOMgykgH/eOm4jFP4ibfHLruytg==", + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz", + "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==", "dev": true, "requires": { "merge-stream": "^1.0.1", @@ -8792,6 +8676,12 @@ "url-regex": "^3.0.0" }, "dependencies": { + "es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", + "dev": true + }, "file-type": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", @@ -8818,9 +8708,9 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", - "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -8830,8 +8720,7 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, "jsdom": { "version": "11.12.0", @@ -8865,14 +8754,6 @@ "whatwg-url": "^6.4.1", "ws": "^5.2.0", "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true - } } }, "jsesc": { @@ -8896,14 +8777,12 @@ "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "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 + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stable-stringify": { "version": "1.0.1", @@ -8916,8 +8795,7 @@ "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json3": { "version": "3.3.2", @@ -8951,7 +8829,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -8986,9 +8863,9 @@ "dev": true }, "kleur": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.2.tgz", - "integrity": "sha512-3h7B2WRT5LNXOtQiAaWonilegHcPSf9nLVXlSTci8lu1dZUuui61+EsPEZqSVxY7rXYmB2DVKMQILxaO5WL61Q==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, "kuler": { @@ -9006,6 +8883,60 @@ "dev": true, "requires": { "package-json": "^4.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "^1.0.1" + } + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + } } }, "lazy-cache": { @@ -9015,9 +8946,9 @@ "dev": true }, "lazy-val": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.3.tgz", - "integrity": "sha512-pjCf3BYk+uv3ZcPzEVM0BFvO9Uw58TmlrU0oG5tTrr9Kcid3+kdKxapH8CjdYmVa2nO5wOoZn2rdvZx2PKj/xg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.4.tgz", + "integrity": "sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q==", "dev": true }, "lcid": { @@ -9079,7 +9010,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -9183,7 +9113,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, "requires": { "currently-unhandled": "^0.4.1", "signal-exit": "^3.0.0" @@ -9225,12 +9154,13 @@ } }, "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { - "yallist": "^3.0.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "lru_map": { @@ -9299,8 +9229,7 @@ "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" }, "map-visit": { "version": "1.0.0", @@ -9335,14 +9264,22 @@ "dev": true }, "mem": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", - "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "dev": true, "requires": { "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", + "mimic-fn": "^2.0.0", "p-is-promise": "^2.0.0" + }, + "dependencies": { + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + } } }, "memory-fs": { @@ -9391,7 +9328,6 @@ "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, "requires": { "camelcase-keys": "^2.0.0", "decamelize": "^1.1.2", @@ -9405,12 +9341,6 @@ "trim-newlines": "^1.0.0" } }, - "merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", - "dev": true - }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -9502,28 +9432,28 @@ } }, "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true }, "mime-db": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" }, "mime-types": { - "version": "2.1.22", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", - "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", "requires": { - "mime-db": "~1.38.0" + "mime-db": "1.40.0" } }, "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "mimic-response": { @@ -9576,8 +9506,7 @@ "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "mississippi": { "version": "3.0.0", @@ -9688,7 +9617,6 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, "requires": { "minimist": "0.0.8" }, @@ -9696,15 +9624,14 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" } } }, "mobx": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/mobx/-/mobx-5.9.0.tgz", - "integrity": "sha512-D3mY1uM3H9BP5duk5tTanrOq92yqetYKsprPJWvkKDrbs+fro59xrpWX+vtr10YoLgJIFz+a4A8lI+4YtqmCUQ==" + "version": "5.9.4", + "resolved": "https://registry.npmjs.org/mobx/-/mobx-5.9.4.tgz", + "integrity": "sha512-L9JjTX2rtQUAhCIgnHokfntNOsF14uioT9LqStf6Mya+16j56ZBe21E8Y9V59tfr2aH2kLQPD10qtCJXBuTAxw==" }, "moment": { "version": "2.24.0", @@ -9754,11 +9681,10 @@ "dev": true }, "nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", - "dev": true, - "optional": true + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", + "dev": true }, "nanomatch": { "version": "1.2.13", @@ -9786,9 +9712,9 @@ "dev": true }, "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true }, "neo-async": { @@ -9812,17 +9738,10 @@ "lower-case": "^1.1.1" } }, - "node-addon-api": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.6.2.tgz", - "integrity": "sha512-479Bjw9nTE5DdBSZZWprFryHGjUaQC31y1wHo19We/k0BZlrmhqQitWoUL0cD8+scljCbIUL+E58oRDEakdGGA==", - "dev": true, - "optional": true - }, "node-fetch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", - "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.5.0.tgz", + "integrity": "sha512-YuZKluhWGJwCcUu4RlZstdAxr8bFfOVHakc1mplwHkk8J+tqM1Y5yraYvIUpeX8aY7+crCwiELJq7Vl0o0LWXw==", "dev": true }, "node-forge": { @@ -9896,12 +9815,29 @@ "vm-browserify": "0.0.4" }, "dependencies": { + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", @@ -9967,8 +9903,7 @@ "semver": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" } } }, @@ -10026,33 +9961,11 @@ "which": "^1.2.9" } }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", - "dev": true - }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true } } }, @@ -10070,9 +9983,9 @@ }, "dependencies": { "@types/node": { - "version": "10.12.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.27.tgz", - "integrity": "sha512-e9wgeY6gaY21on3ve0xAjgBVjGDWq/xUteK0ujsE53bUoxycMkqfnkUgMt6ffZtykZ5X12Mg3T7Pw4TRCObDKg==", + "version": "10.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.6.tgz", + "integrity": "sha512-Fvm24+u85lGmV4hT5G++aht2C5I4Z4dYlWZIh62FAfFO/TfzXtPpoLI6I7AuBWkIFqZCnhFOoTT7RjjaIL5Fjg==", "dev": true }, "jimp": { @@ -10103,7 +10016,6 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, "requires": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -10205,7 +10117,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz", "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=", - "dev": true, "requires": { "debug": "^2.1.3", "minimist": "^1.1.0", @@ -10220,7 +10131,6 @@ "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" } @@ -10228,28 +10138,25 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "nwsapi": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.1.tgz", - "integrity": "sha512-T5GaA1J/d34AC8mkrFD2O0DR17kwJ702ZOtJOsS8RpbsQZVOC2/xYFb1i/cw+xdM54JIlMuojjDOYct8GIWtwg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", + "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==", "dev": true }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, "object-assign": { "version": "4.1.1", @@ -10288,10 +10195,9 @@ } }, "object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object-visit": { "version": "1.0.1", @@ -10354,9 +10260,9 @@ } }, "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true }, "once": { @@ -10374,9 +10280,9 @@ "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" }, "opn": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", - "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "dev": true, "requires": { "is-wsl": "^1.1.0" @@ -10469,6 +10375,51 @@ "execa": "^1.0.0", "lcid": "^2.0.0", "mem": "^4.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + } } }, "os-tmpdir": { @@ -10524,15 +10475,15 @@ "dev": true }, "p-is-promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", - "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", "dev": true }, "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -10548,9 +10499,9 @@ } }, "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true }, "p-map-series": { @@ -10584,35 +10535,117 @@ } }, "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.3.0.tgz", + "integrity": "sha512-XO7WS3EEXd48vmW633Y97Mh9xuENFiOevI9G+ExfTG/k6xuY9cBd3fxkAoDMSEsNZXasaVJIJ1rD/n7GMf18bA==", "dev": true, "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" + "got": "^9.6.0", + "registry-auth-token": "^3.4.0", + "registry-url": "^5.0.0", + "semver": "^5.6.0" }, "dependencies": { + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "cacheable-request": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.0.0.tgz", + "integrity": "sha512-2N7AmszH/WPPpl5Z3XMw1HAP+8d+xugnKQAeKvxFZ/04dbT/CAznqwbl+7eSr3HkwdepNwtb2yx3CAMQWvG01Q==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^4.0.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^1.0.1", + "normalize-url": "^3.1.0", + "responselike": "^1.0.2" + } + }, + "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" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "http-cache-semantics": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz", + "integrity": "sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==", + "dev": true + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, "semver": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", "dev": true + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } } } }, "pako": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", - "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", "dev": true }, "parallel-transform": { @@ -10734,7 +10767,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, "requires": { "error-ex": "^1.2.0" } @@ -10752,9 +10784,9 @@ "dev": true }, "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, "pascalcase": { @@ -10778,8 +10810,7 @@ "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" }, "path-is-absolute": { "version": "1.0.1", @@ -10802,8 +10833,7 @@ "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "path-to-regexp": { "version": "0.1.7", @@ -10815,7 +10845,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "pify": "^2.0.0", @@ -10838,14 +10867,12 @@ "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "phin": { "version": "2.9.3", @@ -10856,20 +10883,17 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, "requires": { "pinkie": "^2.0.0" } @@ -10930,9 +10954,9 @@ "dev": true }, "pngjs": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.3.3.tgz", - "integrity": "sha512-1n3Z4p3IOxArEs1VRXnZ/RXdfEniAUS9jb68g58FIXMNkPJeZd+Qh4Uq7/e0LVxAQGos1eIUrqrt4FpjdnEd+Q==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", "dev": true }, "portfinder": { @@ -10946,6 +10970,12 @@ "mkdirp": "0.5.x" }, "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -10970,9 +11000,9 @@ "dev": true }, "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.15.tgz", + "integrity": "sha512-+avadY713SyQf0m5np7byFzAFZyhPhXyxwp8OVmdd5mKOxm0VzM2AJkKIgBro7gGVk4kYlCDvBVrSqhU5m8E+w==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -11007,24 +11037,24 @@ } }, "postcss-modules-local-by-default": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.5.tgz", - "integrity": "sha512-iFgxlCAVLno5wIJq+4hyuOmc4VjZEZxzpdeuZcBytLNWEK5Bx2oRF9PPcAz5TALbaFvrZm8sJYtJ3hV+tMSEIg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz", + "integrity": "sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA==", "dev": true, "requires": { - "css-selector-tokenizer": "^0.7.0", "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0", "postcss-value-parser": "^3.3.1" } }, "postcss-modules-scope": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.0.1.tgz", - "integrity": "sha512-7+6k9c3/AuZ5c596LJx9n923A/j3nF3ormewYBF1RrIQvjvjXe1xE8V8A1KFyFwXbvnshT6FBZFX0k/F1igneg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz", + "integrity": "sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A==", "dev": true, "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^7.0.6" + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" } }, "postcss-modules-values": { @@ -11037,6 +11067,17 @@ "postcss": "^7.0.6" } }, + "postcss-selector-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", @@ -11059,7 +11100,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", - "dev": true, "requires": { "get-stdin": "^4.0.1", "meow": "^3.1.0" @@ -11076,27 +11116,29 @@ } }, "pretty-format": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.0.0.tgz", - "integrity": "sha512-LszZaKG665djUcqg5ZQq+XzezHLKrxsA86ZABTozp+oNhkdqa+tG2dX4qa6ERl5c/sRDrAa3lHmwnvKoP+OG/g==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.7.0.tgz", + "integrity": "sha512-apen5cjf/U4dj7tHetpC7UEFCvtAgnNZnBDkfPv3fokzIqyOJckAG9OlAPC1BlFALnqT/lGB2tl9EJjlK6eCsA==", "dev": true, "requires": { + "@jest/types": "^24.7.0", "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0" + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" }, "dependencies": { "ansi-regex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", - "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true } } }, "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", "dev": true }, "process-nextick-args": { @@ -11114,7 +11156,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", - "dev": true, "requires": { "speedometer": "~0.1.2", "through2": "~0.2.3" @@ -11127,9 +11168,9 @@ "dev": true }, "prompts": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.0.3.tgz", - "integrity": "sha512-H8oWEoRZpybm6NV4to9/1limhttEo13xK62pNvn2JzY0MA03p7s0OjtmhXyon3uJmxiJJVSuUwEJFFssI3eBiQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.0.4.tgz", + "integrity": "sha512-HTzM3UWp/99A0gk51gAegwo1QRYA7xjcZufMNe33rCclFszUYAuHe1fIN/3ZmiHeGPkUsNaRyQm1hHOfM0PKxA==", "dev": true, "requires": { "kleur": "^3.0.2", @@ -11153,13 +11194,13 @@ "dev": true }, "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", "dev": true, "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.8.0" + "ipaddr.js": "1.9.0" } }, "proxy-from-env": { @@ -11183,8 +11224,7 @@ "psl": { "version": "1.1.31", "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", - "dev": true + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" }, "public-encrypt": { "version": "4.0.3", @@ -11236,8 +11276,7 @@ "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 + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "q": { "version": "1.5.1", @@ -11248,8 +11287,7 @@ "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "query-string": { "version": "5.1.1", @@ -11275,9 +11313,9 @@ "dev": true }, "querystringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", - "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", "dev": true }, "randombytes": { @@ -11320,13 +11358,23 @@ "http-errors": "1.6.3", "iconv-lite": "0.4.23", "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } } }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -11335,31 +11383,31 @@ } }, "react": { - "version": "16.8.3", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.3.tgz", - "integrity": "sha512-3UoSIsEq8yTJuSu0luO1QQWYbgGEILm+eJl2QN/VLDi7hL+EN18M3q3oVZwmVzzBJ3DkM7RMdRwBmZZ+b4IzSA==", + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz", + "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.3" + "scheduler": "^0.13.6" } }, "react-dom": { - "version": "16.8.3", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.3.tgz", - "integrity": "sha512-ttMem9yJL4/lpItZAQ2NTFAbV7frotHk5DZEHXUOws2rMmrsvh1Na7ThGT0dTzUIl6pqTOi5tYREfL8AEna3lA==", + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz", + "integrity": "sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.3" + "scheduler": "^0.13.6" } }, "react-is": { - "version": "16.8.3", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.3.tgz", - "integrity": "sha512-Y4rC1ZJmsxxkkPuMLwvKvlL1Zfpbcu+Bf4ZigkHup3v9EfdYhAlWAaVyA19olXq2o2mGn0w+dFKvk3pVVlYcIA==" + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", + "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==" }, "react-minimalist-portal": { "version": "2.3.1", @@ -11390,20 +11438,20 @@ "dev": true }, "read-config-file": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-3.2.1.tgz", - "integrity": "sha512-yW4hZZXdNN+Paij5JVAiTv1lUsAN5QRBU5NqotQqwYdVkUczSmDzm66VLu0eojiZt2zFeYptTFDAYlalDGuHdA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-3.2.2.tgz", + "integrity": "sha512-PuFpMgZF01VB0ydH1dfitAxCP/fh+qnfbA9cYNIPoxPbz0SMngsrafCtaHDWfER7MwlDz4fmrNBhPkakxxFpTg==", "dev": true, "requires": { - "ajv": "^6.7.0", - "ajv-keywords": "^3.2.0", - "bluebird-lst": "^1.0.6", + "ajv": "^6.9.2", + "ajv-keywords": "^3.4.0", + "bluebird-lst": "^1.0.7", "dotenv": "^6.2.0", "dotenv-expand": "^4.2.0", - "fs-extra-p": "^7.0.0", + "fs-extra-p": "^7.0.1", "js-yaml": "^3.12.1", "json5": "^2.1.0", - "lazy-val": "^1.0.3" + "lazy-val": "^1.0.4" }, "dependencies": { "json5": { @@ -11421,7 +11469,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, "requires": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", @@ -11432,7 +11479,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, "requires": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" @@ -11442,7 +11488,6 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -11506,22 +11551,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, "requires": { "indent-string": "^2.1.0", "strip-indent": "^1.0.1" } }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==", "dev": true }, "regex-not": { @@ -11534,21 +11572,10 @@ "safe-regex": "^1.1.0" } }, - "regexpu-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "dev": true, - "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, "registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", "dev": true, "requires": { "rc": "^1.1.6", @@ -11556,35 +11583,12 @@ } }, "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "^1.0.1" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", "dev": true, "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } + "rc": "^1.2.8" } }, "relateurl": { @@ -11600,16 +11604,40 @@ "dev": true }, "renderkid": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.2.tgz", - "integrity": "sha512-FsygIxevi1jSiPY9h7vZmBFUbAOcbYm9UwyiLNdVsLRs/5We9Ob5NMPbGYUTWiLq5L+ezlVdE0A8bbME5CWTpg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", + "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", "dev": true, "requires": { "css-select": "^1.1.0", - "dom-converter": "~0.2", - "htmlparser2": "~3.3.0", + "dom-converter": "^0.2", + "htmlparser2": "^3.3.0", "strip-ansi": "^3.0.0", "utila": "^0.4.0" + }, + "dependencies": { + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + } } }, "repeat-element": { @@ -11628,7 +11656,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, "requires": { "is-finite": "^1.0.0" } @@ -11643,7 +11670,6 @@ "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -11694,9 +11720,9 @@ "dev": true }, "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "requires-port": { @@ -11706,10 +11732,9 @@ "dev": true }, "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dev": true, + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", + "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", "requires": { "path-parse": "^1.0.6" } @@ -11789,9 +11814,9 @@ } }, "rsvp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", - "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.4.tgz", + "integrity": "sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA==", "dev": true }, "run-queue": { @@ -11823,21 +11848,65 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sane": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-3.1.0.tgz", - "integrity": "sha512-G5GClRRxT1cELXfdAq7UKtUsv8q/ZC5k8lQGmjEm4HcAl3HzBy68iglyNCmw4+0tiXPCBZntslHlRhbnsSws+Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", "dev": true, "requires": { + "@cnakazawa/watch": "^1.0.3", "anymatch": "^2.0.0", - "capture-exit": "^1.2.0", - "exec-sh": "^0.2.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", "execa": "^1.0.0", "fb-watchman": "^2.0.0", - "fsevents": "^1.2.3", "micromatch": "^3.1.4", "minimist": "^1.1.1", - "walker": "~1.0.5", - "watch": "~0.18.0" + "walker": "~1.0.5" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + } } }, "sanitize-filename": { @@ -11878,6 +11947,12 @@ "wrap-ansi": "^2.0.0" } }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", @@ -11902,6 +11977,12 @@ "lcid": "^1.0.0" } }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, "which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", @@ -11981,9 +12062,9 @@ "dev": true }, "scheduler": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.3.tgz", - "integrity": "sha512-UxN5QRYWtpR1egNWzJcVLk8jlegxAugswQc984lD3kU7NuobsO37/sRfbpTdBjtnD5TBNFA2Q2oLV5+UmPSmEQ==", + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", + "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -12048,17 +12129,6 @@ "dev": true, "requires": { "commander": "~2.8.1" - }, - "dependencies": { - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "dev": true, - "requires": { - "graceful-readlink": ">= 1.0.0" - } - } } }, "select-hose": { @@ -12151,6 +12221,12 @@ "ms": "2.0.0" } }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -12160,9 +12236,9 @@ } }, "serialize-javascript": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", - "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", + "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==", "dev": true }, "serve-index": { @@ -12303,8 +12379,7 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "simple-swizzle": { "version": "0.2.2", @@ -12325,7 +12400,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz", "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=", - "dev": true, "requires": { "string-width": "^1.0.1" } @@ -12543,9 +12617,9 @@ } }, "source-map-support": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", - "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", + "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -12570,7 +12644,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -12579,24 +12652,21 @@ "spdx-exceptions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" }, "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", - "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", - "dev": true + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==" }, "spdy": { "version": "4.0.0", @@ -12646,9 +12716,9 @@ } }, "readable-stream": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", - "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", + "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -12670,8 +12740,7 @@ "speedometer": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", - "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=", - "dev": true + "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=" }, "split-string": { "version": "3.1.0", @@ -12730,7 +12799,6 @@ "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -13010,7 +13078,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -13031,14 +13098,12 @@ "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -13047,7 +13112,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, "requires": { "is-utf8": "^0.2.0" } @@ -13071,7 +13135,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, "requires": { "get-stdin": "^4.0.1" } @@ -13079,8 +13142,7 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "strip-outer": { "version": "1.0.1", @@ -13095,7 +13157,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-2.0.2.tgz", "integrity": "sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=", - "dev": true, "requires": { "debug": "^2.2.0" }, @@ -13104,7 +13165,6 @@ "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" } @@ -13112,8 +13172,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -13127,9 +13186,9 @@ } }, "svgo": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.0.tgz", - "integrity": "sha512-xBfxJxfk4UeVN8asec9jNxHiv3UAMv/ujwBWGYvQhhMb2u3YTGKkiybPcLFDLq7GLLWE9wa73e0/m8L5nTzQbw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", + "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==", "dev": true, "requires": { "chalk": "^2.4.1", @@ -13139,37 +13198,13 @@ "css-tree": "1.0.0-alpha.28", "css-url-regex": "^1.1.0", "csso": "^3.5.1", - "js-yaml": "^3.12.0", + "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", "object.values": "^1.1.0", "sax": "~1.2.4", "stable": "^0.1.8", "unquote": "~1.1.1", "util.promisify": "~1.0.0" - }, - "dependencies": { - "css-select": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", - "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^2.1.2", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - } } }, "symbol-observable": { @@ -13184,9 +13219,9 @@ "dev": true }, "tapable": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", - "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, "tar": { @@ -13253,103 +13288,59 @@ } } }, - "temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", - "dev": true - }, - "temp-file": { - "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.6", - "fs-extra-p": "^7.0.0" - } - }, - "tempfile": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", - "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=", - "dev": true, - "requires": { - "temp-dir": "^1.0.0", - "uuid": "^3.0.1" - } - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "^0.7.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", + "dev": true + }, + "temp-file": { + "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.6", + "fs-extra-p": "^7.0.0" + } + }, + "tempfile": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", + "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=", + "dev": true, + "requires": { + "temp-dir": "^1.0.0", + "uuid": "^3.0.1" + } + }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "^0.7.0" } }, "terser": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", - "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", "dev": true, "requires": { - "commander": "~2.17.1", + "commander": "^2.19.0", "source-map": "~0.6.1", - "source-map-support": "~0.5.9" + "source-map-support": "~0.5.10" }, "dependencies": { + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -13359,9 +13350,9 @@ } }, "terser-webpack-plugin": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.2.tgz", - "integrity": "sha512-1DMkTk286BzmfylAvLXwpJrI7dWa5BnFmscV/2dCr8+c56egFcbaeFAl7+sujAjdmpLam21XRdhA4oifLyiWWg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz", + "integrity": "sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA==", "dev": true, "requires": { "cacache": "^11.0.2", @@ -13383,15 +13374,15 @@ } }, "test-exclude": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.1.0.tgz", - "integrity": "sha512-gwf0S2fFsANC55fSeSqpb8BYk6w3FDvwZxfNjeF6FRgvFa43r+7wRiA/Q0IxoRU37wB/LE8IQ4221BsNucTaCA==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", "dev": true, "requires": { - "arrify": "^1.0.1", + "glob": "^7.1.3", "minimatch": "^3.0.4", "read-pkg-up": "^4.0.0", - "require-main-filename": "^1.0.1" + "require-main-filename": "^2.0.0" }, "dependencies": { "find-up": { @@ -13483,8 +13474,7 @@ "throttleit": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", - "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", - "dev": true + "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=" }, "through": { "version": "2.3.8", @@ -13496,7 +13486,6 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", - "dev": true, "requires": { "readable-stream": "~1.1.9", "xtend": "~2.1.1" @@ -13579,6 +13568,12 @@ } } }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, "to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", @@ -13611,7 +13606,6 @@ "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, "requires": { "psl": "^1.1.24", "punycode": "^1.4.1" @@ -13620,8 +13614,7 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" } } }, @@ -13637,8 +13630,7 @@ "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" }, "trim-repeated": { "version": "1.0.0", @@ -13687,9 +13679,9 @@ } }, "ts-jest": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.0.0.tgz", - "integrity": "sha512-o8BO3TkMREpAATaFTrXkovMsCpBl2z4NDBoLJuWZcJJj1ijI49UnvDMfVpj+iogn/Jl8Pbhuei5nc/Ti+frEHw==", + "version": "24.0.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.0.2.tgz", + "integrity": "sha512-h6ZCZiA1EQgjczxq+uGLXQlNgeg02WWJBbeT8j6nyIBRQdglqbvzDoHahTEIiS6Eor6x8mK6PfZ7brQ9Q6tzHw==", "dev": true, "requires": { "bs-logger": "0.x", @@ -13736,9 +13728,9 @@ } }, "ts-loader": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-5.3.3.tgz", - "integrity": "sha512-KwF1SplmOJepnoZ4eRIloH/zXL195F51skt7reEsS6jvDqzgc/YSbz9b8E07GxIUwLXdcD4ssrJu6v8CwaTafA==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-5.4.5.tgz", + "integrity": "sha512-XYsjfnRQCBum9AMRZpk2rTYSVpdZBpZK+kDh0TeT3kxmQNBDVIeUjdPjY5RZry4eIAb8XHc4gYSUiUWPYvzSRw==", "dev": true, "requires": { "chalk": "^2.3.0", @@ -13757,9 +13749,9 @@ } }, "ts-node": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.0.2.tgz", - "integrity": "sha512-MosTrinKmaAcWgO8tqMjMJB22h+sp3Rd1i4fdoWY4mhBDekOwIAKI/bzmRi7IcbCmjquccYg2gcF6NBkLgr0Tw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.1.0.tgz", + "integrity": "sha512-34jpuOrxDuf+O6iW1JpgTRDFynUZ1iEqtYruBqh35gICNjN8x+LpVcPAcwzLPi9VU6mdA3ym+x233nZmZp445A==", "dev": true, "requires": { "arg": "^4.1.0", @@ -13784,7 +13776,6 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, "requires": { "safe-buffer": "^5.0.1" } @@ -13792,8 +13783,7 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, "type-check": { "version": "0.3.2", @@ -13805,37 +13795,42 @@ } }, "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "~2.1.24" } }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "typescript": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.3.tgz", - "integrity": "sha512-Y21Xqe54TBVp+VDSNbuDYdGw0BpoR/Q6wo/+35M8PAU0vipahnyduJWirxxdxjsAkS7hue53x2zp8gz7F05u0A==", + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.5.tgz", + "integrity": "sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw==", "dev": true }, "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", "dev": true, "requires": { - "commander": "~2.17.1", + "commander": "~2.19.0", "source-map": "~0.6.1" }, "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -13858,18 +13853,6 @@ "requires": { "buffer": "^5.2.1", "through": "^2.3.8" - }, - "dependencies": { - "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - } } }, "underscore-template-loader": { @@ -13943,6 +13926,12 @@ } } }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, "unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", @@ -14040,9 +14029,9 @@ "dev": true }, "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", "dev": true }, "update-notifier": { @@ -14069,6 +14058,12 @@ "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", "dev": true }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, "is-ci": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", @@ -14090,7 +14085,6 @@ "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" } @@ -14120,12 +14114,12 @@ } }, "url-parse": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", - "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", "dev": true, "requires": { - "querystringify": "^2.0.0", + "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, @@ -14145,14 +14139,6 @@ "dev": true, "requires": { "ip-regex": "^1.0.1" - }, - "dependencies": { - "ip-regex": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", - "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=", - "dev": true - } } }, "url-to-options": { @@ -14232,7 +14218,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -14248,7 +14233,6 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -14282,16 +14266,6 @@ "makeerror": "1.0.x" } }, - "watch": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz", - "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=", - "dev": true, - "requires": { - "exec-sh": "^0.2.0", - "minimist": "^1.2.0" - } - }, "watchpack": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", @@ -14319,15 +14293,15 @@ "dev": true }, "webpack": { - "version": "4.29.5", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.5.tgz", - "integrity": "sha512-DuWlYUT982c7XVHodrLO9quFbNpVq5FNxLrMUfYUTlgKW0+yPimynYf1kttSQpEneAL1FH3P3OLNgkyImx8qIQ==", + "version": "4.30.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.30.0.tgz", + "integrity": "sha512-4hgvO2YbAFUhyTdlR4FNyt2+YaYBYHavyzjCMbZzgglo02rlKi/pcsEzwCuCpsn1ryzIl1cq/u8ArIKu8JBYMg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.3", - "@webassemblyjs/helper-module-context": "1.8.3", - "@webassemblyjs/wasm-edit": "1.8.3", - "@webassemblyjs/wasm-parser": "1.8.3", + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", "acorn": "^6.0.5", "acorn-dynamic-import": "^4.0.0", "ajv": "^6.1.0", @@ -14348,12 +14322,20 @@ "terser-webpack-plugin": "^1.1.0", "watchpack": "^1.5.0", "webpack-sources": "^1.3.0" + }, + "dependencies": { + "acorn": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "dev": true + } } }, "webpack-cli": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.2.3.tgz", - "integrity": "sha512-Ik3SjV6uJtWIAN5jp5ZuBMWEAaP5E4V78XJ2nI+paFPh8v4HPSwo/myN0r29Xc/6ZKnd2IdrAlpSgNOu2CDQ6Q==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.1.tgz", + "integrity": "sha512-c2inFU7SM0IttEgF7fK6AaUsbBnORRzminvbyRKS+NlbQHVZdCtzKBlavRL5359bFsywXGRAItA5di/IruC8mg==", "dev": true, "requires": { "chalk": "^2.4.1", @@ -14366,13 +14348,122 @@ "loader-utils": "^1.1.0", "supports-color": "^5.5.0", "v8-compile-cache": "^2.0.2", - "yargs": "^12.0.4" + "yargs": "^12.0.5" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "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" + } + }, + "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" + } + } } }, "webpack-dev-middleware": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.6.0.tgz", - "integrity": "sha512-oeXA3m+5gbYbDBGo4SvKpAHJJEGMoekUbHgo1RK7CP1sz7/WOSeu/dWJtSTk+rzDCLkPwQhGocgIq6lQqOyOwg==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.6.2.tgz", + "integrity": "sha512-A47I5SX60IkHrMmZUlB0ZKSWi29TZTcPz7cha1Z75yYOsgWh/1AcPmQEbC8ZIbU3A1ytSv1PMU0PyPz2Lmz2jg==", "dev": true, "requires": { "memory-fs": "^0.4.1", @@ -14382,49 +14473,49 @@ }, "dependencies": { "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.2.tgz", + "integrity": "sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg==", "dev": true } } }, "webpack-dev-server": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.2.0.tgz", - "integrity": "sha512-CUGPLQsUBVKa/qkZl1MMo8krm30bsOHAP8jtn78gUICpT+sR3esN4Zb0TSBzOEEQJF0zHNEbwx5GHInkqcmlsA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.3.1.tgz", + "integrity": "sha512-jY09LikOyGZrxVTXK0mgIq9y2IhCoJ05848dKZqX1gAGLU1YDqgpOT71+W53JH/wI4v6ky4hm+KvSyW14JEs5A==", "dev": true, "requires": { "ansi-html": "0.0.7", "bonjour": "^3.5.0", - "chokidar": "^2.0.0", - "compression": "^1.5.2", - "connect-history-api-fallback": "^1.3.0", + "chokidar": "^2.1.5", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", "debug": "^4.1.1", - "del": "^3.0.0", - "express": "^4.16.2", - "html-entities": "^1.2.0", + "del": "^4.1.0", + "express": "^4.16.4", + "html-entities": "^1.2.1", "http-proxy-middleware": "^0.19.1", "import-local": "^2.0.0", - "internal-ip": "^4.0.0", + "internal-ip": "^4.2.0", "ip": "^1.1.5", - "killable": "^1.0.0", - "loglevel": "^1.4.1", - "opn": "^5.1.0", - "portfinder": "^1.0.9", + "killable": "^1.0.1", + "loglevel": "^1.6.1", + "opn": "^5.5.0", + "portfinder": "^1.0.20", "schema-utils": "^1.0.0", - "selfsigned": "^1.9.1", - "semver": "^5.6.0", - "serve-index": "^1.7.2", + "selfsigned": "^1.10.4", + "semver": "^6.0.0", + "serve-index": "^1.9.1", "sockjs": "0.3.19", "sockjs-client": "1.3.0", "spdy": "^4.0.0", - "strip-ansi": "^3.0.0", + "strip-ansi": "^3.0.1", "supports-color": "^6.1.0", "url": "^0.11.0", - "webpack-dev-middleware": "^3.5.1", + "webpack-dev-middleware": "^3.6.2", "webpack-log": "^2.0.0", - "yargs": "12.0.2" + "yargs": "12.0.5" }, "dependencies": { "ansi-regex": { @@ -14434,9 +14525,9 @@ "dev": true }, "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "debug": { @@ -14448,15 +14539,6 @@ "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" - } - }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", @@ -14466,16 +14548,22 @@ "locate-path": "^3.0.0" } }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, "string-width": { @@ -14509,13 +14597,13 @@ } }, "yargs": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", - "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", + "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": "^2.0.0", + "decamelize": "^1.2.0", "find-up": "^3.0.0", "get-caller-file": "^1.0.1", "os-locale": "^3.0.0", @@ -14525,16 +14613,17 @@ "string-width": "^2.0.0", "which-module": "^2.0.0", "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^10.1.0" + "yargs-parser": "^11.1.1" } }, "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "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": "^4.1.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } @@ -14599,17 +14688,6 @@ "dev": true, "requires": { "iconv-lite": "0.4.24" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } } }, "whatwg-mimetype": { @@ -14717,18 +14795,10 @@ "winston-transport": "^4.3.0" }, "dependencies": { - "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "requires": { - "lodash": "^4.17.11" - } - }, "readable-stream": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.2.0.tgz", - "integrity": "sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", + "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -14790,9 +14860,9 @@ "dev": true }, "worker-farm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", - "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", "dev": true, "requires": { "errno": "~0.1.7" @@ -14815,9 +14885,9 @@ "dev": true }, "write-file-atomic": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", - "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "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", @@ -14894,19 +14964,19 @@ "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=", "dev": true }, - "xregexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", - "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", - "dev": true - }, "xtend": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", - "dev": true, "requires": { "object-keys": "~0.4.0" + }, + "dependencies": { + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" + } } }, "xxhashjs": { @@ -14925,35 +14995,34 @@ "dev": true }, "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz", + "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==", "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", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "y18n": "^4.0.0", + "yargs-parser": "^13.0.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "find-up": { @@ -14972,30 +15041,31 @@ "dev": true }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { + "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "strip-ansi": "^5.1.0" } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } } } }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz", + "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -15003,9 +15073,9 @@ }, "dependencies": { "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true } } @@ -15014,27 +15084,27 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", - "dev": true, "requires": { "fd-slicer": "~1.0.1" } }, "yn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.0.0.tgz", - "integrity": "sha512-+Wo/p5VRfxUgBUGy2j/6KX2mj9AYJWOHuhMjMcbBFc3y54o9/4buK1ksBvuiK01C3kby8DH9lSmJdSxw+4G/2Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.0.tgz", + "integrity": "sha512-kKfnnYkbTfrAdd0xICNFw7Atm8nKpLcLv9AZGEt+kczL/WQVai4e2V6ZN8U/O+iI6WrNuJjNNOyu4zfhl9D3Hg==", "dev": true }, "zen-observable": { - "version": "0.8.13", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.13.tgz", - "integrity": "sha512-fa+6aDUVvavYsefZw0zaZ/v3ckEtMgCFi30sn91SEZea4y/6jQp05E3omjkX91zV6RVdn15fqnFZ6RKjRGbp2g==" + "version": "0.8.14", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.14.tgz", + "integrity": "sha512-kQz39uonEjEESwh+qCi83kcC3rZJGh4mrZW7xjkSQYXkq//JZHTtKo+6yuVloTgMtzsIWOJrjIrKvk/dqm0L5g==" }, "zen-observable-ts": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.15.tgz", - "integrity": "sha512-sXKPWiw6JszNEkRv5dQ+lQCttyjHM2Iks74QU5NP8mMPS/NrzTlHDr780gf/wOBqmHkPO6NCLMlsa+fAQ8VE8w==", + "version": "0.8.18", + "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.18.tgz", + "integrity": "sha512-q7d05s75Rn1j39U5Oapg3HI2wzriVwERVo4N7uFGpIYuHB9ff02P/E92P9B8T7QVC93jCMHpbXH7X0eVR5LA7A==", "requires": { + "tslib": "^1.9.3", "zen-observable": "^0.8.0" } }, diff --git a/package.json b/package.json index db876a6..394360f 100644 --- a/package.json +++ b/package.json @@ -133,8 +133,7 @@ "copy-webpack-plugin": "^5.0.0", "css-loader": "^2.1.0", "ejs-webpack-loader": "^2.2.2", - "electron": "^4.0.6", - "electron-builder": "^20.38.5", + "electron-builder": "^20.39.0", "file-loader": "^3.0.1", "generate-json-webpack-plugin": "^0.3.1", "github": "~0.2.4", @@ -162,6 +161,7 @@ "apollo-link-context": "^1.0.15", "apollo-link-error": "^1.1.7", "compare-versions": "^3.4.0", + "electron": "^5.0.1", "electron-platform": "^1.2.0", "fs-extra": "^7.0.1", "graphql": "^14.1.1", diff --git a/src/core/accounts-connector.ts b/src/core/accounts-connector.ts index 43a1e28..ec8ed72 100644 --- a/src/core/accounts-connector.ts +++ b/src/core/accounts-connector.ts @@ -3,6 +3,7 @@ import {AdMobSessions} from 'core/admob-api/admob-sessions.helper'; import {AdMobAccount} from 'core/appdeal-api/interfaces/admob-account.interface'; import {Connector} from 'core/connector'; import {Store} from 'core/store'; +import {UserAccount} from 'interfaces/common.interfaces'; import {Action, ActionTypes} from 'lib/actions'; import {openAppodealAccountsWindow, openAppodealSignInWindow} from 'lib/ui-windows'; @@ -24,7 +25,12 @@ export class AccountsConnector extends Connector { case ActionTypes.appodealSignOut: return this.store.appodealSignOut(payload.appodealAccountId); case ActionTypes.adMobAddAccount: - return this.store.addAdMobAccount(payload.appodealAccountId); + let result = await this.store.addAdMobAccount(payload.appodealAccountId); + let accountForSelection = result.newAccount || result.existingAccount; + if (accountForSelection) { + await this.store.selectAdMobAccount(accountForSelection); + } + return result; case ActionTypes.selectAccount: return this.store.selectAdMobAccount(payload.adMobAccount); case ActionTypes.adMobSetCredentials: diff --git a/src/core/admob-api/account-setup.helper.ts b/src/core/admob-api/account-setup.helper.ts index a42f155..d58168e 100644 --- a/src/core/admob-api/account-setup.helper.ts +++ b/src/core/admob-api/account-setup.helper.ts @@ -5,26 +5,18 @@ import {EventEmitter} from 'events'; import {Debug} from 'lib/debug'; import {Sentry} from 'lib/sentry'; import {TaskRunner, TaskRunnerState} from 'lib/task-runner'; -import {openDebugWindow} from 'lib/window'; +import {messageDialog, openDebugWindow} from 'lib/window'; import url from 'url'; -const PROJECT_NAME = 'Appodeal'; -const APP_NAME = 'Appodeal Revenue'; -const CLIENT_NAME = 'Appodeal AdMob Sync App'; -const DOMAINS = [ - 'appodeal.com' -]; -const ALLOWED_JS = [ - 'https://staging7.appodeal.com', - 'https://www.appodeal.com', - 'https://appodeal.com' -]; -const ALLOWED_CALLBACKS = [ - 'https://staging7.appodeal.com/admob_plugin/api/v3/oauth/callback', - 'https://www.appodeal.com/admob_plugin/api/v3/oauth/callback', - 'https://appodeal.com/admob_plugin/api/v3/oauth/callback' -]; +let {setupOptions} = environment; + +const PROJECT_NAME = setupOptions.projectName; +const APP_NAME = setupOptions.appName; +const CLIENT_NAME = setupOptions.clientName; +const DOMAINS = setupOptions.domains; +const ALLOWED_JS = setupOptions.allowedJs; +const ALLOWED_CALLBACKS = setupOptions.allowedCallbacks; export class AccountSetup extends EventEmitter { @@ -55,36 +47,49 @@ export class AccountSetup extends EventEmitter { let {window, debug} = await openDebugWindow('https://console.developers.google.com', this.session); this.window = window; this.debug = debug; + this.window.setClosable(false); this.runner.once('cancel', () => this.emit('cancel')); if (this.runner.state === TaskRunnerState.idle) { - this.initTasks(); - this.runner.on('progress', progress => this.emit('progress', progress)); - this.emit('start'); - this.runner.runTasks() - .then(() => { - if (this.clientId && this.clientSecret) { - this.emit('finish', { - clientId: this.clientId, - clientSecret: this.clientSecret - }); - } else { - throw new Error('Could not get clientId and clientSecret.'); - } - }) - .catch(err => { - this.emit('error', err); - Sentry.captureException(err); - }) - .finally(() => { - this.window.close(); - }); + let tosAccepted = await this.checkTermsOfService().catch(() => false); + if (tosAccepted) { + this.initTasks(); + this.runner.on('progress', progress => this.emit('progress', progress)); + this.emit('start'); + this.runner.runTasks() + .then(() => { + if (this.clientId && this.clientSecret) { + this.emit('finish', { + clientId: this.clientId, + clientSecret: this.clientSecret + }); + } else { + throw new Error('Could not get clientId and clientSecret.'); + } + }) + .catch(err => { + this.emit('error', err); + Sentry.captureException(err); + }) + .finally(() => { + this.closeWindow(); + }); + } else { + this.runner.break(); + this.emit('error'); + this.closeWindow(); + } } else { - this.window.close(); + this.closeWindow() } } + private closeWindow () { + this.window.setClosable(true); + this.window.close(); + } + stop () { return this.runner.break(); } @@ -99,6 +104,50 @@ export class AccountSetup extends EventEmitter { this.createCredentials(); } + async checkTermsOfService () { + const agreeCheckboxContainer = '[formgroupname="tosAcceptancesFormGroup"]'; + let required = !!(await this.debug.waitElementVisible(agreeCheckboxContainer, 5000).catch(() => false)); + + if (required) { + let userDecision = await this.askForTermsOfService(); + if (userDecision) { + this.window.show(); + await this.debug.evaluate(` + new Promise(resolve => { + let agreeBtn = document.querySelector('.mat-dialog-actions button'); + if (agreeBtn) { + agreeBtn.addEventListener('click', function listener () { + agreeBtn.removeEventListener('click', listener); + resolve(); + }); + } + }); + `); + this.window.hide(); + return true; + } else { + return false; + } + } + return true; + } + + private async askForTermsOfService (): Promise { + let button = await messageDialog('You have to accept terms of service from Google', null, [ + { + primary: true, + label: 'OK', + action: () => true + }, + { + cancel: true, + label: 'Cancel', + action: () => false + } + ]); + return button.action(); + } + findProject () { const projectSwitcherBtn = '[data-prober="cloud-console-core-functions-project-switcher"]'; const newProjectBtn = '.purview-picker-create-project-button'; @@ -113,7 +162,9 @@ export class AccountSetup extends EventEmitter { this.runner.createTask(() => this.debug.waitElementVisible(newProjectBtn).catch(() => { this.runner.returnTo('find'); })); + this.runner.createTask(() => this.debug.wait(500)); this.runner.createTask(() => this.debug.enterText(PROJECT_NAME, searchInput)); + this.runner.createTask(() => this.debug.wait(500)); this.runner.createTask(async () => projectNodeId = await this.debug.waitElement(projectNameSelector).catch(() => 0)); this.runner.createTask(async () => { if (projectNodeId) { diff --git a/src/core/store.ts b/src/core/store.ts index 0a8ea15..de5106c 100644 --- a/src/core/store.ts +++ b/src/core/store.ts @@ -133,12 +133,12 @@ export class Store { return acc; }, {}); - set(this.state, 'syncHistory', {...(this.state.syncHistory || {}), ...syncHistory}); + set(this.state, 'syncHistory', deepAssign({}, (this.state.syncHistory || {}), syncHistory)); } async updateAdMobAccountInfo (account: Pick) { const history = await SyncHistory.getHistory(account); - set(this.state, 'syncHistory', {...(this.state.syncHistory || {}), [account.id]: history}); + set(this.state, 'syncHistory', deepAssign({}, (this.state.syncHistory || {}), {[account.id]: history})); } @@ -212,7 +212,7 @@ export class Store { } this.updatedID = setTimeout(() => { this.updatedID = null; - set(this.state, 'syncProgress', {...this.state.syncProgress}); + set(this.state, 'syncProgress', deepAssign({}, this.state.syncProgress)); }, 500); } @@ -314,6 +314,7 @@ export class Store { let oldState = accountsState.get(accountId); updatedAccounts.push({ ...oldState, + id: accountId, active: !!account, email: account && account.email ? account.email : oldState.email }); @@ -325,12 +326,11 @@ export class Store { } }); this.appodealAccounts = accounts; - if (!this.state.selectedAppodealAccount) { - this.selectAppodealAccount(updatedAccounts[0] || null); - } else { - this.selectAppodealAccount(this.state.selectedAppodealAccount); - } - + let accountsArray = [...accounts.values()]; + let toSelect = this.state.selectedAppodealAccount + ? accountsArray.find(acc => acc.id === this.state.selectedAppodealAccount.id) + : accountsArray[0]; + await this.selectAppodealAccount(toSelect || null); return accounts; }); } @@ -347,7 +347,7 @@ export class Store { } @action - async addAdMobAccount (appodealAccountId: string) { + async addAdMobAccount (appodealAccountId: string): Promise<{ newAccount: AdMobAccount, existingAccount: AdMobAccount }> { let account = await AdMobSessions.signIn(); if (account) { let existingAccount = this.state.selectedAppodealAccount.accounts.find(acc => acc.id === account.id); @@ -357,7 +357,7 @@ export class Store { await this.fetchAllAppodealUsers(); return { existingAccount: null, - newAccount: account + newAccount: this.state.selectedAppodealAccount.accounts.find(acc => acc.id === account.id) }; } else { throw new Error(`Can't create AdMob account`); @@ -403,7 +403,10 @@ export class Store { window.close(); }) .then(() => this.fetchAppodealUser(appodealAccountId)) - .then(account => this.selectAppodealAccount(account)); + .then(account => this.selectAppodealAccount(account)) + .then(() => this.selectAdMobAccount( + this.state.selectedAppodealAccount.accounts.find(acc => acc.id === accountId) + )); } @action @@ -479,49 +482,45 @@ Do you what to add new Account (${resultAccount.email})?` @action async patchPreferences (patch: Partial<{ [P in keyof AppPreferences]: Partial }>) { - set(this.state, 'preferences', deepAssign({...this.state.preferences}, patch)); - await Preferences.save(this.state.preferences); + let newPreferences = deepAssign({}, this.state.preferences, patch as AppPreferences); + set(this.state, 'preferences', newPreferences); + await Preferences.save(newPreferences); } @action startAccountSetup (accountId: string) { - set(this.state, 'setupProgress', { - ...this.state.setupProgress, + set(this.state, 'setupProgress', deepAssign({}, this.state.setupProgress, { [accountId]: { state: 'idle', percent: 0 } - }); + })); } @action setAccountSetupProgress (accountId: string, percent: number) { - set(this.state, 'setupProgress', { - ...this.state.setupProgress, + set(this.state, 'setupProgress', deepAssign({}, this.state.setupProgress, { [accountId]: { state: 'progress', percent } - }); + })); } @action errorAccountSetup (accountId: string) { - set(this.state, 'setupProgress', { - ...this.state.setupProgress, + set(this.state, 'setupProgress', deepAssign({}, this.state.setupProgress, { [accountId]: { state: 'error', percent: 0 } - }); + })); } @action removeAccountSetup (accountId: string) { - let newProgress = { - ...this.state.setupProgress - }; + let newProgress = deepAssign({}, this.state.setupProgress); delete newProgress[accountId]; set(this.state, 'setupProgress', newProgress); } @@ -529,13 +528,12 @@ Do you what to add new Account (${resultAccount.email})?` @action setupState (accountId: string, {visible, mode}: AccountSetupState) { - set(this.state, 'accountSetup', { - ...this.state.accountSetup, + set(this.state, 'accountSetup', deepAssign({}, this.state.accountSetup, { [accountId]: { visible, mode } - }); + })); } } diff --git a/src/core/sync-apps/sync.service.ts b/src/core/sync-apps/sync.service.ts index 180fc53..cbe5064 100644 --- a/src/core/sync-apps/sync.service.ts +++ b/src/core/sync-apps/sync.service.ts @@ -56,6 +56,11 @@ export class SyncService { return reject(new Error('Can not run sync. App version is OutDated!')); } + if (!admobAccount.isReadyForReports) { + console.log('[Sync Service] Can not run sync. AdMob account is not ready. Setup is required!'); + return reject(new Error('Can not run sync. AdMob account is not ready. Setup is required!')); + } + const admobSession = await AdMobSessions.getSession(admobAccount); if (!admobSession || (await SyncHistory.getHistory(admobAccount)).admobAuthorizationRequired) { diff --git a/src/lib/app-menu.ts b/src/lib/app-menu.ts index 4d67bd0..8afdece 100644 --- a/src/lib/app-menu.ts +++ b/src/lib/app-menu.ts @@ -1,6 +1,6 @@ -import {Menu} from 'electron'; +import {Menu, MenuItemConstructorOptions} from 'electron'; import {isMacOS} from 'lib/platform'; -import {openAboutWindow} from "lib/ui-windows"; +import {openAboutWindow} from 'lib/ui-windows'; let INSTANCE: AppMenu = null; @@ -17,22 +17,28 @@ class AppMenu { this.menu = Menu.buildFromTemplate([ { label: 'Application', + type: 'submenu', submenu: [ - {label: 'About Application', click: () => openAboutWindow()}, + {type: 'normal', label: 'About Application', click: () => openAboutWindow()}, {type: 'separator'}, - {label: 'Quit', accelerator: 'Command+Q', role: 'quit'} + {type: 'normal', label: 'Quit', accelerator: 'Command+Q', role: 'quit'} ] - }, { + }, + { id: 'edit', label: 'Edit', + type: 'submenu', submenu: [ - {label: 'Undo', accelerator: 'CmdOrCtrl+Z', role: 'undo'}, - {label: 'Redo', accelerator: 'Shift+CmdOrCtrl+Z', role: 'redo'}, + {type: 'normal', label: 'Undo', accelerator: 'CmdOrCtrl+Z', role: 'undo'}, + {type: 'normal', label: 'Redo', accelerator: 'Shift+CmdOrCtrl+Z', role: 'redo'}, {type: 'separator'}, - {label: 'Cut', accelerator: 'CmdOrCtrl+X', role: 'cut'}, - {label: 'Copy', accelerator: 'CmdOrCtrl+C', role: 'copy'}, - {label: 'Paste', accelerator: 'CmdOrCtrl+V', role: 'paste'}, - {label: 'Select All', accelerator: 'CmdOrCtrl+A', role: 'selectAll'} + {type: 'normal', label: 'Cut', accelerator: 'CmdOrCtrl+X', role: 'cut'}, + {type: 'normal', label: 'Copy', accelerator: 'CmdOrCtrl+C', role: 'copy'}, + {type: 'normal', label: 'Paste', accelerator: 'CmdOrCtrl+V', role: 'paste'}, + {type: 'normal', label: 'Select All', accelerator: 'CmdOrCtrl+A', role: 'selectall'}, + ...(environment.development ? >[ + {type: 'normal', label: 'Open DevTools', accelerator: 'CmdOrCtrl+Option+I', role: 'toggledevtools'} + ] : []) ] } ]); diff --git a/src/lib/core.ts b/src/lib/core.ts index 91cd046..2c1d818 100644 --- a/src/lib/core.ts +++ b/src/lib/core.ts @@ -2,14 +2,21 @@ import {app, Session} from 'electron'; import fs from 'fs-extra'; import path from 'path'; +function copyValue (target, value) { + if (isObject(value)) { + return deepAssign(target || {}, value); + } else { + return value; + } +} export function deepAssign (target: Partial, ...sources: Array>): T { for (let source of sources) { for (let [key, value] of objectIterator(source)) { - if (isObject(value)) { - target[key] = deepAssign(target[key] || {}, value); + if (Array.isArray(value)) { + target[key] = value.map(item => copyValue(null, item)) as unknown as T[keyof T]; } else { - target[key] = value; + target[key] = copyValue(target[key], value); } } } diff --git a/src/lib/debug.ts b/src/lib/debug.ts index f06c705..2447201 100644 --- a/src/lib/debug.ts +++ b/src/lib/debug.ts @@ -5,6 +5,7 @@ type NodeIdOrSelector = number | string; export class Debug { + private networkTrackingEnabled = false; constructor (private debug: Debugger) { @@ -187,7 +188,7 @@ export class Debug { isElementExistsAndVisible (selector: string, maxTime?: number): Promise { return this.waitElementVisible(selector, maxTime) .then(() => true) - .catch(() => false) + .catch(() => false); } async scrollIntoView (selector: string) { @@ -197,6 +198,13 @@ export class Debug { await this.wait(300); } + evaluate (script: string) { + return this.exec('Runtime.evaluate', null, { + expression: script, + awaitPromise: true + }).catch(() => {}); + } + getCurrentUrl () { return this.exec('Runtime.evaluate', 'result', { expression: `location.href;` @@ -216,4 +224,40 @@ export class Debug { return this.querySelector(nodeIdOrSelector); } + waitForResponseFrom (url: string): Promise { + return new Promise(async (resolve, reject) => { + if (!this.networkTrackingEnabled) { + await this.exec('Network.enable', null) + .then(() => this.networkTrackingEnabled = true) + .catch(err => reject(err)); + } + let requestId = await this.getRequestId(url); + this.exec('Network.getResponseBody', 'body', {requestId}) + .then(body => resolve(body)) + .catch(err => reject(err)); + }); + + } + + private getRequestId (url) { + return new Promise((resolve, reject) => { + let requestId, + timer = setTimeout(() => { + this.debug.removeListener('message', listener); + reject(new Error(`Can't get response id for "${url}" during 20 sec`)); + }, 20000), + listener = (event, method, params) => { + if (!requestId && method === 'Network.requestWillBeSent' && params.request.url === url) { + requestId = params.requestId; + } + if (requestId && method === 'Network.loadingFinished' && params.requestId === requestId) { + this.debug.removeListener('message', listener); + clearTimeout(timer); + resolve(requestId); + } + }; + this.debug.on('message', listener); + }); + } + } diff --git a/src/lib/fetch.ts b/src/lib/fetch.ts index 96943e5..61aa5e3 100644 --- a/src/lib/fetch.ts +++ b/src/lib/fetch.ts @@ -1,4 +1,4 @@ -import {net, Session} from 'electron'; +import {net, Session, Cookie} from 'electron'; export interface Fetcher extends Function { @@ -94,6 +94,6 @@ export function nodeFetch ( }); } -export function getSessionCookies (session: Session): Promise> { - return new Promise(resolve => session.cookies.get({}, (error, cookies = []) => resolve(cookies))); +export function getSessionCookies (session: Session): Promise> { + return session.cookies.get({}) as unknown as Promise>; } diff --git a/src/lib/messages.ts b/src/lib/messages.ts index a830566..a7d8b3c 100644 --- a/src/lib/messages.ts +++ b/src/lib/messages.ts @@ -1,4 +1,4 @@ -import {ipcMain, ipcRenderer, remote} from 'electron'; +import {ipcMain, ipcRenderer} from 'electron'; import {Action} from 'lib/actions'; import uuid from 'uuid'; @@ -36,11 +36,7 @@ export function sendToMain (channel: string, action: Action): Promise { export function onMessageFromMain (channel: string, callback: (message: T) => void) { - ipcRenderer.on(channel, (event, message) => { - if (event.sender !== remote.getCurrentWindow().webContents) { - callback(message); - } - }); + ipcRenderer.on(channel, (event, message) => callback(message)); } diff --git a/src/lib/theme.ts b/src/lib/theme.ts index 525251a..ef0da1d 100644 --- a/src/lib/theme.ts +++ b/src/lib/theme.ts @@ -1,4 +1,4 @@ -import {systemPreferences, ipcMain} from 'electron'; +import {ipcMain, systemPreferences} from 'electron'; import {isMacOS} from 'lib/platform'; @@ -7,6 +7,7 @@ export enum AppAppearance { light = 'light' } + const listeners = new Set<(appearance: AppAppearance) => void>(); let interval, previousValue; @@ -51,9 +52,10 @@ export function getCurrentTheme (): AppAppearance { } export function getBgColor (): string { - return isDark() ? 'rgb(56,55,55)' : 'rgb(236,236,236)' + return isDark() ? 'rgb(56,55,55)' : 'rgb(236,236,236)'; } + export function initThemeSwitcher () { if (isMacOS()) { systemPreferences.setAppLevelAppearance(getCurrentTheme()); @@ -66,3 +68,6 @@ export function initThemeSwitcher () { } } + + + diff --git a/src/lib/window.ts b/src/lib/window.ts index 974df05..c4cbaa3 100644 --- a/src/lib/window.ts +++ b/src/lib/window.ts @@ -142,45 +142,34 @@ export function waitForNavigation (window: BrowserWindow, urlFragment: RegExp = }); } -export function confirmDialog (message) { - return new Promise(resolve => { - const OKButton = 0; +export async function confirmDialog (message) { + const OKButton = 0; + const dialogOptions = {type: 'question', buttons: ['OK', 'Cancel'], message}; + let i = await (dialog || remote.dialog).showMessageBox(null, dialogOptions); + return (i === OKButton); - const dialogOptions = {type: 'question', buttons: ['OK', 'Cancel'], message}; - - (dialog || remote.dialog).showMessageBox(dialogOptions, i => { - if (i === OKButton) { - - return resolve(true); - } - return resolve(false); - }); - }); } interface DialogButton { label: string; - action?: () => void; + action?: () => any; primary?: boolean; cancel?: boolean; } -export function messageDialog ( +export async function messageDialog ( message: string, detail: string = undefined, buttons: Array = [{label: 'OK', action: () => {}, primary: true, cancel: true}] ): Promise { - return new Promise(resolve => { - (dialog || remote.dialog).showMessageBox({ - message, - detail, - buttons: buttons.map(btn => btn.label), - cancelId: buttons.findIndex(btn => btn.cancel), - defaultId: buttons.findIndex(btn => btn.primary) - }, number => { - resolve(buttons[number]); - }); + let number = await (dialog || remote.dialog).showMessageBox(null, { + message, + detail, + buttons: buttons.map(btn => btn.label), + cancelId: buttons.findIndex(btn => btn.cancel), + defaultId: buttons.findIndex(btn => btn.primary) }); + return buttons[number]; } diff --git a/src/main.ts b/src/main.ts index a2aaefc..aea0488 100644 --- a/src/main.ts +++ b/src/main.ts @@ -9,6 +9,7 @@ import {AuthContext} from 'core/appdeal-api/auth-context'; import {OnlineService} from 'core/appdeal-api/online.service'; import {ErrorFactoryService} from 'core/error-factory/error-factory.service'; import {AuthorizationError} from 'core/error-factory/errors/authorization.error'; +import {InternalError} from 'core/error-factory/errors/internal-error'; import {LogsConnector} from 'core/logs-connector'; import {OnlineConnector} from 'core/online-connector'; import {Store} from 'core/store'; @@ -20,14 +21,13 @@ import {app} from 'electron'; import {createAppMenu} from 'lib/app-menu'; import {Preferences} from 'lib/app-preferences'; import {AppTray} from 'lib/app-tray'; +import {hideDock} from 'lib/dock'; import {initBugTracker, Sentry} from 'lib/sentry'; import {initThemeSwitcher} from 'lib/theme'; import {TrayIcon} from 'lib/tray-icon'; import {openAppodealAccountsWindow, openAppodealSignInWindow} from 'lib/ui-windows'; import {UpdatesService} from 'lib/updates'; -import * as path from 'path'; -import {InternalError} from './core/error-factory/errors/internal-error'; -import {hideDock} from './lib/dock'; +import path from 'path'; if (environment.development) { @@ -41,8 +41,9 @@ initBugTracker(environment.sentry); initThemeSwitcher(); hideDock(); + app.on('window-all-closed', () => {}); -app.on('ready', async () => { +app.whenReady().then(async () => { // APP INITIALIZERS let [preferences] = await Promise.all([ diff --git a/src/ui/components/account-status/AccountStatusComponent.tsx b/src/ui/components/account-status/AccountStatusComponent.tsx index bc0910f..de8a808 100644 --- a/src/ui/components/account-status/AccountStatusComponent.tsx +++ b/src/ui/components/account-status/AccountStatusComponent.tsx @@ -14,13 +14,15 @@ interface Props { export class AccountStatusComponent extends React.Component { render (): React.ReactNode { - if (this.props.historyInfo.admobAuthorizationRequired) { + let {historyInfo, syncProgress} = this.props; + + if (historyInfo && historyInfo.admobAuthorizationRequired) { return Sign In required!; } - if (this.props.syncProgress) { + if (syncProgress) { // show warning - switch (this.props.syncProgress.lastEvent) { + switch (syncProgress.lastEvent) { case SyncEventsTypes.Started: { return 'Starting Sync'; } @@ -28,12 +30,12 @@ export class AccountStatusComponent extends React.Component { return 'Calculating progress'; } default: - return `Syncing ${this.props.syncProgress.completedApps + this.props.syncProgress.failedApps + 1}/${this.props.syncProgress.totalApps} apps...`; + return `Syncing ${syncProgress.completedApps + syncProgress.failedApps + 1}/${syncProgress.totalApps} apps...`; } } - if (this.props.historyInfo.lastSync) { - return Synced: {(new Date(this.props.historyInfo.lastSync)).toLocaleString()}; + if (historyInfo && historyInfo.lastSync) { + return Synced: {(new Date(historyInfo.lastSync)).toLocaleString()}; } // not synced yet diff --git a/src/ui/components/accounts/Accounts.scss b/src/ui/components/accounts/Accounts.scss index b317985..4665201 100644 --- a/src/ui/components/accounts/Accounts.scss +++ b/src/ui/components/accounts/Accounts.scss @@ -1,4 +1,5 @@ .accounts { + height: 100%; flex: 1 0 auto; display: grid; grid-template-columns: 220px 1fr; diff --git a/src/ui/components/accounts/AccountsComponent.tsx b/src/ui/components/accounts/AccountsComponent.tsx index 07296e3..8675e11 100644 --- a/src/ui/components/accounts/AccountsComponent.tsx +++ b/src/ui/components/accounts/AccountsComponent.tsx @@ -14,6 +14,13 @@ import style from './Accounts.scss'; type AccountsComponentProps = AppState; +const emailCollator = new Intl.Collator('en', { + numeric: true, + usage: 'sort', + sensitivity: 'base', + ignorePunctuation: true +}); + export function AccountsComponent ( { selectedAppodealAccount, @@ -25,7 +32,8 @@ export function AccountsComponent ( accountSetup }: AccountsComponentProps ) { - let adMobAccounts = selectedAppodealAccount ? selectedAppodealAccount.accounts : []; + let adMobAccounts = (selectedAppodealAccount ? selectedAppodealAccount.accounts : []) + .sort((a, b) => emailCollator.compare(a.email, b.email)); let appodealAccount = selectedAppodealAccount; return (
diff --git a/src/ui/components/admob-account-setup/AdMobAccountSetup.scss b/src/ui/components/admob-account-setup/AdMobAccountSetup.scss index 678653d..6d0a536 100644 --- a/src/ui/components/admob-account-setup/AdMobAccountSetup.scss +++ b/src/ui/components/admob-account-setup/AdMobAccountSetup.scss @@ -20,7 +20,7 @@ background: url('data:image/svg+xml;utf-8,') top center repeat-x, var(--warn-color); background-size: 43px 43px; position: relative; - -webkit-text-stroke: 1.5px #000; + -webkit-text-stroke: 2px #000; &::after { content: 'Setup required'; diff --git a/src/ui/components/admob-account/AdmobAccountComponent.tsx b/src/ui/components/admob-account/AdmobAccountComponent.tsx index d064915..cd9aa52 100644 --- a/src/ui/components/admob-account/AdmobAccountComponent.tsx +++ b/src/ui/components/admob-account/AdmobAccountComponent.tsx @@ -83,14 +83,20 @@ export class AdmobAccountComponent extends Component - - {account.isReadyForReports && <> -
- {this.signedIn && <> + {!this.signedIn &&
+ +
} + {this.signedIn && <> + + {account.isReadyForReports && <> +
{ // make public when open admob safe browsing admob is implemented environment.development && @@ -108,26 +114,21 @@ export class AdmobAccountComponent extends Component this.displaySetupForm()}>Update credentials} - } - {!this.signedIn && <> - - } -
- - {!!this.props.syncProgress && -
- - -
- } - + +
+ + {!!this.props.syncProgress && +
+ + +
+ } + + } } ; } diff --git a/src/ui/components/root/RootComponent.tsx b/src/ui/components/root/RootComponent.tsx index 5ebee25..57380bb 100644 --- a/src/ui/components/root/RootComponent.tsx +++ b/src/ui/components/root/RootComponent.tsx @@ -19,8 +19,7 @@ interface RootComponentState { export class RootComponent extends React.Component { private tabs = [ {id: 'accounts', label: 'Accounts', isDisabled: () => this.props.store.outdatedVersion}, - {id: 'updates', label: 'Updates', isDisabled: () => false}, - {id: 'development', label: 'Development', isDisabled: () => false} + {id: 'updates', label: 'Updates', isDisabled: () => false} ]; constructor (props) { @@ -28,6 +27,10 @@ export class RootComponent extends React.Component false}) + } } componentWillMount (): void { diff --git a/tsconfig.json b/tsconfig.json index 85bb9e9..2acff17 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,6 +9,7 @@ "experimentalDecorators": true, "resolveJsonModule": true, "target": "es2018", + "module": "commonjs", "jsx": "react", "typeRoots": [ "node_modules/@types", diff --git a/typings/environment.d.ts b/typings/environment.d.ts index 7509bed..9e25466 100644 --- a/typings/environment.d.ts +++ b/typings/environment.d.ts @@ -21,6 +21,14 @@ declare interface Environment { releaseNotesUrl: string, updatesServerUrl: string }; + readonly setupOptions: { + projectName: string, + appName: string, + clientName: string, + domains: Array, + allowedJs: Array, + allowedCallbacks: Array + }; } declare const environment: Environment; diff --git a/webpack/development.ts b/webpack/development.ts index 2ee8038..d3c08c1 100644 --- a/webpack/development.ts +++ b/webpack/development.ts @@ -1,4 +1,4 @@ -import * as path from 'path'; +import path from 'path'; import webpack from 'webpack'; import merge from 'webpack-merge'; import {entries, SRC_PATH} from './default'; From c98ceb56cb26c5e49ed0cc5cda4e422ffb806b4b Mon Sep 17 00:00:00 2001 From: alex-skakun Date: Fri, 10 May 2019 18:34:20 +0300 Subject: [PATCH 16/32] ui fixes --- src/core/accounts-connector.ts | 1 + .../admob-account-setup/AdMobAccountSetupComponent.tsx | 1 + 2 files changed, 2 insertions(+) diff --git a/src/core/accounts-connector.ts b/src/core/accounts-connector.ts index ec8ed72..31a246f 100644 --- a/src/core/accounts-connector.ts +++ b/src/core/accounts-connector.ts @@ -41,6 +41,7 @@ export class AccountsConnector extends Connector { case ActionTypes.adMobSetupTutorial: return AdMobSessions.openSetupTutorial(); case ActionTypes.adMobSetupAccount: + this.store.removeAccountSetup(payload.adMobAccount.id); return this.setupAccount(payload.appodealAccountId, payload.adMobAccount); case ActionTypes.adMobSetupState: return this.store.setupState(payload.adMobAccount.id, payload.state); diff --git a/src/ui/components/admob-account-setup/AdMobAccountSetupComponent.tsx b/src/ui/components/admob-account-setup/AdMobAccountSetupComponent.tsx index c113836..fe175ba 100644 --- a/src/ui/components/admob-account-setup/AdMobAccountSetupComponent.tsx +++ b/src/ui/components/admob-account-setup/AdMobAccountSetupComponent.tsx @@ -60,6 +60,7 @@ export function AdMobAccountSetup ({setupProgress, setupState, account, appodeal
+
} From e0ce212e06a90e2d72c854fd90bbe3e80d3b0244 Mon Sep 17 00:00:00 2001 From: Alexey Nalivaiko Date: Sat, 11 May 2019 12:57:53 +0300 Subject: [PATCH 17/32] [AMSA-41] make single clear data window --- src/core/delete-data-connector.ts | 14 +++++++++++++- src/lib/actions.ts | 1 + src/lib/ui-windows.ts | 14 ++++++++++---- src/ui/components/clear-data/ClearData.scss | 3 +++ .../clear-data/ClearDataComponent.tsx | 17 ++++++++--------- 5 files changed, 35 insertions(+), 14 deletions(-) diff --git a/src/core/delete-data-connector.ts b/src/core/delete-data-connector.ts index e138da8..0c3a199 100644 --- a/src/core/delete-data-connector.ts +++ b/src/core/delete-data-connector.ts @@ -5,10 +5,13 @@ import * as fs from 'fs-extra'; import {Action, ActionTypes} from 'lib/actions'; import {openClearDataWindow} from 'lib/ui-windows'; import {SyncService} from './sync-apps/sync.service'; +import BrowserWindow = Electron.BrowserWindow; export class DeleteDataConnector extends Connector { + openedWindow?: BrowserWindow; + constructor (private store: Store, private syncService: SyncService) { super('delete-data'); } @@ -16,7 +19,9 @@ export class DeleteDataConnector extends Connector { async onAction ({type, payload}: Action) { switch (type) { case ActionTypes.showDeleteAllAccountsDataDialog: - return openClearDataWindow(); + return this.openedWindow = await openClearDataWindow(); + case ActionTypes.hideDeleteAllAccountsDataDialog: + return this.closeActiveWindow(); case ActionTypes.deleteAllAccountsData: await this.syncService.destroy(); this.removeData(); @@ -28,6 +33,13 @@ export class DeleteDataConnector extends Connector { } } + closeActiveWindow () { + if (this.openedWindow) { + this.openedWindow.close(); + this.openedWindow = null; + } + } + removeData () { console.log('[DeleteDataConnector] removing local data'); fs.removeSync(app.getPath('userData')); diff --git a/src/lib/actions.ts b/src/lib/actions.ts index 7c89ed5..c4062ea 100644 --- a/src/lib/actions.ts +++ b/src/lib/actions.ts @@ -12,6 +12,7 @@ export enum ActionTypes { runSync = 'RunSync', openAdmobPage = 'openAdmobPage', selectAccount = 'selectAdmobAccount', + hideDeleteAllAccountsDataDialog = 'hideDeleteAllAccountsDataDialog', showDeleteAllAccountsDataDialog = 'showDeleteAllAccountsDataDialog', deleteAllAccountsData = 'deleteLocalData', selectAppodealAccount = 'selectAppodealAccount', diff --git a/src/lib/ui-windows.ts b/src/lib/ui-windows.ts index bd887cb..b4baaf6 100644 --- a/src/lib/ui-windows.ts +++ b/src/lib/ui-windows.ts @@ -35,10 +35,16 @@ export async function openSettingsWindow () { } export function openClearDataWindow () { - return openDialogWindow('./clear-data.html', { - width: 350, - height: 220, - parent: null + return new Promise(resolve => { + openDialogWindow( + './clear-data.html', + { + width: 350, + height: 280, + parent: null + }, + (window) => resolve(window) + ); }); } diff --git a/src/ui/components/clear-data/ClearData.scss b/src/ui/components/clear-data/ClearData.scss index dfd8a62..86629b7 100644 --- a/src/ui/components/clear-data/ClearData.scss +++ b/src/ui/components/clear-data/ClearData.scss @@ -6,4 +6,7 @@ button { float: right; } + button + button { + margin: 0 10px; + } } diff --git a/src/ui/components/clear-data/ClearDataComponent.tsx b/src/ui/components/clear-data/ClearDataComponent.tsx index acb22c8..a3237d9 100644 --- a/src/ui/components/clear-data/ClearDataComponent.tsx +++ b/src/ui/components/clear-data/ClearDataComponent.tsx @@ -2,7 +2,6 @@ import React from 'react'; import {action, ActionTypes} from '../../../lib/actions'; import {singleEvent} from '../../../lib/dom'; import {sendToMain} from '../../../lib/messages'; -import {confirmDialog} from '../../../lib/window'; import style from './ClearData.scss'; @@ -18,18 +17,18 @@ export function ClearData () {
  • Sync history for each admob account
  • Sync log files
  • +

    {''} All data will be immediately deleted. + You will immediately signed out. App will be closed. You cannot revert this action.

    +
    ); } function confirmDeleteLocalData () { - confirmDialog( - `Confirm your intention to delete the data! -All the data will be immediately deleted, -all active syncs will be stopped, -you will immediately signed out. -App will be closed. -This action cannot be undone!` - ).then((confirmed) => confirmed ? sendToMain('delete-data', action(ActionTypes.deleteAllAccountsData)) : null); + return sendToMain('delete-data', action(ActionTypes.deleteAllAccountsData)); +} + +function closeWindow () { + return sendToMain('delete-data', action(ActionTypes.hideDeleteAllAccountsDataDialog)); } From fdb642104946de817fba3d02b37f25e2b0926181 Mon Sep 17 00:00:00 2001 From: Alexey Nalivaiko Date: Sat, 11 May 2019 13:14:59 +0300 Subject: [PATCH 18/32] [AMSA-41] close windows while closing app --- src/lib/messages.ts | 8 ++++---- src/lib/ui-windows.ts | 5 +++++ src/main.ts | 3 ++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/lib/messages.ts b/src/lib/messages.ts index a830566..6b72719 100644 --- a/src/lib/messages.ts +++ b/src/lib/messages.ts @@ -5,13 +5,13 @@ import uuid from 'uuid'; export function onActionFromRenderer (channel: string, cb: (action: Action) => void): Function { let listener = ({sender}, {id, action}: { id: string, action: Action }) => { + const send = (channel, ...args) => sender.isDestroyed() ? null : sender.send(channel, ...args); Promise.resolve() .then(() => cb(action)) .then(result => { - sender.send(`${channel}:response:${id}`, {error: null, result}); - }) - .catch(error => { - sender.send(`${channel}:response:${id}`, {error: errorToJson(error), result: null}); + send(`${channel}:response:${id}`, {error: null, result}); + }, error => { + send(`${channel}:response:${id}`, {error: errorToJson(error), result: null}); }); }; ipcMain.on(channel, listener); diff --git a/src/lib/ui-windows.ts b/src/lib/ui-windows.ts index b4baaf6..7d7c688 100644 --- a/src/lib/ui-windows.ts +++ b/src/lib/ui-windows.ts @@ -129,3 +129,8 @@ async function openOrFocus (windowName: string, openFunction: () => BrowserWindo return window; } } + + +export function closeAllWindows () { + OPENED_WINDOWS.forEach(async window => (await window).close()); +} diff --git a/src/main.ts b/src/main.ts index 9dba0aa..706dde0 100644 --- a/src/main.ts +++ b/src/main.ts @@ -23,7 +23,7 @@ import {AppTray} from 'lib/app-tray'; import {initBugTracker, Sentry} from 'lib/sentry'; import {initThemeSwitcher} from 'lib/theme'; import {TrayIcon} from 'lib/tray-icon'; -import {openAppodealAccountsWindow, openAppodealSignInWindow} from 'lib/ui-windows'; +import {closeAllWindows, openAppodealAccountsWindow, openAppodealSignInWindow} from 'lib/ui-windows'; import {UpdatesService} from 'lib/updates'; import * as path from 'path'; import {DeleteDataConnector} from './core/delete-data-connector'; @@ -138,6 +138,7 @@ app.on('ready', async () => { const cleanUpOnExit = () => Promise.all([ + closeAllWindows(), trayIcon.destroy(), tray.destroy(), onlineConnector.destroy(), From 0d405f08ada31568afeab419e02be92e7cebad49 Mon Sep 17 00:00:00 2001 From: alex-skakun Date: Sat, 11 May 2019 14:30:30 +0300 Subject: [PATCH 19/32] minor ui fixes --- config/development.json.example | 2 +- package-lock.json | 88 +++++---------------------------- src/core/accounts-connector.ts | 1 + 3 files changed, 13 insertions(+), 78 deletions(-) diff --git a/config/development.json.example b/config/development.json.example index 6c76202..679fb56 100644 --- a/config/development.json.example +++ b/config/development.json.example @@ -19,7 +19,7 @@ "setupOptions": { "projectName": "Appodeal", "appName": "Appodeal Revenue", - "clientName": "Appodeal AdMob Sync App", + "clientName": "Appodeal AdMob Sync App (staging)", "domains": [ "appodeal.com" ], diff --git a/package-lock.json b/package-lock.json index cef2c78..15c38cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4581,42 +4581,6 @@ "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", "dev": true }, - "ejs-loader": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/ejs-loader/-/ejs-loader-0.3.3.tgz", - "integrity": "sha512-1pQNFYu+4VIeLLNrSZ8QaiyFk9oXv8koUyQ2Pz5k0dw89HHjeiliTPQ46GfqAzCqJ8cEq8QFNj/HsVjyIuzKEA==", - "dev": true, - "requires": { - "loader-utils": "^0.2.7", - "lodash": "^4.17.11" - }, - "dependencies": { - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" - } - } - } - }, "ejs-webpack-loader": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/ejs-webpack-loader/-/ejs-webpack-loader-2.2.2.tgz", @@ -5306,6 +5270,7 @@ "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" } @@ -5443,7 +5408,6 @@ "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" } @@ -8171,7 +8135,6 @@ "integrity": "sha512-ULQZ5B1lWpH70O4xsANC4tf4Ko6RrpwhE3PtG6ERjMg1TiYTC2Wp4IntJVGro6a8HG9luYHhhmF4grF0Pltckg==", "dev": true, "requires": { - "@jest/types": "^24.7.0", "chalk": "^2.0.1", "diff-sequences": "^24.3.0", "jest-get-type": "^24.3.0", @@ -8193,6 +8156,7 @@ "integrity": "sha512-4fsS8fEfLa3lfnI1Jw6NxjhyRTgfpuOVTeUZZFyVYqeTa4hPhr2YkToUhouuLTrL2eMGOfpbdMyRx0GQ/VooKA==", "dev": true, "requires": { + "@jest/types": "^24.7.0", "chalk": "^2.0.1", "jest-get-type": "^24.3.0", "jest-util": "^24.7.1", @@ -9341,6 +9305,12 @@ "trim-newlines": "^1.0.0" } }, + "merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "dev": true + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -9903,7 +9873,8 @@ "semver": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true } } }, @@ -10026,8 +9997,7 @@ "semver": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" } } }, @@ -13855,42 +13825,6 @@ "through": "^2.3.8" } }, - "underscore-template-loader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/underscore-template-loader/-/underscore-template-loader-1.0.0.tgz", - "integrity": "sha512-4tzm3DY8nLD6mKCQmPk51vu5HW8T61fSGpfkUrlrwF0oOPTinL8Zk7W08xHOmCZ2Sh9bZHVMzVgr/DUM+10iUA==", - "dev": true, - "requires": { - "fastparse": "^1.1.1", - "loader-utils": "^0.2.11" - }, - "dependencies": { - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" - } - } - } - }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", diff --git a/src/core/accounts-connector.ts b/src/core/accounts-connector.ts index 31a246f..84d1461 100644 --- a/src/core/accounts-connector.ts +++ b/src/core/accounts-connector.ts @@ -44,6 +44,7 @@ export class AccountsConnector extends Connector { this.store.removeAccountSetup(payload.adMobAccount.id); return this.setupAccount(payload.appodealAccountId, payload.adMobAccount); case ActionTypes.adMobSetupState: + this.store.removeAccountSetup(payload.adMobAccount.id); return this.store.setupState(payload.adMobAccount.id, payload.state); case ActionTypes.adMobCancelSetup: let setup = this.setups.get(payload.adMobAccount.id); From 2691c568f0e9edf0f8cb3087abe73a3736110e59 Mon Sep 17 00:00:00 2001 From: Alexey Nalivaiko Date: Sat, 11 May 2019 15:15:04 +0300 Subject: [PATCH 20/32] [AMSA-chore] remove redundant log message --- src/core/appdeal-api/auth-context.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/core/appdeal-api/auth-context.ts b/src/core/appdeal-api/auth-context.ts index d666508..c19b07e 100644 --- a/src/core/appdeal-api/auth-context.ts +++ b/src/core/appdeal-api/auth-context.ts @@ -69,8 +69,11 @@ export class AuthContext extends EventEmitter { } let token = jwt_decode<{ rfr: number, exp: number }>(this.refreshToken), secondsNow = Date.now() / 1000; - console.debug('isTimeToRefresh', token, secondsNow); - return token.rfr && token.rfr < secondsNow && secondsNow < token.exp; + if (token.rfr && token.rfr < secondsNow && secondsNow < token.exp) { + console.debug('isTimeToRefresh', token, secondsNow); + return true; + } + return false; } remove () { From f55458a5f0e5c0702888e9ef2d87a1144eea70fc Mon Sep 17 00:00:00 2001 From: alex-skakun Date: Sat, 11 May 2019 15:27:16 +0300 Subject: [PATCH 21/32] review fixes --- src/core/admob-api/account-setup.helper.ts | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/src/core/admob-api/account-setup.helper.ts b/src/core/admob-api/account-setup.helper.ts index d58168e..0e16c40 100644 --- a/src/core/admob-api/account-setup.helper.ts +++ b/src/core/admob-api/account-setup.helper.ts @@ -329,25 +329,3 @@ export class AccountSetup extends EventEmitter { } } - - - - - - - - - - - - - - - - - - - - - - From d1e1d8a1f35222eeed6f638f630a76e551fe380c Mon Sep 17 00:00:00 2001 From: alex-skakun Date: Sat, 11 May 2019 15:38:42 +0300 Subject: [PATCH 22/32] changed message about terms of service of google developer console --- src/core/admob-api/account-setup.helper.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/admob-api/account-setup.helper.ts b/src/core/admob-api/account-setup.helper.ts index 0e16c40..f2dbabe 100644 --- a/src/core/admob-api/account-setup.helper.ts +++ b/src/core/admob-api/account-setup.helper.ts @@ -81,7 +81,7 @@ export class AccountSetup extends EventEmitter { this.closeWindow(); } } else { - this.closeWindow() + this.closeWindow(); } } @@ -133,7 +133,7 @@ export class AccountSetup extends EventEmitter { } private async askForTermsOfService (): Promise { - let button = await messageDialog('You have to accept terms of service from Google', null, [ + let button = await messageDialog('Google developer console requires to accept terms ot service to continue', null, [ { primary: true, label: 'OK', From 49807280bd84efa252712e4d7c4c17b7f70d3775 Mon Sep 17 00:00:00 2001 From: Alexey Nalivaiko Date: Mon, 13 May 2019 13:10:05 +0300 Subject: [PATCH 23/32] [AMSA-chore] fix text labels across app --- src/lib/app-tray.ts | 4 ++-- src/lib/ui-windows.ts | 3 ++- .../account-chooser/AccountChooserComponent.tsx | 7 ++++--- .../account-status/AccountStatusComponent.tsx | 10 ++++++++-- src/ui/components/accounts/AccountsComponent.tsx | 10 ++++++---- .../admob-account-setup/AdMobAccountSetup.scss | 2 +- .../admob-account-setup/AdMobAccountSetupComponent.tsx | 9 ++++----- .../components/admob-account/AdmobAccountComponent.tsx | 2 +- src/ui/components/clear-data/ClearDataComponent.tsx | 7 ++++--- src/ui/components/sign-in/SignInComponent.tsx | 2 +- .../updates-settings/UpdatesSettingsComponent.tsx | 6 +++--- 11 files changed, 36 insertions(+), 26 deletions(-) diff --git a/src/lib/app-tray.ts b/src/lib/app-tray.ts index 23ac170..e9cc0ae 100644 --- a/src/lib/app-tray.ts +++ b/src/lib/app-tray.ts @@ -15,9 +15,9 @@ export class AppTray { this.menu = Menu.buildFromTemplate([ {type: 'normal', label: 'Sign in', click: () => openAppodealSignInWindow(), id: 'sign-in', visible: false}, {type: 'separator', id: 'sign-in-sep', visible: false}, - {type: 'normal', label: 'Settings', click: () => openSettingsWindow()}, - {type: 'normal', label: 'About', click: () => openAboutWindow()}, + {type: 'normal', label: 'Accounts', click: () => openSettingsWindow()}, {type: 'normal', label: 'Check for updates', click: () => this.updatesConnector.checkForUpdates(false, 'modal')}, + {type: 'normal', label: 'About', click: () => openAboutWindow()}, {type: 'separator'}, {type: 'normal', label: 'Quit', role: 'quit'} ]); diff --git a/src/lib/ui-windows.ts b/src/lib/ui-windows.ts index 7d7c688..478419b 100644 --- a/src/lib/ui-windows.ts +++ b/src/lib/ui-windows.ts @@ -39,7 +39,7 @@ export function openClearDataWindow () { openDialogWindow( './clear-data.html', { - width: 350, + width: 430, height: 280, parent: null }, @@ -54,6 +54,7 @@ export function openAboutWindow () { width: 450, titleBarStyle: 'default', height: 300, + center: true, parent: null })); } diff --git a/src/ui/components/account-chooser/AccountChooserComponent.tsx b/src/ui/components/account-chooser/AccountChooserComponent.tsx index fcad909..2e40950 100644 --- a/src/ui/components/account-chooser/AccountChooserComponent.tsx +++ b/src/ui/components/account-chooser/AccountChooserComponent.tsx @@ -48,8 +48,9 @@ export function AccountChooser ({appodealAccounts, selectedAccount, multipleAcco ? : <> {!appodealAccounts[0].active && - } - + } + {appodealAccounts[0].active && + } ) @@ -98,7 +99,7 @@ function manageAccounts () { async function signOut (account: UserAccount) { let button = await messageDialog( `Confirm signing out from account "${account.email}".`, - 'Account will be removed.', + '', [ { primary: true, diff --git a/src/ui/components/account-status/AccountStatusComponent.tsx b/src/ui/components/account-status/AccountStatusComponent.tsx index de8a808..30545a6 100644 --- a/src/ui/components/account-status/AccountStatusComponent.tsx +++ b/src/ui/components/account-status/AccountStatusComponent.tsx @@ -2,10 +2,12 @@ import {SyncProgress} from 'core/store'; import {SyncHistoryInfo} from 'core/sync-apps/sync-history'; import {SyncEventsTypes} from 'core/sync-apps/sync.events'; import React from 'react'; +import {AdMobAccount} from '../../../core/appdeal-api/interfaces/admob-account.interface'; import style from './AccountStatus.scss'; interface Props { + account: AdMobAccount, historyInfo: SyncHistoryInfo, syncProgress: SyncProgress } @@ -14,10 +16,14 @@ interface Props { export class AccountStatusComponent extends React.Component { render (): React.ReactNode { - let {historyInfo, syncProgress} = this.props; + let {historyInfo, syncProgress, account} = this.props; if (historyInfo && historyInfo.admobAuthorizationRequired) { - return Sign In required!; + return Sign in is required!; + } + + if (!account.isReadyForReports) { + return Setup is required!; } if (syncProgress) { diff --git a/src/ui/components/accounts/AccountsComponent.tsx b/src/ui/components/accounts/AccountsComponent.tsx index 8675e11..2ea76a6 100644 --- a/src/ui/components/accounts/AccountsComponent.tsx +++ b/src/ui/components/accounts/AccountsComponent.tsx @@ -63,8 +63,10 @@ export function AccountsComponent ( /> {acc.email} - ; @@ -103,8 +105,8 @@ export function AccountsComponent ( :
    { multipleAccountsSupport - ? (appodealAccounts.length ? 'Sign in into Appodeal account.' : 'Add at least one Appodeal account.') - : 'Sign in into Appodeal account.' + ? (appodealAccounts.length ? 'Sign in to Appodeal account' : 'Add at least one Appodeal account') + : 'Sign in to Appodeal account' }
    } diff --git a/src/ui/components/admob-account-setup/AdMobAccountSetup.scss b/src/ui/components/admob-account-setup/AdMobAccountSetup.scss index 6d0a536..182b43b 100644 --- a/src/ui/components/admob-account-setup/AdMobAccountSetup.scss +++ b/src/ui/components/admob-account-setup/AdMobAccountSetup.scss @@ -23,7 +23,7 @@ -webkit-text-stroke: 2px #000; &::after { - content: 'Setup required'; + content: 'Setup is required'; position: absolute; height: 100%; top: 0; diff --git a/src/ui/components/admob-account-setup/AdMobAccountSetupComponent.tsx b/src/ui/components/admob-account-setup/AdMobAccountSetupComponent.tsx index fe175ba..9b89095 100644 --- a/src/ui/components/admob-account-setup/AdMobAccountSetupComponent.tsx +++ b/src/ui/components/admob-account-setup/AdMobAccountSetupComponent.tsx @@ -23,8 +23,7 @@ export function AdMobAccountSetup ({setupProgress, setupState, account, appodeal formRef = React.createRef(); return <> {(visible || !account.isReadyForReports) &&
    -

    Setup required {account.isReadyForReports && - }

    +

    Setup is required

    { (!!setupProgress && setupProgress.state !== 'error' || !setupProgress && mode === 'auto') && <> @@ -36,8 +35,8 @@ export function AdMobAccountSetup ({setupProgress, setupState, account, appodeal } { !!setupProgress && setupProgress.state === 'error' &&

    - Auto setup was unsuccessful.  - + Auto setup was unsuccessful.    +

    } { @@ -125,7 +124,7 @@ function onFormSubmit (event: React.SyntheticEvent, adMobAccoun clientSecret: formData.get('clientSecret'), accountId: adMobAccount.id } - })).catch(error => messageDialog(error.message)) + })).catch(error => messageDialog(error.message)); } function viewTutorial (event: React.MouseEvent) { diff --git a/src/ui/components/admob-account/AdmobAccountComponent.tsx b/src/ui/components/admob-account/AdmobAccountComponent.tsx index cd9aa52..bdeb038 100644 --- a/src/ui/components/admob-account/AdmobAccountComponent.tsx +++ b/src/ui/components/admob-account/AdmobAccountComponent.tsx @@ -119,7 +119,7 @@ export class AdmobAccountComponent extends Component - +
    } diff --git a/src/ui/components/clear-data/ClearDataComponent.tsx b/src/ui/components/clear-data/ClearDataComponent.tsx index a3237d9..8b8c4eb 100644 --- a/src/ui/components/clear-data/ClearDataComponent.tsx +++ b/src/ui/components/clear-data/ClearDataComponent.tsx @@ -9,14 +9,15 @@ export function ClearData () { return (

    - The app stores following info locally: + The app stores the following info locally:

    • Appodeal access token
    • -
    • Cookies for admob accounts which you have signed in
    • -
    • Sync history for each admob account
    • +
    • Cookies for Admob accounts which you have signed in
    • +
    • Sync history for each Admob account
    • Sync log files
    +

     

    {''} All data will be immediately deleted. You will immediately signed out. App will be closed. You cannot revert this action.

    diff --git a/src/ui/components/sign-in/SignInComponent.tsx b/src/ui/components/sign-in/SignInComponent.tsx index 13f0268..4502a9c 100644 --- a/src/ui/components/sign-in/SignInComponent.tsx +++ b/src/ui/components/sign-in/SignInComponent.tsx @@ -17,7 +17,7 @@ export function SignIn ({account}: SignInProps) { Appodeal
    onSubmit(e, account))}> - +
    diff --git a/src/ui/components/updates-settings/UpdatesSettingsComponent.tsx b/src/ui/components/updates-settings/UpdatesSettingsComponent.tsx index c8ccd0c..42569ea 100644 --- a/src/ui/components/updates-settings/UpdatesSettingsComponent.tsx +++ b/src/ui/components/updates-settings/UpdatesSettingsComponent.tsx @@ -48,7 +48,7 @@ export function UpdatesSettings ({currentVersion, availableVersion, lastCheck, c
    - +
    - +
    } @@ -68,6 +74,20 @@ export function AdMobAccountSetup ({setupProgress, setupState, account, appodeal ; } +function isSetupStarted (setupState: AccountSetupState): boolean { + return !!setupState && setupState.mode === 'auto'; +} + +function resetSetupMode (adMobAccount: AdMobAccount) { + sendToMain('accounts', action(ActionTypes.adMobSetupState, { + adMobAccount, + state: { + visible: true, + mode: null + } + })); +} + function closeSetup (adMobAccount: AdMobAccount) { sendToMain('accounts', action(ActionTypes.adMobSetupState, { adMobAccount, From f4bfc1f6b05ba4fdd31ffe5d0ba891ea1325a554 Mon Sep 17 00:00:00 2001 From: alex-skakun Date: Tue, 14 May 2019 14:23:13 +0300 Subject: [PATCH 27/32] fixed issue with closing all windows before app quit --- src/lib/ui-windows.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lib/ui-windows.ts b/src/lib/ui-windows.ts index 478419b..d0c67e8 100644 --- a/src/lib/ui-windows.ts +++ b/src/lib/ui-windows.ts @@ -133,5 +133,8 @@ async function openOrFocus (windowName: string, openFunction: () => BrowserWindo export function closeAllWindows () { - OPENED_WINDOWS.forEach(async window => (await window).close()); + BrowserWindow.getAllWindows().forEach(window => { + window.setClosable(true); + window.close(); + }); } From 704458d9533c686e182de8ef785a0653f1c36e5f Mon Sep 17 00:00:00 2001 From: alex-skakun Date: Tue, 14 May 2019 16:45:17 +0300 Subject: [PATCH 28/32] account re-setup removes old client and creates new --- src/core/admob-api/account-setup.helper.ts | 33 ++++++++++++++++++---- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/src/core/admob-api/account-setup.helper.ts b/src/core/admob-api/account-setup.helper.ts index 9673fa9..bad9f17 100644 --- a/src/core/admob-api/account-setup.helper.ts +++ b/src/core/admob-api/account-setup.helper.ts @@ -251,7 +251,7 @@ export class AccountSetup extends EventEmitter { createCredentials () { const dropDownBtn = '.p6n-api-credential-dropdown'; - const credentialLabel = '.p6n-api-credential-table-label a'; + const credentialLabel = 'tbody .p6n-api-credential-table-label a'; const oAuthItem = '.p6n-dropdown-row[ng-click*="OAUTH_CLIENT"]'; const webInput = '.p6n-form-fieldset input[type="radio"][value="WEB"] + span'; const clientNameInput = 'input[ng-model="oAuthEditorCtrl.oauthClient.displayName"]'; @@ -265,6 +265,8 @@ export class AccountSetup extends EventEmitter { this.runner.createTask(() => this.debug.waitElementVisible(dropDownBtn) .catch(() => this.debug.waitElementVisible(credentialLabel))); + + // check client this.runner.createTask(async () => { let clientLabelIds = await this.debug.querySelectorAll(credentialLabel), clientLabels = await Promise.all(clientLabelIds.map(nodeId => this.debug.getInnerHTML(nodeId))), @@ -272,11 +274,26 @@ export class AccountSetup extends EventEmitter { if (clientIndex === -1) { this.runner.skipTo('createClient'); } else { - this.runner.skipTo('openClient', clientLabelIds[clientIndex]); + this.runner.skipTo('deleteClient', clientIndex); } }, 'checkClient'); + + // delete client + this.runner.createTask(index => this.debug.click(`tr:nth-child(${index + 1}) .p6n-api-credential-delete`), 'deleteClient'); + this.runner.createTask(() => this.debug.wait(500)); + this.runner.createTask(() => this.debug.click(`.p6n-modal-action-button[name="delete"]`)); + this.runner.createTask(() => this.debug.waitElement('.p6n-modal-content p b', 1000) + .then(async () => { + let text; + text = await this.debug.getInnerHTML('.p6n-modal-content p b'); + await this.fillInput(text, 'md-dialog .p6n-form-row-input input'); + await this.debug.click(`.p6n-modal-action-button[name="delete"]`); + }) + .catch(() => {})); + + // create client this.runner.createTask(() => this.debug.click(dropDownBtn), 'createClient'); - this.runner.createTask(() => this.debug.waitElementVisible(oAuthItem)); + this.runner.createTask(() => this.debug.waitElementVisible(oAuthItem).catch(() => this.runner.returnTo('createClient'))); this.runner.createTask(() => this.debug.click(oAuthItem)); this.runner.createTask(() => this.debug.waitElementVisible(webInput)); this.runner.createTask(() => this.debug.click(webInput)); @@ -289,8 +306,14 @@ export class AccountSetup extends EventEmitter { this.runner.createTask(() => this.debug.waitElement(closeModalBtn)); this.runner.createTask(() => this.debug.click(closeModalBtn)); this.runner.createTask(() => this.debug.wait(1000)); - this.runner.createTask(() => this.runner.returnTo('checkClient')); - this.runner.createTask(nodeId => this.debug.click(nodeId), 'openClient'); + + // open client + this.runner.createTask(async () => { + let clientLabelIds = await this.debug.querySelectorAll(credentialLabel), + clientLabels = await Promise.all(clientLabelIds.map(nodeId => this.debug.getInnerHTML(nodeId))), + clientIndex = clientLabels.indexOf(CLIENT_NAME); + await this.debug.click(`tbody tr:nth-child(${clientIndex + 1}) .p6n-api-credential-table-label a`); + }, 'openClient'); this.runner.createTask(() => this.debug.waitElement(submitBtn)); let nodeIds: Array; this.runner.createTask(async () => nodeIds = await this.debug.querySelectorAll(dataSelector)); From 6d26a9d68e53c9ad4164283a6b33e036a821d92b Mon Sep 17 00:00:00 2001 From: Alexey Nalivaiko Date: Tue, 14 May 2019 16:46:15 +0300 Subject: [PATCH 29/32] [AMSA-chore] update text labels for clear data window --- src/lib/ui-windows.ts | 2 +- src/ui/components/clear-data/ClearDataComponent.tsx | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lib/ui-windows.ts b/src/lib/ui-windows.ts index 478419b..c9031ac 100644 --- a/src/lib/ui-windows.ts +++ b/src/lib/ui-windows.ts @@ -40,7 +40,7 @@ export function openClearDataWindow () { './clear-data.html', { width: 430, - height: 280, + height: 300, parent: null }, (window) => resolve(window) diff --git a/src/ui/components/clear-data/ClearDataComponent.tsx b/src/ui/components/clear-data/ClearDataComponent.tsx index 8b8c4eb..dd4eb8a 100644 --- a/src/ui/components/clear-data/ClearDataComponent.tsx +++ b/src/ui/components/clear-data/ClearDataComponent.tsx @@ -9,17 +9,17 @@ export function ClearData () { return (

    - The app stores the following info locally: + The application stores the following data on your computer:

    • Appodeal access token
    • -
    • Cookies for Admob accounts which you have signed in
    • -
    • Sync history for each Admob account
    • +
    • Cookies for your AdMob accounts
    • +
    • Sync history for each AdMob account
    • Sync log files
    -

     

    -

    {''} All data will be immediately deleted. - You will immediately signed out. App will be closed. You cannot revert this action.

    +

    {''} All data will be deleted immediately + and irrevocably. You can not undo this action.

    +

    You will be immediately signed out. The application will be closed.

    ); From 5b16fe3e8fb843fd928b37e11f62c847bdd5c95f Mon Sep 17 00:00:00 2001 From: Alexey Nalivaiko Date: Tue, 14 May 2019 16:49:24 +0300 Subject: [PATCH 30/32] [AMSA-51] pause Api requests while refreshing access token implement request queue & pause all requests while sending refresh access token mutation --- src/core/appdeal-api/appodeal-api.service.ts | 36 +++++++----- src/core/appdeal-api/call-queue.ts | 62 ++++++++++++++++++++ 2 files changed, 83 insertions(+), 15 deletions(-) create mode 100644 src/core/appdeal-api/call-queue.ts diff --git a/src/core/appdeal-api/appodeal-api.service.ts b/src/core/appdeal-api/appodeal-api.service.ts index 7f6db0a..ceeee11 100644 --- a/src/core/appdeal-api/appodeal-api.service.ts +++ b/src/core/appdeal-api/appodeal-api.service.ts @@ -13,6 +13,7 @@ import {AdMobApp} from 'lib/translators/interfaces/admob-app.interface'; import PushStream from 'zen-push'; import {ErrorFactoryService} from '../error-factory/error-factory.service'; import {InternalError} from '../error-factory/errors/internal-error'; +import {CallQueue} from './call-queue'; import addAdMobAccountMutation from './graphql/add-admob-account.mutation.graphql'; import adMobAccountQuery from './graphql/admob-account-details.graphql'; import currentUserQuery from './graphql/current-user.query.graphql'; @@ -57,6 +58,7 @@ export interface ApiMutationOptions extends MutationOptions { export class AppodealApiService { + private requestsQueue = new CallQueue(10); private client: ApolloClient; private _onError = new PushStream(); @@ -72,22 +74,26 @@ export class AppodealApiService { ); } - public query (options: ApiQueryOptions): Promise { - this.logRequest(options.query, 'query', options.variables); - return this.client.query(>options) - .then(result => pluck(result, ...pluckParams(options.dataAttribute))) - .catch(apolloError => { - throw apolloError.networkError; - }); + public query (options: ApiQueryOptions, dedicated = false): Promise { + return this.requestsQueue.call(() => { + this.logRequest(options.query, 'query', options.variables); + return this.client.query(>options) + .then(result => pluck(result, ...pluckParams(options.dataAttribute))) + .catch(apolloError => { + throw apolloError.networkError; + }); + }, dedicated); } - public mutate (options: ApiMutationOptions): Promise { - this.logRequest(options.mutation, 'mutation', options.variables); - return this.client.mutate(>options) - .then(result => pluck(result, ...pluckParams(options.dataAttribute))) - .catch(apolloError => { - throw apolloError.networkError; - }); + public mutate (options: ApiMutationOptions, dedicated = false): Promise { + return this.requestsQueue.call(() => { + this.logRequest(options.mutation, 'mutation', options.variables); + return this.client.mutate(>options) + .then(result => pluck(result, ...pluckParams(options.dataAttribute))) + .catch(apolloError => { + throw apolloError.networkError; + }); + }, dedicated); }; constructor (errorFactory: ErrorFactoryService, session: Session) { @@ -177,7 +183,7 @@ export class AppodealApiService { refreshToken }, dataAttribute: ['refreshAccessToken'] - }) + }, true) .then(tokensInfo => { this.authContext.setTokensInfo(tokensInfo); this.authContext.save(); diff --git a/src/core/appdeal-api/call-queue.ts b/src/core/appdeal-api/call-queue.ts new file mode 100644 index 0000000..1cce614 --- /dev/null +++ b/src/core/appdeal-api/call-queue.ts @@ -0,0 +1,62 @@ +import {sleep} from '../../lib/time'; + + +export class CallQueue { + + private tail: Promise = Promise.resolve(); + + private requests = new Map>(); + + private dedicatedRequestOnFlight = false; + + constructor (private sleepAfterDedicatedRequest: number) {} + + + call (request: () => Promise, dedicated = false) { + if (dedicated) { + return this.dedicatedCall(request); + } + + if (this.dedicatedRequestOnFlight) { + return this.tail.then(() => this.call(request)); + } + + const response = request(); + this.requests.set(request, response); + return response + .then(resp => { + this.requests.delete(request); + return resp; + }, error => { + this.requests.delete(request); + throw error; + }); + + } + + dedicatedCall (request: () => Promise) { + if (this.dedicatedRequestOnFlight) { + return this.tail.then(() => this.dedicatedCall(request)); + } + + this.dedicatedRequestOnFlight = true; + + const response = this.tail.then(() => Promise.all([...this.requests.entries()])) + .then(() => { + const resp = request(); + this.requests.set(request, resp); + return resp.then((r) => { + this.dedicatedRequestOnFlight = false; + this.requests.delete(request); + return r; + }, (e) => { + this.dedicatedRequestOnFlight = false; + this.requests.delete(request); + throw e; + }); + }); + this.tail = response.then((resp) => sleep(this.sleepAfterDedicatedRequest).then(() => resp)); + return response; + } + +} From b5d700d98ac80143d9fc47a8e693b6a057c21297 Mon Sep 17 00:00:00 2001 From: Alexey Nalivaiko Date: Tue, 14 May 2019 16:46:15 +0300 Subject: [PATCH 31/32] [AMSA-chore] update text labels for clear data window --- src/lib/ui-windows.ts | 2 +- src/ui/components/clear-data/ClearDataComponent.tsx | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lib/ui-windows.ts b/src/lib/ui-windows.ts index d0c67e8..317c441 100644 --- a/src/lib/ui-windows.ts +++ b/src/lib/ui-windows.ts @@ -40,7 +40,7 @@ export function openClearDataWindow () { './clear-data.html', { width: 430, - height: 280, + height: 300, parent: null }, (window) => resolve(window) diff --git a/src/ui/components/clear-data/ClearDataComponent.tsx b/src/ui/components/clear-data/ClearDataComponent.tsx index 8b8c4eb..dd4eb8a 100644 --- a/src/ui/components/clear-data/ClearDataComponent.tsx +++ b/src/ui/components/clear-data/ClearDataComponent.tsx @@ -9,17 +9,17 @@ export function ClearData () { return (

    - The app stores the following info locally: + The application stores the following data on your computer:

    • Appodeal access token
    • -
    • Cookies for Admob accounts which you have signed in
    • -
    • Sync history for each Admob account
    • +
    • Cookies for your AdMob accounts
    • +
    • Sync history for each AdMob account
    • Sync log files
    -

     

    -

    {''} All data will be immediately deleted. - You will immediately signed out. App will be closed. You cannot revert this action.

    +

    {''} All data will be deleted immediately + and irrevocably. You can not undo this action.

    +

    You will be immediately signed out. The application will be closed.

    ); From 0c6800a72d16c5c4d788a8b8fb07c0c27625054e Mon Sep 17 00:00:00 2001 From: Evgeniy Shurmin Date: Wed, 15 May 2019 13:31:44 +0300 Subject: [PATCH 32/32] bump 0.0.13 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 15c38cd..4dc81bf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "admob-sync-app", - "version": "0.1.12", + "version": "0.1.13", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 394360f..e4afd26 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "repository": "https://github.com/appodeal/admob-sync-app", "description": "Appodeal AdMob Sync application", "private": true, - "version": "0.1.12", + "version": "0.1.13", "scripts": { "start": "webpack --watch --progress --config=webpack/development.ts", "test": "jest",