Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add typings for ts-jest options via transform config #3805

Merged
merged 1 commit into from Sep 11, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion e2e/ast-transformers/hoist-jest/jest-isolated.config.js
@@ -1,4 +1,4 @@
/** @type {import('../../../dist').InitialOptionsTsJest} */
/** @type {import('../../../dist').JestConfigWithTsJest} */
module.exports = {
automock: true,
moduleNameMapper: {
Expand Down
@@ -1,4 +1,4 @@
/** @type {import('../../../dist').InitialOptionsTsJest} */
/** @type {import('../../../dist').JestConfigWithTsJest} */
module.exports = {
transform: {
'^.+.[tj]sx?$': [
Expand Down
4 changes: 2 additions & 2 deletions e2e/config-typing/jest.config.ts
@@ -1,6 +1,6 @@
import type { InitialOptionsTsJest } from 'ts-jest'
import type { JestConfigWithTsJest } from '../../dist'

const jestCfg: InitialOptionsTsJest = {
const jestCfg: JestConfigWithTsJest = {
transform: {
'^.+.tsx?$': [
'ts-jest',
Expand Down
2 changes: 1 addition & 1 deletion e2e/const-enum/jest-isolated.config.js
@@ -1,4 +1,4 @@
/** @type {import('../../dist').InitialOptionsTsJest} */
/** @type {import('../../dist').JestConfigWithTsJest} */
module.exports = {
transform: {
'^.+.tsx?$': [
Expand Down
2 changes: 1 addition & 1 deletion e2e/coverage-report/jest-isolated.config.js
@@ -1,4 +1,4 @@
/** @type {import('../../dist').InitialOptionsTsJest} */
/** @type {import('../../dist').JestConfigWithTsJest} */
module.exports = {
collectCoverageFrom: ['**/*.js', '**/*.ts', '!**/node_modules/**', '!**/coverage/**'],
transform: {
Expand Down
2 changes: 1 addition & 1 deletion e2e/diagnostics/jest-disabled.config.js
@@ -1,4 +1,4 @@
/** @type {import('../../dist').InitialOptionsTsJest} */
/** @type {import('../../dist').JestConfigWithTsJest} */
module.exports = {
transform: {
'^.+.tsx?$': [
Expand Down
2 changes: 1 addition & 1 deletion e2e/diagnostics/jest-exclude.config.js
@@ -1,4 +1,4 @@
/** @type {import('../../dist').InitialOptionsTsJest} */
/** @type {import('../../dist').JestConfigWithTsJest} */
module.exports = {
transform: {
'^.+.tsx?$': [
Expand Down
2 changes: 1 addition & 1 deletion e2e/diagnostics/jest-ignored-code.config.js
@@ -1,4 +1,4 @@
/** @type {import('../../dist').InitialOptionsTsJest} */
/** @type {import('../../dist').JestConfigWithTsJest} */
module.exports = {
transform: {
'^.+.tsx?$': [
Expand Down
2 changes: 1 addition & 1 deletion e2e/diagnostics/jest-isolated.config.js
@@ -1,4 +1,4 @@
/** @type {import('../../dist').InitialOptionsTsJest} */
/** @type {import('../../dist').JestConfigWithTsJest} */
module.exports = {
transform: {
'^.+.tsx?$': [
Expand Down
2 changes: 1 addition & 1 deletion e2e/diagnostics/jest-warn.config.js
@@ -1,4 +1,4 @@
/** @type {import('../../dist').InitialOptionsTsJest} */
/** @type {import('../../dist').JestConfigWithTsJest} */
module.exports = {
transform: {
'^.+.tsx?$': [
Expand Down
2 changes: 1 addition & 1 deletion e2e/enum/jest-isolated.config.js
@@ -1,4 +1,4 @@
/** @type {import('../../dist').InitialOptionsTsJest} */
/** @type {import('../../dist').JestConfigWithTsJest} */
module.exports = {
transform: {
'^.+.tsx?$': [
Expand Down
2 changes: 1 addition & 1 deletion e2e/native-esm-ts/jest-isolated.config.js
@@ -1,4 +1,4 @@
/** @type {import('../../dist').InitialOptionsTsJest} */
/** @type {import('../../dist').JestConfigWithTsJest} */
module.exports = {
extensionsToTreatAsEsm: ['.ts'],
resolver: '<rootDir>/mjs-resolver.ts',
Expand Down
2 changes: 1 addition & 1 deletion e2e/source-map/disabled/jest-isolated.config.js
@@ -1,4 +1,4 @@
/** @type {import('../../../dist').InitialOptionsTsJest} */
/** @type {import('../../../dist').JestConfigWithTsJest} */
module.exports = {
displayName: 'sourcemap-disabled-isolated',
roots: ['<rootDir>', '<rootDir>/../__tests__'],
Expand Down
2 changes: 1 addition & 1 deletion e2e/source-map/disabled/jest.config.js
@@ -1,4 +1,4 @@
/** @type {import('../../../dist').InitialOptionsTsJest} */
/** @type {import('../../../dist').JestConfigWithTsJest} */
module.exports = {
displayName: 'sourcemap-disabled',
roots: ['<rootDir>', '<rootDir>/../__tests__'],
Expand Down
2 changes: 1 addition & 1 deletion e2e/source-map/enabled/jest-isolated.config.js
@@ -1,4 +1,4 @@
/** @type {import('../../../dist').InitialOptionsTsJest} */
/** @type {import('../../../dist').JestConfigWithTsJest} */
module.exports = {
displayName: 'sourcemap-enabled-isolated',
roots: ['<rootDir>', '<rootDir>/../__tests__'],
Expand Down
2 changes: 1 addition & 1 deletion e2e/source-map/enabled/jest.config.js
@@ -1,4 +1,4 @@
/** @type {import('../../../dist').InitialOptionsTsJest} */
/** @type {import('../../../dist').JestConfigWithTsJest} */
module.exports = {
displayName: 'sourcemap-enabled',
roots: ['<rootDir>', '<rootDir>/../__tests__'],
Expand Down
2 changes: 1 addition & 1 deletion e2e/transform-js/babel-cjs-file/jest.config.js
@@ -1,4 +1,4 @@
/** @type {import('../../../dist').InitialOptionsTsJest} */
/** @type {import('../../../dist').JestConfigWithTsJest} */
module.exports = {
displayName: 'babel-cjs-file',
roots: ['<rootDir>', '<rootDir>/../__tests__/for-babel'],
Expand Down
2 changes: 1 addition & 1 deletion e2e/transform-js/babel-enabled/jest.config.js
@@ -1,4 +1,4 @@
/** @type {import('../../../dist').InitialOptionsTsJest} */
/** @type {import('../../../dist').JestConfigWithTsJest} */
module.exports = {
displayName: 'babel-enabled',
roots: ['<rootDir>', '<rootDir>/../__tests__/for-babel'],
Expand Down
2 changes: 1 addition & 1 deletion e2e/transform-js/babel-js-file/jest.config.js
@@ -1,4 +1,4 @@
/** @type {import('../../../dist').InitialOptionsTsJest} */
/** @type {import('../../../dist').JestConfigWithTsJest} */
module.exports = {
displayName: 'babel-js-file',
roots: ['<rootDir>', '<rootDir>/../__tests__/for-babel'],
Expand Down
2 changes: 1 addition & 1 deletion e2e/transform-js/no-type-check/jest.config.js
@@ -1,4 +1,4 @@
/** @type {import('../../../dist').InitialOptionsTsJest} */
/** @type {import('../../../dist').JestConfigWithTsJest} */
module.exports = {
displayName: 'no-type-check',
roots: ['<rootDir>', '<rootDir>/../__tests__/for-ts'],
Expand Down
2 changes: 1 addition & 1 deletion e2e/transform-js/type-check/jest.config.js
@@ -1,4 +1,4 @@
/** @type {import('../../../dist').InitialOptionsTsJest} */
/** @type {import('../../../dist').JestConfigWithTsJest} */
module.exports = {
displayName: 'type-check',
roots: ['<rootDir>', '<rootDir>/../__tests__/for-ts'],
Expand Down
2 changes: 1 addition & 1 deletion e2e/transform-tsx/jest-isolated.config.js
@@ -1,4 +1,4 @@
/** @type {import('../../dist').InitialOptionsTsJest} */
/** @type {import('../../dist').JestConfigWithTsJest} */
module.exports = {
testEnvironment: 'jsdom',
transform: {
Expand Down
2 changes: 1 addition & 1 deletion examples/js-with-babel/jest-esm-isolated.config.js
@@ -1,4 +1,4 @@
/** @type {import('ts-jest').InitialOptionsTsJest} */
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
preset: 'ts-jest/presets/js-with-babel-esm',
transform: {
Expand Down
2 changes: 1 addition & 1 deletion examples/js-with-babel/jest-esm.config.js
@@ -1,4 +1,4 @@
/** @type {import('ts-jest').InitialOptionsTsJest} */
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
preset: 'ts-jest/presets/js-with-babel-esm',
transform: {
Expand Down
2 changes: 1 addition & 1 deletion examples/js-with-babel/jest-isolated.config.js
@@ -1,4 +1,4 @@
/** @type {import('ts-jest').InitialOptionsTsJest} */
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
preset: 'ts-jest/presets/js-with-babel',
transform: {
Expand Down
2 changes: 1 addition & 1 deletion examples/js-with-babel/jest.config.js
@@ -1,4 +1,4 @@
/** @type {import('ts-jest').InitialOptionsTsJest} */
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
preset: 'ts-jest/presets/js-with-babel',
transform: {
Expand Down
2 changes: 1 addition & 1 deletion examples/js-with-ts/jest-esm-isolated.config.js
@@ -1,4 +1,4 @@
/** @type {import('ts-jest').InitialOptionsTsJest} */
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
preset: 'ts-jest/presets/js-with-ts-esm',
transform: {
Expand Down
2 changes: 1 addition & 1 deletion examples/js-with-ts/jest-esm.config.js
@@ -1,4 +1,4 @@
/** @type {import('ts-jest').InitialOptionsTsJest} */
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
preset: 'ts-jest/presets/js-with-ts-esm',
transform: {
Expand Down
2 changes: 1 addition & 1 deletion examples/js-with-ts/jest-isolated.config.js
@@ -1,4 +1,4 @@
/** @type {import('ts-jest').InitialOptionsTsJest} */
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
preset: 'ts-jest/presets/js-with-ts',
transform: {
Expand Down
2 changes: 1 addition & 1 deletion examples/js-with-ts/jest.config.js
@@ -1,4 +1,4 @@
/** @type {import('ts-jest').InitialOptionsTsJest} */
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
preset: 'ts-jest/presets/js-with-ts',
}
2 changes: 1 addition & 1 deletion examples/react-app/jest-esm-isolated.config.js
@@ -1,7 +1,7 @@
const baseEsmCfg = require('./jest-esm.config')
const baseCfg = require('./jest.config')

/** @type {import('ts-jest').InitialOptionsTsJest} */
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
...baseEsmCfg,
transform: {
Expand Down
2 changes: 1 addition & 1 deletion examples/react-app/jest-esm.config.js
@@ -1,6 +1,6 @@
const baseCfg = require('./jest.config')

/** @type {import('ts-jest').InitialOptionsTsJest} */
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
...baseCfg,
preset: 'ts-jest/presets/js-with-babel-esm',
Expand Down
2 changes: 1 addition & 1 deletion examples/react-app/jest-isolated.config.js
@@ -1,6 +1,6 @@
const baseCfg = require('./jest.config')

/** @type {import('ts-jest').InitialOptionsTsJest} */
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
...baseCfg,
transform: {
Expand Down
2 changes: 1 addition & 1 deletion examples/ts-only/jest-esm-isolated.config.js
@@ -1,4 +1,4 @@
/** @type {import('ts-jest').InitialOptionsTsJest} */
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
preset: 'ts-jest/presets/default-esm',
transform: {
Expand Down
2 changes: 1 addition & 1 deletion examples/ts-only/jest-esm.config.js
@@ -1,4 +1,4 @@
/** @type {import('ts-jest').InitialOptionsTsJest} */
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
preset: 'ts-jest/presets/default-esm',
transform: {
Expand Down
2 changes: 1 addition & 1 deletion examples/ts-only/jest-isolated.config.js
@@ -1,4 +1,4 @@
/** @type {import('ts-jest').InitialOptionsTsJest} */
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
preset: 'ts-jest',
transform: {
Expand Down
2 changes: 1 addition & 1 deletion examples/ts-only/jest.config.js
@@ -1,4 +1,4 @@
/** @type {import('ts-jest').InitialOptionsTsJest} */
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
preset: 'ts-jest',
}
2 changes: 1 addition & 1 deletion jest.config.js
@@ -1,4 +1,4 @@
/** @type {import('./dist').InitialOptionsTsJest} */
/** @type {import('./dist').JestConfigWithTsJest} */
module.exports = {
collectCoverageFrom: ['src/**/*.ts'],
modulePathIgnorePatterns: ['examples/.*', 'website/.*'],
Expand Down
9 changes: 8 additions & 1 deletion src/legacy/config/config-set.ts
Expand Up @@ -27,7 +27,6 @@ import type {
BabelJestTransformer,
ProjectConfigTsJest,
TsJestAstTransformer,
TsJestDiagnosticsCfg,
TsJestGlobalOptions,
TTypeScript,
} from '../../types'
Expand All @@ -40,6 +39,14 @@ import { normalizeSlashes } from '../../utils/normalize-slashes'
import { sha1 } from '../../utils/sha1'
import { TSError } from '../../utils/ts-error'

interface TsJestDiagnosticsCfg {
pretty: boolean
ignoreCodes: number[]
exclude: string[]
throws: boolean
warnOnly?: boolean
}

/**
* @internal
*/
Expand Down
66 changes: 26 additions & 40 deletions src/types.ts
Expand Up @@ -26,9 +26,15 @@ declare module '@jest/types' {
* @internal
*/
export type TBabelCore = typeof _babel
/**
* @internal
*/
export type TBabelJest = typeof babelJest
export type TTypeScript = typeof _ts
// Stimulate `esbuild` type to avoid import `esbuild` while building the assets which are shipped to npm
/**
* @internal
*/
export interface TEsBuild {
transformSync(
input: string,
Expand Down Expand Up @@ -62,6 +68,9 @@ export interface ConfigCustomTransformer {
afterDeclarations?: Array<string | AstTransformer>
}

/**
* @deprecated use `TsJestTransformerOptions` instead
*/
export interface TsJestGlobalOptions {
/**
* Compiler options. It can be:
Expand Down Expand Up @@ -156,67 +165,44 @@ export interface TsJestGlobalOptions {
useESM?: boolean
}

interface TsJestConfig$tsConfig$file {
kind: 'file'
value: string | undefined
}
interface TsJestConfig$tsConfig$inline {
kind: 'inline'
value: _ts.CompilerOptions
}
type TsJestConfig$tsConfig = TsJestConfig$tsConfig$file | TsJestConfig$tsConfig$inline | undefined
export interface TsJestDiagnosticsCfg {
pretty: boolean
ignoreCodes: number[]
exclude: string[]
throws: boolean
warnOnly?: boolean
}
interface TsJestConfig$babelConfig$file {
kind: 'file'
value: string | undefined
}
interface TsJestConfig$babelConfig$inline {
kind: 'inline'
value: BabelConfig
}
type TsJestConfig$babelConfig = TsJestConfig$babelConfig$file | TsJestConfig$babelConfig$inline | undefined
/**
* @internal
*/
export interface TsJestConfig {
tsconfig: TsJestConfig$tsConfig
isolatedModules: boolean
compiler: string
diagnostics: TsJestDiagnosticsCfg
babelConfig: TsJestConfig$babelConfig
transformers: ConfigCustomTransformer
// to deprecate / deprecated === === ===
stringifyContentPathRegex: string | undefined
}

/**
* For transformers which extends `ts-jest`
* @deprecated use `JestConfigWithTsJest` instead
*/
export interface ProjectConfigTsJest extends Config.ProjectConfig {
globals: GlobalConfigTsJest
}
/**
* @deprecated use `JestConfigWithTsJest` instead
*/
export interface TransformOptionsTsJest extends TransformOptions {
config: ProjectConfigTsJest
}

/**
* For typings in `jest.config.ts`
* @deprecated use `JestConfigWithTsJest` instead
*/
export interface GlobalConfigTsJest extends Config.ConfigGlobals {
'ts-jest': TsJestGlobalOptions
}
/**
* @deprecated use `JestConfigWithTsJest` instead
*/
export interface InitialOptionsTsJest extends Config.InitialOptions {
globals?: GlobalConfigTsJest
}
type TsJestTransformerOptions = TsJestGlobalOptions
export interface JestConfigWithTsJest extends Partial<Omit<Config.ProjectConfig, 'transform'>> {
transform: {
[regex: string]: 'ts-jest' | ['ts-jest', TsJestTransformerOptions] | string | [string, Record<string, unknown>]
}
}

export type StringMap = Map<string, string>

/**
* @internal
*/
export interface DepGraphInfo {
fileContent: string
resolvedModuleNames: string[]
Expand Down
6 changes: 3 additions & 3 deletions website/docs/getting-started/options.md
Expand Up @@ -47,7 +47,7 @@ module.exports = {
To utilize IDE suggestions, you can use `JSDoc` comments to provide suggested `ts-jest` configs for your Jest config:

```js
/** @type {import('ts-jest').InitialOptionsTsJest} */
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = config = {
// [...]
transform: {
Expand All @@ -67,9 +67,9 @@ Or through TypeScript (if `ts-node` is installed):

```ts
// jest.config.ts
import type { InitialOptionsTsJest } from 'ts-jest'
import type { JestConfigWithTsJest } from 'ts-jest'

const config: InitialOptionsTsJest = {
const config: JestConfigWithTsJest = {
transform: {
'<regex_match_files>': [
'ts-jest',
Expand Down