AUR0157
Warning Message
AUR0157: Binding command <command-name> has already been registered.
Where <command-name>
is the name of the binding command (e.g., trigger
, for
, bind
) that was attempted to be registered again.
Description
This warning indicates that an attempt was made to register a binding command with a specific name, but another binding command with the same name was already registered in the application's configuration. Binding commands define how specific binding syntaxes (like .bind
, .trigger
, .call
, for.repeat
) are processed by the template compiler. Each command name must be unique.
Note: This is typically logged as a warning. The application might continue, but only the first registration for the given command name will be effective. Overwriting built-in commands or duplicating custom commands can lead to unpredictable compilation and runtime binding behavior.
Cause
Duplicate Custom Command Registration: Calling
Aurelia.register()
or a similar registration method multiple times with the same custom binding command class or different classes using the same command name via the@bindingCommand
decorator or configuration object.Attempting to Overwrite Built-in Commands: Defining a custom binding command with a name that conflicts with a standard Aurelia command (e.g.,
bind
,trigger
,for
,one-time
,to-view
,from-view
,two-way
,capture
,call
). While possible, this is generally discouraged unless you fully understand the implications.Naming Collision: Accidentally defining two different custom binding command classes that use the same command name.
Solution
Ensure Unique Names: Choose a unique name for each custom binding command. Avoid using names of built-in commands unless intentionally replacing core functionality (use with caution).
Register Once: Ensure each binding command (especially custom ones) is registered only once. Review your application's registration configuration, typically in
main.ts
or whereAurelia.register(...)
is called with binding command configurations.Refactor/Rename: If you have two distinct custom commands that ended up with the same name, rename one of them.
Example
// my-custom-command.ts
import { bindingCommand, type BindingCommandInstance, type BindingInfo, type ExpressionParser, type IAttrMapper, type BindingInstruction, PropertyBindingInstruction } from 'aurelia';
// Correct: Defining a custom command
@bindingCommand('my-cmd')
export class MyCustomBindingCommand implements BindingCommandInstance {
public readonly type = 'bind'; // Or other valid type
build(info: BindingInfo, parser: ExpressionParser, mapper: IAttrMapper): BindingInstruction {
// Command logic...
// Example: return new PropertyBindingInstruction(info.expr, info.attr.target);
return null! // Placeholder
}
}
// another-command.ts - Incorrect: Uses the same name
import { bindingCommand, type BindingCommandInstance } from 'aurelia';
@bindingCommand('my-cmd') // Causes AUR0157 if both are registered
export class AnotherCustomBindingCommand implements BindingCommandInstance {
// ... command logic ...
public readonly type = 'bind';
build(info: BindingInfo, parser: ExpressionParser, mapper: IAttrMapper): BindingInstruction { return null!; }
}
// trigger-command-override.ts - Discouraged: Overwriting built-in
import { bindingCommand, type BindingCommandInstance } from 'aurelia';
@bindingCommand('trigger') // Causes AUR0157, overwrites standard .trigger
export class TriggerOverrideCommand implements BindingCommandInstance {
// ... command logic ...
public readonly type = 'trigger';
build(info: BindingInfo, parser: ExpressionParser, mapper: IAttrMapper): BindingInstruction { return null!; }
}
// --- main.ts ---
import { Aurelia, BindingCommand } from 'aurelia';
import { MyCustomBindingCommand } from './my-custom-command';
import { AnotherCustomBindingCommand } from './another-command';
// import { TriggerOverrideCommand } from './trigger-command-override';
// Incorrect: Attempting to register two commands with the same name 'my-cmd'
// Aurelia.register(
// BindingCommand.define('my-cmd', MyCustomBindingCommand),
// BindingCommand.define('my-cmd', AnotherCustomBindingCommand)
// ) /* ... */;
// Correct: Register only one command for the name 'my-cmd'
Aurelia.register(
BindingCommand.define('my-cmd', MyCustomBindingCommand)
) /* ... */;
// Discouraged: Overwriting trigger (will log AUR0157)
// Aurelia.register(
// BindingCommand.define('trigger', TriggerOverrideCommand)
// ) /* ... */;
Debugging Tips
Search your project for
@bindingCommand('<command-name>')
orBindingCommand.define('<command-name>', ...)
usages for the command name mentioned in the warning.Review your main configuration/registration file (
main.ts
or similar) to ensure commands are registered only once.Compare your custom command names against the list of built-in Aurelia binding commands to avoid unintentional conflicts.
Last updated
Was this helpful?