UNPKG

first-npm-package-nicule

Version:

This isi first npm package

34 lines (29 loc) 1.35 kB
import { makePropDecorator } from '../../google-decorator-factories'; import { BindDecorator } from '../bind.decorator'; import { Hypermedia, HypermediaAction } from 'first-npm-package-nicule/core'; interface ActionBindingSettings { transforms?: Array<(hypermediaAction: HypermediaAction, hypermedia: Hypermedia) => HypermediaAction>; secure?: boolean; } export interface BindActionDecorator { (actionName: string, settings?: ActionBindingSettings): any; new(actionName: string, settings?: ActionBindingSettings): any; } export const Action: BindActionDecorator = makePropDecorator('BindAction', (actionName: string, { transforms }: ActionBindingSettings = {} as any) => { return ({ binding: { priority: 1, bind: hypermedia => { const { actions = [] } = hypermedia; let action = actions.find(({ name }) => actionName === name); if (action === undefined) { return undefined; } if (transforms instanceof Array && transforms.length > 0) { action = transforms.reduce((newAction, transformer) => transformer(newAction, hypermedia), action); } return action; } } as BindDecorator }) as any; });