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(); | |