diff --git a/.gitignore b/.gitignore index 27e5196e457743..2be0b0173bbabe 100644 --- a/.gitignore +++ b/.gitignore @@ -64,6 +64,7 @@ coverage dist dist-storybook screenshots +.cache *.tar.gz diff --git a/change/@fluentui-make-styles-d676c107-849e-4666-9f1a-8543ea276f74.json b/change/@fluentui-make-styles-d676c107-849e-4666-9f1a-8543ea276f74.json new file mode 100644 index 00000000000000..463fd29c229445 --- /dev/null +++ b/change/@fluentui-make-styles-d676c107-849e-4666-9f1a-8543ea276f74.json @@ -0,0 +1,7 @@ +{ + "type": "none", + "comment": "chore(make-styles): propagate deps to root and remove path overrides so the package can be properly consumed by ts path aliases converged packages", + "packageName": "@fluentui/make-styles", + "email": "martinhochel@microsoft.com", + "dependentChangeType": "none" +} diff --git a/change/@fluentui-react-conformance-d1983716-7e77-4f5e-b372-01cced6fae24.json b/change/@fluentui-react-conformance-d1983716-7e77-4f5e-b372-01cced6fae24.json new file mode 100644 index 00000000000000..a75b683ac69780 --- /dev/null +++ b/change/@fluentui-react-conformance-d1983716-7e77-4f5e-b372-01cced6fae24.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "fix(react-conformance): remove esModuleInterop so the package is compliant with other packages", + "packageName": "@fluentui/react-conformance", + "email": "martinhochel@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/@fluentui-react-menu-ce828c95-56eb-4e5b-a86d-668aad9f140f.json b/change/@fluentui-react-menu-ce828c95-56eb-4e5b-a86d-668aad9f140f.json new file mode 100644 index 00000000000000..57ed50f2bd2d1a --- /dev/null +++ b/change/@fluentui-react-menu-ce828c95-56eb-4e5b-a86d-668aad9f140f.json @@ -0,0 +1,7 @@ +{ + "type": "none", + "comment": "chore(react-menu): implement in memory test exection", + "packageName": "@fluentui/react-menu", + "email": "martinhochel@microsoft.com", + "dependentChangeType": "none" +} diff --git a/change/@fluentui-utilities-4903da1e-6768-4ac6-8a5e-96f518dd859a.json b/change/@fluentui-utilities-4903da1e-6768-4ac6-8a5e-96f518dd859a.json new file mode 100644 index 00000000000000..7c239b35aaf2bf --- /dev/null +++ b/change/@fluentui-utilities-4903da1e-6768-4ac6-8a5e-96f518dd859a.json @@ -0,0 +1,7 @@ +{ + "type": "none", + "comment": "fix(utilities): make pkg compile in strict mode", + "packageName": "@fluentui/utilities", + "email": "martinhochel@microsoft.com", + "dependentChangeType": "none" +} diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000000000..589f278a7e7fb8 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,3 @@ +module.exports = { + projects: ['/packages/react-menu'], +}; diff --git a/jest.preset.js b/jest.preset.js new file mode 100644 index 00000000000000..0d6abf1ef4a0af --- /dev/null +++ b/jest.preset.js @@ -0,0 +1,28 @@ +// @ts-check + +const path = require('path'); +const { pathsToModuleNameMapper } = require('ts-jest/utils'); + +const tsConfig = require('./tsconfig.base.json'); + +const tsPathAliases = pathsToModuleNameMapper(tsConfig.compilerOptions.paths, { + prefix: `/${path.relative(process.cwd(), __dirname)}/`, +}); + +/** + * @type {jest.InitialOptions} + */ +const baseConfig = { + transform: { + '^.+\\.ts$': 'ts-jest', + }, + testMatch: ['**/+(*.)+(spec|test).+(ts|js)?(x)'], + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'], + testPathIgnorePatterns: ['/node_modules/', '/lib/', '/lib-commonjs/', '/dist/'], + moduleNameMapper: { ...tsPathAliases }, + cacheDirectory: '/.cache/jest', + clearMocks: true, + watchPlugins: ['jest-watch-typeahead/filename', 'jest-watch-typeahead/testname'], +}; + +module.exports = { ...baseConfig }; diff --git a/package.json b/package.json index 2af0f9a50a4c5c..8076e029038138 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,7 @@ "postcss-loader": "4.1.0", "postcss-modules": "2.0.0", "ts-loader": "8.0.14", - "ts-jest": "24.0.1", + "ts-jest": "24.3.0", "typescript": "3.7.2", "webpack-dev-server": "4.0.0-beta.0", "webpack-cli": "4.3.1", @@ -124,6 +124,10 @@ "packages/fluentui/*" ], "nohoist": [ + "@fluentui/make-styles/stylis", + "@fluentui/make-styles/@types/stylis", + "@fluentui/react-bindings/stylis", + "@fluentui/react-northstar-fela-renderer/stylis", "packages/web-components/webpack", "packages/web-components/@storybook/**", "packages/web-components/typescript", diff --git a/packages/make-styles/package.json b/packages/make-styles/package.json index 39736ec3b5d692..adcac27232a16b 100644 --- a/packages/make-styles/package.json +++ b/packages/make-styles/package.json @@ -28,7 +28,7 @@ "@fluentui/eslint-plugin": "^1.0.1", "@fluentui/scripts": "^1.0.0", "@fluentui/test-utilities": "^8.0.1", - "@types/stylis": "^4.0.0" + "@types/stylis": "4.0.0" }, "dependencies": { "@emotion/hash": "^0.8.0", diff --git a/packages/make-styles/tsconfig.json b/packages/make-styles/tsconfig.json index 0bb099a88a1c04..e77797c13bde49 100644 --- a/packages/make-styles/tsconfig.json +++ b/packages/make-styles/tsconfig.json @@ -1,6 +1,5 @@ { "compilerOptions": { - "baseUrl": ".", "outDir": "dist", "target": "es5", "module": "commonjs", @@ -15,9 +14,6 @@ "moduleResolution": "node", "preserveConstEnums": true, "lib": ["es5", "dom"], - "paths": { - "stylis": ["../../node_modules/@types/stylis"] - }, "typeRoots": ["../../node_modules/@types", "../../typings"], "types": ["custom-global", "jest", "inline-style-expand-shorthand"] }, diff --git a/packages/react-conformance/src/defaultErrorMessages.tsx b/packages/react-conformance/src/defaultErrorMessages.tsx index 8b7388037c375d..db6df8818b9a5b 100644 --- a/packages/react-conformance/src/defaultErrorMessages.tsx +++ b/packages/react-conformance/src/defaultErrorMessages.tsx @@ -2,7 +2,7 @@ import { IsConformantOptions } from './types'; import { ComponentDoc } from 'react-docgen-typescript'; import chalk from 'chalk'; -import os from 'os'; +import * as os from 'os'; import parseDocblock from './utils/parseDocblock'; import * as _ from 'lodash'; diff --git a/packages/react-conformance/src/isConformant.ts b/packages/react-conformance/src/isConformant.ts index 8a076e033c5ee3..71cb0663f0e23f 100644 --- a/packages/react-conformance/src/isConformant.ts +++ b/packages/react-conformance/src/isConformant.ts @@ -4,7 +4,7 @@ import { IsConformantOptions } from './types'; import { defaultTests } from './defaultTests'; import { defaultErrorMessages } from './defaultErrorMessages'; import { merge } from './utils/merge'; -import os from 'os'; +import * as os from 'os'; import chalk from 'chalk'; import { getComponentDoc } from './utils/getComponentDoc'; diff --git a/packages/react-conformance/tsconfig.json b/packages/react-conformance/tsconfig.json index 439c3c25ddc166..a71ee73bcc3961 100644 --- a/packages/react-conformance/tsconfig.json +++ b/packages/react-conformance/tsconfig.json @@ -14,7 +14,6 @@ "strict": true, "moduleResolution": "node", "preserveConstEnums": true, - "esModuleInterop": true, "lib": ["es2017", "dom"], "types": ["jest", "node"] }, diff --git a/packages/react-menu/jest.config.js b/packages/react-menu/jest.config.js index 2160afa436a444..a15ecbf00c5d34 100644 --- a/packages/react-menu/jest.config.js +++ b/packages/react-menu/jest.config.js @@ -1,9 +1,20 @@ -const { createConfig, resolveMergeStylesSerializer } = require('@fluentui/scripts/jest/jest-resources'); -const path = require('path'); +// @ts-check -const config = createConfig({ - setupFiles: [path.resolve(path.join(__dirname, 'config', 'tests.js'))], - snapshotSerializers: [resolveMergeStylesSerializer()], -}); - -module.exports = config; +/** + * @type {jest.InitialOptions} + */ +module.exports = { + displayName: 'react-menu', + preset: '../../jest.preset.js', + globals: { + 'ts-jest': { + tsConfig: '/tsconfig.json', + diagnostics: false, + }, + }, + transform: { + '^.+\\.tsx?$': 'ts-jest', + }, + coverageDirectory: './coverage', + setupFilesAfterEnv: ['./config/tests.js'], +}; diff --git a/packages/react-menu/package.json b/packages/react-menu/package.json index e2562d9874d91b..73a2851db9f3ce 100644 --- a/packages/react-menu/package.json +++ b/packages/react-menu/package.json @@ -21,9 +21,9 @@ "just": "just-scripts", "lint": "just-scripts lint", "start": "just-scripts dev:storybook", - "start-test": "just-scripts jest-watch", - "test": "just-scripts test", - "update-snapshots": "just-scripts jest -u" + "start-test": "echo \"This is DEPRECATED instead use 'test --watch'\" && just-scripts jest-watch", + "test": "jest", + "update-snapshots": "echo \"This is DEPRECATED instead use 'test -u'\" && just-scripts jest -u" }, "devDependencies": { "@fluentui/eslint-plugin": "^1.0.1", diff --git a/packages/react-menu/tsconfig.json b/packages/react-menu/tsconfig.json index cb2dfadd5f8eb0..7cff45319430a7 100644 --- a/packages/react-menu/tsconfig.json +++ b/packages/react-menu/tsconfig.json @@ -10,7 +10,7 @@ "importHelpers": true, "noUnusedLocals": true, "preserveConstEnums": true, - "types": ["jest", "custom-global"] + "types": ["jest", "custom-global", "inline-style-expand-shorthand"] }, "include": ["src"] } diff --git a/packages/utilities/etc/utilities.api.md b/packages/utilities/etc/utilities.api.md index 3dbc39b9b10e9a..efb4bfa3f44341 100644 --- a/packages/utilities/etc/utilities.api.md +++ b/packages/utilities/etc/utilities.api.md @@ -53,7 +53,7 @@ export function asAsync(options: IAsAsyncOptions): React.Forward export function assertNever(x: never): never; // @public -export function assign(target: any, ...args: any[]): any; +export function assign(this: any, target: any, ...args: any[]): any; // @public export class Async { diff --git a/packages/utilities/src/AutoScroll.ts b/packages/utilities/src/AutoScroll.ts index a4d3651bb9d762..4ee984fd2ffce8 100644 --- a/packages/utilities/src/AutoScroll.ts +++ b/packages/utilities/src/AutoScroll.ts @@ -22,9 +22,9 @@ export class AutoScroll { private _events: EventGroup; private _scrollableParent: HTMLElement | null; private _scrollRect: IRectangle | undefined; - private _scrollVelocity: number; - private _isVerticalScroll: boolean; - private _timeoutId: number; + private _scrollVelocity!: number; + private _isVerticalScroll!: boolean; + private _timeoutId!: number; constructor(element: HTMLElement) { this._events = new EventGroup(this); diff --git a/packages/utilities/src/BaseComponent.test.tsx b/packages/utilities/src/BaseComponent.test.tsx index 74bb4668725158..3849bdbabc2cdd 100644 --- a/packages/utilities/src/BaseComponent.test.tsx +++ b/packages/utilities/src/BaseComponent.test.tsx @@ -7,7 +7,7 @@ describe('BaseComponent', () => { it('can resolve refs', () => { // eslint-disable-next-line deprecation/deprecation class Foo extends BaseComponent<{}, {}> { - public root: HTMLElement; + public root!: HTMLElement; public render(): JSX.Element { // eslint-disable-next-line deprecation/deprecation diff --git a/packages/utilities/src/BaseComponent.ts b/packages/utilities/src/BaseComponent.ts index 6ebb7c25f9bd0a..fd9acf3f5d9efe 100644 --- a/packages/utilities/src/BaseComponent.ts +++ b/packages/utilities/src/BaseComponent.ts @@ -29,13 +29,13 @@ export class BaseComponent extends * implementing a passthrough (higher-order component), you would set this to false and pass through * the props to the inner component, allowing it to resolve the componentRef. */ - protected _skipComponentRefResolution: boolean; + protected _skipComponentRefResolution!: boolean; - private __async: Async; - private __events: EventGroup; - private __disposables: IDisposable[] | null; - private __resolves: { [name: string]: (ref: React.ReactNode) => React.ReactNode }; - private __className: string; + private __async!: Async; + private __events!: EventGroup; + private __disposables!: IDisposable[] | null; + private __resolves!: { [name: string]: (ref: React.ReactNode) => React.ReactNode }; + private __className!: string; /** * BaseComponent constructor diff --git a/packages/utilities/src/EventGroup.ts b/packages/utilities/src/EventGroup.ts index bdf307e0daa5a0..3a4ccacc9496a1 100644 --- a/packages/utilities/src/EventGroup.ts +++ b/packages/utilities/src/EventGroup.ts @@ -53,7 +53,7 @@ export class EventGroup { private _parent: any; private _eventRecords: IEventRecord[]; private _id: number = EventGroup._uniqueId++; - private _isDisposed: boolean; + private _isDisposed!: boolean; /** For IE8, bubbleEvent is ignored here and must be dealt with by the handler. * Events raised here by default have bubbling set to false and cancelable set to true. @@ -80,6 +80,8 @@ export class EventGroup { target.fireEvent('on' + eventName, evObj); } } else { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore -- FIXME: strictBindCallApply error - https://github.com/microsoft/fluentui/issues/17331 while (target && retVal !== false) { let events = target.__events__; let eventRecords = events ? events[eventName] : null; @@ -89,6 +91,8 @@ export class EventGroup { if (eventRecords.hasOwnProperty(id)) { let eventRecordList = eventRecords[id]; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore -- FIXME: strictBindCallApply error - https://github.com/microsoft/fluentui/issues/17331 for (let listIndex = 0; retVal !== false && listIndex < eventRecordList.length; listIndex++) { let record = eventRecordList[listIndex]; @@ -206,6 +210,8 @@ export class EventGroup { let result; try { result = callback.apply(parent, args); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore -- FIXME: strictBindCallApply error - https://github.com/microsoft/fluentui/issues/17331 if (result === false && args[0]) { let e = args[0]; diff --git a/packages/utilities/src/appendFunction.test.ts b/packages/utilities/src/appendFunction.test.ts index 13a9d924220af5..7835315a6996ab 100644 --- a/packages/utilities/src/appendFunction.test.ts +++ b/packages/utilities/src/appendFunction.test.ts @@ -22,7 +22,7 @@ describe('appendFunction', () => { }); it('preserves the parent', () => { - function add(): void { + function add(this: { counter: number }): void { this.counter++; } diff --git a/packages/utilities/src/initializeComponentRef.ts b/packages/utilities/src/initializeComponentRef.ts index d7b1d56a8f924e..a010fc543cd677 100644 --- a/packages/utilities/src/initializeComponentRef.ts +++ b/packages/utilities/src/initializeComponentRef.ts @@ -16,11 +16,13 @@ export function initializeComponentRef(obj: R }); } -function _onMount(): void { +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function _onMount(this: any): void { _setComponentRef(this.props.componentRef, this); } -function _onUpdate(prevProps: IBaseProps): void { +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function _onUpdate(this: any, prevProps: IBaseProps): void { if (prevProps.componentRef !== this.props.componentRef) { // eslint-disable-next-line @typescript-eslint/no-explicit-any _setComponentRef((prevProps as any).componentRef, null); @@ -28,7 +30,8 @@ function _onUpdate(prevProps: IBaseProps): void { } } -function _onUnmount(): void { +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function _onUnmount(this: any): void { _setComponentRef(this.props.componentRef, null); } diff --git a/packages/utilities/src/object.ts b/packages/utilities/src/object.ts index ce085bbeae08be..d641d3b79a4f80 100644 --- a/packages/utilities/src/object.ts +++ b/packages/utilities/src/object.ts @@ -33,7 +33,7 @@ export function shallowCompare(a: TA, b: TB): bo * @returns Resulting merged target. */ // eslint-disable-next-line @typescript-eslint/no-explicit-any -export function assign(target: any, ...args: any[]): any { +export function assign(this: any, target: any, ...args: any[]): any { return filteredAssign.apply(this, [null, target].concat(args)); } diff --git a/packages/utilities/src/selection/Selection.ts b/packages/utilities/src/selection/Selection.ts index 832e4a90ae29cc..30ef1314c4a626 100644 --- a/packages/utilities/src/selection/Selection.ts +++ b/packages/utilities/src/selection/Selection.ts @@ -25,24 +25,24 @@ export type ISelectionOptionsWithRequiredGetKey = ISelectionOptions implements ISelection { /** Number of items selected. Do not modify. */ - public count: number; - public readonly mode: SelectionMode; + public count!: number; + public readonly mode!: SelectionMode; - private _getKey: (item: TItem, index?: number) => string | number; - private _canSelectItem: (item: TItem, index?: number) => boolean; + private _getKey!: (item: TItem, index?: number) => string | number; + private _canSelectItem!: (item: TItem, index?: number) => boolean; private _changeEventSuppressionCount: number; - private _items: TItem[]; - private _selectedItems: TItem[] | null; + private _items!: TItem[]; + private _selectedItems!: TItem[] | null; private _selectedIndices: number[] | undefined; - private _isAllSelected: boolean; - private _exemptedIndices: { [index: string]: boolean }; + private _isAllSelected!: boolean; + private _exemptedIndices!: { [index: string]: boolean }; private _exemptedCount: number; - private _keyToIndexMap: { [key: string]: number }; + private _keyToIndexMap!: { [key: string]: number }; private _anchoredIndex: number; private _onSelectionChanged: (() => void) | undefined; - private _hasChanged: boolean; - private _unselectableIndices: { [index: string]: boolean }; + private _hasChanged!: boolean; + private _unselectableIndices!: { [index: string]: boolean }; private _unselectableCount: number; private _isModal: boolean; diff --git a/packages/utilities/tsconfig.json b/packages/utilities/tsconfig.json index d39522a783a614..1545b7589c5b1f 100644 --- a/packages/utilities/tsconfig.json +++ b/packages/utilities/tsconfig.json @@ -7,11 +7,11 @@ "jsx": "react", "declaration": true, "sourceMap": true, + "strict": true, + "strictFunctionTypes": false, "experimentalDecorators": true, "importHelpers": true, - "noImplicitAny": true, "noUnusedLocals": true, - "strictNullChecks": true, "forceConsistentCasingInFileNames": true, "moduleResolution": "node", "preserveConstEnums": true, diff --git a/tsconfig.base.json b/tsconfig.base.json index 11a526c35b9661..14ac7a4a67feaf 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -12,13 +12,17 @@ "typeRoots": ["node_modules/@types", "./typings"], "baseUrl": ".", "paths": { - "@fluentui/set-version": ["packages/set-version/src/index.ts"], "@fluentui/react-conformance": ["packages/react-conformance/src/index.ts"], + "@fluentui/react-context-selector": ["packages/react-context-selector/src/index.ts"], "@fluentui/react-utilities": ["packages/react-utilities/src/index.ts"], "@fluentui/react-make-styles": ["packages/react-make-styles/src/index.ts"], + "@fluentui/make-styles": ["packages/make-styles/src/index.ts"], + "@fluentui/react-provider": ["packages/react-provider/src/index.ts"], + "@fluentui/react-theme": ["packages/react-theme/src/index.ts"], + "@fluentui/react-theme-provider": ["packages/react-theme-provider/src/index.ts"], "@fluentui/keyboard-key": ["packages/keyboard-key/src/index.ts"], - "@fluentui/react-menu": ["packages/react-menu/src/index.ts"], - "@fluentui/react-focus-management": ["packages/react-focus-management/src/index.ts"] + "@fluentui/react-focus-management": ["packages/react-focus-management/src/index.ts"], + "@fluentui/react-menu": ["packages/react-menu/src/index.ts"] } }, "exclude": ["node_modules"] diff --git a/yarn.lock b/yarn.lock index 2e7d5d6b116dfd..63a255262f3147 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5333,7 +5333,7 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== -"@types/stylis@^4.0.0": +"@types/stylis@4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/stylis/-/stylis-4.0.0.tgz#ad0f07d60dd7291676d968498fa21d6b9bb1afe8" integrity sha512-DB1wPXVDfTTyLO9tr4wTeAptinTGd+EemFDDJTdCfsLedYXuF1mRWpJtU74Rucqx7N7HecBmMwEERbPpLt1tGA== @@ -17770,7 +17770,7 @@ lodash.keys@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-4.2.0.tgz#a08602ac12e4fb83f91fc1fb7a360a4d9ba35205" integrity sha1-oIYCrBLk+4P5H8H7ejYKTZujUgU= -lodash.memoize@^4.1.2: +lodash.memoize@4.x, lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= @@ -25189,9 +25189,9 @@ stylis@^3.5.4: integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q== stylis@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.6.tgz#0d8b97b6bc4748bea46f68602b6df27641b3c548" - integrity sha512-1igcUEmYFBEO14uQHAJhCUelTR5jPztfdVKrYxRnDa5D5Dn3w0NxXupJNPr/VV/yRfZYEAco8sTIRZzH3sRYKg== + version "4.0.7" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.7.tgz#412a90c28079417f3d27c028035095e4232d2904" + integrity sha512-OFFeUXFgwnGOKvEXaSv0D0KQ5ADP0n6g3SVONx6I/85JzNZ3u50FRwB3lVIk1QO2HNdI75tbVzc4Z66Gdp9voA== supports-color@6.0.0: version "6.0.0" @@ -26037,15 +26037,16 @@ ts-essentials@^2.0.3: resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-2.0.12.tgz#c9303f3d74f75fa7528c3d49b80e089ab09d8745" integrity sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w== -ts-jest@24.0.1: - version "24.0.1" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.0.1.tgz#77258061cc354c3fa8616b8ac03baa0f8580f854" - integrity sha512-mgNZmYPuGBNgYpUzchI7vdSr6zATQI0TrSyzREnXHuPCvlW8T1DQ/fdscgx4ivS5vAMUGUaoxGdWIVHC5I8imw== +ts-jest@24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.3.0.tgz#b97814e3eab359ea840a1ac112deae68aa440869" + integrity sha512-Hb94C/+QRIgjVZlJyiWwouYUF+siNJHJHknyspaOcZ+OQAIdFG/UrdQVXw/0B8Z3No34xkUXZJpOTy9alOWdVQ== dependencies: bs-logger "0.x" buffer-from "1.x" fast-json-stable-stringify "2.x" json5 "2.x" + lodash.memoize "4.x" make-error "1.x" mkdirp "0.x" resolve "1.x"