55 build as rolldownBuild ,
66 type BuildOptions ,
77 type OutputOptions ,
8+ type PreRenderedChunk ,
89 type RolldownPluginOption ,
910} from 'rolldown'
1011import { transformPlugin } from 'rolldown/experimental'
@@ -25,7 +26,7 @@ import {
2526 type UserConfig ,
2627} from './options'
2728import { debug , logger , setSilent } from './utils/logger'
28- import { readPackageJson } from './utils/package'
29+ import { getPackageType , readPackageJson } from './utils/package'
2930import type { PackageJson } from 'pkg-types'
3031import type { Options as DtsOptions } from 'rolldown-plugin-dts'
3132
@@ -170,10 +171,9 @@ async function getBuildOptions(
170171 shims,
171172 fixedExtension,
172173 tsconfig,
174+ outExtensions,
173175 } = config
174176
175- const extension = resolveOutputExtension ( pkg , format , fixedExtension )
176-
177177 const plugins : RolldownPluginOption = [ ]
178178 if ( pkg || config . skipNodeModulesBundle ) {
179179 plugins . push ( ExternalPlugin ( config , pkg ) )
@@ -223,15 +223,33 @@ async function getBuildOptions(
223223 [ format ] ,
224224 )
225225
226+ const packageType = getPackageType ( pkg )
227+ let jsExtension : string | undefined
228+ let dtsExtension : string | undefined
229+ if ( outExtensions ) {
230+ const { js, dts } = outExtensions ( {
231+ options : inputOptions ,
232+ format,
233+ pkgType : packageType ,
234+ } )
235+ jsExtension = js
236+ dtsExtension = dts
237+ }
238+ jsExtension ||= `.${ resolveOutputExtension ( packageType , format , fixedExtension ) } `
239+
226240 const outputOptions : OutputOptions = await mergeUserOptions (
227241 {
228242 format : cjsDts ? 'es' : format ,
229243 name : config . globalName ,
230244 sourcemap,
231245 dir : outDir ,
232246 minify,
233- entryFileNames : `[name].${ extension } ` ,
234- chunkFileNames : `[name]-[hash].${ extension } ` ,
247+ entryFileNames : createChunkFilename ( '[name]' , jsExtension , dtsExtension ) ,
248+ chunkFileNames : createChunkFilename (
249+ `[name]-[hash]` ,
250+ jsExtension ,
251+ dtsExtension ,
252+ ) ,
235253 } ,
236254 config . outputOptions ,
237255 [ format ] ,
@@ -243,6 +261,17 @@ async function getBuildOptions(
243261 }
244262}
245263
264+ function createChunkFilename (
265+ basename : string ,
266+ jsExtension : string ,
267+ dtsExtension ?: string ,
268+ ) : string | ( ( chunk : PreRenderedChunk ) => string ) {
269+ if ( ! dtsExtension ) return `${ basename } ${ jsExtension } `
270+ return ( chunk : PreRenderedChunk ) => {
271+ return `${ basename } ${ chunk . name . endsWith ( '.d' ) ? dtsExtension : jsExtension } `
272+ }
273+ }
274+
246275export { defineConfig } from './config'
247276export { logger }
248277export type { Options , UserConfig }
0 commit comments