Wrap an object with ES6 proxy to add hooks capabilities through an event emitter.
$ npm install --save hookify-object
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.
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()
Add hook capabilities to a target object.
Name | Type | Default | Description |
---|---|---|---|
target |
object |
- |
The object on which we want to add the hook capabilities |
Type | Description |
---|---|
Proxy |
The hook wrapper of the target object |
const hookify = require('hookify-object')
const obj = {}
const objWithHooks = hookify(obj)
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) |
Check each hook to know the structure of the context
object.
Name | Type | Default | Description |
---|---|---|---|
context |
object |
- |
Contains the context of the hook |
Called before calling a method. You can specify a unique method via the methodName
option.
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 */
})
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 |
Called after calling a method. You can specify a unique method via the methodName
option.
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 */
})
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 |
Called when the promise returned by the method has resolved. You can specify a unique method via the methodName
option.
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 */
})
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 |
Called when the promise returned by the method has rejected. You can specify a unique method via the methodName
option.
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 */
})
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 |
Called before setting a property value. You can specify a unique property via the propertyName
option.
objWithHooks.hooks.on('beforeSet', (context) => {
/* Call before set any property */
})
objWithHooks.hooks.on('beforeSet:value', (context) => {
/* Call before set the property "value" */
})
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 |
Called after setting a property value. You can specify a unique property via the propertyName
option.
objWithHooks.hooks.on('afterSet', (context) => {
/* Call after set any property */
})
objWithHooks.hooks.on('afterSet:value', (context) => {
/* Call after set the property "value" */
})
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 |
Called before deleting a property via the delete
instruction. You can specify a unique property via the propertyName
option.
objWithHooks.hooks.on('beforeDelete', (context) => {
/* Call before delete any property */
})
objWithHooks.hooks.on('beforeDelete:value', (context) => {
/* Call before delete the property "value" */
})
Name | Type | Default | Description |
---|---|---|---|
self |
object |
- |
The object wrapped by the hook proxy |
name |
string |
- |
The name of the property |
Called after deleting a property via the delete
instruction. You can specify a unique property via the propertyName
option.
objWithHooks.hooks.on('afterDelete', (context) => {
/* Call after delete any property */
})
objWithHooks.hooks.on('afterDelete:value', (context) => {
/* Call after delete the property "value" */
})
Name | Type | Default | Description |
---|---|---|---|
self |
object |
- |
The object wrapped by the hook proxy |
name |
string |
- |
The name of the property |