Skip to content

routier-collection


routier-collection / core/src / SchemaTransform

Class: SchemaTransform<T, TModifiers> ​

Defined in: core/src/schema/table/SchemaTransform.ts:30

A two-way transform between the value your application holds and the value that is stored.

Declared in .modify(), beside computed and function, because it belongs to the same family: a property whose stored form is derived rather than assigned. computed derives one way and cannot come back; a transform declares both directions.

ts
const cipher = myEncryption(keyring);   // whatever you use — {} with `to` and `from`

const userSchema = s.define('users', {
    id: s.string().key().identity(),
    ssn: s.string(),
}).modify(x => ({
    ssn: x.transform(cipher),
})).compile();

to and from may be async, and they are held as LIVE references — never stringified into generated code the way computed is. So they close over whatever they need, which is why there is no injected argument to pass and no property to repeat.

Nothing about this is encryption. Encryption is one thing a caller might write here; compression, redaction, unit conversion and a custom codec are others. The library ships no behaviour of its own for this — it only carries what you supply.

Extends ​

Type Parameters ​

T ​

T extends any

TModifiers ​

TModifiers extends SchemaModifiers = never

Constructors ​

Constructor ​

new SchemaTransform<T, TModifiers>(transform): SchemaTransform<T, TModifiers>

Defined in: core/src/schema/table/SchemaTransform.ts:53

Parameters ​

transform ​

PropertyTransform<T>

Returns ​

SchemaTransform<T, TModifiers>

Overrides ​

SchemaBase.constructor

Properties ​

modifiers ​

modifiers: TModifiers

Defined in: core/src/schema/property/base/SchemaBase.ts:6

Inherited from ​

SchemaBase.modifiers


isNullable ​

isNullable: boolean = false

Defined in: core/src/schema/property/base/SchemaBase.ts:8

Inherited from ​

SchemaBase.isNullable


isUnmapped ​

isUnmapped: boolean = false

Defined in: core/src/schema/property/base/SchemaBase.ts:9

Inherited from ​

SchemaBase.isUnmapped


isOptional ​

isOptional: boolean = false

Defined in: core/src/schema/property/base/SchemaBase.ts:10

Inherited from ​

SchemaBase.isOptional


isKey ​

isKey: boolean = false

Defined in: core/src/schema/property/base/SchemaBase.ts:11

Inherited from ​

SchemaBase.isKey


isIdentity ​

isIdentity: boolean = false

Defined in: core/src/schema/property/base/SchemaBase.ts:12

Inherited from ​

SchemaBase.isIdentity


isReadonly ​

isReadonly: boolean = false

Defined in: core/src/schema/property/base/SchemaBase.ts:13

Inherited from ​

SchemaBase.isReadonly


isDistinct ​

isDistinct: boolean = false

Defined in: core/src/schema/property/base/SchemaBase.ts:14

Inherited from ​

SchemaBase.isDistinct


transform ​

transform: PropertyTransform<unknown> = null

Defined in: core/src/schema/property/base/SchemaBase.ts:19

Set by .modify(x => x.transform(...)). A live reference, never stringified. null when the property is stored as it is.

Inherited from ​

SchemaBase.transform


indexes ​

indexes: string[] = []

Defined in: core/src/schema/property/base/SchemaBase.ts:20

Inherited from ​

SchemaBase.indexes


fromPropertyName ​

fromPropertyName: string = null

Defined in: core/src/schema/property/base/SchemaBase.ts:21

Inherited from ​

SchemaBase.fromPropertyName


dimensions ​

dimensions: number = null

Defined in: core/src/schema/property/base/SchemaBase.ts:35

How many numbers a vector holds. null for every other type.

Declared here rather than on SchemaVector because a modifier WRAPS rather than extends: s.vector(1536).optional() is a SchemaOptional, and anything reachable only through the original class is lost the moment a modifier is added. type survives for exactly this reason — the copy constructor below carries it — and a dimension count has to travel with it, or an optional vector reaches a backend as a vector of unknown width and cannot be given a column.

