diff --git a/e2e/__tests__/custom-compiler.test.ts b/e2e/__tests__/custom-compiler.test.ts index 91f2be826f..725daaedf3 100644 --- a/e2e/__tests__/custom-compiler.test.ts +++ b/e2e/__tests__/custom-compiler.test.ts @@ -5,7 +5,19 @@ import { runNpmInstall } from '../utils' const DIR_NAME = 'custom-compiler' -describe('ttypescript', () => { +/** + * Test disabled after typescript@5 support due to issues on ttypescript. + * Now typescript exports module rather than object namespaces so ttypescript is not working anymore. + * @see https://github.com/kulshekhar/ts-jest/pull/4064#issuecomment-1483937671 + * + * Additional info can be found on the following links: + * @see https://github.com/cevek/ttypescript/issues/140 + * @see https://github.com/microsoft/TypeScript/issues/52826 + * + * Test can be re-enabled after the library supports typescript@5 + */ +// eslint-disable-next-line jest/no-disabled-tests +describe.skip('ttypescript', () => { const TTS_DIR_NAME = 'ttypescript' beforeAll(() => { diff --git a/package-lock.json b/package-lock.json index b9f0e56431..f0026ac9d9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,7 +35,6 @@ "@types/lodash.set": "4.x", "@types/micromatch": "4.x", "@types/node": "18.15.9", - "@types/node-fetch": "^3.0.3", "@types/react": "18.x", "@types/rimraf": "^3.0.2", "@types/semver": "latest", @@ -68,7 +67,7 @@ "lodash.set": "^4.3.2", "node-fetch": "^3.3.1", "prettier": "^2.8.7", - "typescript": "~4.9.5" + "typescript": "~5.0.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -78,7 +77,7 @@ "@jest/types": "^29.0.0", "babel-jest": "^29.0.0", "jest": "^29.0.0", - "typescript": ">=4.3" + "typescript": ">=4.3 <6" }, "peerDependenciesMeta": { "@babel/core": { @@ -866,6 +865,19 @@ "node": ">=v14" } }, + "node_modules/@commitlint/load/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/@commitlint/message": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.0.0.tgz", @@ -2198,16 +2210,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.9.tgz", "integrity": "sha512-dUxhiNzBLr6IqlZXz6e/rN2YQXlFgOei/Dxy+e3cyXTJ4txSUbGT2/fmnD6zd/75jDMeW5bDee+YXxlFKHoV0A==" }, - "node_modules/@types/node-fetch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-3.0.3.tgz", - "integrity": "sha512-HhggYPH5N+AQe/OmN6fmhKmRRt2XuNJow+R3pQwJxOOF9GuwM7O2mheyGeIrs5MOIeNjDEdgdoyHBOrFeJBR3g==", - "deprecated": "This is a stub types definition. node-fetch provides its own type definitions, so you do not need this installed.", - "dev": true, - "dependencies": { - "node-fetch": "*" - } - }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", @@ -8964,16 +8966,16 @@ } }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz", + "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=12.20" } }, "node_modules/uglify-js": { @@ -9905,6 +9907,14 @@ "lodash": "^4.17.19", "resolve-from": "^5.0.0", "typescript": "^4.6.4" + }, + "dependencies": { + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true + } } }, "@commitlint/message": { @@ -10874,15 +10884,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.9.tgz", "integrity": "sha512-dUxhiNzBLr6IqlZXz6e/rN2YQXlFgOei/Dxy+e3cyXTJ4txSUbGT2/fmnD6zd/75jDMeW5bDee+YXxlFKHoV0A==" }, - "@types/node-fetch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-3.0.3.tgz", - "integrity": "sha512-HhggYPH5N+AQe/OmN6fmhKmRRt2XuNJow+R3pQwJxOOF9GuwM7O2mheyGeIrs5MOIeNjDEdgdoyHBOrFeJBR3g==", - "dev": true, - "requires": { - "node-fetch": "*" - } - }, "@types/normalize-package-data": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", @@ -15887,9 +15888,9 @@ "dev": true }, "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz", + "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==", "dev": true }, "uglify-js": { diff --git a/package.json b/package.json index 9d868fef9c..60770c886c 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "@jest/types": "^29.0.0", "babel-jest": "^29.0.0", "jest": "^29.0.0", - "typescript": ">=4.3" + "typescript": ">=4.3 <6" }, "peerDependenciesMeta": { "@babel/core": { @@ -102,7 +102,6 @@ "@types/lodash.set": "4.x", "@types/micromatch": "4.x", "@types/node": "18.15.9", - "@types/node-fetch": "^3.0.3", "@types/react": "18.x", "@types/rimraf": "^3.0.2", "@types/semver": "latest", @@ -135,7 +134,7 @@ "lodash.set": "^4.3.2", "node-fetch": "^3.3.1", "prettier": "^2.8.7", - "typescript": "~4.9.5" + "typescript": "~5.0.2" }, "lint-staged": { "*.{ts,tsx,js,jsx}": [ diff --git a/src/legacy/compiler/ts-compiler.spec.ts b/src/legacy/compiler/ts-compiler.spec.ts index 68445a865b..5090c38f61 100644 --- a/src/legacy/compiler/ts-compiler.spec.ts +++ b/src/legacy/compiler/ts-compiler.spec.ts @@ -1,13 +1,8 @@ import { readFileSync } from 'fs' import { basename, join, normalize } from 'path' -import { - type CompilerOptions, - DiagnosticCategory, - type EmitOutput, - type transpileModule, - type TranspileOutput, -} from 'typescript' +import type { CompilerOptions, EmitOutput, transpileModule, TranspileOutput } from 'typescript' +import * as ts from 'typescript' import { createConfigSet, makeCompiler } from '../../__helpers__/fakers' import type { DepGraphInfo } from '../../types' @@ -16,6 +11,15 @@ import { Errors, interpolate } from '../../utils/messages' import { updateOutput } from './compiler-utils' import { TsCompiler } from './ts-compiler' +jest.mock('typescript', () => { + const actualModule = jest.requireActual('typescript') as typeof ts + + return { + __esModule: true, + ...actualModule, + } +}) + const mockFolder = join(process.cwd(), 'src', '__mocks__') const baseTsJestConfig = { tsconfig: join(process.cwd(), 'tsconfig.spec.json') } @@ -147,7 +151,7 @@ describe('TsCompiler', () => { outputText: 'var bar = 1', diagnostics: [ { - category: DiagnosticCategory.Error, + category: ts.DiagnosticCategory.Error, code: 123, messageText: 'An error occurs', file: undefined, @@ -550,7 +554,7 @@ describe('TsCompiler', () => { } as EmitOutput) const diagnostics = [ { - category: DiagnosticCategory.Error, + category: ts.DiagnosticCategory.Error, code: 123, messageText: 'An error occurs', file: undefined, @@ -558,7 +562,7 @@ describe('TsCompiler', () => { length: 1, }, { - category: DiagnosticCategory.Error, + category: ts.DiagnosticCategory.Error, code: 456, messageText: 'An error occurs', file: undefined, @@ -611,7 +615,7 @@ describe('TsCompiler', () => { }) const diagnostics = [ { - category: DiagnosticCategory.Error, + category: ts.DiagnosticCategory.Error, code: 123, messageText: 'An error occurs', file: undefined, @@ -619,7 +623,7 @@ describe('TsCompiler', () => { length: 1, }, { - category: DiagnosticCategory.Error, + category: ts.DiagnosticCategory.Error, code: 456, messageText: 'An error occurs', file: undefined, diff --git a/src/legacy/config/config-set.spec.ts b/src/legacy/config/config-set.spec.ts index f46e71ca13..48e0381d3d 100644 --- a/src/legacy/config/config-set.spec.ts +++ b/src/legacy/config/config-set.spec.ts @@ -2,7 +2,7 @@ import { join, resolve } from 'path' import type { Transformer } from '@jest/transform' import { LogLevels, testing } from 'bs-logger' -import ts from 'typescript' +import * as ts from 'typescript' import { createConfigSet } from '../../__helpers__/fakers' import { logTargetMock } from '../../__helpers__/mocks' @@ -19,6 +19,15 @@ jest.mock('../../utils/backports') jest.mock('../index') jest.mock('../../utils/get-package-version') +jest.mock('typescript', () => { + const actualModule = jest.requireActual('typescript') as typeof ts + + return { + __esModule: true, + ...actualModule, + } +}) + const backports = jest.mocked(_backports) backports.backportJestConfig.mockImplementation((_, config) => ({ diff --git a/src/transformers/hoist-jest.ts b/src/transformers/hoist-jest.ts index 55e4d83350..61f007295b 100644 --- a/src/transformers/hoist-jest.ts +++ b/src/transformers/hoist-jest.ts @@ -155,9 +155,11 @@ export function factory({ configSet }: TsCompilerInstance) { return visitor } + type TransformerFunction = _ts.Transformer<_ts.SourceFile> + // returns the transformer factory - return (ctx: _ts.TransformationContext): _ts.Transformer<_ts.SourceFile> => + return (ctx: _ts.TransformationContext): TransformerFunction => logger.wrap({ [LogContexts.logLevel]: LogLevels.debug, call: null }, 'visitSourceFileNode(): hoist jest', (sf) => ts.visitNode(sf, createVisitor(ctx, sf)), - ) + ) as TransformerFunction } diff --git a/src/utils/version-checkers.spec.ts b/src/utils/version-checkers.spec.ts index 0d13337c2c..9d8b2c6479 100644 --- a/src/utils/version-checkers.spec.ts +++ b/src/utils/version-checkers.spec.ts @@ -16,7 +16,7 @@ const pv = jest.mocked(_pv) describeChecker(VersionCheckers.jest, 'jest', ['29.0.0'], [undefined, '23.6.0', '24.1.0', '30.0.0']) describeChecker(VersionCheckers.babelJest, 'babel-jest', ['29.0.0'], [undefined, '23.6.0', '24.1.0', '30.0.0']) describeChecker(VersionCheckers.babelCore, '@babel/core', ['7.0.0'], [undefined, '6.0.0', '8.0.0']) -describeChecker(VersionCheckers.typescript, 'typescript', ['4.3.0', '4.3.5'], [undefined, '4.2.0', '5.0.0']) +describeChecker(VersionCheckers.typescript, 'typescript', ['4.3.0', '4.3.5', '5.0.0'], [undefined, '4.2.0', '6.0.0']) function describeChecker( checker: VersionChecker, diff --git a/src/utils/version-checkers.ts b/src/utils/version-checkers.ts index e9675c1de8..29c2c8db22 100644 --- a/src/utils/version-checkers.ts +++ b/src/utils/version-checkers.ts @@ -13,7 +13,7 @@ const logger = rootLogger.child({ namespace: 'versions' }) */ const enum ExpectedVersions { Jest = '>=29.0.0 <30', - TypeScript = '>=4.3 <5', + TypeScript = '>=4.3 <6', BabelJest = '>=29.0.0 <30', BabelCore = '>=7.0.0-beta.0 <8', } @@ -43,9 +43,7 @@ type CheckVersionAction = 'warn' | 'throw' * @internal */ function checkVersion(name: string, expectedRange: string, action?: Exclude): boolean -// eslint-disable-next-line no-redeclare function checkVersion(name: string, expectedRange: string, action: 'throw'): true | never -// eslint-disable-next-line no-redeclare function checkVersion( name: string, expectedRange: string, diff --git a/website/package-lock.json b/website/package-lock.json index 9ad456a396..02bf4e1888 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -26,7 +26,7 @@ "@docusaurus/module-type-aliases": "^2.4.0", "@tsconfig/docusaurus": "^1.0.7", "@types/react": "^16.14.24", - "typescript": "~4.9.5" + "typescript": "~5.0.2" } }, "node_modules/@akebifiky/remark-simple-plantuml": { @@ -12974,15 +12974,15 @@ } }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz", + "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=12.20" } }, "node_modules/ua-parser-js": { @@ -23922,9 +23922,9 @@ } }, "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz", + "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==" }, "ua-parser-js": { "version": "0.7.33", diff --git a/website/package.json b/website/package.json index 551ca513a6..8e240b3729 100644 --- a/website/package.json +++ b/website/package.json @@ -30,7 +30,7 @@ "@docusaurus/module-type-aliases": "^2.4.0", "@tsconfig/docusaurus": "^1.0.7", "@types/react": "^16.14.24", - "typescript": "~4.9.5" + "typescript": "~5.0.2" }, "browserslist": { "production": [