Skip to content

Commit

Permalink
feat(presets): add typing for presets entry point (#2337)
Browse files Browse the repository at this point in the history
  • Loading branch information
ahnpnl committed Feb 9, 2021
1 parent f8f5dda commit 1a3058f
Show file tree
Hide file tree
Showing 7 changed files with 52 additions and 18 deletions.
1 change: 1 addition & 0 deletions .eslintignore
Expand Up @@ -5,5 +5,6 @@ e2e/__workdir_synlink__/
e2e/__external-repos__/
coverage/
website/src/**/*.js
presets/index.d.ts
*.config.js
.eslintrc.js
5 changes: 2 additions & 3 deletions e2e/__tests__/module-kinds/helpers.ts
@@ -1,4 +1,3 @@
// @ts-expect-error testing purpose
import tsJestPresets from '../../../presets'
import { PackageSets } from '../../__helpers__/templates'
import { configureTestCase } from '../../__helpers__/test-case'
Expand Down Expand Up @@ -33,7 +32,7 @@ const runTestForOptions = (options: TestOptions, preset: AllPresetType = AllPres
let tsJestPresetToUse
switch (preset) {
case AllPreset.DEFAULT_ESM:
tsJestPresetToUse = tsJestPresets.defaultEsm
tsJestPresetToUse = tsJestPresets.defaultsESM
break
case AllPreset.JS_WITH_TS_ESM:
tsJestPresetToUse = tsJestPresets.jsWithTsESM
Expand All @@ -42,7 +41,7 @@ const runTestForOptions = (options: TestOptions, preset: AllPresetType = AllPres
tsJestPresetToUse = tsJestPresets.jsWithBabelESM
break
default:
tsJestPresetToUse = tsJestPresets.default
tsJestPresetToUse = tsJestPresets.defaults
}
const testCase = configureTestCase('module-kinds',
{
Expand Down
11 changes: 11 additions & 0 deletions presets/index.d.ts
@@ -0,0 +1,11 @@
import type { TsJestPresets } from '../dist/types'

declare const _default: {
defaults: TsJestPresets;
defaultsESM: TsJestPresets;
jsWithTs: TsJestPresets;
jsWithTsESM: TsJestPresets;
jsWithBabel: TsJestPresets;
jsWithBabelESM: TsJestPresets;
};
export = _default;
2 changes: 1 addition & 1 deletion src/cli/helpers/presets.ts
@@ -1,4 +1,4 @@
import type { TsJestPresets } from '../../presets/create-jest-preset'
import type { TsJestPresets } from '../../types'

/** @internal */
export const enum JestPresetNames {
Expand Down
6 changes: 1 addition & 5 deletions src/presets/create-jest-preset.ts
@@ -1,14 +1,10 @@
import type { Config } from '@jest/types'

import type { TsJestPresets } from '../types'
import { rootLogger } from '../utils/logger'

const logger = rootLogger.child({ namespace: 'jest-preset' })

export type TsJestPresets = Pick<
Config.InitialOptions,
'extensionsToTreatAsEsm' | 'moduleFileExtensions' | 'transform' | 'testMatch'
>

export function createJestPreset(allowJs = false, extraOptions: Config.InitialOptions = {}): TsJestPresets {
logger.debug({ allowJs }, 'creating jest presets', allowJs ? 'handling' : 'not handling', 'JavaScript files')

Expand Down
9 changes: 6 additions & 3 deletions src/types.ts
Expand Up @@ -34,6 +34,11 @@ export type BabelJestTransformer = {
*/
export type BabelConfig = _babel.TransformOptions

export type TsJestPresets = Pick<
Config.InitialOptions,
'extensionsToTreatAsEsm' | 'moduleFileExtensions' | 'transform' | 'testMatch'
>

export interface AstTransformer<T = Record<string, unknown>> {
path: string
options?: T
Expand Down Expand Up @@ -211,9 +216,7 @@ export interface TsCompilerInstance extends CompilerInstance {
configSet: ConfigSet
program: _ts.Program | undefined
}
/**
* @internal
*/

export interface AstTransformerDesc<T = Record<string, unknown>> {
name: string
version: number
Expand Down
36 changes: 30 additions & 6 deletions website/docs/getting-started/presets.md
Expand Up @@ -18,7 +18,8 @@ title: Presets

### Basic usage

In most cases, simply setting the `preset` key to the desired preset name in your Jest config should be enough to start using TypeScript with Jest (assuming you added `ts-jest` to your `devDependencies` of course):
In most cases, simply setting the `preset` key to the desired preset name in your Jest config should be enough to start
using TypeScript with Jest (assuming you added `ts-jest` to your `devDependencies` of course):

```js
// jest.config.js
Expand Down Expand Up @@ -53,11 +54,11 @@ In this case you'll need to use the JavaScript version of Jest config (comment/u
```js
// jest.config.js
const { defaults: tsjPreset } = require('ts-jest/presets')
// const { defaultsESM: tsjPreset } = require('ts-jest/presets');
// const { jsWithTs: tsjPreset } = require('ts-jest/presets');
// const { jsWithTsESM: tsjPreset } = require('ts-jest/presets');
// const { jsWithBabel: tsjPreset } = require('ts-jest/presets');
// const { jsWithBabelESM: tsjPreset } = require('ts-jest/presets');
// const { defaultsESM: tsjPreset } = require('ts-jest/presets')
// const { jsWithTs: tsjPreset } = require('ts-jest/presets')
// const { jsWithTsESM: tsjPreset } = require('ts-jest/presets')
// const { jsWithBabel: tsjPreset } = require('ts-jest/presets')
// const { jsWithBabelESM: tsjPreset } = require('ts-jest/presets')

module.exports = {
// [...]
Expand All @@ -67,3 +68,26 @@ module.exports = {
},
}
```

Or through TypeScript (if `ts-node` is installed):

```ts
// jest.config.ts
import type { InitialOptionsTsJest } from 'ts-jest/dist/types'
import { defaults as tsjPreset } from 'ts-jest/preset'
// import { defaultsESM as tsjPreset } from 'ts-jest/preset'
// import { jsWithTs as tsjPreset } from 'ts-jest/preset'
// import { jsWithTsESM as tsjPreset } from 'ts-jest/preset'
// import { jsWithBabel as tsjPreset } from 'ts-jest/preset'
// import { jsWithBabelESM as tsjPreset } from 'ts-jest/preset'

const config: InitialOptionsTsJest = {
// [...]
transform: {
...tsjPreset.transform,
// [...]
},
}

export default config
```

0 comments on commit 1a3058f

Please sign in to comment.