hookify-object
v0.1.2
Published
Wrap an object with ES6 proxy to add hooks capabilities
Downloads
7
Maintainers
Readme
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 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
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
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
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
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
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
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
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
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
|