
Research
Security News
Lazarus Strikes npm Again with New Wave of Malicious Packages
The Socket Research Team has discovered six new malicious npm packages linked to North Korea’s Lazarus Group, designed to steal credentials and deploy backdoors.
@poppinss/hooks
Advanced tools
A no brainer module to execute lifecycle hooks in sequence.
I find myself re-writing the code for hooks in multiple packages, so decided to extract it to it's own module, that can be re-used by other modules of AdonisJS.
The hooks class exposes the API to register
, remove
and exec
lifecycle hooks for any number of actions or events. The class API is meant to be used internally and not by the user facing code, so that you can improve the autocomplete UX.
For example: The Lucid models uses this class internally and expose before
and after
methods on the model itself. Doing this, Lucid can control the autocomplete, type checking for the before
and after
methods itself, without relying on this package to expose the generics API.
Also generics increases the number of types Typescript has to generate and it's better to avoid them whenever possible.
Install the package from npm registry as follows:
npm i @poppinss/hooks
# yarn
yarn add @poppinss/hooks
Use it as follows
import { Hooks } from '@poppinss/hooks'
const hooks = new Hooks()
hooks.add('before', 'save', function () {
})
// Later invoke before save hooks
await hooks.exec('before', 'save', { id: 1 })
If you want the end user to define IoC container bindings as the hook handler, then you need to pass the Ioc
container resolver to the Hooks constructor. Following is the snippet from Lucid models.
import { Ioc } from '@adonisjs/fold'
const ioc = new Ioc()
const resolver = ioc.getResolver(undefined, 'modelHooks', 'App/Models/Hooks')
const hooks = new Hooks(resolver)
The resolver allows the end user to pass the hook reference as string and hooks must live inside App/Models/Hooks
folder.
hooks.add('before', 'save', 'User.encryptPassword')
Add a new hook handler.
hooks.add('before', 'save', (data) => {
console.log(data)
})
Execute a given hook for a selected lifecycle.
hooks.exec('before', 'save', { username: 'virk' })
Remove an earlier registered hook. If you are using the IoC container bindings, then passing the binding string is enough, otherwise you need to store the reference of the function.
function onSave () {}
hooks.add('before', 'save', onSave)
// Later remove it
hooks.remove('before', 'save', onSave)
Clear all hooks for a given lifecycle and optionally an action.
hooks.clear('before')
// Clear just for the save action
hooks.clear('before', 'save')
FAQs
Hooks module for executing before/after lifecycle hooks
The npm package @poppinss/hooks receives a total of 43,888 weekly downloads. As such, @poppinss/hooks popularity was classified as popular.
We found that @poppinss/hooks demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
The Socket Research Team has discovered six new malicious npm packages linked to North Korea’s Lazarus Group, designed to steal credentials and deploy backdoors.
Security News
Socket CEO Feross Aboukhadijeh discusses the open web, open source security, and how Socket tackles software supply chain attacks on The Pair Program podcast.
Security News
Opengrep continues building momentum with the alpha release of its Playground tool, demonstrating the project's rapid evolution just two months after its initial launch.