From: Evan You Date: Tue, 17 Nov 2020 17:42:58 +0000 (-0500) Subject: wip: generate valid v-model and TS code in script setup inline mode X-Git-Tag: v3.0.3~46 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c15bd6235e5ed6ae0fa2d73be839866ce4269126;p=thirdparty%2Fvuejs%2Fcore.git wip: generate valid v-model and TS code in script setup inline mode --- diff --git a/packages/compiler-core/src/options.ts b/packages/compiler-core/src/options.ts index 2a6b79c164..02ac12e622 100644 --- a/packages/compiler-core/src/options.ts +++ b/packages/compiler-core/src/options.ts @@ -169,6 +169,10 @@ export interface TransformOptions extends SharedTransformCodegenOptions { * needed to render inline CSS variables on component root */ ssrCssVars?: string + /** + * Indicates that transforms should try to output valid TS code + */ + isTS?: boolean onError?: (error: CompilerError) => void } diff --git a/packages/compiler-core/src/runtimeHelpers.ts b/packages/compiler-core/src/runtimeHelpers.ts index 1cf8c7bfc1..f40c94c3d8 100644 --- a/packages/compiler-core/src/runtimeHelpers.ts +++ b/packages/compiler-core/src/runtimeHelpers.ts @@ -30,6 +30,7 @@ export const POP_SCOPE_ID = Symbol(__DEV__ ? `popScopeId` : ``) export const WITH_SCOPE_ID = Symbol(__DEV__ ? `withScopeId` : ``) export const WITH_CTX = Symbol(__DEV__ ? `withCtx` : ``) export const UNREF = Symbol(__DEV__ ? `unref` : ``) +export const IS_REF = Symbol(__DEV__ ? `isRef` : ``) // Name mapping for runtime helpers that need to be imported from 'vue' in // generated code. Make sure these are correctly exported in the runtime! @@ -64,7 +65,8 @@ export const helperNameMap: any = { [POP_SCOPE_ID]: `popScopeId`, [WITH_SCOPE_ID]: `withScopeId`, [WITH_CTX]: `withCtx`, - [UNREF]: `unref` + [UNREF]: `unref`, + [IS_REF]: `isRef` } export function registerRuntimeHelpers(helpers: any) { diff --git a/packages/compiler-core/src/transform.ts b/packages/compiler-core/src/transform.ts index c3a37c9f71..eddd03caa1 100644 --- a/packages/compiler-core/src/transform.ts +++ b/packages/compiler-core/src/transform.ts @@ -125,6 +125,7 @@ export function createTransformContext( ssrCssVars = ``, bindingMetadata = EMPTY_OBJ, inline = false, + isTS = false, onError = defaultOnError }: TransformOptions ): TransformContext { @@ -144,6 +145,7 @@ export function createTransformContext( ssrCssVars, bindingMetadata, inline, + isTS, onError, // state diff --git a/packages/compiler-core/src/transforms/vModel.ts b/packages/compiler-core/src/transforms/vModel.ts index ee1a4bd8bc..2acb5af195 100644 --- a/packages/compiler-core/src/transforms/vModel.ts +++ b/packages/compiler-core/src/transforms/vModel.ts @@ -14,6 +14,7 @@ import { hasScopeRef, isStaticExp } from '../utils' +import { helperNameMap, IS_REF, UNREF } from '../runtimeHelpers' export const transformModel: DirectiveTransform = (dir, node, context) => { const { exp, arg } = dir @@ -24,10 +25,16 @@ export const transformModel: DirectiveTransform = (dir, node, context) => { return createTransformProps() } + const rawExp = exp.loc.source const expString = - exp.type === NodeTypes.SIMPLE_EXPRESSION ? exp.content : exp.loc.source + exp.type === NodeTypes.SIMPLE_EXPRESSION ? exp.content : rawExp - if (!isMemberExpression(expString)) { + // im SFC