UNPKG

md-curcuma

Version:

A Typescript library for transporting and converting markdown and other data.

67 lines (66 loc) 1.78 kB
class EventObserver { constructor() { this.events = new Map(); } on(event, callback) { if (!this.events.has(event)) { this.events.set(event, new Set()); } this.events.get(event).add(callback); } once(event, callback) { const wrapper = (...args) => { callback(...args); this.off(event, wrapper); }; this.on(event, wrapper); } off(event, callback) { const callbacks = this.events.get(event); if (callbacks) { callbacks.delete(callback); if (callbacks.size === 0) { this.events.delete(event); } } } emit(event, ...args) { const callbacks = this.events.get(event); if (callbacks) { callbacks.forEach((callback) => { callback(...args); }); } } } class Parser { constructor() { this.observer = new EventObserver(); } on(event, callback) { this.observer.on(event, callback); } once(event, callback) { this.observer.once(event, callback); } parse(data) { console.log(`Parsing: ${data}`); this.observer.emit("readable", data); } triggerError(error) { this.observer.emit("error", error); } } const parser = new Parser(); parser.on("readable", (data) => { console.log(`Readable event received with data: ${data}`); }); parser.once("readable", (data) => { console.log(`Once readable event received with data: ${data}`); }); parser.on("error", (error) => { console.log(`Error event received: ${error.message}`); }); parser.parse("Test Data"); parser.parse("More Data"); parser.triggerError(new Error("Parsing failed"));