Spaces:
Running
Running
File size: 1,480 Bytes
794cf6c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
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();
|