diff --git a/.eslintrc.js b/.eslintrc.js index cef8c7ca..9e974848 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -7,6 +7,7 @@ module.exports = { 'plugin:prettier/recommended' // Enables eslint-plugin-prettier and displays prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array. ], rules: { + '@typescript-eslint/no-object-literal-type-assertion': 'off', '@typescript-eslint/explicit-function-return-type': 'off', '@typescript-eslint/no-use-before-define': 'off', '@typescript-eslint/camelcase': 'off', diff --git a/README.md b/README.md index 2f32f835..2ca5f091 100644 --- a/README.md +++ b/README.md @@ -98,6 +98,7 @@ The above commands will start an interactive prompt. You can use the `arrow keys | --path | Only list commits touching files under a specific path | | string | | --pr-description | Pull request description suffix | | string | | --pr-title | Pull request title pattern | | string | +| --pr | Pull request to backport | | number | | --sha | Sha of commit to backport | | string | | --upstream | Name of organization and repository | | string | | --username | Github username | | string | diff --git a/jest.config.js b/jest.config.js index d730ab55..be8dd641 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,9 +1,9 @@ module.exports = { - setupFiles: ['./test/unit/automatic-mocks.ts'], + setupFiles: ['./src/test/automatic-mocks.ts'], transform: { '^.+\\.tsx?$': 'ts-jest' }, - testRegex: 'test/(unit|integration)/.*test.ts$', + testRegex: '(test|src)/.*test.ts$', moduleFileExtensions: ['ts', 'js', 'json'], globals: { 'ts-jest': { diff --git a/package.json b/package.json index f85ef4cd..5c6383a4 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "scripts": { "cover": "jest --coverage", "format": "prettier \"./{src,test}/**/*.ts\" --write", - "lint": "tsc --project ./test/tsconfig.json && eslint ./src/**/*.ts ./test/**/*.ts", + "lint": "tsc --project ./src/test/tsconfig.json && eslint ./src/**/*.ts", "postinstall": "test -f ./dist/scripts/runPostinstall.js && node ./dist/scripts/runPostinstall.js || echo 'Dist folder missing'", "prepublishOnly": "tsc", "publish-dry-run": "tar -tf $(npm pack)", @@ -65,9 +65,9 @@ }, "dependencies": { "axios": "^0.19.0", - "del": "^5.0.0", + "del": "^5.1.0", "find-up": "^4.1.0", - "inquirer": "^6.5.0", + "inquirer": "^7.0.0", "lodash.flatten": "^4.4.0", "lodash.get": "^4.4.2", "lodash.isempty": "^4.4.0", @@ -75,31 +75,31 @@ "make-dir": "^3.0.0", "ora": "^3.4.0", "strip-json-comments": "^3.0.1", - "yargs": "^13.3.0" + "yargs": "^14.0.0" }, "devDependencies": { "@types/core-js": "^2.5.2", "@types/find-up": "^4.0.0", - "@types/inquirer": "^6.0.3", - "@types/jest": "^24.0.15", - "@types/lodash": "^4.14.136", + "@types/inquirer": "^6.5.0", + "@types/jest": "^24.0.18", + "@types/lodash": "^4.14.137", "@types/lodash.flatten": "^4.4.6", "@types/lodash.get": "^4.4.6", "@types/lodash.isempty": "^4.4.6", "@types/lodash.isstring": "^4.0.6", "@types/nock": "^10.0.3", - "@types/node": "^10.14.4", + "@types/node": "^10.14.16", "@types/strip-json-comments": "^3.0.0", - "@types/yargs": "^13.0.0", - "@typescript-eslint/eslint-plugin": "^1.12.0", - "@typescript-eslint/parser": "^1.12.0", - "eslint": "^6.0.1", - "eslint-config-prettier": "^6.0.0", - "eslint-plugin-import": "^2.18.0", + "@types/yargs": "^13.0.2", + "@typescript-eslint/eslint-plugin": "^2.0.0", + "@typescript-eslint/parser": "^2.0.0", + "eslint": "^6.2.2", + "eslint-config-prettier": "^6.1.0", + "eslint-plugin-import": "^2.18.2", "eslint-plugin-prettier": "^3.1.0", - "husky": "^3.0.0", - "jest": "^24.8.0", - "lint-staged": "^9.2.0", + "husky": "^3.0.4", + "jest": "^24.9.0", + "lint-staged": "^9.2.4", "lodash": "^4.17.15", "nock": "^10.0.6", "prettier": "^1.18.2", diff --git a/test/unit/options/__snapshots__/options.test.ts.snap b/src/options/__snapshots__/options.test.ts.snap similarity index 100% rename from test/unit/options/__snapshots__/options.test.ts.snap rename to src/options/__snapshots__/options.test.ts.snap diff --git a/test/unit/options/cliArgs.test.ts b/src/options/cliArgs.test.ts similarity index 94% rename from test/unit/options/cliArgs.test.ts rename to src/options/cliArgs.test.ts index bd3ebdd1..188b9a06 100644 --- a/test/unit/options/cliArgs.test.ts +++ b/src/options/cliArgs.test.ts @@ -1,4 +1,4 @@ -import { getOptionsFromCliArgs } from '../../../src/options/cliArgs'; +import { getOptionsFromCliArgs } from './cliArgs'; describe('getOptionsFromCliArgs', () => { let res: ReturnType; diff --git a/src/options/cliArgs.ts b/src/options/cliArgs.ts index bf605b22..a5f68dff 100644 --- a/src/options/cliArgs.ts +++ b/src/options/cliArgs.ts @@ -92,6 +92,11 @@ export function getOptionsFromCliArgs( description: 'Description to be added to pull request', type: 'string' }) + .option('pullNumber', { + description: 'Pull request to backport', + type: 'number', + alias: 'pr' + }) .option('sha', { description: 'Commit sha to backport', type: 'string', @@ -129,6 +134,7 @@ export function getOptionsFromCliArgs( path: cliArgs.path, prTitle: cliArgs.prTitle, prDescription: cliArgs.prDescription, + pullNumber: cliArgs.pullNumber, sha: cliArgs.sha, upstream: cliArgs.upstream, username: cliArgs.username diff --git a/test/unit/options/config/config.test.ts b/src/options/config/config.test.ts similarity index 83% rename from test/unit/options/config/config.test.ts rename to src/options/config/config.test.ts index e49af19c..166baaae 100644 --- a/test/unit/options/config/config.test.ts +++ b/src/options/config/config.test.ts @@ -1,5 +1,5 @@ -import { PromiseReturnType } from '../../../../src/types/commons'; -import { getOptionsFromConfigFiles } from '../../../../src/options/config/config'; +import { PromiseReturnType } from '../../types/commons'; +import { getOptionsFromConfigFiles } from './config'; describe('getOptionsFromConfigFiles', () => { let res: PromiseReturnType; diff --git a/test/unit/options/config/globalConfig.test.ts b/src/options/config/globalConfig.test.ts similarity index 89% rename from test/unit/options/config/globalConfig.test.ts rename to src/options/config/globalConfig.test.ts index ae4fdd00..7431cb43 100644 --- a/test/unit/options/config/globalConfig.test.ts +++ b/src/options/config/globalConfig.test.ts @@ -1,9 +1,6 @@ -import * as fs from '../../../../src/services/fs-promisified'; -import { PromiseReturnType } from '../../../../src/types/commons'; -import { - getGlobalConfig, - maybeCreateGlobalConfig -} from '../../../../src/options/config/globalConfig'; +import * as fs from '../../services/fs-promisified'; +import { PromiseReturnType } from '../../types/commons'; +import { getGlobalConfig, maybeCreateGlobalConfig } from './globalConfig'; import makeDir from 'make-dir'; describe('config', () => { diff --git a/test/unit/options/config/projectConfig.test.ts b/src/options/config/projectConfig.test.ts similarity index 86% rename from test/unit/options/config/projectConfig.test.ts rename to src/options/config/projectConfig.test.ts index 5b7c2f3e..9636c646 100644 --- a/test/unit/options/config/projectConfig.test.ts +++ b/src/options/config/projectConfig.test.ts @@ -1,7 +1,7 @@ import findUp from 'find-up'; -import * as fs from '../../../../src/services/fs-promisified'; -import { PromiseReturnType } from '../../../../src/types/commons'; -import { getProjectConfig } from '../../../../src/options/config/projectConfig'; +import * as fs from '../../services/fs-promisified'; +import { PromiseReturnType } from '../../types/commons'; +import { getProjectConfig } from './projectConfig'; describe('getProjectConfig', () => { afterEach(() => jest.restoreAllMocks()); diff --git a/test/unit/options/options.test.ts b/src/options/options.test.ts similarity index 94% rename from test/unit/options/options.test.ts rename to src/options/options.test.ts index 9cc97e47..514dfe21 100644 --- a/test/unit/options/options.test.ts +++ b/src/options/options.test.ts @@ -1,5 +1,5 @@ -import { OptionsFromCliArgs } from '../../../src/options/cliArgs'; -import { validateRequiredOptions } from '../../../src/options/options'; +import { OptionsFromCliArgs } from './cliArgs'; +import { validateRequiredOptions } from './options'; const validOptions: OptionsFromCliArgs = { accessToken: 'myAccessToken', @@ -17,8 +17,9 @@ const validOptions: OptionsFromCliArgs = { multipleBranches: true, multipleCommits: false, path: undefined, - prTitle: 'myPrTitle', prDescription: undefined, + prTitle: 'myPrTitle', + pullNumber: undefined, sha: undefined, upstream: 'elastic/kibana', username: 'sqren' diff --git a/test/unit/scripts/postinstall.test.ts b/src/scripts/postinstall.test.ts similarity index 85% rename from test/unit/scripts/postinstall.test.ts rename to src/scripts/postinstall.test.ts index 744639f8..eec6c906 100644 --- a/test/unit/scripts/postinstall.test.ts +++ b/src/scripts/postinstall.test.ts @@ -1,5 +1,5 @@ -import * as globalConfig from '../../../src/options/config/globalConfig'; -import { postinstall } from '../../../src/scripts/postinstall'; +import * as globalConfig from '../options/config/globalConfig'; +import { postinstall } from './postinstall'; describe('postinstall', () => { it("should create global config if it doesn't exist", async () => { diff --git a/test/unit/services/env.test.ts b/src/services/env.test.ts similarity index 88% rename from test/unit/services/env.test.ts rename to src/services/env.test.ts index 1be977df..a47ebe25 100644 --- a/test/unit/services/env.test.ts +++ b/src/services/env.test.ts @@ -1,10 +1,10 @@ -import { BackportOptions } from '../../../src/options/options'; +import { BackportOptions } from '../options/options'; import { getGlobalConfigPath, getRepoOwnerPath, getRepoPath, getReposPath -} from '../../../src/services/env'; +} from '../services/env'; describe('env', () => { test('getGlobalConfigPath', () => { diff --git a/test/unit/services/git.test.ts b/src/services/git.test.ts similarity index 89% rename from test/unit/services/git.test.ts rename to src/services/git.test.ts index cc05f9f7..809bf8ae 100644 --- a/test/unit/services/git.test.ts +++ b/src/services/git.test.ts @@ -1,6 +1,6 @@ -import { BackportOptions } from '../../../src/options/options'; -import { addRemote } from '../../../src/services/git'; -import * as childProcess from '../../../src/services/child-process-promisified'; +import { BackportOptions } from '../options/options'; +import { addRemote } from '../services/git'; +import * as childProcess from '../services/child-process-promisified'; describe('addRemote', () => { it('add correct origin remote', async () => { diff --git a/test/unit/services/github/__snapshots__/fetchCommitBySha.test.ts.snap b/src/services/github/__snapshots__/fetchCommitBySha.test.ts.snap similarity index 50% rename from test/unit/services/github/__snapshots__/fetchCommitBySha.test.ts.snap rename to src/services/github/__snapshots__/fetchCommitBySha.test.ts.snap index 5b55338b..d2fa6253 100644 --- a/test/unit/services/github/__snapshots__/fetchCommitBySha.test.ts.snap +++ b/src/services/github/__snapshots__/fetchCommitBySha.test.ts.snap @@ -3,15 +3,12 @@ exports[`fetchCommitBySha should return single commit with pull request 1`] = ` Array [ Array [ - "https://api.github.com/search/commits?q=hash:myCommitSha%20repo:elastic/kibana&per_page=1&access_token=myAccessToken", + "https://api.github.com/search/commits?q=hash:sha123456789%20repo:elastic/kibana&per_page=1&access_token=myAccessToken", Object { "headers": Object { "Accept": "application/vnd.github.cloak-preview", }, }, ], - Array [ - "https://api.github.com/search/issues?q=repo:elastic/kibana+myCommitSha+base:master&access_token=myAccessToken", - ], ] `; diff --git a/test/unit/services/github/__snapshots__/fetchCommitsByAuthor.test.ts.snap b/src/services/github/__snapshots__/fetchCommitsByAuthor.test.ts.snap similarity index 93% rename from test/unit/services/github/__snapshots__/fetchCommitsByAuthor.test.ts.snap rename to src/services/github/__snapshots__/fetchCommitsByAuthor.test.ts.snap index 3fa9da53..de70be89 100644 --- a/test/unit/services/github/__snapshots__/fetchCommitsByAuthor.test.ts.snap +++ b/src/services/github/__snapshots__/fetchCommitsByAuthor.test.ts.snap @@ -48,6 +48,12 @@ Array [ associatedPullRequests(first: 1) { edges { node { + repository { + owner { + login + } + name + } number timelineItems( last: 20 diff --git a/src/services/github/commitFormatters.test.ts b/src/services/github/commitFormatters.test.ts new file mode 100644 index 00000000..24e1203c --- /dev/null +++ b/src/services/github/commitFormatters.test.ts @@ -0,0 +1,51 @@ +import { + getFirstCommitMessageLine, + getFormattedCommitMessage +} from './commitFormatters'; + +describe('getFirstCommitMessageLine', () => { + it('should only return the first line of the message', () => { + expect( + getFirstCommitMessageLine( + 'My commit message (#1234)\n\n Additional commit message body' + ) + ).toEqual('My commit message (#1234)'); + }); + + it('should return the commit message as-is', () => { + expect(getFirstCommitMessageLine('My commit message')).toEqual( + 'My commit message' + ); + }); +}); + +describe('getFormattedCommitMessage', () => { + it('should return the first message line verbatim', () => { + expect( + getFormattedCommitMessage({ + message: 'This is my commit message (#1234)\n\nthis is a second line', + pullNumber: 1234, + sha: 'sha123456789' + }) + ).toBe('This is my commit message (#1234)'); + }); + + it('should add pullNumber as suffix', () => { + expect( + getFormattedCommitMessage({ + message: 'This is my commit message\n\nthis is a second line', + pullNumber: 1234, + sha: 'sha123456789' + }) + ).toBe('This is my commit message (#1234)'); + }); + + it('should add commit sha as suffix', () => { + expect( + getFormattedCommitMessage({ + message: 'This is my commit message\n\nthis is a second line', + sha: 'sha123456789' + }) + ).toBe('This is my commit message (sha12345)'); + }); +}); diff --git a/src/services/github/commitFormatters.ts b/src/services/github/commitFormatters.ts index 9b573beb..ad16510f 100644 --- a/src/services/github/commitFormatters.ts +++ b/src/services/github/commitFormatters.ts @@ -1,23 +1,33 @@ -import { CommitChoice, CommitSelected } from './Commit'; - -export function getHumanReadableReference(commit: CommitSelected) { - return commit.pullNumber ? `#${commit.pullNumber}` : getShortSha(commit.sha); -} - export function getShortSha(sha: string) { return sha.slice(0, 8); } export function getFirstCommitMessageLine(message: string) { - return message.split('\n')[0].replace(/\s\(#\d+\)/g, ''); + return message.split('\n')[0]; } -export function withFormattedCommitMessage< - T extends CommitSelected | CommitChoice ->(commit: T): T { - const firstMessageLine = getFirstCommitMessageLine(commit.message); - return { - ...commit, - message: `${firstMessageLine} (${getHumanReadableReference(commit)})` - }; +export function getFormattedCommitMessage({ + message, + pullNumber, + sha +}: { + message: string; + pullNumber?: number; + sha: string; +}) { + const firstMessageLine = getFirstCommitMessageLine(message); + if (pullNumber) { + const messageHasPullNumber = firstMessageLine.includes(`#${pullNumber}`); + + // message already contain pull number + if (messageHasPullNumber) { + return firstMessageLine; + } + + // message doesn't contain pull number. Add it + return `${firstMessageLine} (#${pullNumber})`; + } + + // pull number not available. Add commit + return `${firstMessageLine} (${getShortSha(sha)})`; } diff --git a/src/services/github/fetchCommitByPullNumber.ts b/src/services/github/fetchCommitByPullNumber.ts new file mode 100644 index 00000000..447c5a46 --- /dev/null +++ b/src/services/github/fetchCommitByPullNumber.ts @@ -0,0 +1,75 @@ +import { BackportOptions } from '../../options/options'; +import { HandledError } from '../HandledError'; +import { CommitSelected } from './Commit'; +import { getFormattedCommitMessage } from './commitFormatters'; +import { gqlRequest } from './gqlRequest'; + +export async function fetchCommitByPullNumber( + options: BackportOptions & { pullNumber: number } +): Promise { + const { apiHostname, repoName, repoOwner, pullNumber, accessToken } = options; + const query = /* GraphQL */ ` + query getCommitbyPullNumber( + $repoOwner: String! + $repoName: String! + $pullNumber: Int! + ) { + repository(owner: $repoOwner, name: $repoName) { + pullRequest(number: $pullNumber) { + baseRef { + name + } + mergeCommit { + oid + message + } + } + } + } + `; + + const res = await gqlRequest({ + apiHostname, + accessToken, + query, + variables: { + repoOwner, + repoName, + pullNumber + } + }); + + const baseRef = res.repository.pullRequest.baseRef.name; + if (baseRef !== 'master') { + throw new HandledError( + `The pull request #${pullNumber} was merged into ${baseRef}. Only commits in master can be backported` + ); + } + + const sha = res.repository.pullRequest.mergeCommit.oid; + const message = getFormattedCommitMessage({ + message: res.repository.pullRequest.mergeCommit.message, + sha, + pullNumber + }); + + return { + sha, + message, + pullNumber + }; +} + +interface DataResponse { + repository: { + pullRequest: { + baseRef: { + name: string; + }; + mergeCommit: { + oid: string; + message: string; + }; + }; + }; +} diff --git a/test/unit/services/github/fetchCommitBySha.test.ts b/src/services/github/fetchCommitBySha.test.ts similarity index 50% rename from test/unit/services/github/fetchCommitBySha.test.ts rename to src/services/github/fetchCommitBySha.test.ts index 280ed700..bcbf620e 100644 --- a/test/unit/services/github/fetchCommitBySha.test.ts +++ b/src/services/github/fetchCommitBySha.test.ts @@ -1,11 +1,18 @@ import axios from 'axios'; -import { fetchCommitBySha } from '../../../../src/services/github/fetchCommitBySha'; -import { getDefaultOptions } from './getDefaultOptions'; +import { fetchCommitBySha } from './fetchCommitBySha'; +import { BackportOptions } from '../../options/options'; describe('fetchCommitBySha', () => { it('should return single commit with pull request', async () => { - const commitSha = 'myCommitSha'; - const options = getDefaultOptions(); + const commitSha = 'sha123456789'; + const options = { + repoOwner: 'elastic', + repoName: 'kibana', + accessToken: 'myAccessToken', + username: 'sqren', + author: 'sqren', + apiHostname: 'api.github.com' + } as BackportOptions; const axiosSpy = jest .spyOn(axios, 'get') @@ -13,17 +20,12 @@ describe('fetchCommitBySha', () => { // mock commits .mockResolvedValueOnce({ data: { items: [{ commit: { message: 'myMessage' }, sha: commitSha }] } - }) - - // mock PRs - .mockResolvedValueOnce({ - data: { items: [{ number: 'myPullRequestNumber' }] } }); expect(await fetchCommitBySha({ ...options, sha: commitSha })).toEqual({ - message: 'myMessage (#myPullRequestNumber)', - pullNumber: 'myPullRequestNumber', - sha: 'myCommitSha' + message: 'myMessage (sha12345)', + pullNumber: undefined, + sha: 'sha123456789' }); expect(axiosSpy.mock.calls).toMatchSnapshot(); diff --git a/src/services/github/fetchCommitBySha.ts b/src/services/github/fetchCommitBySha.ts index dd4ae78c..5e169d3a 100644 --- a/src/services/github/fetchCommitBySha.ts +++ b/src/services/github/fetchCommitBySha.ts @@ -1,12 +1,11 @@ import axios from 'axios'; -import get from 'lodash.get'; import isEmpty from 'lodash.isempty'; import { BackportOptions } from '../../options/options'; import { HandledError } from '../HandledError'; import { CommitSelected } from './Commit'; -import { GithubCommit, GithubIssue, GithubSearch } from './GithubApiTypes'; +import { GithubCommit, GithubSearch } from './GithubApiTypes'; import { handleGithubError } from './handleGithubError'; -import { withFormattedCommitMessage } from './commitFormatters'; +import { getFormattedCommitMessage } from './commitFormatters'; export async function fetchCommitBySha( options: BackportOptions & { sha: string } @@ -28,24 +27,17 @@ export async function fetchCommitBySha( const commitRes = res.data.items[0]; const fullSha = commitRes.sha; - const pullNumber = await fetchPullRequestNumberBySha(options, fullSha); - return withFormattedCommitMessage({ + const message = getFormattedCommitMessage({ message: commitRes.commit.message, - sha: fullSha, - pullNumber + sha: fullSha }); + + return { + message, + sha: fullSha + }; } catch (e) { throw handleGithubError(e); } } - -async function fetchPullRequestNumberBySha( - { apiHostname, repoName, repoOwner, accessToken }: BackportOptions, - commitSha: string -): Promise { - const res = await axios.get>( - `https://${apiHostname}/search/issues?q=repo:${repoOwner}/${repoName}+${commitSha}+base:master&access_token=${accessToken}` - ); - return get(res.data.items[0], 'number'); -} diff --git a/test/unit/services/github/fetchCommitsByAuthor.test.ts b/src/services/github/fetchCommitsByAuthor.test.ts similarity index 52% rename from test/unit/services/github/fetchCommitsByAuthor.test.ts rename to src/services/github/fetchCommitsByAuthor.test.ts index aaea2ae2..37838d68 100644 --- a/test/unit/services/github/fetchCommitsByAuthor.test.ts +++ b/src/services/github/fetchCommitsByAuthor.test.ts @@ -1,13 +1,13 @@ -import * as gqlRequest from '../../../../src/services/github/gqlRequest'; -import { CommitSelected } from '../../../../src/services/github/Commit'; +import * as gqlRequest from './gqlRequest'; +import { CommitSelected } from './Commit'; import { PullRequestEdge, fetchCommitsByAuthor, getExistingBackportPRs, TimelineItemEdge -} from '../../../../src/services/github/fetchCommitsByAuthor'; +} from './fetchCommitsByAuthor'; import { commitsWithPullRequestsMock } from './mocks/commitsByAuthorMock'; -import { getDefaultOptions } from './getDefaultOptions'; +import { getDefaultOptions } from '../../test/getDefaultOptions'; describe('fetchCommitsByAuthor', () => { describe('when commit has an associated pull request', () => { @@ -64,6 +64,32 @@ describe('fetchCommitsByAuthor', () => { }); }); + describe('existingBackports', () => { + it('should return existingBackports when repoNames match', async () => { + const res = await getExistingBackportsByRepoName('kibana', 'kibana'); + expect(res).toEqual([ + { + existingBackports: [{ branch: '6.3', state: 'MERGED' }], + message: 'Add SF mention (#80)', + pullNumber: 80, + sha: '79cf18453ec32a4677009dcbab1c9c8c73fc14fe' + } + ]); + }); + + it('should not return existingBackports when repoNames does not match', async () => { + const res = await getExistingBackportsByRepoName('kibana', 'kibana2'); + expect(res).toEqual([ + { + existingBackports: [], + message: 'Add SF mention (#80)', + pullNumber: 80, + sha: '79cf18453ec32a4677009dcbab1c9c8c73fc14fe' + } + ]); + }); + }); + describe('when a custom github api hostname is supplied', () => { it('should be used in gql requests', async () => { const requestSpy = spyOn(gqlRequest, 'gqlRequest').and.returnValues( @@ -91,6 +117,12 @@ describe('getExistingBackportPRs', () => { beforeEach(() => { pullRequest = { node: { + repository: { + name: 'kibana', + owner: { + login: 'elastic' + } + }, number: 1234, timelineItems: { edges: [ @@ -137,3 +169,78 @@ describe('getExistingBackportPRs', () => { expect(existingPRs).toEqual([{ branch: '7.x', state: 'MERGED' }]); }); }); + +async function getExistingBackportsByRepoName( + repoName1: string, + repoName2: string +) { + const mock = { + repository: { + ref: { + target: { + history: { + edges: [ + { + node: { + oid: '79cf18453ec32a4677009dcbab1c9c8c73fc14fe', + message: + 'Add SF mention (#80)\n\n* Add SF mention\r\n\r\n* Add several emojis!', + associatedPullRequests: { + edges: [ + { + node: { + repository: { + name: repoName1, + owner: { + login: 'elastic' + } + }, + number: 80, + timelineItems: { + edges: [ + { + node: { + source: { + __typename: 'PullRequest', + state: 'MERGED', + baseRefName: '6.3', + commits: { + edges: [ + { + node: { + commit: { + message: + 'Add SF mention (#80)\n\n* Add SF mention\r\n\r\n* Add several emojis!' + } + } + } + ] + } + } + } + } + ] + } + } + } + ] + } + } + } + ] + } + } + } + } + }; + + spyOn(gqlRequest, 'gqlRequest').and.returnValues( + { user: { id: 'myUserId' } }, + mock + ); + + const options = getDefaultOptions({ + repoName: repoName2 + }); + return fetchCommitsByAuthor(options); +} diff --git a/src/services/github/fetchCommitsByAuthor.ts b/src/services/github/fetchCommitsByAuthor.ts index f96feaea..6ef64426 100644 --- a/src/services/github/fetchCommitsByAuthor.ts +++ b/src/services/github/fetchCommitsByAuthor.ts @@ -4,62 +4,10 @@ import { CommitChoice } from './Commit'; import { fetchAuthorId } from './fetchAuthorId'; import { getFirstCommitMessageLine, - withFormattedCommitMessage + getFormattedCommitMessage } from './commitFormatters'; import { gqlRequest } from './gqlRequest'; -export interface DataResponse { - repository: { - ref: { - target: { - history: { - edges: HistoryEdge[]; - }; - }; - }; - }; -} - -interface HistoryEdge { - node: { - oid: string; - message: string; - associatedPullRequests: { - edges: PullRequestEdge[]; - }; - }; -} - -export interface PullRequestEdge { - node: { - number: number; - timelineItems: { - edges: (TimelineItemEdge | null)[]; - }; - }; -} - -export interface TimelineItemEdge { - node: { - source: { - __typename: string; - state: 'OPEN' | 'CLOSED' | 'MERGED'; - baseRefName: string; - commits: { - edges: CommitEdge[]; - }; - }; - }; -} - -interface CommitEdge { - node: { - commit: { - message: string; - }; - }; -} - export async function fetchCommitsByAuthor( options: BackportOptions ): Promise { @@ -96,6 +44,12 @@ export async function fetchCommitsByAuthor( associatedPullRequests(first: 1) { edges { node { + repository { + owner { + login + } + name + } number timelineItems( last: 20 @@ -153,25 +107,61 @@ export async function fetchCommitsByAuthor( return res.repository.ref.target.history.edges.map(edge => { const historyNode = edge.node; - const firstPullRequest = historyNode.associatedPullRequests.edges[0]; - const pullNumber = get(firstPullRequest, 'node.number'); + const associatedPullRequest = getAssociatedPullRequest( + historyNode.associatedPullRequests.edges[0], + options + ); + const existingBackports = getExistingBackportPRs( historyNode.message, - firstPullRequest + associatedPullRequest ); - return withFormattedCommitMessage({ - sha: historyNode.oid, - message: historyNode.message, + const sha = historyNode.oid; + const firstMessageLine = getFirstCommitMessageLine(historyNode.message); + const pullNumber = + get(associatedPullRequest, 'node.number') || + getPullNumberFromMessage(firstMessageLine); + + const message = getFormattedCommitMessage({ + message: firstMessageLine, pullNumber, - existingBackports + sha }); + + return { + sha, + message, + pullNumber, + existingBackports + }; }); } +function getPullNumberFromMessage(firstMessageLine: string) { + const matches = firstMessageLine.match(/\(#(\d+)\)/); + if (matches) { + return parseInt(matches[1], 10); + } +} + +function getAssociatedPullRequest( + pullRequestEdge: PullRequestEdge | undefined, + options: BackportOptions +) { + const isAssociated = + pullRequestEdge && + pullRequestEdge.node.repository.name === options.repoName && + pullRequestEdge.node.repository.owner.login === options.repoOwner; + + if (isAssociated) { + return pullRequestEdge; + } +} + export function getExistingBackportPRs( message: string, - pullRequest?: PullRequestEdge + pullRequest: PullRequestEdge | undefined ) { if (!pullRequest) { return []; @@ -203,3 +193,61 @@ export function getExistingBackportPRs( function notEmpty(value: TValue | null | undefined): value is TValue { return value !== null && value !== undefined; } + +export interface DataResponse { + repository: { + ref: { + target: { + history: { + edges: HistoryEdge[]; + }; + }; + }; + }; +} + +interface HistoryEdge { + node: { + oid: string; + message: string; + associatedPullRequests: { + edges: PullRequestEdge[]; + }; + }; +} + +export interface PullRequestEdge { + node: { + number: number; + repository: { + owner: { + login: string; + }; + name: string; + }; + timelineItems: { + edges: (TimelineItemEdge | null)[]; + }; + }; +} + +export interface TimelineItemEdge { + node: { + source: { + __typename: string; + state: 'OPEN' | 'CLOSED' | 'MERGED'; + baseRefName: string; + commits: { + edges: CommitEdge[]; + }; + }; + }; +} + +interface CommitEdge { + node: { + commit: { + message: string; + }; + }; +} diff --git a/test/unit/services/github/gqlRequest.test.ts b/src/services/github/gqlRequest.test.ts similarity index 92% rename from test/unit/services/github/gqlRequest.test.ts rename to src/services/github/gqlRequest.test.ts index 343a6da6..4c897f0e 100644 --- a/test/unit/services/github/gqlRequest.test.ts +++ b/src/services/github/gqlRequest.test.ts @@ -1,6 +1,6 @@ import axios from 'axios'; -import { HandledError } from '../../../../src/services/HandledError'; -import { gqlRequest } from '../../../../src/services/github/gqlRequest'; +import { HandledError } from '../HandledError'; +import { gqlRequest } from './gqlRequest'; describe('gqlRequest', () => { describe('when request succeeds', () => { diff --git a/test/unit/services/github/mocks/commitByShaMock.ts b/src/services/github/mocks/commitByShaMock.ts similarity index 100% rename from test/unit/services/github/mocks/commitByShaMock.ts rename to src/services/github/mocks/commitByShaMock.ts diff --git a/test/unit/services/github/mocks/commitsByAuthorMock.ts b/src/services/github/mocks/commitsByAuthorMock.ts similarity index 86% rename from test/unit/services/github/mocks/commitsByAuthorMock.ts rename to src/services/github/mocks/commitsByAuthorMock.ts index fa27e28a..28fa0f02 100644 --- a/test/unit/services/github/mocks/commitsByAuthorMock.ts +++ b/src/services/github/mocks/commitsByAuthorMock.ts @@ -1,4 +1,4 @@ -import { DataResponse } from '../../../../../src/services/github/fetchCommitsByAuthor'; +import { DataResponse } from '../fetchCommitsByAuthor'; export const commitsWithPullRequestsMock: DataResponse = { repository: { @@ -23,6 +23,12 @@ export const commitsWithPullRequestsMock: DataResponse = { edges: [ { node: { + repository: { + name: 'kibana', + owner: { + login: 'elastic' + } + }, number: 85, timelineItems: { edges: [] @@ -42,6 +48,12 @@ export const commitsWithPullRequestsMock: DataResponse = { edges: [ { node: { + repository: { + name: 'kibana', + owner: { + login: 'elastic' + } + }, number: 80, timelineItems: { edges: [ diff --git a/test/unit/services/github/verifyAccessToken.test.ts b/src/services/github/verifyAccessToken.test.ts similarity index 94% rename from test/unit/services/github/verifyAccessToken.test.ts rename to src/services/github/verifyAccessToken.test.ts index 2180abf6..c0719237 100644 --- a/test/unit/services/github/verifyAccessToken.test.ts +++ b/src/services/github/verifyAccessToken.test.ts @@ -1,7 +1,7 @@ import axios from 'axios'; -import { BackportOptions } from '../../../../src/options/options'; -import { verifyAccessToken } from '../../../../src/services/github/verifyAccessToken'; -import { getDefaultOptions } from './getDefaultOptions'; +import { BackportOptions } from '../../options/options'; +import { verifyAccessToken } from './verifyAccessToken'; +import { getDefaultOptions } from '../../test/getDefaultOptions'; describe('verifyAccessToken', () => { let options: BackportOptions; diff --git a/src/services/prompts.ts b/src/services/prompts.ts index 8b6c9662..7b02488d 100644 --- a/src/services/prompts.ts +++ b/src/services/prompts.ts @@ -1,11 +1,16 @@ import chalk from 'chalk'; -import inquirer, { Question } from 'inquirer'; +import inquirer, { + CheckboxQuestion, + ListQuestion, + ConfirmQuestion +} from 'inquirer'; import isEmpty from 'lodash.isempty'; import { BranchChoice } from '../types/Config'; import { CommitChoice } from './github/Commit'; -import { getHumanReadableReference } from './github/commitFormatters'; -async function prompt(options: Question) { +type Question = CheckboxQuestion | ListQuestion | ConfirmQuestion; + +async function prompt(options: Question) { const { promptResult } = (await inquirer.prompt([ { ...options, name: 'promptResult' } ])) as { promptResult: T }; @@ -28,7 +33,7 @@ export async function promptForCommits( return { name: `${position} ${c.message} ${backportTags}`, - short: getHumanReadableReference(c), + short: c.message, value: c }; }); diff --git a/test/unit/steps/__snapshots__/doBackportVersions.test.ts.snap b/src/steps/__snapshots__/doBackportVersions.test.ts.snap similarity index 100% rename from test/unit/steps/__snapshots__/doBackportVersions.test.ts.snap rename to src/steps/__snapshots__/doBackportVersions.test.ts.snap diff --git a/src/steps/__snapshots__/steps.test.ts.snap b/src/steps/__snapshots__/steps.test.ts.snap new file mode 100644 index 00000000..e2903a6c --- /dev/null +++ b/src/steps/__snapshots__/steps.test.ts.snap @@ -0,0 +1,171 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`run through steps exec should be called with correct args 1`] = ` +Array [ + Array [ + "git remote rm origin", + Object { + "cwd": "/myHomeDir/.backport/repositories/elastic/kibana", + }, + ], + Array [ + "git remote rm sqren", + Object { + "cwd": "/myHomeDir/.backport/repositories/elastic/kibana", + }, + ], + Array [ + "git remote add sqren https://myAccessToken@github.com/sqren/kibana.git", + Object { + "cwd": "/myHomeDir/.backport/repositories/elastic/kibana", + }, + ], + Array [ + "git remote rm elastic", + Object { + "cwd": "/myHomeDir/.backport/repositories/elastic/kibana", + }, + ], + Array [ + "git remote add elastic https://myAccessToken@github.com/elastic/kibana.git", + Object { + "cwd": "/myHomeDir/.backport/repositories/elastic/kibana", + }, + ], + Array [ + "git reset --hard && git clean -d --force && git fetch elastic 6.x && git checkout -B backport/6.x/commit-2e63475c elastic/6.x --no-track", + Object { + "cwd": "/myHomeDir/.backport/repositories/elastic/kibana", + }, + ], + Array [ + "git fetch elastic master:master --force && git cherry-pick 2e63475c483f7844b0f2833bc57fdee32095bacb", + Object { + "cwd": "/myHomeDir/.backport/repositories/elastic/kibana", + }, + ], + Array [ + "git push sqren backport/6.x/commit-2e63475c:backport/6.x/commit-2e63475c --force", + Object { + "cwd": "/myHomeDir/.backport/repositories/elastic/kibana", + }, + ], + Array [ + "git checkout master && git branch -D backport/6.x/commit-2e63475c", + Object { + "cwd": "/myHomeDir/.backport/repositories/elastic/kibana", + }, + ], +] +`; + +exports[`run through steps git clone should be called with correct args 1`] = ` +Array [ + Array [ + "git clone https://myAccessToken@github.com/elastic/kibana.git --progress", + Object { + "cwd": "/myHomeDir/.backport/repositories/elastic", + "maxBuffer": 104857600, + }, + [Function], + ], +] +`; + +exports[`run through steps prompt calls should match snapshot 1`] = ` +Array [ + Array [ + Array [ + Object { + "choices": Array [ + Object { + "name": "1. Add 👻 (2e63475c) ", + "short": "Add 👻 (2e63475c)", + "value": Object { + "existingBackports": Array [], + "message": "Add 👻 (2e63475c)", + "pullNumber": undefined, + "sha": "2e63475c483f7844b0f2833bc57fdee32095bacb", + }, + }, + Object { + "name": "2. Add witch (#85) ", + "short": "Add witch (#85)", + "value": Object { + "existingBackports": Array [], + "message": "Add witch (#85)", + "pullNumber": 85, + "sha": "f3b618b9421fdecdb36862f907afbdd6344b361d", + }, + }, + Object { + "name": "3. Add SF mention (#80) 6.3", + "short": "Add SF mention (#80)", + "value": Object { + "existingBackports": Array [ + Object { + "branch": "6.3", + "state": "MERGED", + }, + ], + "message": "Add SF mention (#80)", + "pullNumber": 80, + "sha": "79cf18453ec32a4677009dcbab1c9c8c73fc14fe", + }, + }, + Object { + "name": "4. Add backport config (3827bbba) ", + "short": "Add backport config (3827bbba)", + "value": Object { + "existingBackports": Array [], + "message": "Add backport config (3827bbba)", + "pullNumber": undefined, + "sha": "3827bbbaf39914eda4f02f6940189844375fd097", + }, + }, + Object { + "name": "5. Initial commit (5ea0da55) ", + "short": "Initial commit (5ea0da55)", + "value": Object { + "existingBackports": Array [], + "message": "Initial commit (5ea0da55)", + "pullNumber": undefined, + "sha": "5ea0da550ac191029459289d67f99ad7d310812b", + }, + }, + ], + "message": "Select commit to backport", + "name": "promptResult", + "pageSize": 5, + "type": "list", + }, + ], + ], + Array [ + Array [ + Object { + "choices": Array [ + Object { + "name": "6.x", + }, + Object { + "name": "6.0", + }, + Object { + "name": "5.6", + }, + Object { + "name": "5.5", + }, + Object { + "name": "5.4", + }, + ], + "message": "Select branch to backport to", + "name": "promptResult", + "type": "list", + }, + ], + ], +] +`; diff --git a/test/unit/steps/doBackportVersions.test.ts b/src/steps/doBackportVersions.test.ts similarity index 93% rename from test/unit/steps/doBackportVersions.test.ts rename to src/steps/doBackportVersions.test.ts index 950c8381..708d04e3 100644 --- a/test/unit/steps/doBackportVersions.test.ts +++ b/src/steps/doBackportVersions.test.ts @@ -1,9 +1,9 @@ import axios from 'axios'; -import * as logger from '../../../src/services/logger'; -import * as prompts from '../../../src/services/prompts'; -import { BackportOptions } from '../../../src/options/options'; -import { doBackportVersion } from '../../../src/steps/doBackportVersions'; -import { exec } from '../../../src/services/child-process-promisified'; +import * as logger from '../services/logger'; +import * as prompts from '../services/prompts'; +import { BackportOptions } from '../options/options'; +import { doBackportVersion } from './doBackportVersions'; +import { exec } from '../services/child-process-promisified'; describe('doBackportVersion', () => { let axiosPostMock: jest.SpyInstance; @@ -147,8 +147,7 @@ myPrSuffix` const execSpy = ((exec as any) as jest.SpyInstance).mockImplementation( async (cmd: string) => { if (cmd.includes('git cherry-pick')) { - const e = new Error('cherry pick error'); - // @ts-ignore + const e = new Error('cherry pick error') as any; e.cmd = cmd; throw e; } diff --git a/test/unit/steps/getBranches.test.ts b/src/steps/getBranches.test.ts similarity index 91% rename from test/unit/steps/getBranches.test.ts rename to src/steps/getBranches.test.ts index 64688ceb..4cd73907 100644 --- a/test/unit/steps/getBranches.test.ts +++ b/src/steps/getBranches.test.ts @@ -1,5 +1,5 @@ -import * as prompts from '../../../src/services/prompts'; -import { getBranches } from '../../../src/steps/getBranches'; +import * as prompts from '../services/prompts'; +import { getBranches } from './getBranches'; describe('getBranches', () => { let promptSpy: ReturnType; diff --git a/test/unit/steps/getCommitBySha.test.ts b/src/steps/getCommitBySha.test.ts similarity index 57% rename from test/unit/steps/getCommitBySha.test.ts rename to src/steps/getCommitBySha.test.ts index 77f1d953..58d3d20a 100644 --- a/test/unit/steps/getCommitBySha.test.ts +++ b/src/steps/getCommitBySha.test.ts @@ -1,8 +1,8 @@ import axios from 'axios'; import httpAdapter from 'axios/lib/adapters/http'; import nock from 'nock'; -import { getCommitBySha } from '../../../src/steps/getCommits'; -import { BackportOptions } from '../../../src/options/options'; +import { getCommitBySha } from './getCommits'; +import { BackportOptions } from '../options/options'; import { commitByShaMock } from '../services/github/mocks/commitByShaMock'; axios.defaults.adapter = httpAdapter; @@ -16,13 +16,6 @@ describe('getCommitBySha', () => { items: [commitByShaMock] }); - nock('https://api.github.com') - .get(`/search/issues`) - .query(true) - .reply(200, { - items: [] - }); - const commit = await getCommitBySha({ repoOwner: 'elastic', repoName: 'kibana', @@ -53,33 +46,4 @@ describe('getCommitBySha', () => { } as BackportOptions & { sha: string }) ).rejects.toThrowError('No commit found on master with sha "myCommitSha"'); }); - - it('should add PR number if available', async () => { - nock('https://api.github.com') - .get(`/search/commits`) - .query(true) - .reply(200, { - items: [commitByShaMock] - }); - - nock('https://api.github.com') - .get(`/search/issues`) - .query(true) - .reply(200, { - items: [{ number: 1338 }] - }); - - expect( - await getCommitBySha({ - repoOwner: 'elastic', - repoName: 'kibana', - sha: 'myCommitSha', - apiHostname: 'api.github.com' - } as BackportOptions & { sha: string }) - ).toEqual({ - message: '[Chrome] Bootstrap Angular into document.body (#1338)', - pullNumber: 1338, - sha: 'myCommitSha' - }); - }); }); diff --git a/src/steps/getCommits.ts b/src/steps/getCommits.ts index 94eca50e..b0122d2c 100644 --- a/src/steps/getCommits.ts +++ b/src/steps/getCommits.ts @@ -5,12 +5,22 @@ import ora = require('ora'); import { fetchCommitBySha } from '../services/github/fetchCommitBySha'; import { fetchCommitsByAuthor } from '../services/github/fetchCommitsByAuthor'; import { getShortSha } from '../services/github/commitFormatters'; +import { fetchCommitByPullNumber } from '../services/github/fetchCommitByPullNumber'; export async function getCommits(options: BackportOptions) { if (options.sha) { return [await getCommitBySha({ ...options, sha: options.sha })]; // must extract sha to satisfy the ts gods } + if (options.pullNumber) { + return [ + await getCommitByPullNumber({ + ...options, + pullNumber: options.pullNumber + }) + ]; + } + return await getCommitsByPrompt(options); } @@ -28,6 +38,22 @@ export async function getCommitBySha( } } +export async function getCommitByPullNumber( + options: BackportOptions & { pullNumber: number } // pullNumber is required +) { + const spinner = ora( + `Loading merge commit from pull request #${options.pullNumber}` + ).start(); + try { + const commit = await fetchCommitByPullNumber(options); + spinner.stop(); + return commit; + } catch (e) { + spinner.fail(); + throw e; + } +} + async function getCommitsByPrompt(options: BackportOptions) { const spinner = ora('Loading commits...').start(); try { diff --git a/test/unit/steps/maybeSetupRepo.test.ts b/src/steps/maybeSetupRepo.test.ts similarity index 84% rename from test/unit/steps/maybeSetupRepo.test.ts rename to src/steps/maybeSetupRepo.test.ts index ca5d6bce..f9018c20 100644 --- a/test/unit/steps/maybeSetupRepo.test.ts +++ b/src/steps/maybeSetupRepo.test.ts @@ -1,6 +1,6 @@ import del from 'del'; -import { BackportOptions } from '../../../src/options/options'; -import { maybeSetupRepo } from '../../../src/steps/maybeSetupRepo'; +import { BackportOptions } from '../options/options'; +import { maybeSetupRepo } from './maybeSetupRepo'; import makeDir = require('make-dir'); describe('maybeSetupRepo', () => { diff --git a/test/unit/steps/steps.test.ts b/src/steps/steps.test.ts similarity index 84% rename from test/unit/steps/steps.test.ts rename to src/steps/steps.test.ts index 75be7a7a..e8334976 100644 --- a/test/unit/steps/steps.test.ts +++ b/src/steps/steps.test.ts @@ -1,19 +1,18 @@ import axios from 'axios'; import inquirer from 'inquirer'; -import * as createPullRequest from '../../../src/services/github/createPullRequest'; -import * as fetchCommitsByAuthor from '../../../src/services/github/fetchCommitsByAuthor'; -import * as fs from '../../../src/services/fs-promisified'; -import { BackportOptions } from '../../../src/options/options'; +import * as createPullRequest from '../services/github/createPullRequest'; +import * as fetchCommitsByAuthor from '../services/github/fetchCommitsByAuthor'; +import * as fs from '../services/fs-promisified'; +import { BackportOptions } from '../options/options'; import { commitsWithPullRequestsMock } from '../services/github/mocks/commitsByAuthorMock'; -import { initSteps } from '../../../src/steps/steps'; -import * as childProcess from '../../../src/services/child-process-promisified'; +import { initSteps } from './steps'; +import * as childProcess from '../services/child-process-promisified'; describe('run through steps', () => { let rpcExecMock: jest.SpyInstance; let rpcExecOriginalMock: jest.SpyInstance; let inquirerPromptMock: jest.SpyInstance; let axiosHeadSpy: jest.SpyInstance; - let axiosPostSpy: jest.SpyInstance; afterEach(() => { jest.clearAllMocks(); @@ -44,6 +43,7 @@ describe('run through steps', () => { path: undefined, prDescription: 'myPrDescription', prTitle: 'myPrTitle {baseBranch} {commitMessages}', + pullNumber: undefined, repoName: 'kibana', repoOwner: 'elastic', sha: undefined, @@ -60,19 +60,18 @@ describe('run through steps', () => { inquirerPromptMock = jest .spyOn(inquirer, 'prompt') - // @ts-ignore - .mockImplementationOnce(async (args: any) => { + .mockImplementationOnce((async (args: any) => { return { promptResult: args[0].choices[0].value }; - }) - .mockImplementationOnce(async (args: any) => { + }) as any) + .mockImplementationOnce((async (args: any) => { return { promptResult: args[0].choices[0].name }; - }); + }) as any); // mock verifyAccessToken axiosHeadSpy = jest.spyOn(axios, 'head').mockReturnValueOnce(true as any); // mock axios post request (graphql) - axiosPostSpy = jest + jest .spyOn(axios, 'post') // mock author id @@ -110,10 +109,6 @@ describe('run through steps', () => { ); }); - it('should make correct POST requests', () => { - expect(axiosPostSpy).toMatchSnapshot(); - }); - it('getCommit should be called with correct args', () => { expect(fetchCommitsByAuthor.fetchCommitsByAuthor).toHaveBeenCalledWith( expect.objectContaining({ diff --git a/test/unit/automatic-mocks.ts b/src/test/automatic-mocks.ts similarity index 90% rename from test/unit/automatic-mocks.ts rename to src/test/automatic-mocks.ts index 34d3ddcc..91322746 100644 --- a/test/unit/automatic-mocks.ts +++ b/src/test/automatic-mocks.ts @@ -3,7 +3,7 @@ import os from 'os'; jest.spyOn(os, 'homedir').mockReturnValue('/myHomeDir'); -jest.mock('../../src/services/child-process-promisified', () => { +jest.mock('../services/child-process-promisified', () => { return { exec: jest.fn(async () => 'success'), @@ -18,7 +18,7 @@ jest.mock('../../src/services/child-process-promisified', () => { }; }); -jest.mock('../../src/services/fs-promisified', () => { +jest.mock('../services/fs-promisified', () => { return { writeFile: jest.fn(async () => 'fs.writeFile mock value'), @@ -78,4 +78,4 @@ jest.mock('ora', () => { }); // silence logger -jest.mock('../../src/services/logger'); +jest.mock('../services/logger'); diff --git a/test/unit/services/github/getDefaultOptions.ts b/src/test/getDefaultOptions.ts similarity index 81% rename from test/unit/services/github/getDefaultOptions.ts rename to src/test/getDefaultOptions.ts index 9a14468f..f13e287c 100644 --- a/test/unit/services/github/getDefaultOptions.ts +++ b/src/test/getDefaultOptions.ts @@ -1,4 +1,4 @@ -import { BackportOptions } from '../../../../src/options/options'; +import { BackportOptions } from '../options/options'; export function getDefaultOptions(options: Partial = {}) { return { diff --git a/test/integration/__snapshots__/integration.test.ts.snap b/src/test/integration/__snapshots__/integration.test.ts.snap similarity index 93% rename from test/integration/__snapshots__/integration.test.ts.snap rename to src/test/integration/__snapshots__/integration.test.ts.snap index 280f676c..7b572c3b 100644 --- a/test/integration/__snapshots__/integration.test.ts.snap +++ b/src/test/integration/__snapshots__/integration.test.ts.snap @@ -41,6 +41,12 @@ Object { associatedPullRequests(first: 1) { edges { node { + repository { + owner { + login + } + name + } number timelineItems( last: 20 @@ -143,6 +149,12 @@ Object { associatedPullRequests(first: 1) { edges { node { + repository { + owner { + login + } + name + } number timelineItems( last: 20 diff --git a/test/integration/createSpies.ts b/src/test/integration/createSpies.ts similarity index 90% rename from test/integration/createSpies.ts rename to src/test/integration/createSpies.ts index 03c052c0..d5093e9d 100644 --- a/test/integration/createSpies.ts +++ b/src/test/integration/createSpies.ts @@ -1,6 +1,6 @@ import axios from 'axios'; import inquirer from 'inquirer'; -import { commitsWithPullRequestsMock } from '../unit/services/github/mocks/commitsByAuthorMock'; +import { commitsWithPullRequestsMock } from '../../services/github/mocks/commitsByAuthorMock'; import os from 'os'; import childProcess = require('child_process'); import { @@ -66,18 +66,18 @@ export function createSpies({ commitCount }: { commitCount: number }) { // mock prompt jest .spyOn(inquirer, 'prompt') - // @ts-ignore - .mockImplementationOnce(async (args: any) => { + + .mockImplementationOnce((async (args: any) => { return { promptResult: commitCount === 2 ? [args[0].choices[0].value, args[0].choices[1].value] : args[0].choices[1].value }; - }) - .mockImplementationOnce(async (args: any) => { + }) as any) + .mockImplementationOnce((async (args: any) => { return { promptResult: args[0].choices[0].name }; - }); + }) as any); return { getAxiosCalls: () => { diff --git a/src/test/integration/envConstants.ts b/src/test/integration/envConstants.ts new file mode 100644 index 00000000..9295ae4f --- /dev/null +++ b/src/test/integration/envConstants.ts @@ -0,0 +1,20 @@ +import { resolve } from 'path'; + +// paths +export const INTEGRATION_TEST_DIR_PATH = resolve('./src/test/integration'); + +export const INTEGRATION_TEST_DATA_PATH = resolve( + './src/test/integration/mock-environment' +); + +export const HOMEDIR_PATH = resolve( + './src/test/integration/mock-environment/homedir' +); + +export const REMOTE_ORIGIN_REPO_PATH = resolve( + './src/test/integration/mock-environment/github.com/elastic/backport-demo/.git' +); + +export const REMOTE_FORK_REPO_PATH = resolve( + './src/test/integration/mock-environment/github.com/sqren/backport-demo/.git' +); diff --git a/test/integration/helpers.ts b/src/test/integration/helpers.ts similarity index 88% rename from test/integration/helpers.ts rename to src/test/integration/helpers.ts index d34fcad9..683dd343 100644 --- a/test/integration/helpers.ts +++ b/src/test/integration/helpers.ts @@ -1,7 +1,10 @@ import del = require('del'); import childProcess = require('child_process'); import { promisify } from 'util'; -import { INTEGRATION_TEST_DATA_PATH } from './envConstants'; +import { + INTEGRATION_TEST_DATA_PATH, + INTEGRATION_TEST_DIR_PATH +} from './envConstants'; type Exec = typeof childProcess.exec; const unmockedExec = childProcess.exec; @@ -35,6 +38,6 @@ export async function getLatestCommit({ export async function deleteAndSetupEnvironment() { await del(INTEGRATION_TEST_DATA_PATH); await execPromisified(`unzip mock-environment.zip`, { - cwd: './test/integration' + cwd: INTEGRATION_TEST_DIR_PATH }); } diff --git a/test/integration/integration.test.ts b/src/test/integration/integration.test.ts similarity index 97% rename from test/integration/integration.test.ts rename to src/test/integration/integration.test.ts index 9885d856..159b727a 100644 --- a/test/integration/integration.test.ts +++ b/src/test/integration/integration.test.ts @@ -1,6 +1,6 @@ import { once } from 'lodash'; -import { getOptions } from '../../src/options/options'; -import { initSteps } from '../../src/steps/steps'; +import { getOptions } from '../../options/options'; +import { initSteps } from '../../steps/steps'; import { REMOTE_ORIGIN_REPO_PATH, REMOTE_FORK_REPO_PATH } from './envConstants'; import { createSpies } from './createSpies'; import { @@ -11,7 +11,7 @@ import { jest.unmock('make-dir'); jest.unmock('del'); -jest.unmock('../../src/services/child-process-promisified'); +jest.unmock('../../services/child-process-promisified'); describe('when a single commit is backported', () => { let spies: ReturnType; diff --git a/test/integration/mock-environment.zip b/src/test/integration/mock-environment.zip similarity index 100% rename from test/integration/mock-environment.zip rename to src/test/integration/mock-environment.zip diff --git a/src/test/integration/mock-environment/github.com/elastic/backport-demo b/src/test/integration/mock-environment/github.com/elastic/backport-demo new file mode 160000 index 00000000..2e63475c --- /dev/null +++ b/src/test/integration/mock-environment/github.com/elastic/backport-demo @@ -0,0 +1 @@ +Subproject commit 2e63475c483f7844b0f2833bc57fdee32095bacb diff --git a/src/test/integration/mock-environment/github.com/sqren/backport-demo b/src/test/integration/mock-environment/github.com/sqren/backport-demo new file mode 160000 index 00000000..2e63475c --- /dev/null +++ b/src/test/integration/mock-environment/github.com/sqren/backport-demo @@ -0,0 +1 @@ +Subproject commit 2e63475c483f7844b0f2833bc57fdee32095bacb diff --git a/src/test/integration/mock-environment/homedir/.backport/repositories/elastic/backport-demo b/src/test/integration/mock-environment/homedir/.backport/repositories/elastic/backport-demo new file mode 160000 index 00000000..2e63475c --- /dev/null +++ b/src/test/integration/mock-environment/homedir/.backport/repositories/elastic/backport-demo @@ -0,0 +1 @@ +Subproject commit 2e63475c483f7844b0f2833bc57fdee32095bacb diff --git a/src/test/tsconfig.json b/src/test/tsconfig.json new file mode 100644 index 00000000..22a05299 --- /dev/null +++ b/src/test/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "exclude": [], + "compilerOptions": { + "noEmit": true + } +} diff --git a/test/integration/envConstants.ts b/test/integration/envConstants.ts deleted file mode 100644 index 9a697a92..00000000 --- a/test/integration/envConstants.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { resolve } from 'path'; - -// paths -export const INTEGRATION_TEST_DATA_PATH = resolve( - './test/integration/mock-environment' -); -export const HOMEDIR_PATH = resolve( - './test/integration/mock-environment/homedir' -); -export const REMOTE_ORIGIN_REPO_PATH = resolve( - './test/integration/mock-environment/github.com/elastic/backport-demo/.git' -); -export const REMOTE_FORK_REPO_PATH = resolve( - './test/integration/mock-environment/github.com/sqren/backport-demo/.git' -); diff --git a/test/tsconfig.json b/test/tsconfig.json deleted file mode 100644 index 8b5b03e4..00000000 --- a/test/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../tsconfig.json", - "include": ["../src/types/*", "./**/*"], - "compilerOptions": { - "noEmit": true - } -} diff --git a/test/unit/.eslintrc.js b/test/unit/.eslintrc.js deleted file mode 100644 index e53d313a..00000000 --- a/test/unit/.eslintrc.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - extends: ['../../.eslintrc.js'], - rules: { - '@typescript-eslint/no-object-literal-type-assertion': 'off' - } -}; diff --git a/test/unit/services/github/commitFormatters.test.ts b/test/unit/services/github/commitFormatters.test.ts deleted file mode 100644 index bdfd29a1..00000000 --- a/test/unit/services/github/commitFormatters.test.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { - getFirstCommitMessageLine, - getHumanReadableReference, - withFormattedCommitMessage -} from '../../../../src/services/github/commitFormatters'; - -describe('getHumanReadableReference', () => { - it('should return a sha ref', () => { - expect( - getHumanReadableReference({ sha: 'mySha1234567', message: 'myMessage' }) - ).toEqual('mySha123'); - }); - - it('should return a pr ref', () => { - expect( - getHumanReadableReference({ - pullNumber: 1337, - sha: 'mySha1234567', - message: 'myMessage' - }) - ).toEqual('#1337'); - }); -}); - -describe('getFirstCommitMessageLine', () => { - it('should only return the first line of the message and omit the PR ref', () => { - expect( - getFirstCommitMessageLine( - 'My commit message (#1234)\n\n Additional commit message body' - ) - ).toEqual('My commit message'); - }); - - it('should return the commit message as-is', () => { - expect(getFirstCommitMessageLine('My commit message')).toEqual( - 'My commit message' - ); - }); -}); - -describe('withFormattedCommitMessage', () => { - it('should return a message with a sha ref', () => { - expect( - withFormattedCommitMessage({ sha: 'mySha1234567', message: 'myMessage' }) - .message - ).toEqual('myMessage (mySha123)'); - }); - - it('should return a message with a PR ref', () => { - expect( - withFormattedCommitMessage({ - sha: 'mySha1234567', - message: 'myMessage (#12)', - pullNumber: 1234 - }).message - ).toEqual('myMessage (#1234)'); - }); -}); diff --git a/test/unit/steps/__snapshots__/steps.test.ts.snap b/test/unit/steps/__snapshots__/steps.test.ts.snap deleted file mode 100644 index acd8a112..00000000 --- a/test/unit/steps/__snapshots__/steps.test.ts.snap +++ /dev/null @@ -1,427 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`run through steps exec should be called with correct args 1`] = ` -Array [ - Array [ - "git remote rm origin", - Object { - "cwd": "/myHomeDir/.backport/repositories/elastic/kibana", - }, - ], - Array [ - "git remote rm sqren", - Object { - "cwd": "/myHomeDir/.backport/repositories/elastic/kibana", - }, - ], - Array [ - "git remote add sqren https://myAccessToken@github.com/sqren/kibana.git", - Object { - "cwd": "/myHomeDir/.backport/repositories/elastic/kibana", - }, - ], - Array [ - "git remote rm elastic", - Object { - "cwd": "/myHomeDir/.backport/repositories/elastic/kibana", - }, - ], - Array [ - "git remote add elastic https://myAccessToken@github.com/elastic/kibana.git", - Object { - "cwd": "/myHomeDir/.backport/repositories/elastic/kibana", - }, - ], - Array [ - "git reset --hard && git clean -d --force && git fetch elastic 6.x && git checkout -B backport/6.x/commit-2e63475c elastic/6.x --no-track", - Object { - "cwd": "/myHomeDir/.backport/repositories/elastic/kibana", - }, - ], - Array [ - "git fetch elastic master:master --force && git cherry-pick 2e63475c483f7844b0f2833bc57fdee32095bacb", - Object { - "cwd": "/myHomeDir/.backport/repositories/elastic/kibana", - }, - ], - Array [ - "git push sqren backport/6.x/commit-2e63475c:backport/6.x/commit-2e63475c --force", - Object { - "cwd": "/myHomeDir/.backport/repositories/elastic/kibana", - }, - ], - Array [ - "git checkout master && git branch -D backport/6.x/commit-2e63475c", - Object { - "cwd": "/myHomeDir/.backport/repositories/elastic/kibana", - }, - ], -] -`; - -exports[`run through steps git clone should be called with correct args 1`] = ` -Array [ - Array [ - "git clone https://myAccessToken@github.com/elastic/kibana.git --progress", - Object { - "cwd": "/myHomeDir/.backport/repositories/elastic", - "maxBuffer": 104857600, - }, - [Function], - ], -] -`; - -exports[`run through steps prompt calls should match snapshot 1`] = ` -Array [ - Array [ - Array [ - Object { - "choices": Array [ - Object { - "name": "1. Add 👻 (2e63475c) ", - "short": "2e63475c", - "value": Object { - "existingBackports": Array [], - "message": "Add 👻 (2e63475c)", - "pullNumber": undefined, - "sha": "2e63475c483f7844b0f2833bc57fdee32095bacb", - }, - }, - Object { - "name": "2. Add witch (#85) ", - "short": "#85", - "value": Object { - "existingBackports": Array [], - "message": "Add witch (#85)", - "pullNumber": 85, - "sha": "f3b618b9421fdecdb36862f907afbdd6344b361d", - }, - }, - Object { - "name": "3. Add SF mention (#80) 6.3", - "short": "#80", - "value": Object { - "existingBackports": Array [ - Object { - "branch": "6.3", - "state": "MERGED", - }, - ], - "message": "Add SF mention (#80)", - "pullNumber": 80, - "sha": "79cf18453ec32a4677009dcbab1c9c8c73fc14fe", - }, - }, - Object { - "name": "4. Add backport config (3827bbba) ", - "short": "3827bbba", - "value": Object { - "existingBackports": Array [], - "message": "Add backport config (3827bbba)", - "pullNumber": undefined, - "sha": "3827bbbaf39914eda4f02f6940189844375fd097", - }, - }, - Object { - "name": "5. Initial commit (5ea0da55) ", - "short": "5ea0da55", - "value": Object { - "existingBackports": Array [], - "message": "Initial commit (5ea0da55)", - "pullNumber": undefined, - "sha": "5ea0da550ac191029459289d67f99ad7d310812b", - }, - }, - ], - "message": "Select commit to backport", - "name": "promptResult", - "pageSize": 5, - "type": "list", - }, - ], - ], - Array [ - Array [ - Object { - "choices": Array [ - Object { - "name": "6.x", - }, - Object { - "name": "6.0", - }, - Object { - "name": "5.6", - }, - Object { - "name": "5.5", - }, - Object { - "name": "5.4", - }, - ], - "message": "Select branch to backport to", - "name": "promptResult", - "type": "list", - }, - ], - ], -] -`; - -exports[`run through steps should make correct POST requests 1`] = ` -[MockFunction] { - "calls": Array [ - Array [ - "https://api.github.com/graphql", - Object { - "query": " - query getIdByLogin($login: String!) { - user(login: $login) { - id - } - } - ", - "variables": Object { - "login": "sqren", - }, - }, - Object { - "headers": Object { - "Authorization": "bearer myAccessToken", - "Content-Type": "application/json", - }, - }, - ], - Array [ - "https://api.github.com/graphql", - Object { - "query": " - query getCommitsByAuthorQuery( - $repoOwner: String! - $repoName: String! - $commitsCount: Int! - $authorId: ID - $historyPath: String - ) { - repository(owner: $repoOwner, name: $repoName) { - ref(qualifiedName: \\"master\\") { - target { - ... on Commit { - history( - first: $commitsCount - author: { id: $authorId } - path: $historyPath - ) { - edges { - node { - oid - message - associatedPullRequests(first: 1) { - edges { - node { - number - timelineItems( - last: 20 - itemTypes: CROSS_REFERENCED_EVENT - ) { - edges { - node { - ... on CrossReferencedEvent { - source { - __typename - ... on PullRequest { - state - baseRefName - commits(first: 20) { - edges { - node { - commit { - message - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - ", - "variables": Object { - "authorId": "sqren_author_id", - "commitsCount": 10, - "historyPath": null, - "repoName": "kibana", - "repoOwner": "elastic", - }, - }, - Object { - "headers": Object { - "Authorization": "bearer myAccessToken", - "Content-Type": "application/json", - }, - }, - ], - Array [ - "https://api.github.com/repos/elastic/kibana/pulls?access_token=myAccessToken", - Object { - "base": "6.x", - "body": "Backports the following commits to 6.x: - - Add 👻 (2e63475c) - -myPrDescription", - "head": "sqren:backport/6.x/commit-2e63475c", - "title": "myPrTitle 6.x Add 👻 (2e63475c)", - }, - ], - ], - "results": Array [ - Object { - "type": "return", - "value": Object { - "data": Object { - "data": Object { - "user": Object { - "id": "sqren_author_id", - }, - }, - }, - }, - }, - Object { - "type": "return", - "value": Object { - "data": Object { - "data": Object { - "repository": Object { - "ref": Object { - "target": Object { - "history": Object { - "edges": Array [ - Object { - "node": Object { - "associatedPullRequests": Object { - "edges": Array [], - }, - "message": "Add 👻", - "oid": "2e63475c483f7844b0f2833bc57fdee32095bacb", - }, - }, - Object { - "node": Object { - "associatedPullRequests": Object { - "edges": Array [ - Object { - "node": Object { - "number": 85, - "timelineItems": Object { - "edges": Array [], - }, - }, - }, - ], - }, - "message": "Add witch (#85)", - "oid": "f3b618b9421fdecdb36862f907afbdd6344b361d", - }, - }, - Object { - "node": Object { - "associatedPullRequests": Object { - "edges": Array [ - Object { - "node": Object { - "number": 80, - "timelineItems": Object { - "edges": Array [ - Object { - "node": Object { - "source": Object { - "__typename": "PullRequest", - "baseRefName": "6.3", - "commits": Object { - "edges": Array [ - Object { - "node": Object { - "commit": Object { - "message": "Add SF mention (#80) - -* Add SF mention - -* Add several emojis!", - }, - }, - }, - ], - }, - "state": "MERGED", - }, - }, - }, - ], - }, - }, - }, - ], - }, - "message": "Add SF mention (#80) - -* Add SF mention - -* Add several emojis!", - "oid": "79cf18453ec32a4677009dcbab1c9c8c73fc14fe", - }, - }, - Object { - "node": Object { - "associatedPullRequests": Object { - "edges": Array [], - }, - "message": "Add backport config", - "oid": "3827bbbaf39914eda4f02f6940189844375fd097", - }, - }, - Object { - "node": Object { - "associatedPullRequests": Object { - "edges": Array [], - }, - "message": "Initial commit", - "oid": "5ea0da550ac191029459289d67f99ad7d310812b", - }, - }, - ], - }, - }, - }, - }, - }, - }, - }, - }, - Object { - "type": "return", - "value": Object { - "data": Object { - "html_url": "pull request url", - "number": 1337, - }, - }, - }, - ], -} -`; diff --git a/tsconfig.json b/tsconfig.json index 8ae5e782..357182df 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,6 @@ { "include": ["src/**/*"], + "exclude": ["src/**/*.test.*", "src/test/**", "src/**/mocks/**"], "compilerOptions": { "target": "es2017", "lib": ["es2017"], diff --git a/yarn.lock b/yarn.lock index a502afde..f1cfe650 100644 --- a/yarn.lock +++ b/yarn.lock @@ -147,67 +147,77 @@ chalk "^2.0.1" slash "^2.0.0" -"@jest/core@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.8.0.tgz#fbbdcd42a41d0d39cddbc9f520c8bab0c33eed5b" - integrity sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A== +"@jest/console@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" + integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ== + dependencies: + "@jest/source-map" "^24.9.0" + chalk "^2.0.1" + slash "^2.0.0" + +"@jest/core@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.9.0.tgz#2ceccd0b93181f9c4850e74f2a9ad43d351369c4" + integrity sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A== dependencies: "@jest/console" "^24.7.1" - "@jest/reporters" "^24.8.0" - "@jest/test-result" "^24.8.0" - "@jest/transform" "^24.8.0" - "@jest/types" "^24.8.0" + "@jest/reporters" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" ansi-escapes "^3.0.0" chalk "^2.0.1" exit "^0.1.2" graceful-fs "^4.1.15" - jest-changed-files "^24.8.0" - jest-config "^24.8.0" - jest-haste-map "^24.8.0" - jest-message-util "^24.8.0" + jest-changed-files "^24.9.0" + jest-config "^24.9.0" + jest-haste-map "^24.9.0" + jest-message-util "^24.9.0" jest-regex-util "^24.3.0" - jest-resolve-dependencies "^24.8.0" - jest-runner "^24.8.0" - jest-runtime "^24.8.0" - jest-snapshot "^24.8.0" - jest-util "^24.8.0" - jest-validate "^24.8.0" - jest-watcher "^24.8.0" + jest-resolve "^24.9.0" + jest-resolve-dependencies "^24.9.0" + jest-runner "^24.9.0" + jest-runtime "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + jest-watcher "^24.9.0" micromatch "^3.1.10" p-each-series "^1.0.0" - pirates "^4.0.1" realpath-native "^1.1.0" rimraf "^2.5.4" + slash "^2.0.0" strip-ansi "^5.0.0" -"@jest/environment@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.8.0.tgz#0342261383c776bdd652168f68065ef144af0eac" - integrity sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw== - dependencies: - "@jest/fake-timers" "^24.8.0" - "@jest/transform" "^24.8.0" - "@jest/types" "^24.8.0" - jest-mock "^24.8.0" - -"@jest/fake-timers@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.8.0.tgz#2e5b80a4f78f284bcb4bd5714b8e10dd36a8d3d1" - integrity sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw== - dependencies: - "@jest/types" "^24.8.0" - jest-message-util "^24.8.0" - jest-mock "^24.8.0" - -"@jest/reporters@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.8.0.tgz#075169cd029bddec54b8f2c0fc489fd0b9e05729" - integrity sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw== - dependencies: - "@jest/environment" "^24.8.0" - "@jest/test-result" "^24.8.0" - "@jest/transform" "^24.8.0" - "@jest/types" "^24.8.0" +"@jest/environment@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18" + integrity sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ== + dependencies: + "@jest/fake-timers" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + +"@jest/fake-timers@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" + integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A== + dependencies: + "@jest/types" "^24.9.0" + jest-message-util "^24.9.0" + jest-mock "^24.9.0" + +"@jest/reporters@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.9.0.tgz#86660eff8e2b9661d042a8e98a028b8d631a5b43" + integrity sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw== + dependencies: + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" chalk "^2.0.1" exit "^0.1.2" glob "^7.1.2" @@ -215,13 +225,13 @@ istanbul-lib-instrument "^3.0.1" istanbul-lib-report "^2.0.4" istanbul-lib-source-maps "^3.0.1" - istanbul-reports "^2.1.1" - jest-haste-map "^24.8.0" - jest-resolve "^24.8.0" - jest-runtime "^24.8.0" - jest-util "^24.8.0" + istanbul-reports "^2.2.6" + jest-haste-map "^24.9.0" + jest-resolve "^24.9.0" + jest-runtime "^24.9.0" + jest-util "^24.9.0" jest-worker "^24.6.0" - node-notifier "^5.2.1" + node-notifier "^5.4.2" slash "^2.0.0" source-map "^0.6.0" string-length "^2.0.0" @@ -235,54 +245,64 @@ graceful-fs "^4.1.15" source-map "^0.6.0" -"@jest/test-result@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.8.0.tgz#7675d0aaf9d2484caa65e048d9b467d160f8e9d3" - integrity sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng== +"@jest/source-map@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" + integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg== dependencies: - "@jest/console" "^24.7.1" - "@jest/types" "^24.8.0" + callsites "^3.0.0" + graceful-fs "^4.1.15" + source-map "^0.6.0" + +"@jest/test-result@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" + integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA== + dependencies: + "@jest/console" "^24.9.0" + "@jest/types" "^24.9.0" "@types/istanbul-lib-coverage" "^2.0.0" -"@jest/test-sequencer@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz#2f993bcf6ef5eb4e65e8233a95a3320248cf994b" - integrity sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg== +"@jest/test-sequencer@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz#f8f334f35b625a4f2f355f2fe7e6036dad2e6b31" + integrity sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A== dependencies: - "@jest/test-result" "^24.8.0" - jest-haste-map "^24.8.0" - jest-runner "^24.8.0" - jest-runtime "^24.8.0" + "@jest/test-result" "^24.9.0" + jest-haste-map "^24.9.0" + jest-runner "^24.9.0" + jest-runtime "^24.9.0" -"@jest/transform@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.8.0.tgz#628fb99dce4f9d254c6fd9341e3eea262e06fef5" - integrity sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA== +"@jest/transform@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56" + integrity sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^24.8.0" + "@jest/types" "^24.9.0" babel-plugin-istanbul "^5.1.0" chalk "^2.0.1" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" graceful-fs "^4.1.15" - jest-haste-map "^24.8.0" - jest-regex-util "^24.3.0" - jest-util "^24.8.0" + jest-haste-map "^24.9.0" + jest-regex-util "^24.9.0" + jest-util "^24.9.0" micromatch "^3.1.10" + pirates "^4.0.1" realpath-native "^1.1.0" slash "^2.0.0" source-map "^0.6.1" write-file-atomic "2.4.1" -"@jest/types@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.8.0.tgz#f31e25948c58f0abd8c845ae26fcea1491dea7ad" - integrity sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg== +"@jest/types@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" + integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^12.0.9" + "@types/yargs" "^13.0.0" "@nodelib/fs.scandir@2.1.1": version "2.1.1" @@ -374,10 +394,10 @@ "@types/minimatch" "*" "@types/node" "*" -"@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== +"@types/inquirer@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-6.5.0.tgz#b83b0bf30b88b8be7246d40e51d32fe9d10e09be" + integrity sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw== dependencies: "@types/through" "*" rxjs "^6.4.0" @@ -412,13 +432,18 @@ resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89" integrity sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA== -"@types/jest@^24.0.15": - version "24.0.15" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.15.tgz#6c42d5af7fe3b44ffff7cc65de7bf741e8fa427f" - integrity sha512-MU1HIvWUme74stAoc3mgAi+aMlgKOudgEvQDIm1v4RkrDudBh1T+NFp5sftpBAdXdx1J0PbdpJ+M2EsSOi1djA== +"@types/jest@^24.0.18": + version "24.0.18" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.18.tgz#9c7858d450c59e2164a8a9df0905fc5091944498" + integrity sha512-jcDDXdjTcrQzdN06+TSVsPPqxvsZA/5QkYfIZlq1JMw7FdP5AZylbOc+6B/cuDurctRe+MziUMtQ3xQdrbjqyQ== dependencies: "@types/jest-diff" "*" +"@types/json-schema@^7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" + integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== + "@types/lodash.flatten@^4.4.6": version "4.4.6" resolved "https://registry.yarnpkg.com/@types/lodash.flatten/-/lodash.flatten-4.4.6.tgz#b74c3267c87e44e603137d4621e8a9396b6551f5" @@ -451,10 +476,10 @@ version "4.14.116" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.116.tgz#5ccf215653e3e8c786a58390751033a9adca0eb9" -"@types/lodash@^4.14.136": - version "4.14.136" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.136.tgz#413e85089046b865d960c9ff1d400e04c31ab60f" - integrity sha512-0GJhzBdvsW2RUccNHOBkabI8HZVdOXmXbXhuKlDEd5Vv12P7oAVGfomGp3Ne21o5D/qu1WmthlNKFaoZJJeErA== +"@types/lodash@^4.14.137": + version "4.14.137" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.137.tgz#8a4804937dc6462274ffcc088df8f14fc1b368e2" + integrity sha512-g4rNK5SRKloO+sUGbuO7aPtwbwzMgjK+bm9BBhLD7jGUiGR7zhwYEhSln/ihgYQBeIJ5j7xjyaYzrWTcu3UotQ== "@types/minimatch@*": version "3.0.3" @@ -471,10 +496,10 @@ version "10.9.4" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.9.4.tgz#0f4cb2dc7c1de6096055357f70179043c33e9897" -"@types/node@^10.14.4": - version "10.14.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.4.tgz#1c586b991457cbb58fef51bc4e0cfcfa347714b5" - integrity sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg== +"@types/node@^10.14.16": + version "10.14.16" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.16.tgz#4d690c96cbb7b2728afea0e260d680501b3da5cf" + integrity sha512-/opXIbfn0P+VLt+N8DE4l8Mn8rbhiJgabU96ZJ0p9mxOkIks5gh6RUnpHak7Yh0SFkyjO/ODbxsQQPV2bpMmyA== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -504,11 +529,6 @@ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.0.0.tgz#453743c5bbf9f1bed61d959baab5b06be029b2d0" integrity sha512-wBlsw+8n21e6eTd4yVv8YD/E3xq0O6nNnJIquutAsFGE7EyMKz7W6RNT6BRu1SmdgmlCZ9tb0X+j+D6HGr8pZw== -"@types/yargs@^12.0.2", "@types/yargs@^12.0.9": - version "12.0.12" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.12.tgz#45dd1d0638e8c8f153e87d296907659296873916" - integrity sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw== - "@types/yargs@^13.0.0": version "13.0.0" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.0.tgz#d2acb3bec0047d8f648ebacdab6b928a900c42c4" @@ -516,42 +536,50 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^1.12.0": - version "1.12.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.12.0.tgz#96b4e08b5f998a198b8414508b1a289f9e8c549a" - integrity sha512-J/ZTZF+pLNqjXBGNfq5fahsoJ4vJOkYbitWPavA05IrZ7BXUaf4XWlhUB/ic1lpOGTRpLWF+PLAePjiHp6dz8g== +"@types/yargs@^13.0.2": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.2.tgz#a64674fc0149574ecd90ba746e932b5a5f7b3653" + integrity sha512-lwwgizwk/bIIU+3ELORkyuOgDjCh7zuWDFqRtPPhhVgq9N1F7CvLNKg1TX4f2duwtKQ0p044Au9r1PLIXHrIzQ== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.0.0.tgz#609a5d7b00ce21a6f94d7ef282eba9da57ca1e42" + integrity sha512-Mo45nxTTELODdl7CgpZKJISvLb+Fu64OOO2ZFc2x8sYSnUpFrBUW3H+H/ZGYmEkfnL6VkdtOSxgdt+Av79j0sA== dependencies: - "@typescript-eslint/experimental-utils" "1.12.0" - eslint-utils "^1.3.1" + "@typescript-eslint/experimental-utils" "2.0.0" + eslint-utils "^1.4.0" functional-red-black-tree "^1.0.1" regexpp "^2.0.1" - tsutils "^3.7.0" + tsutils "^3.14.0" -"@typescript-eslint/experimental-utils@1.12.0": - version "1.12.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.12.0.tgz#98417ee2e0c6fe8d1e50d934a6535d9c0f4277b6" - integrity sha512-s0soOTMJloytr9GbPteMLNiO2HvJ+qgQkRNplABXiVw6vq7uQRvidkby64Gqt/nA7pys74HksHwRULaB/QRVyw== +"@typescript-eslint/experimental-utils@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.0.0.tgz#f3d298bb411357f35c4184e24280b256b6321949" + integrity sha512-XGJG6GNBXIEx/mN4eTRypN/EUmsd0VhVGQ1AG+WTgdvjHl0G8vHhVBHrd/5oI6RRYBRnedNymSYWW1HAdivtmg== dependencies: - "@typescript-eslint/typescript-estree" "1.12.0" + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "2.0.0" eslint-scope "^4.0.0" -"@typescript-eslint/parser@^1.12.0": - version "1.12.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.12.0.tgz#9965895ec4745578185965d63f21510f93a3f35a" - integrity sha512-0uzbaa9ZLCA5yMWJywnJJ7YVENKGWVUhJDV5UrMoldC5HoI54W5kkdPhTfmtFKpPFp93MIwmJj0/61ztvmz5Dw== +"@typescript-eslint/parser@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.0.0.tgz#4273bb19d03489daf8372cdaccbc8042e098178f" + integrity sha512-ibyMBMr0383ZKserIsp67+WnNVoM402HKkxqXGlxEZsXtnGGurbnY90pBO3e0nBUM7chEEOcxUhgw9aPq7fEBA== dependencies: "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "1.12.0" - "@typescript-eslint/typescript-estree" "1.12.0" + "@typescript-eslint/experimental-utils" "2.0.0" + "@typescript-eslint/typescript-estree" "2.0.0" eslint-visitor-keys "^1.0.0" -"@typescript-eslint/typescript-estree@1.12.0": - version "1.12.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.12.0.tgz#d8dd0a7cffb5e3c0c3e98714042d83e316dfc9a9" - integrity sha512-nwN6yy//XcVhFs0ZyU+teJHB8tbCm7AIA8mu6E2r5hu6MajwYBY3Uwop7+rPZWUN/IUOHpL8C+iUPMDVYUU3og== +"@typescript-eslint/typescript-estree@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.0.0.tgz#c9f6c0efd1b11475540d6a55dc973cc5b9a67e77" + integrity sha512-NXbmzA3vWrSgavymlzMWNecgNOuiMMp62MO3kI7awZRLRcsA1QrYWo6q08m++uuAGVbXH/prZi2y1AWuhSu63w== dependencies: lodash.unescape "4.0.1" - semver "5.5.0" + semver "^6.2.0" abab@^2.0.0: version "2.0.0" @@ -568,10 +596,10 @@ acorn-globals@^4.1.0: acorn "^6.0.1" acorn-walk "^6.0.1" -acorn-jsx@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" - integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== +acorn-jsx@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.2.tgz#84b68ea44b373c4f8686023a551f61a21b7c4a4f" + integrity sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw== acorn-walk@^6.0.1: version "6.0.1" @@ -585,10 +613,18 @@ acorn@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.1.tgz#66e6147e1027704479dc6d9b20d884c572db3cc1" -acorn@^6.0.7: - version "6.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" - integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== +acorn@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.0.0.tgz#26b8d1cd9a9b700350b71c0905546f64d1284e7a" + integrity sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ== + +aggregate-error@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.0.tgz#5b5a3c95e9095f311c9ab16c19fb4f3527cd3f79" + integrity sha512-yKD9kEoJIR+2IFqhMwayIBgheLYbB3PS2OBhWae1L/ODTd/JF/30cW0bc9TqzRL3k4U41Dieu3BF4I29p8xesA== + dependencies: + clean-stack "^2.0.0" + indent-string "^3.2.0" ajv@^5.3.0: version "5.5.2" @@ -618,6 +654,13 @@ ansi-escapes@^3.2.0: resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== +ansi-escapes@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.2.1.tgz#4dccdb846c3eee10f6d64dea66273eab90c37228" + integrity sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q== + dependencies: + type-fest "^0.5.2" + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -699,21 +742,11 @@ array-includes@^3.0.3: define-properties "^1.1.2" es-abstract "^1.7.0" -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - dependencies: - array-uniq "^1.0.1" - array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -772,16 +805,16 @@ axios@^0.19.0: follow-redirects "1.5.10" is-buffer "^2.0.2" -babel-jest@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.8.0.tgz#5c15ff2b28e20b0f45df43fe6b7f2aae93dba589" - integrity sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw== +babel-jest@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54" + integrity sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw== dependencies: - "@jest/transform" "^24.8.0" - "@jest/types" "^24.8.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" "@types/babel__core" "^7.1.0" babel-plugin-istanbul "^5.1.0" - babel-preset-jest "^24.6.0" + babel-preset-jest "^24.9.0" chalk "^2.4.2" slash "^2.0.0" @@ -794,20 +827,20 @@ babel-plugin-istanbul@^5.1.0: istanbul-lib-instrument "^3.0.0" test-exclude "^5.0.0" -babel-plugin-jest-hoist@^24.6.0: - version "24.6.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz#f7f7f7ad150ee96d7a5e8e2c5da8319579e78019" - integrity sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w== +babel-plugin-jest-hoist@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756" + integrity sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw== dependencies: "@types/babel__traverse" "^7.0.6" -babel-preset-jest@^24.6.0: - version "24.6.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz#66f06136eefce87797539c0d63f1769cc3915984" - integrity sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw== +babel-preset-jest@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc" + integrity sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg== dependencies: "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - babel-plugin-jest-hoist "^24.6.0" + babel-plugin-jest-hoist "^24.9.0" balanced-match@^1.0.0: version "1.0.0" @@ -932,7 +965,7 @@ camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" -camelcase@^5.0.0: +camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== @@ -1012,12 +1045,24 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + cli-cursor@^2.0.0, cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" dependencies: restore-cursor "^2.0.0" +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + cli-spinners@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.1.0.tgz#22c34b4d51f573240885b201efda4e4ec9fff3c7" @@ -1034,14 +1079,6 @@ cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - dependencies: - string-width "^2.1.1" - 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" @@ -1233,7 +1270,7 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -define-properties@^1.1.2: +define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" dependencies: @@ -1258,19 +1295,6 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -del@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" - integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== - dependencies: - "@types/glob" "^7.1.1" - globby "^6.1.0" - is-path-cwd "^2.0.0" - is-path-in-cwd "^2.0.0" - p-map "^2.0.0" - pify "^4.0.1" - rimraf "^2.6.3" - del@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/del/-/del-5.0.0.tgz#4fa698b7a1ffb4e2ab3e8929ed699799654d6720" @@ -1282,6 +1306,20 @@ del@^5.0.0: p-map "^2.0.0" rimraf "^2.6.3" +del@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7" + integrity sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA== + dependencies: + globby "^10.0.1" + graceful-fs "^4.2.2" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.1" + p-map "^3.0.0" + rimraf "^3.0.0" + slash "^3.0.0" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -1298,10 +1336,10 @@ detect-newline@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" -diff-sequences@^24.3.0: - version "24.3.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.3.0.tgz#0f20e8a1df1abddaf4d9c226680952e64118b975" - integrity sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw== +diff-sequences@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" + integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== diff@^4.0.1: version "4.0.1" @@ -1352,6 +1390,11 @@ emoji-regex@^7.0.1: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + end-of-stream@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" @@ -1364,17 +1407,7 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.5.1: - version "1.12.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - -es-abstract@^1.7.0: +es-abstract@^1.12.0, es-abstract@^1.7.0: version "1.13.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== @@ -1386,6 +1419,16 @@ es-abstract@^1.7.0: is-regex "^1.0.4" object-keys "^1.0.12" +es-abstract@^1.5.1: + version "1.12.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + es-to-primitive@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" @@ -1418,10 +1461,10 @@ escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" -eslint-config-prettier@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.0.0.tgz#f429a53bde9fc7660e6353910fd996d6284d3c25" - integrity sha512-vDrcCFE3+2ixNT5H83g28bO/uYAwibJxerXPj+E7op4qzBCsAV36QfvdAyVOoNxKAH2Os/e01T/2x++V0LPukA== +eslint-config-prettier@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.1.0.tgz#e6f678ba367fbd1273998d5510f76f004e9dce7b" + integrity sha512-k9fny9sPjIBQ2ftFTesJV21Rg4R/7a7t7LCtZVrYQiHEp8Nnuk3EGaDmsKSAnsPj0BYcgB2zxzHa2NTkIxcOLg== dependencies: get-stdin "^6.0.0" @@ -1441,10 +1484,10 @@ eslint-module-utils@^2.4.0: debug "^2.6.8" pkg-dir "^2.0.0" -eslint-plugin-import@^2.18.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.0.tgz#7a5ba8d32622fb35eb9c8db195c2090bd18a3678" - integrity sha512-PZpAEC4gj/6DEMMoU2Df01C5c50r7zdGIN52Yfi7CvvWaYssG7Jt5R9nFG5gmqodxNOz9vQS87xk6Izdtpdrig== +eslint-plugin-import@^2.18.2: + version "2.18.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" + integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== dependencies: array-includes "^3.0.3" contains-path "^0.1.0" @@ -1453,8 +1496,8 @@ eslint-plugin-import@^2.18.0: eslint-import-resolver-node "^0.3.2" eslint-module-utils "^2.4.0" has "^1.0.3" - lodash "^4.17.11" minimatch "^3.0.4" + object.values "^1.1.0" read-pkg-up "^2.0.0" resolve "^1.11.0" @@ -1465,7 +1508,7 @@ eslint-plugin-prettier@^3.1.0: dependencies: prettier-linter-helpers "^1.0.0" -eslint-scope@^4.0.0, eslint-scope@^4.0.3: +eslint-scope@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== @@ -1473,20 +1516,35 @@ eslint-scope@^4.0.0, eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-utils@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" - integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== +eslint-scope@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" + integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.4.0, eslint-utils@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab" + integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q== + dependencies: + eslint-visitor-keys "^1.0.0" eslint-visitor-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== -eslint@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.0.1.tgz#4a32181d72cb999d6f54151df7d337131f81cda7" - integrity sha512-DyQRaMmORQ+JsWShYsSg4OPTjY56u1nCjAmICrE8vLWqyLKxhFXOthwMj1SA8xwfrv0CofLNVnqbfyhwCkaO0w== +eslint-visitor-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" + integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== + +eslint@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.2.2.tgz#03298280e7750d81fcd31431f3d333e43d93f24f" + integrity sha512-mf0elOkxHbdyGX1IJEUsNBzCDdyoUgljF3rRlgfyYh0pwGnreLc0jjD6ZuleOibjmnUWZLY2eXwSooeOgGJ2jw== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.10.0" @@ -1494,45 +1552,46 @@ eslint@^6.0.1: cross-spawn "^6.0.5" debug "^4.0.1" doctrine "^3.0.0" - eslint-scope "^4.0.3" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^6.0.0" + eslint-scope "^5.0.0" + eslint-utils "^1.4.2" + eslint-visitor-keys "^1.1.0" + espree "^6.1.1" esquery "^1.0.1" esutils "^2.0.2" file-entry-cache "^5.0.1" functional-red-black-tree "^1.0.1" - glob-parent "^3.1.0" + glob-parent "^5.0.0" globals "^11.7.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^6.2.2" + inquirer "^6.4.1" is-glob "^4.0.0" js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.3.0" - lodash "^4.17.11" + lodash "^4.17.14" minimatch "^3.0.4" mkdirp "^0.5.1" natural-compare "^1.4.0" optionator "^0.8.2" progress "^2.0.0" regexpp "^2.0.1" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" table "^5.2.3" text-table "^0.2.0" + v8-compile-cache "^2.0.3" -espree@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.0.0.tgz#716fc1f5a245ef5b9a7fdb1d7b0d3f02322e75f6" - integrity sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q== +espree@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.1.tgz#7f80e5f7257fc47db450022d723e356daeb1e5de" + integrity sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ== dependencies: - acorn "^6.0.7" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" + acorn "^7.0.0" + acorn-jsx "^5.0.2" + eslint-visitor-keys "^1.1.0" esprima@^3.1.3: version "3.1.3" @@ -1570,18 +1629,6 @@ exec-sh@^0.3.2: resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== -execa@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" - dependencies: - cross-spawn "^6.0.0" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -1594,10 +1641,10 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/execa/-/execa-2.0.3.tgz#4b84301b33042cfb622771e886ed0b10e5634642" - integrity sha512-iM124nlyGSrXmuyZF1EMe83ESY2chIYVyDRZKgmcDynid2Q2v/+GuE7gNMl6Sy9Niwf4MC0DDxagOxeMPjuLsw== +execa@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/execa/-/execa-2.0.4.tgz#2f5cc589c81db316628627004ea4e37b93391d8e" + integrity sha512-VcQfhuGD51vQUQtKIq2fjGDLDbL6N1DTQVpYzxZ7LPIXw3HqTuIz6uxRmpV1qf8i31LHf2kjiaGI+GdHwRgbnQ== dependencies: cross-spawn "^6.0.5" get-stream "^5.0.0" @@ -1625,17 +1672,17 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expect@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-24.8.0.tgz#471f8ec256b7b6129ca2524b2a62f030df38718d" - integrity sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA== +expect@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca" + integrity sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q== dependencies: - "@jest/types" "^24.8.0" + "@jest/types" "^24.9.0" ansi-styles "^3.2.0" - jest-get-type "^24.8.0" - jest-matcher-utils "^24.8.0" - jest-message-util "^24.8.0" - jest-regex-util "^24.3.0" + jest-get-type "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-regex-util "^24.9.0" extend-shallow@^2.0.1: version "2.0.1" @@ -1744,6 +1791,13 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" +figures@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.0.0.tgz#756275c964646163cc6f9197c7a0295dbfd04de9" + integrity sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g== + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" @@ -1871,10 +1925,6 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -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" @@ -1898,10 +1948,6 @@ get-stdin@^7.0.0: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -1925,14 +1971,6 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - glob-parent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" @@ -1940,7 +1978,7 @@ glob-parent@^5.0.0: dependencies: is-glob "^4.0.1" -glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: +glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== @@ -1957,7 +1995,7 @@ globals@^11.1.0, globals@^11.7.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== -globby@^10.0.0: +globby@^10.0.0, globby@^10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22" integrity sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A== @@ -1971,16 +2009,6 @@ globby@^10.0.0: merge2 "^1.2.3" slash "^3.0.0" -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - graceful-fs@^4.1.11, graceful-fs@^4.1.2: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -1990,11 +2018,16 @@ graceful-fs@^4.1.15: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== +graceful-fs@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" + integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== + growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" -handlebars@^4.1.0: +handlebars@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== @@ -2086,18 +2119,19 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -husky@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/husky/-/husky-3.0.0.tgz#de63821a7049dc412b1afd753c259e2f6e227562" - integrity sha512-lKMEn7bRK+7f5eWPNGclDVciYNQt0GIkAQmhKl+uHP1qFzoN0h92kmH9HZ8PCwyVA2EQPD8KHf0FYWqnTxau+Q== +husky@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/husky/-/husky-3.0.4.tgz#10a48ac11ab50859b0939750fa0b4e07ad0bf669" + integrity sha512-7Rnt8aJfy+MlV28snmYK7O7vWwtOfeVxV6KhLpUFXlmx5ukQ1nQmNUB7QsAwSgdySB5X+bm7q7JIRgazqBUzKA== dependencies: + chalk "^2.4.2" cosmiconfig "^5.2.1" execa "^1.0.0" get-stdin "^7.0.0" is-ci "^2.0.0" opencollective-postinstall "^2.0.2" pkg-dir "^4.2.0" - please-upgrade-node "^3.1.1" + please-upgrade-node "^3.2.0" read-pkg "^5.1.1" run-node "^1.0.0" slash "^3.0.0" @@ -2158,9 +2192,10 @@ imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" -indent-string@^3.0.0: +indent-string@^3.0.0, indent-string@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= inflight@^1.0.4: version "1.0.6" @@ -2177,10 +2212,10 @@ ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" -inquirer@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.2.tgz#46941176f65c9eb20804627149b743a218f25406" - integrity sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA== +inquirer@^6.4.1: + version "6.5.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== dependencies: ansi-escapes "^3.2.0" chalk "^2.4.2" @@ -2188,30 +2223,30 @@ inquirer@^6.2.2: cli-width "^2.0.0" external-editor "^3.0.3" figures "^2.0.0" - lodash "^4.17.11" + lodash "^4.17.12" mute-stream "0.0.7" run-async "^2.2.0" rxjs "^6.4.0" string-width "^2.1.0" - strip-ansi "^5.0.0" + strip-ansi "^5.1.0" through "^2.3.6" -inquirer@^6.5.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" - integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== +inquirer@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.0.tgz#9e2b032dde77da1db5db804758b8fea3a970519a" + integrity sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ== dependencies: - ansi-escapes "^3.2.0" + ansi-escapes "^4.2.1" chalk "^2.4.2" - cli-cursor "^2.1.0" + cli-cursor "^3.1.0" cli-width "^2.0.0" external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" run-async "^2.2.0" rxjs "^6.4.0" - string-width "^2.1.0" + string-width "^4.1.0" strip-ansi "^5.1.0" through "^2.3.6" @@ -2221,10 +2256,6 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -2313,7 +2344,7 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" -is-extglob@^2.1.0, is-extglob@^2.1.1: +is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -2327,18 +2358,16 @@ is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - is-glob@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" @@ -2373,7 +2402,7 @@ is-observable@^1.1.0: dependencies: symbol-observable "^1.1.0" -is-path-cwd@^2.0.0: +is-path-cwd@^2.0.0, is-path-cwd@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== @@ -2392,6 +2421,11 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" +is-path-inside@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.1.tgz#7417049ed551d053ab82bba3fdd6baa6b3a81e89" + integrity sha512-CKstxrctq1kUesU6WhtZDbYKzzYBuRH0UYInAVrkc/EYdB9ltbfE0gOoayG9nhohG6447sOOVGhHqsdmBvkbNg== + is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -2440,6 +2474,11 @@ is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + 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" @@ -2500,73 +2539,73 @@ istanbul-lib-source-maps@^3.0.1: rimraf "^2.6.2" source-map "^0.6.1" -istanbul-reports@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.1.1.tgz#72ef16b4ecb9a4a7bd0e2001e00f95d1eec8afa9" - integrity sha512-FzNahnidyEPBCI0HcufJoSEoKykesRlFcSzQqjH9x0+LC8tnnE/p/90PBLu8iZTxr8yYZNyTtiAujUqyN+CIxw== +istanbul-reports@^2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" + integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA== dependencies: - handlebars "^4.1.0" + handlebars "^4.1.2" -jest-changed-files@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.8.0.tgz#7e7eb21cf687587a85e50f3d249d1327e15b157b" - integrity sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug== +jest-changed-files@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" + integrity sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg== dependencies: - "@jest/types" "^24.8.0" + "@jest/types" "^24.9.0" execa "^1.0.0" throat "^4.0.0" -jest-cli@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.8.0.tgz#b075ac914492ed114fa338ade7362a301693e989" - integrity sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA== +jest-cli@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.9.0.tgz#ad2de62d07472d419c6abc301fc432b98b10d2af" + integrity sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg== dependencies: - "@jest/core" "^24.8.0" - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" + "@jest/core" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" chalk "^2.0.1" exit "^0.1.2" import-local "^2.0.0" is-ci "^2.0.0" - jest-config "^24.8.0" - jest-util "^24.8.0" - jest-validate "^24.8.0" + jest-config "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" prompts "^2.0.1" realpath-native "^1.1.0" - yargs "^12.0.2" + yargs "^13.3.0" -jest-config@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.8.0.tgz#77db3d265a6f726294687cbbccc36f8a76ee0f4f" - integrity sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw== +jest-config@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.9.0.tgz#fb1bbc60c73a46af03590719efa4825e6e4dd1b5" + integrity sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^24.8.0" - "@jest/types" "^24.8.0" - babel-jest "^24.8.0" + "@jest/test-sequencer" "^24.9.0" + "@jest/types" "^24.9.0" + babel-jest "^24.9.0" chalk "^2.0.1" glob "^7.1.1" - jest-environment-jsdom "^24.8.0" - jest-environment-node "^24.8.0" - jest-get-type "^24.8.0" - jest-jasmine2 "^24.8.0" + jest-environment-jsdom "^24.9.0" + jest-environment-node "^24.9.0" + jest-get-type "^24.9.0" + jest-jasmine2 "^24.9.0" jest-regex-util "^24.3.0" - jest-resolve "^24.8.0" - jest-util "^24.8.0" - jest-validate "^24.8.0" + jest-resolve "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" micromatch "^3.1.10" - pretty-format "^24.8.0" + pretty-format "^24.9.0" realpath-native "^1.1.0" -jest-diff@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.8.0.tgz#146435e7d1e3ffdf293d53ff97e193f1d1546172" - integrity sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g== +jest-diff@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" + integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== dependencies: chalk "^2.0.1" - diff-sequences "^24.3.0" - jest-get-type "^24.8.0" - pretty-format "^24.8.0" + diff-sequences "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" jest-docblock@^24.3.0: version "24.3.0" @@ -2575,123 +2614,124 @@ jest-docblock@^24.3.0: dependencies: detect-newline "^2.1.0" -jest-each@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.8.0.tgz#a05fd2bf94ddc0b1da66c6d13ec2457f35e52775" - integrity sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA== +jest-each@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.9.0.tgz#eb2da602e2a610898dbc5f1f6df3ba86b55f8b05" + integrity sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog== dependencies: - "@jest/types" "^24.8.0" + "@jest/types" "^24.9.0" chalk "^2.0.1" - jest-get-type "^24.8.0" - jest-util "^24.8.0" - pretty-format "^24.8.0" - -jest-environment-jsdom@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz#300f6949a146cabe1c9357ad9e9ecf9f43f38857" - integrity sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ== - dependencies: - "@jest/environment" "^24.8.0" - "@jest/fake-timers" "^24.8.0" - "@jest/types" "^24.8.0" - jest-mock "^24.8.0" - jest-util "^24.8.0" + jest-get-type "^24.9.0" + jest-util "^24.9.0" + pretty-format "^24.9.0" + +jest-environment-jsdom@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz#4b0806c7fc94f95edb369a69cc2778eec2b7375b" + integrity sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA== + dependencies: + "@jest/environment" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + jest-util "^24.9.0" jsdom "^11.5.1" -jest-environment-node@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.8.0.tgz#d3f726ba8bc53087a60e7a84ca08883a4c892231" - integrity sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q== +jest-environment-node@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3" + integrity sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA== dependencies: - "@jest/environment" "^24.8.0" - "@jest/fake-timers" "^24.8.0" - "@jest/types" "^24.8.0" - jest-mock "^24.8.0" - jest-util "^24.8.0" + "@jest/environment" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + jest-util "^24.9.0" -jest-get-type@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.8.0.tgz#a7440de30b651f5a70ea3ed7ff073a32dfe646fc" - integrity sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ== +jest-get-type@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" + integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== -jest-haste-map@^24.8.0: - version "24.8.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.8.1.tgz#f39cc1d2b1d907e014165b4bd5a957afcb992982" - integrity sha512-SwaxMGVdAZk3ernAx2Uv2sorA7jm3Kx+lR0grp6rMmnY06Kn/urtKx1LPN2mGTea4fCT38impYT28FfcLUhX0g== +jest-haste-map@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" + integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ== dependencies: - "@jest/types" "^24.8.0" + "@jest/types" "^24.9.0" anymatch "^2.0.0" fb-watchman "^2.0.0" graceful-fs "^4.1.15" invariant "^2.2.4" - jest-serializer "^24.4.0" - jest-util "^24.8.0" - jest-worker "^24.6.0" + jest-serializer "^24.9.0" + jest-util "^24.9.0" + jest-worker "^24.9.0" micromatch "^3.1.10" sane "^4.0.3" walker "^1.0.7" optionalDependencies: fsevents "^1.2.7" -jest-jasmine2@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz#a9c7e14c83dd77d8b15e820549ce8987cc8cd898" - integrity sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong== +jest-jasmine2@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0" + integrity sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^24.8.0" - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" chalk "^2.0.1" co "^4.6.0" - expect "^24.8.0" + expect "^24.9.0" is-generator-fn "^2.0.0" - jest-each "^24.8.0" - jest-matcher-utils "^24.8.0" - jest-message-util "^24.8.0" - jest-runtime "^24.8.0" - jest-snapshot "^24.8.0" - jest-util "^24.8.0" - pretty-format "^24.8.0" + jest-each "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-runtime "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + pretty-format "^24.9.0" throat "^4.0.0" -jest-leak-detector@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz#c0086384e1f650c2d8348095df769f29b48e6980" - integrity sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g== +jest-leak-detector@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a" + integrity sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA== dependencies: - pretty-format "^24.8.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" -jest-matcher-utils@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz#2bce42204c9af12bde46f83dc839efe8be832495" - integrity sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw== +jest-matcher-utils@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" + integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA== dependencies: chalk "^2.0.1" - jest-diff "^24.8.0" - jest-get-type "^24.8.0" - pretty-format "^24.8.0" + jest-diff "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" -jest-message-util@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.8.0.tgz#0d6891e72a4beacc0292b638685df42e28d6218b" - integrity sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g== +jest-message-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" + integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw== dependencies: "@babel/code-frame" "^7.0.0" - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" "@types/stack-utils" "^1.0.1" chalk "^2.0.1" micromatch "^3.1.10" slash "^2.0.0" stack-utils "^1.0.1" -jest-mock@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.8.0.tgz#2f9d14d37699e863f1febf4e4d5a33b7fdbbde56" - integrity sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A== +jest-mock@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" + integrity sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w== dependencies: - "@jest/types" "^24.8.0" + "@jest/types" "^24.9.0" jest-pnp-resolver@^1.2.1: version "1.2.1" @@ -2703,113 +2743,119 @@ jest-regex-util@^24.3.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.3.0.tgz#d5a65f60be1ae3e310d5214a0307581995227b36" integrity sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg== -jest-resolve-dependencies@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz#19eec3241f2045d3f990dba331d0d7526acff8e0" - integrity sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw== +jest-regex-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" + integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA== + +jest-resolve-dependencies@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz#ad055198959c4cfba8a4f066c673a3f0786507ab" + integrity sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g== dependencies: - "@jest/types" "^24.8.0" + "@jest/types" "^24.9.0" jest-regex-util "^24.3.0" - jest-snapshot "^24.8.0" + jest-snapshot "^24.9.0" -jest-resolve@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.8.0.tgz#84b8e5408c1f6a11539793e2b5feb1b6e722439f" - integrity sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw== +jest-resolve@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.9.0.tgz#dff04c7687af34c4dd7e524892d9cf77e5d17321" + integrity sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ== dependencies: - "@jest/types" "^24.8.0" + "@jest/types" "^24.9.0" browser-resolve "^1.11.3" chalk "^2.0.1" jest-pnp-resolver "^1.2.1" realpath-native "^1.1.0" -jest-runner@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.8.0.tgz#4f9ae07b767db27b740d7deffad0cf67ccb4c5bb" - integrity sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow== +jest-runner@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.9.0.tgz#574fafdbd54455c2b34b4bdf4365a23857fcdf42" + integrity sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg== dependencies: "@jest/console" "^24.7.1" - "@jest/environment" "^24.8.0" - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" chalk "^2.4.2" exit "^0.1.2" graceful-fs "^4.1.15" - jest-config "^24.8.0" + jest-config "^24.9.0" jest-docblock "^24.3.0" - jest-haste-map "^24.8.0" - jest-jasmine2 "^24.8.0" - jest-leak-detector "^24.8.0" - jest-message-util "^24.8.0" - jest-resolve "^24.8.0" - jest-runtime "^24.8.0" - jest-util "^24.8.0" + jest-haste-map "^24.9.0" + jest-jasmine2 "^24.9.0" + jest-leak-detector "^24.9.0" + jest-message-util "^24.9.0" + jest-resolve "^24.9.0" + jest-runtime "^24.9.0" + jest-util "^24.9.0" jest-worker "^24.6.0" source-map-support "^0.5.6" throat "^4.0.0" -jest-runtime@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.8.0.tgz#05f94d5b05c21f6dc54e427cd2e4980923350620" - integrity sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA== +jest-runtime@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.9.0.tgz#9f14583af6a4f7314a6a9d9f0226e1a781c8e4ac" + integrity sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw== dependencies: "@jest/console" "^24.7.1" - "@jest/environment" "^24.8.0" + "@jest/environment" "^24.9.0" "@jest/source-map" "^24.3.0" - "@jest/transform" "^24.8.0" - "@jest/types" "^24.8.0" - "@types/yargs" "^12.0.2" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/yargs" "^13.0.0" chalk "^2.0.1" exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.1.15" - jest-config "^24.8.0" - jest-haste-map "^24.8.0" - jest-message-util "^24.8.0" - jest-mock "^24.8.0" + jest-config "^24.9.0" + jest-haste-map "^24.9.0" + jest-message-util "^24.9.0" + jest-mock "^24.9.0" jest-regex-util "^24.3.0" - jest-resolve "^24.8.0" - jest-snapshot "^24.8.0" - jest-util "^24.8.0" - jest-validate "^24.8.0" + jest-resolve "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" realpath-native "^1.1.0" slash "^2.0.0" strip-bom "^3.0.0" - yargs "^12.0.2" + yargs "^13.3.0" -jest-serializer@^24.4.0: - version "24.4.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.4.0.tgz#f70c5918c8ea9235ccb1276d232e459080588db3" - integrity sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q== +jest-serializer@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" + integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ== -jest-snapshot@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.8.0.tgz#3bec6a59da2ff7bc7d097a853fb67f9d415cb7c6" - integrity sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg== +jest-snapshot@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba" + integrity sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew== dependencies: "@babel/types" "^7.0.0" - "@jest/types" "^24.8.0" + "@jest/types" "^24.9.0" chalk "^2.0.1" - expect "^24.8.0" - jest-diff "^24.8.0" - jest-matcher-utils "^24.8.0" - jest-message-util "^24.8.0" - jest-resolve "^24.8.0" + expect "^24.9.0" + jest-diff "^24.9.0" + jest-get-type "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-resolve "^24.9.0" mkdirp "^0.5.1" natural-compare "^1.4.0" - pretty-format "^24.8.0" - semver "^5.5.0" - -jest-util@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.8.0.tgz#41f0e945da11df44cc76d64ffb915d0716f46cd1" - integrity sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA== - dependencies: - "@jest/console" "^24.7.1" - "@jest/fake-timers" "^24.8.0" - "@jest/source-map" "^24.3.0" - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" + pretty-format "^24.9.0" + semver "^6.2.0" + +jest-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" + integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg== + dependencies: + "@jest/console" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/source-map" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" callsites "^3.0.0" chalk "^2.0.1" graceful-fs "^4.1.15" @@ -2818,29 +2864,29 @@ jest-util@^24.8.0: slash "^2.0.0" source-map "^0.6.0" -jest-validate@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.8.0.tgz#624c41533e6dfe356ffadc6e2423a35c2d3b4849" - integrity sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA== +jest-validate@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" + integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ== dependencies: - "@jest/types" "^24.8.0" - camelcase "^5.0.0" + "@jest/types" "^24.9.0" + camelcase "^5.3.1" chalk "^2.0.1" - jest-get-type "^24.8.0" - leven "^2.1.0" - pretty-format "^24.8.0" - -jest-watcher@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.8.0.tgz#58d49915ceddd2de85e238f6213cef1c93715de4" - integrity sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw== - dependencies: - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" - "@types/yargs" "^12.0.9" + jest-get-type "^24.9.0" + leven "^3.1.0" + pretty-format "^24.9.0" + +jest-watcher@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.9.0.tgz#4b56e5d1ceff005f5b88e528dc9afc8dd4ed2b3b" + integrity sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw== + dependencies: + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/yargs" "^13.0.0" ansi-escapes "^3.0.0" chalk "^2.0.1" - jest-util "^24.8.0" + jest-util "^24.9.0" string-length "^2.0.0" jest-worker@^24.6.0: @@ -2851,13 +2897,21 @@ jest-worker@^24.6.0: merge-stream "^1.0.1" supports-color "^6.1.0" -jest@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-24.8.0.tgz#d5dff1984d0d1002196e9b7f12f75af1b2809081" - integrity sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg== +jest-worker@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== + dependencies: + merge-stream "^2.0.0" + supports-color "^6.1.0" + +jest@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171" + integrity sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw== dependencies: import-local "^2.0.0" - jest-cli "^24.8.0" + jest-cli "^24.9.0" "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" @@ -2978,19 +3032,14 @@ kleur@^3.0.2: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - dependencies: - invert-kv "^2.0.0" - left-pad@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== levn@^0.3.0, levn@~0.3.0: version "0.3.0" @@ -2999,21 +3048,22 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -lint-staged@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-9.2.0.tgz#155e5723dffdaa55d252c47bab05a2962c1e9781" - integrity sha512-K/CQWcxYunc8lGMNTFvtI4+ybJcHW3K4Ghudz2OrJhIWdW/i1WWu9rGiVj4yJ0+D/xh8a08kp5slt89VZC9Eqg== +lint-staged@^9.2.4: + version "9.2.4" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-9.2.4.tgz#7a35839c9c6103ec98eabf43e35657c209509345" + integrity sha512-RAt5ogbLRiKy9+T3dKbbPKP6tN2I9VjEtTXQFxdkauUdMjIBsS70ikwwSgsBR8xVVCUSX7sVDyWCyem5xB8YDw== dependencies: chalk "^2.4.2" commander "^2.20.0" cosmiconfig "^5.2.1" debug "^4.1.1" dedent "^0.7.0" - del "^4.1.1" - execa "^2.0.1" + del "^5.0.0" + execa "^2.0.3" listr "^0.14.3" log-symbols "^3.0.0" micromatch "^4.0.2" + normalize-path "^3.0.0" please-upgrade-node "^3.1.1" string-argv "^0.3.0" stringify-object "^3.3.0" @@ -3133,7 +3183,7 @@ lodash@^4.13.1, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.5: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== -lodash@^4.17.15: +lodash@^4.17.14, lodash@^4.17.15: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -3196,12 +3246,6 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" -map-age-cleaner@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz#098fb15538fd3dbe461f12745b0ca8568d4e3f74" - dependencies: - p-defer "^1.0.0" - map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -3212,14 +3256,6 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -mem@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.0.0.tgz#6437690d9471678f6cc83659c00cbafcd6b0cdaf" - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^1.0.0" - p-is-promise "^1.1.0" - merge-stream@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" @@ -3339,6 +3375,11 @@ mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + nan@^2.9.2: version "2.11.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.0.tgz#574e360e4d954ab16966ec102c0c049fd961a099" @@ -3404,12 +3445,14 @@ node-modules-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= -node-notifier@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" +node-notifier@^5.4.2: + version "5.4.3" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" + integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q== dependencies: growly "^1.3.0" - semver "^5.4.1" + is-wsl "^1.1.0" + semver "^5.5.0" shellwords "^0.1.1" which "^1.3.0" @@ -3460,6 +3503,11 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + npm-bundled@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" @@ -3505,7 +3553,7 @@ oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" -object-assign@^4.0.1, object-assign@^4.1.0: +object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -3540,6 +3588,16 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" +object.values@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" + integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has "^1.0.3" + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -3599,14 +3657,6 @@ os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" -os-locale@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.0.1.tgz#3b014fbf01d87f60a1e5348d80fe870dc82c4620" - dependencies: - execa "^0.10.0" - lcid "^2.0.0" - mem "^4.0.0" - os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -3618,10 +3668,6 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - p-each-series@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" @@ -3638,10 +3684,6 @@ p-finally@^2.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== -p-is-promise@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" - p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -3687,6 +3729,13 @@ p-map@^2.0.0: resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + p-reduce@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" @@ -3730,11 +3779,6 @@ pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -3805,21 +3849,6 @@ pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - pirates@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" @@ -3853,6 +3882,13 @@ please-upgrade-node@^3.1.1: dependencies: semver-compare "^1.0.0" +please-upgrade-node@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" + integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== + dependencies: + semver-compare "^1.0.0" + pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" @@ -3877,12 +3913,12 @@ prettier@^1.18.2: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== -pretty-format@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.8.0.tgz#8dae7044f58db7cb8be245383b565a963e3c27f2" - integrity sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw== +pretty-format@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" + integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== dependencies: - "@jest/types" "^24.8.0" + "@jest/types" "^24.9.0" ansi-regex "^4.0.0" ansi-styles "^3.2.0" react-is "^16.8.4" @@ -4141,6 +4177,14 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -4163,6 +4207,13 @@ rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: dependencies: glob "^7.0.5" +rimraf@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b" + integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg== + dependencies: + glob "^7.1.3" + rsvp@^4.8.4: version "4.8.4" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.4.tgz#b50e6b34583f3dd89329a2f23a8a2be072845911" @@ -4238,12 +4289,7 @@ semver-compare@^1.0.0: version "5.5.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" -semver@5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== - -semver@^5.5, semver@^5.5.1: +semver@^5.5: version "5.7.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== @@ -4253,6 +4299,11 @@ semver@^6.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A== +semver@^6.1.2, semver@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -4459,7 +4510,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: @@ -4475,6 +4526,15 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.1.0.tgz#ba846d1daa97c3c596155308063e075ed1c99aff" + integrity sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^5.2.0" + string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -4528,7 +4588,7 @@ strip-json-comments@*, strip-json-comments@^3.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== -strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: +strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -4693,10 +4753,10 @@ tslib@^1.8.1, tslib@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" -tsutils@^3.7.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.10.0.tgz#6f1c95c94606e098592b0dff06590cf9659227d6" - integrity sha512-q20XSMq7jutbGB8luhKKsQldRKWvyBO2BGqni3p4yq8Ys9bEP/xQw3KepKmMRt9gJ4lvQSScrihJrcKdKoSU7Q== +tsutils@^3.14.0: + version "3.17.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" + integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== dependencies: tslib "^1.8.1" @@ -4725,6 +4785,11 @@ type-fest@^0.4.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== +type-fest@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.5.2.tgz#d6ef42a0356c6cd45f49485c3b6281fc148e48a2" + integrity sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw== + typescript@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" @@ -4784,6 +4849,11 @@ uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" +v8-compile-cache@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" + integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== + validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -4872,13 +4942,6 @@ wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" @@ -4925,7 +4988,7 @@ xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" -"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: +y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== @@ -4941,14 +5004,6 @@ yargs-parser@10.x: dependencies: camelcase "^4.1.0" -yargs-parser@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" - integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^13.1.1: version "13.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" @@ -4957,30 +5012,29 @@ yargs-parser@^13.1.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@^12.0.2: - version "12.0.5" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" - integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== +yargs@^13.3.0: + version "13.3.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" + integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== dependencies: - cliui "^4.0.0" - decamelize "^1.2.0" + cliui "^5.0.0" find-up "^3.0.0" - get-caller-file "^1.0.1" - os-locale "^3.0.0" + get-caller-file "^2.0.1" require-directory "^2.1.1" - require-main-filename "^1.0.1" + require-main-filename "^2.0.0" set-blocking "^2.0.0" - string-width "^2.0.0" + string-width "^3.0.0" which-module "^2.0.0" - y18n "^3.2.1 || ^4.0.0" - yargs-parser "^11.1.1" + y18n "^4.0.0" + yargs-parser "^13.1.1" -yargs@^13.3.0: - version "13.3.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" - integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== +yargs@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.0.0.tgz#ba4cacc802b3c0b3e36a9e791723763d57a85066" + integrity sha512-ssa5JuRjMeZEUjg7bEL99AwpitxU/zWGAGpdj0di41pOEmJti8NR6kyUIJBkR78DTYNPZOU08luUo0GTHuB+ow== dependencies: cliui "^5.0.0" + decamelize "^1.2.0" find-up "^3.0.0" get-caller-file "^2.0.1" require-directory "^2.1.1"