md-curcuma
Version:
A Typescript library for transporting and converting markdown and other data.
67 lines (66 loc) • 1.78 kB
JavaScript
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"));