VVibeFlui

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"]
}
SourceMeaning
backendUse message returned by backend response or thrown error.
schemaUse messages.defaults from the schema.
resolverUse registry.messageResolvers[messages.resolver].
defaultUse 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.