innerSchema is the cautionary example: it lives on SchemaArray alone, so a modified array arrives with no element type and clones through the slow path.

Inherited from ​

SchemaBase.dimensions


maxLength ​

maxLength: number = null

Defined in: core/src/schema/property/base/SchemaBase.ts:50

The longest string the property is declared to hold. null for every other type, and for a string that declares nothing.

Declared here rather than on SchemaString for the same reason as dimensions above: s.string({ maxLength: 4000 }).optional() is a SchemaOptional, so anything reachable only through SchemaString is lost the moment a modifier is added.

A declaration, never a validation. Core does not check a value against it and does not truncate. The backend that can use the number does: MySQL gives the column VARCHAR(maxLength) instead of the blanket VARCHAR(255). Every other backend ignores it, because a string column that is already unbounded cannot be made more correct by knowing a bound.

Inherited from ​

SchemaBase.maxLength


isSearchable ​

isSearchable: boolean = false

Defined in: core/src/schema/property/base/SchemaBase.ts:62

Whether this string may be tokenised into a full-text search index.

Set by .searchable(), and only ever true on a string. Eligibility, not membership: a collection that never declares .searchIndex() indexes nothing regardless.

Copied by the constructor below, so s.string().searchable().optional() stays searchable. Every flag on this class is copied for the same reason: a modifier WRAPS rather than extends, so anything the constructor forgets is silently dropped the moment a property gains one more modifier.

Inherited from ​

SchemaBase.isSearchable


foreignKeyDefinition ​

foreignKeyDefinition: ForeignKey<unknown> = null

Defined in: core/src/schema/property/base/SchemaBase.ts:64

Inherited from ​

SchemaBase.foreignKeyDefinition


tags ​

tags: string[] = []

Defined in: core/src/schema/property/base/SchemaBase.ts:65

Inherited from ​

SchemaBase.tags


injected ​

injected: any = null

Defined in: core/src/schema/property/base/SchemaBase.ts:66

Inherited from ​

SchemaBase.injected


defaultValue ​

defaultValue: DefaultValue<T> = null

Defined in: core/src/schema/property/base/SchemaBase.ts:67

Inherited from ​

SchemaBase.defaultValue


valueSerializer ​

valueSerializer: PropertySerializer<T> = null

Defined in: core/src/schema/property/base/SchemaBase.ts:68

Inherited from ​

SchemaBase.valueSerializer


valueDeserializer ​

valueDeserializer: PropertyDeserializer<T> = null

Defined in: core/src/schema/property/base/SchemaBase.ts:69

Inherited from ​

SchemaBase.valueDeserializer


type ​

type: SchemaTypes

Defined in: core/src/schema/property/base/SchemaBase.ts:70

Inherited from ​

SchemaBase.type


functionBody ​

functionBody: FunctionBody<any, T>

Defined in: core/src/schema/property/base/SchemaBase.ts:71

Inherited from ​

SchemaBase.functionBody


literals ​

readonly literals: T[] = []

Defined in: core/src/schema/property/base/SchemaBase.ts:73

Inherited from ​

SchemaBase.literals


instance ​

instance: T

Defined in: core/src/schema/table/SchemaTransform.ts:32

Overrides ​

SchemaBase.instance

Methods ​

bindTo() ​

bindTo(underlying): SchemaTransform<T, TModifiers>

Defined in: core/src/schema/table/SchemaTransform.ts:41

Bound to the property it replaces when the schema is assembled.

You do not pass the property in. .modify() already knows which one you mean — it is the key you assigned to — so repeating s.string() would be ceremony for nothing.

Parameters ​

underlying ​

SchemaBase<T, TModifiers>

Returns ​

SchemaTransform<T, TModifiers>

Released under the MIT License.