diff --git a/src/auto.ts b/src/auto.ts index 9d4eba72..38afdeda 100644 --- a/src/auto.ts +++ b/src/auto.ts @@ -30,8 +30,10 @@ export const autoPreset = definePreset(() => { if (res.cjs) { ctx.options.rollup.emitCJS = true; } - if (res.dts) { - ctx.options.declaration = res.dts; + if (ctx.options.declaration === undefined) { + // Enable auto detect based on "package.json" + // If "package.json" has "types" field, it will be "compatible", otherwise false. + ctx.options.declaration = res.dts ? "compatible" : false; } consola.info( "Automatically detected entries:", diff --git a/src/build.ts b/src/build.ts index 0cc61104..047ea2fa 100644 --- a/src/build.ts +++ b/src/build.ts @@ -93,7 +93,7 @@ async function _build( rootDir, entries: [], clean: true, - declaration: false, + declaration: undefined, outDir: "dist", stub: _stubMode, stubOptions: { diff --git a/src/builder/rollup.ts b/src/builder/rollup.ts index d49ee3dd..2735662b 100644 --- a/src/builder/rollup.ts +++ b/src/builder/rollup.ts @@ -142,17 +142,22 @@ export async function rollupBuild(ctx: BuildContext) { ); // DTS Stub - await writeFile( - output + ".d.ts", - [ + if (ctx.options.declaration) { + const dtsContent = [ `export * from ${JSON.stringify(resolvedEntryForTypeImport)};`, hasDefaultExport - ? `export { default } from ${JSON.stringify( - resolvedEntryForTypeImport, - )};` + ? `export { default } from ${JSON.stringify(resolvedEntryForTypeImport)};` : "", - ].join("\n"), - ); + ].join("\n"); + await writeFile(output + ".d.cts", dtsContent); + await writeFile(output + ".d.mts", dtsContent); + if ( + ctx.options.declaration === "compatible" || + ctx.options.declaration === true + ) { + await writeFile(output + ".d.ts", dtsContent); + } + } if (shebang) { await makeExecutable(output + ".cjs"); diff --git a/test/auto.test.ts b/test/auto.test.ts index 6e81232f..b0f86e15 100644 --- a/test/auto.test.ts +++ b/test/auto.test.ts @@ -19,7 +19,7 @@ describe("inferEntries", () => { const result = inferEntries({ module: "dist/index.mjs" }, [ "src/", "src/event/index.ts", - "src/index.ts", + "src/index.mts", ]); expect(result).to.deep.equal({ cjs: false, @@ -155,7 +155,7 @@ describe("inferEntries", () => { it("gracefully handles unknown entries", () => { expect( - inferEntries({ exports: "dist/test.js" }, ["src/", "src/index.ts"]), + inferEntries({ exports: "dist/test.js" }, ["src/", "src/index.mts"]), ).to.deep.equal({ cjs: false, entries: [], @@ -169,7 +169,7 @@ describe("inferEntries", () => { inferEntries({ exports: { "./*": "./*" } }, [ "src/", "src/", - "src/index.ts", + "src/index.mts", ]), ).to.deep.equal({ cjs: false, @@ -189,7 +189,7 @@ describe("inferEntries", () => { "./test": "./dist/test.cjs", }, }, - ["src/", "src/", "src/index.ts", "src/first-test.ts", "src/test.mjs"], + ["src/", "src/", "src/index.mts", "src/first-test.ts", "src/test.mjs"], ), ).to.deep.equal({ cjs: true, diff --git a/test/fixture/build.config.ts b/test/fixture/build.config.ts index dcfce1bf..f522fcc4 100644 --- a/test/fixture/build.config.ts +++ b/test/fixture/build.config.ts @@ -10,7 +10,7 @@ export default defineBuildConfig([ emitCJS: true, }, entries: [ - "./src/index.ts", + "./src/index.mts", "./src/nested/subpath.ts", { input: "src/runtime/", outDir: "dist/runtime" }, { @@ -28,7 +28,7 @@ export default defineBuildConfig([ entries: ["src/index"], outDir: "dist/min", sourcemap: true, - declaration: true, + declaration: "compatible", rollup: { esbuild: { minify: true, diff --git a/test/fixture/build.preset.ts b/test/fixture/build.preset.ts index 75224f99..60db3f07 100644 --- a/test/fixture/build.preset.ts +++ b/test/fixture/build.preset.ts @@ -1,7 +1,7 @@ import { definePreset } from "../../src"; export default definePreset({ - declaration: true, + declaration: "compatible", rollup: { cjsBridge: true, }, diff --git a/test/fixture/package.json b/test/fixture/package.json index 7ad519d0..7622e81f 100644 --- a/test/fixture/package.json +++ b/test/fixture/package.json @@ -1,6 +1,7 @@ { "name": "fixture", "private": "true", + "type": "module", "bin": { "fixture": "./bin/cli.mjs" }, diff --git a/test/fixture/src/index.ts b/test/fixture/src/index.mts similarity index 100% rename from test/fixture/src/index.ts rename to test/fixture/src/index.mts diff --git a/test/validate.test.ts b/test/validate.test.ts index 1795596b..360294b1 100644 --- a/test/validate.test.ts +++ b/test/validate.test.ts @@ -20,7 +20,7 @@ describe("validatePackage", () => { module: "dist/mod", exports: { "./runtime/*": "./runtime/*.mjs", - ".": { node: "./src/index.ts" }, + ".": { node: "./src/index.mts" }, }, }, join(fileURLToPath(import.meta.url), "../fixture"), @@ -30,7 +30,7 @@ describe("validatePackage", () => { const warnings = [...buildContext.warnings]; expect(warnings[0]).to.include("Potential missing"); - expect(warnings[0]).not.to.include("src/index.ts"); + expect(warnings[0]).not.to.include("src/index.mts"); for (const file of ["dist/test", "dist/cli", "dist/mod", "runtime"]) { expect(warnings[0]).to.include(file);