11// @ts -check
22
3- import { readdir , readFile , writeFile , unlink } from "node:fs/promises" ;
43import { resolve , join } from "node:path" ;
54import { cwd , env } from "node:process" ;
65
7- import { PromisePool } from "@supercharge/promise-pool" ;
86import { initConfigBuilder , ViteEnv , PluginBuilder } from "vite-config-builder" ;
97import { mergeConfig } from "vite" ;
108
11- import { ModuleKind , ModuleResolutionKind } from "typescript" ;
129import { externalizeDeps } from "vite-plugin-externalize-deps" ;
1310import tsconfigPaths from "vite-tsconfig-paths" ;
14- import { dts } from "vite-plugin-dts-build" ;
11+ import { dtsForEsm , dtsForCjs } from "vite-plugin-dts-build" ;
1512
1613// == Main Configs ============================================================
1714export function NodeConfig ( viteConfigEnv , extendConfigs = { } ) {
@@ -33,48 +30,24 @@ function NodeBuilder(viteConfigEnv) {
3330 const packageRoot = cwd ( ) ;
3431 const entryRoot = resolve ( packageRoot , "src" ) ;
3532 const entryFile = resolve ( entryRoot , "index.ts" ) ;
36- const cacheEsmDir = resolve ( packageRoot , ".cache" , "typescript" , "esm" ) ;
37- const cacheCjsDir = resolve ( packageRoot , ".cache" , "typescript" , "cjs" ) ;
38- const outEsmDir = resolve ( packageRoot , "dist" , "esm" ) ;
39- const outCjsDir = resolve ( packageRoot , "dist" , "cjs" ) ;
4033
4134 const runtimeEnv = getRuntimeEnv ( ) ;
4235 if ( ViteEnv . isProd ( ) ) {
4336 if ( runtimeEnv === "LOCAL" || runtimeEnv === "PUBLISH" ) {
4437 plugins . add (
4538 // This is currently a proprietary implementation. You might also like to see
4639 // https://github.com/qmhc/vite-plugin-dts/issues/267
47- dts ( {
40+ dtsForEsm ( {
4841 include : [ "src" ] ,
49- cacheDir : cacheEsmDir ,
50- outDir : outEsmDir ,
5142 tsconfigPath : resolve ( packageRoot , "tsconfig.lib.json" )
5243 } )
5344 ) ;
5445 }
5546 if ( runtimeEnv === "PUBLISH" ) {
5647 plugins . add (
57- dts ( {
48+ dtsForCjs ( {
5849 include : [ "src" ] ,
59- cacheDir : cacheCjsDir ,
60- outDir : outCjsDir ,
6150 tsconfigPath : resolve ( packageRoot , "tsconfig.lib.json" ) ,
62- compilerOptions : {
63- module : ModuleKind . CommonJS ,
64- moduleResolution : ModuleResolutionKind . Node10 ,
65- outDir : outCjsDir ,
66- declarationDir : outCjsDir ,
67- tsBuildInfoFile : resolve (
68- packageRoot ,
69- ".cache" ,
70- "typescript" ,
71- "tsbuildinfo-cjs"
72- )
73- } ,
74- afterBuild : async ( ) => {
75- // Rename the CommonJS declaration file to .d.cts
76- await renameDeclarationFiles ( outCjsDir ) ;
77- }
7851 } )
7952 ) ;
8053 }
@@ -171,69 +144,6 @@ function initCommonBuilder(viteConfigEnv) {
171144 } ;
172145}
173146
174- async function renameDeclarationFiles ( dir ) {
175- try {
176- const allFiles = await collectDeclarationFiles ( dir ) ;
177-
178- if ( allFiles . length === 0 ) {
179- return ;
180- }
181- console . log ( `Processing ${ allFiles . length } declaration files...` ) ;
182-
183- const { errors } = await PromisePool . for ( allFiles )
184- . withConcurrency ( 10 )
185- . process ( processCtsFile ) ;
186-
187- if ( errors . length > 0 ) {
188- console . error ( `${ errors . length } files failed to process` ) ;
189- }
190- } catch ( error ) {
191- console . error ( `Error processing: ${ error . message } ` ) ;
192- }
193- }
194-
195- async function collectDeclarationFiles ( dir , fileList = [ ] ) {
196- try {
197- const fileOrDirs = await readdir ( dir , { withFileTypes : true } ) ;
198- const subDirectories = [ ] ;
199-
200- for ( const fileOrDir of fileOrDirs ) {
201- const fullPath = join ( dir , fileOrDir . name ) ;
202-
203- if ( fileOrDir . isDirectory ( ) ) {
204- subDirectories . push ( fullPath ) ;
205- } else if ( fileOrDir . name . endsWith ( ".d.ts" ) ) {
206- fileList . push ( fullPath ) ;
207- }
208- }
209-
210- if ( subDirectories . length > 0 ) {
211- await PromisePool . for ( subDirectories )
212- . withConcurrency ( 8 )
213- . process ( async ( subDir ) => {
214- await collectDeclarationFiles ( subDir , fileList ) ;
215- } ) ;
216- }
217-
218- return fileList ;
219- } catch ( error ) {
220- console . error ( `Error reading directory ${ dir } : ${ error . message } ` ) ;
221- return fileList ;
222- }
223- }
224-
225- async function processCtsFile ( fullPath ) {
226- // Change import paths from .js to .cjs
227- const content = await readFile ( fullPath , "utf8" ) ;
228- const importRegex = / f r o m [ ' " ] ( .+ ) \. j s [ ' " ] ; ? $ / gm;
229- const modifiedContent = content . replace ( importRegex , "from '$1.cjs'" ) ;
230-
231- // Change file extension from .d.ts to .d.cts
232- const newPath = fullPath . replace ( ".d.ts" , ".d.cts" ) ;
233- await writeFile ( newPath , modifiedContent , "utf8" ) ;
234- await unlink ( fullPath ) ;
235- }
236-
237147function getRuntimeEnv ( ) {
238148 if ( env [ "PACKAGE_PUBLISH" ] === "true" ) {
239149 return "PUBLISH" ;
0 commit comments