{"record":{"id":"7eff6e3a859effa4","repo":"emberjs/ember.js","slug":"attempted-to-resolve-value-which-was-expecte","errorCode":null,"errorMessage":"Attempted to resolve `${value}`, which was expected to be a component, but nothing was found.","messagePattern":"Attempted to resolve `(.+?)`, which was expected to be a component, but nothing was found\\.","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/@glimmer/runtime/lib/references/curry-value.ts","lineNumber":56,"sourceCode":"    } else if (type === CURRIED_COMPONENT && typeof value === 'string' && value) {\n      // Only components should enter this path, as helpers and modifiers do not\n      // support string based resolution\n\n      if (DEBUG) {\n        if (isStrict) {\n          throw new Error(\n            `Attempted to resolve a dynamic component with a string definition, \\`${value}\\` in a strict mode template. In strict mode, using strings to resolve component definitions is prohibited. You can instead import the component definition and use it directly.`\n          );\n        }\n\n        let resolvedDefinition =\n          expect(\n            resolver,\n            'BUG: expected resolver for curried component definitions'\n          ).lookupComponent?.(value, owner) ?? null;\n\n        if (!resolvedDefinition) {\n          throw new Error(\n            `Attempted to resolve \\`${value}\\`, which was expected to be a component, but nothing was found.`\n          );\n        }\n      }\n\n      curriedDefinition = curry(type, value, owner, args);\n    } else if (isIndexable(value)) {\n      curriedDefinition = curry(type, value, owner, args);\n    } else {\n      curriedDefinition = null;\n    }\n\n    lastValue = value;\n\n    return curriedDefinition;\n  });\n}\n","sourceCodeStart":38,"sourceCodeEnd":74,"githubUrl":"https://github.com/emberjs/ember.js/blob/26f97246a8bf2e28edf26ac3093da2e86c04ffc5/packages/@glimmer/runtime/lib/references/curry-value.ts#L38-L74","documentation":"In a DEBUG build with a resolver, createCurryRef attempts resolver.lookupComponent for a string-based curried component definition. If the resolver returns nothing, it throws this error: the named component does not exist under the given owner/resolver.","triggerScenarios":"Passing a string component name to `{{component ...}}` in a resolver-based (loose-mode) template where no component with that name/dasherized path is registered, e.g. a typo like `{{component \"foo-barr\"}}` or the component lives in a different namespace the resolver can't see.","commonSituations":"Component renamed or moved so the resolver lookup misses; dynamically computed names with typos; pod/module structure changes (e.g. after Embroider migration) breaking resolution.","solutions":["Verify the component exists at the expected path (e.g. app/components/foo-bar.js|gjs|hbs) and the string matches its dasherized name exactly.","Import the component directly and pass the definition instead of a string.","Log/print the computed name at runtime to catch dynamically built names with typos.","Confirm the owner/app instance the resolver uses actually contains the component (addon mounted correctly)."],"exampleFix":"// before\nthis.kind = 'catridge-card'; // typo\n<Card @body={{component this.kind}} />\n\n// after\nthis.kind = 'cartridge-card';\n// or better, in strict mode:\nimport CartridgeCard from './cartridge-card';\n<Card @body={{CartridgeCard}} />","handlingStrategy":"validation","validationCode":"function assertComponentResolves(resolver, name, owner) {\n  const def = resolver.lookupComponent?.(name, owner);\n  if (!def) throw new Error(`Component '${name}' not found — check spelling/registration`);\n  return def;\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep dynamic component names in one constant list you can lint against the components directory.","Prefer direct imports over string names even in loose mode.","Re-check names after moving/renaming components (search for old dasherized names).","Test dynamic rendering paths so unresolved names fail in CI, not production."],"tags":["ember","glimmer","resolver","dynamic-components","strict-mode"],"backgroundTag":"component-not-resolved","analyzedSha":"26f97246a8bf2e28edf26ac3093da2e86c04ffc5","analyzedAt":"2026-09-01T05:01:28.182Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}