Computed Values
Computed resolvers derive values from row data, form values, or runtime context.
Use computed values when the schema needs a display value or generated form value without embedding a function in the schema.
Computed table column
schemas/users/user-table.schema.ts
TS
export const usersSchema = {
version: "1.0.0",
resource: "users",
table: {
columns: [
{
key: "displayName",
label: "Display Name",
type: "computed",
computed: "users.displayName"
}
]
},
registry: {
computedResolvers: ["users.displayName"]
}
} as const;Computed form field
schemas/users/user-form.schema.ts
TS
export const userFormSchema = {
version: "1.0.0",
resource: "users",
form: {
fields: [
{ name: "name", label: "Name", type: "text" },
{
name: "slug",
label: "Slug",
type: "text",
computed: "users.slugFromName",
computedFrom: "name"
}
]
},
registry: {
computedResolvers: ["users.slugFromName"]
}
} as const;computedFrom lists the source field dependencies for a computed form field. When dependencies are present, VibeFlui reuses the previous computed value until one of those source values changes.
Runtime registry
lib/vibeflui/registry.ts
TS
import { createRegistry } from "@vibeflui/core";
export const registry = createRegistry({
computedResolvers: {
"users.displayName": ({ row }) => {
return [row?.name, row?.email].filter(Boolean).join(" · ");
},
"users.slugFromName": ({ values }) => {
return String(values?.name ?? "")
.trim()
.toLowerCase()
.replace(/\s+/g, "-");
}
}
});computed and compute
Table columns support both computed and compute keys. Prefer computed in new documentation.
schemas/users/user-table-columns.ts
TS
{
key: "displayName",
type: "computed",
computed: "users.displayName"
}Computed values are not backend truth
Computed values are useful for UI convenience. If a computed value must be stored or trusted, recompute or validate it on the backend.