Skip to content

Commit 9715479

Browse files
committed
feat: add outExtensions option
closes #114
1 parent 4dc308a commit 9715479

8 files changed

Lines changed: 155 additions & 77 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@
7474
"diff": "^7.0.0",
7575
"find-up-simple": "^1.0.1",
7676
"rolldown": "^1.0.0-beta.7",
77-
"rolldown-plugin-dts": "^0.7.8",
77+
"rolldown-plugin-dts": "^0.7.13",
7878
"tinyexec": "^1.0.1",
7979
"tinyglobby": "^0.2.12",
8080
"unconfig": "^7.3.1"

pnpm-lock.yaml

Lines changed: 61 additions & 61 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/features/output.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
1-
import { getPackageType } from '../utils/package'
21
import type { NormalizedFormat } from '../options'
3-
import type { PackageJson } from 'pkg-types'
2+
import type { PackageType } from '../utils/package'
43

54
export type OutputExtension = 'mjs' | 'cjs' | 'js'
65
export function resolveOutputExtension(
7-
pkg: PackageJson | undefined,
6+
packageType: PackageType,
87
format: NormalizedFormat,
98
fixedExtension?: boolean,
109
): OutputExtension {
11-
const moduleType = getPackageType(pkg)
1210
switch (format) {
1311
case 'es':
14-
return !fixedExtension && moduleType === 'module' ? 'js' : 'mjs'
12+
return !fixedExtension && packageType === 'module' ? 'js' : 'mjs'
1513
case 'cjs':
16-
return fixedExtension || moduleType === 'module' ? 'cjs' : 'js'
14+
return fixedExtension || packageType === 'module' ? 'cjs' : 'js'
1715
default:
1816
return 'js'
1917
}

src/index.ts

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
build as rolldownBuild,
66
type BuildOptions,
77
type OutputOptions,
8+
type PreRenderedChunk,
89
type RolldownPluginOption,
910
} from 'rolldown'
1011
import { transformPlugin } from 'rolldown/experimental'
@@ -25,7 +26,7 @@ import {
2526
type UserConfig,
2627
} from './options'
2728
import { debug, logger, setSilent } from './utils/logger'
28-
import { readPackageJson } from './utils/package'
29+
import { getPackageType, readPackageJson } from './utils/package'
2930
import type { PackageJson } from 'pkg-types'
3031
import 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+
246275
export { defineConfig } from './config'
247276
export { logger }
248277
export type { Options, UserConfig }

0 commit comments

Comments
 (0)