{"record":{"id":"44485acb67f1c916","repo":"medusajs/medusa","slug":"no-handler-registered-for-resource-type-data-ty","errorCode":null,"errorMessage":"No handler registered for resource type \"${data.type}\". Available types: ${Array.from(resourceHandlers.keys()).join(\", \")}. Use registerResourceTypeHandler() to add support for custom types.","messagePattern":"No handler registered for resource type \"(.+?)\"\\. Available types: (.+?)\\. Use registerResourceTypeHandler\\(\\) to add support for custom types\\.","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/core/utils/src/dev-server/index.ts","lineNumber":126,"sourceCode":" * })\n * ```\n */\nexport function registerDevServerResource(data: ResourceRegistrationData): void\nexport function registerDevServerResource<T extends BaseResourceData>(\n  data: T\n): void\nexport function registerDevServerResource<T extends BaseResourceData>(\n  data: T\n): void {\n  // Skip registration in production or if HMR is disabled\n  if (!FeatureFlag.isFeatureEnabled(\"backend_hmr\") || isProduction()) {\n    return\n  }\n\n  const handler = resourceHandlers.get(data.type)\n\n  if (!handler) {\n    throw new Error(\n      `No handler registered for resource type \"${data.type}\". ` +\n        `Available types: ${Array.from(resourceHandlers.keys()).join(\", \")}. ` +\n        `Use registerResourceTypeHandler() to add support for custom types.`\n    )\n  }\n\n  try {\n    handler.validate(data)\n\n    const sourcePath = handler.resolveSourcePath(data)\n\n    const registry = getOrCreateRegistry(globalDevServerRegistry, sourcePath)\n\n    const entry = handler.createEntry(data)\n    addToRegistry(registry, data.type, entry)\n\n    const inverseKey = handler.getInverseKey(data)\n    addToInverseRegistry(inverseDevServerRegistry, inverseKey, sourcePath)","sourceCodeStart":108,"sourceCodeEnd":144,"githubUrl":"https://github.com/medusajs/medusa/blob/5e06e544a296b9033f20f71f11c559f81a0e5739/packages/core/utils/src/dev-server/index.ts#L108-L144","documentation":"Dev-server error from registerDevServerResource: the resource being registered has a `type` for which no handler is registered in the resourceHandlers map. Built-in types (job, step, subscriber, workflow) each have a handler; any other type string is rejected unless you first register a custom handler via registerResourceTypeHandler().","triggerScenarios":"Calling registerDevServerResource({ type: 'api-key' | 'widget' | 'route' | ... }) for a type with no handler; typos in the type string like 'workflows' or 'subscribber'; registering a custom resource kind before implementing its handler.","commonSituations":"Extending Medusa's dev server with new resource kinds (custom loaders, plugins with their own resource types); version drift where a type exists in newer framework code but the running dev server build lacks its handler; copy-paste registrations with a wrong type literal.","solutions":["Use one of the built-in types listed in the error message: job, step, subscriber, workflow.","Fix typos in the type string so it exactly matches a registered type.","For a genuinely custom type, implement a ResourceTypeHandler and call registerResourceTypeHandler(type, handler) before any registerDevServerResource call for it.","If the type should be built-in, upgrade/downgrade so the framework utils version matches the code performing registration."],"exampleFix":"// before\nregisterDevServerResource({ type: 'my-widget', ... }) // no handler\n\n// after\nregisterResourceTypeHandler('my-widget', myWidgetHandler)\nregisterDevServerResource({ type: 'my-widget', ... })","handlingStrategy":"validation","validationCode":"const BUILT_IN = ['job', 'step', 'subscriber', 'workflow']\nif (!BUILT_IN.includes(data.type)) {\n  throw new Error(`Register a handler for custom type \"${data.type}\" via registerResourceTypeHandler() first`)\n}","typeGuard":"function isKnownResourceType(type: unknown, handlers: Map<string, unknown>): type is string {\n  return typeof type === 'string' && handlers.has(type)\n}","tryCatchPattern":null,"preventionTips":["Restrict registration calls to built-in types unless you have registered a custom handler.","Register custom handlers once at startup before any resource registration.","Keep type literals in a union type so typos fail at compile time."],"tags":["dev-server","resource-type","handler","registration","extensibility"],"backgroundTag":"unsupported-resource-type","analyzedSha":"5e06e544a296b9033f20f71f11c559f81a0e5739","analyzedAt":"2026-08-27T07:24:39.599Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}