diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000000..a25a816623 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,4 @@ +dist +node_modules +*.d.ts +packages/*/*/index.ts diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 77bec0169e..0000000000 --- a/.eslintrc +++ /dev/null @@ -1,26 +0,0 @@ -{ - "extends": "airbnb-base", - "parser": "babel-eslint", - "plugins": [ - "mocha" - ], - "env": { - "mocha": true - }, - "rules": { - "consistent-return": 0, - "global-require": 0, - "import/extensions": 0, - "import/no-dynamic-require": 0, - "import/no-extraneous-dependencies": 0, - "import/no-unresolved": 0, - "linebreak-style": 0, - "max-len": [2, 160], - "mocha/no-exclusive-tests": "error", - "no-console": 0, - "no-throw-literal": 0, - "no-underscore-dangle": 0, - "class-methods-use-this": 0, - "no-confusing-arrow": 0 - } -} diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000000..03363336aa --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,74 @@ +{ + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 8, + "sourceType": "module" + }, + "plugins": [ + "mocha", + "@typescript-eslint" + ], + "env": { + "mocha": true, + "node": true + }, + "extends": [ + "airbnb" + ], + "rules": { + "class-methods-use-this": "off", + "import/no-cycle": "off", + "import/no-extraneous-dependencies": ["error", { "devDependencies": ["packages/**/test/**/*_spec.ts"] }], + "mocha/no-exclusive-tests": "error", + "no-await-in-loop": "off", + "no-param-reassign": "off", + "no-restricted-syntax": [ + "error", + { + "selector": "ForInStatement", + "message": "for..in loops iterate over the entire prototype chain, which is virtually never what you want. Use Object.{keys,values,entries}, and iterate over the resulting array." + }, + { + "selector": "LabeledStatement", + "message": "Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand." + }, + { + "selector": "WithStatement", + "message": "`with` is disallowed in strict mode because it makes code impossible to predict and optimize." + } + ], + "no-unused-vars": "off", + "@typescript-eslint/no-this-alias": ["error", { + "allowDestructuring": true + }], + "@typescript-eslint/no-unused-vars": ["error", { + "args": "after-used", + "argsIgnorePattern": "^_", + "ignoreRestSiblings": true, + "vars": "all" + }] + }, + "overrides": [ + { + "files": ["packages/*/*/test/**/*_spec*.ts"], + "rules": { + "global-require": "off", + "import/no-dynamic-require": "off" + } + } + ], + "settings": { + "import/extensions": [ + ".js", + ".ts" + ], + "import/parsers": { + "@typescript-eslint/parser": [".ts"] + }, + "import/resolver": { + "node": { + "extensions": [".js", ".json", ".ts"] + } + } + } +} diff --git a/package.json b/package.json index f0ec68c1d8..5311aec9d2 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "docs:position": "ts-node tools/position-docs.ts", "docs:deploy": "ts-node tools/sync-readmes.ts && bolt docs && ts-node tools/copy-now.ts && cd docs && now && now alias", "docs:deploy:ci": "ts-node tools/sync-readmes.ts && bolt docs && ts-node tools/copy-now.ts && cd docs && now --token $NOW_TOKEN && now alias --token $NOW_TOKEN", - "lint": "ts-node tools/link-ts.ts && bolt ws exec -- node_modules/.bin/tslint src/**/*.ts test/**/*.ts", + "lint": "eslint --ext .ts .", "test": "cross-env TS_NODE_FILES=true yarn run mocha './tools/test-globber.ts'", "postinstall": "rimraf node_modules/.bin/*.ps1" }, @@ -46,6 +46,7 @@ "cross-spawn-promise": "^0.10.1", "cross-zip": "^2.1.5", "debug": "^4.1.0", + "electron-download": "^4.1.1", "electron-forge-template-angular2": "^1.0.3", "electron-forge-template-react": "^1.0.2", "electron-forge-template-react-typescript": "^1.0.3", @@ -118,17 +119,18 @@ "@types/node": "^11.9.4", "@types/node-fetch": "^2.1.2", "@types/opn": "^5.1.0", - "@types/ora": "^3.0.0", "@types/pify": "^3.0.1", "@types/pretty-ms": "^4.0.0", "@types/proxyquire": "^1.3.28", "@types/semver": "^5.5.0", "@types/sinon": "^7.0.6", "@types/username": "^3.0.0", - "@types/webpack": "4.4.25", + "@types/webpack": "^4.4.26", "@types/webpack-dev-middleware": "^2.0.1", "@types/webpack-hot-middleware": "^2.16.3", "@types/webpack-merge": "^4.1.3", + "@typescript-eslint/eslint-plugin": "^1.1.0", + "@typescript-eslint/parser": "^1.1.0", "asar": "^1.0.0", "babel-plugin-source-map-support": "^2.0.1", "chai": "4.2.0", @@ -137,6 +139,12 @@ "coveralls": "^3.0.0", "cross-env": "^5.0.0", "cz-customizable": "^5.0.0", + "eslint": "^5.6.1", + "eslint-config-airbnb": "^17.1.0", + "eslint-plugin-import": "^2.15.0", + "eslint-plugin-jsx-a11y": "^6.1.1", + "eslint-plugin-mocha": "^5.2.0", + "eslint-plugin-react": "^7.11.0", "fetch-mock": "^7.2.5", "generate-changelog": "^1.0.2", "listr": "^0.14.1", diff --git a/packages/api/cli/.eslintrc.json b/packages/api/cli/.eslintrc.json new file mode 100644 index 0000000000..d5ba8f9d9c --- /dev/null +++ b/packages/api/cli/.eslintrc.json @@ -0,0 +1,5 @@ +{ + "rules": { + "no-console": "off" + } +} diff --git a/packages/api/cli/src/electron-forge-import.ts b/packages/api/cli/src/electron-forge-import.ts index 4337c3038c..913c55a27d 100644 --- a/packages/api/cli/src/electron-forge-import.ts +++ b/packages/api/cli/src/electron-forge-import.ts @@ -1,23 +1,17 @@ import { api } from '@electron-forge/core'; -import path from 'path'; +import fs from 'fs-extra'; import program from 'commander'; import './util/terminate'; +import workingDir from './util/working-dir'; (async () => { let dir = process.cwd(); program - .version(require('../package.json').version) + .version((await fs.readJson('../package.json')).version) .arguments('[name]') - .action((name) => { - if (!name) return; - if (path.isAbsolute(name)) { - dir = name; - } else { - dir = path.resolve(dir, name); - } - }) + .action((name) => { dir = workingDir(dir, name, false); }) .parse(process.argv); await api.import({ diff --git a/packages/api/cli/src/electron-forge-init.ts b/packages/api/cli/src/electron-forge-init.ts index 7f660d1616..c08aba03bf 100644 --- a/packages/api/cli/src/electron-forge-init.ts +++ b/packages/api/cli/src/electron-forge-init.ts @@ -1,25 +1,19 @@ import { api, InitOptions } from '@electron-forge/core'; -import path from 'path'; +import fs from 'fs-extra'; import program from 'commander'; import './util/terminate'; +import workingDir from './util/working-dir'; (async () => { let dir = process.cwd(); program - .version(require('../package.json').version) + .version((await fs.readJson('../package.json')).version) .arguments('[name]') .option('-t, --template [name]', 'Name of the forge template to use') .option('-c, --copy-ci-files', 'Whether to copy the templated CI files (defaults to false)', false) - .action((name) => { - if (!name) return; - if (path.isAbsolute(name)) { - dir = name; - } else { - dir = path.resolve(dir, name); - } - }) + .action((name) => { dir = workingDir(dir, name, false); }) .parse(process.argv); const initOpts: InitOptions = { diff --git a/packages/api/cli/src/electron-forge-install.ts b/packages/api/cli/src/electron-forge-install.ts index a82c3a569c..2cc53a71e1 100644 --- a/packages/api/cli/src/electron-forge-install.ts +++ b/packages/api/cli/src/electron-forge-install.ts @@ -1,6 +1,7 @@ import { api, InstallAsset } from '@electron-forge/core'; -import inquirer from 'inquirer'; +import fs from 'fs-extra'; +import inquirer from 'inquirer'; import program from 'commander'; import './util/terminate'; @@ -9,12 +10,10 @@ import './util/terminate'; let repo!: string; program - .version(require('../package.json').version) + .version((await fs.readJson('../package.json')).version) .arguments('[repository]') .option('--prerelease', 'Fetch prerelease versions') - .action((repository) => { - repo = repository; - }) + .action((repository) => { repo = repository; }) .parse(process.argv); const chooseAsset = async (assets: InstallAsset[]) => { diff --git a/packages/api/cli/src/electron-forge-lint.ts b/packages/api/cli/src/electron-forge-lint.ts index 61106afb3f..84c801b1e0 100644 --- a/packages/api/cli/src/electron-forge-lint.ts +++ b/packages/api/cli/src/electron-forge-lint.ts @@ -1,24 +1,17 @@ import { api } from '@electron-forge/core'; -import fs from 'fs'; -import path from 'path'; +import fs from 'fs-extra'; import program from 'commander'; import './util/terminate'; +import workingDir from './util/working-dir'; (async () => { let dir = process.cwd(); program - .version(require('../package.json').version) + .version((await fs.readJson('../package.json')).version) .arguments('[cwd]') - .action((cwd) => { - if (!cwd) return; - if (path.isAbsolute(cwd) && fs.existsSync(cwd)) { - dir = cwd; - } else if (fs.existsSync(path.resolve(dir, cwd))) { - dir = path.resolve(dir, cwd); - } - }) + .action((cwd) => { dir = workingDir(dir, cwd); }) .parse(process.argv); await api.lint({ diff --git a/packages/api/cli/src/electron-forge-make.ts b/packages/api/cli/src/electron-forge-make.ts index 476e9fc8da..d401437723 100644 --- a/packages/api/cli/src/electron-forge-make.ts +++ b/packages/api/cli/src/electron-forge-make.ts @@ -1,30 +1,23 @@ import { api, MakeOptions } from '@electron-forge/core'; import fs from 'fs-extra'; -import path from 'path'; import program from 'commander'; import './util/terminate'; +import workingDir from './util/working-dir'; // eslint-disable-next-line import/prefer-default-export -export const getMakeOptions = () => { +export async function getMakeOptions() { let dir = process.cwd(); program - .version(require('../package.json').version) + .version((await fs.readJson('../package.json')).version) .arguments('[cwd]') .option('--skip-package', 'Assume the app is already packaged') .option('-a, --arch [arch]', 'Target architecture') .option('-p, --platform [platform]', 'Target build platform') .option('--targets [targets]', 'Override your make targets for this run') .allowUnknownOption(true) - .action((cwd) => { - if (!cwd) return; - if (path.isAbsolute(cwd) && fs.existsSync(cwd)) { - dir = cwd; - } else if (fs.existsSync(path.resolve(dir, cwd))) { - dir = path.resolve(dir, cwd); - } - }) + .action((cwd) => { dir = workingDir(dir, cwd); }) .parse(process.argv); const makeOpts: MakeOptions = { @@ -37,11 +30,12 @@ export const getMakeOptions = () => { if (program.platform) makeOpts.platform = program.platform; return makeOpts; -}; +} +// eslint-disable-next-line no-underscore-dangle if (process.mainModule === module || (global as any).__LINKED_FORGE__) { (async () => { - const makeOpts = getMakeOptions(); + const makeOpts = await getMakeOptions(); await api.make(makeOpts); })(); diff --git a/packages/api/cli/src/electron-forge-package.ts b/packages/api/cli/src/electron-forge-package.ts index f558ba1e98..cf11fdd5ca 100644 --- a/packages/api/cli/src/electron-forge-package.ts +++ b/packages/api/cli/src/electron-forge-package.ts @@ -1,27 +1,19 @@ import { api, PackageOptions } from '@electron-forge/core'; import fs from 'fs-extra'; -import path from 'path'; import program from 'commander'; import './util/terminate'; +import workingDir from './util/working-dir'; (async () => { - let dir = process.cwd(); - + let dir: string = process.cwd(); program - .version(require('../package.json').version) + .version((await fs.readJson('../package.json')).version) .arguments('[cwd]') .option('-a, --arch [arch]', 'Target architecture') .option('-p, --platform [platform]', 'Target build platform') - .action((cwd) => { - if (!cwd) return; - if (path.isAbsolute(cwd) && fs.existsSync(cwd)) { - dir = cwd; - } else if (fs.existsSync(path.resolve(dir, cwd))) { - dir = path.resolve(dir, cwd); - } - }) + .action((cwd) => { dir = workingDir(dir, cwd); }) .parse(process.argv); const packageOpts: PackageOptions = { diff --git a/packages/api/cli/src/electron-forge-publish.ts b/packages/api/cli/src/electron-forge-publish.ts index 68f5820316..bbe72d2197 100644 --- a/packages/api/cli/src/electron-forge-publish.ts +++ b/packages/api/cli/src/electron-forge-publish.ts @@ -1,29 +1,22 @@ import { api, PublishOptions } from '@electron-forge/core'; import fs from 'fs-extra'; -import path from 'path'; import program from 'commander'; import './util/terminate'; +import workingDir from './util/working-dir'; import { getMakeOptions } from './electron-forge-make'; (async () => { let dir = process.cwd(); program - .version(require('../package.json').version) + .version((await fs.readJson('../package.json')).version) .arguments('[cwd]') .option('--target [target[,target...]]', 'The comma-separated deployment targets, defaults to "github"') .option('--dry-run', 'Triggers a publish dry run which saves state and doesn\'t upload anything') .option('--from-dry-run', 'Attempts to publish artifacts from the last saved dry run') .allowUnknownOption(true) - .action((cwd) => { - if (!cwd) return; - if (path.isAbsolute(cwd) && fs.existsSync(cwd)) { - dir = cwd; - } else if (fs.existsSync(path.resolve(dir, cwd))) { - dir = path.resolve(dir, cwd); - } - }) + .action((cwd) => { dir = workingDir(dir, cwd); }) .parse(process.argv); const publishOpts: PublishOptions = { @@ -34,7 +27,7 @@ import { getMakeOptions } from './electron-forge-make'; }; if (program.target) publishOpts.publishTargets = program.target.split(','); - publishOpts.makeOptions = getMakeOptions(); + publishOpts.makeOptions = await getMakeOptions(); await api.publish(publishOpts); })(); diff --git a/packages/api/cli/src/electron-forge-start.ts b/packages/api/cli/src/electron-forge-start.ts index 3a675d94fb..320365bcea 100644 --- a/packages/api/cli/src/electron-forge-start.ts +++ b/packages/api/cli/src/electron-forge-start.ts @@ -2,10 +2,10 @@ import { api, StartOptions } from '@electron-forge/core'; import { ChildProcess } from 'child_process'; import fs from 'fs-extra'; -import path from 'path'; import program from 'commander'; import './util/terminate'; +import workingDir from './util/working-dir'; (async () => { let commandArgs = process.argv; @@ -19,21 +19,14 @@ import './util/terminate'; let dir = process.cwd(); program - .version(require('../package.json').version) + .version((await fs.readJson('../package.json')).version) .arguments('[cwd]') .option('-p, --app-path ', 'Override the path to the Electron app to launch (defaults to \'.\')') .option('-l, --enable-logging', 'Enable advanced logging. This will log internal Electron things') .option('-n, --run-as-node', 'Run the Electron app as a Node.JS script') .option('--vscode', 'Used to enable arg transformation for debugging Electron through VSCode. Do not use yourself.') .option('-i, --inspect-electron', 'Triggers inspect mode on Electron to allow debugging the main process. Electron >1.7 only') - .action((cwd) => { - if (!cwd) return; - if (path.isAbsolute(cwd) && fs.existsSync(cwd)) { - dir = cwd; - } else if (fs.existsSync(path.resolve(dir, cwd))) { - dir = path.resolve(dir, cwd); - } - }) + .action((cwd) => { dir = workingDir(dir, cwd); }) .parse(commandArgs); program.on('--help', () => { @@ -66,11 +59,13 @@ import './util/terminate'; await new Promise((resolve) => { const listenForExit = (child: ChildProcess) => { + let onExit: NodeJS.ExitListener; + let onRestart: (newChild: ChildProcess) => void; const removeListeners = () => { child.removeListener('exit', onExit); child.removeListener('restarted', onRestart); }; - const onExit = (code: number) => { + onExit = (code: number) => { removeListeners(); if ((spawned as any).restarted) return; if (code !== 0) { @@ -78,7 +73,7 @@ import './util/terminate'; } resolve(); }; - const onRestart = (newChild: ChildProcess) => { + onRestart = (newChild: ChildProcess) => { removeListeners(); listenForExit(newChild); }; diff --git a/packages/api/cli/src/util/check-system.ts b/packages/api/cli/src/util/check-system.ts index 1ce3e09228..3735f3f1aa 100644 --- a/packages/api/cli/src/util/check-system.ts +++ b/packages/api/cli/src/util/check-system.ts @@ -12,10 +12,7 @@ const d = debug('electron-forge:check-system'); async function checkGitExists() { return new Promise((resolve) => { - exec('git --version', (err) => { - if (err) return resolve(false); - resolve(true); - }); + exec('git --version', err => resolve(!err)); }); } @@ -34,7 +31,12 @@ const YARN_WHITELISTED_VERSIONS = { linux: '0.27.5', }; -export function validPackageManagerVersion(packageManager: string, version: string, whitelistedVersions: string, ora: OraImpl) { +export function validPackageManagerVersion( + packageManager: string, + version: string, + whitelistedVersions: string, + ora: OraImpl, +) { try { return semver.satisfies(version, whitelistedVersions); } catch (e) { @@ -44,7 +46,12 @@ export function validPackageManagerVersion(packageManager: string, version: stri } } -function warnIfPackageManagerIsntAKnownGoodVersion(packageManager: string, version: string, whitelistedVersions: { [key: string]: string }, ora: OraImpl) { +function warnIfPackageManagerIsntAKnownGoodVersion( + packageManager: string, + version: string, + whitelistedVersions: { [key: string]: string }, + ora: OraImpl, +) { const osVersions = whitelistedVersions[process.platform]; const versions = osVersions ? `${whitelistedVersions.all} || ${osVersions}` : whitelistedVersions.all; const versionString = version.toString(); @@ -82,8 +89,11 @@ const SKIP_SYSTEM_CHECK = path.resolve(os.homedir(), '.skip-forge-system-check') export default async function (ora: OraImpl): Promise { if (!await fs.pathExists(SKIP_SYSTEM_CHECK)) { d('checking system, create ~/.skip-forge-system-check to stop doing this'); - return (await Promise.all([checkGitExists(), checkNodeVersion(), checkPackageManagerVersion(ora)])) - .every(check => check); + return (await Promise.all([ + checkGitExists(), + checkNodeVersion(), + checkPackageManagerVersion(ora), + ])).every(check => check); } d('skipping system check'); return true; diff --git a/packages/api/cli/src/util/terminate.ts b/packages/api/cli/src/util/terminate.ts index 0c8966ec6c..0b61a92831 100644 --- a/packages/api/cli/src/util/terminate.ts +++ b/packages/api/cli/src/util/terminate.ts @@ -1,14 +1,10 @@ import colors from 'colors'; -process.on('unhandledRejection', (err: Error) => { - if (err && err.message && err.stack) { - console.error('\nAn unhandled rejection has occurred inside Forge:'.red); - console.error(colors.red(err.message)); - console.error(colors.red(err.stack)); - } else { - console.error('\nElectron forge was terminated:'.red); - console.error(colors.red(typeof err === 'string' ? err : JSON.stringify(err))); - } +process.on('unhandledRejection', (reason: any, promise: Promise) => { + console.error('\nAn unhandled rejection has occurred inside Forge:'.red); + console.error(colors.red(reason)); + console.error('\nElectron Forge was terminated. Location:'.red); + console.error(colors.red(JSON.stringify(promise))); process.exit(1); }); @@ -18,7 +14,7 @@ process.on('uncaughtException', (err) => { console.error(colors.red(err.message)); console.error(colors.red(err.stack)); } else { - console.error('\nElectron forge was terminated:'.red); + console.error('\nElectron Forge was terminated:'.red); console.error(colors.red(typeof err === 'string' ? err : JSON.stringify(err))); } process.exit(1); diff --git a/packages/api/cli/src/util/working-dir.ts b/packages/api/cli/src/util/working-dir.ts new file mode 100644 index 0000000000..cf0eafc172 --- /dev/null +++ b/packages/api/cli/src/util/working-dir.ts @@ -0,0 +1,18 @@ +import fs from 'fs-extra'; +import path from 'path'; + +export default function (dir: string, cwd: string, checkExisting: boolean = true): string { + let finalDir = dir; + if (cwd) { + if (path.isAbsolute(cwd) && (!checkExisting || fs.existsSync(cwd))) { + finalDir = cwd; + } else { + const resolved = path.resolve(finalDir, cwd); + if (!checkExisting || fs.existsSync(resolved)) { + finalDir = resolved; + } + } + } + + return finalDir; +} diff --git a/packages/api/core/package.json b/packages/api/core/package.json index 56e2e3bc97..c900cffd1a 100644 --- a/packages/api/core/package.json +++ b/packages/api/core/package.json @@ -40,6 +40,7 @@ "colors": "^1.2.0", "cross-spawn-promise": "^0.10.1", "debug": "^4.1.0", + "electron-download": "^4.1.1", "electron-packager": "^13.0.0", "electron-rebuild": "^1.6.0", "fs-extra": "^7.0.0", diff --git a/packages/api/core/src/api/import.ts b/packages/api/core/src/api/import.ts index 4631753b4a..6b1d765480 100644 --- a/packages/api/core/src/api/import.ts +++ b/packages/api/core/src/api/import.ts @@ -12,7 +12,7 @@ import { setInitialForgeConfig } from '../util/forge-config'; import { info, warn } from '../util/messages'; import installDepList, { DepType, DepVersionRestriction } from '../util/install-dependencies'; import { readRawPackageJson } from '../util/read-package-json'; -import upgradeForgeConfig, { updateUpgradedForgeDevDeps } from'../util/upgrade-forge-config'; +import upgradeForgeConfig, { updateUpgradedForgeDevDeps } from '../util/upgrade-forge-config'; const d = debug('electron-forge:import'); @@ -63,7 +63,7 @@ export default async ({ d(`Attempting to import project in: ${dir}`); if (!await fs.pathExists(dir) || !await fs.pathExists(path.resolve(dir, 'package.json'))) { - throw `We couldn't find a project in: ${dir}`; + throw new Error(`We couldn't find a project in: ${dir}`); } // eslint-disable-next-line max-len @@ -100,9 +100,14 @@ export default async ({ packageJSON.dependencies = packageJSON.dependencies || {}; packageJSON.devDependencies = packageJSON.devDependencies || {}; - [importDevDeps, importExactDevDeps] = updateElectronDependency(packageJSON, importDevDeps, importExactDevDeps); + [importDevDeps, importExactDevDeps] = updateElectronDependency( + packageJSON, + importDevDeps, + importExactDevDeps, + ); - const keys = Object.keys(packageJSON.dependencies).concat(Object.keys(packageJSON.devDependencies)); + const keys = Object.keys(packageJSON.dependencies) + .concat(Object.keys(packageJSON.devDependencies)); const buildToolPackages: { [key: string]: string | undefined; } = { diff --git a/packages/api/core/src/api/index.ts b/packages/api/core/src/api/index.ts index d257a10e30..b3bd51c3cc 100644 --- a/packages/api/core/src/api/index.ts +++ b/packages/api/core/src/api/index.ts @@ -1,6 +1,5 @@ import 'colors'; import { ForgeMakeResult } from '@electron-forge/shared-types'; -import { ChildProcess } from 'child_process'; import _import, { ImportOptions } from './import'; import init, { InitOptions } from './init'; @@ -24,12 +23,14 @@ export class ForgeAPI { import(opts: ImportOptions) { return _import(opts); } + /** * Initialize a new Electron Forge template project in the given directory. */ init(opts: InitOptions) { return init(opts); } + /** * Install an Electron application from GitHub. * @@ -38,6 +39,7 @@ export class ForgeAPI { install(opts: InstallOptions) { return install(opts); } + /** * Lint a local Electron application. * @@ -47,24 +49,28 @@ export class ForgeAPI { lint(opts: LintOptions) { return lint(opts); } + /** * Make distributables for an Electron application */ make(opts: MakeOptions) { return make(opts); } + /** * Resolves hooks if they are a path to a file (instead of a `Function`) */ package(opts: PackageOptions) { return _package(opts); } + /** * Publish an Electron application into the given target service */ publish(opts: PublishOptions) { return publish(opts); } + /** * Start an Electron application. * @@ -88,6 +94,7 @@ export class ForgeUtils { } hasYarn = hasYarn; + yarnOrNpmSpawn = yarnOrNpmSpawn; } diff --git a/packages/api/core/src/api/init-scripts/init-custom.ts b/packages/api/core/src/api/init-scripts/init-custom.ts index c3e81512b0..c2d45226aa 100644 --- a/packages/api/core/src/api/init-scripts/init-custom.ts +++ b/packages/api/core/src/api/init-scripts/init-custom.ts @@ -5,10 +5,12 @@ import glob from 'glob'; import resolvePackage from 'resolve-package'; import path from 'path'; +import { ForgeTemplate } from '@electron-forge/shared-types'; import { copy } from './init-starter-files'; import installDepList, { DepType } from '../../util/install-dependencies'; +// https://github.com/benmosher/eslint-plugin-import/issues/1120 +// eslint-disable-next-line import/named import { PossibleModule } from '../../util/require-search'; -import { ForgeTemplate } from '@electron-forge/shared-types'; const d = debug('electron-forge:init:custom'); @@ -35,7 +37,7 @@ export default async (dir: string, template: string) => { templateModulePath = require.resolve(template); d('using absolute template'); } catch (err5) { - throw `Failed to locate custom template: "${template}"\n\nTry \`npm install -g @electron-forge-template-${template}\``; + throw new Error(`Failed to locate custom template: "${template}"\n\nTry \`npm install -g @electron-forge-template-${template}\``); } } } @@ -43,6 +45,7 @@ export default async (dir: string, template: string) => { } }); + // eslint-disable-next-line import/no-dynamic-require, global-require let templateModule: PossibleModule = require(templateModulePath); templateModule = templateModule.default || templateModule; @@ -55,11 +58,11 @@ export default async (dir: string, template: string) => { }); await asyncOra('Copying Template Files', async () => { - const templateDirectory = templateModule.templateDirectory; + const { templateDirectory } = templateModule; if (templateDirectory) { const tmplPath = templateDirectory; if (!path.isAbsolute(templateDirectory)) { - throw `Custom template path needs to be absolute, this is an issue with "electron-forge-template-${template}"`; + throw new Error(`Custom template path needs to be absolute, this is an issue with "electron-forge-template-${template}"`); } const files = glob.sync(path.resolve(tmplPath, '**/*')); diff --git a/packages/api/core/src/api/init-scripts/init-directory.ts b/packages/api/core/src/api/init-scripts/init-directory.ts index b056d1eb62..55fdb2f36c 100644 --- a/packages/api/core/src/api/init-scripts/init-directory.ts +++ b/packages/api/core/src/api/init-scripts/init-directory.ts @@ -14,7 +14,7 @@ export default async (dir: string) => { if (files.length !== 0) { d('found', files.length, 'files in the directory. warning the user'); initSpinner.stop(logSymbols.warning); - throw `The specified path: "${dir}" is not empty, do you wish to continue?`; + throw new Error(`The specified path: "${dir}" is not empty, do you wish to continue?`); } }); }; diff --git a/packages/api/core/src/api/init-scripts/init-git.ts b/packages/api/core/src/api/init-scripts/init-git.ts index 11a582b98f..54ce0ca062 100644 --- a/packages/api/core/src/api/init-scripts/init-git.ts +++ b/packages/api/core/src/api/init-scripts/init-git.ts @@ -13,12 +13,7 @@ export default async (dir: string) => { if (err) { // not run within a Git repository d('executing "git init" in directory:', dir); - exec('git init', { - cwd: dir, - }, (err) => { - if (err) return reject(err); - resolve(); - }); + exec('git init', { cwd: dir }, initErr => (initErr ? reject(initErr) : resolve())); } else { d('.git directory already exists, skipping git initialization'); resolve(); diff --git a/packages/api/core/src/api/init-scripts/init-npm.ts b/packages/api/core/src/api/init-scripts/init-npm.ts index 03cb23e0f3..64d63a4d4b 100644 --- a/packages/api/core/src/api/init-scripts/init-npm.ts +++ b/packages/api/core/src/api/init-scripts/init-npm.ts @@ -28,6 +28,7 @@ export const exactDevDeps = ['electron']; export default async (dir: string) => { await asyncOra('Initializing NPM Module', async () => { const packageJSON = await readRawPackageJson(path.resolve(__dirname, '../../../tmpl')); + // eslint-disable-next-line no-multi-assign packageJSON.productName = packageJSON.name = path.basename(dir).toLowerCase(); packageJSON.author = await username(); setInitialForgeConfig(packageJSON); diff --git a/packages/api/core/src/api/install.ts b/packages/api/core/src/api/install.ts index 5b1228ce0c..c77bfc713b 100644 --- a/packages/api/core/src/api/install.ts +++ b/packages/api/core/src/api/install.ts @@ -26,6 +26,7 @@ const GITHUB_API = 'https://api.github.com'; class InstallerImpl extends InstallerBase { name = 'impl'; } interface Release { + // eslint-disable-next-line camelcase tag_name: string; prerelease: boolean; assets: Asset[]; @@ -35,6 +36,7 @@ export interface Asset { id: string; name: string; size: number; + // eslint-disable-next-line camelcase browser_download_url: string; } @@ -52,7 +54,8 @@ export interface InstallOptions { */ repo: string; /** - * A function that must return the asset to use/install from a provided array of compatible GitHub assets + * A function that must return the asset to use/install from a provided array of compatible + * GitHub assets. */ chooseAsset: (assets: Asset[]) => Promise | Asset; } @@ -66,7 +69,7 @@ export default async ({ asyncOra.interactive = interactive; if (typeof chooseAsset !== 'function') { - throw 'Expected chooseAsset to be a function in install call'; + throw new Error('Expected chooseAsset to be a function in install call'); } let latestRelease!: Release; @@ -74,7 +77,7 @@ export default async ({ await asyncOra('Searching for Application', async (searchSpinner) => { if (!repo || repo.indexOf('/') === -1) { - throw 'Invalid repository name, must be in the format owner/name'; + throw new Error('Invalid repository name, must be in the format owner/name'); } d('searching for repo:', repo); @@ -86,11 +89,11 @@ export default async ({ } if (!releases || (releases as any).message === 'Not Found' || !Array.isArray(releases)) { - throw `Failed to find releases for repository "${repo}". Please check the name and try again.`; + throw new Error(`Failed to find releases for repository "${repo}". Please check the name and try again.`); } if (releases.length === 0) { - throw `Repository "${repo}" has no releases`; + throw new Error(`Repository "${repo}" has no releases`); } releases = releases.filter(release => !release.prerelease || prerelease); @@ -102,13 +105,14 @@ export default async ({ if (tagB.substr(0, 1) === 'v') tagB = tagB.substr(1); return (semver.gt(tagB, tagA) ? 1 : -1); }); + // eslint-disable-next-line prefer-destructuring latestRelease = sortedReleases[0]; - searchSpinner.text = 'Searching for Releases'; // eslint-disable-line + searchSpinner.text = 'Searching for Releases'; - const assets = latestRelease.assets; + const { assets } = latestRelease; if (!assets || !Array.isArray(assets) || assets.length === 0) { - throw 'Could not find any assets for the latest release'; + throw new Error('Could not find any assets for the latest release'); } const installTargets: { @@ -128,7 +132,7 @@ export default async ({ }); if (possibleAssets.length === 0) { - throw `Failed to find any installable assets for target platform: ${`${process.platform}`.cyan}`; + throw new Error(`Failed to find any installable assets for target platform: ${`${process.platform}`.cyan}`); } }); @@ -144,7 +148,8 @@ export default async ({ const filename = `${pathSafeRepo}-${latestRelease.tag_name}-${targetAsset.name}`; const fullFilePath = path.resolve(tmpdir, filename); - if (!await fs.pathExists(fullFilePath) || (await fs.stat(fullFilePath)).size !== targetAsset.size) { + if (!await fs.pathExists(fullFilePath) + || (await fs.stat(fullFilePath)).size !== targetAsset.size) { await fs.mkdirs(tmpdir); const nuggetOpts = { @@ -175,9 +180,10 @@ export default async ({ }, }; - const suffixFnIdent = Object.keys(installActions[process.platform]).find(suffix => targetAsset.name.endsWith(suffix)); + const suffixFnIdent = Object.keys(installActions[process.platform]) + .find(suffix => targetAsset.name.endsWith(suffix)); if (!suffixFnIdent) { - throw `No installer to handle "${targetAsset.name}"`; + throw new Error(`No installer to handle "${targetAsset.name}"`); } const InstallerClass = installActions[process.platform][suffixFnIdent]; const installer = new InstallerClass(); diff --git a/packages/api/core/src/api/lint.ts b/packages/api/core/src/api/lint.ts index 09f4d993c7..2b33fedb27 100644 --- a/packages/api/core/src/api/lint.ts +++ b/packages/api/core/src/api/lint.ts @@ -24,7 +24,7 @@ export default async ({ await asyncOra('Linting Application', async (lintSpinner) => { const resolvedDir = await resolveDir(dir); if (!resolvedDir) { - throw 'Failed to locate lintable Electron application'; + throw new Error('Failed to locate lintable Electron application'); } dir = resolvedDir; diff --git a/packages/api/core/src/api/make.ts b/packages/api/core/src/api/make.ts index 89e44c0db2..a73b2f0651 100644 --- a/packages/api/core/src/api/make.ts +++ b/packages/api/core/src/api/make.ts @@ -1,6 +1,8 @@ import 'colors'; import { asyncOra } from '@electron-forge/async-ora'; -import { IForgeResolvableMaker, ForgeConfig, ForgeArch, ForgePlatform, ForgeMakeResult } from '@electron-forge/shared-types'; +import { + IForgeResolvableMaker, ForgeConfig, ForgeArch, ForgePlatform, ForgeMakeResult, +} from '@electron-forge/shared-types'; import MakerBase from '@electron-forge/maker-base'; import fs from 'fs-extra'; import path from 'path'; @@ -19,7 +21,11 @@ import packager from './package'; const { host: hostArch }: { host: () => ForgeArch } = require('electron-download/lib/arch'); -class MakerImpl extends MakerBase { name = 'impl'; defaultPlatforms = []; } +class MakerImpl extends MakerBase { + name = 'impl'; + + defaultPlatforms = []; +} export interface MakeOptions { /** @@ -61,14 +67,13 @@ export default async ({ overrideTargets, outDir, }: MakeOptions) => { - asyncOra.interactive = interactive; let forgeConfig!: ForgeConfig; await asyncOra('Resolving Forge Config', async () => { const resolvedDir = await resolveDir(dir); if (!resolvedDir) { - throw 'Failed to locate makeable Electron application'; + throw new Error('Failed to locate makeable Electron application'); } dir = resolvedDir; @@ -96,17 +101,20 @@ export default async ({ let targetId = 0; for (const target of targets) { let maker: MakerBase; + // eslint-disable-next-line no-underscore-dangle if ((target as MakerBase).__isElectronForgeMaker) { maker = target as MakerBase; + // eslint-disable-next-line no-continue if (maker.platforms.indexOf(actualTargetPlatform) === -1) continue; } else { const resolvableTarget: IForgeResolvableMaker = target as IForgeResolvableMaker; const MakerClass = requireSearch(dir, [resolvableTarget.name]); if (!MakerClass) { - throw `Could not find module with name: ${resolvableTarget.name}. Make sure it's listed in the devDependencies of your package.json`; + throw new Error(`Could not find module with name: ${resolvableTarget.name}. Make sure it's listed in the devDependencies of your package.json`); } maker = new MakerClass(resolvableTarget.config, resolvableTarget.platforms || undefined); + // eslint-disable-next-line no-continue if (maker.platforms.indexOf(actualTargetPlatform) === -1) continue; } @@ -159,7 +167,8 @@ export default async ({ } targetId = 0; - for (const target of targets) { + // eslint-disable-next-line no-underscore-dangle, @typescript-eslint/no-unused-vars + for (const _target of targets) { const maker = makers[targetId]; targetId += 1; @@ -198,6 +207,7 @@ export default async ({ }); } catch (err) { if (err) { + // eslint-disable-next-line no-throw-literal throw { message: `An error occured while making for target: ${maker.name}`, stack: `${err.message}\n${err.stack}`, @@ -212,5 +222,5 @@ export default async ({ // If the postMake hooks modifies the locations / names of the outputs it must return // the new locations so that the publish step knows where to look - return await runMutatingHook(forgeConfig, 'postMake', outputs); + return runMutatingHook(forgeConfig, 'postMake', outputs); }; diff --git a/packages/api/core/src/api/package.ts b/packages/api/core/src/api/package.ts index 5050ab5918..01464389f0 100644 --- a/packages/api/core/src/api/package.ts +++ b/packages/api/core/src/api/package.ts @@ -1,6 +1,6 @@ import 'colors'; import { ora as realOra, fakeOra, OraImpl } from '@electron-forge/async-ora'; -import { ForgeArch, ForgePlatform, ForgeConfig } from '@electron-forge/shared-types'; +import { ForgeArch, ForgePlatform } from '@electron-forge/shared-types'; import debug from 'debug'; import fs from 'fs-extra'; import glob from 'glob'; @@ -22,8 +22,13 @@ const { host: hostArch }: { host: () => ForgeArch | 'all' } = require('electron- const d = debug('electron-forge:packager'); -type ElectronPackagerAfterCopyHook = - (buildPath: string, electronVersion: string, pPlatform: ForgePlatform, pArch: ForgeArch, done: (err?: Error) => void) => void; +type ElectronPackagerAfterCopyHook = ( + buildPath: string, + electronVersion: string, + pPlatform: ForgePlatform, + pArch: ForgeArch, + done: (err?: Error) => void +) => void; /** * Resolves hooks if they are a path to a file (instead of a `Function`). @@ -32,8 +37,8 @@ function resolveHooks(hooks: (string | ElectronPackagerAfterCopyHook)[] | undefi if (hooks) { return hooks.map(hook => ( typeof hook === 'string' - ? requireSearch(dir, [hook]) as ElectronPackagerAfterCopyHook - : hook + ? requireSearch(dir, [hook]) as ElectronPackagerAfterCopyHook + : hook )); } @@ -92,7 +97,7 @@ export default async ({ const resolvedDir = await resolveDir(dir); if (!resolvedDir) { - throw 'Failed to locate compilable Electron application'; + throw new Error('Failed to locate compilable Electron application'); } dir = resolvedDir; @@ -100,7 +105,7 @@ export default async ({ const packageJSON = await readMutatedPackageJson(dir, forgeConfig); if (!packageJSON.main) { - throw 'packageJSON.main must be set to a valid entry point for your Electron app'; + throw new Error('packageJSON.main must be set to a valid entry point for your Electron app'); } const calculatedOutDir = outDir || getCurrentOutDir(dir, forgeConfig); @@ -126,7 +131,13 @@ export default async ({ done(); }, async (buildPath, electronVersion, pPlatform, pArch, done) => { - await rebuildHook(buildPath, electronVersion, pPlatform, pArch, forgeConfig.electronRebuildConfig); + await rebuildHook( + buildPath, + electronVersion, + pPlatform, + pArch, + forgeConfig.electronRebuildConfig, + ); packagerSpinner = ora('Packaging Application').start(); done(); }, diff --git a/packages/api/core/src/api/publish.ts b/packages/api/core/src/api/publish.ts index e7aa026c62..fc278be1ec 100644 --- a/packages/api/core/src/api/publish.ts +++ b/packages/api/core/src/api/publish.ts @@ -1,13 +1,17 @@ import 'colors'; import { asyncOra } from '@electron-forge/async-ora'; -import { IForgeResolvablePublisher, IForgePublisher, ForgeMakeResult, ForgePlatform } from '@electron-forge/shared-types'; +import { + IForgeResolvablePublisher, + IForgePublisher, + ForgeMakeResult, + // ForgePlatform, +} from '@electron-forge/shared-types'; import PublisherBase from '@electron-forge/publisher-base'; import debug from 'debug'; import fs from 'fs-extra'; import path from 'path'; import getForgeConfig from '../util/forge-config'; -import { readMutatedPackageJson } from '../util/read-package-json'; import resolveDir from '../util/resolve-dir'; import PublishState from '../util/publish-state'; import getCurrentOutDir from '../util/out-dir'; @@ -68,14 +72,13 @@ const publish = async ({ asyncOra.interactive = interactive; if (dryRun && dryRunResume) { - throw 'Can\'t dry run and resume a dry run at the same time'; + throw new Error("Can't dry run and resume a dry run at the same time"); } if (dryRunResume && makeResults) { - throw 'Can\'t resume a dry run and use the provided makeResults at the same time'; + throw new Error("Can't resume a dry run and use the provided makeResults at the same time"); } const forgeConfig = await getForgeConfig(dir); - let packageJSON = await readMutatedPackageJson(dir, forgeConfig); const calculatedOutDir = outDir || getCurrentOutDir(dir, forgeConfig); const dryRunDir = path.resolve(calculatedOutDir, 'publish-dry-run'); @@ -109,13 +112,12 @@ const publish = async ({ d('restoring publish settings from dry run'); for (const makeResult of makeResults) { - packageJSON = makeResult.packageJSON; makeOptions.platform = makeResult.platform; makeOptions.arch = makeResult.arch; for (const makePath of makeResult.artifacts) { if (!await fs.pathExists(makePath)) { - throw `Attempted to resume a dry run but an artifact (${makePath}) could not be found`; + throw new Error(`Attempted to resume a dry run but an artifact (${makePath}) could not be found`); } } } @@ -130,19 +132,21 @@ const publish = async ({ const resolvedDir = await resolveDir(dir); if (!resolvedDir) { - throw 'Failed to locate publishable Electron application'; + throw new Error('Failed to locate publishable Electron application'); } dir = resolvedDir; - const testPlatform = makeOptions.platform || process.platform as ForgePlatform; + // const testPlatform = makeOptions.platform || process.platform as ForgePlatform; if (!publishTargets) { publishTargets = (forgeConfig.publishers || []); - // .filter(publisher => (typeof publisher !== 'string' && publisher.platforms) ? publisher.platforms.indexOf(testPlatform) !== -1 : true); + // .filter(publisher => (typeof publisher !== 'string' && publisher.platforms) + // ? publisher.platforms.indexOf(testPlatform) !== -1 : true); } publishTargets = publishTargets.map((target) => { if (typeof target === 'string') { return (forgeConfig.publishers || []).find((p) => { if (typeof p === 'string') return false; + // eslint-disable-next-line no-underscore-dangle if ((p as IForgePublisher).__isElectronForgePublisher) return false; return (p as IForgeResolvablePublisher).name === target; }) || { name: target }; @@ -152,6 +156,7 @@ const publish = async ({ for (const publishTarget of publishTargets) { let publisher: PublisherBase; + // eslint-disable-next-line no-underscore-dangle if ((publishTarget as IForgePublisher).__isElectronForgePublisher) { publisher = publishTarget as any; } else { @@ -160,11 +165,14 @@ const publish = async ({ await asyncOra(`Resolving publish target: ${`${resolvablePublishTarget.name}`.cyan}`, async () => { // eslint-disable-line no-loop-func PublisherClass = requireSearch(dir, [resolvablePublishTarget.name]); if (!PublisherClass) { - throw `Could not find a publish target with the name: ${resolvablePublishTarget.name}. Make sure it's listed in the devDependencies of your package.json`; + throw new Error(`Could not find a publish target with the name: ${resolvablePublishTarget.name}. Make sure it's listed in the devDependencies of your package.json`); } }); - publisher = new PublisherClass(resolvablePublishTarget.config || {}, resolvablePublishTarget.platforms); + publisher = new PublisherClass( + resolvablePublishTarget.config || {}, + resolvablePublishTarget.platforms, + ); } await publisher.publish({ diff --git a/packages/api/core/src/api/start.ts b/packages/api/core/src/api/start.ts index 70b732ffcd..243adcef11 100644 --- a/packages/api/core/src/api/start.ts +++ b/packages/api/core/src/api/start.ts @@ -27,7 +27,7 @@ export default async ({ await asyncOra('Locating Application', async () => { const resolvedDir = await resolveDir(dir); if (!resolvedDir) { - throw 'Failed to locate startable Electron application'; + throw new Error('Failed to locate startable Electron application'); } dir = resolvedDir; }); @@ -36,7 +36,7 @@ export default async ({ const packageJSON = await readMutatedPackageJson(dir, forgeConfig); if (!packageJSON.version) { - throw `Please set your application's 'version' in '${dir}/package.json'.`; + throw new Error(`Please set your application's 'version' in '${dir}/package.json'.`); } await rebuild( @@ -51,26 +51,6 @@ export default async ({ let lastSpawned: ChildProcess | null = null; - const forgeSpawnWrapper = async () => { - lastSpawned = await forgeSpawn(); - // When the child app is closed we should stop listening for stdin - if (lastSpawned) { - if (interactive && process.stdin.isPaused()) { - process.stdin.resume(); - } - lastSpawned.on('exit', () => { - if ((lastSpawned as any).restarted) return; - - if (!process.stdin.isPaused()) process.stdin.pause(); - }); - } else { - if (interactive && !process.stdin.isPaused()) { - process.stdin.pause(); - } - } - return lastSpawned; - }; - const forgeSpawn = async () => { let electronExecPath: string | null = null; @@ -88,14 +68,14 @@ export default async ({ if (typeof spawnedPluginChild === 'string') { electronExecPath = spawnedPluginChild; } else if (Array.isArray(spawnedPluginChild)) { - electronExecPath = spawnedPluginChild[0]; - prefixArgs = spawnedPluginChild.slice(1); + [electronExecPath, ...prefixArgs] = spawnedPluginChild; } else if (spawnedPluginChild) { await runHook(forgeConfig, 'postStart', spawnedPluginChild); return spawnedPluginChild; } if (!electronExecPath) { + // eslint-disable-next-line import/no-dynamic-require, global-require electronExecPath = require(path.resolve(dir, 'node_modules/electron')); } @@ -121,16 +101,39 @@ export default async ({ let spawned!: ChildProcess; await asyncOra('Launching Application', async () => { - spawned = spawn(electronExecPath!, prefixArgs.concat([appPath]).concat(args as string[]), spawnOpts as SpawnOptions); + spawned = spawn( + electronExecPath!, + prefixArgs.concat([appPath]).concat(args as string[]), + spawnOpts as SpawnOptions, + ); }); await runHook(forgeConfig, 'postStart', spawned); return spawned; }; + const forgeSpawnWrapper = async () => { + lastSpawned = await forgeSpawn(); + // When the child app is closed we should stop listening for stdin + if (lastSpawned) { + if (interactive && process.stdin.isPaused()) { + process.stdin.resume(); + } + lastSpawned.on('exit', () => { + if ((lastSpawned as any).restarted) return; + + if (!process.stdin.isPaused()) process.stdin.pause(); + }); + } else if (interactive && !process.stdin.isPaused()) { + process.stdin.pause(); + } + return lastSpawned; + }; + if (interactive) { process.stdin.on('data', async (data) => { if (data.toString().trim() === 'rs' && lastSpawned) { + // eslint-disable-next-line no-console console.info('\nRestarting App\n'.cyan); (lastSpawned as any).restarted = true; lastSpawned.kill('SIGTERM'); diff --git a/packages/api/core/src/util/config-fn.ts b/packages/api/core/src/util/config-fn.ts index 20b2b1e66d..7eb187ef7a 100644 --- a/packages/api/core/src/util/config-fn.ts +++ b/packages/api/core/src/util/config-fn.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line arrow-parens export default (configObject: T | ((...args: A[]) => T), ...args: A[]): T => { if (typeof configObject === 'function') { return (configObject as any as ((...args: A[]) => T))(...args); diff --git a/packages/api/core/src/util/deprecate.ts b/packages/api/core/src/util/deprecate.ts index c32aeba399..ca5f4537ba 100644 --- a/packages/api/core/src/util/deprecate.ts +++ b/packages/api/core/src/util/deprecate.ts @@ -1,3 +1,4 @@ +/* eslint "no-console": "off" */ import 'colors'; import logSymbols from 'log-symbols'; diff --git a/packages/api/core/src/util/electron-version.ts b/packages/api/core/src/util/electron-version.ts index 55f7789a9e..00019e0f8d 100644 --- a/packages/api/core/src/util/electron-version.ts +++ b/packages/api/core/src/util/electron-version.ts @@ -32,6 +32,7 @@ export async function getElectronVersion(dir: string, packageJSON: any): Promise const electronPackageJSONPath = path.join(dir, 'node_modules', packageName, 'package.json'); if (await fs.pathExists(electronPackageJSONPath)) { const electronPackageJSON = await fs.readJson(electronPackageJSONPath); + // eslint-disable-next-line prefer-destructuring version = electronPackageJSON.version; } else { throw new Error(`Cannot find the package "${packageName}". Perhaps you need to run "${yarnOrNpm()} install" in "${dir}"?`); @@ -41,7 +42,11 @@ export async function getElectronVersion(dir: string, packageJSON: any): Promise return version; } -export function updateElectronDependency(packageJSON: any, dev: string[], exact: string[]): [string[], string[]] { +export function updateElectronDependency( + packageJSON: any, + dev: string[], + exact: string[], +): [string[], string[]] { const alteredDev = ([] as string[]).concat(dev); let alteredExact = ([] as string[]).concat(exact); if (Object.keys(packageJSON.devDependencies).find(findElectronDep)) { diff --git a/packages/api/core/src/util/forge-config.ts b/packages/api/core/src/util/forge-config.ts index 408f46df00..668938e386 100644 --- a/packages/api/core/src/util/forge-config.ts +++ b/packages/api/core/src/util/forge-config.ts @@ -9,7 +9,12 @@ import { runMutatingHook } from './hook'; const underscoreCase = (str: string) => str.replace(/(.)([A-Z][a-z]+)/g, '$1_$2').replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase(); -const proxify = (buildIdentifier: string | (() => string), object: T, envPrefix: string): T => { +// eslint-disable-next-line arrow-parens +const proxify = ( + buildIdentifier: string | (() => string), + object: T, + envPrefix: string, +): T => { let newObject: T = {} as any; if (Array.isArray(object)) { newObject = [] as any; @@ -33,6 +38,7 @@ const proxify = (buildIdentifier: string | (() => string), obj } const value = Reflect.get(target, name, receiver); + // eslint-disable-next-line no-underscore-dangle if (value && typeof value === 'object' && value.__isMagicBuildIdentifierMap) { const identifier = typeof buildIdentifier === 'function' ? buildIdentifier() : buildIdentifier; return value.map[identifier]; @@ -45,9 +51,17 @@ const proxify = (buildIdentifier: string | (() => string), obj if (target.hasOwnProperty(name)) { return Reflect.getOwnPropertyDescriptor(target, name); } + if (envValue) { - return { writable: true, enumerable: true, configurable: true, value: envValue }; + return { + writable: true, + enumerable: true, + configurable: true, + value: envValue, + }; } + + return undefined; }, }); }; @@ -58,9 +72,7 @@ const proxify = (buildIdentifier: string | (() => string), obj export function setInitialForgeConfig(packageJSON: any) { const { name = '' } = packageJSON; - /* eslint-disable no-param-reassign */ packageJSON.config.forge.makers[0].config.name = name.replace(/-/g, '_'); - /* eslint-enable no-param-reassign */ } export function fromBuildIdentifier(map: { [key: string]: T | undefined }) { @@ -70,9 +82,19 @@ export function fromBuildIdentifier(map: { [key: string]: T | undefined }) { }; } +async function forgeConfigIsValidFilePath(dir: string, forgeConfig: string | ForgeConfig) { + return typeof forgeConfig === 'string' + && ( + await fs.pathExists(path.resolve(dir, forgeConfig)) + || fs.pathExists(path.resolve(dir, `${forgeConfig}.js`)) + ); +} + export default async (dir: string) => { const packageJSON = await readRawPackageJson(dir); - let forgeConfig: ForgeConfig | string | null = (packageJSON.config && packageJSON.config.forge) ? packageJSON.config.forge : null; + let forgeConfig: ForgeConfig | string | null = (packageJSON.config && packageJSON.config.forge) + ? packageJSON.config.forge + : null; if (!forgeConfig) { if (await fs.pathExists(path.resolve(dir, 'forge.config.js'))) { @@ -82,10 +104,12 @@ export default async (dir: string) => { } } - if (typeof forgeConfig === 'string' && (await fs.pathExists(path.resolve(dir, forgeConfig)) || await fs.pathExists(path.resolve(dir, `${forgeConfig}.js`)))) { + if (await forgeConfigIsValidFilePath(dir, forgeConfig)) { try { - forgeConfig = require(path.resolve(dir, forgeConfig)) as ForgeConfig; + // eslint-disable-next-line global-require, import/no-dynamic-require + forgeConfig = require(path.resolve(dir, forgeConfig as string)) as ForgeConfig; } catch (err) { + // eslint-disable-next-line no-console console.error(`Failed to load: ${path.resolve(dir, forgeConfig as string)}`); throw err; } @@ -106,9 +130,10 @@ export default async (dir: string) => { if (typeof obj[objKey] === 'object' && obj !== null) { template(obj[objKey]); } else if (typeof obj[objKey] === 'string') { - obj[objKey] = _template(obj[objKey])(templateObj); // eslint-disable-line + obj[objKey] = _template(obj[objKey])(templateObj); if (obj[objKey].startsWith('require:')) { - obj[objKey] = require(path.resolve(dir, obj[objKey].substr(8))); // eslint-disable-line + // eslint-disable-next-line global-require, import/no-dynamic-require + obj[objKey] = require(path.resolve(dir, obj[objKey].substr(8))); } } }); diff --git a/packages/api/core/src/util/hook.ts b/packages/api/core/src/util/hook.ts index dcd1afa3c7..2f8b0d6629 100644 --- a/packages/api/core/src/util/hook.ts +++ b/packages/api/core/src/util/hook.ts @@ -4,7 +4,7 @@ import debug from 'debug'; const d = debug('electron-forge:hook'); export const runHook = async (forgeConfig: ForgeConfig, hookName: string, ...hookArgs: any[]) => { - const hooks = forgeConfig.hooks; + const { hooks } = forgeConfig; if (hooks) { d(`hook triggered: ${hookName}`); if (typeof hooks[hookName] === 'function') { @@ -15,8 +15,12 @@ export const runHook = async (forgeConfig: ForgeConfig, hookName: string, ...hoo await forgeConfig.pluginInterface.triggerHook(hookName, hookArgs); }; -export async function runMutatingHook(forgeConfig: ForgeConfig, hookName: string, item: T): Promise { - const hooks = forgeConfig.hooks; +export async function runMutatingHook( + forgeConfig: ForgeConfig, + hookName: string, + item: T, +): Promise { + const { hooks } = forgeConfig; if (hooks) { d(`hook triggered: ${hookName}`); if (typeof hooks[hookName] === 'function') { @@ -27,5 +31,5 @@ export async function runMutatingHook(forgeConfig: ForgeConfig, hookName: str } } } - return await forgeConfig.pluginInterface.triggerMutatingHook(hookName, item); + return forgeConfig.pluginInterface.triggerMutatingHook(hookName, item); } diff --git a/packages/api/core/src/util/install-dependencies.ts b/packages/api/core/src/util/install-dependencies.ts index d4f7497a34..f93621a136 100644 --- a/packages/api/core/src/util/install-dependencies.ts +++ b/packages/api/core/src/util/install-dependencies.ts @@ -18,7 +18,7 @@ export default async ( deps: string[], depType = DepType.PROD, versionRestriction = DepVersionRestriction.RANGE, -) => { +) => { // eslint-disable-line consistent-return d('installing', JSON.stringify(deps), 'in:', dir, `depType=${depType},versionRestriction=${versionRestriction},withYarn=${hasYarn()}`); if (deps.length === 0) { d('nothing to install, stopping immediately'); diff --git a/packages/api/core/src/util/is-installed.ts b/packages/api/core/src/util/is-installed.ts index c84a152491..ab0eaf1593 100644 --- a/packages/api/core/src/util/is-installed.ts +++ b/packages/api/core/src/util/is-installed.ts @@ -1,3 +1,4 @@ +/* eslint "global-require": "off", "import/no-dynamic-require": "off" */ export default function isInstalled(pkg: string) { try { require(pkg); diff --git a/packages/api/core/src/util/linux-installer.ts b/packages/api/core/src/util/linux-installer.ts index 48a5de5881..b2201c224a 100644 --- a/packages/api/core/src/util/linux-installer.ts +++ b/packages/api/core/src/util/linux-installer.ts @@ -10,7 +10,6 @@ const which = async (type: string, prog: string, promise: () => Promise) => } }; -export const sudo = (type: string, prog: string, args: string) => - which(type, prog, () => pify(sudoPrompt.exec)(`${prog} ${args}`, { name: 'Electron Forge' })); +export const sudo = (type: string, prog: string, args: string) => which(type, prog, () => pify(sudoPrompt.exec)(`${prog} ${args}`, { name: 'Electron Forge' })); export default which; diff --git a/packages/api/core/src/util/messages.ts b/packages/api/core/src/util/messages.ts index b152f79edf..625dd58b08 100644 --- a/packages/api/core/src/util/messages.ts +++ b/packages/api/core/src/util/messages.ts @@ -1,3 +1,4 @@ +/* eslint "no-console": "off" */ export function info(interactive: boolean, message: string) { if (interactive) { console.info(message); diff --git a/packages/api/core/src/util/plugin-interface.ts b/packages/api/core/src/util/plugin-interface.ts index b4585c95b0..e43393c680 100644 --- a/packages/api/core/src/util/plugin-interface.ts +++ b/packages/api/core/src/util/plugin-interface.ts @@ -1,6 +1,5 @@ import PluginBase from '@electron-forge/plugin-base'; import { IForgePluginInterface, ForgeConfig, IForgePlugin } from '@electron-forge/shared-types'; -import { ChildProcess } from 'child_process'; import debug from 'debug'; import { StartOptions } from '../api'; @@ -10,27 +9,28 @@ const d = debug('electron-forge:plugins'); export default class PluginInterface implements IForgePluginInterface { private plugins: IForgePlugin[]; + private config: ForgeConfig; constructor(dir: string, forgeConfig: ForgeConfig) { this.plugins = forgeConfig.plugins.map((plugin) => { + // eslint-disable-next-line no-underscore-dangle if ((plugin as IForgePlugin).__isElectronForgePlugin) { return plugin; } if (Array.isArray(plugin)) { - if (typeof plugin[0] !== 'string') { - throw `Expected plugin[0] to be a string but found ${plugin[0]}`; + const [pluginName, opts = {}] = plugin; + if (typeof pluginName !== 'string') { + throw new Error(`Expected plugin[0] to be a string but found ${pluginName}`); } - let opts = {}; - if (typeof plugin[1] !== 'undefined') opts = plugin[1]; - const Plugin = requireSearch(dir, [plugin[0]]); + const Plugin = requireSearch(dir, [pluginName]); if (!Plugin) { - throw `Could not find module with name: ${plugin[0]}. Make sure it's listed in the devDependencies of your package.json`; + throw new Error(`Could not find module with name: ${plugin[0]}. Make sure it's listed in the devDependencies of your package.json`); } return new Plugin(opts); } - throw `Expected plugin to either be a plugin instance or [string, object] but found ${plugin}`; // eslint-disable-line + throw new Error(`Expected plugin to either be a plugin instance or [string, object] but found ${plugin}`); }); // Fix linting this.config = null as any; @@ -79,10 +79,12 @@ export default class PluginInterface implements IForgePluginInterface { newStartFn = plugin.startLogic; } } - if (claimed.length > 1) throw `Multiple plugins tried to take control of the start command, please remove one of them\n --> ${claimed.join(', ')}`; + if (claimed.length > 1) { + throw new Error(`Multiple plugins tried to take control of the start command, please remove one of them\n --> ${claimed.join(', ')}`); + } if (claimed.length === 1 && newStartFn) { d(`plugin: "${claimed[0]}" has taken control of the start command`); - return await newStartFn(opts); + return newStartFn(opts); } return false; } diff --git a/packages/api/core/src/util/publish-state.ts b/packages/api/core/src/util/publish-state.ts index 8285b1878d..c582bf7b61 100644 --- a/packages/api/core/src/util/publish-state.ts +++ b/packages/api/core/src/util/publish-state.ts @@ -24,6 +24,7 @@ export default class PublishState { for (const filePath of filePaths) { const state = new PublishState(filePath); await state.load(); + // eslint-disable-next-line max-len state.state.artifacts = state.state.artifacts.map(artifactPath => path.resolve(rootDir, artifactPath)); states.push(state); } @@ -36,6 +37,7 @@ export default class PublishState { static async saveToDirectory(directory: string, artifacts: ForgeMakeResult[], rootDir: string) { const id = crypto.createHash('SHA256').update(JSON.stringify(artifacts)).digest('hex'); for (const artifact of artifacts) { + // eslint-disable-next-line max-len artifact.artifacts = artifact.artifacts.map(artifactPath => path.relative(rootDir, artifactPath)); const publishState = new PublishState(path.resolve(directory, id, 'null'), false); publishState.state = artifact; @@ -44,8 +46,11 @@ export default class PublishState { } private dir: string; + private path: string; + private hasHash: boolean; + public state: ForgeMakeResult = {} as ForgeMakeResult; constructor(filePath: string, hasHash = true) { diff --git a/packages/api/core/src/util/read-package-json.ts b/packages/api/core/src/util/read-package-json.ts index 7ed253e9d8..a9022f72d3 100644 --- a/packages/api/core/src/util/read-package-json.ts +++ b/packages/api/core/src/util/read-package-json.ts @@ -4,8 +4,6 @@ import path from 'path'; import { runMutatingHook } from './hook'; -export const readRawPackageJson = async (dir: string) => - await fs.readJson(path.resolve(dir, 'package.json')); +export const readRawPackageJson = async (dir: string) => fs.readJson(path.resolve(dir, 'package.json')); -export const readMutatedPackageJson = async (dir: string, forgeConfig: ForgeConfig) => - runMutatingHook(forgeConfig, 'readPackageJson', await readRawPackageJson(dir)); +export const readMutatedPackageJson = async (dir: string, forgeConfig: ForgeConfig) => runMutatingHook(forgeConfig, 'readPackageJson', await readRawPackageJson(dir)); diff --git a/packages/api/core/src/util/rebuild.ts b/packages/api/core/src/util/rebuild.ts index 10ea2ce619..96c43124f5 100644 --- a/packages/api/core/src/util/rebuild.ts +++ b/packages/api/core/src/util/rebuild.ts @@ -23,7 +23,7 @@ export default async ( let done = 0; const redraw = () => { - rebuildSpinner.text = `Preparing native dependencies: ${done} / ${found}`; // eslint-disable-line + rebuildSpinner.text = `Preparing native dependencies: ${done} / ${found}`; }; lifecycle.on('module-found', () => { found += 1; redraw(); }); diff --git a/packages/api/core/src/util/require-search.ts b/packages/api/core/src/util/require-search.ts index bc1cf4c631..8e3a99d35e 100644 --- a/packages/api/core/src/util/require-search.ts +++ b/packages/api/core/src/util/require-search.ts @@ -11,6 +11,7 @@ export function requireSearchRaw(relativeTo: string, paths: string[]): T | nu for (const testPath of testPaths) { try { d('testing', testPath); + // eslint-disable-next-line global-require, import/no-dynamic-require return require(testPath); } catch (err) { // Ignore the error @@ -24,6 +25,7 @@ export type PossibleModule = { default?: T; } & T; +// eslint-disable-next-line arrow-parens export default (relativeTo: string, paths: string[]): T | null => { const result = requireSearchRaw>(relativeTo, paths); return typeof result === 'object' && result && result.default ? result.default : result as (T | null); diff --git a/packages/api/core/src/util/resolve-dir.ts b/packages/api/core/src/util/resolve-dir.ts index 565b12f704..b6bccc295e 100644 --- a/packages/api/core/src/util/resolve-dir.ts +++ b/packages/api/core/src/util/resolve-dir.ts @@ -24,9 +24,8 @@ export default async (dir: string) => { // TODO: Move this check to inside the forge config resolver and use // mutatedPackageJson reader - let electronVersion; try { - electronVersion = await getElectronVersion(mDir, packageJSON); + await getElectronVersion(mDir, packageJSON); } catch (err) { lastError = err.message; } diff --git a/packages/api/core/src/util/upgrade-forge-config.ts b/packages/api/core/src/util/upgrade-forge-config.ts index 174b280f75..864e1d6229 100644 --- a/packages/api/core/src/util/upgrade-forge-config.ts +++ b/packages/api/core/src/util/upgrade-forge-config.ts @@ -11,7 +11,7 @@ function mapMakeTargets(forge5Config: any): Map { const makeTargets = new Map(); if (forge5Config.makeTargets) { // TODO: Use object.entries when dropping Node 6 - for (const platform in forge5Config.makeTargets) { + for (const platform of Object.keys(forge5Config.makeTargets)) { for (const target of forge5Config.makeTargets[platform]) { let platforms = makeTargets.get(target); if (platforms === undefined) { @@ -73,6 +73,21 @@ const forge5PublisherMappings = new Map([ ['snapStore', 'snapcraft'], ]); +/** + * Transforms v5 GitHub publisher config to v6 syntax. + */ +function transformGitHubPublisherConfig(config: any) { + const { + name, owner, options, ...gitHubConfig + } = config; + gitHubConfig.repository = { name, owner }; + if (options) { + gitHubConfig.octokitOptions = options; + } + + return gitHubConfig; +} + /** * Converts Forge v5 publisher config to v6. */ @@ -96,19 +111,6 @@ function generateForgePublisherConfig(forge5Config: any): IForgeResolvablePublis return publishers; } -/** - * Transforms v5 GitHub publisher config to v6 syntax. - */ -function transformGitHubPublisherConfig(config: any) { - const { name, owner, options, ...gitHubConfig } = config; - gitHubConfig.repository = { name, owner }; - if (options) { - gitHubConfig.octokitOptions = options; - } - - return gitHubConfig; -} - /** * Upgrades Forge v5 config to v6. */ @@ -131,7 +133,9 @@ export default function upgradeForgeConfig(forge5Config: any): ForgeConfig { export function updateUpgradedForgeDevDeps(packageJSON: any, devDeps: string[]): string[] { const forgeConfig = packageJSON.config.forge; devDeps = devDeps.filter(dep => !dep.startsWith('@electron-forge/maker-')); + // eslint-disable-next-line max-len devDeps = devDeps.concat(forgeConfig.makers.map((maker: IForgeResolvableMaker) => siblingDep(path.basename(maker.name)))); + // eslint-disable-next-line max-len devDeps = devDeps.concat(forgeConfig.publishers.map((publisher: IForgeResolvablePublisher) => siblingDep(path.basename(publisher.name)))); if (Object.keys(packageJSON.devDependencies).find((dep: string) => dep === 'electron-prebuilt-compile')) { diff --git a/packages/api/core/src/util/yarn-or-npm.ts b/packages/api/core/src/util/yarn-or-npm.ts index bcf2aa92a2..e7b379a776 100644 --- a/packages/api/core/src/util/yarn-or-npm.ts +++ b/packages/api/core/src/util/yarn-or-npm.ts @@ -10,6 +10,7 @@ const safeYarnOrNpm = () => { return process.env.NODE_INSTALLER; default: if (process.env.NODE_INSTALLER) { + // eslint-disable-next-line no-console console.warn(`${logSymbols.warning} Unknown NODE_INSTALLER, using detected installer ${system}`.yellow); } return system; @@ -18,6 +19,7 @@ const safeYarnOrNpm = () => { export default safeYarnOrNpm; +// eslint-disable-next-line max-len export const yarnOrNpmSpawn = (args?: string[], opts?: any) => spawnPromise(safeYarnOrNpm(), args, opts); export const hasYarn = () => safeYarnOrNpm() === 'yarn'; diff --git a/packages/api/core/test/fast/electron-version_spec.ts b/packages/api/core/test/fast/electron-version_spec.ts index 7f67b0202a..87ebd56708 100644 --- a/packages/api/core/test/fast/electron-version_spec.ts +++ b/packages/api/core/test/fast/electron-version_spec.ts @@ -1,7 +1,7 @@ import { expect } from 'chai'; import path from 'path'; import { getElectronVersion, updateElectronDependency } from '../../src/util/electron-version'; -import { deps, devDeps, exactDevDeps } from '../../src/api/init-scripts/init-npm'; +import { devDeps, exactDevDeps } from '../../src/api/init-scripts/init-npm'; describe('updateElectronDependency', () => { it('adds an Electron dep if one does not already exist', () => { @@ -31,13 +31,9 @@ describe('updateElectronDependency', () => { }); describe('getElectronVersion', () => { - it('fails without devDependencies', () => { - return expect(getElectronVersion('', {})).to.eventually.be.rejectedWith('does not have any devDependencies'); - }); + it('fails without devDependencies', () => expect(getElectronVersion('', {})).to.eventually.be.rejectedWith('does not have any devDependencies')); - it('fails without electron devDependencies', () => { - return expect(getElectronVersion('', { devDependencies: {} })).to.eventually.be.rejectedWith('Electron packages in devDependencies'); - }); + it('fails without electron devDependencies', () => expect(getElectronVersion('', { devDependencies: {} })).to.eventually.be.rejectedWith('Electron packages in devDependencies')); it('fails with a non-exact version and no electron installed', () => { const fixtureDir = path.resolve(__dirname, '..', 'fixture', 'dummy_app'); diff --git a/packages/api/core/test/fast/forge-config_spec.ts b/packages/api/core/test/fast/forge-config_spec.ts index 359cbfe7eb..3e8da3d656 100644 --- a/packages/api/core/test/fast/forge-config_spec.ts +++ b/packages/api/core/test/fast/forge-config_spec.ts @@ -43,7 +43,9 @@ describe('forge-config', () => { expect(() => { conf.packagerConfig.baz = 'bar'; }).to.not.throw(); process.env.ELECTRON_FORGE_S3_SECRET_ACCESS_KEY = 'SecretyThing'; - const descriptor = { writable: true, enumerable: true, configurable: true, value: 'SecretyThing' }; + const descriptor = { + writable: true, enumerable: true, configurable: true, value: 'SecretyThing', + }; expect(Object.getOwnPropertyDescriptor(conf.s3, 'secretAccessKey')).to.be.deep.equal(descriptor); expect(() => { conf.s3.secretAccessKey = 'bar'; }).to.not.throw(); expect(conf.s3.secretAccessKey).to.equal('bar'); diff --git a/packages/api/core/test/fast/publish_spec.ts b/packages/api/core/test/fast/publish_spec.ts index 3ea0e88ddc..44428db5bd 100644 --- a/packages/api/core/test/fast/publish_spec.ts +++ b/packages/api/core/test/fast/publish_spec.ts @@ -3,7 +3,7 @@ import fs from 'fs-extra'; import os from 'os'; import path from 'path'; import proxyquire from 'proxyquire'; -import sinon, { SinonStub, SinonSpy } from 'sinon'; +import sinon, { SinonStub } from 'sinon'; import { PublishOptions } from '../../src/api'; @@ -26,7 +26,9 @@ describe('publish', () => { publishers = ['@electron-forge/publisher-test']; const fakePublisher = (stub: SinonStub, name: string = 'default') => class X { private publish: SinonStub; + public name = name; + constructor(public providedConfig: any) { fooPublisher = this; this.publish = stub; @@ -178,15 +180,21 @@ describe('publish', () => { const fakeMake = (platform: string) => { const ret = [ - { artifacts: [ - path.resolve(dir, `out/make/artifact1-${platform}`), - path.resolve(dir, `out/make/artifact2-${platform}`), - ] }, { artifacts: [ - path.resolve(dir, `out/make/artifact3-${platform}`), - ] }, - { artifacts: [ - path.resolve(dir, `out/make/artifact4-${platform}`), - ] }, + { + artifacts: [ + path.resolve(dir, `out/make/artifact1-${platform}`), + path.resolve(dir, `out/make/artifact2-${platform}`), + ], + }, { + artifacts: [ + path.resolve(dir, `out/make/artifact3-${platform}`), + ], + }, + { + artifacts: [ + path.resolve(dir, `out/make/artifact4-${platform}`), + ], + }, ]; const state = { platform, diff --git a/packages/api/core/test/fast/start_spec.ts b/packages/api/core/test/fast/start_spec.ts index 9c13ef6749..89f6a83676 100644 --- a/packages/api/core/test/fast/start_spec.ts +++ b/packages/api/core/test/fast/start_spec.ts @@ -12,7 +12,7 @@ describe('start', () => { let resolveStub: SinonStub; let spawnStub: SinonStub; let shouldOverride: any; - let processOn: SinonStub; + let processOn: SinonStub<[string | symbol, (...args: any[]) => void]>; beforeEach(() => { resolveStub = sinon.stub(); diff --git a/packages/api/core/test/fast/upgrade-forge-config_spec.ts b/packages/api/core/test/fast/upgrade-forge-config_spec.ts index 55c766437b..2fc5ed840f 100644 --- a/packages/api/core/test/fast/upgrade-forge-config_spec.ts +++ b/packages/api/core/test/fast/upgrade-forge-config_spec.ts @@ -1,7 +1,6 @@ import _merge from 'lodash.merge'; import { IForgeResolvableMaker, IForgeResolvablePublisher } from '@electron-forge/shared-types'; import { expect } from 'chai'; -import path from 'path'; import upgradeForgeConfig, { updateUpgradedForgeDevDeps } from '../../src/util/upgrade-forge-config'; diff --git a/packages/api/core/test/fixture/custom_init/index.js b/packages/api/core/test/fixture/custom_init/index.js index 19ef99c50a..89d2a174a2 100644 --- a/packages/api/core/test/fixture/custom_init/index.js +++ b/packages/api/core/test/fixture/custom_init/index.js @@ -4,5 +4,5 @@ module.exports = { dependencies: ['react'], devDependencies: ['react-dom'], templateDirectory: path.resolve(__dirname, './tmpl'), - postCopy: (initDir, ora, lintStyle) => {}, // eslint-disable-line + postCopy: (initDir, ora, lintStyle) => {}, }; diff --git a/packages/api/core/test/slow/api_spec_slow.ts b/packages/api/core/test/slow/api_spec_slow.ts index ad5a5854fe..3442c410c2 100644 --- a/packages/api/core/test/slow/api_spec_slow.ts +++ b/packages/api/core/test/slow/api_spec_slow.ts @@ -316,7 +316,11 @@ describe(`electron-forge API (with installer=${nodeInstaller})`, () => { const goodMakers = getMakers(true); const badMakers = getMakers(false); - const testMakeTarget = function testMakeTarget(target: () => { name: string }, shouldPass: boolean, ...options: any[]) { + const testMakeTarget = function testMakeTarget( + target: () => { name: string }, + shouldPass: boolean, + ...options: any[] + ) { describe(`make (with target=${path.basename(target().name)})`, async () => { before(async () => { const packageJSON = await readRawPackageJson(dir); @@ -326,6 +330,7 @@ describe(`electron-forge API (with installer=${nodeInstaller})`, () => { for (const optionsFetcher of options) { if (shouldPass) { + // eslint-disable-next-line no-loop-func it(`successfully makes for config: ${JSON.stringify(optionsFetcher())}`, async () => { const outputs = await forge.make(optionsFetcher()); for (const outputResult of outputs) { diff --git a/packages/api/core/test/slow/install-dependencies_spec_slow.ts b/packages/api/core/test/slow/install-dependencies_spec_slow.ts index 7d1d547709..5ed68db5ca 100644 --- a/packages/api/core/test/slow/install-dependencies_spec_slow.ts +++ b/packages/api/core/test/slow/install-dependencies_spec_slow.ts @@ -18,6 +18,6 @@ if (!(process.platform === 'linux' && process.env.CI)) { expect(packageJSON.version).to.not.equal('2.0.0'); }); - after(async () => await fs.remove(installDir)); + after(async () => fs.remove(installDir)); }); } diff --git a/packages/installer/base/src/Installer.ts b/packages/installer/base/src/Installer.ts index 7bab2ef48d..b1dfb4768e 100644 --- a/packages/installer/base/src/Installer.ts +++ b/packages/installer/base/src/Installer.ts @@ -7,9 +7,8 @@ export interface InstallerOptions { export default abstract class Installer { abstract name: string; - /* tslint:disable variable-name */ + __isElectronForgeInstaller!: boolean; - /* tslint:enable variable-name */ constructor() { Object.defineProperty(this, '__isElectronForgeInstaller', { @@ -23,7 +22,7 @@ export default abstract class Installer { * Installers must implement this method and install the given filePath * when called. This method must return a promise */ - async install(opts: InstallerOptions) { + async install(_opts: InstallerOptions) { throw new Error(`Installer ${this.name} did not implement the install method`); } } diff --git a/packages/installer/darwin/src/InstallerDarwin.ts b/packages/installer/darwin/src/InstallerDarwin.ts index f88e78f585..bbf31ed5d3 100644 --- a/packages/installer/darwin/src/InstallerDarwin.ts +++ b/packages/installer/darwin/src/InstallerDarwin.ts @@ -10,7 +10,12 @@ import { exec } from 'child_process'; export { InstallerOptions }; export default abstract class InstallerDarwin extends InstallerBase { - async moveApp(appPath: string, targetApplicationPath: string, spinner: OraImpl, copyInstead = false) { + async moveApp( + appPath: string, + targetApplicationPath: string, + spinner: OraImpl, + copyInstead = false, + ) { let writeAccess = true; try { await fs.access('/Applications', fs.constants.W_OK); @@ -20,7 +25,7 @@ export default abstract class InstallerDarwin extends InstallerBase { if (await fs.pathExists(targetApplicationPath)) { spinner.fail(); - throw `The application "${path.basename(targetApplicationPath)}" appears to already exist in /Applications.`; + throw new Error(`The application "${path.basename(targetApplicationPath)}" appears to already exist in /Applications.`); } const moveCommand = `${copyInstead ? 'cp -r' : 'mv'} "${appPath}" "${targetApplicationPath}"`; diff --git a/packages/installer/dmg/src/InstallerDMG.ts b/packages/installer/dmg/src/InstallerDMG.ts index de3a3b5833..28451ae0c1 100644 --- a/packages/installer/dmg/src/InstallerDMG.ts +++ b/packages/installer/dmg/src/InstallerDMG.ts @@ -24,7 +24,7 @@ export default class InstallerDMG extends InstallerDarwin { const volumePath = path.resolve('/Volumes', targetMount.mountPath); const appName = (await fs.readdir(volumePath)).find(file => file.endsWith('.app')); if (!appName) { - throw 'Failed to find .app file in DMG'; + throw new Error('Failed to find .app file in DMG'); } const appPath = path.resolve(volumePath, appName); const targetApplicationPath = `/Applications/${path.basename(appPath)}`; diff --git a/packages/installer/linux/src/InstallerLinux.ts b/packages/installer/linux/src/InstallerLinux.ts index 23f0e342e0..6cefa06143 100644 --- a/packages/installer/linux/src/InstallerLinux.ts +++ b/packages/installer/linux/src/InstallerLinux.ts @@ -15,10 +15,9 @@ export default abstract class InstallerLinux extends InstallerBase { } } - sudo = (type: string, program: string, args: string) => - this.which( - type, - program, - () => pify(sudoPrompt.exec)(`${program} ${args}`, { name: 'Electron Forge' }), - ) + sudo = (type: string, program: string, args: string) => this.which( + type, + program, + () => pify(sudoPrompt.exec)(`${program} ${args}`, { name: 'Electron Forge' }), + ) } diff --git a/packages/maker/appx/src/Config.ts b/packages/maker/appx/src/Config.ts index ed2cb20c0b..54a2251bf5 100644 --- a/packages/maker/appx/src/Config.ts +++ b/packages/maker/appx/src/Config.ts @@ -1,4 +1,5 @@ // TODO: Upstream this to electron-windows-store +// eslint-disable-next-line import/prefer-default-export export interface MakerAppXConfig { containerVirtualization?: boolean; flatten?: boolean; diff --git a/packages/maker/appx/src/MakerAppX.ts b/packages/maker/appx/src/MakerAppX.ts index d1b4df934d..dfd32c03db 100644 --- a/packages/maker/appx/src/MakerAppX.ts +++ b/packages/maker/appx/src/MakerAppX.ts @@ -29,7 +29,7 @@ async function findSdkTool(exe: string) { } const topDir = path.dirname(testPath); for (const subVersion of await fs.readdir(topDir)) { - if (!(await fs.stat(path.resolve(topDir, subVersion))).isDirectory()) continue; // eslint-disable-line no-continue + if (!(await fs.stat(path.resolve(topDir, subVersion))).isDirectory()) continue; // eslint-disable-line max-len, no-continue if (subVersion.substr(0, 2) !== '10') continue; // eslint-disable-line no-continue testExe = path.resolve(topDir, subVersion, 'x64', 'makecert.exe'); @@ -45,7 +45,7 @@ async function findSdkTool(exe: string) { } if (!sdkTool || !await fs.pathExists(sdkTool)) { - throw `Can't find ${exe} in PATH. You probably need to install the Windows SDK.`; + throw new Error(`Can't find ${exe} in PATH. You probably need to install the Windows SDK.`); } return sdkTool; @@ -58,7 +58,9 @@ export interface CreateDefaultCertOpts { install?: boolean; } -export async function createDefaultCertificate(publisherName: string, { certFilePath, certFileName, install, program }: CreateDefaultCertOpts) { +export async function createDefaultCertificate(publisherName: string, { + certFilePath, certFileName, install, program, +}: CreateDefaultCertOpts) { const makeCertOptions = { publisherName, certFilePath: certFilePath || process.cwd(), @@ -71,11 +73,12 @@ export async function createDefaultCertificate(publisherName: string, { certFile throw new Error(`Received invalid publisher name: '${publisherName}' did not conform to X.500 distinguished name syntax for MakeCert.`); } - return await makeCert(makeCertOptions); + return makeCert(makeCertOptions); } export default class MakerAppX extends MakerBase { name = 'appx'; + defaultPlatforms: ForgePlatform[] = ['win32']; isSupportedOnCurrentPlatform() { @@ -108,11 +111,16 @@ export default class MakerAppX extends MakerBase { }); if (!opts.publisher) { - throw 'Please set config.forge.windowsStoreConfig.publisher or author.name in package.json for the appx target'; + throw new Error( + 'Please set config.forge.windowsStoreConfig.publisher or author.name in package.json for the appx target', + ); } if (!opts.devCert) { - opts.devCert = await createDefaultCertificate(opts.publisher, { certFilePath: outPath, program: opts }); + opts.devCert = await createDefaultCertificate( + opts.publisher, + { certFilePath: outPath, program: opts }, + ); } if (opts.packageVersion.match(/-/)) { @@ -120,9 +128,11 @@ export default class MakerAppX extends MakerBase { const noBeta = opts.packageVersion.replace(/-.*/, ''); opts.packageVersion = `${noBeta}.0`; } else { - throw 'Windows Store version numbers don\'t support semver beta tags. To' + - 'automatically fix this, set makeVersionWinStoreCompatible to true or ' + - 'explicitly set packageVersion to a version of the format X.Y.Z.A'; + throw new Error( + "Windows Store version numbers don't support semver beta tags. To " + + 'automatically fix this, set makeVersionWinStoreCompatible to true or ' + + 'explicitly set packageVersion to a version of the format X.Y.Z.A', + ); } } diff --git a/packages/maker/base/src/Maker.ts b/packages/maker/base/src/Maker.ts index 250917b371..770aa92066 100644 --- a/packages/maker/base/src/Maker.ts +++ b/packages/maker/base/src/Maker.ts @@ -1,6 +1,6 @@ -/* eslint-disable no-unused-vars */ - -import { ForgeArch, ForgeConfig, ForgePlatform, IForgeMaker } from '@electron-forge/shared-types'; +import { + ForgeArch, ForgeConfig, ForgePlatform, IForgeMaker, +} from '@electron-forge/shared-types'; import fs from 'fs-extra'; import path from 'path'; @@ -38,13 +38,17 @@ export interface MakerOptions { export default abstract class Maker implements IForgeMaker { public config!: C; + public abstract name: string; + public abstract defaultPlatforms: ForgePlatform[]; - /* tslint:disable variable-name */ + __isElectronForgeMaker!: true; - /* tslint:enable variable-name */ - constructor(private configFetcher: (C | ((arch: ForgeArch) => C)) = {} as C, protected providedPlatforms?: ForgePlatform[]) { + constructor( + private configFetcher: (C | ((arch: ForgeArch) => C)) = {} as C, + protected providedPlatforms?: ForgePlatform[], + ) { Object.defineProperty(this, '__isElectronForgeMaker', { value: true, enumerable: false, @@ -87,7 +91,7 @@ export default abstract class Maker implements IForgeMaker { * Makers must implement this method and return an array of absolute paths * to the artifacts generated by your maker */ - async make(opts: MakerOptions): Promise { + async make(opts: MakerOptions): Promise { // eslint-disable-line max-len, @typescript-eslint/no-unused-vars if (this.make === Maker.prototype.make) { throw new Error(`Maker ${this.name} did not implement the make method`); } @@ -129,6 +133,7 @@ export default abstract class Maker implements IForgeMaker { */ isInstalled(module: string): boolean { try { + // eslint-disable-next-line global-require, import/no-dynamic-require require(module); return true; } catch (e) { diff --git a/packages/maker/base/test/ensure-output_spec.ts b/packages/maker/base/test/ensure-output_spec.ts index 7b86b87222..4522739f45 100644 --- a/packages/maker/base/test/ensure-output_spec.ts +++ b/packages/maker/base/test/ensure-output_spec.ts @@ -7,6 +7,7 @@ import MakerBase from '../src/Maker'; class MakerImpl extends MakerBase<{}> { name = 'test'; + defaultPlatforms = []; } diff --git a/packages/maker/deb/src/Config.ts b/packages/maker/deb/src/Config.ts index d20bf85744..f51c85e85a 100644 --- a/packages/maker/deb/src/Config.ts +++ b/packages/maker/deb/src/Config.ts @@ -13,15 +13,18 @@ export interface MakerDebConfigOptions { */ productName?: string; /** - * Generic name of the application (e.g. Text Editor), used in the GenericName field of the desktop specification. + * Generic name of the application (e.g. Text Editor), used in the GenericName field of the + * desktop specification. */ genericName?: string; /** - * Short description of the application, used in the Description field of the control specification. + * Short description of the application, used in the Description field of the control + * specification. */ description?: string; /** - * Long description of the application, used in the Description field of the control specification. + * Long description of the application, used in the Description field of the control + * specification. */ productDescription?: string; /** @@ -37,7 +40,12 @@ export interface MakerDebConfigOptions { * * Possible sections. Generated on https://packages.debian.org/unstable/ with: * - * $$('#content dt a').map(n => {const ss = n.href.split('/'); return `'${ss[ss.length - 2]}'`; }).sort().join(' | ') + * ```javascript + * $$('#content dt a').map(n => { + * const ss = n.href.split('/'); + * return `'${ss[ss.length - 2]}'`; + * }).sort().join(' | ') + * ``` */ section?: 'admin' | 'cli-mono' | 'comm' | 'database' | 'debian-installer' | 'debug' | 'devel' | 'doc' | 'editors' | 'education' | 'electronics' | 'embedded' | 'fonts' | 'games' | 'gnome' | 'gnu-r' | 'gnustep' | 'graphics' | 'hamradio' | 'haskell' | 'httpd' | 'interpreters' | 'introspection' | 'java' | 'javascript' | 'kde' | 'kernel' | 'libdevel' | 'libs' | 'lisp' | 'localization' | 'mail' | 'math' | 'metapackages' | 'misc' | 'net' | 'news' | 'ocaml' | 'oldlibs' | 'otherosfs' | 'perl' | 'php' | 'python' | 'ruby' | 'rust' | 'science' | 'shells' | 'sound' | 'tasks' | 'tex' | 'text' | 'utils' | 'vcs' | 'video' | 'virtual' | 'web' | 'x11' | 'xfce' | 'zope'; /** @@ -80,7 +88,8 @@ export interface MakerDebConfigOptions { */ homepage?: string; /** - * Relative path to the executable that will act as binary for the application, used in the Exec field of the desktop specification. + * Relative path to the executable that will act as binary for the application, used in the Exec + * field of the desktop specification. * * Defaults to options.name */ @@ -90,7 +99,8 @@ export interface MakerDebConfigOptions { */ icon?: string; /** - * Categories in which the application should be shown in a menu, used in the Categories field of the desktop specification. + * Categories in which the application should be shown in a menu, used in the Categories field + * of the desktop specification. * * Generated on https://specifications.freedesktop.org/menu-spec/latest/apa.html with: * @@ -98,7 +108,8 @@ export interface MakerDebConfigOptions { */ categories?: ('AudioVideo' | 'Audio' | 'Video' | 'Development' | 'Education' | 'Game' | 'Graphics' | 'Network' | 'Office' | 'Science' | 'Settings' | 'System' | 'Utility')[]; /** - * MIME types the application is able to open, used in the MimeType field of the desktop specification. + * MIME types the application is able to open, used in the MimeType field of the desktop + * specification. */ mimeType?: string[]; /** @@ -106,9 +117,11 @@ export interface MakerDebConfigOptions { */ lintianOverrides?: string[]; /** - * Path to package maintainer scripts with their corresponding name, used in the installation procedure: + * Path to package maintainer scripts with their corresponding name, used in the installation + * procedure. * - * Read More: https://www.debian.org/doc/debian-policy/#package-maintainer-scripts-and-installation-procedure + * Read More: + * https://www.debian.org/doc/debian-policy/#package-maintainer-scripts-and-installation-procedure */ scripts?: { preinst?: string; diff --git a/packages/maker/deb/src/MakerDeb.ts b/packages/maker/deb/src/MakerDeb.ts index 58082ea9ea..51b21c77cd 100644 --- a/packages/maker/deb/src/MakerDeb.ts +++ b/packages/maker/deb/src/MakerDeb.ts @@ -16,6 +16,7 @@ export function debianArch(nodeArch: ForgeArch) { export default class MakerDeb extends MakerBase { name = 'deb'; + defaultPlatforms: ForgePlatform[] = ['linux']; isSupportedOnCurrentPlatform() { @@ -28,6 +29,7 @@ export default class MakerDeb extends MakerBase { targetArch, packageJSON, }: MakerOptions) { + // eslint-disable-next-line global-require, import/no-unresolved const installer = require('electron-installer-debian'); const arch = debianArch(targetArch); diff --git a/packages/maker/deb/test/MakerDeb_spec.ts b/packages/maker/deb/test/MakerDeb_spec.ts index 8c686fdf67..78ef5a0476 100644 --- a/packages/maker/deb/test/MakerDeb_spec.ts +++ b/packages/maker/deb/test/MakerDeb_spec.ts @@ -5,11 +5,15 @@ import path from 'path'; import proxyquire from 'proxyquire'; import { stub, SinonStub } from 'sinon'; +import { ForgeArch } from '@electron-forge/shared-types'; import { MakerDebConfig } from '../src/Config'; import { debianArch } from '../src/MakerDeb'; -import { ForgeArch } from '@electron-forge/shared-types'; -class MakerImpl extends MakerBase { name = 'test'; defaultPlatforms = []; } +class MakerImpl extends MakerBase { + name = 'test'; + + defaultPlatforms = []; +} describe('MakerDeb', () => { let MakerDeb: typeof MakerImpl; @@ -35,7 +39,7 @@ describe('MakerDeb', () => { 'electron-installer-debian': eidStub, }).default; createMaker = () => { - maker = new MakerDeb(config, []); // eslint-disable-line + maker = new MakerDeb(config, []); maker.ensureFile = ensureFileStub; maker.prepareConfig(targetArch as any); }; @@ -43,7 +47,9 @@ describe('MakerDeb', () => { }); it('should pass through correct defaults', async () => { - await (maker.make as any)({ dir, makeDir, appName, targetArch, packageJSON }); + await (maker.make as any)({ + dir, makeDir, appName, targetArch, packageJSON, + }); const opts = eidStub.firstCall.args[0]; expect(opts).to.deep.equal({ arch: debianArch(process.arch as ForgeArch), @@ -65,7 +71,9 @@ describe('MakerDeb', () => { createMaker(); - await (maker.make as any)({ dir, makeDir, appName, targetArch, packageJSON }); + await (maker.make as any)({ + dir, makeDir, appName, targetArch, packageJSON, + }); const opts = eidStub.firstCall.args[0]; expect(opts).to.deep.equal({ arch: debianArch(process.arch as ForgeArch), @@ -80,9 +88,12 @@ describe('MakerDeb', () => { if (process.platform === 'linux') { it('should return the proper pre-release version in the outPath', async () => { + // eslint-disable-next-line import/no-unresolved (eidStub as any).transformVersion = require('electron-installer-debian').transformVersion; packageJSON.version = '1.2.3-beta.4'; - const outPath = await (maker.make as any)({ dir, makeDir, appName, targetArch, packageJSON }); + const outPath = await (maker.make as any)({ + dir, makeDir, appName, targetArch, packageJSON, + }); expect(outPath).to.match(/1\.2\.3~beta\.4/); }); } diff --git a/packages/maker/dmg/src/MakerDMG.ts b/packages/maker/dmg/src/MakerDMG.ts index 9e45ce001f..583a97ad2e 100644 --- a/packages/maker/dmg/src/MakerDMG.ts +++ b/packages/maker/dmg/src/MakerDMG.ts @@ -1,13 +1,14 @@ import MakerBase, { MakerOptions } from '@electron-forge/maker-base'; import { ForgePlatform } from '@electron-forge/shared-types'; -import { MakerDMGConfig } from './Config'; import fs from 'fs-extra'; import path from 'path'; +import { MakerDMGConfig } from './Config'; export default class MakerDMG extends MakerBase { name = 'dmg'; + defaultPlatforms: ForgePlatform[] = ['darwin', 'mas']; isSupportedOnCurrentPlatform() { @@ -20,6 +21,7 @@ export default class MakerDMG extends MakerBase { appName, packageJSON, }: MakerOptions) { + // eslint-disable-next-line global-require const electronDMG = require('electron-installer-dmg'); const outPath = path.resolve(makeDir, `${this.config.name || appName}.dmg`); diff --git a/packages/maker/dmg/test/MakerDMG_spec.ts b/packages/maker/dmg/test/MakerDMG_spec.ts index 44ea719d49..6eea6ef61e 100644 --- a/packages/maker/dmg/test/MakerDMG_spec.ts +++ b/packages/maker/dmg/test/MakerDMG_spec.ts @@ -7,7 +7,11 @@ import { stub, SinonStub } from 'sinon'; import { MakerDMGConfig } from '../src/Config'; -class MakerImpl extends MakerBase { name = 'test'; defaultPlatforms = []; } +class MakerImpl extends MakerBase { + name = 'test'; + + defaultPlatforms = []; +} describe('MakerDMG', () => { let MakerDMG: typeof MakerImpl; @@ -46,7 +50,9 @@ describe('MakerDMG', () => { }); it('should pass through correct defaults', async () => { - await (maker.make as any)({ dir, makeDir, appName, targetArch, packageJSON }); + await (maker.make as any)({ + dir, makeDir, appName, targetArch, packageJSON, + }); const opts = eidStub.firstCall.args[0]; expect(opts).to.deep.equal({ overwrite: true, @@ -57,20 +63,26 @@ describe('MakerDMG', () => { }); it('should attempt to rename the DMG file if no custom name is set', async () => { - await (maker.make as any)({ dir, makeDir, appName, targetArch, packageJSON }); + await (maker.make as any)({ + dir, makeDir, appName, targetArch, packageJSON, + }); expect(renameStub.callCount).to.equal(1); expect(renameStub.firstCall.args[1]).to.include('1.2.3'); }); it('should rename the DMG file to include the version if no custom name is set', async () => { - await (maker.make as any)({ dir, makeDir, appName, targetArch, packageJSON }); + await (maker.make as any)({ + dir, makeDir, appName, targetArch, packageJSON, + }); expect(renameStub.firstCall.args[1]).to.include('1.2.3'); }); it('should not attempt to rename the DMG file if a custom name is set', async () => { config.name = 'foobar'; createMaker(); - await (maker.make as any)({ dir, makeDir, appName, targetArch, packageJSON }); + await (maker.make as any)({ + dir, makeDir, appName, targetArch, packageJSON, + }); expect(renameStub.callCount).to.equal(0); }); }); diff --git a/packages/maker/flatpak/package.json b/packages/maker/flatpak/package.json index b4c5e85a33..36e5102330 100644 --- a/packages/maker/flatpak/package.json +++ b/packages/maker/flatpak/package.json @@ -9,7 +9,10 @@ "typings": "dist/MakerFlatpak.d.ts", "devDependencies": { "chai": "4.2.0", - "mocha": "^6.0.0" + "chai-as-promised": "^7.0.0", + "mocha": "^6.0.0", + "proxyquire": "^2.0.1", + "sinon": "^7.1.1" }, "engines": { "node": ">= 6.0" diff --git a/packages/maker/flatpak/src/Config.ts b/packages/maker/flatpak/src/Config.ts index be7f4eac58..922637b72e 100644 --- a/packages/maker/flatpak/src/Config.ts +++ b/packages/maker/flatpak/src/Config.ts @@ -10,7 +10,8 @@ export interface MakerFlatpakOptionsConfig { */ productName?: string; /** - * Generic name of the application (e.g. Text Editor), used in the GenericName field of the desktop specification. + * Generic name of the application (e.g. Text Editor), used in the GenericName field of the + * desktop specification. */ genericName?: string; /** @@ -24,7 +25,8 @@ export interface MakerFlatpakOptionsConfig { */ branch?: string; /** - * Base app to use when building the flatpak, used in the base field of a flatpak-builder manifest. + * Base app to use when building the flatpak, used in the base field of a + * flatpak-builder manifest. * * Default: io.atom.electron.BaseApp */ @@ -58,7 +60,8 @@ export interface MakerFlatpakOptionsConfig { */ sdk?: string; /** - * Arguments to use when call flatpak build-finish, use in the finish-args field of a flatpak-builder manifest. + * Arguments to use when call flatpak build-finish, use in the finish-args field of a + * flatpak-builder manifest. */ finishArgs?: string[]; /** @@ -80,7 +83,8 @@ export interface MakerFlatpakOptionsConfig { */ modules?: any[]; /** - * Relative path to the executable that will act as binary for the application, used in the Exec field of the desktop specification. + * Relative path to the executable that will act as binary for the application, used in the + * Exec field of the desktop specification. */ bin?: string; /** @@ -88,7 +92,8 @@ export interface MakerFlatpakOptionsConfig { */ icon?: string; /** - * Categories in which the application should be shown in a menu, used in the Categories field of the desktop specification. + * Categories in which the application should be shown in a menu, used in the Categories field + * of the desktop specification. * * Generated on https://specifications.freedesktop.org/menu-spec/latest/apa.html with: * @@ -96,7 +101,8 @@ export interface MakerFlatpakOptionsConfig { */ categories?: ('AudioVideo' | 'Audio' | 'Video' | 'Development' | 'Education' | 'Game' | 'Graphics' | 'Network' | 'Office' | 'Science' | 'Settings' | 'System' | 'Utility')[]; /** - * MIME types the application is able to open, used in the MimeType field of the desktop specification. + * MIME types the application is able to open, used in the MimeType field of the desktop + * specification. */ mimeType?: string[]; } diff --git a/packages/maker/flatpak/src/MakerFlatpak.ts b/packages/maker/flatpak/src/MakerFlatpak.ts index e8268c1345..b14d6e2c38 100644 --- a/packages/maker/flatpak/src/MakerFlatpak.ts +++ b/packages/maker/flatpak/src/MakerFlatpak.ts @@ -18,6 +18,7 @@ export function flatpakArch(nodeArch: ForgeArch) { export default class MakerFlatpak extends MakerBase { name = 'flatpak'; + defaultPlatforms: ForgePlatform[] = ['linux']; isSupportedOnCurrentPlatform() { @@ -29,6 +30,7 @@ export default class MakerFlatpak extends MakerBase { makeDir, targetArch, }: MakerOptions) { + // eslint-disable-next-line global-require, import/no-unresolved const installer = require('@malept/electron-installer-flatpak'); const arch = flatpakArch(targetArch); diff --git a/packages/maker/flatpak/test/MakerFlatpak_spec.ts b/packages/maker/flatpak/test/MakerFlatpak_spec.ts index 776b20318d..d1961115d5 100644 --- a/packages/maker/flatpak/test/MakerFlatpak_spec.ts +++ b/packages/maker/flatpak/test/MakerFlatpak_spec.ts @@ -1,19 +1,23 @@ import MakerBase from '@electron-forge/maker-base'; import { expect } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; +import 'chai-as-promised'; import path from 'path'; import proxyquire from 'proxyquire'; import { stub, SinonStub } from 'sinon'; +import { ForgeArch } from '@electron-forge/shared-types'; import { flatpakArch } from '../src/MakerFlatpak'; import { MakerFlatpakConfig } from '../src/Config'; -import { ForgeArch } from '@electron-forge/shared-types'; -class MakerImpl extends MakerBase { name = 'test'; defaultPlatforms = []; } +class MakerImpl extends MakerBase { + name = 'test'; + + defaultPlatforms = []; +} describe('MakerFlatpak', () => { - let flatpakModule: typeof MakerImpl; + let MakerFlatpak: typeof MakerImpl; let maker: MakerImpl; let eifStub: SinonStub; let ensureDirectoryStub: SinonStub; @@ -31,12 +35,12 @@ describe('MakerFlatpak', () => { eifStub = stub().resolves(); config = {}; - flatpakModule = proxyquire.noPreserveCache().noCallThru().load('../src/MakerFlatpak', { + MakerFlatpak = proxyquire.noPreserveCache().noCallThru().load('../src/MakerFlatpak', { 'fs-extra': { readdir: stub().returns(Promise.resolve([])) }, '@malept/electron-installer-flatpak': eifStub, }).default; createMaker = () => { - maker = new flatpakModule(config); // eslint-disable-line + maker = new MakerFlatpak(config); maker.ensureDirectory = ensureDirectoryStub; maker.prepareConfig(targetArch as any); }; @@ -44,7 +48,9 @@ describe('MakerFlatpak', () => { }); it('should pass through correct defaults', async () => { - await (maker.make as any)({ dir, makeDir, appName, targetArch, packageJSON }); + await (maker.make as any)({ + dir, makeDir, appName, targetArch, packageJSON, + }); const opts = eifStub.firstCall.args[0]; expect(opts).to.deep.equal({ arch: flatpakArch(process.arch as ForgeArch), @@ -62,7 +68,9 @@ describe('MakerFlatpak', () => { } as any; createMaker(); - await (maker.make as any)({ dir, makeDir, appName, targetArch, packageJSON }); + await (maker.make as any)({ + dir, makeDir, appName, targetArch, packageJSON, + }); const opts = eifStub.firstCall.args[0]; expect(opts).to.deep.equal({ arch: flatpakArch(process.arch as ForgeArch), diff --git a/packages/maker/pkg/src/Config.ts b/packages/maker/pkg/src/Config.ts index 5be106a50a..dc75eaae2e 100644 --- a/packages/maker/pkg/src/Config.ts +++ b/packages/maker/pkg/src/Config.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line import/prefer-default-export export interface MakerPKGConfig { /** * Name of certificate to use when signing. diff --git a/packages/maker/pkg/src/MakerPKG.ts b/packages/maker/pkg/src/MakerPKG.ts index 353447aafd..bee7e33a28 100644 --- a/packages/maker/pkg/src/MakerPKG.ts +++ b/packages/maker/pkg/src/MakerPKG.ts @@ -2,12 +2,13 @@ import MakerBase, { MakerOptions } from '@electron-forge/maker-base'; import { ForgePlatform } from '@electron-forge/shared-types'; import { flatAsync } from 'electron-osx-sign'; +import path from 'path'; import { MakerPKGConfig } from './Config'; -import path from 'path'; export default class MakerDMG extends MakerBase { name = 'pkg'; + defaultPlatforms: ForgePlatform[] = ['darwin', 'mas']; isSupportedOnCurrentPlatform() { @@ -22,7 +23,7 @@ export default class MakerDMG extends MakerBase { targetPlatform, }: MakerOptions) { if (!['darwin', 'mas'].includes(targetPlatform)) { - throw `The pkg maker only supports targetting "mas" and "darwin" builds. You provided "${targetPlatform}"`; + throw new Error(`The pkg maker only supports targetting "mas" and "darwin" builds. You provided "${targetPlatform}"`); } const outPath = path.resolve(makeDir, `${appName}-${packageJSON.version}.pkg`); diff --git a/packages/maker/pkg/test/MakerPKG_spec.ts b/packages/maker/pkg/test/MakerPKG_spec.ts index b884289076..20b2359c4c 100644 --- a/packages/maker/pkg/test/MakerPKG_spec.ts +++ b/packages/maker/pkg/test/MakerPKG_spec.ts @@ -7,7 +7,11 @@ import { stub, SinonStub } from 'sinon'; import { MakerPKGConfig } from '../src/Config'; -class MakerImpl extends MakerBase { name = 'test'; defaultPlatforms = []; } +class MakerImpl extends MakerBase { + name = 'test'; + + defaultPlatforms = []; +} describe('MakerPKG', () => { let MakerDMG: typeof MakerImpl; @@ -48,7 +52,9 @@ describe('MakerPKG', () => { }); it('should pass through correct defaults', async () => { - await (maker.make as any)({ packageJSON, dir, makeDir, appName, targetArch, targetPlatform: 'mas' }); + await (maker.make as any)({ + packageJSON, dir, makeDir, appName, targetArch, targetPlatform: 'mas', + }); const opts = eosStub.firstCall.args[0]; expect(opts).to.deep.equal({ app: path.resolve(`${dir}/My Test App.app`), @@ -58,7 +64,9 @@ describe('MakerPKG', () => { }); it('should throw an error on invalid platform', async () => { - await expect((maker.make as any)({ packageJSON, dir, makeDir, appName, targetArch, targetPlatform: 'win32' })) + await expect((maker.make as any)({ + packageJSON, dir, makeDir, appName, targetArch, targetPlatform: 'win32', + })) .to.eventually.be.rejectedWith('The pkg maker only supports targetting "mas" and "darwin" builds. You provided "win32"'); }); }); diff --git a/packages/maker/rpm/src/Config.ts b/packages/maker/rpm/src/Config.ts index fa585e912d..933ed04d67 100644 --- a/packages/maker/rpm/src/Config.ts +++ b/packages/maker/rpm/src/Config.ts @@ -9,7 +9,8 @@ export interface MakerRpmConfigOptions { */ productName?: string; /** - * Generic name of the application (e.g. Text Editor), used in the GenericName field of the desktop specification. + * Generic name of the application (e.g. Text Editor), used in the GenericName field of the + * desktop specification. */ genericName?: string; /** @@ -37,7 +38,8 @@ export interface MakerRpmConfigOptions { */ group?: string; /** - * Packages that are required when the program starts, used in the Requires field of the spec file. + * Packages that are required when the program starts, used in the Requires field of the + * spec file. */ requires?: string[]; /** @@ -49,13 +51,15 @@ export interface MakerRpmConfigOptions { */ compressionLevel?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; /** - * Relative path to the executable that will act as binary for the application, used in the Exec field of the desktop specification. + * Relative path to the executable that will act as binary for the application, used in the + * Exec field of the desktop specification. * * Defaults to options.name */ bin?: string; /** - * Command-line arguments to pass to the executable. Will be added to the Exec field of the desktop specification. + * Command-line arguments to pass to the executable. Will be added to the Exec field of the + * desktop specification. */ execArguments?: string[]; /** @@ -63,7 +67,8 @@ export interface MakerRpmConfigOptions { */ icon?: string; /** - * Categories in which the application should be shown in a menu, used in the Categories field of the desktop specification. + * Categories in which the application should be shown in a menu, used in the Categories field of + * the desktop specification. * * Generated on https://specifications.freedesktop.org/menu-spec/latest/apa.html with: * @@ -71,7 +76,8 @@ export interface MakerRpmConfigOptions { */ categories?: ('AudioVideo' | 'Audio' | 'Video' | 'Development' | 'Education' | 'Game' | 'Graphics' | 'Network' | 'Office' | 'Science' | 'Settings' | 'System' | 'Utility')[]; /** - * MIME types the application is able to open, used in the MimeType field of the desktop specification. + * MIME types the application is able to open, used in the MimeType field of the desktop + * specification. */ mimeType?: string[]; } diff --git a/packages/maker/rpm/src/MakerRpm.ts b/packages/maker/rpm/src/MakerRpm.ts index cb89f6c80a..eed11b1e6e 100644 --- a/packages/maker/rpm/src/MakerRpm.ts +++ b/packages/maker/rpm/src/MakerRpm.ts @@ -17,6 +17,7 @@ export function rpmArch(nodeArch: ForgeArch) { export default class MakerRpm extends MakerBase { name = 'rpm'; + defaultPlatforms: ForgePlatform[] = ['linux']; isSupportedOnCurrentPlatform() { @@ -29,6 +30,7 @@ export default class MakerRpm extends MakerBase { targetArch, packageJSON, }: MakerOptions) { + // eslint-disable-next-line global-require, import/no-unresolved const installer = require('electron-installer-redhat'); const arch = rpmArch(targetArch); diff --git a/packages/maker/rpm/test/MakerRpm_spec.ts b/packages/maker/rpm/test/MakerRpm_spec.ts index 67c90f802b..832b095f4c 100644 --- a/packages/maker/rpm/test/MakerRpm_spec.ts +++ b/packages/maker/rpm/test/MakerRpm_spec.ts @@ -5,14 +5,18 @@ import path from 'path'; import proxyquire from 'proxyquire'; import { stub, SinonStub } from 'sinon'; +import { ForgeArch } from '@electron-forge/shared-types'; import { MakerRpmConfig } from '../src/Config'; import { rpmArch } from '../src/MakerRpm'; -import { ForgeArch } from '@electron-forge/shared-types'; -class MakerImpl extends MakerBase { name = 'test'; defaultPlatforms = []; } +class MakerImpl extends MakerBase { + name = 'test'; + + defaultPlatforms = []; +} describe('MakerRpm', () => { - let rpmModule: typeof MakerImpl; + let MakerRpm: typeof MakerImpl; let eirStub: SinonStub; let ensureFileStub: SinonStub; let config: MakerRpmConfig; @@ -30,11 +34,11 @@ describe('MakerRpm', () => { eirStub = stub().resolves(); config = {}; - rpmModule = proxyquire.noPreserveCache().noCallThru().load('../src/MakerRpm', { + MakerRpm = proxyquire.noPreserveCache().noCallThru().load('../src/MakerRpm', { 'electron-installer-redhat': eirStub, }).default; createMaker = () => { - maker = new rpmModule(config); // eslint-disable-line + maker = new MakerRpm(config); maker.ensureFile = ensureFileStub; maker.prepareConfig(targetArch as any); }; @@ -42,7 +46,9 @@ describe('MakerRpm', () => { }); it('should pass through correct defaults', async () => { - await (maker.make as any)({ dir, makeDir, appName, targetArch, packageJSON }); + await (maker.make as any)({ + dir, makeDir, appName, targetArch, packageJSON, + }); const opts = eirStub.firstCall.args[0]; expect(opts).to.deep.equal({ arch: rpmArch(process.arch as ForgeArch), @@ -61,7 +67,9 @@ describe('MakerRpm', () => { } as any; createMaker(); - await (maker.make as any)({ dir, makeDir, appName, targetArch, packageJSON }); + await (maker.make as any)({ + dir, makeDir, appName, targetArch, packageJSON, + }); const opts = eirStub.firstCall.args[0]; expect(opts).to.deep.equal({ arch: rpmArch(process.arch as ForgeArch), diff --git a/packages/maker/snap/src/Config.ts b/packages/maker/snap/src/Config.ts index ff92b512b8..4e5b340721 100644 --- a/packages/maker/snap/src/Config.ts +++ b/packages/maker/snap/src/Config.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line import/prefer-default-export export interface MakerSnapConfig { /** * [Additional Snapcraft configuration](https://docs.snapcraft.io/build-snaps/syntax#app-name) for the Electron app. diff --git a/packages/maker/snap/src/MakerSnap.ts b/packages/maker/snap/src/MakerSnap.ts index 6cc6704288..b521bcb2e0 100644 --- a/packages/maker/snap/src/MakerSnap.ts +++ b/packages/maker/snap/src/MakerSnap.ts @@ -7,6 +7,7 @@ import { MakerSnapConfig } from './Config'; export default class MakerSnap extends MakerBase { name = 'snap'; + defaultPlatforms: ForgePlatform[] = ['linux']; isSupportedOnCurrentPlatform() { @@ -18,6 +19,7 @@ export default class MakerSnap extends MakerBase { makeDir, targetArch, }: MakerOptions) { + // eslint-disable-next-line global-require const installer = require('electron-installer-snap'); const outPath = path.resolve(makeDir, 'snap'); diff --git a/packages/maker/snap/test/MakerSnap_spec.ts b/packages/maker/snap/test/MakerSnap_spec.ts index 63f695ec80..8367aa310c 100644 --- a/packages/maker/snap/test/MakerSnap_spec.ts +++ b/packages/maker/snap/test/MakerSnap_spec.ts @@ -7,7 +7,11 @@ import { stub, SinonStub } from 'sinon'; import { MakerSnapConfig } from '../src/Config'; -class MakerImpl extends MakerBase { name = 'test'; defaultPlatforms = []; } +class MakerImpl extends MakerBase { + name = 'test'; + + defaultPlatforms = []; +} describe('MakerSnap', () => { let MakerSnapModule: typeof MakerImpl; @@ -32,7 +36,7 @@ describe('MakerSnap', () => { 'electron-installer-snap': eisStub, }).default; createMaker = () => { - maker = new MakerSnapModule(config); // eslint-disable-line + maker = new MakerSnapModule(config); maker.ensureDirectory = ensureDirectoryStub; maker.prepareConfig(targetArch as any); }; @@ -40,7 +44,9 @@ describe('MakerSnap', () => { }); it('should pass through correct defaults', async () => { - await (maker.make as any)({ dir, makeDir, appName, targetArch, packageJSON }); + await (maker.make as any)({ + dir, makeDir, appName, targetArch, packageJSON, + }); const opts = eisStub.firstCall.args[0]; expect(opts).to.deep.equal({ arch: process.arch, @@ -56,7 +62,9 @@ describe('MakerSnap', () => { } as any); createMaker(); - await (maker.make as any)({ dir, makeDir, appName, targetArch, packageJSON }); + await (maker.make as any)({ + dir, makeDir, appName, targetArch, packageJSON, + }); const opts = eisStub.firstCall.args[0]; expect(opts).to.deep.equal({ arch: process.arch, diff --git a/packages/maker/squirrel/src/Config.ts b/packages/maker/squirrel/src/Config.ts index e332477761..6eefdd0f1d 100644 --- a/packages/maker/squirrel/src/Config.ts +++ b/packages/maker/squirrel/src/Config.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line import/prefer-default-export export interface MakerSquirrelConfig { /** * The local path to a `.gif` file to display during install. @@ -24,7 +25,8 @@ export interface MakerSquirrelConfig { /** * The name of your app's main `.exe` file. * - * This uses the `name` field in your app's package.json file with an added `.exe` extension when unspecified. + * This uses the `name` field in your app's package.json file with an added `.exe` extension + * when unspecified. */ exe?: string; /** @@ -42,7 +44,8 @@ export interface MakerSquirrelConfig { /** * The title value for the nuget package metadata. * - * Defaults to the `productName` field and then the `name` field from your app's package.json file when unspecified. + * Defaults to the `productName` field and then the `name` field from your app's package.json + * file when unspecified. */ title?: string; /** @@ -66,7 +69,8 @@ export interface MakerSquirrelConfig { */ signWithParams?: string; /** - * A URL to an ICO file to use as the application icon (displayed in Control Panel > Programs and Features). + * A URL to an ICO file to use as the application icon (displayed in Control Panel > Programs + * and Features). * * Defaults to the Atom icon. */ diff --git a/packages/maker/squirrel/src/MakerSquirrel.ts b/packages/maker/squirrel/src/MakerSquirrel.ts index fabc98c813..f9a6e52d41 100644 --- a/packages/maker/squirrel/src/MakerSquirrel.ts +++ b/packages/maker/squirrel/src/MakerSquirrel.ts @@ -9,6 +9,7 @@ import { MakerSquirrelConfig } from './Config'; export default class MakerSquirrel extends MakerBase { name = 'squirrel'; + defaultPlatforms: ForgePlatform[] = ['win32']; isSupportedOnCurrentPlatform() { diff --git a/packages/maker/wix/package.json b/packages/maker/wix/package.json index d98133908a..4cfff554f7 100644 --- a/packages/maker/wix/package.json +++ b/packages/maker/wix/package.json @@ -17,6 +17,7 @@ "dependencies": { "@electron-forge/maker-base": "6.0.0-beta.34", "@electron-forge/shared-types": "6.0.0-beta.34", - "electron-wix-msi": "^2.1.1" + "electron-wix-msi": "^2.1.1", + "parse-author": "^2.0.0" } } diff --git a/packages/maker/wix/src/MakerWix.ts b/packages/maker/wix/src/MakerWix.ts index b90b74a4df..5634695ca1 100644 --- a/packages/maker/wix/src/MakerWix.ts +++ b/packages/maker/wix/src/MakerWix.ts @@ -3,14 +3,15 @@ import { ForgePlatform } from '@electron-forge/shared-types'; import path from 'path'; +import { MSICreator, MSICreatorOptions } from 'electron-wix-msi/lib/creator'; import getNameFromAuthor from './util/author-name'; -import { MSICreator, MSICreatorOptions } from 'electron-wix-msi/lib/creator'; import { MakerWixConfig } from './Config'; export default class MakerWix extends MakerBase { name = 'wix'; + defaultPlatforms: ForgePlatform[] = ['win32']; isSupportedOnCurrentPlatform() { diff --git a/packages/maker/zip/src/MakerZIP.ts b/packages/maker/zip/src/MakerZIP.ts index f6851f51ce..339c3f25ae 100644 --- a/packages/maker/zip/src/MakerZIP.ts +++ b/packages/maker/zip/src/MakerZIP.ts @@ -8,6 +8,7 @@ export type MakerZIPConfig = {}; export default class MakerZIP extends MakerBase { name = 'zip'; + defaultPlatforms: ForgePlatform[] = ['darwin', 'mas', 'win32', 'linux']; isSupportedOnCurrentPlatform() { @@ -21,6 +22,7 @@ export default class MakerZIP extends MakerBase { packageJSON, targetPlatform, }: MakerOptions) { + // eslint-disable-next-line global-require const { zip } = require('cross-zip'); const zipDir = ['darwin', 'mas'].includes(targetPlatform) ? path.resolve(dir, `${appName}.app`) : dir; diff --git a/packages/plugin/auto-unpack-natives/src/AutoUnpackNativesPlugin.ts b/packages/plugin/auto-unpack-natives/src/AutoUnpackNativesPlugin.ts index cbeee68d4f..c9ac57a821 100644 --- a/packages/plugin/auto-unpack-natives/src/AutoUnpackNativesPlugin.ts +++ b/packages/plugin/auto-unpack-natives/src/AutoUnpackNativesPlugin.ts @@ -18,7 +18,7 @@ export default class AutoUnpackNativesPlugin extends PluginBase implements IForgePlugin { public abstract name: string; - /* tslint:disable variable-name */ + __isElectronForgePlugin!: true; - /* tslint:enable variable-name */ constructor(public config: C) { Object.defineProperty(this, '__isElectronForgePlugin', { @@ -17,14 +18,14 @@ export default abstract class Plugin implements IForgePlugin { }); } - init(dir: string, config: ForgeConfig) { + init(_dir: string, _config: ForgeConfig) { } - getHook(hookName: string): ForgeHookFn | null { + getHook(_hookName: string): ForgeHookFn | null { return null; } - async startLogic(startOpts: StartOptions): Promise { + async startLogic(_startOpts: StartOptions): Promise { return false; } } diff --git a/packages/plugin/compile/src/CompilePlugin.ts b/packages/plugin/compile/src/CompilePlugin.ts index 8b019171cd..aed705159a 100644 --- a/packages/plugin/compile/src/CompilePlugin.ts +++ b/packages/plugin/compile/src/CompilePlugin.ts @@ -6,9 +6,10 @@ import { createCompileHook } from './lib/compile-hook'; export default class LocalElectronPlugin extends PluginBase { name = 'electron-compile'; + private dir!: string; - constructor(c: CompilePluginConfig) { + constructor(c: CompilePluginConfig) { super(c); this.init = this.init.bind(this); @@ -27,7 +28,7 @@ export default class LocalElectronPlugin extends PluginBase return null; } - async startLogic(opts: StartOptions) { + async startLogic(_opts: StartOptions) { return [process.execPath, path.resolve(this.dir, 'node_modules/electron-prebuilt-compile/lib/cli')]; } } diff --git a/packages/plugin/compile/src/Config.ts b/packages/plugin/compile/src/Config.ts index 4d8419bad3..88377389ec 100644 --- a/packages/plugin/compile/src/Config.ts +++ b/packages/plugin/compile/src/Config.ts @@ -1,2 +1,3 @@ +// eslint-disable-next-line import/prefer-default-export export interface CompilePluginConfig { } diff --git a/packages/plugin/compile/src/lib/compile-hook.ts b/packages/plugin/compile/src/lib/compile-hook.ts index 2adf667f95..be6e71c353 100644 --- a/packages/plugin/compile/src/lib/compile-hook.ts +++ b/packages/plugin/compile/src/lib/compile-hook.ts @@ -1,38 +1,40 @@ +/* eslint "no-console": "off" */ import { asyncOra } from '@electron-forge/async-ora'; import fs from 'fs-extra'; import path from 'path'; -export const createCompileHook = (originalDir: string) => - async (_: any, buildPath: string) => { - await asyncOra('Compiling Application', async () => { - const compileCLI = require(path.resolve(originalDir, 'node_modules/electron-compile/lib/cli.js')); - - async function compileAndShim(appDir: string) { - for (const entry of await fs.readdir(appDir)) { - if (!entry.match(/^(node_modules|bower_components)$/)) { - const fullPath = path.join(appDir, entry); - - if ((await fs.stat(fullPath)).isDirectory()) { - const log = console.log; - console.log = () => {}; - await compileCLI.main(appDir, [fullPath]); - console.log = log; - } +// eslint-disable-next-line import/prefer-default-export +export const createCompileHook = (originalDir: string) => async (_: any, buildPath: string) => { + await asyncOra('Compiling Application', async () => { + // eslint-disable-next-line import/no-dynamic-require, global-require + const compileCLI = require(path.resolve(originalDir, 'node_modules/electron-compile/lib/cli.js')); + + async function compileAndShim(appDir: string) { + for (const entry of await fs.readdir(appDir)) { + if (!entry.match(/^(node_modules|bower_components)$/)) { + const fullPath = path.join(appDir, entry); + + if ((await fs.stat(fullPath)).isDirectory()) { + const { log } = console; + console.log = () => {}; + await compileCLI.main(appDir, [fullPath]); + console.log = log; } } + } - const packageJSON = await fs.readJson(path.resolve(appDir, 'package.json')); + const packageJSON = await fs.readJson(path.resolve(appDir, 'package.json')); - const index = packageJSON.main || 'index.js'; - packageJSON.originalMain = index; - packageJSON.main = 'es6-shim.js'; + const index = packageJSON.main || 'index.js'; + packageJSON.originalMain = index; + packageJSON.main = 'es6-shim.js'; - await fs.writeFile(path.join(appDir, 'es6-shim.js'), - await fs.readFile(path.join(path.resolve(originalDir, 'node_modules/electron-compile/lib/es6-shim.js')), 'utf8')); + await fs.writeFile(path.join(appDir, 'es6-shim.js'), + await fs.readFile(path.join(path.resolve(originalDir, 'node_modules/electron-compile/lib/es6-shim.js')), 'utf8')); - await fs.writeJson(path.join(appDir, 'package.json'), packageJSON, { spaces: 2 }); - } + await fs.writeJson(path.join(appDir, 'package.json'), packageJSON, { spaces: 2 }); + } - await compileAndShim(buildPath); - }); - }; + await compileAndShim(buildPath); + }); +}; diff --git a/packages/plugin/local-electron/src/Config.ts b/packages/plugin/local-electron/src/Config.ts index 8a0b011684..d7a7de83e2 100644 --- a/packages/plugin/local-electron/src/Config.ts +++ b/packages/plugin/local-electron/src/Config.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line import/prefer-default-export export interface LocalElectronPluginConfig { /** * Whether or not the plugin is enabled. diff --git a/packages/plugin/local-electron/src/LocalElectronPlugin.ts b/packages/plugin/local-electron/src/LocalElectronPlugin.ts index 402b4146c3..9cb12a68d5 100644 --- a/packages/plugin/local-electron/src/LocalElectronPlugin.ts +++ b/packages/plugin/local-electron/src/LocalElectronPlugin.ts @@ -1,5 +1,4 @@ import PluginBase from '@electron-forge/plugin-base'; -import { spawn } from 'child_process'; import fs from 'fs-extra'; import { LocalElectronPluginConfig } from './Config'; @@ -31,17 +30,23 @@ export default class LocalElectronPlugin extends PluginBase { if ((this.config.electronPlatform || process.platform) !== platform) { - throw `Can not use local Electron version, required platform "${platform}" but local platform is "${this.config.electronPlatform || process.platform}"`; + throw new Error(`Can not use local Electron version, required platform "${platform}" but local platform is "${this.config.electronPlatform || process.platform}"`); } } private checkArch = (arch: string) => { if ((this.config.electronArch || process.arch) !== arch) { - throw `Can not use local Electron version, required arch "${arch}" but local arch is "${this.config.electronArch || process.arch}"`; + throw new Error(`Can not use local Electron version, required arch "${arch}" but local arch is "${this.config.electronArch || process.arch}"`); } } - private afterExtract = async (_: any, buildPath: string, __: any, platform: string, arch: string) => { + private afterExtract = async ( + _: any, + buildPath: string, + __: any, + platform: string, + arch: string, + ) => { if (!this.enabled) return; this.checkPlatform(platform); diff --git a/packages/plugin/local-electron/test/LocalElectronPlugin_spec.ts b/packages/plugin/local-electron/test/LocalElectronPlugin_spec.ts index 757e1cfbb8..ab17b792ef 100644 --- a/packages/plugin/local-electron/test/LocalElectronPlugin_spec.ts +++ b/packages/plugin/local-electron/test/LocalElectronPlugin_spec.ts @@ -65,9 +65,7 @@ describe('LocalElectronPlugin', () => { await fs.writeFile(path.resolve(tmpDir, 'touch'), 'hey'); }); - afterEach(() => { - return fs.remove(tmpDir); - }); + afterEach(() => fs.remove(tmpDir)); it('should return a function for packageAfterExtract', () => { expect(p.getHook('packageAfterExtract')).to.be.a('function'); diff --git a/packages/plugin/webpack/src/WebpackPlugin.ts b/packages/plugin/webpack/src/WebpackPlugin.ts index 5c425722d9..b13ef42817 100644 --- a/packages/plugin/webpack/src/WebpackPlugin.ts +++ b/packages/plugin/webpack/src/WebpackPlugin.ts @@ -1,3 +1,4 @@ +/* eslint "no-console": "off" */ import { asyncOra } from '@electron-forge/async-ora'; import PluginBase from '@electron-forge/plugin-base'; import { ForgeConfig } from '@electron-forge/shared-types'; @@ -7,14 +8,13 @@ import debug from 'debug'; import fs from 'fs-extra'; import merge from 'webpack-merge'; import path from 'path'; -import { spawnPromise } from 'spawn-rx'; import webpack, { Configuration } from 'webpack'; import webpackHotMiddleware from 'webpack-hot-middleware'; import webpackDevMiddleware from 'webpack-dev-middleware'; import express from 'express'; import http from 'http'; -import HtmlWebpackPlugin, { Config } from 'html-webpack-plugin'; +import HtmlWebpackPlugin from 'html-webpack-plugin'; import once from './util/once'; import { WebpackPluginConfig, WebpackPluginEntryPoint, WebpackPreloadEntryPoint } from './Config'; @@ -24,12 +24,19 @@ const DEFAULT_PORT = 3000; export default class WebpackPlugin extends PluginBase { name = 'webpack'; + private isProd = false; + private projectDir!: string; + private baseDir!: string; + private watchers: webpack.Compiler.Watching[] = []; + private servers: http.Server[] = []; + private loggers: Logger[] = []; + private port = DEFAULT_PORT; constructor(c: WebpackPluginConfig) { @@ -50,6 +57,7 @@ export default class WebpackPlugin extends PluginBase { } private resolveConfig = (config: Configuration | string) => { + // eslint-disable-next-line import/no-dynamic-require, global-require if (typeof config === 'string') return require(path.resolve(path.dirname(this.baseDir), config)) as Configuration; return config; } @@ -82,8 +90,8 @@ export default class WebpackPlugin extends PluginBase { this.baseDir = path.resolve(dir, '.webpack'); d('hooking process events'); - process.on('exit', code => this.exitHandler({ cleanup: true })); - process.on('SIGINT' as NodeJS.Signals, signal => this.exitHandler({ exit: true })); + process.on('exit', _code => this.exitHandler({ cleanup: true })); + process.on('SIGINT' as NodeJS.Signals, _signal => this.exitHandler({ exit: true })); } private loggedOutputUrl = false; @@ -113,8 +121,9 @@ export default class WebpackPlugin extends PluginBase { return this.resolveForgeConfig; case 'packageAfterCopy': return this.packageAfterCopy; + default: + return null; } - return null; } resolveForgeConfig = async (forgeConfig: ForgeConfig) => { @@ -122,15 +131,15 @@ export default class WebpackPlugin extends PluginBase { forgeConfig.packagerConfig = {}; } if (forgeConfig.packagerConfig.ignore) { - console.error('You have set packagerConfig.ignore, the electron forge webpack plugin normally sets this automatically.\n\ -\ -Your packaged app may be larger than expected if you dont ignore everything other than the `.webpack` folder'.red); + console.error(`You have set packagerConfig.ignore, the electron forge webpack plugin normally sets this automatically. + +Your packaged app may be larger than expected if you dont ignore everything other than the '.webpack' folder`.red); return forgeConfig; } forgeConfig.packagerConfig.ignore = (file: string) => { if (!file) return false; - return !/^[\/\\]\.webpack($|[\/\\]).*$/.test(file); + return !/^[/\\]\.webpack($|[/\\]).*$/.test(file); }; return forgeConfig; } @@ -154,9 +163,10 @@ Your packaged app may be larger than expected if you dont ignore everything othe await fs.mkdirp(path.resolve(buildPath, 'node_modules')); } + // eslint-disable-next-line max-len rendererEntryPoint = (entryPoint: WebpackPluginEntryPoint, inRendererDir: boolean, basename: string): string => { if (this.isProd) { - return `\`file://\$\{require('path').resolve(__dirname, '..', '${inRendererDir ? 'renderer' : '.'}', '${entryPoint.name}', '${basename}')\}\``; + return `\`file://$\{require('path').resolve(__dirname, '..', '${inRendererDir ? 'renderer' : '.'}', '${entryPoint.name}', '${basename}')}\``; } const baseUrl = `http://localhost:${this.port}/${entryPoint.name}`; if (basename !== 'index.html') { @@ -237,7 +247,10 @@ Your packaged app may be larger than expected if you dont ignore everything othe }, mainConfig || {}); } - getPreloadRendererConfig = async (parentPoint: WebpackPluginEntryPoint, entryPoint: WebpackPreloadEntryPoint) => { + getPreloadRendererConfig = async ( + parentPoint: WebpackPluginEntryPoint, + entryPoint: WebpackPreloadEntryPoint, + ) => { const rendererConfig = this.resolveConfig(this.config.renderer.config); const prefixedEntries = entryPoint.prefixedEntries || []; @@ -266,7 +279,7 @@ Your packaged app may be larger than expected if you dont ignore everything othe const prefixedEntries = entryPoint.prefixedEntries || []; entry[entryPoint.name] = prefixedEntries .concat([entryPoint.js]) - .concat(this.isProd || !Boolean(entryPoint.html) ? [] : ['webpack-hot-middleware/client']); + .concat(this.isProd || !entryPoint.html ? [] : ['webpack-hot-middleware/client']); } const defines = this.getDefines(false); @@ -284,14 +297,14 @@ Your packaged app may be larger than expected if you dont ignore everything othe __dirname: false, __filename: false, }, - plugins: entryPoints.filter(entryPoint => Boolean(entryPoint.html)).map(entryPoint => - new HtmlWebpackPlugin({ + plugins: entryPoints.filter(entryPoint => Boolean(entryPoint.html)) + .map(entryPoint => new HtmlWebpackPlugin({ title: entryPoint.name, template: entryPoint.html, filename: `${entryPoint.name}/index.html`, chunks: [entryPoint.name].concat(entryPoint.additionalChunks || []), - }), - ).concat([new webpack.DefinePlugin(defines)]).concat(this.isProd ? [] : [new webpack.HotModuleReplacementPlugin()]), + })).concat([new webpack.DefinePlugin(defines)]) + .concat(this.isProd ? [] : [new webpack.HotModuleReplacementPlugin()]), }, rendererConfig); } @@ -316,7 +329,7 @@ Your packaged app may be larger than expected if you dont ignore everything othe return onceReject(new Error(`Compilation errors in the main process: ${stats.toString()}`)); } - onceResolve(); + return onceResolve(); }; if (watch) { this.watchers.push(compiler.watch({}, cb)); @@ -327,17 +340,18 @@ Your packaged app may be larger than expected if you dont ignore everything othe }); } - compileRenderers = async (watch = false) => { + compileRenderers = async (watch = false) => { // eslint-disable-line @typescript-eslint/no-unused-vars, max-len await asyncOra('Compiling Renderer Template', async () => { await new Promise(async (resolve, reject) => { - webpack(await this.getRendererConfig(this.config.renderer.entryPoints)).run((err, stats) => { - if (err) return reject(err); - if (!watch && stats.hasErrors()) { - return reject(new Error(`Compilation errors in the renderer: ${stats.toString()}`)); - } - - resolve(); - }); + webpack(await this.getRendererConfig(this.config.renderer.entryPoints)) + .run((err, stats) => { + if (err) return reject(err); + if (!watch && stats.hasErrors()) { + return reject(new Error(`Compilation errors in the renderer: ${stats.toString()}`)); + } + + return resolve(); + }); }); }); @@ -345,10 +359,11 @@ Your packaged app may be larger than expected if you dont ignore everything othe if (entryPoint.preload) { await asyncOra(`Compiling Renderer Preload: ${entryPoint.name}`, async () => { await new Promise(async (resolve, reject) => { - webpack(await this.getPreloadRendererConfig(entryPoint, entryPoint.preload!)).run((err, stats) => { - if (err) return reject(err); - resolve(); - }); + webpack(await this.getPreloadRendererConfig(entryPoint, entryPoint.preload!)) + .run((err) => { + if (err) return reject(err); + return resolve(); + }); }); }); } @@ -390,9 +405,12 @@ Your packaged app may be larger than expected if you dont ignore everything othe })); if (err) return onceReject(err); - onceResolve(); + return onceResolve(); }; - this.watchers.push(webpack(await this.getPreloadRendererConfig(entryPoint, entryPoint.preload!)).watch({}, cb)); + this.watchers.push(webpack(await this.getPreloadRendererConfig( + entryPoint, + entryPoint.preload!, + )).watch({}, cb)); }); } } diff --git a/packages/plugin/webpack/src/util/once.ts b/packages/plugin/webpack/src/util/once.ts index e47bf63f65..737cbb8ccc 100644 --- a/packages/plugin/webpack/src/util/once.ts +++ b/packages/plugin/webpack/src/util/once.ts @@ -1,15 +1,14 @@ +/* eslint "arrow-parens": "off" */ export default (fn1: A, fn2: B): [A, B] => { let once = true; let val: any; - const make = (fn: T): T => { - return ((...args: any[]) => { - if (once) { - val = (fn as any)(...args); - once = false; - } - return val; - }) as any as T; - }; + const make = (fn: T): T => ((...args: any[]) => { + if (once) { + val = (fn as any)(...args); + once = false; + } + return val; + }) as any as T; return [ make(fn1), make(fn2), diff --git a/packages/publisher/base/src/Publisher.ts b/packages/publisher/base/src/Publisher.ts index 43637c4c00..ec91bff91b 100644 --- a/packages/publisher/base/src/Publisher.ts +++ b/packages/publisher/base/src/Publisher.ts @@ -1,6 +1,7 @@ -import { ForgePlatform, ForgeConfig, ForgeMakeResult, IForgePublisher } from '@electron-forge/shared-types'; - -/* eslint-disable no-unused-vars */ +// eslint-disable-next-line import/no-extraneous-dependencies +import { + ForgePlatform, ForgeConfig, ForgeMakeResult, IForgePublisher, +} from '@electron-forge/shared-types'; export interface PublisherOptions { /** @@ -21,10 +22,10 @@ export interface PublisherOptions { export default abstract class Publisher implements IForgePublisher { public abstract name: string; + public defaultPlatforms?: ForgePlatform[]; - /* tslint:disable variable-name */ + __isElectronForgePublisher!: true; - /* tslint:enable variable-name */ constructor(public config: C, protected providedPlatforms?: ForgePlatform[]) { this.config = config; @@ -52,7 +53,7 @@ export default abstract class Publisher implements IForgePublisher { * you will have to create the version on GitHub and the second call will just * be appending files to the existing version. */ - async publish(opts: PublisherOptions) { + async publish(opts: PublisherOptions) { // eslint-disable-line @typescript-eslint/no-unused-vars throw new Error(`Publisher ${this.name} did not implement the publish method`); } } diff --git a/packages/publisher/base/test/Publisher_spec.ts b/packages/publisher/base/test/Publisher_spec.ts index 6c3fabda13..21a88f6218 100644 --- a/packages/publisher/base/test/Publisher_spec.ts +++ b/packages/publisher/base/test/Publisher_spec.ts @@ -4,6 +4,7 @@ import Publisher from '../src/Publisher'; class PublisherImpl extends Publisher { defaultPlatforms = []; + name = 'test'; } @@ -16,6 +17,7 @@ describe('Publisher', () => { it('__isElectronForgePublisher should not be settable', () => { const publisher = new PublisherImpl(null); expect(() => { + // eslint-disable-next-line no-underscore-dangle (publisher as any).__isElectronForgePublisher = false; }).to.throw(); expect(() => { diff --git a/packages/publisher/bitbucket/src/PublisherBitbucket.ts b/packages/publisher/bitbucket/src/PublisherBitbucket.ts index eb0cd71e14..a3ea0959a0 100644 --- a/packages/publisher/bitbucket/src/PublisherBitbucket.ts +++ b/packages/publisher/bitbucket/src/PublisherBitbucket.ts @@ -22,11 +22,11 @@ export default class PublisherBitbucket extends PublisherBase { for (const artifactPath of makeResult.artifacts) { @@ -47,12 +48,13 @@ export default class PublisherBitbucket extends PublisherBase { const { config } = this; if (!(config.baseUrl && config.username && config.password)) { - throw 'In order to publish to ERS you must set the "electronReleaseServer.baseUrl", "electronReleaseServer.username" and "electronReleaseServer.password" properties in your forge config. See the docs for more info'; // eslint-disable-line + throw new Error('In order to publish to ERS you must set the "electronReleaseServer.baseUrl", "electronReleaseServer.username" and "electronReleaseServer.password" properties in your forge config. See the docs for more info'); } d('attempting to authenticate to ERS'); @@ -55,10 +55,10 @@ export default class PublisherERS extends PublisherBase { }, })).json(); - const authFetch = (apiPath: string, options?: any) => - fetch(api(apiPath), Object.assign({}, options || {}, { - headers: Object.assign({}, (options || {}).headers, { Authorization: `Bearer ${token}` }), - })); + // eslint-disable-next-line max-len + const authFetch = (apiPath: string, options?: any) => fetch(api(apiPath), Object.assign({}, options || {}, { + headers: Object.assign({}, (options || {}).headers, { Authorization: `Bearer ${token}` }), + })); const versions: ERSVersion[] = await (await authFetch('api/version')).json(); @@ -69,6 +69,7 @@ export default class PublisherERS extends PublisherBase { let channel = 'stable'; if (config.channel) { + // eslint-disable-next-line prefer-destructuring channel = config.channel; } else if (packageJSON.version.includes('beta')) { channel = 'beta'; @@ -100,41 +101,39 @@ export default class PublisherERS extends PublisherBase { uploadSpinner.text = getText(); }; - await Promise.all(artifacts.map(artifactPath => - new Promise(async (resolve, reject) => { - if (existingVersion) { - const existingAsset = existingVersion.assets.find( - asset => asset.name === path.basename(artifactPath), - ); - - if (existingAsset) { - d('asset at path:', artifactPath, 'already exists on server'); - uploaded += 1; - updateSpinner(); - return; - } - } - try { - d('attempting to upload asset:', artifactPath); - const artifactForm = new FormData(); - artifactForm.append('token', token); - artifactForm.append('version', packageJSON.version); - artifactForm.append('platform', ersPlatform(makeResult.platform, makeResult.arch)); - artifactForm.append('file', fs.createReadStream(artifactPath)); - await authFetch('api/asset', { - method: 'POST', - body: artifactForm, - headers: artifactForm.getHeaders(), - }); - d('upload successful for asset:', artifactPath); + await Promise.all(artifacts.map(artifactPath => new Promise(async (resolve, reject) => { + if (existingVersion) { + const existingAsset = existingVersion.assets.find( + asset => asset.name === path.basename(artifactPath), + ); + + if (existingAsset) { + d('asset at path:', artifactPath, 'already exists on server'); uploaded += 1; updateSpinner(); - resolve(); - } catch (err) { - reject(err); + return; } - }), - )); + } + try { + d('attempting to upload asset:', artifactPath); + const artifactForm = new FormData(); + artifactForm.append('token', token); + artifactForm.append('version', packageJSON.version); + artifactForm.append('platform', ersPlatform(makeResult.platform, makeResult.arch)); + artifactForm.append('file', fs.createReadStream(artifactPath)); + await authFetch('api/asset', { + method: 'POST', + body: artifactForm, + headers: artifactForm.getHeaders(), + }); + d('upload successful for asset:', artifactPath); + uploaded += 1; + updateSpinner(); + resolve(); + } catch (err) { + reject(err); + } + }))); }); } } diff --git a/packages/publisher/github/package.json b/packages/publisher/github/package.json index a00164d3ac..2cd12d63ae 100644 --- a/packages/publisher/github/package.json +++ b/packages/publisher/github/package.json @@ -9,7 +9,9 @@ "typings": "dist/PublisherGithub.d.ts", "devDependencies": { "chai": "4.2.0", - "mocha": "^6.0.0" + "mocha": "^6.0.0", + "proxyquire": "^2.0.1", + "sinon": "^7.1.1" }, "engines": { "node": ">= 6.0" diff --git a/packages/publisher/github/src/PublisherGithub.ts b/packages/publisher/github/src/PublisherGithub.ts index 7403ebf5cb..125eaba241 100644 --- a/packages/publisher/github/src/PublisherGithub.ts +++ b/packages/publisher/github/src/PublisherGithub.ts @@ -5,16 +5,18 @@ import fs from 'fs-extra'; import mime from 'mime-types'; import path from 'path'; -import GitHub from './util/github'; -import { PublisherGitHubConfig } from './Config'; import { ForgeMakeResult } from '@electron-forge/shared-types'; import { ReposListReleasesResponseItem } from '@octokit/rest'; +import GitHub from './util/github'; +import { PublisherGitHubConfig } from './Config'; interface GitHubRelease { + // eslint-disable-next-line camelcase tag_name: string; assets: { name: string; }[]; + // eslint-disable-next-line camelcase upload_url: string; } @@ -36,15 +38,15 @@ export default class PublisherGithub extends PublisherBase { @@ -55,6 +57,7 @@ export default class PublisherGithub extends PublisherBase testRelease.tag_name === `v${releaseName}`); if (!release) { + // eslint-disable-next-line no-throw-literal throw { code: 404 }; } } catch (err) { @@ -78,7 +81,7 @@ export default class PublisherGithub extends PublisherBase { const updateSpinner = () => { - uploadSpinner.text = `Uploading Artifacts ${uploaded}/${artifacts.length} to v${releaseName}`; // eslint-disable-line + uploadSpinner.text = `Uploading Artifacts ${uploaded}/${artifacts.length} to v${releaseName}`; }; const flatArtifacts: string[] = []; @@ -86,28 +89,26 @@ export default class PublisherGithub extends PublisherBase - new Promise(async (resolve) => { - const done = () => { - uploaded += 1; - updateSpinner(); - resolve(); - }; - if (release!.assets.find(asset => asset.name === path.basename(artifactPath))) { - return done(); - } - await github.getGitHub().repos.uploadReleaseAsset({ - url: release!.upload_url, - file: fs.createReadStream(artifactPath), - headers: { - 'content-type': mime.lookup(artifactPath) || 'application/octet-stream', - 'content-length': (await fs.stat(artifactPath)).size, - }, - name: path.basename(artifactPath), - }); + await Promise.all(flatArtifacts.map(artifactPath => new Promise(async (resolve) => { + const done = () => { + uploaded += 1; + updateSpinner(); + resolve(); + }; + if (release!.assets.find(asset => asset.name === path.basename(artifactPath))) { return done(); - }), - )); + } + await github.getGitHub().repos.uploadReleaseAsset({ + url: release!.upload_url, + file: fs.createReadStream(artifactPath), + headers: { + 'content-type': mime.lookup(artifactPath) || 'application/octet-stream', + 'content-length': (await fs.stat(artifactPath)).size, + }, + name: path.basename(artifactPath), + }); + return done(); + }))); }); } } diff --git a/packages/publisher/github/src/util/github.ts b/packages/publisher/github/src/util/github.ts index 88e4f2f985..4c99729c1b 100644 --- a/packages/publisher/github/src/util/github.ts +++ b/packages/publisher/github/src/util/github.ts @@ -3,9 +3,14 @@ import merge from 'lodash.merge'; export default class GitHub { private options: GitHubAPI.Options; + token?: string; - constructor(authToken: string | undefined = undefined, requireAuth: boolean = false, options: GitHubAPI.Options = {}) { + constructor( + authToken: string | undefined = undefined, + requireAuth: boolean = false, + options: GitHubAPI.Options = {}, + ) { this.options = merge( options, { headers: { 'user-agent': 'Electron Forge' } }, @@ -15,7 +20,7 @@ export default class GitHub { } else if (process.env.GITHUB_TOKEN) { this.token = process.env.GITHUB_TOKEN; } else if (requireAuth) { - throw 'Please set GITHUB_TOKEN in your environment to access these features'; + throw new Error('Please set GITHUB_TOKEN in your environment to access these features'); } } diff --git a/packages/publisher/nucleus/src/Config.ts b/packages/publisher/nucleus/src/Config.ts index e177e88357..636ee1aec8 100644 --- a/packages/publisher/nucleus/src/Config.ts +++ b/packages/publisher/nucleus/src/Config.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line import/prefer-default-export export interface PublisherNucleusConfig { /** * Hostname (with https?://) of your instance of Nucleus diff --git a/packages/publisher/nucleus/src/PublisherNucleus.ts b/packages/publisher/nucleus/src/PublisherNucleus.ts index d5657108a5..c971c24750 100644 --- a/packages/publisher/nucleus/src/PublisherNucleus.ts +++ b/packages/publisher/nucleus/src/PublisherNucleus.ts @@ -1,6 +1,5 @@ import PublisherBase, { PublisherOptions } from '@electron-forge/publisher-base'; import { asyncOra } from '@electron-forge/async-ora'; -import { ForgePlatform, ForgeArch } from '@electron-forge/shared-types'; import debug from 'debug'; import FormData from 'form-data'; import fs from 'fs'; @@ -17,11 +16,9 @@ export default class PublisherNucleus extends PublisherBase { const newMakeResults: typeof makeResults = []; for (const result of makeResults) { - const existingResult = newMakeResults.find((nResult) => { - return nResult.arch === result.arch + const existingResult = newMakeResults.find(nResult => nResult.arch === result.arch && nResult.platform === result.platform - && nResult.packageJSON.version === result.packageJSON.version; - }); + && nResult.packageJSON.version === result.packageJSON.version); if (existingResult) { existingResult.artifacts.push(...result.artifacts); } else { @@ -36,8 +33,8 @@ export default class PublisherNucleus extends PublisherBase { @@ -46,12 +43,13 @@ export default class PublisherNucleus extends PublisherBase { }); if (!s3Client.config.credentials || !config.bucket) { - throw 'In order to publish to s3 you must set the "s3.accessKeyId", "process.env.ELECTRON_FORGE_S3_SECRET_ACCESS_KEY" and "s3.bucket" properties in your forge config. See the docs for more info'; // eslint-disable-line + throw new Error('In order to publish to s3 you must set the "s3.accessKeyId", "process.env.ELECTRON_FORGE_S3_SECRET_ACCESS_KEY" and "s3.bucket" properties in your forge config. See the docs for more info'); } d('creating s3 client with options:', config); @@ -64,39 +63,37 @@ export default class PublisherS3 extends PublisherBase { uploadSpinner.text = `Uploading Artifacts ${uploaded}/${artifacts.length}`; }; - await Promise.all(artifacts.map(artifact => - new Promise(async (resolve, reject) => { - const done = (err?: Error) => { - if (err) return reject(err); - uploaded += 1; - updateSpinner(); - resolve(); - }; - - const uploader = client.uploadFile({ - localFile: artifact.path, - s3Params: { - Bucket: config.bucket, - Key: this.config.keyResolver - ? this.config.keyResolver( - path.basename(artifact.path), - artifact.platform, - artifact.arch, - ) - : `${artifact.keyPrefix}/${path.basename(artifact.path)}`, - ACL: config.public ? 'public-read' : 'private', - }, - }); - d('uploading:', artifact.path); - - uploader.on('error', (err: Error) => done(err)); - uploader.on('progress', () => { - const p = `${Math.round((uploader.progressAmount / uploader.progressTotal) * 100)}%`; - d(`Upload Progress (${path.basename(artifact.path)}) ${p}`); - }); - uploader.on('end', () => done()); - }), - )); + await Promise.all(artifacts.map(artifact => new Promise(async (resolve, reject) => { + const done = (err?: Error) => { + if (err) return reject(err); + uploaded += 1; + updateSpinner(); + return resolve(); + }; + + const uploader = client.uploadFile({ + localFile: artifact.path, + s3Params: { + Bucket: config.bucket, + Key: this.config.keyResolver + ? this.config.keyResolver( + path.basename(artifact.path), + artifact.platform, + artifact.arch, + ) + : `${artifact.keyPrefix}/${path.basename(artifact.path)}`, + ACL: config.public ? 'public-read' : 'private', + }, + }); + d('uploading:', artifact.path); + + uploader.on('error', (err: Error) => done(err)); + uploader.on('progress', () => { + const p = `${Math.round((uploader.progressAmount / uploader.progressTotal) * 100)}%`; + d(`Upload Progress (${path.basename(artifact.path)}) ${p}`); + }); + uploader.on('end', () => done()); + }))); }); } } diff --git a/packages/publisher/snapcraft/src/Config.ts b/packages/publisher/snapcraft/src/Config.ts index 78fc569d44..3753a6d6b0 100644 --- a/packages/publisher/snapcraft/src/Config.ts +++ b/packages/publisher/snapcraft/src/Config.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line import/prefer-default-export export interface PublisherSnapcraftConfig { /** * A comma-separated list of channels to release to diff --git a/packages/publisher/snapcraft/src/PublisherSnapcraft.ts b/packages/publisher/snapcraft/src/PublisherSnapcraft.ts index 2e6e33aa7e..06127f8a96 100644 --- a/packages/publisher/snapcraft/src/PublisherSnapcraft.ts +++ b/packages/publisher/snapcraft/src/PublisherSnapcraft.ts @@ -6,7 +6,7 @@ import path from 'path'; import { PublisherSnapcraftConfig } from './Config'; -const Snapcraft = require('electron-installer-snap/snapcraft'); +const Snapcraft = require('electron-installer-snap/src/snapcraft'); export default class PublisherSnapcraft extends PublisherBase { name = 'snapcraft'; @@ -20,14 +20,14 @@ export default class PublisherSnapcraft extends PublisherBase artifact.endsWith('.snap')); if (snapArtifacts.length === 0) { - throw 'No snap files to upload. Please ensure that "snap" is listed in the "make_targets" in Forge config.'; + throw new Error('No snap files to upload. Please ensure that "snap" is listed in the "make_targets" in Forge config.'); } const snapcraftCfgPath = path.join(dir, '.snapcraft', 'snapcraft.cfg'); if (!await fs.pathExists(snapcraftCfgPath)) { - throw `Snapcraft credentials not found at "${snapcraftCfgPath}". It can be generated with the command "snapcraft export-login"` + - '(snapcraft 2.37 and above).'; + throw new Error(`Snapcraft credentials not found at "${snapcraftCfgPath}". It can be generated with the command "snapcraft export-login"` + + '(snapcraft 2.37 and above).'); } await asyncOra('Pushing snap to the snap store', async () => { diff --git a/packages/utils/async-ora/src/ora-handler.ts b/packages/utils/async-ora/src/ora-handler.ts index 184c605cdc..94637ab847 100644 --- a/packages/utils/async-ora/src/ora-handler.ts +++ b/packages/utils/async-ora/src/ora-handler.ts @@ -1,14 +1,20 @@ +/* eslint "no-console": "off" */ import colors from 'colors'; import ora from './ora'; export class OraImpl { + // eslint-disable-next-line no-empty-function, no-useless-constructor constructor(public text: string = '') {} - succeed(symbol?: string) { return this; } - fail(symbol?: string) { return this; } + succeed(_symbol?: string) { return this; } + + fail(_symbol?: string) { return this; } + start() { return this; } - stop(symbol?: string) { return this; } - warn(message: string) { return this; } + + stop(_symbol?: string) { return this; } + + warn(_message: string) { return this; } } export interface AsyncOraMethod { diff --git a/packages/utils/async-ora/src/ora.ts b/packages/utils/async-ora/src/ora.ts index 863f0e1da3..793d14496a 100644 --- a/packages/utils/async-ora/src/ora.ts +++ b/packages/utils/async-ora/src/ora.ts @@ -1,10 +1,12 @@ +/* eslint "no-console": "off" */ import 'colors'; import debug from 'debug'; -import logSymbols from 'log-symbols'; +import 'log-symbols'; import realOra from 'ora'; -import { OraImpl } from './ora-handler'; import prettyMs from 'pretty-ms'; +import { OraImpl } from './ora-handler'; + const d = debug('electron-forge:async-ora'); const useFakeOra = Boolean(process.env.DEBUG && process.env.DEBUG.includes('electron-forge')); @@ -16,10 +18,7 @@ if (useFakeOra) { export const fakeOra = (name: string) => { let oraName = name; let startTime: number | null = null; - const timing = () => { - if (!startTime) return; - return `-- after ${`${prettyMs(Date.now() - startTime)}`.cyan}`; - }; + const timing = () => (startTime ? `-- after ${`${prettyMs(Date.now() - startTime)}`.cyan}` : null); const fake: OraImpl = { start: () => { startTime = Date.now(); diff --git a/packages/utils/async-ora/test/ora-handler_spec.ts b/packages/utils/async-ora/test/ora-handler_spec.ts index 1229f6c918..18b5cf650f 100644 --- a/packages/utils/async-ora/test/ora-handler_spec.ts +++ b/packages/utils/async-ora/test/ora-handler_spec.ts @@ -1,3 +1,4 @@ +/* eslint "no-underscore-dangle": "off" */ import { expect } from 'chai'; import proxyquire from 'proxyquire'; import sinon from 'sinon'; @@ -69,7 +70,8 @@ describe('asyncOra', () => { it('should succeed the ora if the async fn passes', async () => { await asyncOra('random text', async () => { - if (2 + 2 === 5) console.error('Big brother is at it again'); // eslint-disable-line + // eslint-disable-next-line no-console, no-constant-condition + if (2 + 2 === 5) console.error('Big brother is at it again'); }); expect((currentOra as any).succeeded).to.equal(true); expect((currentOra as any).failed).to.equal(false); @@ -77,7 +79,8 @@ describe('asyncOra', () => { it('should fail the ora if the async fn throws', async () => { await asyncOra('this is gonna end badly', async () => { - throw { message: 'Not an error', stack: 'No Stack - Not an error' }; // eslint-disable-line + // eslint-disable-next-line no-throw-literal + throw { message: 'Not an error', stack: 'No Stack - Not an error' }; }, () => {}); expect((currentOra as any).succeeded).to.equal(false); expect((currentOra as any).failed).to.equal(true); @@ -86,7 +89,7 @@ describe('asyncOra', () => { it('should exit the process with status 1 if the async fn throws', async () => { const processExitSpy = sinon.spy(); await asyncOra('this is dodge', async () => { - throw 'woops'; // eslint-disable-line + throw new Error('woops'); }, processExitSpy); expect(processExitSpy.callCount).to.equal(1); expect(processExitSpy.firstCall.args).to.deep.equal([1]); @@ -95,7 +98,7 @@ describe('asyncOra', () => { it('should exit the process with status 1 if the async fn throws a number', async () => { const processExitSpy = sinon.spy(); await asyncOra('this is dodge', async () => { - throw 42; // eslint-disable-line + throw 42; // eslint-disable-line no-throw-literal }, processExitSpy); expect(processExitSpy.callCount).to.equal(1); expect(processExitSpy.firstCall.args).to.deep.equal([1]); diff --git a/packages/utils/types/src/index.ts b/packages/utils/types/src/index.ts index a7f1fa9620..1b365f275d 100644 --- a/packages/utils/types/src/index.ts +++ b/packages/utils/types/src/index.ts @@ -1,5 +1,5 @@ -import { OraImpl } from '@electron-forge/async-ora'; import { ChildProcess } from 'child_process'; +// eslint-disable-next-line import/no-extraneous-dependencies import { Options } from 'electron-packager'; import { RebuildOptions } from 'electron-rebuild/lib/src/rebuild'; diff --git a/packages/utils/web-multi-logger/src/Log.ts b/packages/utils/web-multi-logger/src/Log.ts index 6ed4907119..5c985061ea 100644 --- a/packages/utils/web-multi-logger/src/Log.ts +++ b/packages/utils/web-multi-logger/src/Log.ts @@ -1,3 +1,4 @@ export default class Log { + // eslint-disable-next-line no-empty-function, no-useless-constructor constructor(public line: string, public timestamp: Date) {} } diff --git a/packages/utils/web-multi-logger/src/Logger.ts b/packages/utils/web-multi-logger/src/Logger.ts index e7a4fc7527..d3c597641e 100644 --- a/packages/utils/web-multi-logger/src/Logger.ts +++ b/packages/utils/web-multi-logger/src/Logger.ts @@ -9,8 +9,11 @@ export { Tab }; export default class Logger { private app = express(); + private ws!: ews.Instance; + private tabs: Tab[] = []; + private server: http.Server | null = null; constructor(private port = 9000) { @@ -19,9 +22,7 @@ export default class Logger { private registerRoutes() { this.ws = ews(this.app); - this.app.get('/rest/tabs', (req, res) => { - return res.json(this.tabs); - }); + this.app.get('/rest/tabs', (req, res) => res.json(this.tabs)); this.app.use('/xterm', express.static(path.resolve(require.resolve('xterm'), '../../../dist'))); this.app.use(express.static(path.resolve(__dirname, '..', 'static'))); diff --git a/packages/utils/web-multi-logger/src/Tab.ts b/packages/utils/web-multi-logger/src/Tab.ts index caad08bf6c..7fb027ff52 100644 --- a/packages/utils/web-multi-logger/src/Tab.ts +++ b/packages/utils/web-multi-logger/src/Tab.ts @@ -6,6 +6,7 @@ let idCounter = 1; export default class Tab { private logs: Log[] = []; + private id: number; constructor(public name: string, private ws: ews.Instance) { diff --git a/tools/.eslintrc.json b/tools/.eslintrc.json new file mode 100644 index 0000000000..5247fb1ff6 --- /dev/null +++ b/tools/.eslintrc.json @@ -0,0 +1,9 @@ +{ + "rules": { + "import/no-extraneous-dependencies": "off", + "no-await-in-loop": "off", + "no-console": "off", + "no-continue": "off", + "no-restricted-syntax": "off" + } +} diff --git a/tools/copy-now.ts b/tools/copy-now.ts index c0f57f099f..065624d0ed 100644 --- a/tools/copy-now.ts +++ b/tools/copy-now.ts @@ -6,4 +6,4 @@ const DOCS_DIR = path.resolve(BASE_DIR, 'docs'); (async () => { await fs.copy(path.resolve(BASE_DIR, '.now.json'), path.resolve(DOCS_DIR, 'now.json')); -})() \ No newline at end of file +})(); diff --git a/tools/fix-deps.ts b/tools/fix-deps.ts index ff8375873c..2d3b8001ce 100644 --- a/tools/fix-deps.ts +++ b/tools/fix-deps.ts @@ -3,12 +3,16 @@ import * as path from 'path'; import { getPackageInfo } from './utils'; -(async() => { +(async () => { const packages = await getPackageInfo(); const baseJson = await fs.readJson(path.resolve(__dirname, '..', 'package.json')); - const allDeps = { ...baseJson.dependencies, ...baseJson.devDependencies, ...baseJson.optionalDependencies }; + const allDeps = { + ...baseJson.dependencies, + ...baseJson.devDependencies, + ...baseJson.optionalDependencies, + }; for (const p of packages) { const json = await fs.readJson(path.resolve(p.path, 'package.json')); diff --git a/tools/link-ts.ts b/tools/link-ts.ts index 3b120fc711..63dfe235f7 100644 --- a/tools/link-ts.ts +++ b/tools/link-ts.ts @@ -15,7 +15,6 @@ const PACKAGES_DIR = path.resolve(BASE_DIR, 'packages'); for (const dir of dirsToLink) { await fs.copy(path.resolve(BASE_DIR, 'tsconfig.json'), path.resolve(dir, 'tsconfig.json')); - await fs.copy(path.resolve(BASE_DIR, 'tslint.json'), path.resolve(dir, 'tslint.json')); await fs.copy(path.resolve(BASE_DIR, '.npmignore'), path.resolve(dir, '.npmignore')); const pj = await fs.readJson(path.resolve(dir, 'package.json')); if (pj.main) { diff --git a/tools/position-docs.ts b/tools/position-docs.ts index 0d811c1b1f..0f4ab5469d 100644 --- a/tools/position-docs.ts +++ b/tools/position-docs.ts @@ -5,6 +5,17 @@ import { getPackageInfo } from './utils'; const DOCS_PATH = path.resolve(__dirname, '..', 'docs'); +async function normalizeLinks(htmlFile: string, subPath: string): Promise { + const content: string = await fs.readFile(htmlFile, 'utf8'); + const relative: string = path.relative(path.resolve(DOCS_PATH, subPath), path.dirname(htmlFile)); + return content + .replace(/="[^"]*assets\//gi, '="/assets/') + .replace( + /( `${m1}/${path.posix.join(subPath, relative, m2)}"`, + ); +} + (async () => { const packages = await getPackageInfo(); @@ -26,14 +37,7 @@ const DOCS_PATH = path.resolve(__dirname, '..', 'docs'); // otherwise each module will have it's own unique JS file :( const htmlFiles = await new Promise(resolve => Glob(path.resolve(docPath, '**', '*.html'), (e, l) => resolve(l))); for (const htmlFile of htmlFiles) { - const content = await fs.readFile(htmlFile, 'utf8'); - const relative = path.relative(path.resolve(DOCS_PATH, subPath), path.dirname(htmlFile)); - await fs.writeFile(htmlFile, content - .replace(/=\"[^"]*assets\//gi, '="/assets/') - .replace(/( { - return `${m1}/${path.posix.join(subPath, relative, m2)}"`; - }), - ); + await fs.writeFile(htmlFile, await normalizeLinks(htmlFile, subPath)); } } })(); diff --git a/tools/sync-readmes.ts b/tools/sync-readmes.ts index 319617cc48..984e458f18 100644 --- a/tools/sync-readmes.ts +++ b/tools/sync-readmes.ts @@ -16,7 +16,7 @@ const workspaceMappings: { [space: string]: { [packageName: string]: string | un const BASE_DIR = path.resolve(__dirname, '..'); const DOCS_BASE = 'https://raw.githubusercontent.com/MarshallOfSound/electron-forge-docs/v6'; -const sanitize = (gb: string) => { +function sanitize(gb: string): string { return gb .replace('{% code-tabs %}', '') .replace('{% endcode-tabs %}', '') @@ -31,13 +31,13 @@ const sanitize = (gb: string) => { }; return `\n--------\n\n${styleMap[style] || 'ℹ️'} `; }); -}; +} interface SyncContext { packageKeys: [string, string, string, string][]; } -const sync = () => { +function sync(): Listr { return new Listr([ { title: 'Collecting package keys', @@ -57,19 +57,21 @@ const sync = () => { }, { title: 'Fetching READMEs', - task: (ctx: SyncContext) => new Listr(ctx.packageKeys.map(([workspace, workspaceDir, packageKey, packageName]) => ({ - title: `Fetching README for ${path.basename(workspaceDir)}/${packageKey}`, - task: async () => { - const r = await fetch(`${DOCS_BASE}/${workspace}s/${packageKey}.md`); - if (r.status !== 200) return; + task: (ctx: SyncContext) => new Listr(ctx.packageKeys.map( + ([workspace, workspaceDir, packageKey, packageName]) => ({ + title: `Fetching README for ${path.basename(workspaceDir)}/${packageKey}`, + task: async () => { + const r = await fetch(`${DOCS_BASE}/${workspace}s/${packageKey}.md`); + if (r.status !== 200) return; - const md = sanitize(await r.text()); - await fs.writeFile(path.resolve(workspaceDir, packageName, 'README.md'), md); - }, - })), { concurrent: 5 }), + const md = sanitize(await r.text()); + await fs.writeFile(path.resolve(workspaceDir, packageName, 'README.md'), md); + }, + }), + ), { concurrent: 5 }), }, ]); -}; +} if (process.mainModule === module) { sync().run().catch(console.error); diff --git a/tools/test-dist.ts b/tools/test-dist.ts index a5215537fe..f870d012d0 100644 --- a/tools/test-dist.ts +++ b/tools/test-dist.ts @@ -19,7 +19,7 @@ const PACKAGES_DIR = path.resolve(BASE_DIR, 'packages'); const pj = await fs.readJson(path.resolve(dir, 'package.json')); if (pj.name === '@electron-forge/cli') continue; if (!await fs.pathExists(path.resolve(dir, pj.main))) { - console.error(`${`[${pj.name}]`.cyan}:`, `Main entry not found (${pj.main})`.red); + console.error(`${`[${pj.name}]`.cyan}:`, `Main entry not found (${pj.main})`.red); bad = true; } if (!pj.typings || !await fs.pathExists(path.resolve(dir, pj.typings))) { diff --git a/tools/test-globber.ts b/tools/test-globber.ts index d0bbcfc31f..b99b97a7c5 100644 --- a/tools/test-globber.ts +++ b/tools/test-globber.ts @@ -1,8 +1,10 @@ +/* eslint "global-require": "off", "import/no-dynamic-require": "off" */ import minimist from 'minimist'; import * as path from 'path'; -import { getPackageInfoSync } from './utils'; import Glob from 'glob'; +import { getPackageInfoSync } from './utils'; + const argv = minimist( process.argv.slice( process.argv.findIndex(arg => arg === 'mocha.opts'), diff --git a/tslint.json b/tslint.json deleted file mode 100644 index 7a67a888e5..0000000000 --- a/tslint.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "tslint-config-airbnb", - "rules": { - "no-boolean-literal-compare": false, - "import-name": false, - "align": false, - "variable-name": [true, "ban-keywords", "check-format", "allow-pascal-case"], - "no-this-assignment": [true, { "allow-destructuring": true }], - "max-line-length": false, - "no-parameter-reassignment": false - } -} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index a11f3ac175..bf610dc133 100644 --- a/yarn.lock +++ b/yarn.lock @@ -715,38 +715,42 @@ nodeify "^1.0.1" tmp-promise "^1.0.5" -"@octokit/endpoint@^3.1.1": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-3.1.3.tgz#f6e9c2521b83b74367600e474b24efec2b0471c4" - integrity sha512-vAWzeoj9Lzpl3V3YkWKhGzmDUoMfKpyxJhpq74/ohMvmLXDoEuAGnApy/7TRi3OmnjyX2Lr+e9UGGAD0919ohA== +"@octokit/endpoint@^3.2.0": + version "3.2.3" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-3.2.3.tgz#bd9aea60cd94ce336656b57a5c9cb7f10be8f4f3" + integrity sha512-yUPCt4vMIOclox13CUxzuKiPJIFo46b/6GhUnUTw5QySczN1L0DtSxgmIZrZV4SAb9EyAqrceoyrWoYVnfF2AA== dependencies: deepmerge "3.2.0" is-plain-object "^2.0.4" universal-user-agent "^2.0.1" url-template "^2.0.8" -"@octokit/request@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-2.4.0.tgz#729fc5ea7654ab7cb74e0ae1935f69462a33b5e6" - integrity sha512-Bm2P0duVRUeKhyepNyFg5GX+yhCK71fqdtpsw5Rz+PQPjSha8HYwPMF5QfpzpD8b6/Xl3xhTgu3V90W362gZ1A== +"@octokit/request@2.4.2": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-2.4.2.tgz#87c36e820dd1e43b1629f4f35c95b00cd456320b" + integrity sha512-lxVlYYvwGbKSHXfbPk5vxEA8w4zHOH1wobado4a9EfsyD3Cbhuhus1w0Ye9Ro0eMubGO8kNy5d+xNFisM3Tvaw== dependencies: - "@octokit/endpoint" "^3.1.1" + "@octokit/endpoint" "^3.2.0" + deprecation "^1.0.1" is-plain-object "^2.0.4" node-fetch "^2.3.0" + once "^1.4.0" universal-user-agent "^2.0.1" "@octokit/rest@^16.0.1": - version "16.16.3" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.16.3.tgz#89b64b1f5ed1f85cfd1925f0c4b968c403b895db" - integrity sha512-8v5xyqXZwQbQ1WsTLU3G25nAlcKYEgIXzDeqLgTFpbzzJXcey0C8Mcs/LZiAgU8dDINZtO2dAPgd1cVKgK9DQw== + version "16.19.0" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.19.0.tgz#238244eae904c15bc9aa863bb3819142d3369ccb" + integrity sha512-mUk/GU2LtV95OAM3FnvK7KFFNzUUzEGFldOhWliJnuhwBqxEag1gW85o//L6YphC9wLoTaZQOhCHmQcsCnt2ag== dependencies: - "@octokit/request" "2.4.0" - before-after-hook "^1.2.0" + "@octokit/request" "2.4.2" + before-after-hook "^1.4.0" btoa-lite "^1.0.0" + deprecation "^1.0.1" lodash.get "^4.4.2" lodash.set "^4.3.2" lodash.uniq "^4.5.0" octokit-pagination-methods "^1.1.0" + once "^1.4.0" universal-user-agent "^2.0.0" url-template "^2.0.8" @@ -757,24 +761,25 @@ dependencies: any-observable "^0.3.0" -"@sinonjs/commons@^1.0.2", "@sinonjs/commons@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.3.0.tgz#50a2754016b6f30a994ceda6d9a0a8c36adda849" - integrity sha512-j4ZwhaHmwsCb4DlDOIWnI5YyKDNMoNThsmwEpfHx6a1EpsGZ9qYLxP++LMlmBRjtGptGHFsGItJ768snllFWpA== +"@sinonjs/commons@^1", "@sinonjs/commons@^1.0.2", "@sinonjs/commons@^1.3.1": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.4.0.tgz#7b3ec2d96af481d7a0321252e7b1c94724ec5a78" + integrity sha512-9jHK3YF/8HtJ9wCAbG+j8cD0i0+ATS9A7gXFqS36TblLPNy6rEEc+SB0imo91eCboGaBYGV/MT1/br/J+EE7Tw== dependencies: type-detect "4.0.8" -"@sinonjs/formatio@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.1.0.tgz#6ac9d1eb1821984d84c4996726e45d1646d8cce5" - integrity sha512-ZAR2bPHOl4Xg6eklUGpsdiIJ4+J1SNag1DHHrG/73Uz/nVwXqjgUtRPLoS+aVyieN9cSbc0E4LsU984tWcDyNg== +"@sinonjs/formatio@^3.1.0", "@sinonjs/formatio@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.2.1.tgz#52310f2f9bcbc67bdac18c94ad4901b95fde267e" + integrity sha512-tsHvOB24rvyvV2+zKMmPkZ7dXX6LSLKZ7aOtXY6Edklp0uRcgGpOsQTTGTcWViFyx4uhWc6GV8QdnALbIbIdeQ== dependencies: - "@sinonjs/samsam" "^2 || ^3" + "@sinonjs/commons" "^1" + "@sinonjs/samsam" "^3.1.0" -"@sinonjs/samsam@^2 || ^3", "@sinonjs/samsam@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.2.0.tgz#58c62b5f1f42e46d039d073d0ae2753da676bf0c" - integrity sha512-j5F1rScewLtx6pbTK0UAjA3jJj4RYiSKOix53YWv+Jzy/AZ69qHxUpU8fwVLjyKbEEud9QrLpv6Ggs7WqTimYw== +"@sinonjs/samsam@^3.1.0", "@sinonjs/samsam@^3.2.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.3.0.tgz#9557ea89cd39dbc94ffbd093c8085281cac87416" + integrity sha512-beHeJM/RRAaLLsMJhsCvHK31rIqZuobfPLa/80yGH5hnD8PV1hyh9xJBJNFfNmO7yWqm+zomijHsXpI6iTQJfQ== dependencies: "@sinonjs/commons" "^1.0.2" array-from "^2.1.1" @@ -854,9 +859,9 @@ integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== "@types/express-serve-static-core@*": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.1.tgz#35df7b302299a4ab138a643617bd44078e74d44e" - integrity sha512-QgbIMRU1EVRry5cIu1ORCQP4flSYqLM1lS5LYyGWfKnFT3E58f0gKto7BR13clBFVrVZ0G0rbLZ1hUpSkgQQOA== + version "4.16.2" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.2.tgz#5ee8a22e602005be6767df6b2cba9879df3f75aa" + integrity sha512-qgc8tjnDrc789rAQed8NoiFLV5VGcItA4yWNFphqGU0RcuuQngD00g3LHhWIK3HQ2XeDgVCmlNPDlqi3fWBHnQ== dependencies: "@types/node" "*" "@types/range-parser" "*" @@ -908,9 +913,11 @@ "@types/node" "*" "@types/handlebars@^4.0.38": - version "4.0.40" - resolved "https://registry.yarnpkg.com/@types/handlebars/-/handlebars-4.0.40.tgz#b714e13d296a75bff3f199316d1311933ca79ffd" - integrity sha512-sGWNtsjNrLOdKha2RV1UeF8+UbQnPSG7qbe5wwbni0mw4h2gHXyPFUMOC+xwGirIiiydM/HSqjDO4rk6NFB18w== + version "4.1.0" + resolved "https://registry.yarnpkg.com/@types/handlebars/-/handlebars-4.1.0.tgz#3fcce9bf88f85fe73dc932240ab3fb682c624850" + integrity sha512-gq9YweFKNNB1uFK71eRqsd4niVkXrxHugqWFQkeLRJvGjnxsLr16bYtcsG4tOFwmYi0Bax+wCkbf1reUfdl4kA== + dependencies: + handlebars "*" "@types/highlight.js@^9.12.3": version "9.12.3" @@ -951,23 +958,23 @@ "@types/node" "*" "@types/lodash.merge@^4.6.4": - version "4.6.5" - resolved "https://registry.yarnpkg.com/@types/lodash.merge/-/lodash.merge-4.6.5.tgz#5f782604cc754ff57661c541678a03cfe62cca19" - integrity sha512-aVuP20wtk34imEUC+gg/EqXJBdsS4R6yeX1LixjZQT04qQ3AceqgF8BJ84L43nVGTC3YZLpvcioza8yzZFWtIw== + version "4.6.6" + resolved "https://registry.yarnpkg.com/@types/lodash.merge/-/lodash.merge-4.6.6.tgz#b84b403c1d31bc42d51772d1cd5557fa008cd3d6" + integrity sha512-IB90krzMf7YpfgP3u/EvZEdXVvm4e3gJbUvh5ieuI+o+XqiNEt6fCzqNRaiLlPVScLI59RxIGZMQ3+Ko/DJ8vQ== dependencies: "@types/lodash" "*" "@types/lodash.template@^4.4.4": - version "4.4.5" - resolved "https://registry.yarnpkg.com/@types/lodash.template/-/lodash.template-4.4.5.tgz#40e1df204e40fb820870b0d629bd0b3a8124b02b" - integrity sha512-buhJodMUvXNhPCeB/6c80V5OBFUPT7LlZZy05WdV9A5h1E1LfZPso6PCVaHlXz70hB4/DqH5+0bkdNXJRCoYDQ== + version "4.4.6" + resolved "https://registry.yarnpkg.com/@types/lodash.template/-/lodash.template-4.4.6.tgz#d28a380a0cd152e6846324bf8f68b93318f09bc0" + integrity sha512-nBw8J73e8AsYlS/ZoYRKDCQPHqm4F9xAeDLVe4M6xKDo4+1W0pruQ9egw5zgwxveb3C8kzSOetXalCzz3A1cTQ== dependencies: "@types/lodash" "*" "@types/lodash@*", "@types/lodash@^4.14.110": - version "4.14.121" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.121.tgz#9327e20d49b95fc2bf983fc2f045b2c6effc80b9" - integrity sha512-ORj7IBWj13iYufXt/VXrCNMbUuCTJfhzme5kx9U/UtcIPdJYuvPDUAlHlbNhz/8lKCLy9XGIZnGrqXOtQbPGoQ== + version "4.14.123" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.123.tgz#39be5d211478c8dd3bdae98ee75bb7efe4abfe4d" + integrity sha512-pQvPkc4Nltyx7G1Ww45OjVqUsJP4UsZm+GWJpigXgkikZqJgRm4c48g027o6tdgubWHwFRF15iFd+Y4Pmqv6+Q== "@types/log-symbols@^2.0.0": version "2.0.0" @@ -1024,9 +1031,9 @@ "@types/node" "*" "@types/node@*", "@types/node@^11.9.4": - version "11.9.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.9.5.tgz#011eece9d3f839a806b63973e228f85967b79ed3" - integrity sha512-vVjM0SVzgaOUpflq4GYBvCpozes8OgIIS5gVXVka+OfK3hvnkC1i93U8WiY2OtNE4XUWyyy/86Kf6e0IHTQw1Q== + version "11.11.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.3.tgz#7c6b0f8eaf16ae530795de2ad1b85d34bf2f5c58" + integrity sha512-wp6IOGu1lxsfnrD+5mX6qwSwWuqsdkKKxTN4aQc4wByHAKZJf9/D4KXPQ1POUjEbnCP5LMggB0OEFNY9OTsMqg== "@types/opn@^5.1.0": version "5.1.0" @@ -1035,13 +1042,6 @@ dependencies: "@types/node" "*" -"@types/ora@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@types/ora/-/ora-3.1.0.tgz#9b0c87c825a47f3b50c56ab19c2aed4565c7643b" - integrity sha512-4e15N42qhHRlxyP5SpX9fK3q4tXvEkdmGdof2DZ0mqPu7glrNT8cs9bbI73NhwEGApq1TSXhs2aFmn19VCTwCQ== - dependencies: - "@types/node" "*" - "@types/pify@^3.0.1": version "3.0.2" resolved "https://registry.yarnpkg.com/@types/pify/-/pify-3.0.2.tgz#1bc75dac43e31dba981c37e0a08edddc1b49cd39" @@ -1190,9 +1190,9 @@ "@types/node" "*" "@types/sinon@^7.0.6": - version "7.0.8" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-7.0.8.tgz#7bf01f2967d0d6d2cd84ce63e08696eb076e8dc0" - integrity sha512-v8HKmpYANbS3y0cWji16uk/CV9v2CqpI+wxeW7WVZPU2E8MAcvBYbCBpeukhaWPRHbTO3tu8m6vb2IXWCbEUOQ== + version "7.0.10" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-7.0.10.tgz#1f921f0c347b19f754e61dbc671c088df73fe1ff" + integrity sha512-4w7SvsiUOtd4mUfund9QROPSJ5At/GQskDpqd87pJIRI6ULWSJqHI3GIZE337wQuN3aznroJGr94+o8fwvL37Q== "@types/tapable@*": version "1.0.4" @@ -1243,10 +1243,10 @@ dependencies: "@types/webpack" "*" -"@types/webpack@*", "@types/webpack@4.4.25": - version "4.4.25" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.4.25.tgz#c8a1eb968a33a3e6da641f529c5add0d44d34809" - integrity sha512-YaYVbSK1bC3xiAWFLSgDQyVHdCTNq5cLlcx633basmrwSoUxJiv4SZ0SoT1uoF15zWx98afOcCbqA1YHeCdRYA== +"@types/webpack@*", "@types/webpack@^4.4.26": + version "4.4.26" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.4.26.tgz#b52f605351f2ed60e6ce24fa7df39ab7abd03470" + integrity sha512-vs8LjgEZUQTBxotXbMf8s4jgykozkqjv6P0JRi+1BLh0n7LQUkMXfvsoPb5U/dBL1ay5Lu0c46G6FRmAZBhAUA== dependencies: "@types/anymatch" "*" "@types/node" "*" @@ -1262,150 +1262,177 @@ "@types/events" "*" "@types/node" "*" -"@webassemblyjs/ast@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.3.tgz#63a741bd715a6b6783f2ea5c6ab707516aa215eb" - integrity sha512-xy3m06+Iu4D32+6soz6zLnwznigXJRuFNTovBX2M4GqVqLb0dnyWLbPnpcXvUSdEN+9DVyDeaq2jyH1eIL2LZQ== +"@typescript-eslint/eslint-plugin@^1.1.0": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.4.2.tgz#370bc32022d1cc884a5dcf62624ef2024182769d" + integrity sha512-6WInypy/cK4rM1dirKbD5p7iFW28DbSRKT/+PGn+DYzBWEvHq5KnZAqQ5cX25JBc0qMkFxJNxNfBbFXJyyzVcw== dependencies: - "@webassemblyjs/helper-module-context" "1.8.3" - "@webassemblyjs/helper-wasm-bytecode" "1.8.3" - "@webassemblyjs/wast-parser" "1.8.3" - -"@webassemblyjs/floating-point-hex-parser@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.3.tgz#f198a2d203b3c50846a064f5addd6a133ef9bc0e" - integrity sha512-vq1TISG4sts4f0lDwMUM0f3kpe0on+G3YyV5P0IySHFeaLKRYZ++n2fCFfG4TcCMYkqFeTUYFxm75L3ddlk2xA== - -"@webassemblyjs/helper-api-error@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.3.tgz#3b708f6926accd64dcbaa7ba5b63db5660ff4f66" - integrity sha512-BmWEynI4FnZbjk8CaYZXwcv9a6gIiu+rllRRouQUo73hglanXD3AGFJE7Q4JZCoVE0p5/jeX6kf5eKa3D4JxwQ== + "@typescript-eslint/parser" "1.4.2" + "@typescript-eslint/typescript-estree" "1.4.2" + requireindex "^1.2.0" + tsutils "^3.7.0" -"@webassemblyjs/helper-buffer@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.3.tgz#f3150a23ffaba68621e1f094c8a14bebfd53dd48" - integrity sha512-iVIMhWnNHoFB94+/2l7LpswfCsXeMRnWfExKtqsZ/E2NxZyUx9nTeKK/MEMKTQNEpyfznIUX06OchBHQ+VKi/Q== - -"@webassemblyjs/helper-code-frame@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.3.tgz#f43ac605789b519d95784ef350fd2968aebdd3ef" - integrity sha512-K1UxoJML7GKr1QXR+BG7eXqQkvu+eEeTjlSl5wUFQ6W6vaOc5OwSxTcb3oE9x/3+w4NHhrIKD4JXXCZmLdL2cg== +"@typescript-eslint/parser@1.4.2", "@typescript-eslint/parser@^1.1.0": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.4.2.tgz#acfdee2019958a41d308d768e53ded975ef90ce8" + integrity sha512-OqLkY9295DXXaWToItUv3olO2//rmzh6Th6Sc7YjFFEpEuennsm5zhygLLvHZjPxPlzrQgE8UDaOPurDylaUuw== dependencies: - "@webassemblyjs/wast-printer" "1.8.3" - -"@webassemblyjs/helper-fsm@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.3.tgz#46aaa03f41082a916850ebcb97e9fc198ef36a9c" - integrity sha512-387zipfrGyO77/qm7/SDUiZBjQ5KGk4qkrVIyuoubmRNIiqn3g+6ijY8BhnlGqsCCQX5bYKOnttJobT5xoyviA== + "@typescript-eslint/typescript-estree" "1.4.2" + eslint-scope "^4.0.0" + eslint-visitor-keys "^1.0.0" -"@webassemblyjs/helper-module-context@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.3.tgz#150da405d90c8ea81ae0b0e1965b7b64e585634f" - integrity sha512-lPLFdQfaRssfnGEJit5Sk785kbBPPPK4ZS6rR5W/8hlUO/5v3F+rN8XuUcMj/Ny9iZiyKhhuinWGTUuYL4VKeQ== - dependencies: - "@webassemblyjs/ast" "1.8.3" +"@typescript-eslint/typescript-estree@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.4.2.tgz#b16bc36c9a4748a7fca92cba4c2d73c5325c8a85" + integrity sha512-wKgi/w6k1v3R4b6oDc20cRWro2gBzp0wn6CAeYC8ExJMfvXMfiaXzw2tT9ilxdONaVWMCk7B9fMdjos7bF/CWw== + dependencies: + lodash.unescape "4.0.1" + semver "5.5.0" + +"@webassemblyjs/ast@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" + integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== + dependencies: + "@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@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" + integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== + +"@webassemblyjs/helper-api-error@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" + integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== + +"@webassemblyjs/helper-buffer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" + integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== + +"@webassemblyjs/helper-code-frame@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" + integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== + dependencies: + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/helper-fsm@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" + integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== + +"@webassemblyjs/helper-module-context@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" + integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== + dependencies: + "@webassemblyjs/ast" "1.8.5" mamacro "^0.0.3" -"@webassemblyjs/helper-wasm-bytecode@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.3.tgz#12f55bbafbbc7ddf9d8059a072cb7b0c17987901" - integrity sha512-R1nJW7bjyJLjsJQR5t3K/9LJ0QWuZezl8fGa49DZq4IVaejgvkbNlKEQxLYTC579zgT4IIIVHb5JA59uBPHXyw== +"@webassemblyjs/helper-wasm-bytecode@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" + integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== -"@webassemblyjs/helper-wasm-section@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.3.tgz#9e79456d9719e116f4f8998ee62ab54ba69a6cf3" - integrity sha512-P6F7D61SJY73Yz+fs49Q3+OzlYAZP86OfSpaSY448KzUy65NdfzDmo2NPVte+Rw4562MxEAacvq/mnDuvRWOcg== +"@webassemblyjs/helper-wasm-section@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" + integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== dependencies: - "@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@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.3.tgz#0a89355b1f6c9d08d0605c2acbc2a6fe3141f5b4" - integrity sha512-UD4HuLU99hjIvWz1pD68b52qsepWQlYCxDYVFJQfHh3BHyeAyAlBJ+QzLR1nnS5J6hAzjki3I3AoJeobNNSZlg== +"@webassemblyjs/ieee754@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" + integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.3.tgz#b7fd9d7c039e34e375c4473bd4dc89ce8228b920" - integrity sha512-XXd3s1BmkC1gpGABuCRLqCGOD6D2L+Ma2BpwpjrQEHeQATKWAQtxAyU9Z14/z8Ryx6IG+L4/NDkIGHrccEhRUg== +"@webassemblyjs/leb128@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" + integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.3.tgz#75712db52cfdda868731569ddfe11046f1f1e7a2" - integrity sha512-Wv/WH9Zo5h5ZMyfCNpUrjFsLZ3X1amdfEuwdb7MLdG3cPAjRS6yc6ElULlpjLiiBTuzvmLhr3ENsuGyJ3wyCgg== - -"@webassemblyjs/wasm-edit@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.3.tgz#23c3c6206b096f9f6aa49623a5310a102ef0fb87" - integrity sha512-nB19eUx3Yhi1Vvv3yev5r+bqQixZprMtaoCs1brg9Efyl8Hto3tGaUoZ0Yb4Umn/gQCyoEGFfUxPLp1/8+Jvnw== - dependencies: - "@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/wasm-gen@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.3.tgz#1a433b8ab97e074e6ac2e25fcbc8cb6125400813" - integrity sha512-sDNmu2nLBJZ/huSzlJvd9IK8B1EjCsOl7VeMV9VJPmxKYgTJ47lbkSP+KAXMgZWGcArxmcrznqm7FrAPQ7vVGg== - dependencies: - "@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/wasm-opt@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.3.tgz#54754bcf88f88e92b909416a91125301cc81419c" - integrity sha512-j8lmQVFR+FR4/645VNgV4R/Jz8i50eaPAj93GZyd3EIJondVshE/D9pivpSDIXyaZt+IkCodlzOoZUE4LnQbeA== - dependencies: - "@webassemblyjs/ast" "1.8.3" - "@webassemblyjs/helper-buffer" "1.8.3" - "@webassemblyjs/wasm-gen" "1.8.3" - "@webassemblyjs/wasm-parser" "1.8.3" - -"@webassemblyjs/wasm-parser@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.3.tgz#d12ed19d1b8e8667a7bee040d2245aaaf215340b" - integrity sha512-NBI3SNNtRoy4T/KBsRZCAWUzE9lI94RH2nneLwa1KKIrt/2zzcTavWg6oY05ArCbb/PZDk3OUi63CD1RYtN65w== - dependencies: - "@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/wast-parser@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.3.tgz#44aa123e145503e995045dc3e5e2770069da117b" - integrity sha512-gZPst4CNcmGtKC1eYQmgCx6gwQvxk4h/nPjfPBbRoD+Raw3Hs+BS3yhrfgyRKtlYP+BJ8LcY9iFODEQofl2qbg== - dependencies: - "@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/utf8@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" + integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== + +"@webassemblyjs/wasm-edit@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" + integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== + dependencies: + "@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@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" + integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== + dependencies: + "@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@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" + integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== + dependencies: + "@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@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" + integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== + dependencies: + "@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@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" + integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== + dependencies: + "@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@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.3.tgz#b1177780b266b1305f2eeba87c4d6aa732352060" - integrity sha512-DTA6kpXuHK4PHu16yAD9QVuT1WZQRT7079oIFFmFSjqjLWGXS909I/7kiLTn931mcj7wGsaUNungjwNQ2lGQ3Q== +"@webassemblyjs/wast-printer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" + integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== dependencies: - "@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" "@xtuc/ieee754@^1.2.0": @@ -1436,7 +1463,12 @@ acorn-dynamic-import@^4.0.0: resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== -acorn@^6.0.5: +acorn-jsx@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" + integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== + +acorn@^6.0.5, acorn@^6.0.7: version "6.1.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== @@ -1451,10 +1483,10 @@ ajv-keywords@^3.1.0: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.0.tgz#4b831e7b531415a7cc518cd404e73f6193c6349d" integrity sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw== -ajv@^6.1.0, ajv@^6.5.5: - version "6.9.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.9.2.tgz#4927adb83e7f48e5a32b45729744c71ec39c9c7b" - integrity sha512-4UFy0/LgDo7Oa/+wOAlj44tp9K78u38E5/359eSrqEp1Z5PdVfimCcs7SluXMP755RUQu6d2b4AvF0R1C9RZjg== +ajv@^6.1.0, ajv@^6.5.5, ajv@^6.9.1: + version "6.10.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" + integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== dependencies: fast-deep-equal "^2.0.1" fast-json-stable-stringify "^2.0.0" @@ -1468,15 +1500,15 @@ ansi-align@^2.0.0: dependencies: string-width "^2.0.0" -ansi-colors@3.2.3, ansi-colors@^3.0.0: +ansi-colors@3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== -ansi-escapes@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" - integrity sha1-06ioOzGapneTZisT52HHkRQiMG4= +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: version "3.2.0" @@ -1498,17 +1530,17 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= -ansi-regex@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.0.0.tgz#70de791edf021404c3fd615aa89118ae0432e5a9" - integrity sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w== +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= -ansi-styles@^3.2.1: +ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -1583,6 +1615,14 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +aria-query@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" + integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= + dependencies: + ast-types-flow "0.0.7" + commander "^2.11.0" + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -1618,6 +1658,14 @@ array-from@^2.1.1: resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195" integrity sha1-z+nYwmYoudxa7MYqn12PHzUsEZU= +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -1680,10 +1728,20 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= +ast-types-flow@0.0.7, ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + async-each@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - integrity sha1-GdOGodntxufByF04iu28xW0zYC0= + version "1.0.2" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.2.tgz#8b8a7ca2a658f927e9f307d6d1a42f4199f0f735" + integrity sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg== async-limiter@~1.0.0: version "1.0.0" @@ -1695,18 +1753,6 @@ async@^1.4.2: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= -async@^2.5.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" - integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== - dependencies: - lodash "^4.17.11" - -async@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9" - integrity sha1-+PwEyjoTeErenhZBr5hXjPvWR6k= - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1723,9 +1769,9 @@ author-regex@^1.0.0: integrity sha1-0IiFvmubv5Q5/gh8dihyRfCoFFA= aws-sdk@^2.9.0: - version "2.411.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.411.0.tgz#1a6df6c4eed402b43a047c57eaef839279718b34" - integrity sha512-8SqJeIoXDfOu4dyiMfaw/outfkXiwDV8cZcGjFD7D+qyAipGuJc+rnzNwAzeKedAz+1KZpxOXrrovDJWKAik5g== + version "2.423.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.423.0.tgz#bc67427fb602b88a652143fafd2febde94a8141d" + integrity sha512-BgsqrCMeJuE+gyWbqzDXvwzdEOyl5f9VIy0tgh78vqPI/09j9s4TKC9McMr6I4uTifVUpOxxultPS39PcTjQeA== dependencies: buffer "4.9.1" events "1.1.1" @@ -1755,6 +1801,13 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== +axobject-query@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" + integrity sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww== + dependencies: + ast-types-flow "0.0.7" + babel-code-frame@^6.22.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -1824,10 +1877,10 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -before-after-hook@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-1.3.2.tgz#7bfbf844ad670aa7a96b5a4e4e15bd74b08ed66b" - integrity sha512-zyPgY5dgbf99c0uGUjhY4w+mxqEGxPKg9RQDl34VvrVh2bM31lFN+mwR1ZHepq/KA3VCPk1gwJZL6IIJqjLy2w== +before-after-hook@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-1.4.0.tgz#2b6bf23dca4f32e628fd2747c10a37c74a4b484d" + integrity sha512-l5r9ir56nda3qu14nAXIlyq1MmUSs0meCIaFAh8HwkFwP1F8eToOuS3ah2VAHHcY04jaYD7FpJC5JTXHYRbkzg== big.js@^3.1.3: version "3.2.0" @@ -1996,13 +2049,13 @@ browserify-zlib@^0.2.0: pako "~1.0.5" browserslist@^4.3.4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.4.2.tgz#6ea8a74d6464bb0bd549105f659b41197d8f0ba2" - integrity sha512-ISS/AIAiHERJ3d45Fz0AVYKkgcy+F/eJHzKEvv1j0wwKGKD9T3BrwKr/5g45L+Y4XIK5PlTqefHciRFcfE1Jxg== + version "4.5.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.5.1.tgz#2226cada1947b33f4cfcf7b608dcb519b6128106" + integrity sha512-/pPw5IAUyqaQXGuD5vS8tcbudyPZ241jk1W5pQBsGDfcjNQt7p8qxZhgMNuygDShte1PibLFexecWUPgmVLfrg== dependencies: - caniuse-lite "^1.0.30000939" - electron-to-chromium "^1.3.113" - node-releases "^1.1.8" + caniuse-lite "^1.0.30000949" + electron-to-chromium "^1.3.116" + node-releases "^1.1.11" btoa-lite@^1.0.0: version "1.0.0" @@ -2116,6 +2169,11 @@ caching-transform@^3.0.1: package-hash "^3.0.0" write-file-atomic "^2.4.2" +callsites@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.0.0.tgz#fb7eb569b72ad7a45812f93fd9430a3e410b3dd3" + integrity sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw== + camel-case@3.0.x: version "3.0.0" resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" @@ -2143,14 +2201,14 @@ camelcase@^4.0.0: integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= camelcase@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" - integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== + version "5.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.2.0.tgz#e7522abda5ed94cc0489e1b8466610e88404cf45" + integrity sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ== -caniuse-lite@^1.0.30000939: - version "1.0.30000939" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000939.tgz#b9ab7ac9e861bf78840b80c5dfbc471a5cd7e679" - integrity sha512-oXB23ImDJOgQpGjRv1tCtzAvJr4/OvrHi5SO2vUgB0g0xpdZZoA/BxfImiWfdwoYdUTtQrPsXsvYU/dmCSM8gg== +caniuse-lite@^1.0.30000949: + version "1.0.30000950" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000950.tgz#8c559d66e332b34e919d1086cc6d29c1948856ae" + integrity sha512-Cs+4U9T0okW2ftBsCIHuEYXXkki7mjXmjCh4c6PzYShk04qDEr76/iC7KwhLoWoY65wcra1XOsRD+S7BptEb5A== capture-stack-trace@^1.0.0: version "1.0.1" @@ -2192,7 +2250,7 @@ chalk@^1.0.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2282,13 +2340,6 @@ cli-boxes@^1.0.0: resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= -cli-cursor@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" - integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc= - dependencies: - restore-cursor "^1.0.1" - cli-cursor@^2.0.0, cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -2296,10 +2347,10 @@ cli-cursor@^2.0.0, cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" -cli-spinners@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" - integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg== +cli-spinners@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.0.0.tgz#4b078756fc17a8f72043fdc9f1f14bf4fa87e2df" + integrity sha512-yiEBmhaKPPeBj7wWm4GEdtPZK940p9pl3EANIrnJ3JnvWyrPjcFcsEq6qRUuQ7fzB0+Y82ld3p6B34xo95foWw== cli-truncate@^0.2.1: version "0.2.1" @@ -2358,11 +2409,6 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -colors@1.0.x: - version "1.0.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= - colors@^1.2.0, colors@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" @@ -2375,12 +2421,12 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@2.17.x, commander@~2.17.1: +commander@2.17.x: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== -commander@^2.12.1, commander@^2.19.0, commander@^2.8.1, commander@^2.9.0: +commander@^2.11.0, commander@^2.12.1, commander@^2.19.0, commander@^2.8.1, commander@^2.9.0, commander@~2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== @@ -2426,7 +2472,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@1.6.2, concat-stream@^1.4.7, concat-stream@^1.5.0: +concat-stream@1.6.2, concat-stream@^1.5.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -2465,6 +2511,11 @@ constants-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + content-disposition@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" @@ -2694,11 +2745,6 @@ currently-unhandled@^0.4.1: dependencies: array-find-index "^1.0.1" -cycle@1.0.x: - version "1.0.3" - resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" - integrity sha1-IegLK+hYD5i0aPN5QwZisEbDStI= - cyclist@~0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" @@ -2716,16 +2762,20 @@ cz-conventional-changelog@2.1.0: word-wrap "^1.0.3" cz-customizable@^5.0.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/cz-customizable/-/cz-customizable-5.3.0.tgz#ef2f2f2cf406c99b9213fbfb047364684566368c" - integrity sha512-WBU0cE7Yjk04NS/sd9HrDT4GZNSlu6cZ0DnBXa6o2CnK7x1qqyP5BZ9fTPrlfct9jzGWqk3nmV23sgINqWF9XA== + version "5.5.3" + resolved "https://registry.yarnpkg.com/cz-customizable/-/cz-customizable-5.5.3.tgz#0e424deab6adbe07c579aaa0f8b9aa4c3ecbc877" + integrity sha512-5OUgx+5xjKgysQUs/fxOSGrrl3YWUeMRik2SvtX8mKS6+DaohWloftKFkb84go6eoOYtiuBDzxm1j5N7I4tQMg== dependencies: editor "1.0.0" - find-config "0.3.0" - inquirer "1.2.3" - temp "0.8.3" - winston "2.1.0" - word-wrap "1.1.0" + find-config "^1.0.0" + inquirer "^6.2.2" + temp "^0.9.0" + word-wrap "^1.2.3" + +damerau-levenshtein@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" + integrity sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ= dashdash@^1.12.0: version "1.14.1" @@ -2744,7 +2794,7 @@ date-now@^0.1.4: resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= -debug@2.6.9, debug@^2.1.2, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.5.1, debug@^2.6.8: +debug@2.6.9, debug@^2.1.2, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.5.1, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -2792,6 +2842,11 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + deepmerge@3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.2.0.tgz#58ef463a57c08d376547f8869fdc5bcee957f44e" @@ -2811,7 +2866,7 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -define-properties@^1.1.2: +define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -2855,6 +2910,11 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +deprecation@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-1.0.1.tgz#2df79b79005752180816b7b6e079cbd80490d711" + integrity sha512-ccVHpE72+tcIKaGMql33x5MAjKQIZrk+3x2GbJ7TeraUCZWHoT+KSZpoC+JQFsUBlSTXUrBaGiF0j6zVTepPLg== + des.js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" @@ -2905,6 +2965,28 @@ doctrine@0.7.2: esutils "^1.1.6" isarray "0.0.1" +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + dom-converter@^0.2: version "0.2.0" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" @@ -3042,23 +3124,7 @@ electron-forge-template-vue@^1.0.2: resolved "https://registry.yarnpkg.com/electron-forge-template-vue/-/electron-forge-template-vue-1.0.3.tgz#58a11ec972a0f0518e1306da7a573fbaf6b4ac50" integrity sha1-WKEeyXKg8FGOEwbaelc/uva0rFA= -electron-installer-common@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/electron-installer-common/-/electron-installer-common-0.6.1.tgz#7b8a192e8e088873ce5b6b88bd0179d2021a65be" - integrity sha512-C5lj5NJ9IlY/GtV1aegC0Tn7K0IeNFShVzlQ+jkHG7SEdiFnt+PlGx7aRBLEWOC4wc9hVgx/lvu6kM6oB4Dl9w== - dependencies: - asar "^1.0.0" - cross-spawn-promise "^0.10.1" - debug "^4.1.1" - fs-extra "^7.0.1" - glob "^7.1.3" - glob-promise "^3.4.0" - lodash "^4.17.11" - parse-author "^2.0.0" - semver "^5.6.0" - tmp-promise "^1.0.5" - -electron-installer-common@^0.6.2: +electron-installer-common@^0.6.1, electron-installer-common@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/electron-installer-common/-/electron-installer-common-0.6.2.tgz#1ca8f11a2d428eb523d2c1c9a3078ebcfbfebe64" integrity sha512-k/uB9+rYxQx5sxCNlmdn5fqjWRbDCGIQjdDi9101mVHr0dUkrupLjtgjaaXbvdtUxHTYTbk53l77YnXM6ZGbHg== @@ -3153,9 +3219,9 @@ electron-osx-sign@^0.4.10, electron-osx-sign@^0.4.11: plist "^3.0.1" electron-packager@^13.0.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/electron-packager/-/electron-packager-13.1.0.tgz#be2d2ecb5ca08932d8e2ec20d02925c245e3780d" - integrity sha512-XHoDqgG90NGBfgUJ3NcOmELAuvHucOIYzi7AhZKIC8FivRR45PDs0pXSf53OqTXXOkdL/1xSveogvJLjKJwkAQ== + version "13.1.1" + resolved "https://registry.yarnpkg.com/electron-packager/-/electron-packager-13.1.1.tgz#04e199786216e009c96d938e0c0092dae5e82129" + integrity sha512-3Drgcw8OEOP3Psw/PprloAFJSkSUSQgjUq3AmWffJGB3Kj5WXmZl6A3GOUs8aT7bP/8GWg4oYqSiCSnA5PQkdQ== dependencies: asar "^1.0.0" debug "^4.0.1" @@ -3190,10 +3256,10 @@ electron-rebuild@^1.6.0: spawn-rx "^3.0.0" yargs "^12.0.5" -electron-to-chromium@^1.3.113: - version "1.3.113" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz#b1ccf619df7295aea17bc6951dc689632629e4a9" - integrity sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g== +electron-to-chromium@^1.3.116: + version "1.3.116" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.116.tgz#1dbfee6a592a0c14ade77dbdfe54fef86387d702" + integrity sha512-NKwKAXzur5vFCZYBHpdWjTMO8QptNLNP80nItkSIgUOapPAo9Uia+RvkCaZJtO7fhQaVElSvBPWEc2ku6cKsPA== electron-windows-store@^2.1.0: version "2.1.0" @@ -3252,6 +3318,11 @@ elliptic@^6.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" +emoji-regex@^7.0.1, emoji-regex@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -3302,7 +3373,7 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.5.1: +es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.5.1, es-abstract@^1.7.0: version "1.13.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== @@ -3338,19 +3409,176 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -eslint-scope@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" - integrity sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA== +eslint-config-airbnb-base@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.1.0.tgz#b5a1b480b80dfad16433d6c4ad84e6605052c05c" + integrity sha512-XWwQtf3U3zIoKO1BbHh6aUhJZQweOwSt4c2JrPDg9FP3Ltv3+YfEv7jIDB8275tVnO/qOHbfuYg3kzw6Je7uWw== + dependencies: + eslint-restricted-globals "^0.1.1" + object.assign "^4.1.0" + object.entries "^1.0.4" + +eslint-config-airbnb@^17.1.0: + version "17.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-17.1.0.tgz#3964ed4bc198240315ff52030bf8636f42bc4732" + integrity sha512-R9jw28hFfEQnpPau01NO5K/JWMGLi6aymiF6RsnMURjTk+MqZKllCqGK/0tOvHkPi/NWSSOU2Ced/GX++YxLnw== + dependencies: + eslint-config-airbnb-base "^13.1.0" + object.assign "^4.1.0" + object.entries "^1.0.4" + +eslint-import-resolver-node@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" + integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== + dependencies: + debug "^2.6.9" + resolve "^1.5.0" + +eslint-module-utils@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz#546178dab5e046c8b562bbb50705e2456d7bda49" + integrity sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w== + dependencies: + debug "^2.6.8" + pkg-dir "^2.0.0" + +eslint-plugin-import@^2.15.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz#97ac3e75d0791c4fac0e15ef388510217be7f66f" + integrity sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A== + dependencies: + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.2" + eslint-module-utils "^2.3.0" + has "^1.0.3" + lodash "^4.17.11" + minimatch "^3.0.4" + read-pkg-up "^2.0.0" + resolve "^1.9.0" + +eslint-plugin-jsx-a11y@^6.1.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.1.tgz#4ebba9f339b600ff415ae4166e3e2e008831cf0c" + integrity sha512-cjN2ObWrRz0TTw7vEcGQrx+YltMvZoOEx4hWU8eEERDnBIU00OTq7Vr+jA7DFKxiwLNv4tTh5Pq2GUNEa8b6+w== + dependencies: + aria-query "^3.0.0" + array-includes "^3.0.3" + ast-types-flow "^0.0.7" + axobject-query "^2.0.2" + damerau-levenshtein "^1.0.4" + emoji-regex "^7.0.2" + has "^1.0.3" + jsx-ast-utils "^2.0.1" + +eslint-plugin-mocha@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-mocha/-/eslint-plugin-mocha-5.3.0.tgz#cf3eb18ae0e44e433aef7159637095a7cb19b15b" + integrity sha512-3uwlJVLijjEmBeNyH60nzqgA1gacUWLUmcKV8PIGNvj1kwP/CTgAWQHn2ayyJVwziX+KETkr9opNwT1qD/RZ5A== + dependencies: + ramda "^0.26.1" + +eslint-plugin-react@^7.11.0: + version "7.12.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz#b1ecf26479d61aee650da612e425c53a99f48c8c" + integrity sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ== + dependencies: + array-includes "^3.0.3" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.0.1" + object.fromentries "^2.0.0" + prop-types "^15.6.2" + resolve "^1.9.0" + +eslint-restricted-globals@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" + integrity sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc= + +eslint-scope@^4.0.0, eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" +eslint-utils@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" + integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== + +eslint-visitor-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== + +eslint@^5.6.1: + version "5.15.3" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.15.3.tgz#c79c3909dc8a7fa3714fb340c11e30fd2526b8b5" + integrity sha512-vMGi0PjCHSokZxE0NLp2VneGw5sio7SSiDNgIUn2tC0XkWJRNOIoHIg3CliLVfXnJsiHxGAYrkw0PieAu8+KYQ== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.9.1" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^4.0.3" + eslint-utils "^1.3.1" + eslint-visitor-keys "^1.0.0" + espree "^5.0.1" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.7.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^6.2.2" + js-yaml "^3.12.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.11" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^5.5.1" + strip-ansi "^4.0.0" + strip-json-comments "^2.0.1" + table "^5.2.3" + text-table "^0.2.0" + +espree@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" + integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== + dependencies: + acorn "^6.0.7" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" + esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== +esquery@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== + dependencies: + estraverse "^4.0.0" + esrecurse@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" @@ -3358,7 +3586,7 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" -estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= @@ -3447,11 +3675,6 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= - expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -3530,20 +3753,11 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.0, extend@~3.0.2: +extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-1.1.1.tgz#12d7b0db850f7ff7e7081baf4005700060c4600b" - integrity sha1-Etew24UPf/fnCBuvQAVwAGDEYAs= - dependencies: - extend "^3.0.0" - spawn-sync "^1.0.15" - tmp "^0.0.29" - external-editor@^3.0.0, external-editor@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" @@ -3587,11 +3801,6 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= -eyes@0.1.x: - version "0.1.8" - resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" - integrity sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A= - fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" @@ -3602,6 +3811,11 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + fd-slicer@~1.0.0, fd-slicer@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" @@ -3624,7 +3838,7 @@ figgy-pudding@^3.5.1: resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== -figures@^1.3.5, figures@^1.7.0: +figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= @@ -3639,6 +3853,13 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + fill-keys@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/fill-keys/-/fill-keys-1.0.2.tgz#9a8fa36f4e8ad634e3bf6b4f3c8882551452eb20" @@ -3680,20 +3901,20 @@ find-cache-dir@^1.0.0: pkg-dir "^2.0.0" find-cache-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.0.0.tgz#4c1faed59f45184530fb9d7fa123a4d04a98472d" - integrity sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA== + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== dependencies: commondir "^1.0.1" - make-dir "^1.0.0" + make-dir "^2.0.0" pkg-dir "^3.0.0" -find-config@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/find-config/-/find-config-0.3.0.tgz#c4f6b2ae491b2cae3ca8af72401f1ad84cfdd0d9" - integrity sha1-xPayrkkbLK48qK9yQB8a2Ez90Nk= +find-config@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/find-config/-/find-config-1.0.0.tgz#eafa2b9bc07fa9c90e9a0c3ef9cecf1cc800f530" + integrity sha1-6vorm8B/qckOmgw++c7PHMgA9TA= dependencies: - user-home "^1.1.1" + user-home "^2.0.0" find-node-modules@2.0.0: version "2.0.0" @@ -3755,6 +3976,15 @@ findup-sync@^3.0.0: micromatch "^3.0.4" resolve-dir "^1.0.1" +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + flat@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" @@ -3762,6 +3992,11 @@ flat@^4.1.0: dependencies: is-buffer "~2.0.3" +flatted@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916" + integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg== + flora-colossus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/flora-colossus/-/flora-colossus-1.0.0.tgz#54729c361edecee014dd441679e1a37c1d773a45" @@ -3929,6 +4164,11 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + galactus@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/galactus/-/galactus-0.2.1.tgz#cbed2d20a40c1f5679a35908e2b9415733e78db9" @@ -3986,9 +4226,9 @@ get-caller-file@^1.0.1: integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== get-caller-file@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.1.tgz#25835260d3a2b9665fcdbb08cb039a7bbf7011c0" - integrity sha512-SpOZHfz845AH0wJYVuZk2jWDqFmu7Xubsx+ldIpwzy5pDUpu7OJHK7QYNSA2NPlDSKQwM1GFaAkciOWjjW92Sg== + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-folder-size@^2.0.1: version "2.0.1" @@ -4074,7 +4314,7 @@ glob-to-regexp@^0.4.0: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.0.tgz#49bd677b1671022bd10921c3788f23cdebf9c7e6" integrity sha512-fyPCII4vn9Gvjq2U/oDAfP433aiE64cyP/CJjRJcpVGjqqNdioUYn9+r0cSzT1XPwmGAHuTT7iv+rQT8u/YHKQ== -glob@7.1.3, glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.3: +glob@7.1.3, glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== @@ -4121,7 +4361,7 @@ global@^4.3.2: min-document "^2.19.0" process "~0.5.1" -globals@^11.1.0: +globals@^11.1.0, globals@^11.7.0: version "11.11.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== @@ -4160,12 +4400,12 @@ growl@1.10.5, "growl@~> 1.10.0": resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== -handlebars@^4.0.6, handlebars@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.0.tgz#0d6a6f34ff1f63cecec8423aa4169827bf787c3a" - integrity sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w== +handlebars@*, handlebars@^4.0.6, handlebars@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.1.tgz#6e4e41c18ebe7719ae4d38e5aca3d32fa3dd23d3" + integrity sha512-3Zhi6C0euYZL5sM0Zcy7lInLXKQ+YLcF/olbN010mzGQ4XVm50JeyBnMqofHh696GrciGruC7kCcApPDJvVgwA== dependencies: - async "^2.5.0" + neo-async "^2.6.0" optimist "^0.6.1" source-map "^0.6.1" optionalDependencies: @@ -4411,11 +4651,24 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + image-size@^0.5.0: version "0.5.5" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= +import-fresh@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.0.0.tgz#a3d897f420cab0e671236897f75bc14b4885c390" + integrity sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" @@ -4471,26 +4724,6 @@ ini@^1.3.4, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== -inquirer@1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-1.2.3.tgz#4dec6f32f37ef7bb0b2ed3f1d1a5c3f545074918" - integrity sha1-TexvMvN+97sLLtPx0aXD9UUHSRg= - dependencies: - ansi-escapes "^1.1.0" - chalk "^1.0.0" - cli-cursor "^1.0.1" - cli-width "^2.0.0" - external-editor "^1.1.0" - figures "^1.3.5" - lodash "^4.3.0" - mute-stream "0.0.6" - pinkie-promise "^2.0.0" - run-async "^2.2.0" - rx "^4.1.0" - string-width "^1.0.1" - strip-ansi "^3.0.0" - through "^2.3.6" - inquirer@6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.0.tgz#51adcd776f661369dc1e894859c2560a224abdd8" @@ -4510,7 +4743,7 @@ inquirer@6.2.0: strip-ansi "^4.0.0" through "^2.3.6" -inquirer@^6.2.0: +inquirer@^6.2.0, inquirer@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.2.tgz#46941176f65c9eb20804627149b743a218f25406" integrity sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA== @@ -4861,7 +5094,7 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -isstream@0.1.x, isstream@~0.1.2: +isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= @@ -4946,7 +5179,7 @@ js-yaml@3.12.0: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^3.10.0, js-yaml@^3.11.0, js-yaml@^3.7.0: +js-yaml@^3.10.0, js-yaml@^3.11.0, js-yaml@^3.12.0, js-yaml@^3.7.0: version "3.12.2" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.2.tgz#ef1d067c5a9d9cb65bd72f285b5d8105c77f14fc" integrity sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q== @@ -4984,6 +5217,11 @@ json-schema@0.2.3: resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -5030,6 +5268,13 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +jsx-ast-utils@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" + integrity sha1-6AGxs5mF4g//yHtA43SAgOLcrH8= + dependencies: + array-includes "^3.0.3" + just-extend@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.0.2.tgz#f3f47f7dfca0f989c55410a7ebc8854b07108afc" @@ -5085,6 +5330,14 @@ lcov-parse@^0.0.10: resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" integrity sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM= +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + listr-silent-renderer@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" @@ -5270,12 +5523,17 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "~3.0.0" +lodash.unescape@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" + integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= + lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@4.17.11, lodash@^4.13.0, lodash@^4.16.2, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0: +lodash@4.17.11, lodash@^4.13.0, lodash@^4.16.2, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== @@ -5323,7 +5581,7 @@ longest@^1.0.1: resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= -loose-envify@^1.0.0: +loose-envify@^1.0.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -5371,9 +5629,9 @@ macos-alias@~0.2.5: nan "^2.4.0" macos-release@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.0.0.tgz#7dddf4caf79001a851eb4fba7fb6034f251276ab" - integrity sha512-iCM3ZGeqIzlrH7KxYK+fphlJpCCczyHXc+HhRVbEu9uNTCrzYJjvvtefzeKTCVHd5AP/aD/fzC80JZ4ZP+dQ/A== + version "2.1.0" + resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.1.0.tgz#c87935891fbeb0dba7537913fc66f469fee9d662" + integrity sha512-8TCbwvN1mfNxbBv0yBtfyIFMo3m1QsNbKHv7PYIp/abRBKVQBXN7ecu3aeGGgT18VC/Tf397LBDGZF9KBGJFFw== make-dir@^1.0.0, make-dir@^1.3.0: version "1.3.0" @@ -5383,9 +5641,9 @@ make-dir@^1.0.0, make-dir@^1.3.0: pify "^3.0.0" make-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.0.0.tgz#648a648c64fe460621461997f7ae2b40d1f65c7e" - integrity sha512-DCZvJtCxpfY3a0Onp57Jm0PY9ggZENfVtBMsPdXFZDrMSHU5kYCMJkJesLr0/UrFdJKuDUYoGxCpc93n4F3Z8g== + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== dependencies: pify "^4.0.1" semver "^5.6.0" @@ -5444,12 +5702,12 @@ media-typer@0.3.0: integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= mem@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.1.0.tgz#aeb9be2d21f47e78af29e4ac5978e8afa2ca5b8a" - integrity sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg== + version "4.2.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.2.0.tgz#5ee057680ed9cb8dad8a78d820f9a8897a102025" + integrity sha512-5fJxa68urlY0Ir8ijatKa3eRz5lwXnRCTvo9+TbTGAuTFJOwpGcY0X05moBd0nW45965Njt4CDI2GFQoG8DvqA== dependencies: map-age-cleaner "^0.1.1" - mimic-fn "^1.0.0" + mimic-fn "^2.0.0" p-is-promise "^2.0.0" memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1: @@ -5557,6 +5815,11 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== +mimic-fn@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.0.0.tgz#0913ff0b121db44ef5848242c38bbb35d44cabde" + integrity sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA== + min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" @@ -5714,20 +5977,15 @@ murmur-32@^0.1.0: fmix "^0.1.0" imul "^1.0.0" -mute-stream@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.6.tgz#48962b19e169fd1dfc240b3f1e7317627bbc47db" - integrity sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s= - mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= nan@^2.3.2, nan@^2.4.0, nan@^2.9.2: - version "2.12.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552" - integrity sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw== + version "2.13.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.1.tgz#a15bee3790bde247e8f38f1d446edcdaeb05f2dd" + integrity sha512-I6YB/YEuDeUZMmhscXKxGgZlFnhsn5y0hgOZBadkzfTRrZBtJDZeg6eQf7PYMIEclwmorTKK8GztsyOUSVBREA== nanomatch@^1.2.9: version "1.2.13" @@ -5751,6 +6009,11 @@ natives@^1.1.0: resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.6.tgz#a603b4a498ab77173612b9ea1acdec4d980f00bb" integrity sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA== +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + needle@^2.2.1: version "2.2.4" resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" @@ -5765,7 +6028,7 @@ negotiator@0.6.1: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= -neo-async@^2.5.0: +neo-async@^2.5.0, neo-async@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== @@ -5887,10 +6150,10 @@ node-pre-gyp@^0.10.0: semver "^5.3.0" tar "^4" -node-releases@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.8.tgz#32a63fff63c5e51b7e0f540ac95947d220fc6862" - integrity sha512-gQm+K9mGCiT/NXHy+V/ZZS1N/LOaGGqRAAJJs3X9Ah1g+CIbRcBgNyoNYQ+SEtcyAtB9KqDruu+fF7nWjsqRaA== +node-releases@^1.1.11: + version "1.1.11" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.11.tgz#9a0841a4b0d92b7d5141ed179e764f42ad22724a" + integrity sha512-8v1j5KfP+s5WOTa1spNUAOfreajQPN12JXbRR0oDE+YrJBQCXBnNqUDj27EKpPLOoSiU3tKi3xGPB+JaOdUEQQ== dependencies: semver "^5.3.0" @@ -6059,7 +6322,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.0.1, object-assign@^4.1.0: +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -6090,7 +6353,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@4.1.0: +object.assign@4.1.0, object.assign@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== @@ -6100,6 +6363,26 @@ object.assign@4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" +object.entries@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" + integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has "^1.0.3" + +object.fromentries@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab" + integrity sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA== + dependencies: + define-properties "^1.1.2" + es-abstract "^1.11.0" + function-bind "^1.1.1" + has "^1.0.1" + object.getownpropertydescriptors@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" @@ -6134,11 +6417,6 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= - onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" @@ -6147,9 +6425,9 @@ onetime@^2.0.0: mimic-fn "^1.0.0" opn@^5.0.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.4.0.tgz#cb545e7aab78562beb11aa3bfabc7042e1761035" - integrity sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw== + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== dependencies: is-wsl "^1.1.0" @@ -6161,14 +6439,26 @@ optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" +optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + ora@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-3.1.0.tgz#dbedd8c03b5d017fb67083e87ee52f5ec89823ed" - integrity sha512-vRBPaNCclUi8pUxRF/G8+5qEQkc6EgzKK1G2ZNJUIGu088Un5qIxFXeDgymvPRM9nmrcUOGzQgS1Vmtz+NtlMw== + version "3.2.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-3.2.0.tgz#67e98a7e11f7f0ac95deaaaf11bb04de3d09e481" + integrity sha512-XHMZA5WieCbtg+tu0uPF8CjvwQdNzKCX6BVh3N6GFsEXH40mTk5dsw/ya1lBTUGJslcEFJFQ8cBhOgkkZXQtMA== dependencies: chalk "^2.4.2" cli-cursor "^2.1.0" - cli-spinners "^1.3.1" + cli-spinners "^2.0.0" log-symbols "^2.2.0" strip-ansi "^5.0.0" wcwidth "^1.0.1" @@ -6200,12 +6490,7 @@ os-name@^3.0.0: macos-release "^2.0.0" windows-release "^3.1.0" -os-shim@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" - integrity sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc= - -os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= @@ -6250,9 +6535,9 @@ p-limit@^1.1.0: p-try "^1.0.0" p-limit@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.1.0.tgz#1d5a0d20fb12707c758a655f6bbc4386b5930d68" - integrity sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g== + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" + integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== dependencies: p-try "^2.0.0" @@ -6281,9 +6566,9 @@ p-try@^1.0.0: integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= p-try@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" - integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.1.0.tgz#c1a0f1030e97de018bb2c718929d2af59463e505" + integrity sha512-H2RyIJ7+A3rjkwKC2l5GGtU4H1vkxKCAGsWasNVd0Set+6i4znxbWy6/j16YDPJDWxhsgZiKAstMEP8wCdSpjA== package-hash@^3.0.0: version "3.0.0" @@ -6306,9 +6591,9 @@ package-json@^4.0.0: semver "^5.1.0" pako@~1.0.5: - version "1.0.8" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.8.tgz#6844890aab9c635af868ad5fecc62e8acbba3ea4" - integrity sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA== + version "1.0.10" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" + integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== parallel-transform@^1.1.0: version "1.1.0" @@ -6326,6 +6611,13 @@ param-case@2.1.x: dependencies: no-case "^2.2.0" +parent-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.0.tgz#df250bdc5391f4a085fb589dad761f5ad6b865b5" + integrity sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA== + dependencies: + callsites "^3.0.0" + parse-asn1@^5.0.0: version "5.1.4" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc" @@ -6414,7 +6706,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.1: +path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= @@ -6548,11 +6840,6 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -pkginfo@0.3.x: - version "0.3.1" - resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.3.1.tgz#5b29f6a81f70717142e09e765bbeab97b4f81e21" - integrity sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE= - plist@^3.0.0, plist@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c" @@ -6567,6 +6854,11 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + prepend-http@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" @@ -6640,6 +6932,15 @@ promise@~1.3.0: dependencies: is-promise "~1" +prop-types@^15.6.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + proxy-addr@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" @@ -6744,6 +7045,11 @@ querystring@0.2.0, querystring@^0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +ramda@^0.26.1: + version "0.26.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" + integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ== + random-path@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/random-path/-/random-path-0.1.1.tgz#f8f4d36f75a134ca15fd39c7d7505fbf163b634c" @@ -6797,6 +7103,11 @@ rcedit@^1.0.0: resolved "https://registry.yarnpkg.com/rcedit/-/rcedit-1.1.1.tgz#79321893357e74f79546617d792c572b38d2f7f0" integrity sha512-6NjOhOpkvbc/gpMEfk2hpXuWyHfbLFN8as5jx3jf4bhELvouRoYvc8d/W3NVVPwEBF1ICfbpwp1oRm8OJ2WDWw== +react-is@^16.8.1: + version "16.8.4" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.4.tgz#90f336a68c3a29a096a3d648ab80e87ec61482a2" + integrity sha512-PVadd+WaUDOAciICm/J1waJaSvgq+4rHE/K70j0PFqKhkTBsPv/82UGQJNXAngz1fOQLLxI6z1sEDmJDQhCTAA== + read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -6862,9 +7173,9 @@ read-pkg@^3.0.0: util-deprecate "~1.0.1" readable-stream@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.1.1.tgz#ed6bbc6c5ba58b090039ff18ce670515795aeb06" - integrity sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA== + version "3.2.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.2.0.tgz#de17f229864c120a9f56945756e4f32c4045245d" + integrity sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -6909,10 +7220,10 @@ reflect-metadata@^0.1.12: resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== -regenerate-unicode-properties@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" - integrity sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw== +regenerate-unicode-properties@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz#7b38faa296252376d363558cfbda90c9ce709662" + integrity sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ== dependencies: regenerate "^1.4.0" @@ -6956,17 +7267,22 @@ regexp-tree@^0.1.0: resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.5.tgz#7cd71fca17198d04b4176efd79713f2998009397" integrity sha512-nUmxvfJyAODw+0B13hj8CFVAxhe7fDEAgJgaotBu3nnR+IgGgZq59YedJP5VYTlkEfqjuK6TuRpnymKdatLZfQ== +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + regexpu-core@^4.1.3, regexpu-core@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.4.0.tgz#8d43e0d1266883969720345e70c275ee0aec0d32" - integrity sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA== + version "4.5.4" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" + integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ== dependencies: regenerate "^1.4.0" - regenerate-unicode-properties "^7.0.0" + regenerate-unicode-properties "^8.0.2" regjsgen "^0.5.0" regjsparser "^0.6.0" unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.0.2" + unicode-match-property-value-ecmascript "^1.1.0" registry-auth-token@^3.0.1: version "3.3.2" @@ -7076,6 +7392,11 @@ require-main-filename@^1.0.1: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= +requireindex@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef" + integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww== + resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" @@ -7101,7 +7422,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== @@ -7115,14 +7436,6 @@ resolve@~1.8.1: dependencies: path-parse "^1.0.5" -restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" - integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE= - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" - restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -7141,14 +7454,14 @@ right-pad@^1.0.1: resolved "https://registry.yarnpkg.com/right-pad/-/right-pad-1.0.1.tgz#8ca08c2cbb5b55e74dafa96bf7fd1a27d568c8d0" integrity sha1-jKCMLLtbVedNr6lr9/0aJ9VoyNA= -rimraf@2, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@~2.6.2: +rimraf@2, rimraf@2.6.3, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@~2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: glob "^7.1.3" -rimraf@~2.2.6, rimraf@~2.2.8: +rimraf@~2.2.8: version "2.2.8" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI= @@ -7175,11 +7488,6 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rx@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" - integrity sha1-pfE/957zt0D+MKqAP7CfmIBdR4I= - rxjs@^6.1.0, rxjs@^6.3.1, rxjs@^6.3.3, rxjs@^6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" @@ -7257,11 +7565,16 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== +semver@5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== + semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -7387,12 +7700,12 @@ single-line-log@^1.1.2: string-width "^1.0.1" sinon@^7.1.1: - version "7.2.5" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.2.5.tgz#1a4e4a819b59ed1dc0054b469981c72849fab43f" - integrity sha512-1c2KK6g5NQr9XNYCEcUbeFtBpKZD1FXEw0VX7gNhWUBtkchguT2lNdS7XmS7y64OpQWfSNeeV/f8py3NNcQ63Q== + version "7.2.7" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.2.7.tgz#ee90f83ce87d9a6bac42cf32a3103d8c8b1bfb68" + integrity sha512-rlrre9F80pIQr3M36gOdoCEWzFAMDgHYD8+tocqOw+Zw9OZ8F84a80Ds69eZfcjnzDqqG88ulFld0oin/6rG/g== dependencies: - "@sinonjs/commons" "^1.3.0" - "@sinonjs/formatio" "^3.1.0" + "@sinonjs/commons" "^1.3.1" + "@sinonjs/formatio" "^3.2.1" "@sinonjs/samsam" "^3.2.0" diff "^3.5.0" lolex "^3.1.0" @@ -7409,6 +7722,15 @@ slice-ansi@0.0.4: resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -7455,10 +7777,10 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.4, source-map-support@^0.5.6, source-map-support@^0.5.9, source-map-support@~0.5.9: - version "0.5.10" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c" - integrity sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ== +source-map-support@^0.5.4, source-map-support@^0.5.6, source-map-support@^0.5.9, source-map-support@~0.5.10: + version "0.5.11" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.11.tgz#efac2ce0800355d026326a0ca23e162aeac9a4e2" + integrity sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -7487,14 +7809,6 @@ spawn-rx@^3.0.0: lodash.assign "^4.2.0" rxjs "^6.3.1" -spawn-sync@^1.0.15: - version "1.0.15" - resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476" - integrity sha1-sAeZVX63+wyDdsKdROih6mfldHY= - dependencies: - concat-stream "^1.4.7" - os-shim "^0.1.2" - spawn-wrap@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.4.2.tgz#cff58e73a8224617b6561abdc32586ea0c82248c" @@ -7572,11 +7886,6 @@ ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -stack-trace@0.0.x: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= - static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -7654,6 +7963,15 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" @@ -7687,12 +8005,12 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.0.0.tgz#f78f68b5d0866c20b2c9b8c61b5298508dc8756f" - integrity sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow== +strip-ansi@^5.0.0, strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: - ansi-regex "^4.0.0" + ansi-regex "^4.1.0" strip-bom@3.0.0, strip-bom@^3.0.0: version "3.0.0" @@ -7723,7 +8041,7 @@ strip-indent@^2.0.0: resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= -strip-json-comments@2.0.1, strip-json-comments@~2.0.1: +strip-json-comments@2.0.1, strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= @@ -7771,6 +8089,16 @@ symbol-observable@^1.1.0: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== +table@^5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/table/-/table-5.2.3.tgz#cde0cc6eb06751c009efab27e8c820ca5b67b7f2" + integrity sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ== + dependencies: + ajv "^6.9.1" + lodash "^4.17.11" + slice-ansi "^2.1.0" + string-width "^3.0.0" + tapable@^1.0.0, tapable@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.1.tgz#4d297923c5a72a42360de2ab52dadfaaec00018e" @@ -7798,14 +8126,6 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.2" -temp@0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" - integrity sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k= - dependencies: - os-tmpdir "^1.0.0" - rimraf "~2.2.6" - temp@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.0.tgz#61391795a11bd9738d4c4d7f55f012cb8f55edaa" @@ -7835,13 +8155,13 @@ terser-webpack-plugin@^1.1.0: worker-farm "^1.5.2" terser@^3.16.1: - version "3.16.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-3.16.1.tgz#5b0dd4fa1ffd0b0b43c2493b2c364fd179160493" - integrity sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow== + version "3.17.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2" + integrity sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ== dependencies: - 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" test-exclude@^5.1.0: version "5.1.0" @@ -7853,6 +8173,11 @@ test-exclude@^5.1.0: read-pkg-up "^4.0.0" require-main-filename "^1.0.1" +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + throttleit@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz#cfedf88e60c00dd9697b61fdd2a8343a9b680eaf" @@ -7911,13 +8236,6 @@ tmp@0.0.33, tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@^0.0.29: - version "0.0.29" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.29.tgz#f25125ff0dd9da3ccb0c2dd371ee1288bb9128c0" - integrity sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA= - dependencies: - os-tmpdir "~1.0.1" - tn1150@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/tn1150/-/tn1150-0.1.0.tgz#673503d24d56b87de8b8c77fee3fc0853d59a18d" @@ -8005,9 +8323,9 @@ truncate-utf8-bytes@^1.0.0: utf8-byte-length "^1.0.1" ts-node@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.0.2.tgz#9ecdf8d782a0ca4c80d1d641cbb236af4ac1b756" - integrity sha512-MosTrinKmaAcWgO8tqMjMJB22h+sp3Rd1i4fdoWY4mhBDekOwIAKI/bzmRi7IcbCmjquccYg2gcF6NBkLgr0Tw== + version "8.0.3" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.0.3.tgz#aa60b836a24dafd8bf21b54766841a232fdbc641" + integrity sha512-2qayBA4vdtVRuDo11DEFSsD/SFsBXQBRZZhbRGSIkmYmVkWjULn/GGMdG10KVqkaGndljfaTD8dKjWgcejO8YA== dependencies: arg "^4.1.0" diff "^3.1.0" @@ -8035,9 +8353,9 @@ tslint-config-airbnb@^5.11.0: tslint-microsoft-contrib "~5.2.1" tslint-consistent-codestyle@^1.14.1: - version "1.15.0" - resolved "https://registry.yarnpkg.com/tslint-consistent-codestyle/-/tslint-consistent-codestyle-1.15.0.tgz#a3acf8d0a3ca0dc7d1285705102ba1fe4a17c4cb" - integrity sha512-6BNDBbZh2K0ibRXe70Mkl9gfVttxQ3t3hqV1BRDfpIcjrUoOgD946iH4SrXp+IggDgeMs3dJORjD5tqL5j4jXg== + version "1.15.1" + resolved "https://registry.yarnpkg.com/tslint-consistent-codestyle/-/tslint-consistent-codestyle-1.15.1.tgz#a0c5cd5a5860d40b659c490d8013c5732e02af8c" + integrity sha512-38Y3Dz4zcABe/PlPAQSGNEWPGVq0OzcIQR7SEU6dNujp/SgvhxhJOhIhI9gY4r0I3/TNtvVQwARWor9O9LPZWg== dependencies: "@fimbul/bifrost" "^0.17.0" tslib "^1.7.1" @@ -8060,9 +8378,9 @@ tslint-microsoft-contrib@~5.2.1: tsutils "^2.27.2 <2.29.0" tslint@^5.13.0: - version "5.13.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.13.0.tgz#239a2357c36b620d72d86744754b6fc088a25359" - integrity sha512-ECOOQRxXCYnUUePG5h/+Z1Zouobk3KFpIHA9aKBB/nnMxs97S1JJPDGt5J4cGm1y9U9VmVlfboOxA8n1kSNzGw== + version "5.14.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.14.0.tgz#be62637135ac244fc9b37ed6ea5252c9eba1616e" + integrity sha512-IUla/ieHVnB8Le7LdQFRGlVJid2T/gaJe5VkjzRVSRR6pA2ODYrnfR1hmxi+5+au9l50jBwpbBL34txgv4NnTQ== dependencies: babel-code-frame "^6.22.0" builtin-modules "^1.1.1" @@ -8076,14 +8394,7 @@ tslint@^5.13.0: resolve "^1.3.2" semver "^5.3.0" tslib "^1.8.0" - tsutils "^2.27.2" - -tsutils@^2.27.2, tsutils@^2.29.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - dependencies: - tslib "^1.8.1" + tsutils "^2.29.0" "tsutils@^2.27.2 <2.29.0": version "2.28.0" @@ -8092,10 +8403,17 @@ tsutils@^2.27.2, tsutils@^2.29.0: dependencies: tslib "^1.8.1" -tsutils@^3.0.0, tsutils@^3.5.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.8.0.tgz#7a3dbadc88e465596440622b65c04edc8e187ae5" - integrity sha512-XQdPhgcoTbCD8baXC38PQ0vpTZ8T3YrE+vR66YIj/xvDt1//8iAhafpIT/4DmvzzC1QFapEImERu48Pa01dIUA== +tsutils@^2.29.0: + version "2.29.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== + dependencies: + tslib "^1.8.1" + +tsutils@^3.0.0, tsutils@^3.5.0, tsutils@^3.7.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.9.1.tgz#2a40dc742943c71eca6d5c1994fcf999956be387" + integrity sha512-hrxVtLtPqQr//p8/msPT1X1UYXUjizqSit5d9AQ5k38TcV38NyecL5xODNxa73cLe/5sdiJ+w1FqzDhRBA/anA== dependencies: tslib "^1.8.1" @@ -8116,6 +8434,13 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" @@ -8173,11 +8498,11 @@ typescript@3.3.3333: integrity sha512-JjSKsAfuHBE/fB2oZ8NxtRTk5iGcg6hkYXMnZ3Wc+b2RSqejEqTaem11mHASMnFilHrax3sLK0GDzcJrekZYLw== uglify-js@3.4.x, uglify-js@^3.1.4: - version "3.4.9" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" - integrity sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q== + version "3.4.10" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" + integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== dependencies: - commander "~2.17.1" + commander "~2.19.0" source-map "~0.6.1" undefsafe@^2.0.2: @@ -8200,15 +8525,15 @@ unicode-match-property-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" -unicode-match-property-value-ecmascript@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4" - integrity sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ== +unicode-match-property-value-ecmascript@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" + integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0" - integrity sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg== + version "1.0.5" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" + integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== union-value@^1.0.0: version "1.0.0" @@ -8277,9 +8602,9 @@ unzip-response@^2.0.1: integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= upath@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" - integrity sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw== + version "1.1.2" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" + integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== update-notifier@^2.5.0: version "2.5.0" @@ -8347,10 +8672,12 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -user-home@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" - integrity sha1-K1viOjK2Onyd640PKNSFcko98ZA= +user-home@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" + integrity sha1-nHC/2Babwdy/SGBODwS4tJzenp8= + dependencies: + os-homedir "^1.0.0" username@^4.0.0: version "4.1.0" @@ -8458,9 +8785,9 @@ webidl-conversions@^4.0.2: integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== webpack-dev-middleware@^3.1.3: - version "3.6.0" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.6.0.tgz#71f1b04e52ff8d442757af2be3a658237d53a3e5" - integrity sha512-oeXA3m+5gbYbDBGo4SvKpAHJJEGMoekUbHgo1RK7CP1sz7/WOSeu/dWJtSTk+rzDCLkPwQhGocgIq6lQqOyOwg== + version "3.6.1" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.6.1.tgz#91f2531218a633a99189f7de36045a331a4b9cd4" + integrity sha512-XQmemun8QJexMEvNFbD2BIg4eSKrmSIMrTfnl2nql2Sc6OGAYFyb8rwuYrCjl/IiEYYuyTEiimMscu7EXji/Dw== dependencies: memory-fs "^0.4.1" mime "^2.3.1" @@ -8501,14 +8828,14 @@ webpack-sources@^1.1.0, webpack-sources@^1.3.0: source-map "~0.6.1" webpack@^4.1.4: - version "4.29.5" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.29.5.tgz#52b60a7b0838427c3a894cd801a11dc0836bc79f" - integrity sha512-DuWlYUT982c7XVHodrLO9quFbNpVq5FNxLrMUfYUTlgKW0+yPimynYf1kttSQpEneAL1FH3P3OLNgkyImx8qIQ== - dependencies: - "@webassemblyjs/ast" "1.8.3" - "@webassemblyjs/helper-module-context" "1.8.3" - "@webassemblyjs/wasm-edit" "1.8.3" - "@webassemblyjs/wasm-parser" "1.8.3" + version "4.29.6" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.29.6.tgz#66bf0ec8beee4d469f8b598d3988ff9d8d90e955" + integrity sha512-MwBwpiE1BQpMDkbnUUaW6K8RFZjljJHArC6tWQJoFm0oQtfoSebtg4Y7/QHnJ/SddtjYLHaKGX64CFjG5rehJw== + dependencies: + "@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" @@ -8572,24 +8899,6 @@ windows-release@^3.1.0: dependencies: execa "^0.10.0" -winston@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/winston/-/winston-2.1.0.tgz#34688215cc8dbb784838b9aa626e73aee44fe4b6" - integrity sha1-NGiCFcyNu3hIOLmqYm5zruRP5LY= - dependencies: - async "~1.0.0" - colors "1.0.x" - cycle "1.0.x" - eyes "0.1.x" - isstream "0.1.x" - pkginfo "0.3.x" - stack-trace "0.0.x" - -word-wrap@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.1.0.tgz#356153d61d10610d600785c5d701288e0ae764a6" - integrity sha1-NWFT1h0QYQ1gB4XF1wEojgrnZKY= - word-wrap@^1.0.3, word-wrap@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -8600,6 +8909,11 @@ wordwrap@~0.0.2: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + worker-farm@^1.5.2: version "1.6.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" @@ -8637,6 +8951,13 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.4.2: imurmurhash "^0.1.4" signal-exit "^3.0.2" +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + ws@^5.2.0: version "5.2.2" resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" @@ -8692,9 +9013,9 @@ xtend@~2.1.1: object-keys "~0.4.0" xterm@^3.3.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/xterm/-/xterm-3.11.0.tgz#2c10da3e965db9170430aa7b68f8965de3ff004d" - integrity sha512-VB9+s2Fhig31pNBkbxPnz+/wdCvxdQ6JQ0HZmWDwpULV8iAggzxoyUonB4FR+WW3lj0LNVb/ZaD64rxbw+HB4A== + version "3.12.0" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-3.12.0.tgz#74cc54013140cf0fd38a05a0d5d49e013e8a53bd" + integrity sha512-U5w1NJdrqAtnNju4W05uOxLzNgMD1sk0AnIkZ//Wa7xRdQTi9Dl1qkPdAaxWJ1a7A8xzNM4ogrX/4oSVl15qOw== "y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: version "4.0.0"