From dbf30fa8a7d73c172de7834be524b45009091095 Mon Sep 17 00:00:00 2001 From: YasinOnm08 Date: Tue, 8 Oct 2024 12:56:28 +0200 Subject: [PATCH 1/3] start of chatHistory --- app/backend/ChatHistory.ts | 50 ++++++++++++++---------------- app/backend/InputOutputHandler.tsx | 1 - app/hooks/useChatHistory.tsx | 14 +++++++++ 3 files changed, 38 insertions(+), 27 deletions(-) create mode 100644 app/hooks/useChatHistory.tsx diff --git a/app/backend/ChatHistory.ts b/app/backend/ChatHistory.ts index b7b28c1..1f5b845 100644 --- a/app/backend/ChatHistory.ts +++ b/app/backend/ChatHistory.ts @@ -1,30 +1,28 @@ -type Message = { - role: string; - content:string -} +// type Message = { +// role: string; +// content:string +// } -type Chat = { - name: string; - messages: Message[]; - timestamp: number; -}; +// type Chat = { +// name: string; +// messages: Message[]; +// timestamp: number; +// }; -export let chatHistory: Chat[] = []; +// export function addMessageToHistory(index: number, chat: Chat): void { +// if (index >= 0 && index < chatHistory.length) { +// chatHistory[index] = chat; +// chatHistory.sort((a, b) => b.timestamp - a.timestamp) +// } +// } -export function addMessageToHistory(index: number, chat: Chat): void { - if (index >= 0 && index < chatHistory.length) { - chatHistory[index] = chat; - chatHistory.sort((a, b) => b.timestamp - a.timestamp) - } -} - -export function removeMessageFromHistory(timestamp: number): void { - const index = chatHistory.findIndex((msg) => msg.timestamp === timestamp); - if (index > -1) { - chatHistory.splice(index, 1); - console.log(`Removed message with timestamp: ${timestamp}`); - } else { - console.log(`Message not found with timestamp: ${timestamp}`); - } -} +// export function removeMessageFromHistory(timestamp: number): void { +// const index = chatHistory.findIndex((msg) => msg.timestamp === timestamp); +// if (index > -1) { +// chatHistory.splice(index, 1); +// console.log(`Removed message with timestamp: ${timestamp}`); +// } else { +// console.log(`Message not found with timestamp: ${timestamp}`); +// } +// } diff --git a/app/backend/InputOutputHandler.tsx b/app/backend/InputOutputHandler.tsx index dffc1bf..884cdd4 100644 --- a/app/backend/InputOutputHandler.tsx +++ b/app/backend/InputOutputHandler.tsx @@ -5,7 +5,6 @@ import InputFrontend from "../components/InputFrontend"; import { sendToVoiceRecognition } from "./voice_backend" import axios from "axios"; import { changeHistory, checkCredentials, getHistory } from './database'; -import { addMessageToHistory, removeMessageFromHistory } from "./ChatHistory"; interface InputOutputHandlerProps { selectedIndex: number; diff --git a/app/hooks/useChatHistory.tsx b/app/hooks/useChatHistory.tsx new file mode 100644 index 0000000..06fa851 --- /dev/null +++ b/app/hooks/useChatHistory.tsx @@ -0,0 +1,14 @@ +import { useState } from "react" + +const useChatHistory = () => { + type ChatMessages = { + name: string + messages: {} + timestamp: number + } + + + const [chathistory, setChatHistory] = useState() +} + +export default useChatHistory \ No newline at end of file From 9350a41197bba8629ffcc9caf8ce9ae56e8c4784 Mon Sep 17 00:00:00 2001 From: YasinOnm08 Date: Tue, 8 Oct 2024 15:33:21 +0200 Subject: [PATCH 2/3] come on mannnnnn --- app/backend/InputOutputHandler.tsx | 63 +++++++++++++++++-------- app/components/ConversationFrontend.tsx | 4 +- app/components/History.tsx | 13 ++--- app/hooks/useChatHistory.tsx | 63 ++++++++++++++++++++----- 4 files changed, 104 insertions(+), 39 deletions(-) diff --git a/app/backend/InputOutputHandler.tsx b/app/backend/InputOutputHandler.tsx index 884cdd4..7986f37 100644 --- a/app/backend/InputOutputHandler.tsx +++ b/app/backend/InputOutputHandler.tsx @@ -5,40 +5,50 @@ import InputFrontend from "../components/InputFrontend"; import { sendToVoiceRecognition } from "./voice_backend" import axios from "axios"; import { changeHistory, checkCredentials, getHistory } from './database'; +import { useChatHistory } from '../hooks/useChatHistory'; -interface InputOutputHandlerProps { - selectedIndex: number; -} - -const InputOutputBackend: React.FC = ({selectedIndex}) => { +const InputOutputBackend: React.FC = () => { // # variables type Message = { role: string content: string } - type Chat = { - name?: string - messages: Message[] - timestamp: string - } - // Define state variables for user preferences and messages + const [chatHistory, setChatHistory, setSelectedIndex] = useChatHistory() const [preferredCurrency, setPreferredCurrency] = useState("USD"); const [preferredLanguage, setPreferredLanguage] = useState("english"); const [timeFormat, setTimeFormat] = useState("24-hour"); const [preferredMeasurement, setPreferredMeasurement] = useState("metric"); const [timeZone, setTimeZone] = useState("GMT"); const [dateFormat, setDateFormat] = useState("DD-MM-YYYY"); - const [messages, setMessages] = useState([]); + const [messages, setMessages] = useState(chatHistory.chats[chatHistory.selectedIndex]?.messages || []); const [myBoolean, setMyBoolean] = useState(false); + const [systemMessage, setSystemMessage] = useState("You are a helpful assistant") const apiURL = new URL("http://localhost:5000/interstellar_ai/api/ai_create") if (typeof window !== 'undefined') { apiURL.hostname = window.location.hostname; } else { apiURL.hostname = "localhost" } - + + + useEffect(() => { + + console.log("History", chatHistory); + console.log("Messages", messages); + + // Get the current chat's messages + const currentMessages = chatHistory.chats[chatHistory.selectedIndex]?.messages || []; + + // If currentMessages is not empty, update messages only if it's not the same + if (currentMessages.length > 0 && JSON.stringify(currentMessages) !== JSON.stringify(messages)) { + setMessages(currentMessages); + } else if (messages.length === 0) { + setMessages([{ role: "system", content: systemMessage }, { role: "assistant", content: "Hello! How can I help you?" }]); + } +}, [chatHistory, setSelectedIndex]); + // Update messages when any of the settings change useEffect(() => { if (typeof localStorage !== 'undefined') { @@ -50,11 +60,14 @@ const InputOutputBackend: React.FC = ({selectedIndex}) setDateFormat(localStorage.getItem("dateFormat") || "DD-MM-YYYY"); setMyBoolean(localStorage.getItem('myBoolean') === 'true'); } + },[]) + + useEffect(() => { const measurementString = (preferredMeasurement == "Metric") ? "All measurements follow the metric system. Refuse to use any other measurement system." : "All measurements follow the imperial system. Refuse to use any other measurement system."; - const systemMessage = myBoolean + const newSystemMessage = myBoolean ? `You are operating in the timezone: ${timeZone}. Use the ${timeFormat} time format and ${dateFormat} for dates. ${measurementString} The currency is ${preferredCurrency}. @@ -62,12 +75,20 @@ const InputOutputBackend: React.FC = ({selectedIndex}) You are only able to change language if the user specifically states you must. Do not answer in multiple languages or multiple measurement systems under any circumstances other than the user requesting it.` : `You are a helpful assistant`; - setMessages([ - { role: "system", content: systemMessage }, - { role: "assistant", content: "Hello! How may I help you?" }, - ]); + + setSystemMessage(newSystemMessage) }, [preferredCurrency, preferredLanguage, timeFormat, preferredMeasurement, timeZone, dateFormat, myBoolean]); + useEffect(() => { + const updateSystemprompt = (prompt: string) => { + setMessages(prevMessages => { + const newMessage = { role: "system", content: prompt } + return [newMessage, ...prevMessages] + }) + } + updateSystemprompt + },[systemMessage]) + const conversationRef = useRef(null) const [copyClicked, setCopyClicked] = useState(false) @@ -179,7 +200,11 @@ const InputOutputBackend: React.FC = ({selectedIndex}) }; const addMessage = (role: string, content: string) => { - setMessages(previous => [...previous, { role, content }]) + const newMessage: Message = { role: role, content: content } + setMessages((prevMessages) => [...prevMessages, newMessage]) + const updatedChats = [...chatHistory.chats] + updatedChats[chatHistory.selectedIndex].messages.push(newMessage) + setChatHistory({...chatHistory, chats:updatedChats}) } const handleSendClick = (inputValue: string, override: boolean) => { if (inputValue != "") { diff --git a/app/components/ConversationFrontend.tsx b/app/components/ConversationFrontend.tsx index b120f06..cd6083f 100644 --- a/app/components/ConversationFrontend.tsx +++ b/app/components/ConversationFrontend.tsx @@ -2,6 +2,7 @@ import React, { ForwardedRef, useState, useEffect, useRef } from 'react'; import Markdown from 'react-markdown' import rehypeRaw from 'rehype-raw'; import remarkGfm from 'remark-gfm'; +import { useChatHistory } from '../hooks/useChatHistory'; type Message = { role: string @@ -21,6 +22,7 @@ const ConversationFrontend = React.forwardRef ({ messages, onStopClick, onResendClick, onEditClick, onCopyClick, isClicked }, ref: ForwardedRef) => { const [isScrolling, setIsScrolling] = useState(true); const messagesEndRef = useRef(null); + const [chatHistory, setChatHistory, setSelectedIndex] = useChatHistory() useEffect(() => { const observer = new IntersectionObserver( @@ -61,7 +63,7 @@ const ConversationFrontend = React.forwardRef return (
- {messages.map((message, index) => { + {chatHistory.chats[chatHistory.selectedIndex].messages.map((message, index) => { if (index >= 1) { return ( diff --git a/app/components/History.tsx b/app/components/History.tsx index 82c1f65..297e638 100644 --- a/app/components/History.tsx +++ b/app/components/History.tsx @@ -1,11 +1,8 @@ import React, { useState } from 'react'; +import { useChatHistory } from '../hooks/useChatHistory'; -interface HistoryProps{ - selectedIndex: number; - setSelectedIndex: (index: number) => void; -} - -const History: React.FC = ({selectedIndex, setSelectedIndex}) => { +const History: React.FC = () => { + const [chatHistory, setChatHistory, setSelectedIndex] = useChatHistory() const handleHistoryClick = (index: number) => { setSelectedIndex(index) @@ -16,9 +13,9 @@ const History: React.FC = ({selectedIndex, setSelectedIndex}) => {
diff --git a/app/hooks/useChatHistory.tsx b/app/hooks/useChatHistory.tsx index 06fa851..b849d79 100644 --- a/app/hooks/useChatHistory.tsx +++ b/app/hooks/useChatHistory.tsx @@ -1,14 +1,55 @@ -import { useState } from "react" +import { useEffect, useState } from "react" -const useChatHistory = () => { - type ChatMessages = { - name: string - messages: {} - timestamp: number - } - - - const [chathistory, setChatHistory] = useState() +interface Message { + role: string + content:string } -export default useChatHistory \ No newline at end of file +interface ChatMessages { + name: string + messages: Message[] + timestamp: number + +} + +interface GlobalChatHistory { + chats: ChatMessages[] + selectedIndex: number +} + +let globalChatHistory: GlobalChatHistory = { + chats: [ + { name: "Chat 1", messages: [], timestamp: 4 } + ], + selectedIndex:0 +} +let listeners: ((state: GlobalChatHistory) => void)[] = [] + +const setGlobalState = (newState: GlobalChatHistory): void => { + globalChatHistory = newState; + listeners.forEach((listener) => listener(globalChatHistory)) +} + +export const useChatHistory = (): [GlobalChatHistory, (newState:GlobalChatHistory) => void, (index:number)=>void] => { + const [state, setState] = useState(globalChatHistory) + + useEffect(() => { + console.log("help", globalChatHistory); + + const listener = (newState: GlobalChatHistory) => { + setState(newState) + } + + listeners.push(listener) + + return () => { + listeners = listeners.filter((l) => l!== listener) + } + }, []) + + const setSelectedIndex = (index: number) => { + setGlobalState({...state,selectedIndex:index}) + } + + return [state, setGlobalState, setSelectedIndex] +} \ No newline at end of file From 9127461e82f25bd333622cab7713d49d3c8e7a29 Mon Sep 17 00:00:00 2001 From: Patrick_Pluto Date: Tue, 8 Oct 2024 15:43:29 +0200 Subject: [PATCH 3/3] update and windows deploy --- deployment_scripts/windows/NOTE.txt | 2 +- .../{python313._pth => python312._pth} | 2 +- package-lock.json | 133 +++++++++--------- 3 files changed, 71 insertions(+), 66 deletions(-) rename deployment_scripts/windows/{python313._pth => python312._pth} (75%) diff --git a/deployment_scripts/windows/NOTE.txt b/deployment_scripts/windows/NOTE.txt index efcc53d..b2df255 100644 --- a/deployment_scripts/windows/NOTE.txt +++ b/deployment_scripts/windows/NOTE.txt @@ -1,7 +1,7 @@ You will need to make three folders: node-bin - contains nodejs portable -python-bin - contains python3 portable - don't forget to add the .pth file and adjust it accordingly, because import site is normally missing. +python-bin - contains python3 portable - don't forget to add the .pth file and adjust it accordingly, because import site is normally missing. -- also put your python files in here too, else it will not run! ollama.bin - contains ollama portable you also need vc redist 2019 \ No newline at end of file diff --git a/deployment_scripts/windows/python313._pth b/deployment_scripts/windows/python312._pth similarity index 75% rename from deployment_scripts/windows/python313._pth rename to deployment_scripts/windows/python312._pth index 4b5ab01..7875b3d 100644 --- a/deployment_scripts/windows/python313._pth +++ b/deployment_scripts/windows/python312._pth @@ -1,4 +1,4 @@ -python313.zip +python312.zip . # Uncomment to run site.main() automatically diff --git a/package-lock.json b/package-lock.json index 4bd730b..96f5817 100644 --- a/package-lock.json +++ b/package-lock.json @@ -685,9 +685,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.16.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.10.tgz", - "integrity": "sha512-vQUKgWTjEIRFCvK6CyriPH3MZYiYlNy0fKiEYHWbcoWLEgs4opurGGKlebrTLqdSMIbXImH6XExNiIyNUv3WpA==", + "version": "20.16.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.11.tgz", + "integrity": "sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==", "license": "MIT", "dependencies": { "undici-types": "~6.19.2" @@ -700,9 +700,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.10", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.10.tgz", - "integrity": "sha512-02sAAlBnP39JgXwkAq3PeU9DVaaGpZyF3MGcC0MKgQVkZor5IiiDAipVaxQHtDJAmO4GIy/rVBy/LzVj76Cyqg==", + "version": "18.3.11", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.11.tgz", + "integrity": "sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==", "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -745,17 +745,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.8.0.tgz", - "integrity": "sha512-wORFWjU30B2WJ/aXBfOm1LX9v9nyt9D3jsSOxC3cCaTQGCW5k4jNpmjFv3U7p/7s4yvdjHzwtv2Sd2dOyhjS0A==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.8.1.tgz", + "integrity": "sha512-xfvdgA8AP/vxHgtgU310+WBnLB4uJQ9XdyP17RebG26rLtDrQJV3ZYrcopX91GrHmMoH8bdSwMRh2a//TiJ1jQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.8.0", - "@typescript-eslint/type-utils": "8.8.0", - "@typescript-eslint/utils": "8.8.0", - "@typescript-eslint/visitor-keys": "8.8.0", + "@typescript-eslint/scope-manager": "8.8.1", + "@typescript-eslint/type-utils": "8.8.1", + "@typescript-eslint/utils": "8.8.1", + "@typescript-eslint/visitor-keys": "8.8.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -779,16 +779,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.8.0.tgz", - "integrity": "sha512-uEFUsgR+tl8GmzmLjRqz+VrDv4eoaMqMXW7ruXfgThaAShO9JTciKpEsB+TvnfFfbg5IpujgMXVV36gOJRLtZg==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.8.1.tgz", + "integrity": "sha512-hQUVn2Lij2NAxVFEdvIGxT9gP1tq2yM83m+by3whWFsWC+1y8pxxxHUFE1UqDu2VsGi2i6RLcv4QvouM84U+ow==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "8.8.0", - "@typescript-eslint/types": "8.8.0", - "@typescript-eslint/typescript-estree": "8.8.0", - "@typescript-eslint/visitor-keys": "8.8.0", + "@typescript-eslint/scope-manager": "8.8.1", + "@typescript-eslint/types": "8.8.1", + "@typescript-eslint/typescript-estree": "8.8.1", + "@typescript-eslint/visitor-keys": "8.8.1", "debug": "^4.3.4" }, "engines": { @@ -808,14 +808,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.8.0.tgz", - "integrity": "sha512-EL8eaGC6gx3jDd8GwEFEV091210U97J0jeEHrAYvIYosmEGet4wJ+g0SYmLu+oRiAwbSA5AVrt6DxLHfdd+bUg==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.8.1.tgz", + "integrity": "sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.8.0", - "@typescript-eslint/visitor-keys": "8.8.0" + "@typescript-eslint/types": "8.8.1", + "@typescript-eslint/visitor-keys": "8.8.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -826,14 +826,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.8.0.tgz", - "integrity": "sha512-IKwJSS7bCqyCeG4NVGxnOP6lLT9Okc3Zj8hLO96bpMkJab+10HIfJbMouLrlpyOr3yrQ1cA413YPFiGd1mW9/Q==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.8.1.tgz", + "integrity": "sha512-qSVnpcbLP8CALORf0za+vjLYj1Wp8HSoiI8zYU5tHxRVj30702Z1Yw4cLwfNKhTPWp5+P+k1pjmD5Zd1nhxiZA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.8.0", - "@typescript-eslint/utils": "8.8.0", + "@typescript-eslint/typescript-estree": "8.8.1", + "@typescript-eslint/utils": "8.8.1", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -851,9 +851,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.8.0.tgz", - "integrity": "sha512-QJwc50hRCgBd/k12sTykOJbESe1RrzmX6COk8Y525C9l7oweZ+1lw9JiU56im7Amm8swlz00DRIlxMYLizr2Vw==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.8.1.tgz", + "integrity": "sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==", "dev": true, "license": "MIT", "engines": { @@ -865,14 +865,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.8.0.tgz", - "integrity": "sha512-ZaMJwc/0ckLz5DaAZ+pNLmHv8AMVGtfWxZe/x2JVEkD5LnmhWiQMMcYT7IY7gkdJuzJ9P14fRy28lUrlDSWYdw==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.8.1.tgz", + "integrity": "sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "8.8.0", - "@typescript-eslint/visitor-keys": "8.8.0", + "@typescript-eslint/types": "8.8.1", + "@typescript-eslint/visitor-keys": "8.8.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -933,16 +933,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.8.0.tgz", - "integrity": "sha512-QE2MgfOTem00qrlPgyByaCHay9yb1+9BjnMFnSFkUKQfu7adBXDTnCAivURnuPPAG/qiB+kzKkZKmKfaMT0zVg==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.8.1.tgz", + "integrity": "sha512-/QkNJDbV0bdL7H7d0/y0qBbV2HTtf0TIyjSDTvvmQEzeVx8jEImEbLuOA4EsvE8gIgqMitns0ifb5uQhMj8d9w==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.8.0", - "@typescript-eslint/types": "8.8.0", - "@typescript-eslint/typescript-estree": "8.8.0" + "@typescript-eslint/scope-manager": "8.8.1", + "@typescript-eslint/types": "8.8.1", + "@typescript-eslint/typescript-estree": "8.8.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -956,13 +956,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.8.0.tgz", - "integrity": "sha512-8mq51Lx6Hpmd7HnA2fcHQo3YgfX1qbccxQOgZcb4tvasu//zXRaA1j5ZRFeCw/VRAdFi4mRM9DnZw0Nu0Q2d1g==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.8.1.tgz", + "integrity": "sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.8.0", + "@typescript-eslint/types": "8.8.1", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -1457,9 +1457,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001664", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001664.tgz", - "integrity": "sha512-AmE7k4dXiNKQipgn7a2xg558IRqPN3jMQY/rOsbxDhrd0tyChwbITBfiwtnqz8bi2M5mIWbxAYBvk7W7QBUS2g==", + "version": "1.0.30001667", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001667.tgz", + "integrity": "sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==", "funding": [ { "type": "opencollective", @@ -2256,6 +2256,7 @@ "version": "8.57.1", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", "dependencies": { @@ -2423,9 +2424,9 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz", - "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "license": "MIT", "dependencies": { @@ -2437,7 +2438,7 @@ "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.9.0", + "eslint-module-utils": "^2.12.0", "hasown": "^2.0.2", "is-core-module": "^2.15.1", "is-glob": "^4.0.3", @@ -2446,13 +2447,14 @@ "object.groupby": "^1.0.3", "object.values": "^1.2.0", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/node_modules/debug": { @@ -4136,9 +4138,9 @@ "license": "ISC" }, "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", + "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4147,6 +4149,9 @@ "has-symbols": "^1.0.3", "reflect.getprototypeof": "^1.0.4", "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/jackspeak": { @@ -6294,16 +6299,16 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4"