1
- import { defineConfig } from 'vitest/config'
2
-
1
+ import { defineConfig , mergeConfig } from 'vitest/config'
2
+ import { externalizeDeps } from 'vite-plugin-externalize-deps'
3
+ import tsconfigPaths from 'vite-tsconfig-paths'
4
+ import dts from 'vite-plugin-dts'
3
5
import packageJson from './package.json'
6
+ import type { Options } from '@tanstack/config/vite'
7
+
8
+ function ensureImportFileExtension ( {
9
+ content,
10
+ extension,
11
+ } : {
12
+ content : string
13
+ extension : string
14
+ } ) {
15
+ // replace e.g. `import { foo } from './foo'` with `import { foo } from './foo.js'`
16
+ content = content . replace (
17
+ / ( i m | e x ) p o r t \s [ \w { } / * \s , ] + f r o m \s [ ' " ] (?: \. \. ? \/ ) + ?[ ^ . ' " ] + (? = [ ' " ] ; ? ) / gm,
18
+ `$&.${ extension } ` ,
19
+ )
20
+
21
+ // replace e.g. `import('./foo')` with `import('./foo.js')`
22
+ content = content . replace (
23
+ / i m p o r t \( [ ' " ] (?: \. \. ? \/ ) + ?[ ^ . ' " ] + (? = [ ' " ] ; ? ) / gm,
24
+ `$&.${ extension } ` ,
25
+ )
26
+ return content
27
+ }
4
28
5
- export default defineConfig ( {
29
+ const config = defineConfig ( {
6
30
// fix from https://github.com/vitest-dev/vitest/issues/6992#issuecomment-2509408660
7
31
resolve : {
8
32
conditions : [ '@tanstack/custom-condition' ] ,
@@ -26,3 +50,73 @@ export default defineConfig({
26
50
restoreMocks : true ,
27
51
} ,
28
52
} )
53
+
54
+ // copy from @tanstack /config/vite with changes:
55
+ // - dts outDir: dist/types
56
+ // - build - lib - fileName: [name.mjs]
57
+ // - rollup - output - preserveModulesRoot: src
58
+ export const tanstackViteConfig = ( options : Options ) => {
59
+ const outDir = options . outDir ?? 'dist'
60
+ const cjs = options . cjs ?? true
61
+
62
+ return defineConfig ( {
63
+ plugins : [
64
+ externalizeDeps ( { include : options . externalDeps ?? [ ] } ) ,
65
+ tsconfigPaths ( {
66
+ projects : options . tsconfigPath ? [ options . tsconfigPath ] : undefined ,
67
+ } ) ,
68
+ dts ( {
69
+ outDir : `dist/types` ,
70
+ entryRoot : options . srcDir ,
71
+ include : options . srcDir ,
72
+ exclude : options . exclude ,
73
+ tsconfigPath : options . tsconfigPath ,
74
+ compilerOptions : {
75
+ module : 99 , // ESNext
76
+ declarationMap : false ,
77
+ } ,
78
+ beforeWriteFile : ( filePath , content ) => {
79
+ // content =
80
+ // options.beforeWriteDeclarationFile?.(filePath, content) || content
81
+ return {
82
+ filePath,
83
+ content : ensureImportFileExtension ( { content, extension : 'js' } ) ,
84
+ }
85
+ } ,
86
+ afterDiagnostic : ( diagnostics ) => {
87
+ if ( diagnostics . length > 0 ) {
88
+ console . error ( 'Please fix the above type errors' )
89
+ process . exit ( 1 )
90
+ }
91
+ } ,
92
+ } ) ,
93
+ ] ,
94
+ build : {
95
+ outDir,
96
+ minify : false ,
97
+ sourcemap : true ,
98
+ lib : {
99
+ entry : options . entry ,
100
+ formats : cjs ? [ 'es' , 'cjs' ] : [ 'es' ] ,
101
+ fileName : ( ) => '[name].mjs' ,
102
+ } ,
103
+ rollupOptions : {
104
+ output : {
105
+ preserveModules : true ,
106
+ preserveModulesRoot : 'src' ,
107
+ } ,
108
+ } ,
109
+ } ,
110
+ } )
111
+ }
112
+
113
+ export default mergeConfig (
114
+ config ,
115
+ tanstackViteConfig ( {
116
+ cjs : false ,
117
+ entry : [ './src/index.ts' ] ,
118
+ exclude : [ 'src/__tests__' ] ,
119
+ srcDir : './src' ,
120
+ tsconfigPath : 'tsconfig.prod.json' ,
121
+ } ) ,
122
+ )
0 commit comments