Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

crap.hooks

Global hook registration API. Register hooks in init.lua to fire for all collections.

crap.hooks.register(event, fn)

Register a hook function for a lifecycle event.

crap.hooks.register("before_change", function(ctx)
    crap.log.info("[audit] " .. ctx.operation .. " on " .. ctx.collection)
    return ctx
end)

Parameters

ParameterTypeDescription
eventstringLifecycle event name
fnfunctionHook function receiving a context table

Events

EventDescription
before_validateBefore field validation on create/update
before_changeAfter validation, before write on create/update
after_changeAfter create/update (runs in transaction, has CRUD access)
before_readBefore returning read results
after_readAfter read, before response (no CRUD access)
before_deleteBefore delete
after_deleteAfter delete (runs in transaction, has CRUD access)
before_broadcastBefore live event broadcast (can suppress or transform)
before_renderBefore rendering admin pages (receives full template context, can modify it; global-only, no CRUD access)

crap.hooks.remove(event, fn)

Remove a previously registered hook. Uses rawequal for identity matching — you must pass the exact same function reference.

local my_hook = function(ctx) return ctx end

crap.hooks.register("before_change", my_hook)
crap.hooks.remove("before_change", my_hook)

Parameters

ParameterTypeDescription
eventstringLifecycle event name
fnfunctionThe exact function reference to remove

crap.hooks.list(event)

Return the list of registered hook functions for an event. Useful for debugging or introspection.

local hooks = crap.hooks.list("before_change")
print(#hooks)  -- number of registered before_change hooks

Parameters

ParameterTypeDescription
eventstringLifecycle event name

Returns

A Lua table (array) of the registered hook functions. Empty table if none are registered.