esbuild-isolated-dts
Version:
Generate declarations fast using isolated declarations
72 lines (62 loc) • 2.08 kB
text/typescript
import type { BuildOptions } from 'esbuild';
import type { CompilerOptions, TranspileOptions } from 'typescript';
import { resolveOutDir, resolveRootDir } from './util.js';
export interface Options {
outdir?: string;
logLevel?: 'debug' | 'silent';
dryRun?: boolean;
transpileOptions?: TranspileOptions;
exts?: string[];
}
export type OptionsI = Required<
Omit<Options, 'transpileOptions' | 'outdir' | 'outfile' | 'exts'>
> & {
transpileOptions: TranspileOptionsI;
outfile: string | undefined;
write: boolean;
};
export type TranspileOptionsI = Omit<TranspileOptions, 'compilerOptions'> & {
compilerOptions: CompilerOptionsI;
};
export type CompilerOptionsI = CompilerOptions &
Required<Pick<CompilerOptions, 'declarationMap' | 'outDir' | 'rootDir'>>;
export const defaultExts: string[] = ['ts', 'tsx'] as const;
export function initializeOptions(
opts: Options | undefined,
buildOpts: BuildOptions,
filePaths: string[],
): OptionsI {
const optsI = {
outfile: filePaths.length === 1 ? buildOpts.outfile : undefined,
logLevel: opts?.logLevel ?? 'silent',
dryRun: opts?.dryRun ?? false,
write: buildOpts.write ?? true,
transpileOptions: initializeTranspileOptions(opts, buildOpts, filePaths),
};
if (optsI.logLevel === 'debug') console.log('Initialized options:', optsI);
return optsI;
}
function initializeTranspileOptions(
opts: Options | undefined,
buildOpts: BuildOptions,
filePaths: string[],
): TranspileOptionsI {
const tOpts = opts?.transpileOptions || {};
tOpts.compilerOptions = tOpts.compilerOptions || {};
const outDir = resolveOutDir(
opts?.outdir || buildOpts.outdir,
filePaths.length === 1 ? buildOpts.outfile : undefined,
),
rootDir = resolveRootDir(filePaths, buildOpts.outbase),
declarationMap = tOpts.compilerOptions.declarationMap ?? true,
transpileOptionsI: TranspileOptionsI = {
...tOpts,
compilerOptions: {
...tOpts.compilerOptions,
outDir,
rootDir,
declarationMap,
},
};
return transpileOptionsI;
}