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