Skip to content

Hooks

trigger

beforeaftermethodsmultidetails
yesyescreate, patch, update, removeyessource

Options

The options of the trigger hook are of type: Subcription or Subcription[] or (context: HookContext) => Promisable<Subscription | Subscription[]>. But what is a Subcription?

A subscription is an object with the following properties:

PropertyDescription
serviceThe service to subscribe to.
To be used if you share trigger options between several services/methods.

Type: string | string[]
optional - Default: undefined
methodThe method to subscribe to.
To be used if you share trigger options between several services/methods.

Type: string | string[]
optional - Default: undefined
conditionsDataCheck the context.data for something. Uses sift.js under the hood.
Replaces all {{ placeholders }} with the sub.view object. For more information, look at the View section down below.

Type: Record<string, any> | boolean
optional - Default: true
conditionsResultCheck the context.result for something. Uses sift.js under the hood.
Replaces all {{ placeholders }} with the sub.view object. For more information, look at the View section down below.

Type: Record<string, any> | boolean
optional - Default: true
conditionsParamsCheck the context.params for something. Uses sift.js under the hood.
Replaces all {{ placeholders }} with the sub.view object. For more information, look at the View section down below.

Type: Record<string, any> | boolean
optional - Default: true
fetchBeforeThe trigger hook lets you compare the result against the item before. This is disabled by default for performance reasons. If you use conditionsBefore, it will fetch the items in the before hook automatically. If you don't need conditionsBefore but your conditionsResult looks something like: { publishedAt: { $gt: '{{ before.publishedAt }}' } } you need to set fetchBefore:true explicitely

Type: boolean
optional - Default: false
conditionsBeforeCheck the before object from trigger before hook, if available. Uses sift.js under the hood.
Replaces all {{ placeholders }} with the sub.view object. For more information, look at the View section down below.

Type: Record<string, any> | boolean
optional - Default: true
viewThe trigger function provides some view properties by default. See the View chapter down below. You can extend the view, if you need to.

Type 1: Record<string, any>
Type 2: (view, item, items, subscriptions, context) => Promisable<Record<string, any>>
optional - Default: false
paramsYou can extend the params for the subscription, e.g. for population.

Type: (params: Params, context: HookContext) => (Promisable<Params>)
optional - Default: undefined
actionThe action, that will be run, if all checks pass for the subscription.

Type: ({ before, item }, { context, items, subscription, view }) => Promisable<any>
Type (batchMode=true): (changes: [change: { before, item }, options: { context, items, subscription, view }][], context) => Promisable<any>
optional - Default: undefined
batchModeEnables batch mode. In batch mode: If multiple items are passed to create, it will only run action once with all items matching the conditions.

Type: boolean
optional - Default: false
isBlockingWether the trigger hook should wait for the async action before continuing.

Type: boolean
optional - Default: true
anything elseYou can add whatever property you need for a subscription.

View

The concept of '' is heavily inspired by mustache.js where the render function takes a view object. That's why it's called view in feathers-trigger. Views can be used to transform conditionsData, conditionsBefore, conditionsResult and replace placeholder curly brackets strings with values. The trigger hook is capable of more complex conditions where you need to compare the result against data that is dynamic in the context.

Properties of views for mustache-like transformations of conditions have the following by default:

You can extend the views by the views option per subscription described above.

Action

The action from subscription is the function that runs, after all conditions are fulfilled. The function looks like the following:

js
const action = async (
  { before, item }, 
  { context, items, subscription, view }
) => {
  // do your own implementation
}

// In batch mode

const action = async (changes) => {
  for (const [{ before, item }, { context, items, subscription, view }] of changes) {
    // do your own implementation
  }
}

changesById

beforeaftermethodsmultidetails
yesyescreate, patch, update, removeyessource

Options

PropertyDescription
paramsWith the params options, you can manipulate params for changesById if you need to.

Type: (params: Params, context: HookContext) => (Params | Promise<Params>)
optional - Default: undefined
skipHooksUse find or _find for refetching

Type: boolean
optional - Default: false

Released under the MIT License.