Skip to content
/ hooki Public

⚓️ An advanced hook system for Javascript classes, objects and function

License

Notifications You must be signed in to change notification settings

hookijs/hooki

Repository files navigation

Hooki

Hooki Logo

⚓️ An advanced Javascript hook system.

Installation

npm install hooki --save

Usage

// product.class.js

import Hooki from 'hooki';
import { before, after } from './hooks';

class Product {
  constructor(name, price, stock) {
    this.name = name;
    this.price = price;
    this.stock = stock;
  }

  buy(quantity) {
    console.log(`${this.name} x${quantity}`);
  }

}

export new Hooki(ProductClass, before, after);
// hooks.js

export const before = {
  buy: [
    function verifyStock(context) {
      if (context.params.quantity > context.self.quantity) {
        throw Error('Amount exceeds stock!');
      }
      return context;
    }
  ]
};

export const after = {
  buy: [
    function removeFromStock(context) {
      context.self.quantity -= context.params.quantity;
      return context
    }
  ]
};
// app.js

import Product from './product.class.js';

const bag = new Product('bag', 10.43, 5);

bag.buy(4); 
// -> bag x4
console.log(bag.stock); 
// -> 1
bag.buy(2); 
// -> Error: Amount exceeds stock!

Roadmap

Tests

  • tests

target types

  • object
  • class
  • function

action types

  • function
  • get
  • set
  • getter
  • setter
  • construct

hook types

  • after
  • before
  • errors

features

  • plugin system
  • async hooks (promises, callback)
  • extended hooks methods (target.after([hook]), target.before([hooks]))

plugins

  • hooki-events
  • hooki-validator
  • hooki-errors
  • hooki-lifecycle
  • hooki-modules

About

⚓️ An advanced hook system for Javascript classes, objects and function

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published