{"record":{"id":"90956d0183214b91","repo":"vitest-dev/vitest","slug":"custom-coverageprovidermodule-loaded-from-option","errorCode":null,"errorMessage":"Custom CoverageProviderModule loaded from ${options.customProviderModule} was not the default export","messagePattern":"Custom CoverageProviderModule loaded from (.+?) was not the default export","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/vitest/src/utils/coverage.ts","lineNumber":97,"sourceCode":"    }\n\n    return coverageModule\n  }\n\n  let customProviderModule\n\n  try {\n    customProviderModule = await loader.import(options.customProviderModule!)\n  }\n  catch (error) {\n    throw new Error(\n      `Failed to load custom CoverageProviderModule from ${options.customProviderModule}`,\n      { cause: error },\n    )\n  }\n\n  if (customProviderModule.default == null) {\n    throw new Error(\n      `Custom CoverageProviderModule loaded from ${options.customProviderModule} was not the default export`,\n    )\n  }\n\n  return customProviderModule.default\n}\n","sourceCodeStart":79,"sourceCodeEnd":104,"githubUrl":"https://github.com/vitest-dev/vitest/blob/1fa9837ec26533512fdcad8baebf249771bd340a/packages/vitest/src/utils/coverage.ts#L79-L104","documentation":"After successfully importing a custom coverage provider module, Vitest requires it to have a non-null default export. If customProviderModule.default is null/undefined, it throws stating the module loaded but was not the default export. This is a shape contract: the provider must be `export default { getProvider, ... }`.","triggerScenarios":"test.coverage.provider='custom' points at a module that exists and imports cleanly, but uses named exports (e.g. `export const getProvider = ...`) instead of a default export, or has `export default null`.","commonSituations":"Authoring a custom coverage provider and forgetting the default export, or migrating a provider that previously used CommonDB module.exports to ESM named exports.","solutions":["Add a default export to the provider module: `export default { getProvider() { ... } }`.","If using CommonDB, ensure module.exports = {...} so the interop default is populated.","Confirm with node -e \"import('./p').then(m=>console.log(m.default))\" that default is the provider object.","Re-export the named provider as default if you cannot change the source: export { getProvider as default }."],"exampleFix":"// before: my-provider.js\nexport const getProvider = () => new MyProvider()\n\n// after\nexport default { getProvider: () => new MyProvider() }","handlingStrategy":"type-guard","validationCode":"const m = await loader.import(customProviderModule)\nif (m.default == null) throw new Error('provider must have a default export')","typeGuard":"function hasDefaultExport(m) {\n  return m != null && m.default != null\n}","tryCatchPattern":null,"preventionTips":["Always `export default` the provider object.","Verify with node -e \"import('./p').then(m=>m.default)\".","Re-export named providers as default if you cannot edit the source."],"tags":["coverage","custom-provider","default-export","config"],"backgroundTag":null,"analyzedSha":"1fa9837ec26533512fdcad8baebf249771bd340a","analyzedAt":"2026-08-11T16:11:39.638Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}