{"record":{"id":"bf3c549f03a8f2ba","repo":"vitest-dev/vitest","slug":"environment-name-is-not-a-valid-environment-bf3c54","errorCode":null,"errorMessage":"Environment \"${name}\" is not a valid environment. Path \"${packageId}\" should export default object with a \"transformMode\" method equal to \"ssr\" or \"web\", received \"${environment.transformMode}\".","messagePattern":"Environment \"(.+?)\" is not a valid environment\\. Path \"(.+?)\" should export default object with a \"transformMode\" method equal to \"ssr\" or \"web\", received \"(.+?)\"\\.","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"packages/vitest/src/integrations/env/loader.ts","lineNumber":85,"sourceCode":"    () => import(packageId) as Promise<{ default: Environment }>,\n  )\n  return resolveEnvironmentFromModule(name, packageId, pkg)\n}\n\nfunction resolveEnvironmentFromModule(name: string, packageId: string, pkg: { default: Environment }) {\n  if (!pkg || !pkg.default || typeof pkg.default !== 'object') {\n    throw new TypeError(\n      `Environment \"${name}\" is not a valid environment. `\n      + `Path \"${packageId}\" should export default object with a \"setup\" or/and \"setupVM\" method.`,\n    )\n  }\n  const environment = pkg.default\n  if (\n    environment.transformMode != null\n    && environment.transformMode !== 'web'\n    && environment.transformMode !== 'ssr'\n  ) {\n    throw new TypeError(\n      `Environment \"${name}\" is not a valid environment. `\n      + `Path \"${packageId}\" should export default object with a \"transformMode\" method equal to \"ssr\" or \"web\", received \"${environment.transformMode}\".`,\n    )\n  }\n  if (environment.transformMode) {\n    console.warn(`The Vitest environment ${environment.name} defines the \"transformMode\". This options was deprecated in Vitest 4 and will be removed in the next major version. Please, use \"viteEnvironment\" instead.`)\n    // keep for backwards compat\n    environment.viteEnvironment ??= environment.transformMode === 'ssr'\n      ? 'ssr'\n      : 'client'\n  }\n  return environment\n}\n\nexport async function loadEnvironment(\n  name: string,\n  root: string,\n  rpc: WorkerRPC,","sourceCodeStart":67,"sourceCodeEnd":103,"githubUrl":"https://github.com/vitest-dev/vitest/blob/1fa9837ec26533512fdcad8baebf249771bd340a/packages/vitest/src/integrations/env/loader.ts#L67-L103","documentation":"After validating the default export is an object, resolveEnvironmentFromModule checks the optional transformMode field. If present, it must be exactly 'ssr' or 'web'. Any other string (or a mistyped value like 'client', 'browser', 'node') triggers this TypeError. Note: transformMode itself is deprecated in Vitest 4 in favor of viteEnvironment, but it is still validated when present.","triggerScenarios":"A custom environment sets `transformMode` to an invalid value such as 'client' (the old valid alias was only 'ssr'/'web'; 'client' maps from viteEnvironment, not transformMode), 'browser', 'node', or a typo.","commonSituations":"Migrating an environment from an older Vitest where transformMode accepted different values; setting transformMode to 'client' instead of 'web'; typo in the value.","solutions":["Set transformMode to 'ssr' or 'web', or remove it and use viteEnvironment ('ssr' or 'client') instead.","If you wrote 'client', change it to 'web' (transformMode) or migrate to viteEnvironment: 'client'.","Upgrade the environment package to the Vitest 4+ API using viteEnvironment."],"exampleFix":"// before — invalid transformMode:\nexport default { name: 'myenv', transformMode: 'client', setup() {} }\n\n// after — use viteEnvironment (Vitest 4+):\nexport default { name: 'myenv', viteEnvironment: 'client', setup() {} }","handlingStrategy":"validation","validationCode":"const VALID_TRANSFORM_MODES = ['ssr', 'web'] as const\nif (env.transformMode != null && !VALID_TRANSFORM_MODES.includes(env.transformMode)) {\n  // fix the value or migrate to viteEnvironment\n}","typeGuard":"function isValidTransformMode(v: unknown): v is 'ssr' | 'web' | undefined {\n  return v == null || v === 'ssr' || v === 'web'\n}","tryCatchPattern":null,"preventionTips":["Migrate custom environments to the Vitest 4 viteEnvironment field ('ssr' or 'client').","If keeping transformMode, use only 'ssr' or 'web'."],"tags":["environment","config","custom-environment","deprecation","validation"],"backgroundTag":null,"analyzedSha":"1fa9837ec26533512fdcad8baebf249771bd340a","analyzedAt":"2026-08-11T16:11:39.638Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}