diff --git a/packages/babel-jest/src/index.ts b/packages/babel-jest/src/index.ts index 1c14a77e024e..fb0102ab796b 100644 --- a/packages/babel-jest/src/index.ts +++ b/packages/babel-jest/src/index.ts @@ -148,6 +148,7 @@ async function loadBabelOptionsAsync( } export const createTransformer: TransformerCreator< + SyncTransformer, TransformOptions > = userOptions => { const inputOptions = userOptions ?? {}; @@ -270,11 +271,6 @@ export const createTransformer: TransformerCreator< }; }; -const transformer: SyncTransformer = { - ...createTransformer(), - // Assigned here so only the exported transformer has `createTransformer`, - // instead of all created transformers by the function - createTransformer, -}; +const transformer: SyncTransformer = createTransformer(); export default transformer; diff --git a/packages/jest-transform/src/ScriptTransformer.ts b/packages/jest-transform/src/ScriptTransformer.ts index 7efdc3c7fd43..79a4628cf5a2 100644 --- a/packages/jest-transform/src/ScriptTransformer.ts +++ b/packages/jest-transform/src/ScriptTransformer.ts @@ -74,10 +74,10 @@ async function waitForPromiseWithCleanup( } // type predicate -function isTransformerFactory( - t: Transformer | TransformerFactory, -): t is TransformerFactory { - return typeof (t as TransformerFactory).createTransformer === 'function'; +function isTransformerFactory( + t: Transformer | TransformerFactory, +): t is TransformerFactory { + return typeof (t as TransformerFactory).createTransformer === 'function'; } class ScriptTransformer { @@ -267,7 +267,7 @@ class ScriptTransformer { await Promise.all( this._config.transform.map( async ([, transformPath, transformerConfig]) => { - let transformer: Transformer | TransformerFactory = + let transformer: Transformer | TransformerFactory = await requireOrImportModule(transformPath); if (!transformer) { diff --git a/packages/jest-transform/src/index.ts b/packages/jest-transform/src/index.ts index 90ac16070cee..e81fe036ba4f 100644 --- a/packages/jest-transform/src/index.ts +++ b/packages/jest-transform/src/index.ts @@ -18,6 +18,7 @@ export type { AsyncTransformer, ShouldInstrumentOptions, Options as TransformationOptions, + TransformerCreator, TransformOptions, TransformResult, TransformedSource, diff --git a/packages/jest-transform/src/types.ts b/packages/jest-transform/src/types.ts index b68775f58dd3..2d71986745ac 100644 --- a/packages/jest-transform/src/types.ts +++ b/packages/jest-transform/src/types.ts @@ -146,13 +146,16 @@ export type Transformer = | SyncTransformer | AsyncTransformer; -export type TransformerCreator = ( - options?: OptionType, -) => Transformer; +export type TransformerCreator< + X extends Transformer, + OptionType = unknown, +> = (options?: OptionType) => X; /** * Instead of having your custom transformer implement the Transformer interface * directly, you can choose to export a factory function to dynamically create * transformers. This is to allow having a transformer config in your jest config. */ -export type TransformerFactory = {createTransformer: TransformerCreator}; +export type TransformerFactory = { + createTransformer: TransformerCreator; +};