@dfinity/agent
Version:
JavaScript and TypeScript library to interact with the Internet Computer
50 lines (41 loc) • 1.15 kB
text/typescript
import { AgentError } from './errors.ts';
export type ObserveFunction<T> = (data: T, ...rest: unknown[]) => void;
export class Observable<T> {
observers: ObserveFunction<T>[];
constructor() {
this.observers = [];
}
subscribe(func: ObserveFunction<T>) {
this.observers.push(func);
}
unsubscribe(func: ObserveFunction<T>) {
this.observers = this.observers.filter(observer => observer !== func);
}
notify(data: T, ...rest: unknown[]) {
this.observers.forEach(observer => observer(data, ...rest));
}
}
export type AgentLog =
| {
message: string;
level: 'warn' | 'info';
}
| {
message: string;
level: 'error';
error: AgentError;
};
export class ObservableLog extends Observable<AgentLog> {
constructor() {
super();
}
print(message: string, ...rest: unknown[]) {
this.notify({ message, level: 'info' }, ...rest);
}
warn(message: string, ...rest: unknown[]) {
this.notify({ message, level: 'warn' }, ...rest);
}
error(message: string, error: AgentError, ...rest: unknown[]) {
this.notify({ message, level: 'error', error }, ...rest);
}
}