Skip to content
This repository has been archived by the owner on Dec 17, 2022. It is now read-only.

Latest commit

 

History

History
102 lines (82 loc) · 2.86 KB

readme.md

File metadata and controls

102 lines (82 loc) · 2.86 KB

wevent

Weak event system for ES6.

Features

  • For node and browser. To use with node directly use version 5.0.0 or above. For browsers or older node use babel/polyfills/shims - just make sure WeakMap natively supported for maximum efficiency.
  • Promise based. Event listener can result in promise for async flow - not required
  • No string handles/slots. Handles/slots are objects.
  • Based on WeakMap. This means that attaching itself does not create references, however event listeners themselves usually create references so remember to off unneeded event listeners.
  • Complex event listener control flows. These are managed by returning wevent functions from event listener (e.g. possible to do "once", "re-emitting" or similar more "complex" event listeners).
  • Small (<250 lines with comments), no runtime dependencies
  • Does not pollute either target or listener
  • Can be used to create isolated event listener system
  • wevent functions (on/off/emit) emit as well, these are listenable

API

Whole API consists of three function, see api.md for complete documentation.

Example

"use strict";

const wevent = require("../index.js");

const on = wevent.on;
const off = wevent.off;
const emit = wevent.emit;
const getEventListenerCount = wevent.getEventListenerCount;

let message = "";
let count = 0;
// Define event listener function
const eventListener = (msg) => message = msg;
// Define handle
const handle = {};
// Attach event listener to handle
on(handle, eventListener);
// Check count
count = getEventListenerCount(handle);
if (count !== 1) throw new Error();
count = getEventListenerCount(handle, eventListener);
if (count !== 1) throw new Error();
// Emit to handle
emit(handle, "Hello world!").then((result) => {
  // Check results
  if (result !== 1) console.log("Shouldn't be!");
  if (message !== "Hello world!") console.log("Shouldn't be!");
  // Remove event listener
  off(handle, eventListener);
  // Check count
  count = getEventListenerCount(handle);
  if (count !== 0) console.log("Shouldn't be!");
  count = getEventListenerCount(handle, eventListener);
  if (count !== 0) console.log("Shouldn't be!");
});

This and few more example in example directory.

License

Apache 2.0

Changes

30.11.2015 - 0.2.0

* Fixed examples …
+ Documentation for listening wevent functions
* Cleaned code …
* Off now results in boolean …
* Line count to reflect changes
* Own bind function to store original function used to resolve the re… …
* Upgraded jsdoc-to-markdown because it crashed building doc …
* fixed count calculating same entries correct …
- Unnecessary error reject. 

31.10.2015 - 0.1.1

* Corrected emitArguments to be variable length argument list
* Changed description to match that of github 

31.10.2015 - 0.1.0

* Bump to version 0.1.0, first public release