Explorar o código

refactor(compiler-core): reuse unwrapTS utility function (#9795)

三咲智子 Kevin Deng %!s(int64=2) %!d(string=hai) anos
pai
achega
cf77435338

+ 8 - 0
packages/compiler-core/src/babelUtils.ts

@@ -441,3 +441,11 @@ export const TS_NODE_TYPES = [
   'TSInstantiationExpression', // foo<string>
   'TSSatisfiesExpression' // foo satisfies T
 ]
+
+export function unwrapTSNode(node: Node): Node {
+  if (TS_NODE_TYPES.includes(node.type)) {
+    return unwrapTSNode((node as any).expression)
+  } else {
+    return node
+  }
+}

+ 2 - 3
packages/compiler-core/src/utils.ts

@@ -40,6 +40,7 @@ import { isString, isObject, NOOP } from '@vue/shared'
 import { PropsExpression } from './transforms/transformElement'
 import { parseExpression } from '@babel/parser'
 import { Expression } from '@babel/types'
+import { unwrapTSNode } from './babelUtils'
 
 export const isStaticExp = (p: JSChildNode): p is SimpleExpressionNode =>
   p.type === NodeTypes.SIMPLE_EXPRESSION && p.isStatic
@@ -158,9 +159,7 @@ export const isMemberExpressionNode = __BROWSER__
         let ret: Expression = parseExpression(path, {
           plugins: context.expressionPlugins
         })
-        if (ret.type === 'TSAsExpression' || ret.type === 'TSTypeAssertion') {
-          ret = ret.expression
-        }
+        ret = unwrapTSNode(ret) as Expression
         return (
           ret.type === 'MemberExpression' ||
           ret.type === 'OptionalMemberExpression' ||

+ 3 - 7
packages/compiler-sfc/src/compileScript.ts

@@ -2,7 +2,8 @@ import {
   BindingTypes,
   UNREF,
   isFunctionType,
-  walkIdentifiers
+  walkIdentifiers,
+  unwrapTSNode
 } from '@vue/compiler-dom'
 import { DEFAULT_FILENAME, SFCDescriptor, SFCScriptBlock } from './parse'
 import { ParserPlugin } from '@babel/parser'
@@ -43,12 +44,7 @@ import { DEFINE_EXPOSE, processDefineExpose } from './script/defineExpose'
 import { DEFINE_OPTIONS, processDefineOptions } from './script/defineOptions'
 import { processDefineSlots } from './script/defineSlots'
 import { DEFINE_MODEL, processDefineModel } from './script/defineModel'
-import {
-  isLiteralNode,
-  unwrapTSNode,
-  isCallOf,
-  getImportedName
-} from './script/utils'
+import { isLiteralNode, isCallOf, getImportedName } from './script/utils'
 import { analyzeScriptBindings } from './script/analyzeScriptBindings'
 import { isImportUsed } from './script/importUsageCheck'
 import { processAwait } from './script/topLevelAwait'

+ 2 - 3
packages/compiler-sfc/src/script/defineModel.ts

@@ -5,10 +5,9 @@ import {
   UNKNOWN_TYPE,
   concatStrings,
   isCallOf,
-  toRuntimeTypeString,
-  unwrapTSNode
+  toRuntimeTypeString
 } from './utils'
-import { BindingTypes } from '@vue/compiler-dom'
+import { BindingTypes, unwrapTSNode } from '@vue/compiler-dom'
 import { warnOnce } from '../warn'
 
 export const DEFINE_MODEL = 'defineModel'

+ 2 - 1
packages/compiler-sfc/src/script/defineOptions.ts

@@ -1,6 +1,7 @@
 import { Node } from '@babel/types'
+import { unwrapTSNode } from '@vue/compiler-dom'
 import { ScriptCompileContext } from './context'
-import { isCallOf, unwrapTSNode } from './utils'
+import { isCallOf } from './utils'
 import { DEFINE_PROPS } from './defineProps'
 import { DEFINE_EMITS } from './defineEmits'
 import { DEFINE_EXPOSE } from './defineExpose'

+ 1 - 2
packages/compiler-sfc/src/script/defineProps.ts

@@ -6,7 +6,7 @@ import {
   ObjectExpression,
   Expression
 } from '@babel/types'
-import { BindingTypes, isFunctionType } from '@vue/compiler-dom'
+import { BindingTypes, isFunctionType, unwrapTSNode } from '@vue/compiler-dom'
 import { ScriptCompileContext } from './context'
 import {
   TypeResolveContext,
@@ -19,7 +19,6 @@ import {
   concatStrings,
   isLiteralNode,
   isCallOf,
-  unwrapTSNode,
   toRuntimeTypeString,
   getEscapedPropName
 } from './utils'

+ 3 - 2
packages/compiler-sfc/src/script/definePropsDestructure.ts

@@ -15,10 +15,11 @@ import {
   isInDestructureAssignment,
   isReferencedIdentifier,
   isStaticProperty,
-  walkFunctionParams
+  walkFunctionParams,
+  unwrapTSNode
 } from '@vue/compiler-dom'
 import { genPropsAccessExp } from '@vue/shared'
-import { isCallOf, resolveObjectKey, unwrapTSNode } from './utils'
+import { isCallOf, resolveObjectKey } from './utils'
 import { ScriptCompileContext } from './context'
 import { DEFINE_PROPS } from './defineProps'
 import { warnOnce } from '../warn'

+ 0 - 9
packages/compiler-sfc/src/script/utils.ts

@@ -9,7 +9,6 @@ import {
   StringLiteral
 } from '@babel/types'
 import path from 'path'
-import { TS_NODE_TYPES } from '@vue/compiler-dom'
 
 export const UNKNOWN_TYPE = 'Unknown'
 
@@ -32,14 +31,6 @@ export function isLiteralNode(node: Node) {
   return node.type.endsWith('Literal')
 }
 
-export function unwrapTSNode(node: Node): Node {
-  if (TS_NODE_TYPES.includes(node.type)) {
-    return unwrapTSNode((node as any).expression)
-  } else {
-    return node
-  }
-}
-
 export function isCallOf(
   node: Node | null | undefined,
   test: string | ((id: string) => boolean) | null | undefined