From: Evan You Date: Fri, 12 May 2023 10:08:29 +0000 (+0100) Subject: fix(compiler-sfc): properly parse d.ts files when resolving types X-Git-Tag: v3.3.2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aa1e77d532b951ea5d3a5e26214a8b0c9c02fb6f;p=thirdparty%2Fvuejs%2Fcore.git fix(compiler-sfc): properly parse d.ts files when resolving types close #8285 --- diff --git a/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts b/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts index 4b36880bf1..240497310e 100644 --- a/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts @@ -458,7 +458,10 @@ describe('resolveType', () => { test('relative ts', () => { const files = { '/foo.ts': 'export type P = { foo: number }', - '/bar.d.ts': 'type X = { bar: string }; export { X as Y }' + '/bar.d.ts': + 'type X = { bar: string }; export { X as Y };' + + // verify that we can parse syntax that is only valid in d.ts + 'export const baz: boolean' } const { props, deps } = resolve( ` diff --git a/packages/compiler-sfc/src/script/context.ts b/packages/compiler-sfc/src/script/context.ts index d2c5dabd19..9a3d2eccd3 100644 --- a/packages/compiler-sfc/src/script/context.ts +++ b/packages/compiler-sfc/src/script/context.ts @@ -145,7 +145,8 @@ export class ScriptCompileContext { export function resolveParserPlugins( lang: string, - userPlugins?: ParserPlugin[] + userPlugins?: ParserPlugin[], + dts = false ) { const plugins: ParserPlugin[] = [] if (lang === 'jsx' || lang === 'tsx') { @@ -156,7 +157,7 @@ export function resolveParserPlugins( userPlugins = userPlugins.filter(p => p !== 'jsx') } if (lang === 'ts' || lang === 'tsx') { - plugins.push('typescript') + plugins.push(['typescript', { dts }]) if (!plugins.includes('decorators')) { plugins.push('decorators-legacy') } diff --git a/packages/compiler-sfc/src/script/resolveType.ts b/packages/compiler-sfc/src/script/resolveType.ts index 550b6c2376..6b43be582d 100644 --- a/packages/compiler-sfc/src/script/resolveType.ts +++ b/packages/compiler-sfc/src/script/resolveType.ts @@ -933,7 +933,11 @@ function parseFile( const ext = extname(filename) if (ext === '.ts' || ext === '.tsx') { return babelParse(content, { - plugins: resolveParserPlugins(ext.slice(1), parserPlugins), + plugins: resolveParserPlugins( + ext.slice(1), + parserPlugins, + filename.endsWith('.d.ts') + ), sourceType: 'module' }).program.body } else if (ext === '.vue') {