0.1.2 • Published 3 years ago

hookify-object v0.1.2

Weekly downloads
9
License
MIT
Repository
github
Last release
3 years ago

hookify-object

Wrap an object with ES6 proxy to add hooks capabilities through an event emitter.

npm version codecov

Installation

$ npm install --save hookify-object

Usage

Hookify-object provides severals hooks for an object :

  • Before/after call a method;
  • After resolve/reject a promise;
  • Before/after set a object property;
  • Before/after delete a property.

Example

Here is a basic usage to get the execution time of the object's methods :

const hookify = require('hookify-object')  
  
const obj = {  
  process () {  
    /* ... */  
  },  
}  
  
const objWithHooks = hookify(obj)  
  
objWithHooks.hooks.on('beforeCall', (context) => {  
  const { name } = context  
  console.time(name)  
})  
  
objWithHooks.hooks.on('afterCall', (context) => {  
  const { name } = context  
  console.timeEnd(name)  
})  
  
objWithHooks.process() 

API

hookify(target)

Add hook capabilities to a target object.

Parameters

NameTypeDefaultDescription
targetobject-The object on which we want to add the hook capabilities

Return value

TypeDescription
ProxyThe hook wrapper of the target object

Example

const hookify = require('hookify-object')   
      
const obj = {}    
        
const objWithHooks = hookify(obj)  

proxy.hooks.on(hookName, handler)

Attach a handler for the hook named hookName.

NameTypeDefaultDescription
hookNamestring-The hook's name
handlerFunction-The handler function for the specified hook (see bellow)

handler (context)

Check each hook to know the structure of the context object.

NameTypeDefaultDescription
contextobject-Contains the context of the hook

Hooks list

beforeCall:methodName

Called before calling a method. You can specify a unique method via the methodName option.

Example

objWithHooks.hooks.on('beforeCall', (context) => {  
  /* Call before the call of any method */  
})  
  
objWithHooks.hooks.on('beforeCall:test', (context) => {  
  /* Call before the call of the "test" method */  
})

context object

NameTypeDefaultDescription
selfobject-The object wrapped by the hook proxy
namestring-The name of the called method
paramsArray-The parameters of the called method

afterCall:methodName

Called after calling a method. You can specify a unique method via the methodName option.

Example

objWithHooks.hooks.on('afterCall', (context) => {  
  /* Call after the call of any method */  
})  
  
objWithHooks.hooks.on('afterCall:test', (context) => {  
  /* Call after the call of the "test" method */  
}) 

context object

NameTypeDefaultDescription
selfobject-The object wrapped by the hook proxy
namestring-The name of the called method
paramsArray-The parameters of the called method
result*-The returned value of the called method

afterResolve:methodName

Called when the promise returned by the method has resolved. You can specify a unique method via the methodName option.

Example

objWithHooks.hooks.on('afterResolve', (context) => {  
  /* Call after resolve the promise of any method */  
})  
  
objWithHooks.hooks.on('afterResolve:testAsync', (context) => {  
  /* Call after resolve the promise of the "testAsync" method */  
})

context object

NameTypeDefaultDescription
selfobject-The object wrapped by the hook proxy
namestring-The name of the called method
paramsArray-The parameters of the called method
result*-The returned value of the promise

afterReject:methodName

Called when the promise returned by the method has rejected. You can specify a unique method via the methodName option.

Example

objWithHooks.hooks.on('afterReject', (context) => {  
  /* Call after reject the promise of any method */  
})  
  
objWithHooks.hooks.on('afterReject:testAsync', (context) => {  
  /* Call after reject the promise of the "testAsync" method */  
})

context object

NameTypeDefaultDescription
selfobject-The object wrapped by the hook proxy
namestring-The name of the called method
paramsArray-The parameters of the called method
errorsArray-The returned errors of the promise

beforeSet:propertyName

Called before setting a property value. You can specify a unique property via the propertyName option.

Example

objWithHooks.hooks.on('beforeSet', (context) => {  
  /* Call before set any property */  
})  
  
objWithHooks.hooks.on('beforeSet:value', (context) => {  
  /* Call before set the property "value" */  
})

context object

NameTypeDefaultDescription
selfobject-The object wrapped by the hook proxy
namestring-The name of the property
value*-The new value of the property to set

afterSet:propertyName

Called after setting a property value. You can specify a unique property via the propertyName option.

Example

objWithHooks.hooks.on('afterSet', (context) => {  
  /* Call after set any property */  
})  
  
objWithHooks.hooks.on('afterSet:value', (context) => {  
  /* Call after set the property "value" */  
})

context object

NameTypeDefaultDescription
selfobject-The object wrapped by the hook proxy
namestring-The name of the property
value*-The new value of the property to set

beforeDelete:propertyName

Called before deleting a property via the delete instruction. You can specify a unique property via the propertyName option.

Example

objWithHooks.hooks.on('beforeDelete', (context) => {  
  /* Call before delete any property */  
})  
  
objWithHooks.hooks.on('beforeDelete:value', (context) => {  
  /* Call before delete the property "value" */  
})

context object

NameTypeDefaultDescription
selfobject-The object wrapped by the hook proxy
namestring-The name of the property

afterDelete:propertyName

Called after deleting a property via the delete instruction. You can specify a unique property via the propertyName option.

Example

objWithHooks.hooks.on('afterDelete', (context) => {  
  /* Call after delete any property */  
})  
  
objWithHooks.hooks.on('afterDelete:value', (context) => {  
  /* Call after delete the property "value" */  
})

context object

NameTypeDefaultDescription
selfobject-The object wrapped by the hook proxy
namestring-The name of the property