From 5b3d26cae62588981f75165c7dee9c5550aa0e86 Mon Sep 17 00:00:00 2001 From: Alex Snezhko Date: Fri, 20 Jun 2025 19:46:25 -0700 Subject: [PATCH] fix(compiler-sfc): check lang before attempt to compile script --- .../__tests__/compileScript.spec.ts | 15 +++++++++++++ packages/compiler-sfc/src/compileScript.ts | 22 ++++++++++++++++--- packages/compiler-sfc/src/script/context.ts | 13 +++-------- .../compiler-sfc/src/script/normalScript.ts | 4 ---- packages/compiler-sfc/src/script/utils.ts | 5 +++++ 5 files changed, 42 insertions(+), 17 deletions(-) diff --git a/packages/compiler-sfc/__tests__/compileScript.spec.ts b/packages/compiler-sfc/__tests__/compileScript.spec.ts index 73c6d316a40..dc3eec6bbd9 100644 --- a/packages/compiler-sfc/__tests__/compileScript.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript.spec.ts @@ -1543,4 +1543,19 @@ describe('compileScript', () => { ) assertCode(content) }) + + test('should not compile unrecognized language', () => { + const { content, lang, scriptAst } = compile( + ``, + ) + expect(content).toMatch(`export default + data: -> + myVal: 0`) + expect(lang).toBe('coffee') + expect(scriptAst).not.toBeDefined() + }) }) diff --git a/packages/compiler-sfc/src/compileScript.ts b/packages/compiler-sfc/src/compileScript.ts index 2e1e0ec34de..b3b1d526464 100644 --- a/packages/compiler-sfc/src/compileScript.ts +++ b/packages/compiler-sfc/src/compileScript.ts @@ -55,7 +55,13 @@ import { DEFINE_EXPOSE, processDefineExpose } from './script/defineExpose' import { DEFINE_OPTIONS, processDefineOptions } from './script/defineOptions' import { DEFINE_SLOTS, processDefineSlots } from './script/defineSlots' import { DEFINE_MODEL, processDefineModel } from './script/defineModel' -import { getImportedName, isCallOf, isLiteralNode } from './script/utils' +import { + getImportedName, + isCallOf, + isJS, + isLiteralNode, + isTS, +} from './script/utils' import { analyzeScriptBindings } from './script/analyzeScriptBindings' import { isImportUsed } from './script/importUsageCheck' import { processAwait } from './script/topLevelAwait' @@ -167,18 +173,26 @@ export function compileScript( ) } - const ctx = new ScriptCompileContext(sfc, options) const { script, scriptSetup, source, filename } = sfc const hoistStatic = options.hoistStatic !== false && !script const scopeId = options.id ? options.id.replace(/^data-v-/, '') : '' const scriptLang = script && script.lang const scriptSetupLang = scriptSetup && scriptSetup.lang + const isJSOrTS = + isJS(scriptLang, scriptSetupLang) || isTS(scriptLang, scriptSetupLang) if (!scriptSetup) { if (!script) { throw new Error(`[@vue/compiler-sfc] SFC contains no