Message Resolvers
Message resolvers customize UI messages.
VibeFlui can resolve messages from backend responses, schema defaults, registry resolvers, or built-in defaults depending on messages.sourcePriority.
Schema usage
schemas/users/users.schema.ts
TS
export const usersSchema = {
version: "1.0.0",
resource: "users",
messages: {
sourcePriority: ["backend", "schema", "resolver", "default"],
defaults: {
createSuccess: "User created successfully.",
updateSuccess: "User updated successfully.",
deleteSuccess: "User deleted successfully."
},
resolver: "users.messages"
},
registry: {
messageResolvers: ["users.messages"]
}
} as const;Runtime registry
lib/vibeflui/registry.ts
TS
import { createRegistry } from "@vibeflui/core";
export const registry = createRegistry({
messageResolvers: {
"users.messages": (key, _context) => {
const messages: Record<string, string> = {
loadError: "Users could not be loaded.",
emptyState: "No users found.",
confirmDeleteTitle: "Delete user?"
};
return messages[key];
}
}
});Source priority
schemas/users/users.schema.ts
TS
messages: {
sourcePriority: ["backend", "schema", "resolver", "default"]
}| Source | Meaning |
|---|---|
backend | Use message returned by backend response or thrown error. |
schema | Use messages.defaults from the schema. |
resolver | Use registry.messageResolvers[messages.resolver]. |
default | Use built-in default messages. |
Backend response message
JSON
{
"status": false,
"code": 422,
"message": "Email is already used"
}With default priority, this backend message should win over schema and resolver messages.
When to use message resolvers
Use message resolvers for:
- Localization.
- Domain-specific defaults.
- Shared message catalogs.
- Adapter-specific wording.
- Local demos with controlled messages.