diff --git a/src/index.ts b/src/index.ts index 6b2b1b2e..8b9f77b6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,8 +7,9 @@ import { slash, MaybePromise, toObjectEntry, + defaultOutExtension, } from './utils' -import { getAllDepsHash, loadTsupConfig } from './load' +import { getAllDepsHash, loadPkg, loadTsupConfig } from './load' import glob from 'globby' import { loadTsConfig } from 'bundle-require' import { handleError, PrettyError } from './errors' @@ -77,13 +78,15 @@ const normalizeOptions = async ( ...optionsOverride, } + const formats = + typeof _options.format === 'string' + ? [_options.format as Format] + : _options.format || ['cjs'] + const options: Partial = { outDir: 'dist', ..._options, - format: - typeof _options.format === 'string' - ? [_options.format as Format] - : _options.format || ['cjs'], + format: formats, dts: typeof _options.dts === 'boolean' ? _options.dts @@ -107,6 +110,7 @@ const normalizeOptions = async ( } : undefined, } + setSilent(options.silent) @@ -173,7 +177,19 @@ const normalizeOptions = async ( options.target = 'node16' } - return options as NormalizedOptions + const normalizedOptions = options as NormalizedOptions + + const pkg = await loadPkg(process.cwd()) + const formatOutExtension = formats.map((format) => { + const exts = _options.outExtension?.({ format, options: normalizedOptions, pkgType: pkg.type }); + return { + ...defaultOutExtension({ format, pkgType: pkg.type }), + ...(exts || {}) + } + }); + normalizedOptions.formatOutExtension = formatOutExtension; + + return normalizedOptions } export async function build(_options: Options) { diff --git a/src/options.ts b/src/options.ts index 0921abda..221b5f2f 100644 --- a/src/options.ts +++ b/src/options.ts @@ -256,4 +256,6 @@ export type NormalizedOptions = Omit< tsconfigResolvePaths: Record tsconfigDecoratorMetadata?: boolean format: Format[] + // OutExtensionObject array for each format + formatOutExtension: OutExtensionObject[] } diff --git a/src/rollup.ts b/src/rollup.ts index a7dd0780..ee93d16d 100644 --- a/src/rollup.ts +++ b/src/rollup.ts @@ -154,9 +154,9 @@ const getRollupConfig = async ( ...(options.external || []), ], }, - outputConfig: options.format.map((format): OutputOptions => { - const outputExtension = - options.outExtension?.({ format, options, pkgType: pkg.type }).dts || + outputConfig: options.format.map((format, i): OutputOptions => { + const outputExtension = + options.formatOutExtension?.[i]?.dts || defaultOutExtension({ format, pkgType: pkg.type }).dts return { dir: options.outDir || 'dist',