From e2542e4cb28644a50201d8235034962adec3838a Mon Sep 17 00:00:00 2001 From: ZHAO Jinxiang Date: Tue, 17 May 2022 14:13:17 +0800 Subject: [PATCH] feat: add experimentalRuntimeMode runtime-uni-app (#1308) --- .../schemas/vue-tsconfig.schema.json | 13 +++++++++++++ packages/vue-code-gen/src/generators/template.ts | 3 ++- packages/vue-typescript/src/types.ts | 1 + .../vue-typescript/src/use/useSfcTemplateScript.ts | 1 + 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/extensions/vscode-vue-language-features/schemas/vue-tsconfig.schema.json b/extensions/vscode-vue-language-features/schemas/vue-tsconfig.schema.json index 9402e4a9f..5095650fc 100644 --- a/extensions/vscode-vue-language-features/schemas/vue-tsconfig.schema.json +++ b/extensions/vscode-vue-language-features/schemas/vue-tsconfig.schema.json @@ -16,6 +16,19 @@ ], "markdownDescription": "https://github.com/johnsoncodehk/volar/pull/351" }, + "experimentalRuntimeMode": { + "type": "string", + "default": "runtime-dom", + "anyOf": [ + { + "enum": [ + "runtime-dom", + "runtime-uni-app" + ] + } + ], + "markdownDescription": "Run app in browser or uni-app" + }, "experimentalImplicitWrapComponentOptionsWithDefineComponent": { "enum": [ true, diff --git a/packages/vue-code-gen/src/generators/template.ts b/packages/vue-code-gen/src/generators/template.ts index 46fbde099..3f74329c9 100644 --- a/packages/vue-code-gen/src/generators/template.ts +++ b/packages/vue-code-gen/src/generators/template.ts @@ -49,6 +49,7 @@ export function generate( sourceLang: string, templateAst: CompilerDOM.RootNode, isVue2: boolean, + experimentalRuntimeMode: 'runtime-dom' | 'runtime-uni-app', allowTypeNarrowingInEventExpressions: boolean, cssScopedClasses: string[] = [], htmlToTemplate: (htmlStart: number, htmlEnd: number) => { start: number, end: number; } | undefined, @@ -538,7 +539,7 @@ export function generate( tsCodeGen.addText(`{\n`); { - const tagText = isHTMLTag(node.tag) || isSVGTag(node.tag) ? node.tag : tagResolves[node.tag].rawComponent; + const tagText = experimentalRuntimeMode === 'runtime-dom' && (isHTMLTag(node.tag) || isSVGTag(node.tag)) ? node.tag : tagResolves[node.tag].rawComponent; const fullTagStart = tsCodeGen.getText().length; tsCodeGen.addText(`<`); diff --git a/packages/vue-typescript/src/types.ts b/packages/vue-typescript/src/types.ts index 0f29167d0..87482d718 100644 --- a/packages/vue-typescript/src/types.ts +++ b/packages/vue-typescript/src/types.ts @@ -12,6 +12,7 @@ export interface ITemplateScriptData { export interface VueCompilerOptions { experimentalCompatMode?: 2 | 3; + experimentalRuntimeMode?: 'runtime-dom' | 'runtime-uni-app'; experimentalImplicitWrapComponentOptionsWithDefineComponent?: boolean | 'onlyJs'; experimentalDowngradePropsAndEmitsToSetupReturnOnScriptSetup?: boolean | 'onlyJs'; experimentalTemplateCompilerOptions?: any; diff --git a/packages/vue-typescript/src/use/useSfcTemplateScript.ts b/packages/vue-typescript/src/use/useSfcTemplateScript.ts index 5f9039c4e..44e624d95 100644 --- a/packages/vue-typescript/src/use/useSfcTemplateScript.ts +++ b/packages/vue-typescript/src/use/useSfcTemplateScript.ts @@ -71,6 +71,7 @@ export function useSfcTemplateScript( templateData.value.lang, sfcTemplateCompileResult.value.ast, compilerOptions.experimentalCompatMode === 2, + compilerOptions.experimentalRuntimeMode ?? 'runtime-dom', !!compilerOptions.experimentalAllowTypeNarrowingInInlineHandlers, Object.values(cssScopedClasses.value).map(map => Object.keys(map)).flat(), templateData.value.htmlToTemplate,