Dark Mode

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Wrap an object with ES6 proxy to add hooks capabilities

License

Notifications You must be signed in to change notification settings

arkerone/hookify-object

Repository files navigation

hookify-object

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

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 { name } = context console.time(name) }) objWithHooks.hooks.on('afterCall', (context) => { const { name } = context console.timeEnd(name) }) objWithHooks.process() ">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

Name Type Default Description
target object - The object on which we want to add the hook capabilities

Return value

Type Description
Proxy The 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.

Name Type Default Description
hookName string - The hook's name
handler Function - The handler function for the specified hook (see bellow)

handler (context)

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

Name Type Default Description
context object - 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

{ /* Call before the call of any method */ }) objWithHooks.hooks.on('beforeCall:test', (context) => { /* Call before the call of the "test" method */ })">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

Name Type Default Description
self object - The object wrapped by the hook proxy
name string - The name of the called method
params Array - The parameters of the called method

afterCall[:methodName]

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

Example

{ /* Call after the call of any method */ }) objWithHooks.hooks.on('afterCall:test', (context) => { /* Call after the call of the "test" method */ }) ">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

Name Type Default Description
self object - The object wrapped by the hook proxy
name string - The name of the called method
params Array - 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

{ /* Call after resolve the promise of any method */ }) objWithHooks.hooks.on('afterResolve:testAsync', (context) => { /* Call after resolve the promise of the "testAsync" method */ })">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

Name Type Default Description
self object - The object wrapped by the hook proxy
name string - The name of the called method
params Array - 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

{ /* Call after reject the promise of any method */ }) objWithHooks.hooks.on('afterReject:testAsync', (context) => { /* Call after reject the promise of the "testAsync" method */ })">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

Name Type Default Description
self object - The object wrapped by the hook proxy
name string - The name of the called method
params Array - The parameters of the called method
errors Array - 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

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

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

context object

Name Type Default Description
self object - The object wrapped by the hook proxy
name string - 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

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

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

context object

Name Type Default Description
self object - The object wrapped by the hook proxy
name string - 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

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

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

context object

Name Type Default Description
self object - The object wrapped by the hook proxy
name string - 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

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

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

context object

Name Type Default Description
self object - The object wrapped by the hook proxy
name string - The name of the property

About

Wrap an object with ES6 proxy to add hooks capabilities

Resources

Readme

License

MIT license

Stars

Watchers

Forks

Releases

2 tags

Packages

Contributors

Languages