{"record":{"id":"e7a201411ccc87e7","repo":"parcel-bundler/parcel","slug":"unknown-script-language-script-lang","errorCode":null,"errorMessage":"Unknown script language: \"${script.lang}\"","messagePattern":"Unknown script language: \"(.+?)\"","errorType":"exception","errorClass":"ThrowableDiagnostic","httpStatus":null,"severity":"error","filePath":"packages/transformers/vue/src/VueTransformer.js","lineNumber":320,"sourceCode":"          type = 'js';\n          break;\n        case 'jsx':\n          type = 'jsx';\n          break;\n        case 'typescript':\n        case 'ts':\n          type = 'ts';\n          break;\n        case 'tsx':\n          type = 'tsx';\n          break;\n        case 'coffeescript':\n        case 'coffee':\n          type = 'coffee';\n          break;\n        default:\n          // TODO: codeframe\n          throw new ThrowableDiagnostic({\n            diagnostic: {\n              message: md`Unknown script language: \"${script.lang}\"`,\n              origin: '@parcel/transformer-vue',\n            },\n          });\n      }\n      let scriptAsset = {\n        type,\n        uniqueKey: asset.id + '-script',\n        content: script.content,\n        ...(!script.src &&\n          asset.env.sourceMap && {\n            map: createMap(script.map, options.projectRoot),\n          }),\n      };\n\n      return [scriptAsset];\n    }","sourceCodeStart":302,"sourceCodeEnd":338,"githubUrl":"https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/transformers/vue/src/VueTransformer.js#L302-L338","documentation":"Thrown by @parcel/transformer-vue when a <script lang=\"...\"> value does not match the supported cases (empty/js, ts, tsx, coffeescript/coffee). The switch maps known langs to internal asset types; the default branch rejects anything else with a TODO note that no codeframe is attached.","triggerScenarios":"script.lang is set to a value the transformer cannot map (e.g. 'jsx' alone, 'babel', 'ls' for livescript, 'typescript' spelled out).","commonSituations":"Migrating from vue-loader which accepted 'babel' or 'jsx', copy-pasting lang from another ecosystem, or using a language Parcel's Vue transformer was never taught (e.g. livescript).","solutions":["Use a supported lang: remove lang for plain JS, or set lang=\"ts\", lang=\"tsx\", or lang=\"coffee\".","For JSX, use lang=\"tsx\" (TypeScript handles JSX).","Pre-process the script yourself and drop the unsupported lang attribute."],"exampleFix":"// before\n<script lang=\"babel\">...</script>\n// after\n<script lang=\"tsx\">...</script>","handlingStrategy":"validation","validationCode":"const supported = new Set([undefined, '', 'js', 'ts', 'tsx', 'coffeescript', 'coffee']);\nif (!supported.has(script.lang)) {\n  throw new Error(`Unsupported script lang '${script.lang}'; use ts, tsx, coffee, or plain js.`);\n}","typeGuard":"const SUPPORTED_SCRIPT_LANGS = new Set([undefined, '', 'js', 'ts', 'tsx', 'coffeescript', 'coffee']);\nfunction isSupportedScriptLang(lang) {\n  return SUPPORTED_SCRIPT_LANGS.has(lang);\n}","tryCatchPattern":null,"preventionTips":["Use lang=\"ts\" or lang=\"tsx\" for typed/scripted blocks.","Avoid legacy lang values from other loaders (babel, jsx).","Drop the lang attribute for plain JavaScript."],"tags":["vue","script","parcel-transformer","validation"],"backgroundTag":null,"analyzedSha":"59484858a1a0bcbb71f74088956bb437a2db6505","analyzedAt":"2026-08-13T04:06:35.925Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}