///
import * as TS from "typescript";
import fs from "fs";
import { MaybeArray, PartialExcept } from "helpertypes";
type ReadonlyFileSystem = Pick;
type FileSystem = ReadonlyFileSystem & Pick;
declare const enum LogLevelKind {
NONE = 0,
INFO = 1,
VERBOSE = 2,
DEBUG = 3
}
interface Loggable {
/**
* The current log level
*/
readonly logLevel: LogLevelKind;
/**
* Logs info-related messages
*/
info(...messages: unknown[]): void;
/**
* Logs verbose-related messages
*/
verbose(...messages: unknown[]): void;
/**
* Logs debug-related messages
*/
debug(...messages: unknown[]): void;
/**
* Logs warning-related messages
*/
warn(...messages: unknown[]): void;
}
interface TaskOptions {
/**
* A logger that can print messages of varying severity depending on the log level
*/
logger: Loggable;
/**
* The FileSystem to use. Useful if you want to work with a virtual file system. Defaults to using the "fs" module
*/
fileSystem: ReadonlyFileSystem;
/**
* The base directory (defaults to process.cwd())
*/
cwd: string;
/**
* Determines how module specifiers are treated.
* - external (default): CommonJS module specifiers identifying libraries or built-in modules are preserved (default)
* - internal: CommonJS module specifiers identifying anything else than libraries or built-in modules are preserved
* - always: CommonJS module specifiers are never transformed.
* - never: CommonJS module specifiers are always transformed
* It can also take a function that is invoked with a module specifier and returns a boolean determining whether or not it should be preserved
*/
preserveModuleSpecifiers: "always" | "never" | "external" | "internal" | ((specifier: string) => boolean);
/**
* Determines whether or not to include import assertions when converting require() calls referencing JSON files to ESM.
* - true (default): Import assertions will always be added when relevant.
* - false: Import assertions will never be added.
* It can also take a function that is invoked with a module specifier and returns a boolean determining whether or not an import assertion should be added
*/
importAssertions: boolean | ((specifier: string) => boolean);
/**
* If given, a specific TypeScript version to use
*/
typescript: typeof TS;
/**
* If true, debug information will be printed. If a function is provided, it will be invoked for each file name. Returning true from the function
* determines that debug information will be printed related to that file
*/
debug: boolean | string | ((file: string) => boolean);
}
interface CjsToEsmOptions extends TaskOptions {
}
/**
* CustomTransformer that converts CommonJS to tree-shakeable ESM
*/
declare function cjsToEsm(options?: Partial): TS.CustomTransformers;
declare function cjsToEsmTransformer(options?: Partial): TS.TransformerFactory;
interface TransformHooks {
/**
* If a string is returned from this hoo, that text will be written to disk instead
*/
writeFile(file: string, text: string): string | void;
}
interface TransformTaskOptions extends TaskOptions {
/**
* The input glob(s) to match against the file system
*/
input: MaybeArray;
/**
* Optionally, the output directory to use. Defaults to inheriting that of the matched input files`
*/
outDir?: string;
/**
* If write is false, no files will be written to disk
*/
write: boolean;
/**
* The FileSystem to use. Useful if you want to work with a virtual file system. Defaults to using the "fs" module
*/
fileSystem: FileSystem;
/**
* A collection of hooks into the transformation process
* that can be used for logging or altering the internal behavior
*/
hooks: Partial;
}
interface TransformedFile {
fileName: string;
text: string;
}
interface TransformResult {
files: TransformedFile[];
}
declare function transform(options: PartialExcept): Promise;
export { cjsToEsm, CjsToEsmOptions, cjsToEsmTransformer, transform, TransformHooks, TransformTaskOptions, TransformedFile, TransformResult };
//# sourceMappingURL=index.d.cts.map