1
1
import path from 'path'
2
2
import _resolve from 'resolve'
3
3
import BabelBackend from './BabelBackend'
4
+ import defaultBabelTypes from '@babel/types'
5
+ import defaultBabelGenerator from '@babel/generator'
4
6
import { getParserAsync } from 'babel-parse-wild-code'
5
7
import { promisify } from 'util'
6
8
@@ -11,28 +13,24 @@ const resolve: (
11
13
) => Promise < string > = promisify ( _resolve as any )
12
14
13
15
async function importLocal < T > ( pkg : string , basedir : string ) : Promise < T > {
14
- try {
15
- const resolved = await resolve ( pkg , {
16
- basedir,
17
- } )
18
- // eslint-disable-next-line @typescript-eslint/no-var-requires
19
- return await import ( /* webpackIgnore: true */ resolved )
20
- } catch ( error ) {
21
- return await import ( pkg )
22
- }
16
+ const resolved = await resolve ( pkg , {
17
+ basedir,
18
+ } )
19
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
20
+ return await import ( /* webpackIgnore: true */ resolved )
23
21
}
24
22
25
23
export default async function getBabelAutoBackend (
26
24
file : string ,
27
25
options ?: { [ k in string ] ?: any }
28
26
) : Promise < BabelBackend > {
29
27
const basedir = path . dirname ( file )
30
- const [ _parser , types , { default : _generate } ] : any = await Promise . all ( [
28
+ const [ _parser , types , generator ] : any = await Promise . all ( [
31
29
getParserAsync ( file , options ) ,
32
- importLocal ( '@babel/types' , basedir ) ,
33
- importLocal ( '@babel/generator' , basedir ) ,
30
+ importLocal ( '@babel/types' , basedir ) . catch ( ( ) => defaultBabelTypes ) ,
31
+ importLocal ( '@babel/generator' , basedir ) . catch ( ( ) => defaultBabelGenerator ) ,
34
32
] )
35
- const generate = _generate . default || _generate
33
+ const generate = generator . default || generator
36
34
const parser = _parser . parserOpts . sourceType
37
35
? _parser
38
36
: _parser . bindParserOpts ( { sourceType : 'unambiguous' } )
0 commit comments