{"record":{"id":"18b60fa34aff1b2d","repo":"vitest-dev/vitest","slug":"missing-data-uri-encoding","errorCode":null,"errorMessage":"Missing data URI encoding","messagePattern":"Missing data URI encoding","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/vitest/src/runtime/vm/esm-executor.ts","lineNumber":45,"sourceCode":"// `hasAsyncGraph` only exists on SourceTextModule — a SyntheticModule is\n// synchronous by definition (its evaluation callback is sync)\nfunction moduleHasAsyncGraph(module: VMModule): boolean {\n  return module instanceof SourceTextModule && module.hasAsyncGraph()\n}\n\nconst dataURIRegex\n  = /^data:(?<mime>text\\/javascript|application\\/json|application\\/wasm)(?:;(?<encoding>charset=utf-8|base64))?,(?<code>.*)$/\n\nfunction parseDataUri(identifier: string): { mime: string; code: string | Buffer } {\n  const match = identifier.match(dataURIRegex)\n  if (!match || !match.groups) {\n    throw new Error('Invalid data URI')\n  }\n  const { mime, encoding } = match.groups\n  let code: string | Buffer = match.groups.code\n  if (mime === 'application/wasm') {\n    if (!encoding) {\n      throw new Error('Missing data URI encoding')\n    }\n    if (encoding !== 'base64') {\n      throw new Error(`Invalid data URI encoding: ${encoding}`)\n    }\n    return { mime, code: Buffer.from(code, 'base64') }\n  }\n  if (!encoding || encoding === 'charset=utf-8') {\n    code = decodeURIComponent(code)\n  }\n  else if (encoding === 'base64') {\n    code = Buffer.from(code, 'base64').toString()\n  }\n  else {\n    throw new Error(`Invalid data URI encoding: ${encoding}`)\n  }\n  return { mime, code }\n}\n","sourceCodeStart":27,"sourceCodeEnd":63,"githubUrl":"https://github.com/vitest-dev/vitest/blob/1fa9837ec26533512fdcad8baebf249771bd340a/packages/vitest/src/runtime/vm/esm-executor.ts#L27-L63","documentation":"Thrown by parseDataUri specifically for WebAssembly data URIs: when the MIME is `application/wasm` the encoding is mandatory (only base64 wasm is supported, because raw binary cannot live in a text URI). Reaching this branch means a wasm data URI had no `;base64` (or any encoding) segment.","triggerScenarios":"Test code imports `data:application/wasm,<binary>` without an encoding, e.g. `await import('data:application/wasm,AGFzbQ...')`. Vitest requires `data:application/wasm;base64,...` so the bytes decode reliably.","commonSituations":"Generating wasm data URIs programmatically and forgetting the base64 encoding; copy-pasting a wasm data URI that omitted the encoding; tools that emit raw wasm bytes inline.","solutions":["Encode the wasm as base64 and add `;base64`: `data:application/wasm;base64,<base64-bytes>`.","Load the wasm from a file URL instead of a data URI when feasible.","When generating URIs in code, always pair `application/wasm` with base64 encoding."],"exampleFix":"// before\nconst url = `data:application/wasm,${rawBytes}`\n\n// after\nconst url = `data:application/wasm;base64,${rawBytes.toString('base64')}`","handlingStrategy":"validation","validationCode":"function isBase64WasmDataUri(uri: string): boolean {\n  return /^data:application\\/wasm;base64,[A-Za-z0-9+/=]+$/.test(uri)\n}","typeGuard":"function isBase64WasmDataUri(uri: string): boolean {\n  return /^data:application\\/wasm;base64,[A-Za-z0-9+/=]+$/.test(uri)\n}","tryCatchPattern":null,"preventionTips":["Always pair `application/wasm` with `;base64` in generated URIs.","Prefer loading wasm from file: URLs to avoid encoding mistakes.","Unit-test URI generators to confirm they emit base64 for wasm."],"tags":["vm","esm","data-uri","wasm","validation"],"backgroundTag":null,"analyzedSha":"1fa9837ec26533512fdcad8baebf249771bd340a","analyzedAt":"2026-08-11T16:11:39.638Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}