/** * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import type {Config} from '@jest/types'; import type {EncodedSourceMap} from '@jridgewell/trace-mapping'; import type {TransformTypes} from '@jest/types'; export declare interface AsyncTransformer { /** * Indicates if the transformer is capable of instrumenting the code for code coverage. * * If V8 coverage is _not_ active, and this is `true`, Jest will assume the code is instrumented. * If V8 coverage is _not_ active, and this is `false`. Jest will instrument the code returned by this transformer using Babel. */ canInstrument?: boolean; getCacheKey?: ( sourceText: string, sourcePath: string, options: TransformOptions, ) => string; getCacheKeyAsync?: ( sourceText: string, sourcePath: string, options: TransformOptions, ) => Promise; process?: ( sourceText: string, sourcePath: string, options: TransformOptions, ) => TransformedSource; processAsync: ( sourceText: string, sourcePath: string, options: TransformOptions, ) => Promise; } export declare interface CallerTransformOptions { supportsDynamicImport: boolean; supportsExportNamespaceFrom: boolean; supportsStaticESM: boolean; supportsTopLevelAwait: boolean; } export declare function createScriptTransformer( config: Config.ProjectConfig, cacheFS?: StringMap, ): Promise; export declare function createTranspilingRequire( config: Config.ProjectConfig, ): Promise< ( resolverPath: string, applyInteropRequireDefault?: boolean, ) => Promise >; declare interface ErrorWithCodeFrame extends Error { codeFrame?: string; } declare interface FixedRawSourceMap extends Omit { version: number; } export declare function handlePotentialSyntaxError( e: ErrorWithCodeFrame, ): ErrorWithCodeFrame; declare interface ReducedTransformOptions extends CallerTransformOptions { instrument: boolean; } declare interface RequireAndTranspileModuleOptions extends ReducedTransformOptions { applyInteropRequireDefault: boolean; } export declare type ScriptTransformer = ScriptTransformer_2; declare class ScriptTransformer_2 { private readonly _config; private readonly _cacheFS; private readonly _cache; private readonly _transformCache; private _transformsAreLoaded; constructor(_config: Config.ProjectConfig, _cacheFS: StringMap); private _buildCacheKeyFromFileInfo; private _getCacheKey; private _getCacheKeyAsync; private _createFolderFromCacheKey; private _getFileCachePath; private _getFileCachePathAsync; private _getTransformPath; loadTransformers(): Promise; private _getTransformer; private _instrumentFile; private _buildTransformResult; transformSource( filepath: string, content: string, options: ReducedTransformOptions, ): TransformResult; transformSourceAsync( filepath: string, content: string, options: ReducedTransformOptions, ): Promise; private _transformAndBuildScriptAsync; private _transformAndBuildScript; transformAsync( filename: string, options: TransformationOptions, fileSource?: string, ): Promise; transform( filename: string, options: TransformationOptions, fileSource?: string, ): TransformResult; transformJson( filename: string, options: TransformationOptions, fileSource: string, ): string; requireAndTranspileModule( moduleName: string, callback?: (module: ModuleType) => void | Promise, options?: RequireAndTranspileModuleOptions, ): Promise; shouldTransform(filename: string): boolean; } export declare function shouldInstrument( filename: string, options: ShouldInstrumentOptions, config: Config.ProjectConfig, ): boolean; export declare interface ShouldInstrumentOptions extends Pick< Config.GlobalConfig, | 'collectCoverage' | 'collectCoverageFrom' | 'collectCoverageOnlyFrom' | 'coverageProvider' > { changedFiles?: Set; sourcesRelatedToTestsInChangedFiles?: Set; } declare type StringMap = Map; export declare interface SyncTransformer { /** * Indicates if the transformer is capable of instrumenting the code for code coverage. * * If V8 coverage is _not_ active, and this is `true`, Jest will assume the code is instrumented. * If V8 coverage is _not_ active, and this is `false`. Jest will instrument the code returned by this transformer using Babel. */ canInstrument?: boolean; getCacheKey?: ( sourceText: string, sourcePath: string, options: TransformOptions, ) => string; getCacheKeyAsync?: ( sourceText: string, sourcePath: string, options: TransformOptions, ) => Promise; process: ( sourceText: string, sourcePath: string, options: TransformOptions, ) => TransformedSource; processAsync?: ( sourceText: string, sourcePath: string, options: TransformOptions, ) => Promise; } export declare interface TransformationOptions extends ShouldInstrumentOptions, CallerTransformOptions { isInternalModule?: boolean; } export declare type TransformedSource = { code: string; map?: FixedRawSourceMap | string | null; }; /** * We have both sync (`process`) and async (`processAsync`) code transformation, which both can be provided. * `require` will always use `process`, and `import` will use `processAsync` if it exists, otherwise fall back to `process`. * Meaning, if you use `import` exclusively you do not need `process`, but in most cases supplying both makes sense: * Jest transpiles on demand rather than ahead of time, so the sync one needs to exist. * * For more info on the sync vs async model, see https://jestjs.io/docs/code-transformation#writing-custom-transformers */ declare type Transformer_2 = | SyncTransformer | AsyncTransformer; export {Transformer_2 as Transformer}; export declare type TransformerCreator< X extends Transformer_2, TransformerConfig = unknown, > = (transformerConfig?: TransformerConfig) => X; export declare interface TransformOptions extends ReducedTransformOptions { /** Cached file system which is used by `jest-runtime` to improve performance. */ cacheFS: StringMap; /** Jest configuration of currently running project. */ config: Config.ProjectConfig; /** Stringified version of the `config` - useful in cache busting. */ configString: string; /** Transformer configuration passed through `transform` option by the user. */ transformerConfig: TransformerConfig; } export declare type TransformResult = TransformTypes.TransformResult; export {};