diff --git a/.circleci/config.yml b/.circleci/config.yml index 90f736fc211..a783c8641a9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -96,7 +96,7 @@ jobs: destination: expected-screenshots - store_artifacts: path: public/e2e-test/screenShots/theOutput - destination: output-screenshots + destination: output-screenshots codespell: docker: @@ -653,7 +653,7 @@ workflows: - mysql-integration-test - postgres-integration-test - build-oss-msi - filters: *filter-only-master + filters: *filter-only-master - grafana-docker-master: requires: - build-all diff --git a/package.json b/package.json index 7e21e57d440..ffe32b14008 100644 --- a/package.json +++ b/package.json @@ -19,14 +19,11 @@ "@emotion/core": "10.0.10", "@rtsao/plugin-proposal-class-properties": "7.0.1-patch.1", "@types/angular": "1.6.54", - "@types/chalk": "2.2.0", "@types/classnames": "2.2.7", "@types/clipboard": "2.0.1", - "@types/commander": "2.12.2", "@types/d3": "4.13.1", "@types/enzyme": "3.9.0", "@types/expect-puppeteer": "3.3.1", - "@types/inquirer": "0.0.43", "@types/jest": "24.0.13", "@types/jquery": "1.10.35", "@types/lodash": "4.14.123", @@ -49,16 +46,13 @@ "babel-jest": "24.8.0", "babel-loader": "8.0.5", "babel-plugin-angularjs-annotate": "0.10.0", - "chalk": "2.4.2", "clean-webpack-plugin": "2.0.0", - "concurrently": "4.1.0", "css-loader": "2.1.1", "enzyme": "3.9.0", "enzyme-adapter-react-16": "1.11.2", "enzyme-to-json": "3.3.5", "es6-promise": "3.3.1", "es6-shim": "0.35.5", - "execa": "1.0.0", "expect-puppeteer": "4.1.1", "expect.js": "0.2.0", "expose-loader": "0.7.5", @@ -83,7 +77,6 @@ "html-webpack-harddisk-plugin": "1.0.1", "html-webpack-plugin": "3.2.0", "husky": "1.3.1", - "inquirer": "6.2.2", "jest": "24.8.0", "jest-date-mock": "1.0.7", "lint-staged": "8.1.5", @@ -98,7 +91,6 @@ "node-sass": "4.11.0", "npm": "6.9.0", "optimize-css-assets-webpack-plugin": "5.0.1", - "ora": "3.2.0", "phantomjs-prebuilt": "2.1.16", "pixelmatch": "4.0.2", "pngjs": "3.4.0", @@ -115,8 +107,6 @@ "rimraf": "2.6.3", "sass-lint": "1.12.1", "sass-loader": "7.1.0", - "semver": "5.7.0", - "simple-git": "^1.112.0", "sinon": "1.17.6", "style-loader": "0.23.1", "systemjs": "0.20.19", @@ -140,9 +130,9 @@ }, "scripts": { "dev": "webpack --progress --colors --mode development --config scripts/webpack/webpack.dev.js", - "start": "npm run cli -- core:start --watchTheme", - "start:hot": "npm run cli -- core:start --hot --watchTheme", - "start:ignoreTheme": "npm run cli -- core:start --hot", + "start": "grafana-toolkit core:start --watchTheme", + "start:hot": "grafana-toolkit core:start --hot --watchTheme", + "start:ignoreTheme": "grafana-toolkit core:start --hot", "watch": "yarn start -d watch,start core:start --watchTheme ", "build": "grunt build", "test": "grunt test", @@ -153,16 +143,15 @@ "api-tests": "jest --notify --watch --config=devenv/e2e-api-tests/jest.js", "storybook": "cd packages/grafana-ui && yarn storybook", "storybook:build": "cd packages/grafana-ui && yarn storybook:build", - "themes:generate": "ts-node --project ./scripts/cli/tsconfig.json ./scripts/cli/generateSassVariableFiles.ts", "prettier:check": "prettier --list-different \"**/*.{ts,tsx,scss}\"", "prettier:write": "prettier --list-different \"**/*.{ts,tsx,scss}\" --write", - "cli": "ts-node --project ./scripts/cli/tsconfig.json ./scripts/cli/index.ts", "gui:tslint": "tslint -c ./packages/grafana-ui/tslint.json --project ./packages/grafana-ui/tsconfig.json", - "gui:build": "npm run cli -- gui:build", - "gui:releasePrepare": "npm run cli -- gui:release", + "gui:build": "grafana-toolkit gui:build", + "gui:releasePrepare": "grafana-toolkit gui:release", "gui:publish": "cd packages/grafana-ui/dist && npm publish --access public", - "gui:release": "npm run cli -- gui:release -p --createVersionCommit", - "precommit": "npm run cli -- precommit" + "gui:release": "grafana-toolkit gui:release -p --createVersionCommit", + "precommit": "grafana-toolkit precommit", + "themes:generate": "ts-node --project ./scripts/cli/tsconfig.json ./scripts/cli/generateSassVariableFiles.ts" }, "husky": { "hooks": { diff --git a/packages/grafana-toolkit/CHANGELOG.md b/packages/grafana-toolkit/CHANGELOG.md new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/grafana-toolkit/README.md b/packages/grafana-toolkit/README.md new file mode 100644 index 00000000000..5655afcb2ad --- /dev/null +++ b/packages/grafana-toolkit/README.md @@ -0,0 +1,52 @@ +# Grafana Toolkit + +Make sure to run `yarn install` before trying anything! Otherwise you may see unknown command grafana-toolkit and spend a while tracking that down. + +## Internal development +For development use `yarn link`. First, navigate to `packages/grafana-toolkit` and run `yarn link`. Then, in your project use `yarn link @grafana/toolkit` to use linked version. + +## Grafana extensions development with grafana-toolkit overview + +### Typescript +To configure Typescript create `tsconfig.json` file in the root dir of your app. grafana-toolkit comes with default tsconfig located in `packages/grafana-toolkit/src/config/tsconfig.plugin.ts`. In order for Typescript to be able to pickup your source files you need to extend that config as follows: + +```json +{ + "extends": "./node_modules/@grafana/toolkit/src/config/tsconfig.plugin.json", + "include": ["src"], + "compilerOptions": { + "rootDir": "./src", + "typeRoots": ["./node_modules/@types"] + } +} +``` + +### TSLint +grafana-toolkit comes with default config for TSLint, that's located in `packages/grafana-toolkit/src/config/tslint.plugin.ts`. As for now there is now way to customise TSLint config. + +### Tests +grafana-toolkit comes with Jest as a test runner. It runs tests according to common config locted in `packages/grafana-toolkit/src/config/jest.plugin.config.ts`. + +For now the config is not extendable, but our goal is to enable custom jest config via jest.config or package.json file. This might be required in the future if you want to use i.e. `enzyme-to-json` snapshots serializer. For that particular serializer we can also utilise it's API and add initialisation in the setup files (https://github.com/adriantoine/enzyme-to-json#serializer-in-unit-tests). We need to test that approach first. + +#### Jest setup +We are not opinionated about tool used for implmenting tests. Internally at Grafana we use Enzyme. If you want to configure Enzyme as a testing utility, you need to configure enzyme-adapter-react. To do so, you need to create `[YOUR_APP]/config/jest-setup.ts` file that will provide React/Enzyme setup. Simply copy following code into that file to get Enzyme working with React: + +```ts +import { configure } from 'enzyme'; +import Adapter from 'enzyme-adapter-react-16'; + +configure({ adapter: new Adapter() }); +``` + +grafana-toolkit will use that file as Jest's setup file. You can also setup Jest with shims of your needs by creating `jest-shim.ts` file in the same directory: `[YOUR_APP]/config/jest-shim.ts` + +Adidtionaly, you can also provide additional Jest config via package.json file. For more details please refer to [Jest docs](https://jest-bot.github.io/jest/docs/configuration.html#verbose-boolean). Currently we support following properties: +- [`snapshotSerializers`](https://jest-bot.github.io/jest/docs/configuration.html#snapshotserializers-array-string) + +## Prettier [todo] + +## Development mode [todo] +TODO +- Enable rollup watch on extension sources + diff --git a/packages/grafana-toolkit/bin/grafana-toolkit.dist.js b/packages/grafana-toolkit/bin/grafana-toolkit.dist.js new file mode 100755 index 00000000000..d6498f3d3a4 --- /dev/null +++ b/packages/grafana-toolkit/bin/grafana-toolkit.dist.js @@ -0,0 +1,5 @@ +#!/usr/bin/env node + +// This bin is used for cli installed from npm + +require('../src/cli/index.js').run(); diff --git a/packages/grafana-toolkit/bin/grafana-toolkit.js b/packages/grafana-toolkit/bin/grafana-toolkit.js new file mode 100755 index 00000000000..6cab0391954 --- /dev/null +++ b/packages/grafana-toolkit/bin/grafana-toolkit.js @@ -0,0 +1,13 @@ +#!/usr/bin/env node + +var path = require('path') ; + +// This bin is used for cli executed internally + +var tsProjectPath = path.resolve(__dirname, '../tsconfig.json'); + +require('ts-node').register({ + project: tsProjectPath +}); + +require('../src/cli/index.ts').run(true); diff --git a/packages/grafana-toolkit/package.json b/packages/grafana-toolkit/package.json new file mode 100644 index 00000000000..e602f60dcf1 --- /dev/null +++ b/packages/grafana-toolkit/package.json @@ -0,0 +1,71 @@ +{ + "name": "@grafana/toolkit", + "version": "6.3.0-alpha.2", + "description": "Grafana Toolkit", + "keywords": [ + "typescript", + "react", + "react-component" + ], + "bin": { + "grafana-toolkit": "./bin/grafana-toolkit.js" + }, + "scripts": { + "tslint": "tslint -c tslint.json --project tsconfig.json", + "typecheck": "tsc --noEmit", + "precommit": "npm run tslint & npm run typecheck", + "clean": "rimraf ./dist ./compiled" + }, + "author": "Grafana Labs", + "license": "Apache-2.0", + "dependencies": { + "@types/execa": "^0.9.0", + "@types/inquirer": "^6.0.3", + "@types/jest": "24.0.13", + "@types/jest-cli": "^23.6.0", + "@types/node": "^12.0.4", + "@types/prettier": "^1.16.4", + "@types/semver": "^6.0.0", + "axios": "0.19.0", + "chalk": "^2.4.2", + "commander": "^2.20.0", + "concurrently": "4.1.0", + "execa": "^1.0.0", + "glob": "^7.1.4", + "inquirer": "^6.3.1", + "jest-cli": "^24.8.0", + "lodash": "4.17.11", + "ora": "^3.4.0", + "prettier": "^1.17.1", + "replace-in-file": "^4.1.0", + "rollup": "^1.14.2", + "rollup-plugin-commonjs": "^10.0.0", + "rollup-plugin-copy-glob": "^0.3.0", + "rollup-plugin-json": "^4.0.0", + "rollup-plugin-node-builtins": "^2.1.2", + "rollup-plugin-node-globals": "^1.4.0", + "rollup-plugin-node-resolve": "^5.1.0", + "rollup-plugin-sourcemaps": "^0.4.2", + "rollup-plugin-terser": "^5.0.0", + "rollup-plugin-typescript2": "^0.21.1", + "rollup-plugin-visualizer": "^1.1.1", + "semver": "^6.1.1", + "simple-git": "^1.112.0", + "ts-node": "^8.2.0", + "tslint": "5.14.0" + }, + "peerDependencies": { + "jest": "24.8.0", + "ts-jest": "24.0.2", + "tslib": "1.10.0", + "typescript": "3.5.1" + }, + "resolutions": { + "@types/lodash": "4.14.119", + "rollup-plugin-typescript2": "0.21.1" + }, + "devDependencies": { + "@types/glob": "^7.1.1", + "rollup-watch": "^4.3.1" + } +} diff --git a/scripts/cli/index.d.ts b/packages/grafana-toolkit/src/cli/index.d.ts similarity index 100% rename from scripts/cli/index.d.ts rename to packages/grafana-toolkit/src/cli/index.d.ts diff --git a/packages/grafana-toolkit/src/cli/index.ts b/packages/grafana-toolkit/src/cli/index.ts new file mode 100644 index 00000000000..c457983ef7a --- /dev/null +++ b/packages/grafana-toolkit/src/cli/index.ts @@ -0,0 +1,166 @@ +// @ts-ignore +import program from 'commander'; +import { execTask } from './utils/execTask'; +import chalk from 'chalk'; +import { startTask } from './tasks/core.start'; +import { buildTask } from './tasks/grafanaui.build'; +import { releaseTask } from './tasks/grafanaui.release'; +import { changelogTask } from './tasks/changelog'; +import { cherryPickTask } from './tasks/cherrypick'; +import { precommitTask } from './tasks/precommit'; +import { templateTask } from './tasks/template'; +import { pluginBuildTask } from './tasks/plugin.build'; +import { toolkitBuildTask } from './tasks/toolkit.build'; +import { pluginTestTask } from './tasks/plugin.tests'; +import { searchTestDataSetupTask } from './tasks/searchTestDataSetup'; +import { closeMilestoneTask } from './tasks/closeMilestone'; +import { pluginDevTask } from './tasks/plugin.dev'; + +export const run = (includeInternalScripts = false) => { + if (includeInternalScripts) { + program.option('-d, --depreciate ', 'Inform about npm script deprecation', v => v.split(',')); + program + .command('core:start') + .option('-h, --hot', 'Run front-end with HRM enabled') + .option('-t, --watchTheme', 'Watch for theme changes and regenerate variables.scss files') + .description('Starts Grafana front-end in development mode with watch enabled') + .action(async cmd => { + await execTask(startTask)({ + watchThemes: cmd.watchTheme, + hot: cmd.hot, + }); + }); + + program + .command('gui:build') + .description('Builds @grafana/ui package to packages/grafana-ui/dist') + .action(async cmd => { + // @ts-ignore + await execTask(buildTask)(); + }); + + program + .command('gui:release') + .description('Prepares @grafana/ui release (and publishes to npm on demand)') + .option('-p, --publish', 'Publish @grafana/ui to npm registry') + .option('-u, --usePackageJsonVersion', 'Use version specified in package.json') + .option('--createVersionCommit', 'Create and push version commit') + .action(async cmd => { + await execTask(releaseTask)({ + publishToNpm: !!cmd.publish, + usePackageJsonVersion: !!cmd.usePackageJsonVersion, + createVersionCommit: !!cmd.createVersionCommit, + }); + }); + + program + .command('changelog') + .option('-m, --milestone ', 'Specify milestone') + .description('Builds changelog markdown') + .action(async cmd => { + if (!cmd.milestone) { + console.log('Please specify milestone, example: -m '); + return; + } + + await execTask(changelogTask)({ + milestone: cmd.milestone, + }); + }); + + program + .command('cherrypick') + .description('Helps find commits to cherry pick') + .action(async cmd => { + await execTask(cherryPickTask)({}); + }); + + program + .command('precommit') + .description('Executes checks') + .action(async cmd => { + await execTask(precommitTask)({}); + }); + + program + .command('debug:template') + .description('Just testing') + .action(async cmd => { + await execTask(templateTask)({}); + }); + + program + .command('toolkit:build') + .description('Prepares grafana/toolkit dist package') + .action(async cmd => { + // @ts-ignore + await execTask(toolkitBuildTask)(); + }); + + program + .command('searchTestData') + .option('-c, --count ', 'Specify number of dashboards') + .description('Setup test data for search') + .action(async cmd => { + await execTask(searchTestDataSetupTask)({ count: cmd.count }); + }); + + program + .command('close-milestone') + .option('-m, --milestone ', 'Specify milestone') + .description('Helps ends a milestone by removing the cherry-pick label and closing it') + .action(async cmd => { + if (!cmd.milestone) { + console.log('Please specify milestone, example: -m '); + return; + } + + await execTask(closeMilestoneTask)({ + milestone: cmd.milestone, + }); + }); + } + + program + .command('plugin:build') + .description('Prepares plugin dist package') + .action(async cmd => { + await execTask(pluginBuildTask)({}); + }); + + program + .command('plugin:dev') + .description('Starts plugin dev mode') + .action(async cmd => { + await execTask(pluginDevTask)({ + watch: true, + }); + }); + + program + .command('plugin:test') + .option('-u, --updateSnapshot', 'Run snapshots update') + .option('--coverage', 'Run code coverage') + .description('Executes plugin tests') + .action(async cmd => { + await execTask(pluginTestTask)({ + updateSnapshot: !!cmd.updateSnapshot, + coverage: !!cmd.coverage, + }); + }); + + program.on('command:*', () => { + console.error('Invalid command: %s\nSee --help for a list of available commands.', program.args.join(' ')); + process.exit(1); + }); + + program.parse(process.argv); + + if (program.depreciate && program.depreciate.length === 2) { + console.log( + chalk.yellow.bold( + `[NPM script depreciation] ${program.depreciate[0]} is deprecated! Use ${program.depreciate[1]} instead!` + ) + ); + } +}; diff --git a/scripts/cli/tasks/changelog.ts b/packages/grafana-toolkit/src/cli/tasks/changelog.ts similarity index 77% rename from scripts/cli/tasks/changelog.ts rename to packages/grafana-toolkit/src/cli/tasks/changelog.ts index e2cb9da7e55..004ea46603a 100644 --- a/scripts/cli/tasks/changelog.ts +++ b/packages/grafana-toolkit/src/cli/tasks/changelog.ts @@ -1,4 +1,6 @@ -import _ from 'lodash'; +import axios from 'axios'; +// @ts-ignore +import * as _ from 'lodash'; import { Task, TaskRunner } from './task'; import GithubClient from '../utils/githubClient'; @@ -27,11 +29,11 @@ const changelogTaskRunner: TaskRunner = async ({ milestone }) const issues = res.data; const bugs = _.sortBy( - issues.filter(item => { + issues.filter((item: any) => { if (item.title.match(/fix|fixes/i)) { return true; } - if (item.labels.find(label => label.name === 'type/bug')) { + if (item.labels.find((label: any) => label.name === 'type/bug')) { return true; } return false; @@ -39,7 +41,7 @@ const changelogTaskRunner: TaskRunner = async ({ milestone }) 'title' ); - const notBugs = _.sortBy(issues.filter(item => !bugs.find(bug => bug === item)), 'title'); + const notBugs = _.sortBy(issues.filter((item: any) => !bugs.find((bug: any) => bug === item)), 'title'); let markdown = ''; @@ -65,7 +67,7 @@ const changelogTaskRunner: TaskRunner = async ({ milestone }) function getMarkdownLineForIssue(item: any) { const githubGrafanaUrl = 'https://github.com/grafana/grafana'; let markdown = ''; - const title = item.title.replace(/^([^:]*)/, (match, g1) => { + const title = item.title.replace(/^([^:]*)/, (_match: any, g1: any) => { return `**${g1}**`; }); @@ -78,6 +80,4 @@ function getMarkdownLineForIssue(item: any) { return markdown; } -export const changelogTask = new Task(); -changelogTask.setName('Changelog generator task'); -changelogTask.setRunner(changelogTaskRunner); +export const changelogTask = new Task('Changelog generator task', changelogTaskRunner); diff --git a/scripts/cli/tasks/cherrypick.ts b/packages/grafana-toolkit/src/cli/tasks/cherrypick.ts similarity index 88% rename from scripts/cli/tasks/cherrypick.ts rename to packages/grafana-toolkit/src/cli/tasks/cherrypick.ts index 3e5a7addf42..38ce9b4a589 100644 --- a/scripts/cli/tasks/cherrypick.ts +++ b/packages/grafana-toolkit/src/cli/tasks/cherrypick.ts @@ -15,7 +15,7 @@ const cherryPickRunner: TaskRunner = async () => { }); // sort by closed date ASC - res.data.sort(function(a, b) { + res.data.sort((a: any, b: any) => { return new Date(a.closed_at).getTime() - new Date(b.closed_at).getTime(); }); @@ -42,6 +42,4 @@ const cherryPickRunner: TaskRunner = async () => { console.log(commands); }; -export const cherryPickTask = new Task(); -cherryPickTask.setName('Cherry pick task'); -cherryPickTask.setRunner(cherryPickRunner); +export const cherryPickTask = new Task('Cherry pick task', cherryPickRunner); diff --git a/scripts/cli/tasks/closeMilestone.ts b/packages/grafana-toolkit/src/cli/tasks/closeMilestone.ts similarity index 94% rename from scripts/cli/tasks/closeMilestone.ts rename to packages/grafana-toolkit/src/cli/tasks/closeMilestone.ts index 9873863dc25..3bdbbd46a21 100644 --- a/scripts/cli/tasks/closeMilestone.ts +++ b/packages/grafana-toolkit/src/cli/tasks/closeMilestone.ts @@ -70,6 +70,7 @@ const closeMilestoneTaskRunner: TaskRunner = async ({ mil } }; -export const closeMilestoneTask = new Task(); -closeMilestoneTask.setName('Close Milestone generator task'); -closeMilestoneTask.setRunner(closeMilestoneTaskRunner); +export const closeMilestoneTask = new Task( + 'Close Milestone generator task', + closeMilestoneTaskRunner +); diff --git a/scripts/cli/tasks/core.start.ts b/packages/grafana-toolkit/src/cli/tasks/core.start.ts similarity index 87% rename from scripts/cli/tasks/core.start.ts rename to packages/grafana-toolkit/src/cli/tasks/core.start.ts index dbd2dfe7119..2132ea33a8e 100644 --- a/scripts/cli/tasks/core.start.ts +++ b/packages/grafana-toolkit/src/cli/tasks/core.start.ts @@ -1,3 +1,4 @@ +//@ts-ignore import concurrently from 'concurrently'; import { Task, TaskRunner } from './task'; @@ -33,6 +34,4 @@ const startTaskRunner: TaskRunner = async ({ watchThemes, hot } }; -export const startTask = new Task(); -startTask.setName('Core startTask'); -startTask.setRunner(startTaskRunner); +export const startTask = new Task('Core startTask', startTaskRunner); diff --git a/scripts/cli/tasks/grafanaui.build.ts b/packages/grafana-toolkit/src/cli/tasks/grafanaui.build.ts similarity index 68% rename from scripts/cli/tasks/grafanaui.build.ts rename to packages/grafana-toolkit/src/cli/tasks/grafanaui.build.ts index 1a48bb1a724..6dbbc7b1d36 100644 --- a/scripts/cli/tasks/grafanaui.build.ts +++ b/packages/grafana-toolkit/src/cli/tasks/grafanaui.build.ts @@ -1,34 +1,45 @@ -import execa from 'execa'; -import fs from 'fs'; +import execa = require('execa'); +// @ts-ignore +import * as fs from 'fs'; import { changeCwdToGrafanaUi, restoreCwd } from '../utils/cwd'; import chalk from 'chalk'; import { useSpinner } from '../utils/useSpinner'; import { Task, TaskRunner } from './task'; -let distDir, cwd; +let distDir: string, cwd: string; +// @ts-ignore export const clean = useSpinner('Cleaning', async () => await execa('npm', ['run', 'clean'])); +// @ts-ignore const compile = useSpinner('Compiling sources', () => execa('tsc', ['-p', './tsconfig.build.json'])); +// @ts-ignore const rollup = useSpinner('Bundling', () => execa('npm', ['run', 'build'])); -export const savePackage = useSpinner<{ +interface SavePackageOptions { path: string; pkg: {}; -}>('Updating package.json', async ({ path, pkg }) => { - return new Promise((resolve, reject) => { - fs.writeFile(path, JSON.stringify(pkg, null, 2), err => { - if (err) { - reject(err); - return; - } - resolve(); - }); - }); -}); +} -const preparePackage = async pkg => { +// @ts-ignore +export const savePackage = useSpinner( + 'Updating package.json', + // @ts-ignore + async ({ path, pkg }: SavePackageOptions) => { + return new Promise((resolve, reject) => { + fs.writeFile(path, JSON.stringify(pkg, null, 2), err => { + if (err) { + reject(err); + return; + } + resolve(); + }); + }); + } +); + +const preparePackage = async (pkg: any) => { pkg.main = 'index.js'; pkg.types = 'index.d.ts'; await savePackage({ @@ -39,6 +50,7 @@ const preparePackage = async pkg => { const moveFiles = () => { const files = ['README.md', 'CHANGELOG.md', 'index.js']; + // @ts-ignore return useSpinner(`Moving ${files.join(', ')} files`, async () => { const promises = files.map(file => { return new Promise((resolve, reject) => { @@ -71,6 +83,4 @@ const buildTaskRunner: TaskRunner = async () => { restoreCwd(); }; -export const buildTask = new Task(); -buildTask.setName('@grafana/ui build'); -buildTask.setRunner(buildTaskRunner); +export const buildTask = new Task('@grafana/ui build', buildTaskRunner); diff --git a/scripts/cli/tasks/grafanaui.release.ts b/packages/grafana-toolkit/src/cli/tasks/grafanaui.release.ts similarity index 84% rename from scripts/cli/tasks/grafanaui.release.ts rename to packages/grafana-toolkit/src/cli/tasks/grafanaui.release.ts index dd7c441a53b..eb8da0da1c2 100644 --- a/scripts/cli/tasks/grafanaui.release.ts +++ b/packages/grafana-toolkit/src/cli/tasks/grafanaui.release.ts @@ -1,14 +1,15 @@ -import execa from 'execa'; +import execa = require('execa'); import { execTask } from '../utils/execTask'; import { changeCwdToGrafanaUiDist, changeCwdToGrafanaUi, restoreCwd } from '../utils/cwd'; -import semver from 'semver'; -import inquirer from 'inquirer'; +import { ReleaseType, inc } from 'semver'; +import { prompt } from 'inquirer'; import chalk from 'chalk'; import { useSpinner } from '../utils/useSpinner'; import { savePackage, buildTask, clean } from './grafanaui.build'; import { TaskRunner, Task } from './task'; type VersionBumpType = 'prerelease' | 'patch' | 'minor' | 'major'; + interface ReleaseTaskOptions { publishToNpm: boolean; usePackageJsonVersion: boolean; @@ -16,43 +17,29 @@ interface ReleaseTaskOptions { } const promptBumpType = async () => { - return inquirer.prompt<{ type: VersionBumpType }>([ + return prompt<{ type: VersionBumpType }>([ { type: 'list', message: 'Select version bump', name: 'type', choices: ['prerelease', 'patch', 'minor', 'major'], - validate: answer => { - if (answer.length < 1) { - return 'You must choose something'; - } - - return true; - }, }, ]); }; const promptPrereleaseId = async (message = 'Is this a prerelease?', allowNo = true) => { - return inquirer.prompt<{ id: string }>([ + return prompt<{ id: string }>([ { type: 'list', message: message, name: 'id', choices: allowNo ? ['no', 'alpha', 'beta'] : ['alpha', 'beta'], - validate: answer => { - if (answer.length < 1) { - return 'You must choose something'; - } - - return true; - }, }, ]); }; const promptConfirm = async (message?: string) => { - return inquirer.prompt<{ confirmed: boolean }>([ + return prompt<{ confirmed: boolean }>([ { type: 'confirm', message: message || 'Is that correct?', @@ -64,11 +51,18 @@ const promptConfirm = async (message?: string) => { // Since Grafana core depends on @grafana/ui highly, we run full check before release const runChecksAndTests = async () => + // @ts-ignore useSpinner(`Running checks and tests`, async () => { - await execa('npm', ['run', 'test']); + try { + await execa('npm', ['run', 'test']); + } catch (e) { + console.log(e); + throw e; + } })(); const bumpVersion = (version: string) => + // @ts-ignore useSpinner(`Saving version ${version} to package.json`, async () => { changeCwdToGrafanaUi(); await execa('npm', ['version', version]); @@ -79,6 +73,7 @@ const bumpVersion = (version: string) => })(); const publishPackage = (name: string, version: string) => + // @ts-ignore useSpinner(`Publishing ${name} @ ${version} to npm registry...`, async () => { changeCwdToGrafanaUiDist(); await execa('npm', ['publish', '--access', 'public']); @@ -95,6 +90,7 @@ const ensureMasterBranch = async () => { }; const prepareVersionCommitAndPush = async (version: string) => + // @ts-ignore useSpinner('Commiting and pushing @grafana/ui version update', async () => { await execa.stdout('git', ['commit', '-a', '-m', `Upgrade @grafana/ui version to v${version}`]); await execa.stdout('git', ['push']); @@ -106,6 +102,7 @@ const releaseTaskRunner: TaskRunner = async ({ createVersionCommit, }) => { changeCwdToGrafanaUi(); + // @ts-ignore await clean(); // Clean previous build if exists restoreCwd(); @@ -117,7 +114,7 @@ const releaseTaskRunner: TaskRunner = async ({ await runChecksAndTests(); - await execTask(buildTask)(); + await execTask(buildTask)({} as any); let releaseConfirmed = false; let nextVersion; @@ -133,13 +130,13 @@ const releaseTaskRunner: TaskRunner = async ({ console.log(type); if (type === 'prerelease') { const { id } = await promptPrereleaseId('What kind of prerelease?', false); - nextVersion = semver.inc(pkg.version, type, id); + nextVersion = inc(pkg.version, type, id as any); } else { const { id } = await promptPrereleaseId(); if (id !== 'no') { - nextVersion = semver.inc(pkg.version, `pre${type}`, id); + nextVersion = inc(pkg.version, `pre${type}` as ReleaseType, id as any); } else { - nextVersion = semver.inc(pkg.version, type); + nextVersion = inc(pkg.version, type as ReleaseType); } } } else { @@ -190,6 +187,4 @@ const releaseTaskRunner: TaskRunner = async ({ } }; -export const releaseTask = new Task(); -releaseTask.setName('@grafana/ui release'); -releaseTask.setRunner(releaseTaskRunner); +export const releaseTask = new Task('@grafana/ui release', releaseTaskRunner); diff --git a/packages/grafana-toolkit/src/cli/tasks/plugin.build.ts b/packages/grafana-toolkit/src/cli/tasks/plugin.build.ts new file mode 100644 index 00000000000..eeccb7d10f9 --- /dev/null +++ b/packages/grafana-toolkit/src/cli/tasks/plugin.build.ts @@ -0,0 +1,84 @@ +import { Task, TaskRunner } from './task'; +// @ts-ignore +import execa = require('execa'); +import path = require('path'); +import fs = require('fs'); +import glob = require('glob'); +import * as rollup from 'rollup'; +import { inputOptions, outputOptions } from '../../config/rollup.plugin.config'; + +import { useSpinner } from '../utils/useSpinner'; +import { Linter, Configuration, RuleFailure } from 'tslint'; +import { testPlugin } from './plugin/tests'; +interface PrecommitOptions {} + +// @ts-ignore +export const clean = useSpinner('Cleaning', async () => await execa('rimraf', ['./dist'])); + +// @ts-ignore +const typecheckPlugin = useSpinner('Typechecking', async () => { + await execa('tsc', ['--noEmit']); +}); + +// @ts-ignore +const lintPlugin = useSpinner('Linting', async () => { + let tsLintConfigPath = path.resolve(process.cwd(), 'tslint.json'); + if (!fs.existsSync(tsLintConfigPath)) { + tsLintConfigPath = path.resolve(__dirname, '../../config/tslint.plugin.json'); + } + const globPattern = path.resolve(process.cwd(), 'src/**/*.+(ts|tsx)'); + const sourcesToLint = glob.sync(globPattern); + const options = { + fix: true, // or fail + formatter: 'json', + }; + + const configuration = Configuration.findConfiguration(tsLintConfigPath).results; + + const lintResults = sourcesToLint + .map(fileName => { + const linter = new Linter(options); + const fileContents = fs.readFileSync(fileName, 'utf8'); + linter.lint(fileName, fileContents, configuration); + return linter.getResult(); + }) + .filter(result => { + return result.errorCount > 0 || result.warningCount > 0; + }); + + if (lintResults.length > 0) { + console.log('\n'); + const failures = lintResults.reduce((failures, result) => { + return [...failures, ...result.failures]; + }, []); + failures.forEach(f => { + // tslint:disable-next-line + console.log( + `${f.getRuleSeverity() === 'warning' ? 'WARNING' : 'ERROR'}: ${f.getFileName().split('src')[1]}[${ + f.getStartPosition().getLineAndCharacter().line + }:${f.getStartPosition().getLineAndCharacter().character}]: ${f.getFailure()}` + ); + }); + console.log('\n'); + throw new Error(`${failures.length} linting errors found in ${lintResults.length} files`); + } +}); + +const bundlePlugin = useSpinner('Bundling plugin', async () => { + // @ts-ignore + const bundle = await rollup.rollup(inputOptions()); + // TODO: we can work on more verbose output + await bundle.generate(outputOptions); + await bundle.write(outputOptions); +}); + +const pluginBuildRunner: TaskRunner = async () => { + await clean(); + // @ts-ignore + await lintPlugin(); + await testPlugin({ updateSnapshot: false, coverage: false }); + // @ts-ignore + await bundlePlugin(); +}; + +export const pluginBuildTask = new Task('Build plugin', pluginBuildRunner); diff --git a/packages/grafana-toolkit/src/cli/tasks/plugin.dev.ts b/packages/grafana-toolkit/src/cli/tasks/plugin.dev.ts new file mode 100644 index 00000000000..1793d7ddbc0 --- /dev/null +++ b/packages/grafana-toolkit/src/cli/tasks/plugin.dev.ts @@ -0,0 +1,9 @@ +import { Task, TaskRunner } from './task'; +import { bundlePlugin, PluginBundleOptions } from './plugin/bundle'; + +const pluginDevRunner: TaskRunner = async options => { + const result = await bundlePlugin(options); + return result; +}; + +export const pluginDevTask = new Task('Dev plugin', pluginDevRunner); diff --git a/packages/grafana-toolkit/src/cli/tasks/plugin.tests.ts b/packages/grafana-toolkit/src/cli/tasks/plugin.tests.ts new file mode 100644 index 00000000000..78405128922 --- /dev/null +++ b/packages/grafana-toolkit/src/cli/tasks/plugin.tests.ts @@ -0,0 +1,8 @@ +import { Task, TaskRunner } from './task'; +import { testPlugin, PluginTestOptions } from './plugin/tests'; + +const pluginTestRunner: TaskRunner = async options => { + await testPlugin(options); +}; + +export const pluginTestTask = new Task('Test plugin', pluginTestRunner); diff --git a/packages/grafana-toolkit/src/cli/tasks/plugin/bundle.ts b/packages/grafana-toolkit/src/cli/tasks/plugin/bundle.ts new file mode 100644 index 00000000000..4c905764b47 --- /dev/null +++ b/packages/grafana-toolkit/src/cli/tasks/plugin/bundle.ts @@ -0,0 +1,29 @@ +import path = require('path'); +import * as jestCLI from 'jest-cli'; +import * as rollup from 'rollup'; +import { inputOptions, outputOptions } from '../../../config/rollup.plugin.config'; + +export interface PluginBundleOptions { + watch: boolean; +} + +export const bundlePlugin = async ({ watch }: PluginBundleOptions) => { + if (watch) { + const watcher = rollup.watch([ + { + ...inputOptions(), + output: outputOptions, + watch: { + chokidar: true, + clearScreen: true, + }, + }, + ]); + } else { + // @ts-ignore + const bundle = await rollup.rollup(inputOptions()); + // TODO: we can work on more verbose output + await bundle.generate(outputOptions); + await bundle.write(outputOptions); + } +}; diff --git a/packages/grafana-toolkit/src/cli/tasks/plugin/tests.ts b/packages/grafana-toolkit/src/cli/tasks/plugin/tests.ts new file mode 100644 index 00000000000..eba45d6c24a --- /dev/null +++ b/packages/grafana-toolkit/src/cli/tasks/plugin/tests.ts @@ -0,0 +1,22 @@ +import path = require('path'); +import * as jestCLI from 'jest-cli'; +import { useSpinner } from '../../utils/useSpinner'; +import { jestConfig } from '../../../config/jest.plugin.config'; + +export interface PluginTestOptions { + updateSnapshot: boolean; + coverage: boolean; +} + +export const testPlugin = useSpinner('Running tests', async ({ updateSnapshot, coverage }) => { + const testConfig = jestConfig(); + + testConfig.updateSnapshot = updateSnapshot; + testConfig.coverage = coverage; + + const results = await jestCLI.runCLI(testConfig as any, [process.cwd()]); + + if (results.results.numFailedTests > 0 || results.results.numFailedTestSuites > 0) { + throw new Error('Tests failed'); + } +}); diff --git a/scripts/cli/tasks/precommit.ts b/packages/grafana-toolkit/src/cli/tasks/precommit.ts similarity index 70% rename from scripts/cli/tasks/precommit.ts rename to packages/grafana-toolkit/src/cli/tasks/precommit.ts index b759aa414f2..6431b486451 100644 --- a/scripts/cli/tasks/precommit.ts +++ b/packages/grafana-toolkit/src/cli/tasks/precommit.ts @@ -1,6 +1,8 @@ import { Task, TaskRunner } from './task'; import chalk from 'chalk'; +// @ts-ignore import get from 'lodash/get'; +// @ts-ignore import flatten from 'lodash/flatten'; import execa = require('execa'); const simpleGit = require('simple-git/promise')(process.cwd()); @@ -28,13 +30,18 @@ const tasks = { const precommitRunner: TaskRunner = async () => { const status = await simpleGit.status(); const sassFiles = status.files.filter( - file => (file.path as string).match(/^[a-zA-Z0-9\_\-\/]+(\.scss)$/g) || file.path.indexOf('.sass-lint.yml') > -1 + (file: any) => + (file.path as string).match(/^[a-zA-Z0-9\_\-\/]+(\.scss)$/g) || file.path.indexOf('.sass-lint.yml') > -1 ); - const tsFiles = status.files.filter(file => (file.path as string).match(/^[a-zA-Z0-9\_\-\/]+(\.(ts|tsx))$/g)); - const testFiles = status.files.filter(file => (file.path as string).match(/^[a-zA-Z0-9\_\-\/]+(\.test.(ts|tsx))$/g)); - const goTestFiles = status.files.filter(file => (file.path as string).match(/^[a-zA-Z0-9\_\-\/]+(\_test.go)$/g)); - const grafanaUiFiles = tsFiles.filter(file => (file.path as string).indexOf('grafana-ui') > -1); + const tsFiles = status.files.filter((file: any) => (file.path as string).match(/^[a-zA-Z0-9\_\-\/]+(\.(ts|tsx))$/g)); + const testFiles = status.files.filter((file: any) => + (file.path as string).match(/^[a-zA-Z0-9\_\-\/]+(\.test.(ts|tsx))$/g) + ); + const goTestFiles = status.files.filter((file: any) => + (file.path as string).match(/^[a-zA-Z0-9\_\-\/]+(\_test.go)$/g) + ); + const grafanaUiFiles = tsFiles.filter((file: any) => (file.path as string).indexOf('grafana-ui') > -1); const grafanaUIFilesChangedOnly = tsFiles.length > 0 && tsFiles.length - grafanaUiFiles.length === 0; const coreFilesChangedOnly = tsFiles.length > 0 && grafanaUiFiles.length === 0; @@ -69,13 +76,13 @@ const precommitRunner: TaskRunner = async () => { const task = execa('grunt', gruntTasks); // @ts-ignore const stream = task.stdout; - stream.pipe(process.stdout); + if (stream) { + stream.pipe(process.stdout); + } return task; } console.log(chalk.yellow('Skipping precommit checks, not front-end changes detected')); return; }; -export const precommitTask = new Task(); -precommitTask.setName('Precommit task'); -precommitTask.setRunner(precommitRunner); +export const precommitTask = new Task('Precommit task', precommitRunner); diff --git a/scripts/cli/tasks/searchTestDataSetup.ts b/packages/grafana-toolkit/src/cli/tasks/searchTestDataSetup.ts similarity index 93% rename from scripts/cli/tasks/searchTestDataSetup.ts rename to packages/grafana-toolkit/src/cli/tasks/searchTestDataSetup.ts index 2bac9b6c903..915f431a957 100644 --- a/scripts/cli/tasks/searchTestDataSetup.ts +++ b/packages/grafana-toolkit/src/cli/tasks/searchTestDataSetup.ts @@ -1,5 +1,4 @@ import axios from 'axios'; -import _ from 'lodash'; import { Task, TaskRunner } from './task'; interface SearchTestDataSetupOptions { @@ -14,7 +13,7 @@ const client = axios.create({ }, }); -export async function getUser(user): Promise { +export async function getUser(user: any): Promise { console.log('Creating user ' + user.name); const search = await client.get('/users/search', { params: { query: user.login }, @@ -112,6 +111,7 @@ const searchTestDataSetupRunnner: TaskRunner = async } }; -export const searchTestDataSetupTask = new Task(); -searchTestDataSetupTask.setName('Search test data setup'); -searchTestDataSetupTask.setRunner(searchTestDataSetupRunnner); +export const searchTestDataSetupTask = new Task( + 'Search test data setup', + searchTestDataSetupRunnner +); diff --git a/scripts/cli/tasks/task.ts b/packages/grafana-toolkit/src/cli/tasks/task.ts similarity index 62% rename from scripts/cli/tasks/task.ts rename to packages/grafana-toolkit/src/cli/tasks/task.ts index cc7d77a0664..4524508bd83 100644 --- a/scripts/cli/tasks/task.ts +++ b/packages/grafana-toolkit/src/cli/tasks/task.ts @@ -1,11 +1,10 @@ export type TaskRunner = (options: T) => Promise; export class Task { - name: string; - runner: (options: TOptions) => Promise; - options: TOptions; + options: TOptions = {} as any; - setName = name => { + constructor(public name: string, public runner: TaskRunner) {} + setName = (name: string) => { this.name = name; }; @@ -13,7 +12,7 @@ export class Task { this.runner = runner; }; - setOptions = options => { + setOptions = (options: TOptions) => { this.options = options; }; diff --git a/packages/grafana-toolkit/src/cli/tasks/template.ts b/packages/grafana-toolkit/src/cli/tasks/template.ts new file mode 100644 index 00000000000..4a965e05f97 --- /dev/null +++ b/packages/grafana-toolkit/src/cli/tasks/template.ts @@ -0,0 +1,9 @@ +import { Task, TaskRunner } from './task'; + +interface TemplateOptions {} + +const templateRunner: TaskRunner = async () => { + console.log('Template task'); +}; + +export const templateTask = new Task('Template task', templateRunner); diff --git a/packages/grafana-toolkit/src/cli/tasks/toolkit.build.ts b/packages/grafana-toolkit/src/cli/tasks/toolkit.build.ts new file mode 100644 index 00000000000..975b1d6fa79 --- /dev/null +++ b/packages/grafana-toolkit/src/cli/tasks/toolkit.build.ts @@ -0,0 +1,91 @@ +import execa = require('execa'); +import * as fs from 'fs'; +import { changeCwdToGrafanaUi, restoreCwd, changeCwdToGrafanaToolkit } from '../utils/cwd'; +import chalk from 'chalk'; +import { useSpinner } from '../utils/useSpinner'; +import { Task, TaskRunner } from './task'; + +let distDir: string, cwd: string; + +// @ts-ignore +export const clean = useSpinner('Cleaning', async () => await execa('npm', ['run', 'clean'])); + +// @ts-ignore +const compile = useSpinner('Compiling sources', async () => { + try { + await execa('tsc', ['-p', './tsconfig.json']); + } catch (e) { + console.log(e); + throw e; + } +}); + +// @ts-ignore +export const savePackage = useSpinner<{ + path: string; + pkg: {}; + // @ts-ignore +}>('Updating package.json', async ({ path, pkg }) => { + return new Promise((resolve, reject) => { + fs.writeFile(path, JSON.stringify(pkg, null, 2), err => { + if (err) { + reject(err); + return; + } + resolve(); + }); + }); +}); + +const preparePackage = async (pkg: any) => { + pkg.bin = { + 'grafana-toolkit': './bin/grafana-toolkit.dist.js', + }; + + await savePackage({ + path: `${cwd}/dist/package.json`, + pkg, + }); +}; + +const moveFiles = () => { + const files = [ + 'README.md', + 'CHANGELOG.md', + 'bin/grafana-toolkit.dist.js', + 'src/config/tsconfig.plugin.json', + 'src/config/tslint.plugin.json', + ]; + // @ts-ignore + return useSpinner(`Moving ${files.join(', ')} files`, async () => { + const promises = files.map(file => { + return new Promise((resolve, reject) => { + fs.copyFile(`${cwd}/${file}`, `${distDir}/${file}`, err => { + if (err) { + reject(err); + return; + } + resolve(); + }); + }); + }); + + await Promise.all(promises); + })(); +}; + +const toolkitBuildTaskRunner: TaskRunner = async () => { + cwd = changeCwdToGrafanaToolkit(); + distDir = `${cwd}/dist`; + const pkg = require(`${cwd}/package.json`); + console.log(chalk.yellow(`Building ${pkg.name} (package.json version: ${pkg.version})`)); + + await clean(); + await compile(); + await preparePackage(pkg); + fs.mkdirSync('./dist/bin'); + await moveFiles(); + restoreCwd(); +}; + +export const toolkitBuildTask = new Task('@grafana/toolkit build', toolkitBuildTaskRunner); diff --git a/packages/grafana-toolkit/src/cli/tsconfig.json b/packages/grafana-toolkit/src/cli/tsconfig.json new file mode 100644 index 00000000000..475f3aa406f --- /dev/null +++ b/packages/grafana-toolkit/src/cli/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "module": "commonjs" + } +} diff --git a/scripts/cli/utils/cwd.ts b/packages/grafana-toolkit/src/cli/utils/cwd.ts similarity index 70% rename from scripts/cli/utils/cwd.ts rename to packages/grafana-toolkit/src/cli/utils/cwd.ts index 9b4241b1369..48ca39e5da2 100644 --- a/scripts/cli/utils/cwd.ts +++ b/packages/grafana-toolkit/src/cli/utils/cwd.ts @@ -5,6 +5,11 @@ export const changeCwdToGrafanaUi = () => { return process.cwd(); }; +export const changeCwdToGrafanaToolkit = () => { + process.chdir(`${cwd}/packages/grafana-toolkit`); + return process.cwd(); +}; + export const changeCwdToGrafanaUiDist = () => { process.chdir(`${cwd}/packages/grafana-ui/dist`); }; diff --git a/scripts/cli/utils/execTask.ts b/packages/grafana-toolkit/src/cli/utils/execTask.ts similarity index 100% rename from scripts/cli/utils/execTask.ts rename to packages/grafana-toolkit/src/cli/utils/execTask.ts diff --git a/scripts/cli/utils/githubClient.test.ts b/packages/grafana-toolkit/src/cli/utils/githubClient.test.ts similarity index 96% rename from scripts/cli/utils/githubClient.test.ts rename to packages/grafana-toolkit/src/cli/utils/githubClient.test.ts index 95c67cb3111..dbdadda0d92 100644 --- a/scripts/cli/utils/githubClient.test.ts +++ b/packages/grafana-toolkit/src/cli/utils/githubClient.test.ts @@ -20,6 +20,7 @@ describe('GithubClient', () => { describe('#client', () => { it('it should contain a client', () => { + // @ts-ignore const spy = jest.spyOn(GithubClient.prototype, 'createClient').mockImplementation(() => fakeClient); const github = new GithubClient(); @@ -40,6 +41,7 @@ describe('GithubClient', () => { process.env.GITHUB_USERNAME = username; process.env.GITHUB_ACCESS_TOKEN = token; + // @ts-ignore const spy = jest.spyOn(GithubClient.prototype, 'createClient').mockImplementation(() => fakeClient); const github = new GithubClient(true); @@ -57,6 +59,7 @@ describe('GithubClient', () => { describe('when the credentials are not defined', () => { it('should throw an error', () => { expect(() => { + // tslint:disable-next-line new GithubClient(true); }).toThrow(/operation needs a GITHUB_USERNAME and GITHUB_ACCESS_TOKEN environment variables/); }); diff --git a/scripts/cli/utils/githubClient.ts b/packages/grafana-toolkit/src/cli/utils/githubClient.ts similarity index 100% rename from scripts/cli/utils/githubClient.ts rename to packages/grafana-toolkit/src/cli/utils/githubClient.ts diff --git a/scripts/cli/utils/useSpinner.ts b/packages/grafana-toolkit/src/cli/utils/useSpinner.ts similarity index 91% rename from scripts/cli/utils/useSpinner.ts rename to packages/grafana-toolkit/src/cli/utils/useSpinner.ts index 298a6516689..b901ed96d9c 100644 --- a/scripts/cli/utils/useSpinner.ts +++ b/packages/grafana-toolkit/src/cli/utils/useSpinner.ts @@ -10,7 +10,7 @@ export const useSpinner = (spinnerLabel: string, fn: FnToSpin, killProcess await fn(options); spinner.succeed(); } catch (e) { - spinner.fail(e); + spinner.fail(e.message || e); if (killProcess) { process.exit(1); } diff --git a/packages/grafana-toolkit/src/config/jest.plugin.config.ts b/packages/grafana-toolkit/src/config/jest.plugin.config.ts new file mode 100644 index 00000000000..685791bd984 --- /dev/null +++ b/packages/grafana-toolkit/src/config/jest.plugin.config.ts @@ -0,0 +1,45 @@ +import path = require('path'); +import fs = require('fs'); + +const whitelistedJestConfigOverrides = ['snapshotSerializers']; + +export const jestConfig = () => { + const jestConfigOverrides = require(path.resolve(process.cwd(), 'package.json')).jest; + const blacklistedOverrides = jestConfigOverrides + ? Object.keys(jestConfigOverrides).filter(override => whitelistedJestConfigOverrides.indexOf(override) === -1) + : []; + if (blacklistedOverrides.length > 0) { + console.error("\ngrafana-toolkit doesn't support following Jest options: ", blacklistedOverrides); + console.log('Supported Jest options are: ', JSON.stringify(whitelistedJestConfigOverrides)); + throw new Error('Provided Jest config is not supported'); + } + + const shimsFilePath = path.resolve(process.cwd(), 'config/jest-shim.ts'); + const setupFilePath = path.resolve(process.cwd(), 'config/jest-setup.ts'); + + const setupFile = fs.existsSync(setupFilePath) ? setupFilePath : undefined; + const shimsFile = fs.existsSync(shimsFilePath) ? shimsFilePath : undefined; + const setupFiles = [setupFile, shimsFile].filter(f => f); + const defaultJestConfig = { + preset: 'ts-jest', + verbose: false, + transform: { + '^.+\\.(ts|tsx)$': 'ts-jest', + }, + moduleDirectories: ['node_modules', 'src'], + rootDir: process.cwd(), + roots: ['/src'], + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'], + setupFiles, + globals: { 'ts-jest': { isolatedModules: true } }, + coverageReporters: ['json-summary', 'text', 'lcov'], + collectCoverageFrom: ['src/**/*.{ts,tsx}', '!**/node_modules/**', '!**/vendor/**'], + updateSnapshot: false, + passWithNoTests: true, + }; + + return { + ...defaultJestConfig, + ...jestConfigOverrides, + }; +}; diff --git a/packages/grafana-toolkit/src/config/rollup.plugin.config.ts b/packages/grafana-toolkit/src/config/rollup.plugin.config.ts new file mode 100644 index 00000000000..2636ed6b685 --- /dev/null +++ b/packages/grafana-toolkit/src/config/rollup.plugin.config.ts @@ -0,0 +1,160 @@ +// @ts-ignore +import resolve from 'rollup-plugin-node-resolve'; +// @ts-ignore +import commonjs from 'rollup-plugin-commonjs'; +// @ts-ignore +import sourceMaps from 'rollup-plugin-sourcemaps'; +// @ts-ignore +import typescript from 'rollup-plugin-typescript2'; +// @ts-ignore +import json from 'rollup-plugin-json'; +// @ts-ignore +import copy from 'rollup-plugin-copy-glob'; +// @ts-ignore +import { terser } from 'rollup-plugin-terser'; +// @ts-ignore +import visualizer from 'rollup-plugin-visualizer'; + +// @ts-ignore +const replace = require('replace-in-file'); +const pkg = require(`${process.cwd()}/package.json`); +const path = require('path'); +const fs = require('fs'); +const tsConfig = require(`${__dirname}/tsconfig.plugin.json`); +import { OutputOptions, InputOptions, GetManualChunk } from 'rollup'; +const { PRODUCTION } = process.env; + +export const outputOptions: OutputOptions = { + dir: 'dist', + format: 'amd', + sourcemap: true, + chunkFileNames: '[name].js', +}; + +const findModuleTs = (base: string, files?: string[], result?: string[]) => { + files = files || fs.readdirSync(base); + result = result || []; + + if (files) { + files.forEach(file => { + const newbase = path.join(base, file); + if (fs.statSync(newbase).isDirectory()) { + result = findModuleTs(newbase, fs.readdirSync(newbase), result); + } else { + if (file.indexOf('module.ts') > -1) { + // @ts-ignore + result.push(newbase); + } + } + }); + } + return result; +}; + +const getModuleFiles = () => { + return findModuleTs(path.resolve(process.cwd(), 'src')); +}; + +const getManualChunk: GetManualChunk = (id: string) => { + // id == absolute path + if (id.endsWith('module.ts')) { + const idx = id.indexOf('/src/'); + if (idx > 0) { + const p = id.substring(idx + 5, id.lastIndexOf('.')); + console.log('MODULE:', id, p); + return p; + } + } + console.log('shared:', id); + return 'shared'; +}; + +const getExternals = () => { + // Those are by default exported by Grafana + const defaultExternals = [ + 'jquery', + 'lodash', + 'moment', + 'rxjs', + 'd3', + 'react', + 'react-dom', + '@grafana/ui', + '@grafana/runtime', + '@grafana/data', + ]; + const toolkitConfig = require(path.resolve(process.cwd(), 'package.json')).grafanaToolkit; + const userDefinedExternals = (toolkitConfig && toolkitConfig.externals) || []; + return [...defaultExternals, ...userDefinedExternals]; +}; + +export const inputOptions = (): InputOptions => { + const inputFiles = getModuleFiles(); + return { + input: inputFiles, + manualChunks: inputFiles.length > 1 ? getManualChunk : undefined, + external: getExternals(), + plugins: [ + // Allow json resolution + json(), + // globals(), + // builtins(), + + // Compile TypeScript files + typescript({ + typescript: require('typescript'), + objectHashIgnoreUnknownHack: true, + tsconfigDefaults: tsConfig, + }), + + // Allow node_modules resolution, so you can use 'external' to control + // which external modules to include in the bundle + // https://github.com/rollup/rollup-plugin-node-resolve#usage + resolve(), + + // Allow bundling cjs modules (unlike webpack, rollup doesn't understand cjs) + commonjs(), + + // Resolve source maps to the original source + sourceMaps(), + + // Minify + PRODUCTION && terser(), + + // Copy files + copy([{ files: 'src/**/*.{json,svg,png,html}', dest: 'dist' }], { verbose: true }), + + // Help avoid including things accidentally + visualizer({ + filename: 'dist/stats.html', + title: 'Plugin Stats', + }), + + // Custom callback when we are done + finish(), + ], + }; +}; + +function finish() { + return { + name: 'finish', + buildEnd() { + const files = 'dist/plugin.json'; + replace.sync({ + files: files, + from: /%VERSION%/g, + to: pkg.version, + }); + replace.sync({ + files: files, + from: /%TODAY%/g, + to: new Date().toISOString().substring(0, 10), + }); + + if (PRODUCTION) { + console.log('*minified*'); + } + }, + }; +} diff --git a/packages/grafana-toolkit/src/config/tsconfig.plugin.json b/packages/grafana-toolkit/src/config/tsconfig.plugin.json new file mode 100644 index 00000000000..0e565014b3f --- /dev/null +++ b/packages/grafana-toolkit/src/config/tsconfig.plugin.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "moduleResolution": "node", + "target": "es5", + "lib": ["es6", "dom"], + "module": "esnext", + "strict": true, + "alwaysStrict": true, + "noImplicitAny": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "noImplicitUseStrict": false, + "noUnusedLocals": true, + "strictNullChecks": true, + "skipLibCheck": true, + "removeComments": false, + "jsx": "react", + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "importHelpers": true, + "noEmitHelpers": true, + "inlineSourceMap": false, + "sourceMap": true, + "emitDecoratorMetadata": false, + "experimentalDecorators": true, + "downlevelIteration": true, + "pretty": true + } +} diff --git a/packages/grafana-toolkit/src/config/tslint.plugin.json b/packages/grafana-toolkit/src/config/tslint.plugin.json new file mode 100644 index 00000000000..3f0a5b6dc52 --- /dev/null +++ b/packages/grafana-toolkit/src/config/tslint.plugin.json @@ -0,0 +1,75 @@ +{ + "rules": { + "array-type": [true, "array-simple"], + "arrow-return-shorthand": true, + "ban": [true, { "name": "Array", "message": "tsstyle#array-constructor" }], + "ban-types": [ + true, + ["Object", "Use {} instead."], + ["String", "Use 'string' instead."], + ["Number", "Use 'number' instead."], + ["Boolean", "Use 'boolean' instead."] + ], + "interface-name": [true, "never-prefix"], + "no-string-throw": true, + "no-unused-expression": true, + "no-unused-variable": false, + "no-use-before-declare": false, + "no-duplicate-variable": true, + "curly": true, + "class-name": true, + "semicolon": [true, "always", "ignore-bound-class-methods"], + "triple-equals": [true, "allow-null-check"], + "comment-format": [false, "check-space"], + "eofline": true, + "forin": false, + "indent": [true, "spaces", 2], + "jsdoc-format": true, + "label-position": true, + "max-line-length": [true, 150], + "member-access": [true, "no-public"], + "new-parens": true, + "no-angle-bracket-type-assertion": true, + "no-arg": true, + "no-bitwise": false, + "no-conditional-assignment": true, + "no-console": [true, "debug", "info", "time", "timeEnd", "trace"], + "no-construct": true, + "no-debugger": true, + "no-empty": false, + "no-eval": true, + "no-inferrable-types": true, + "no-namespace": [true, "allow-declarations"], + "no-reference": true, + "no-shadowed-variable": false, + "no-string-literal": false, + "no-switch-case-fall-through": false, + "no-trailing-whitespace": true, + "no-var-keyword": true, + "object-literal-sort-keys": false, + "one-line": [true, "check-open-brace", "check-catch", "check-else"], + "only-arrow-functions": [true, "allow-declarations", "allow-named-functions"], + "prefer-const": true, + "radix": true, + "typedef-whitespace": [ + true, + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + } + ], + "variable-name": [ + true, + "check-format", + "ban-keywords", + "allow-leading-underscore", + "allow-trailing-underscore", + "allow-pascal-case" + ], + "use-isnan": true, + "whitespace": [true, "check-branch", "check-decl", "check-type", "check-preblock"] + } +} diff --git a/packages/grafana-toolkit/tsconfig.json b/packages/grafana-toolkit/tsconfig.json new file mode 100644 index 00000000000..28b734aa9cd --- /dev/null +++ b/packages/grafana-toolkit/tsconfig.json @@ -0,0 +1,18 @@ +{ + "include": ["src/**/*.ts"], + "exclude": ["dist", "node_modules"], + "compilerOptions": { + "module": "commonjs", + "rootDirs": ["."], + "outDir": "dist/src", + "strict": true, + "alwaysStrict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "typeRoots": ["./node_modules/@types"], + "skipLibCheck": true, // Temp workaround for Duplicate identifier tsc errors, + "removeComments": false, + "esModuleInterop": true, + "lib": ["es2015", "es2017.string"] + } +} diff --git a/packages/grafana-toolkit/tslint.json b/packages/grafana-toolkit/tslint.json new file mode 100644 index 00000000000..f5129373624 --- /dev/null +++ b/packages/grafana-toolkit/tslint.json @@ -0,0 +1,6 @@ +{ + "extends": "../../tslint.json", + "rules": { + "import-blacklist": [true, ["^@grafana/runtime.*"]] + } +} diff --git a/scripts/cli/generateSassVariableFiles.ts b/scripts/cli/generateSassVariableFiles.ts index 43a5ff193c1..89133005d67 100644 --- a/scripts/cli/generateSassVariableFiles.ts +++ b/scripts/cli/generateSassVariableFiles.ts @@ -1,4 +1,4 @@ -import fs from 'fs'; +import * as fs from 'fs'; import darkTheme from '@grafana/ui/src/themes/dark'; import lightTheme from '@grafana/ui/src/themes/light'; import defaultTheme from '@grafana/ui/src/themes/default'; diff --git a/scripts/cli/index.ts b/scripts/cli/index.ts deleted file mode 100644 index dec2a05c424..00000000000 --- a/scripts/cli/index.ts +++ /dev/null @@ -1,108 +0,0 @@ -import program from 'commander'; -import { execTask } from './utils/execTask'; -import chalk from 'chalk'; -import { startTask } from './tasks/core.start'; -import { buildTask } from './tasks/grafanaui.build'; -import { releaseTask } from './tasks/grafanaui.release'; -import { changelogTask } from './tasks/changelog'; -import { cherryPickTask } from './tasks/cherrypick'; -import { closeMilestoneTask } from './tasks/closeMilestone'; -import { precommitTask } from './tasks/precommit'; -import { searchTestDataSetupTask } from './tasks/searchTestDataSetup'; - -program.option('-d, --depreciate ', 'Inform about npm script deprecation', v => v.split(',')); - -program - .command('core:start') - .option('-h, --hot', 'Run front-end with HRM enabled') - .option('-t, --watchTheme', 'Watch for theme changes and regenerate variables.scss files') - .description('Starts Grafana front-end in development mode with watch enabled') - .action(async cmd => { - await execTask(startTask)({ - watchThemes: cmd.watchTheme, - hot: cmd.hot, - }); - }); - -program - .command('gui:build') - .description('Builds @grafana/ui package to packages/grafana-ui/dist') - .action(async cmd => { - await execTask(buildTask)(); - }); - -program - .command('gui:release') - .description('Prepares @grafana/ui release (and publishes to npm on demand)') - .option('-p, --publish', 'Publish @grafana/ui to npm registry') - .option('-u, --usePackageJsonVersion', 'Use version specified in package.json') - .option('--createVersionCommit', 'Create and push version commit') - .action(async cmd => { - await execTask(releaseTask)({ - publishToNpm: !!cmd.publish, - usePackageJsonVersion: !!cmd.usePackageJsonVersion, - createVersionCommit: !!cmd.createVersionCommit, - }); - }); - -program - .command('changelog') - .option('-m, --milestone ', 'Specify milestone') - .description('Builds changelog markdown') - .action(async cmd => { - if (!cmd.milestone) { - console.log('Please specify milestone, example: -m '); - return; - } - - await execTask(changelogTask)({ - milestone: cmd.milestone, - }); - }); - -program - .command('cherrypick') - .description('Helps find commits to cherry pick') - .action(async cmd => { - await execTask(cherryPickTask)({}); - }); - -program - .command('close-milestone') - .option('-m, --milestone ', 'Specify milestone') - .description('Helps ends a milestone by removing the cherry-pick label and closing it') - .action(async cmd => { - if (!cmd.milestone) { - console.log('Please specify milestone, example: -m '); - return; - } - - await execTask(closeMilestoneTask)({ - milestone: cmd.milestone, - }); - }); - -program - .command('precommit') - .description('Executes checks') - .action(async cmd => { - await execTask(precommitTask)({}); - }); - -program - .command('searchTestData') - .option('-c, --count ', 'Specify number of dashboards') - .description('Setup test data for search') - .action(async cmd => { - await execTask(searchTestDataSetupTask)({ count: cmd.count }); - }); - -program.parse(process.argv); - -if (program.depreciate && program.depreciate.length === 2) { - console.log( - chalk.yellow.bold( - `[NPM script depreciation] ${program.depreciate[0]} is deprecated! Use ${program.depreciate[1]} instead!` - ) - ); -} diff --git a/yarn.lock b/yarn.lock index 767d9d81267..230a2bf457b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1704,12 +1704,6 @@ dependencies: "@babel/types" "^7.3.0" -"@types/chalk@2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@types/chalk/-/chalk-2.2.0.tgz#b7f6e446f4511029ee8e3f43075fb5b73fbaa0ba" - dependencies: - chalk "*" - "@types/cheerio@*": version "0.22.11" resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.11.tgz#61c0facf9636d14ba5f77fc65ed8913aa845d717" @@ -1724,12 +1718,6 @@ version "2.0.1" resolved "https://registry.yarnpkg.com/@types/clipboard/-/clipboard-2.0.1.tgz#75a74086c293d75b12bc93ff13bc7797fef05a40" -"@types/commander@2.12.2": - version "2.12.2" - resolved "https://registry.yarnpkg.com/@types/commander/-/commander-2.12.2.tgz#183041a23842d4281478fa5d23c5ca78e6fd08ae" - dependencies: - commander "*" - "@types/d3-array@*": version "2.0.0" resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-2.0.0.tgz#a0d63a296a2d8435a9ec59393dcac746c6174a96" @@ -1996,6 +1984,13 @@ version "3.0.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" +"@types/execa@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@types/execa/-/execa-0.9.0.tgz#9b025d2755f17e80beaf9368c3f4f319d8b0fb93" + integrity sha512-mgfd93RhzjYBUHHV532turHC2j4l/qxsF/PbfDmprHDEUHmNZGlDn1CEsulGK3AfsPdhkWzZQT/S/k0UGhLGsA== + dependencies: + "@types/node" "*" + "@types/expect-puppeteer@3.3.1": version "3.3.1" resolved "https://registry.yarnpkg.com/@types/expect-puppeteer/-/expect-puppeteer-3.3.1.tgz#46e5944bf425b86ea13a563c7c8b86901414988d" @@ -2022,12 +2017,13 @@ "@types/react" "*" hoist-non-react-statics "^3.3.0" -"@types/inquirer@0.0.43": - version "0.0.43" - resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-0.0.43.tgz#1eb0bbb4648e6cc568bd396c1e989f620ad01273" +"@types/inquirer@^6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-6.0.3.tgz#597b3c1aa4a575899841ab99bb4f1774d0b8c090" + integrity sha512-lBsdZScFMaFYYIE3Y6CWX22B9VeY2NerT1kyU2heTc3u/W6a+Om6Au2q0rMzBrzynN0l4QoABhI0cbNdyz6fDg== dependencies: - "@types/rx" "*" "@types/through" "*" + rxjs "^6.4.0" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.1" @@ -2046,6 +2042,11 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" +"@types/jest-cli@^23.6.0": + version "23.6.0" + resolved "https://registry.yarnpkg.com/@types/jest-cli/-/jest-cli-23.6.0.tgz#c9cf542d28328cf5a6f1fb017dabaa3f71ab6499" + integrity sha512-o7vy+63lsHKFDibL3qZud87WpB0nTfk4j4QYB2aD6vtWMVVRRBACNcK9tMTm7Ebo68b7WiPsb/nyDYPZgtD0tg== + "@types/jest-diff@*": version "20.0.1" resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89" @@ -2073,6 +2074,7 @@ "@types/lodash@4.14.123": version "4.14.123" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.123.tgz#39be5d211478c8dd3bdae98ee75bb7efe4abfe4d" + integrity sha512-pQvPkc4Nltyx7G1Ww45OjVqUsJP4UsZm+GWJpigXgkikZqJgRm4c48g027o6tdgubWHwFRF15iFd+Y4Pmqv6+Q== "@types/marked@0.6.5": version "0.6.5" @@ -2099,6 +2101,11 @@ version "11.13.10" resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.10.tgz#4df59e5966b56f512bac98898bcbee5067411f0f" +"@types/node@^12.0.4", "@types/node@^12.0.8": + version "12.0.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.10.tgz#51babf9c7deadd5343620055fc8aff7995c8b031" + integrity sha512-LcsGbPomWsad6wmMNv7nBLw7YYYyfdYcz6xryKYQhx89c3XXan+8Q6AJ43G5XDIaklaVkK3mE4fCb0SBvMiPSQ== + "@types/papaparse@4.5.9": version "4.5.9" resolved "https://registry.yarnpkg.com/@types/papaparse/-/papaparse-4.5.9.tgz#ff887bd362f57cd0c87320d2de38ac232bb55e81" @@ -2117,6 +2124,11 @@ dependencies: "@types/node" "*" +"@types/prettier@^1.16.4": + version "1.16.4" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.16.4.tgz#5e5e97702cb68498aaba7349b941648daaf2385c" + integrity sha512-MG7ExKBo7AQ5UrL1awyYLNinNM/kyXgE4iP4Ul9fB+T7n768Z5Xem8IZeP6Bna0xze8gkDly49Rgge2HOEw4xA== + "@types/pretty-format@20.0.1": version "20.0.1" resolved "https://registry.yarnpkg.com/@types/pretty-format/-/pretty-format-20.0.1.tgz#7ce03b403887b087701a2b4534464f48ce7b2f48" @@ -2187,7 +2199,7 @@ dependencies: "@types/react" "*" -"@types/react-test-renderer@^16.8.2": +"@types/react-test-renderer@16.8.2": version "16.8.2" resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-16.8.2.tgz#ad544b5571ebfc5f182c320376f1431a2b725c5e" integrity sha512-cm42QR9S9V3aOxLh7Fh7PUqQ8oSfSdnSni30T7TiTmlKvE6aUlo+LhQAzjnZBPriD9vYmgG8MXI8UDK4Nfb7gg== @@ -2239,93 +2251,17 @@ dependencies: reselect "*" -"@types/rx-core-binding@*": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/rx-core-binding/-/rx-core-binding-4.0.4.tgz#d969d32f15a62b89e2862c17b3ee78fe329818d3" +"@types/resolve@0.0.8": + version "0.0.8" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== dependencies: - "@types/rx-core" "*" + "@types/node" "*" -"@types/rx-core@*": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/rx-core/-/rx-core-4.0.3.tgz#0b3354b1238cedbe2b74f6326f139dbc7a591d60" - -"@types/rx-lite-aggregates@*": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/rx-lite-aggregates/-/rx-lite-aggregates-4.0.3.tgz#6efb2b7f3d5f07183a1cb2bd4b1371d7073384c2" - dependencies: - "@types/rx-lite" "*" - -"@types/rx-lite-async@*": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/rx-lite-async/-/rx-lite-async-4.0.2.tgz#27fbf0caeff029f41e2d2aae638b05e91ceb600c" - dependencies: - "@types/rx-lite" "*" - -"@types/rx-lite-backpressure@*": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/rx-lite-backpressure/-/rx-lite-backpressure-4.0.3.tgz#05abb19bdf87cc740196c355e5d0b37bb50b5d56" - dependencies: - "@types/rx-lite" "*" - -"@types/rx-lite-coincidence@*": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/rx-lite-coincidence/-/rx-lite-coincidence-4.0.3.tgz#80bd69acc4054a15cdc1638e2dc8843498cd85c0" - dependencies: - "@types/rx-lite" "*" - -"@types/rx-lite-experimental@*": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/rx-lite-experimental/-/rx-lite-experimental-4.0.1.tgz#c532f5cbdf3f2c15da16ded8930d1b2984023cbd" - dependencies: - "@types/rx-lite" "*" - -"@types/rx-lite-joinpatterns@*": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/rx-lite-joinpatterns/-/rx-lite-joinpatterns-4.0.1.tgz#f70fe370518a8432f29158cc92ffb56b4e4afc3e" - dependencies: - "@types/rx-lite" "*" - -"@types/rx-lite-testing@*": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/rx-lite-testing/-/rx-lite-testing-4.0.1.tgz#21b19d11f4dfd6ffef5a9d1648e9c8879bfe21e9" - dependencies: - "@types/rx-lite-virtualtime" "*" - -"@types/rx-lite-time@*": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/rx-lite-time/-/rx-lite-time-4.0.3.tgz#0eda65474570237598f3448b845d2696f2dbb1c4" - dependencies: - "@types/rx-lite" "*" - -"@types/rx-lite-virtualtime@*": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/rx-lite-virtualtime/-/rx-lite-virtualtime-4.0.3.tgz#4b30cacd0fe2e53af29f04f7438584c7d3959537" - dependencies: - "@types/rx-lite" "*" - -"@types/rx-lite@*": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@types/rx-lite/-/rx-lite-4.0.6.tgz#3c02921c4244074234f26b772241bcc20c18c253" - dependencies: - "@types/rx-core" "*" - "@types/rx-core-binding" "*" - -"@types/rx@*": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@types/rx/-/rx-4.1.1.tgz#598fc94a56baed975f194574e0f572fd8e627a48" - dependencies: - "@types/rx-core" "*" - "@types/rx-core-binding" "*" - "@types/rx-lite" "*" - "@types/rx-lite-aggregates" "*" - "@types/rx-lite-async" "*" - "@types/rx-lite-backpressure" "*" - "@types/rx-lite-coincidence" "*" - "@types/rx-lite-experimental" "*" - "@types/rx-lite-joinpatterns" "*" - "@types/rx-lite-testing" "*" - "@types/rx-lite-time" "*" - "@types/rx-lite-virtualtime" "*" +"@types/semver@^6.0.0": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.0.1.tgz#a984b405c702fa5a7ec6abc56b37f2ba35ef5af6" + integrity sha512-ffCdcrEE5h8DqVxinQjo+2d1q+FV5z7iNtPofw3JsrltSoSVlOGaW0rY8XxtO9XukdTn8TaCGWmk2VFGhI70mg== "@types/sinon@^7.0.11": version "7.0.11" @@ -2577,6 +2513,13 @@ abbrev@1, abbrev@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" +abstract-leveldown@~0.12.0, abstract-leveldown@~0.12.1: + version "0.12.4" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz#29e18e632e60e4e221d5810247852a63d7b2e410" + integrity sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA= + dependencies: + xtend "~3.0.0" + accepts@~1.3.4, accepts@~1.3.5: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -2613,7 +2556,7 @@ acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" -acorn@^5.0.0, acorn@^5.5.0, acorn@^5.5.3: +acorn@^5.0.0, acorn@^5.5.0, acorn@^5.5.3, acorn@^5.7.3: version "5.7.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" @@ -2828,6 +2771,14 @@ any-observable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" +anymatch@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA== + dependencies: + micromatch "^2.1.5" + normalize-path "^2.0.0" + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -3051,7 +3002,7 @@ astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" -async-each@^1.0.1: +async-each@^1.0.0, async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" @@ -3556,6 +3507,13 @@ bl@^1.0.0: readable-stream "^2.3.5" safe-buffer "^5.1.1" +bl@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/bl/-/bl-0.8.2.tgz#c9b6bca08d1bc2ea00fc8afb4f1a5fd1e1c66e4e" + integrity sha1-yba8oI0bwuoA/Ir7Txpf0eHGbk4= + dependencies: + readable-stream "~1.0.26" + block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" @@ -3649,7 +3607,7 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" -braces@^2.3.1, braces@^2.3.2: +braces@^2.3.0, braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" dependencies: @@ -3710,6 +3668,15 @@ browserify-des@^1.0.0: inherits "^2.0.1" safe-buffer "^5.1.2" +browserify-fs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-fs/-/browserify-fs-1.0.0.tgz#f075aa8a729d4d1716d066620e386fcc1311a96f" + integrity sha1-8HWqinKdTRcW0GZiDjhvzBMRqW8= + dependencies: + level-filesystem "^1.0.1" + level-js "^2.1.3" + levelup "^0.18.2" + browserify-rsa@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" @@ -3778,6 +3745,11 @@ buffer-crc32@^0.2.1: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" +buffer-es6@^4.9.2, buffer-es6@^4.9.3: + version "4.9.3" + resolved "https://registry.yarnpkg.com/buffer-es6/-/buffer-es6-4.9.3.tgz#f26347b82df76fd37e18bcb5288c4970cfd5c404" + integrity sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ= + buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" @@ -3813,7 +3785,7 @@ builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" -builtin-modules@^3.0.0: +builtin-modules@^3.0.0, builtin-modules@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" @@ -3962,6 +3934,7 @@ caniuse-api@^3.0.0: caniuse-db@1.0.30000772: version "1.0.30000772" resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000772.tgz#51aae891768286eade4a3d8319ea76d6a01b512b" + integrity sha1-UarokXaChureSj2DGep21qAbUSs= caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000929, caniuse-lite@^1.0.30000947, caniuse-lite@^1.0.30000957, caniuse-lite@^1.0.30000963: version "1.0.30000966" @@ -3996,7 +3969,7 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chalk@*, chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: +chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" dependencies: @@ -4080,6 +4053,42 @@ child-process-promise@^2.2.1: node-version "^1.0.0" promise-polyfill "^6.0.1" +chokidar@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" + integrity sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.0" + braces "^2.3.0" + glob-parent "^3.1.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + lodash.debounce "^4.0.8" + normalize-path "^2.1.1" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + upath "^1.0.5" + optionalDependencies: + fsevents "^1.2.2" + +chokidar@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + integrity sha1-eY5ol3gVHIB2tLNg5e3SjNortGg= + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.4, chokidar@^2.1.0: version "2.1.5" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.5.tgz#0ae8434d962281a5f56c72869e79cb6d9d86ad4d" @@ -4244,6 +4253,15 @@ cliui@^4.0.0: strip-ansi "^4.0.0" wrap-ansi "^2.0.0" +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + clone-deep@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.2.4.tgz#4e73dd09e9fb971cc38670c5dced9c1896481cc6" @@ -4271,6 +4289,11 @@ clone@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" +clone@~0.1.9: + version "0.1.19" + resolved "https://registry.yarnpkg.com/clone/-/clone-0.1.19.tgz#613fb68639b26a494ac53253e15b1a6bd88ada85" + integrity sha1-YT+2hjmyaklKxTJT4Vsaa9iK2oU= + cmd-shim@^2.0.2, cmd-shim@~2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb" @@ -4333,7 +4356,7 @@ color@^3.0.0: color-convert "^1.9.1" color-string "^1.5.2" -colors@^1.1.2: +colors@1.3.3, colors@^1.1.2: version "1.3.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" @@ -4358,7 +4381,7 @@ comma-separated-tokens@^1.0.0: version "1.0.6" resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.6.tgz#3cd3d8adc725ab473843db338bcdfd4a7bb087bf" -commander@*, commander@2, commander@^2.12.1, commander@^2.14.1, commander@^2.18.0, commander@^2.19.0, commander@^2.8.1, commander@^2.9.0, commander@~2.20.0: +commander@2, commander@^2.12.1, commander@^2.14.1, commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@^2.8.1, commander@^2.9.0, commander@~2.20.0: version "2.20.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" @@ -4439,7 +4462,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@1.6.2, concat-stream@^1.4.6, concat-stream@^1.5.0: +concat-stream@1.6.2, concat-stream@^1.4.4, concat-stream@^1.4.6, concat-stream@^1.5.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" dependencies: @@ -5469,6 +5492,13 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +deferred-leveldown@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz#2cef1f111e1c57870d8bbb8af2650e587cd2f5b4" + integrity sha1-LO8fER4cV4cNi7uK8mUOWHzS9bQ= + dependencies: + abstract-leveldown "~0.12.1" + 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" @@ -5609,6 +5639,11 @@ diff@^3.1.0, diff@^3.2.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" +diff@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" + integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -5975,7 +6010,7 @@ err-code@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" -errno@^0.1.3, errno@~0.1.7: +errno@^0.1.1, errno@^0.1.3, errno@~0.1.1, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" dependencies: @@ -6214,6 +6249,11 @@ estree-walker@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.0.tgz#5d865327c44a618dde5699f763891ae31f257dae" +estree-walker@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== + esutils@^2.0.0, esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" @@ -6262,18 +6302,6 @@ exec-sh@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" -execa@1.0.0, execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" @@ -6286,6 +6314,18 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + exenv@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" @@ -6731,6 +6771,11 @@ for-own@^1.0.0: dependencies: for-in "^1.0.1" +foreach@~2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -6864,7 +6909,7 @@ fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -fsevents@^1.2.7: +fsevents@^1.0.0, fsevents@^1.2.2, fsevents@^1.2.7: version "1.2.9" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" dependencies: @@ -6896,6 +6941,13 @@ fuzzy-search@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/fuzzy-search/-/fuzzy-search-3.0.1.tgz#14a4964508a9607d6e9a88818e7ff634108260b6" +fwd-stream@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/fwd-stream/-/fwd-stream-1.0.4.tgz#ed281cabed46feecf921ee32dc4c50b372ac7cfa" + integrity sha1-7Sgcq+1G/uz5Ie4y3ExQs3KsfPo= + dependencies: + readable-stream "~1.0.26-4" + g-status@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97" @@ -6956,6 +7008,11 @@ get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" +get-caller-file@^2.0.1: + 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-document@1: version "1.0.0" resolved "https://registry.yarnpkg.com/get-document/-/get-document-1.0.0.tgz#4821bce66f1c24cb0331602be6cb6b12c4f01c4b" @@ -7023,19 +7080,19 @@ glob-base@^0.3.0: glob-parent "^2.0.0" is-glob "^2.0.0" -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.0.0" - -glob-parent@^3.1.0: +glob-parent@3.1.0, glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" dependencies: is-glob "^3.1.0" path-dirname "^1.0.0" +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" @@ -7062,6 +7119,18 @@ glob@7.1.3, glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glo once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@~5.0.0: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -7803,6 +7872,11 @@ icss-utils@^4.1.0: dependencies: postcss "^7.0.14" +idb-wrapper@^1.5.0: + version "1.7.2" + resolved "https://registry.yarnpkg.com/idb-wrapper/-/idb-wrapper-1.7.2.tgz#8251afd5e77fe95568b1c16152eb44b396767ea2" + integrity sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg== + ieee754@^1.1.4: version "1.1.13" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" @@ -7902,7 +7976,7 @@ indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" -indexof@0.0.1: +indexof@0.0.1, indexof@~0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" @@ -7963,24 +8037,6 @@ inquirer@6.2.1: strip-ansi "^5.0.0" through "^2.3.6" -inquirer@6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.2.tgz#46941176f65c9eb20804627149b743a218f25406" - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.11" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.0.0" - through "^2.3.6" - inquirer@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" @@ -8017,6 +8073,25 @@ inquirer@^6.2.0: strip-ansi "^5.1.0" through "^2.3.6" +inquirer@^6.3.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.4.1.tgz#7bd9e5ab0567cd23b41b0180b68e0cfa82fc3c0b" + integrity sha512-/Jw+qPZx4EDYsaT6uz7F4GJRNFMRdKNeUZw3ZnKV8lyuUgz/YWRCSUAJMZSVhSq4Ec0R2oYnyi6b3d4JXcL5Nw== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.11" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + internal-ip@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" @@ -8337,6 +8412,11 @@ is-obj@^1.0.0, is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" +is-object@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-0.1.2.tgz#00efbc08816c33cfc4ac8251d132e10dc65098d7" + integrity sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc= + is-observable@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" @@ -8405,6 +8485,13 @@ is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" +is-reference@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.1.2.tgz#01cf91517d21db66a34642287ed6e70d53dcbe5c" + integrity sha512-Kn5g8c7XHKejFOpTf2QN9YjiHHKl5xRj+2uAZf9iM2//nkBNi/NNeB5JMoun28nEaUVHyPUzqzhfRlfAirEjXg== + dependencies: + "@types/estree" "0.0.39" + is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" @@ -8477,6 +8564,11 @@ is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" +is@~0.2.6: + version "0.2.7" + resolved "https://registry.yarnpkg.com/is/-/is-0.2.7.tgz#3b34a2c48f359972f35042849193ae7264b63562" + integrity sha1-OzSixI81mXLzUEKEkZOucmS2NWI= + isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -8485,6 +8577,11 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" +isbuffer@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/isbuffer/-/isbuffer-0.0.0.tgz#38c146d9df528b8bf9b0701c3d43cf12df3fc39b" + integrity sha1-OMFG2d9Si4v5sHAcPUPPEt8/w5s= + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -9159,6 +9256,91 @@ left-pad@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" +level-blobs@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/level-blobs/-/level-blobs-0.1.7.tgz#9ab9b97bb99f1edbf9f78a3433e21ed56386bdaf" + integrity sha1-mrm5e7mfHtv594o0M+Ie1WOGva8= + dependencies: + level-peek "1.0.6" + once "^1.3.0" + readable-stream "^1.0.26-4" + +level-filesystem@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/level-filesystem/-/level-filesystem-1.2.0.tgz#a00aca9919c4a4dfafdca6a8108d225aadff63b3" + integrity sha1-oArKmRnEpN+v3KaoEI0iWq3/Y7M= + dependencies: + concat-stream "^1.4.4" + errno "^0.1.1" + fwd-stream "^1.0.4" + level-blobs "^0.1.7" + level-peek "^1.0.6" + level-sublevel "^5.2.0" + octal "^1.0.0" + once "^1.3.0" + xtend "^2.2.0" + +level-fix-range@2.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/level-fix-range/-/level-fix-range-2.0.0.tgz#c417d62159442151a19d9a2367868f1724c2d548" + integrity sha1-xBfWIVlEIVGhnZojZ4aPFyTC1Ug= + dependencies: + clone "~0.1.9" + +level-fix-range@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/level-fix-range/-/level-fix-range-1.0.2.tgz#bf15b915ae36d8470c821e883ddf79cd16420828" + integrity sha1-vxW5Fa422EcMgh6IPd95zRZCCCg= + +"level-hooks@>=4.4.0 <5": + version "4.5.0" + resolved "https://registry.yarnpkg.com/level-hooks/-/level-hooks-4.5.0.tgz#1b9ae61922930f3305d1a61fc4d83c8102c0dd93" + integrity sha1-G5rmGSKTDzMF0aYfxNg8gQLA3ZM= + dependencies: + string-range "~1.2" + +level-js@^2.1.3: + version "2.2.4" + resolved "https://registry.yarnpkg.com/level-js/-/level-js-2.2.4.tgz#bc055f4180635d4489b561c9486fa370e8c11697" + integrity sha1-vAVfQYBjXUSJtWHJSG+jcOjBFpc= + dependencies: + abstract-leveldown "~0.12.0" + idb-wrapper "^1.5.0" + isbuffer "~0.0.0" + ltgt "^2.1.2" + typedarray-to-buffer "~1.0.0" + xtend "~2.1.2" + +level-peek@1.0.6, level-peek@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/level-peek/-/level-peek-1.0.6.tgz#bec51c72a82ee464d336434c7c876c3fcbcce77f" + integrity sha1-vsUccqgu5GTTNkNMfIdsP8vM538= + dependencies: + level-fix-range "~1.0.2" + +level-sublevel@^5.2.0: + version "5.2.3" + resolved "https://registry.yarnpkg.com/level-sublevel/-/level-sublevel-5.2.3.tgz#744c12c72d2e72be78dde3b9b5cd84d62191413a" + integrity sha1-dEwSxy0ucr543eO5tc2E1iGRQTo= + dependencies: + level-fix-range "2.0" + level-hooks ">=4.4.0 <5" + string-range "~1.2.1" + xtend "~2.0.4" + +levelup@^0.18.2: + version "0.18.6" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-0.18.6.tgz#e6a01cb089616c8ecc0291c2a9bd3f0c44e3e5eb" + integrity sha1-5qAcsIlhbI7MApHCqb0/DETj5es= + dependencies: + bl "~0.8.1" + deferred-leveldown "~0.2.0" + errno "~0.1.1" + prr "~0.0.0" + readable-stream "~1.0.26" + semver "~2.3.1" + xtend "~3.0.0" + leven@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" @@ -9669,7 +9851,19 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -magic-string@^0.25.1: +ltgt@^2.1.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" + integrity sha1-81ypHEk/e3PaDgdJUwTxezH4fuU= + +magic-string@^0.22.5: + version "0.22.5" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" + integrity sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w== + dependencies: + vlq "^0.2.2" + +magic-string@^0.25.1, magic-string@^0.25.2: version "0.25.2" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.2.tgz#139c3a729515ec55e96e69e82a11fe890a293ad9" dependencies: @@ -9884,7 +10078,7 @@ methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" -micromatch@^2.3.11: +micromatch@^2.1.5, micromatch@^2.3.11: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" dependencies: @@ -10783,6 +10977,20 @@ object-keys@^1.0.0, object-keys@^1.0.11, object-keys@^1.0.12: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" +object-keys@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.2.0.tgz#cddec02998b091be42bf1035ae32e49f1cb6ea67" + integrity sha1-zd7AKZiwkb5CvxA1rjLknxy26mc= + dependencies: + foreach "~2.0.1" + indexof "~0.0.1" + is "~0.2.6" + +object-keys@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" + integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= + object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -10855,6 +11063,11 @@ obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" +octal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/octal/-/octal-1.0.0.tgz#63e7162a68efbeb9e213588d58e989d1e5c4530b" + integrity sha1-Y+cWKmjvvrniE1iNWOmJ0eXEUws= + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -10922,15 +11135,16 @@ optionator@^0.8.1: type-check "~0.3.2" wordwrap "~1.0.0" -ora@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-3.2.0.tgz#67e98a7e11f7f0ac95deaaaf11bb04de3d09e481" +ora@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" + integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== dependencies: chalk "^2.4.2" cli-cursor "^2.1.0" cli-spinners "^2.0.0" log-symbols "^2.2.0" - strip-ansi "^5.0.0" + strip-ansi "^5.2.0" wcwidth "^1.0.1" ordered-ast-traverse@~1.1.1: @@ -10971,7 +11185,7 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" -os-locale@^3.0.0: +os-locale@^3.0.0, os-locale@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" dependencies: @@ -11837,6 +12051,11 @@ prettier@1.16.4: version "1.16.4" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.4.tgz#73e37e73e018ad2db9c76742e2647e21790c9717" +prettier@^1.17.1: + version "1.18.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" + integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== + pretty-bytes@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" @@ -11887,6 +12106,11 @@ private@^0.1.6, private@~0.1.5: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" +process-es6@^0.11.2, process-es6@^0.11.6: + version "0.11.6" + resolved "https://registry.yarnpkg.com/process-es6/-/process-es6-0.11.6.tgz#c6bb389f9a951f82bd4eb169600105bd2ff9c778" + integrity sha1-xrs4n5qVH4K9TrFpYAEFvS/5x3g= + process-nextick-args@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" @@ -12004,6 +12228,11 @@ proxy-from-env@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" +prr@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + integrity sha1-GoS4WQgyVQFBGFPQCB7j+obikmo= + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -12785,6 +13014,15 @@ read@1, read@~1.0.1, read@~1.0.7: string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@^1.0.26-4, readable-stream@~1.1.10: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + readable-stream@^3.0.6, readable-stream@^3.1.1: version "3.3.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.3.0.tgz#cb8011aad002eb717bf040291feba8569c986fb9" @@ -12793,9 +13031,10 @@ readable-stream@^3.0.6, readable-stream@^3.1.1: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@~1.1.10: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" +readable-stream@~1.0.26, readable-stream@~1.0.26-4: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= dependencies: core-util-is "~1.0.0" inherits "~2.0.1" @@ -12811,7 +13050,7 @@ readdir-scoped-modules@^1.0.0: graceful-fs "^4.1.2" once "^1.3.0" -readdirp@^2.2.1: +readdirp@^2.0.0, readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" dependencies: @@ -13082,6 +13321,15 @@ replace-ext@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" +replace-in-file@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/replace-in-file/-/replace-in-file-4.1.0.tgz#07846245a4b98a8bc5f5f9c3e3e368fa12b18bf7" + integrity sha512-5IANGPAQZVO9PHEjaRz3EHs7eQulv1cvOu2hRi7+Ern+zXIzdslSGX9MIfcI1anaGCpICK2l4R4YOOdThsFryQ== + dependencies: + chalk "^2.4.2" + glob "^7.1.3" + yargs "^13.2.2" + request-progress@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-2.0.1.tgz#5d36bb57961c673aa5b788dbc8141fdf23b44e08" @@ -13143,6 +13391,11 @@ require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" +require-relative@0.8.7: + version "0.8.7" + resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de" + integrity sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4= + require-uncached@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" @@ -13209,15 +13462,23 @@ resolve@1.1.7, resolve@~1.1.0: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" +resolve@1.10.1, resolve@1.x, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.8.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.1.tgz#664842ac960795bbe758221cdccda61fb64b5f18" + dependencies: + path-parse "^1.0.6" + resolve@1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" + integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA== dependencies: path-parse "^1.0.5" -resolve@1.x, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.8.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.1.tgz#664842ac960795bbe758221cdccda61fb64b5f18" +resolve@^1.11.0, resolve@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" + integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== dependencies: path-parse "^1.0.6" @@ -13296,6 +13557,56 @@ rollup-plugin-commonjs@9.2.1: resolve "^1.10.0" rollup-pluginutils "^2.3.3" +rollup-plugin-commonjs@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.0.1.tgz#fbfcadf4ce2e826068e056a9f5c19287d9744ddf" + integrity sha512-x0PcCVdEc4J8igv1qe2vttz8JKAKcTs3wfIA3L8xEty3VzxgORLrzZrNWaVMc+pBC4U3aDOb9BnWLAQ8J11vkA== + dependencies: + estree-walker "^0.6.1" + is-reference "^1.1.2" + magic-string "^0.25.2" + resolve "^1.11.0" + rollup-pluginutils "^2.8.1" + +rollup-plugin-copy-glob@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-copy-glob/-/rollup-plugin-copy-glob-0.3.0.tgz#cec0e96c26e8a5aee0930c62e6147f941a39452d" + integrity sha512-x2ialxhpchEiOZ5cE8h3/9MDm2nMNFGXTssJxy+OFCldl0qISRQmtGmqkdal1KOiT4UebLct4K2kkhd6fvugLg== + dependencies: + chokidar "2.0.4" + colors "1.3.3" + glob "7.1.3" + glob-parent "3.1.0" + +rollup-plugin-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-json/-/rollup-plugin-json-4.0.0.tgz#a18da0a4b30bf5ca1ee76ddb1422afbb84ae2b9e" + integrity sha512-hgb8N7Cgfw5SZAkb3jf0QXii6QX/FOkiIq2M7BAQIEydjHvTyxXHQiIzZaTFgx1GK0cRCHOCBHIyEkkLdWKxow== + dependencies: + rollup-pluginutils "^2.5.0" + +rollup-plugin-node-builtins@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz#24a1fed4a43257b6b64371d8abc6ce1ab14597e9" + integrity sha1-JKH+1KQyV7a2Q3HYq8bOGrFFl+k= + dependencies: + browserify-fs "^1.0.0" + buffer-es6 "^4.9.2" + crypto-browserify "^3.11.0" + process-es6 "^0.11.2" + +rollup-plugin-node-globals@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-globals/-/rollup-plugin-node-globals-1.4.0.tgz#5e1f24a9bb97c0ef51249f625e16c7e61b7c020b" + integrity sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g== + dependencies: + acorn "^5.7.3" + buffer-es6 "^4.9.3" + estree-walker "^0.5.2" + magic-string "^0.22.5" + process-es6 "^0.11.6" + rollup-pluginutils "^2.3.1" + rollup-plugin-node-resolve@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.0.1.tgz#f95765d174e5daeef9ea6268566141f53aa9d422" @@ -13304,7 +13615,18 @@ rollup-plugin-node-resolve@4.0.1: is-module "^1.0.0" resolve "^1.10.0" -rollup-plugin-sourcemaps@0.4.2: +rollup-plugin-node-resolve@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.1.0.tgz#49608b6ecaf2b776ab83e317d39b282d65d21b76" + integrity sha512-2hwwHNj0s8UEtUNT+lJq8rFWEznP7yJm3GCHBicadF6hiNX1aRARRZIjz2doeTlTGg/hOvJr4C/8+3k9Y/J5Hg== + dependencies: + "@types/resolve" "0.0.8" + builtin-modules "^3.1.0" + is-module "^1.0.0" + resolve "^1.11.1" + rollup-pluginutils "^2.8.1" + +rollup-plugin-sourcemaps@0.4.2, rollup-plugin-sourcemaps@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.4.2.tgz#62125aa94087aadf7b83ef4dfaf629b473135e87" dependencies: @@ -13320,15 +13642,36 @@ rollup-plugin-terser@4.0.4: serialize-javascript "^1.6.1" terser "^3.14.1" +rollup-plugin-terser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.0.0.tgz#ac50fdb703b580447a7e6b1692aeed515a6be8cf" + integrity sha512-W+jJ4opYnlmNyVW0vtRufs+EGf68BIJ7bnOazgz8mgz8pA9lUyrEifAhPs5y9M16wFeAyBGaRjKip4dnFBtXaw== + dependencies: + "@babel/code-frame" "^7.0.0" + jest-worker "^24.6.0" + serialize-javascript "^1.7.0" + terser "^4.0.0" + rollup-plugin-typescript2@0.19.3: version "0.19.3" resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.19.3.tgz#713063233461765f030a2baa2640905c2656164f" + integrity sha512-lsRqfBCZhMl/tq9AT5YnQvzQWzXtnx3EQYFcHD72gul7nyyoOrzx5yCEH20smpw58v6UkHHZz03FbdLEPoHWjA== dependencies: fs-extra "7.0.1" resolve "1.8.1" rollup-pluginutils "2.3.3" tslib "1.9.3" +rollup-plugin-typescript2@^0.21.1: + version "0.21.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.21.1.tgz#91cea787c5282762f4849e334cbef6a9fdaa7564" + integrity sha512-jM2tn8/fUKDRmDtH++/6CHYHv2R9dxfXnuW0rxbOq1Zrxdsg4g6w+WwbK0X2ma21WQcT9l/U9bA3RO+2SBIJ/A== + dependencies: + fs-extra "7.0.1" + resolve "1.10.1" + rollup-pluginutils "2.6.0" + tslib "1.9.3" + rollup-plugin-visualizer@0.9.2: version "0.9.2" resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-0.9.2.tgz#bbc8e8e67d5aa3e6c188c5ca0fcfa57234fb9f92" @@ -13338,20 +13681,47 @@ rollup-plugin-visualizer@0.9.2: source-map "^0.7.3" typeface-oswald "0.0.54" +rollup-plugin-visualizer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-1.1.1.tgz#454ae0aed23845407ebfb81cc52114af308d6d90" + integrity sha512-7xkSKp+dyJmSC7jg2LXqViaHuOnF1VvIFCnsZEKjrgT5ZVyiLLSbeszxFcQSfNJILphqgAEmWAUz0Z4xYScrRw== + dependencies: + mkdirp "^0.5.1" + opn "^5.4.0" + source-map "^0.7.3" + typeface-oswald "0.0.54" + rollup-pluginutils@2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz#3aad9b1eb3e7fe8262820818840bf091e5ae6794" + integrity sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA== dependencies: estree-walker "^0.5.2" micromatch "^2.3.11" -rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.3.3: +rollup-pluginutils@2.6.0, rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.3.3: version "2.6.0" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.6.0.tgz#203706edd43dfafeaebc355d7351119402fc83ad" dependencies: estree-walker "^0.6.0" micromatch "^3.1.10" +rollup-pluginutils@^2.3.1, rollup-pluginutils@^2.5.0, rollup-pluginutils@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz#8fa6dd0697344938ef26c2c09d2488ce9e33ce97" + integrity sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg== + dependencies: + estree-walker "^0.6.1" + +rollup-watch@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/rollup-watch/-/rollup-watch-4.3.1.tgz#5aa1eaeab787addf368905d102b39d6fc5ce4a8b" + integrity sha512-6yjnIwfjpSrqA8IafyIu7fsEyeImNR4aDjA1bQ7KWeVuiA+Clfsx8+PGQkyABWIQzmauQ//tIJ5wAxLXsXs8qQ== + dependencies: + chokidar "^1.7.0" + require-relative "0.8.7" + rollup-pluginutils "^2.0.1" + rollup@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.6.0.tgz#4329f4634718197c678d18491724d50d8b7ee76c" @@ -13360,6 +13730,15 @@ rollup@1.6.0: "@types/node" "^11.9.5" acorn "^6.1.1" +rollup@^1.14.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.16.2.tgz#959aeae4b06c8e540749bac442d6d37aefb9217d" + integrity sha512-UAZxaQvH0klYZdF+90xv9nGb+m4p8jdoaow1VL5/RzDK/gN/4CjvaMmJNcOIv1/+gtzswKhAg/467mzF0sLpAg== + dependencies: + "@types/estree" "0.0.39" + "@types/node" "^12.0.8" + acorn "^6.1.1" + rst-selector-parser@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91" @@ -13596,7 +13975,7 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@5.7.0, "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" @@ -13604,6 +13983,16 @@ semver@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.0.0.tgz#05e359ee571e5ad7ed641a6eec1e547ba52dea65" +semver@^6.1.1: + version "6.1.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.2.tgz#079960381376a3db62eb2edc8a3bfb10c7cfe318" + integrity sha512-z4PqiCpomGtWj8633oeAdXm1Kn1W++3T8epkZYnwiVgIYIJ0QHszhInYSJTYxebByQH7KVCEAn8R9duzZW2PhQ== + +semver@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-2.3.2.tgz#b9848f25d6cf36333073ec9ef8856d42f1233e52" + integrity sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI= + semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -13633,7 +14022,7 @@ sentence-case@^2.1.0: no-case "^2.2.0" upper-case-first "^1.1.2" -serialize-javascript@^1.4.0, serialize-javascript@^1.6.1: +serialize-javascript@^1.4.0, serialize-javascript@^1.6.1, serialize-javascript@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" @@ -14270,6 +14659,11 @@ string-length@^2.0.0: astral-regex "^1.0.0" strip-ansi "^4.0.0" +string-range@~1.2, string-range@~1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/string-range/-/string-range-1.2.2.tgz#a893ed347e72299bc83befbbf2a692a8d239d5dd" + integrity sha1-qJPtNH5yKZvIO++78qaSqNI51d0= + string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -14285,7 +14679,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^3.0.0: +string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" dependencies: @@ -14397,7 +14791,7 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0, strip-ansi@^5.1.0: +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" dependencies: @@ -14647,6 +15041,15 @@ terser@^3.14.1, terser@^3.16.1: source-map "~0.6.1" source-map-support "~0.5.10" +terser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.0.0.tgz#ef356f6f359a963e2cc675517f21c1c382877374" + integrity sha512-dOapGTU0hETFl1tCo4t56FN+2jffoKyER9qBGoUFyZ6y7WLoKT0bF+lAYi6B6YsILcGF3q1C2FBh8QcKSCgkgA== + dependencies: + commander "^2.19.0" + source-map "~0.6.1" + source-map-support "~0.5.10" + test-exclude@^5.2.3: version "5.2.3" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" @@ -14918,6 +15321,17 @@ ts-node@8.1.0: source-map-support "^0.5.6" yn "^3.0.0" +ts-node@^8.2.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.3.0.tgz#e4059618411371924a1fb5f3b125915f324efb57" + integrity sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ== + dependencies: + arg "^4.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.6" + yn "^3.0.0" + tslib@1.9.3, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" @@ -15001,6 +15415,11 @@ typed-styles@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" +typedarray-to-buffer@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz#9bb8ba0e841fb3f4cf1fe7c245e9f3fa8a5fe99c" + integrity sha1-m7i6DoQfs/TPH+fCRenz+opf6Zw= + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -15176,7 +15595,7 @@ unzip-response@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" -upath@^1.1.1: +upath@^1.0.5, upath@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" @@ -15377,6 +15796,11 @@ vfile@^4.0.0: unist-util-stringify-position "^2.0.0" vfile-message "^2.0.0" +vlq@^0.2.2: + version "0.2.3" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" + integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== + vm-browserify@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" @@ -15749,6 +16173,15 @@ wrap-ansi@^3.0.1: string-width "^2.1.1" strip-ansi "^4.0.0" +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -15818,10 +16251,35 @@ xss@1.0.3: commander "^2.9.0" cssfilter "0.0.10" +xtend@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.2.0.tgz#eef6b1f198c1c8deafad8b1765a04dad4a01c5a9" + integrity sha1-7vax8ZjByN6vrYsXZaBNrUoBxak= + xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" +xtend@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.0.6.tgz#5ea657a6dba447069c2e59c58a1138cb0c5e6cee" + integrity sha1-XqZXptukRwacLlnFihE4ywxebO4= + dependencies: + is-object "~0.1.2" + object-keys "~0.2.0" + +xtend@~2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" + integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os= + dependencies: + object-keys "~0.4.0" + +xtend@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a" + integrity sha1-XM50B7r2Qsunvs2laBEcST9ZZlo= + y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" @@ -15851,6 +16309,14 @@ yargs-parser@^11.1.1: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^13.1.0: + version "13.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" + integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" @@ -15914,6 +16380,23 @@ yargs@^12.0.1, yargs@^12.0.2, yargs@^12.0.4: y18n "^3.2.1 || ^4.0.0" yargs-parser "^11.1.1" +yargs@^13.2.2: + version "13.2.4" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" + integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + os-locale "^3.1.0" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.0" + yargs@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"