Spaces:
Running
Running
import { writable } from "svelte/store"; | |
export interface ConsoleMessage { | |
id: string; | |
type: "log" | "warn" | "error" | "info"; | |
message: string; | |
timestamp: number; | |
} | |
interface ConsoleState { | |
messages: ConsoleMessage[]; | |
maxMessages: number; | |
} | |
function createConsoleStore() { | |
const { subscribe, update, set } = writable<ConsoleState>({ | |
messages: [], | |
maxMessages: 100, | |
}); | |
return { | |
subscribe, | |
addMessage: (type: ConsoleMessage["type"], message: string) => { | |
update((state) => { | |
const timestamp = Date.now(); | |
const newMessage: ConsoleMessage = { | |
id: `${timestamp}_${Math.random().toString(36).substr(2, 9)}`, | |
type, | |
message, | |
timestamp, | |
}; | |
const messages = | |
state.messages.length >= state.maxMessages | |
? [...state.messages.slice(1), newMessage] | |
: [...state.messages, newMessage]; | |
return { ...state, messages }; | |
}); | |
}, | |
clear: () => { | |
update((state) => { | |
const timestamp = Date.now(); | |
return { | |
...state, | |
messages: [ | |
{ | |
id: `${timestamp}_${Math.random().toString(36).substr(2, 9)}`, | |
type: "info", | |
message: "Console cleared", | |
timestamp, | |
}, | |
], | |
}; | |
}); | |
}, | |
reset: () => set({ messages: [], maxMessages: 100 }), | |
}; | |
} | |
export const consoleStore = createConsoleStore(); | |