Skip to content

Commit a4fd9bc

Browse files
committed
chore: migrate to TypeScript
1 parent 9b3dfe7 commit a4fd9bc

File tree

16 files changed

+3350
-1439
lines changed

16 files changed

+3350
-1439
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ core/components/modai/vendor
22
_packages
33
.idea
44
.vscode
5-
config.core.php
5+
config.core.php
6+
node_modules

_build/js/src/chatHistory.ts

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
export type Message = {
2+
content: string;
3+
id?: string;
4+
hidden: boolean;
5+
role: string;
6+
el?: HTMLDivElement;
7+
};
8+
9+
type Namespace = {
10+
history: Message[];
11+
idRef: Record<string, Message>;
12+
onAddMessage: (msg: Message) => HTMLDivElement | undefined;
13+
onUpdateMessage: (message: Message) => void;
14+
};
15+
16+
const _namespace: Record<string, Namespace> = {};
17+
18+
const ROLES = {
19+
'user': 'user',
20+
'assistant': 'assistant',
21+
};
22+
23+
const addMessage = (key: string, content: string, role: string, id?: string, hidden: boolean = false) => {
24+
const namespace = _namespace[key];
25+
if (!namespace) {
26+
return;
27+
}
28+
29+
const msgObject: Message = {content, role, id, hidden};
30+
31+
msgObject.el = namespace.onAddMessage(msgObject);
32+
33+
const index = namespace.history.push(msgObject) - 1;
34+
if (id) {
35+
namespace.idRef[id] = namespace.history[index];
36+
}
37+
}
38+
39+
const updateMessage = (key: string, id: string, content: string) => {
40+
const namespace = _namespace[key];
41+
if (!namespace) {
42+
return;
43+
}
44+
45+
if (!namespace.idRef[id]) {
46+
addMessage(key, content, ROLES.assistant, id);
47+
return;
48+
}
49+
50+
namespace.idRef[id].content = content;
51+
namespace.onUpdateMessage(namespace.idRef[id]);
52+
}
53+
54+
const getMessage = (key: string, id: string) => {
55+
const namespace = _namespace[key];
56+
if (!namespace) {
57+
return;
58+
}
59+
60+
return namespace.idRef[id];
61+
}
62+
63+
export const chatHistory = {
64+
init: (key: string, onAddMessage: (msg: Message) => HTMLDivElement | undefined, onUpdateMessage: (msg: Message) => void) => {
65+
if (!_namespace[key]) {
66+
_namespace[key] = {
67+
history: [],
68+
idRef: {},
69+
onAddMessage,
70+
onUpdateMessage,
71+
};
72+
}
73+
74+
_namespace[key].onAddMessage = onAddMessage;
75+
_namespace[key].onUpdateMessage = onUpdateMessage;
76+
77+
return {
78+
addUserMessage: (content: string, hidden?: boolean) => {
79+
addMessage(key, content, ROLES.user, undefined, hidden);
80+
},
81+
addAssistantMessage: (content: string, id: string) => {
82+
addMessage(key, content, ROLES.assistant, id);
83+
},
84+
updateAssistantMessage: (id: string, content: string) => {
85+
updateMessage(key, id, content);
86+
},
87+
getAssistantMessage: (id: string) => {
88+
return getMessage(key, id);
89+
},
90+
getMessages: () => {
91+
return _namespace[key].history;
92+
},
93+
getMessagesHistory: () => {
94+
return _namespace[key].history.map((m) => ({
95+
role: m.role,
96+
content: m.content,
97+
}));
98+
}
99+
};
100+
}
101+
};

0 commit comments

Comments
 (0)