31 lines
570 B
TypeScript
31 lines
570 B
TypeScript
export function createCallbackManager() {
|
|
const callbacks: AnyToVoidFunction[] = [];
|
|
|
|
function addCallback(cb: AnyToVoidFunction) {
|
|
callbacks.push(cb);
|
|
|
|
return () => {
|
|
removeCallback(cb);
|
|
};
|
|
}
|
|
|
|
function removeCallback(cb: AnyToVoidFunction) {
|
|
const index = callbacks.indexOf(cb);
|
|
if (index !== -1) {
|
|
callbacks.splice(index, 1);
|
|
}
|
|
}
|
|
|
|
function runCallbacks(...args: any[]) {
|
|
callbacks.forEach((callback) => {
|
|
callback(...args);
|
|
});
|
|
}
|
|
|
|
return {
|
|
runCallbacks,
|
|
addCallback,
|
|
removeCallback,
|
|
};
|
|
}
|