Skip to content

Field

const Field: object

Defined in: fields.ts:37

array<TElementDef>(element, options): FieldDefinition<InferFieldType<TElementDef>[]>

Defines an array field for a model property. Supports the SurrealDB max option for array length.

TElementDef extends FieldDefinition<unknown>

TElementDef

The field definition for the array’s elements.

ArrayFieldOptions<InferFieldType<TElementDef>> = {}

ArrayFieldOptions (supports max and all FieldOptions)

FieldDefinition<InferFieldType<TElementDef>[]>

FieldDefinition<Array>

tags: Field.array(Field.string(), { max: 10 })
posts: Field.array(Field.record((): any => Post), { max: 100 })

bool(options): FieldDefinition<boolean>

Defines a boolean field for a model property.

FieldOptions = {}

Optional field options (default, permissions, etc.)

FieldDefinition<boolean>

FieldDefinition

isActive: Field.bool({ default: 'true' })

custom<T>(typeString, options): FieldDefinition<T>

Defines a field with a custom SurrealQL type string. Useful for advanced or not-yet-implemented types.

T

string

The raw SurrealQL type (e.g., ‘duration’, ‘geometry’).

CustomFieldOptions = {}

Optional custom field options. Use { flexible: true } for FLEXIBLE custom fields.

FieldDefinition<T>

FieldDefinition

duration: Field.custom<number>('duration')
meta: Field.custom<object>('object', { flexible: true })

datetime(options): FieldDefinition<Date>

Defines a datetime field for a model property.

FieldOptions = {}

Optional field options (default, permissions, etc.)

FieldDefinition<Date>

FieldDefinition

createdAt: Field.datetime({ default: 'time::now()' })

number(options): FieldDefinition<number>

Defines a number field for a model property.

FieldOptions = {}

Optional field options (assert, default, permissions, etc.)

FieldDefinition<number>

FieldDefinition

age: Field.number({ assert: '$value >= 0', default: '0' })

object<TSchema>(schema, options): FieldDefinition<InferShapeFromFields<TSchema>>

Defines a nested object field for a model property. The schema generator will handle defining sub-fields with dot notation.

TSchema extends Record<string, FieldDefinition<unknown>>

TSchema

The field definitions for the nested object.

ObjectFieldOptions = {}

Object field options. Use { flexible: true } to emit SurrealQL FLEXIBLE.

FieldDefinition<InferShapeFromFields<TSchema>>

FieldDefinition

profile: Field.object({
bio: Field.string(),
website: Field.option(Field.string()),
}, { flexible: true })

option<FD>(fieldDefinition): FieldDefinition<undefined | InferFieldType<FD>>

Makes a field optional (able to accept NONE/null). Wraps the field’s type in option<...>.

FD extends FieldDefinition<unknown>

FD

The field to make optional. All base properties (assert, default, permissions, etc.) are inherited from FieldOptions.

FieldDefinition<undefined | InferFieldType<FD>>

FieldDefinition<T | undefined>

nickname: Field.option(Field.string())

record<TModel>(tableClassThunk, options): FieldDefinition<InstanceType<TModel> | RecordId<TModel["_tableName"]>>

Defines a record link field, connecting to another table. Generates the record<...> type string for SurrealDB relations.

TModel extends AnyModelClass

() => TModel

A thunk returning the model class to link to (avoids circular dependencies).

RecordFieldOptions = {}

RecordFieldOptions (reference, onDelete, etc.)

FieldDefinition<InstanceType<TModel> | RecordId<TModel["_tableName"]>>

FieldDefinition<InstanceType | RecordId>

author: Field.record(() => User)
comments: Field.array(Field.record((): any => Comment), { max: 100 })

string(options): FieldDefinition<string>

Defines a string field for a model property.

FieldOptions = {}

Optional field options (assert, default, permissions, etc.)

FieldDefinition<string>

FieldDefinition

name: Field.string({ assert: '$value.length > 3', comment: 'User name' })