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 |