1
1
import type { LoaderFile } from '../block-loader/types'
2
2
import type { VueSFCTransformerFileLoader } from '../sfc-transformer'
3
3
import type { Loader } from '../types/mkdist'
4
+ import { readFileSync } from 'node:fs'
5
+ import { createRequire } from 'node:module'
4
6
import { resolve } from 'node:path'
5
7
import { scriptLoader } from '../block-loader/script'
6
8
import { styleLoader } from '../block-loader/style'
@@ -19,6 +21,27 @@ function importEsbuild(): Promise<typeof import('esbuild')> | typeof import('esb
19
21
} ) ( )
20
22
}
21
23
24
+ let _isMkdistSupportDualVueDts : boolean | undefined
25
+ function isMkdistSupportDualVueDts ( ) : boolean {
26
+ if ( typeof _isMkdistSupportDualVueDts === 'boolean' ) {
27
+ return _isMkdistSupportDualVueDts
28
+ }
29
+ try {
30
+ const require = createRequire ( import . meta. url )
31
+ const mkdistPath = require . resolve ( 'mkdist' )
32
+ const packageJson = readFileSync ( resolve ( mkdistPath , '..' , '..' , 'package.json' ) , 'utf-8' )
33
+ const { version = '0.0.0' } = JSON . parse ( packageJson ) as { version : string }
34
+ const [ major = 0 , minor = 0 , patch = 0 ] = version . split ( '.' ) . map ( n => Number . parseInt ( n ) )
35
+ const normalizedVersion = major * 1_000_000 + minor * 1_000 + patch
36
+
37
+ return ! Number . isNaN ( normalizedVersion ) && normalizedVersion > 2_003_000
38
+ }
39
+ catch ( error ) {
40
+ console . error ( `Error checking mkdist version: ${ error } ` )
41
+ return false
42
+ }
43
+ }
44
+
22
45
const vueSFCTransformer = defineVueSFCTransformer ( {
23
46
blockLoaders : {
24
47
template : templateLoader ,
@@ -77,7 +100,7 @@ export const vueLoader: Loader = async (input, mkdistContext) => {
77
100
extension : '.js' ,
78
101
getContents : ( ) => 'export default {}' ,
79
102
} ) ) ?. filter ( f => f . declaration ) || [ ]
80
- if ( dts . length ) {
103
+ if ( dts . length && isMkdistSupportDualVueDts ( ) ) {
81
104
dts . push ( {
82
105
contents : await input . getContents ( ) ,
83
106
path : input . path ,
0 commit comments