{"record":{"id":"199f83fe6a4695ab","repo":"vitest-dev/vitest","slug":"benchmark-provider-loaded-from-provider-did-n","errorCode":null,"errorMessage":"Benchmark provider loaded from \"${provider}\" did not have a default export.","messagePattern":"Benchmark provider loaded from \"(.+?)\" did not have a default export\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/vitest/src/runtime/benchmark.ts","lineNumber":117,"sourceCode":"async function loadProviderModule(\n  provider: string,\n  moduleRunner: TestModuleRunner,\n): Promise<BenchmarkProvider> {\n  let mod: Record<string, any>\n  try {\n    mod = await moduleRunner.import(provider)\n  }\n  catch (error) {\n    throw new Error(\n      `Failed to load benchmark provider from \"${provider}\".`,\n      { cause: error },\n    )\n  }\n  if (mod.default == null) {\n    throw new Error(\n      `Benchmark provider loaded from \"${provider}\" did not have a default export.`,\n    )\n  }\n  return mod.default\n}\n\n/**\n * Resolves the benchmark provider for the current worker, importing a custom\n * provider module on first use. The result is cached for the lifetime of the\n * worker so a custom provider is imported at most once.\n */\nfunction resolveBenchmarkProvider(\n  config: SerializedConfig,\n  moduleRunner: TestModuleRunner,\n): Promise<BenchmarkProvider> {\n  if (!cachedProvider) {\n    const provider = config.benchmark.provider\n    cachedProvider = !provider\n      ? Promise.resolve(createDefaultBenchmarkProvider(config))\n      : loadProviderModule(provider, moduleRunner)\n  }","sourceCodeStart":99,"sourceCodeEnd":135,"githubUrl":"https://github.com/vitest-dev/vitest/blob/1fa9837ec26533512fdcad8baebf249771bd340a/packages/vitest/src/runtime/benchmark.ts#L99-L135","documentation":"After successfully importing a custom benchmark provider module, Vitest checks that `mod.default` is not null/undefined. A benchmark provider must be supplied as the module's default export. This fires when the module loads but exposes its provider only via a named export, or has no default at all.","triggerScenarios":"Provider module uses `export const provider = { run: ... }` or `export function run(...)` without `export default`. The check at benchmark.ts:113 (`if (mod.default == null)`) triggers after a successful import. Common with CJS-interop where the namespace object's `default` is undefined.","commonSituations":"Migrating a named-export provider to Vitest and forgetting the default export; provider authored as CommonJS (`module.exports = { run }`) but the interop layer does not synthesize a `default`; provider exports a class but as a named binding.","solutions":["Add `export default { run(group) { ... } }` to the provider module.","If using CommonJS, ensure `module.exports = { default: { run: ... } }` or rely on the runner's interop by setting `module.exports.default = { run }`.","Confirm the provider object conforms to `BenchmarkProvider`: `{ run: (group: BenchmarkGroup) => Promise<BenchResult[]> }`."],"exampleFix":"// before - provider.ts\nexport const myProvider = { async run(group) { return [] } }\n\n// after\nexport default { async run(group) { return [] } }","handlingStrategy":"type-guard","validationCode":"const mod = await import(providerPath); if (mod.default == null) throw new Error('add `export default` to provider')","typeGuard":"function hasDefault<T>(m: Record<string, any>): m is { default: T } { return m.default != null }","tryCatchPattern":"try { provider = await loadProviderModule(path, runner) } catch (e) { if (/default export/.test(e.message)) fixProviderDefault(); else throw e }","preventionTips":["Always author the provider with `export default { run(group) { ... } }`.","In a unit test, `assert(mod.default != null)` after importing.","When using CJS, set `module.exports.default = ...` explicitly."],"tags":["benchmark","provider","default-export","esm"],"backgroundTag":null,"analyzedSha":"1fa9837ec26533512fdcad8baebf249771bd340a","analyzedAt":"2026-08-11T16:11:39.638Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}