Skip to content

@iamcalegari/mongoat / Pre

Function: Pre()

Pre(method, fn): (_value, context) => void

Defined in: src/schema/decorators.ts:170

Registra um hook pre no pipeline de hooks JÁ EXISTENTE do Model (nenhum novo dispatch) — aplicável em CLASSE e em CAMPO:

  • Nível de CLASSE: fn recebe o ctx COMPLETO, mesmo contrato de .pre()/props.hooks ((ctx) => void | unknown | Promise<...>).
  • Nível de CAMPO: açúcar que transforma SÓ o valor do campo — fn tem a assinatura (value, ctx) => novoValor. NÃO retorna um novo inicializador de campo TC39 (o mecanismo de field-initializer do TC39 nunca é usado aqui) — apenas grava metadata; o registro real no pipeline acontece em extractDecoratorHooks (src/schema/compile.ts), consumido pelo constructor do Model.

A ORDEM de execução final por método é campo → classe → hooks do config do Model → .pre()/.post() encadeados — fixada no wiring do Model, não aqui (este decorator só ACUMULA metadata).

method é validado contra o enum METHODS JÁ NA DECORAÇÃO — um nome de método inexistente estoura MongoatValidationError com code: 'INVALID_HOOK_METHOD' imediatamente, em vez de registrar um hook que nunca dispara.

Parameters

method

string

fn

(...args) => unknown

Returns

(_value, context) => void

Example

typescript
class UserSchema {
  @Pre('insert', (value, ctx) => hashPassword(value))
  @Prop({ bsonType: 'string' })
  password!: string;
}