diff --git a/@commitlint/is-ignored/index.d.ts b/@commitlint/is-ignored/index.d.ts new file mode 100644 index 0000000000..221bc364ee --- /dev/null +++ b/@commitlint/is-ignored/index.d.ts @@ -0,0 +1 @@ +export * from "./lib"; \ No newline at end of file diff --git a/@commitlint/is-ignored/index.js b/@commitlint/is-ignored/index.js new file mode 100644 index 0000000000..cba98f2bef --- /dev/null +++ b/@commitlint/is-ignored/index.js @@ -0,0 +1,2 @@ +module.exports = require('./lib').default; +module.exports.default = module.exports; diff --git a/@commitlint/is-ignored/jest.config.js b/@commitlint/is-ignored/jest.config.js new file mode 100644 index 0000000000..20d2ea60f5 --- /dev/null +++ b/@commitlint/is-ignored/jest.config.js @@ -0,0 +1,4 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node' +}; diff --git a/@commitlint/is-ignored/package.json b/@commitlint/is-ignored/package.json index 7cdf28b110..4f32a1c8ab 100644 --- a/@commitlint/is-ignored/package.json +++ b/@commitlint/is-ignored/package.json @@ -2,36 +2,16 @@ "name": "@commitlint/is-ignored", "version": "8.0.0", "description": "Lint your commit messages", - "main": "lib/index.js", "files": [ "lib/" ], "scripts": { - "build": "cross-env NODE_ENV=production babel src --out-dir lib --source-maps", + "build": "tsc", "deps": "dep-check", "pkg": "pkg-check", - "start": "concurrently \"ava -c 4 --verbose --watch\" \"yarn run watch\"", - "test": "ava -c 4 --verbose", - "watch": "babel src --out-dir lib --watch --source-maps" - }, - "ava": { - "files": [ - "src/**/*.test.js", - "!lib/**/*" - ], - "source": [ - "src/**/*.js", - "!lib/**/*" - ], - "babel": "inherit", - "require": [ - "babel-register" - ] - }, - "babel": { - "presets": [ - "babel-preset-commitlint" - ] + "start": "concurrently \"jest --watchAll\" \"tsc -w\"", + "test": "jest", + "watch": "tsc -w" }, "engines": { "node": ">=4" @@ -56,17 +36,17 @@ }, "license": "MIT", "devDependencies": { - "@commitlint/parse": "^8.0.0", + "@commitlint/parse": "8.0.0", "@commitlint/test": "8.0.0", - "@commitlint/utils": "^8.0.0", - "ava": "0.22.0", - "babel-cli": "6.26.0", - "babel-preset-commitlint": "^8.0.0", - "babel-register": "6.26.0", + "@commitlint/utils": "8.0.0", + "@types/jest": "^24.0.13", "concurrently": "3.5.1", - "cross-env": "5.1.1" + "jest": "^24.8.0", + "ts-jest": "^24.0.2", + "typescript": "^3.5.1" }, "dependencies": { + "@types/semver": "^6.0.0", "semver": "6.1.1" } } diff --git a/@commitlint/is-ignored/src/defaults.ts b/@commitlint/is-ignored/src/defaults.ts new file mode 100644 index 0000000000..8b5072f926 --- /dev/null +++ b/@commitlint/is-ignored/src/defaults.ts @@ -0,0 +1,29 @@ +import semver from 'semver'; + +export type Matcher = (commit: string) => boolean; + +const isSemver = (c: string): boolean => { + const firstLine = c.split('\n').shift(); + + if (typeof firstLine !== 'string') { + return false; + } + + const stripped = firstLine.replace(/^chore(\([^)]+\))?:/, '').trim(); + return semver.valid(stripped) !== null; +}; + +const test = (r: RegExp): ((c: string) => boolean) => r.test.bind(r); + +export const wildcards: Matcher[] = [ + test( + /^((Merge pull request)|(Merge (.*?) into (.*?)|(Merge branch (.*?)))(?:\r?\n)*$)/m + ), + test(/^(R|r)evert (.*)/), + test(/^(fixup|squash)!/), + isSemver, + test(/^Merged (.*?)(in|into) (.*)/), + test(/^Merge remote-tracking branch (.*)/), + test(/^Automatic merge(.*)/), + test(/^Auto-merged (.*?) into (.*)/) +]; diff --git a/@commitlint/is-ignored/src/index.js b/@commitlint/is-ignored/src/index.js deleted file mode 100644 index 81982cce8c..0000000000 --- a/@commitlint/is-ignored/src/index.js +++ /dev/null @@ -1,45 +0,0 @@ -import semver from 'semver'; - -export const WILDCARDS = [ - c => - c.match( - /^((Merge pull request)|(Merge (.*?) into (.*?)|(Merge branch (.*?)))(?:\r?\n)*$)/m - ), - c => c.match(/^(R|r)evert (.*)/), - c => c.match(/^(fixup|squash)!/), - c => - semver.valid( - c - .split('\n') - .shift() - .replace(/^chore(\([^)]+\))?:/, '') - .trim() - ), - c => c.match(/^Merged (.*?)(in|into) (.*)/), - c => c.match(/^Merge remote-tracking branch (.*)/), - c => c.match(/^Automatic merge(.*)/), - c => c.match(/^Auto-merged (.*?) into (.*)/) -]; - -export default function isIgnored(commit = '', opts = {}) { - const ignores = typeof opts.ignores === 'undefined' ? [] : opts.ignores; - - if (!Array.isArray(ignores)) { - throw new Error( - `ignores must be of type array, received ${ignores} of type ${typeof ignores}` - ); - } - - const invalids = ignores.filter(c => typeof c !== 'function'); - - if (invalids.length > 0) { - throw new Error( - `ignores must be array of type function, received items of type: ${invalids - .map(i => typeof i) - .join(', ')}` - ); - } - - const base = opts.defaults === false ? [] : WILDCARDS; - return [...base, ...ignores].some(w => w(commit)); -} diff --git a/@commitlint/is-ignored/src/index.test.js b/@commitlint/is-ignored/src/index.test.js deleted file mode 100644 index 5d1a8becf1..0000000000 --- a/@commitlint/is-ignored/src/index.test.js +++ /dev/null @@ -1,153 +0,0 @@ -import test from 'ava'; -import isIgnored from '.'; - -const VERSION_MESSAGES = [ - '0.0.1', - '0.1.0', - '1.0.0', - '0.0.1-alpha', - '0.0.1-some-crazy-tag', - '0.0.1-0', - '0.0.1-999', - '0.0.1-alpha.0', - '0.0.1-alpha.999', - '0.0.1-some-crazy-tag.0', - '0.0.1-some-crazy-tag.999', - '0.0.1-1e69d54', - 'v0.0.1', - ' v3.0.0' -]; - -const AMENDMENTS = [ - 'Signed-off-by: Developer ', - 'Change-Id: I895114872a515a269487a683124b63303818e19c', - 'Signed-off-by: Developer \nChange-Id: I895114872a515a269487a683124b63303818e19c' -]; - -const AMENDED_VERSION_MESSAGES = VERSION_MESSAGES.reduce((results, message) => { - return [ - ...results, - ...AMENDMENTS.map(amendment => `${message}\n\n${amendment}`) - ]; -}, []); - -test('should return false when called without arguments', t => { - t.false(isIgnored()); -}); - -test('should return false when called with empty string', t => { - t.false(isIgnored('')); -}); - -test('should return false for normal commit', t => { - t.false(isIgnored('initial commit')); -}); - -test('should return true for branch merges', t => { - t.true(isIgnored("Merge branch 'iss53'")); -}); - -test('should return true for branch merges with newline characters', t => { - t.true(isIgnored("Merge branch 'ctrom-YarnBuild'\n")); - t.true(isIgnored("Merge branch 'ctrom-YarnBuild'\r\n")); -}); - -test('should return true for branch merges with multiple newline characters', t => { - t.true(isIgnored("Merge branch 'ctrom-YarnBuild'\n\n\n")); - t.true(isIgnored("Merge branch 'ctrom-YarnBuild'\r\n\r\n\r\n")); -}); - -test('should return true for merged PRs', t => { - t.true(isIgnored('Merge pull request #369')); -}); - -test('should return true for branch merges with newline characters and more characters after it', t => { - t.true(isIgnored("Merge branch 'ctrom-YarnBuild'\n ")); - t.true(isIgnored("Merge branch 'ctrom-YarnBuild'\r\n # some comment")); -}); - -test('should return true for revert commits', t => { - t.true( - isIgnored( - `Revert "docs: add recipe for linting of all commits in a PR (#36)"\n\nThis reverts commit 1e69d542c16c2a32acfd139e32efa07a45f19111.` - ) - ); - t.true( - isIgnored( - `revert "docs: add recipe for linting of all commits in a PR (#36)"\n\nThis reverts commit 1e69d542c16c2a32acfd139e32efa07a45f19111.` - ) - ); -}); - -test('should ignore npm semver commits', t => { - VERSION_MESSAGES.forEach(message => t.true(isIgnored(message))); -}); - -test('should ignore npm semver commits with chore', t => { - VERSION_MESSAGES.forEach(message => t.true(isIgnored(`chore: ${message}`))); - VERSION_MESSAGES.forEach(message => - t.true(isIgnored(`chore(release): ${message}`)) - ); -}); - -test('should ignore npm semver commits with footers', t => { - AMENDED_VERSION_MESSAGES.forEach(message => t.true(isIgnored(message))); -}); - -test('should return true fixup commits', t => { - t.true(isIgnored('fixup! initial commit')); -}); - -test('should return true squash commits', t => { - t.true(isIgnored('squash! initial commit')); -}); - -test('should return true for bitbucket merge commits', t => { - t.true( - isIgnored('Merged in feature/facebook-friends-sync (pull request #8)') - ); - t.true(isIgnored('Merged develop into feature/component-form-select-card')); - t.true(isIgnored('Automatic merge')); -}); - -test('should return true for automatic merge commits', t => { - t.true(isIgnored('Auto-merged develop into master')); -}); - -test('should return false for commits containing, but not starting, with merge branch', t => { - t.false(isIgnored('foo bar Merge branch xxx')); -}); - -test('should return false for ignored message if defaults is false', t => { - t.false( - isIgnored('Auto-merged develop into master', { - defaults: false - }) - ); -}); - -test('should return false for ignored message if custom ignores and defaults is false', t => { - t.false( - isIgnored('Auto-merged develop into master', { - defaults: false - }) - ); -}); - -test('should throw error if ignores is not an array', t => { - const ignoredString = 'this should be ignored'; - t.throws(() => { - isIgnored(ignoredString, { - ignores: 'throws error' - }); - }); -}); - -test('should return true for custom ignores as function', t => { - const ignoredString = 'this should be ignored'; - t.true( - isIgnored(ignoredString, { - ignores: [c => c === ignoredString] - }) - ); -}); diff --git a/@commitlint/is-ignored/src/index.ts b/@commitlint/is-ignored/src/index.ts new file mode 100644 index 0000000000..52d319a0bc --- /dev/null +++ b/@commitlint/is-ignored/src/index.ts @@ -0,0 +1,2 @@ +export * from './is-ignored'; +export {Matcher} from './defaults'; diff --git a/@commitlint/is-ignored/src/is-ignored.test.ts b/@commitlint/is-ignored/src/is-ignored.test.ts new file mode 100644 index 0000000000..663080223b --- /dev/null +++ b/@commitlint/is-ignored/src/is-ignored.test.ts @@ -0,0 +1,163 @@ +import isIgnored from './is-ignored'; + +const VERSION_MESSAGES = [ + '0.0.1', + '0.1.0', + '1.0.0', + '0.0.1-alpha', + '0.0.1-some-crazy-tag', + '0.0.1-0', + '0.0.1-999', + '0.0.1-alpha.0', + '0.0.1-alpha.999', + '0.0.1-some-crazy-tag.0', + '0.0.1-some-crazy-tag.999', + '0.0.1-1e69d54', + 'v0.0.1', + ' v3.0.0' +]; + +const AMENDMENTS = [ + 'Signed-off-by: Developer ', + 'Change-Id: I895114872a515a269487a683124b63303818e19c', + 'Signed-off-by: Developer \nChange-Id: I895114872a515a269487a683124b63303818e19c' +]; + +const AMENDED_VERSION_MESSAGES = VERSION_MESSAGES.reduce( + (results, message) => { + return [ + ...results, + ...AMENDMENTS.map(amendment => `${message}\n\n${amendment}`) + ]; + }, + [] +); + +test('should return false when called without arguments', () => { + expect(isIgnored()).toBe(false); +}); + +test('should return false when called with empty string', () => { + expect(isIgnored('')).toBe(false); +}); + +test('should return false for normal commit', () => { + expect(isIgnored('initial commit')).toBe(false); +}); + +test('should return true for branch merges', () => { + expect(isIgnored("Merge branch 'iss53'")).toBe(true); +}); + +test('should return true for branch merges with newline characters', () => { + expect(isIgnored("Merge branch 'ctrom-YarnBuild'\n")).toBe(true); + expect(isIgnored("Merge branch 'ctrom-YarnBuild'\r\n")).toBe(true); +}); + +test('should return true for branch merges with multiple newline characters', () => { + expect(isIgnored("Merge branch 'ctrom-YarnBuild'\n\n\n")).toBe(true); + expect(isIgnored("Merge branch 'ctrom-YarnBuild'\r\n\r\n\r\n")).toBe(true); +}); + +test('should return true for merged PRs', () => { + expect(isIgnored('Merge pull request #369')).toBe(true); +}); + +test('should return true for branch merges with newline characters and more characters after it', () => { + expect(isIgnored("Merge branch 'ctrom-YarnBuild'\n ")).toBe(true); + expect(isIgnored("Merge branch 'ctrom-YarnBuild'\r\n # some comment")).toBe( + true + ); +}); + +test('should return true for revert commits', () => { + expect( + isIgnored( + `Revert "docs: add recipe for linting of all commits in a PR (#36)"\n\nThis reverts commit 1e69d542c16c2a32acfd139e32efa07a45f19111.` + ) + ).toBe(true); + expect( + isIgnored( + `revert "docs: add recipe for linting of all commits in a PR (#36)"\n\nThis reverts commit 1e69d542c16c2a32acfd139e32efa07a45f19111.` + ) + ).toBe(true); +}); + +test('should ignore npm semver commits', () => { + VERSION_MESSAGES.forEach(message => expect(isIgnored(message)).toBe(true)); +}); + +test('should ignore npm semver commits with chore', () => { + VERSION_MESSAGES.forEach(message => + expect(isIgnored(`chore: ${message}`)).toBe(true) + ); + VERSION_MESSAGES.forEach(message => + expect(isIgnored(`chore(release): ${message}`)).toBe(true) + ); +}); + +test('should ignore npm semver commits with footers', () => { + AMENDED_VERSION_MESSAGES.forEach(message => + expect(isIgnored(message)).toBe(true) + ); +}); + +test('should return true fixup commits', () => { + expect(isIgnored('fixup! initial commit')).toBe(true); +}); + +test('should return true squash commits', () => { + expect(isIgnored('squash! initial commit')).toBe(true); +}); + +test('should return true for bitbucket merge commits', () => { + expect( + isIgnored('Merged in feature/facebook-friends-sync (pull request #8)') + ).toBe(true); + expect( + isIgnored('Merged develop into feature/component-form-select-card') + ).toBe(true); + expect(isIgnored('Automatic merge')).toBe(true); +}); + +test('should return true for automatic merge commits', () => { + expect(isIgnored('Auto-merged develop into master')).toBe(true); +}); + +test('should return false for commits containing, but not starting, with merge branch', () => { + expect(isIgnored('foo bar Merge branch xxx')).toBe(false); +}); + +test('should return false for ignored message if defaults is false', () => { + expect( + isIgnored('Auto-merged develop into master', { + defaults: false + }) + ).toBe(false); +}); + +test('should return false for ignored message if custom ignores and defaults is false', () => { + expect( + isIgnored('Auto-merged develop into master', { + defaults: false + }) + ).toBe(false); +}); + +test('should throw error if ignores is not an array', () => { + const ignoredString = 'this should be ignored'; + expect(() => { + isIgnored(ignoredString, { + ignores: 'throws error' + } as any); + }).toThrow(); +}); + +test('should return true for custom ignores as function', () => { + const ignoredString = 'this should be ignored'; + expect( + isIgnored(ignoredString, { + ignores: [c => c === ignoredString] + }) + ).toBe(true); +}); diff --git a/@commitlint/is-ignored/src/is-ignored.ts b/@commitlint/is-ignored/src/is-ignored.ts new file mode 100644 index 0000000000..4ede7337e9 --- /dev/null +++ b/@commitlint/is-ignored/src/is-ignored.ts @@ -0,0 +1,32 @@ +import * as Defaults from './defaults'; + +export interface IsIgnoredOptions { + ignores?: Defaults.Matcher[]; + defaults?: boolean; +} + +export default function isIgnored( + commit: string = '', + opts: IsIgnoredOptions = {} +): boolean { + const ignores = typeof opts.ignores === 'undefined' ? [] : opts.ignores; + + if (!Array.isArray(ignores)) { + throw new Error( + `ignores must be of type array, received ${ignores} of type ${typeof ignores}` + ); + } + + const invalids = ignores.filter(c => typeof c !== 'function'); + + if (invalids.length > 0) { + throw new Error( + `ignores must be array of type function, received items of type: ${invalids + .map(i => typeof i) + .join(', ')}` + ); + } + + const base = opts.defaults === false ? [] : Defaults.wildcards; + return [...base, ...ignores].some(w => w(commit)); +} diff --git a/@commitlint/is-ignored/tsconfig.json b/@commitlint/is-ignored/tsconfig.json new file mode 100644 index 0000000000..7ed644a5a1 --- /dev/null +++ b/@commitlint/is-ignored/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "lib": [ + "dom", + "es2015" + ], + "rootDir": "src", + "outDir": "lib", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true + }, + "include": [ + "./src" + ], + "exclude": [ + "./src/**/*.test.ts" + ] +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 2cd497e6de..e0a45dc5e4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1180,7 +1180,7 @@ version "20.0.1" resolved "https://registry.npmjs.org/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89" -"@types/jest@24.0.13": +"@types/jest@24.0.13", "@types/jest@^24.0.13": version "24.0.13" resolved "https://registry.npmjs.org/@types/jest/-/jest-24.0.13.tgz#10f50b64cb05fb02411fbba49e9042a3a11da3f9" dependencies: @@ -1209,6 +1209,11 @@ dependencies: resolve-from "*" +"@types/semver@^6.0.0": + version "6.0.0" + resolved "https://registry.npmjs.org/@types/semver/-/semver-6.0.0.tgz#86ba89f02a414e39c68d02b351872e4ed31bd773" + integrity sha512-OO0srjOGH99a4LUN2its3+r6CBYcplhJ466yLqs+zvAWgphCpS8hYZEZ797tRDP/QKcqTdb/YCN6ifASoAWkrQ== + "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" @@ -2552,6 +2557,7 @@ brace-expansion@^1.1.7: braces@2.3.1, braces@^1.8.2, braces@^2.3.0: version "2.3.1" resolved "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz#7086c913b4e5a08dbe37ac0ee6a2500c4ba691bb" + integrity sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ== dependencies: arr-flatten "^1.1.0" array-unique "^0.3.2" @@ -3564,6 +3570,7 @@ deep-equal@^1.0.0: deep-extend@0.5.1, deep-extend@^0.6.0, deep-extend@~0.4.0: version "0.5.1" resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f" + integrity sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w== deep-is@~0.1.3: version "0.1.3" @@ -4824,6 +4831,7 @@ hawk@3.1.3, hawk@~3.1.3: hoek@2.x.x, hoek@5.0.3: version "5.0.3" resolved "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz#b71d40d943d0a95da01956b547f83c4a5b4a34ac" + integrity sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw== home-or-tmp@^2.0.0: version "2.0.0" @@ -5904,7 +5912,7 @@ jest-worker@^24.6.0: merge-stream "^1.0.1" supports-color "^6.1.0" -jest@24.8.0: +jest@24.8.0, jest@^24.8.0: version "24.8.0" resolved "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz#d5dff1984d0d1002196e9b7f12f75af1b2809081" dependencies: @@ -5926,6 +5934,7 @@ js-tokens@^4.0.0: js-yaml@>=3.13.0, js-yaml@^3.10.0, js-yaml@^3.13.0, js-yaml@^3.8.2, js-yaml@^3.9.0: version "3.13.1" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -6470,6 +6479,7 @@ map-visit@^1.0.0: marked@0.3.9, marked@^0.3.6, marked@^0.5.1: version "0.3.9" resolved "https://registry.npmjs.org/marked/-/marked-0.3.9.tgz#54ce6a57e720c3ac6098374ec625fcbcc97ff290" + integrity sha512-nW5u0dxpXxHfkHzzrveY45gCbi+R4PaO4WRZYqZNl+vB0hVGeqlFn0aOg1c8AKL63TrNFn9Bm2UP4AdiZ9TPLw== matcher@^0.1.1: version "0.1.2" @@ -6764,6 +6774,7 @@ module-not-found-error@^1.0.0: moment@2.19.3, moment@^2.18.1: version "2.19.3" resolved "https://registry.npmjs.org/moment/-/moment-2.19.3.tgz#bdb99d270d6d7fda78cc0fbace855e27fe7da69f" + integrity sha1-vbmdJw1tf9p4zA+6zoVeJ/59pp8= move-concurrently@^1.0.1: version "1.0.1" @@ -7855,6 +7866,7 @@ quick-lru@^1.0.0: randomatic@3: version "3.1.1" resolved "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" + integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== dependencies: is-number "^4.0.0" kind-of "^6.0.0" @@ -8810,6 +8822,7 @@ sprintf-js@~1.0.2: sshpk@1.14.1: version "1.14.1" resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb" + integrity sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s= dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -8957,6 +8970,7 @@ stringify-object@^3.2.2: stringstream@0.0.6, stringstream@~0.0.4: version "0.0.6" resolved "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" + integrity sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA== strip-ansi@^0.3.0: version "0.3.0" @@ -9344,7 +9358,7 @@ trim-right@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" -ts-jest@24.0.2: +ts-jest@24.0.2, ts-jest@^24.0.2: version "24.0.2" resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-24.0.2.tgz#8dde6cece97c31c03e80e474c749753ffd27194d" dependencies: @@ -9394,7 +9408,7 @@ typescript@3.4.5: version "3.4.5" resolved "https://registry.npmjs.org/typescript/-/typescript-3.4.5.tgz#2d2618d10bb566572b8d7aad5180d84257d70a99" -typescript@3.5.1: +typescript@3.5.1, typescript@^3.5.1: version "3.5.1" resolved "https://registry.npmjs.org/typescript/-/typescript-3.5.1.tgz#ba72a6a600b2158139c5dd8850f700e231464202"