# AUR0759

## Error Message

`AUR0759: No attribute definition found for type <TypeName>`

Where `<TypeName>` is the name of the class that was expected to be a custom attribute.

## Description

This error occurs when Aurelia attempts to retrieve the definition metadata for a custom attribute class but fails to find it. Custom attribute definitions contain essential information like the attribute's name, bindables, and other configurations, typically provided via the `@customAttribute` decorator or inferred through conventions.

## Cause

The most common causes are:

1. **Missing Decorator/Convention:** The class intended to be a custom attribute is missing the `@customAttribute` decorator, and it doesn't follow a naming convention that allows Aurelia to automatically recognize it as such (if conventions are enabled).
2. **Incorrect Registration:** The custom attribute class might be defined but not correctly registered as a dependency within the component or application scope where it's being used.
3. **Build/Bundling Issues:** Problems during the build process might prevent the decorator metadata from being correctly emitted or associated with the class.
4. **Circular Dependencies:** Complex circular dependencies involving the custom attribute class might interfere with metadata retrieval.

## Solution

1. **Apply Decorator:** Ensure the class has the `@customAttribute('attribute-name')` decorator applied, specifying the HTML attribute name.

   ```typescript
   import { customAttribute } from 'aurelia';

   @customAttribute('my-highlight')
   export class MyHighlightAttribute {
     // ... attribute logic ...
   }
   ```
2. **Use Naming Convention:** If relying on conventions, ensure the class name follows the expected pattern (e.g., `MyHighlightCustomAttribute` might conventionally map to `my-highlight`). Verify that conventions are enabled and configured correctly in your Aurelia setup.
3. **Register Dependency:** Make sure the custom attribute is registered appropriately, either globally in `main.ts` or locally in the `dependencies` array of the component/element using it.

   ```typescript
   // In main.ts for global registration
   import { MyHighlightAttribute } from './my-highlight-attribute';
   Aurelia.register(MyHighlightAttribute /* ... other registrations */)
          // ...

   // Or in a component for local registration
   import { MyHighlightAttribute } from './my-highlight-attribute';
   import { customElement } from 'aurelia';

   @customElement({
     name: 'my-component',
     template: `<div my-highlight>...</div>`,
     dependencies: [MyHighlightAttribute]
   })
   export class MyComponent { }
   ```
4. **Check Build Configuration:** Verify your build process (e.g., Webpack, Vite configuration) correctly handles decorators and TypeScript/JavaScript compilation. Ensure `emitDecoratorMetadata` and `experimentalDecorators` (or equivalent flags) are enabled in your `tsconfig.json`.
5. **Resolve Circular Dependencies:** Analyze and refactor any circular dependencies involving the attribute class.

## Debugging Tips

* Verify the `@customAttribute` decorator is present and correctly spelled on the class definition.
* Check the name provided to the decorator (or inferred by convention) matches the usage in the HTML template.
* Confirm the attribute class is imported and included in the `dependencies` array of the consuming component or registered globally.
* Inspect the compiled JavaScript output to see if the decorator metadata seems present.
* Temporarily replace the custom attribute usage with standard HTML/bindings to rule out other template issues.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.aurelia.io/developer-guides/error-messages/runtime-html/aur0759.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
