Replace cloneDeep to native structuredclone and remove unused import

This commit is contained in:
kwaroran
2024-04-25 01:17:14 +09:00
parent cc744853d2
commit 11b1d4d4f3
22 changed files with 85 additions and 115 deletions

View File

@@ -6,7 +6,6 @@ import { language } from "src/lang"
import { v4 as uuidv4 } from 'uuid';
import { characterFormatUpdate } from "./characters"
import { AppendableBuffer, checkCharOrder, downloadFile, loadAsset, LocalWriter, readImage, saveAsset, VirtualWriter } from "./storage/globalApi"
import { cloneDeep, update } from "lodash"
import { CurrentCharacter, selectedCharID } from "./stores"
import { convertImage, hasher } from "./parser"
@@ -275,7 +274,7 @@ function convertOldTavernAndJSON(charaData:OldTavernChar, imgp:string|undefined
export async function exportChar(charaID:number) {
const db = get(DataBase)
let char = cloneDeep(db.characters[charaID])
let char = structuredClone(db.characters[charaID])
if(char.type === 'group'){
return
@@ -314,7 +313,7 @@ async function importSpecv2(card:CharacterCardV2, img?:Uint8Array, mode:'hub'|'n
const im = img ? await saveAsset(await reencodeImage(img)) : undefined
let db = get(DataBase)
const risuext = cloneDeep(data.extensions.risuai)
const risuext = structuredClone(data.extensions.risuai)
let emotions:[string, string][] = []
let bias:[string, number][] = []
let viewScreen: "none" | "emotion" | "imggen" = 'none'
@@ -442,7 +441,7 @@ async function importSpecv2(card:CharacterCardV2, img?:Uint8Array, mode:'hub'|'n
}
let ext = cloneDeep(data?.extensions ?? {})
let ext = structuredClone(data?.extensions ?? {})
for(const key in ext){
if(key === 'risuai'){
@@ -533,7 +532,7 @@ async function createBaseV2(char:character) {
key:string
data:string[]
}
} = cloneDeep(lore.extentions ?? {})
} = structuredClone(lore.extentions ?? {})
let caseSensitive = ext.risu_case_sensitive ?? false
ext.risu_activationPercent = lore.activationPercent
@@ -733,7 +732,7 @@ export async function shareRisuHub2(char:character, arg:{
update: boolean
}) {
try {
char = cloneDeep(char)
char = structuredClone(char)
char.license = arg.license
let tagList = arg.tag.split(',')
@@ -794,7 +793,7 @@ export async function shareRisuHub(char:character, arg:{
license: string
anon: boolean
}) {
char = cloneDeep(char)
char = structuredClone(char)
char.license = arg.license
let tagList = arg.tag.split(',')

View File

@@ -5,8 +5,7 @@ import { forageStorage, getUnpargeables, isNodeServer, isTauri, openURL } from "
import { BaseDirectory, exists, readBinaryFile, readDir, writeBinaryFile } from "@tauri-apps/api/fs";
import { language } from "../../lang";
import { relaunch } from '@tauri-apps/api/process';
import { open } from '@tauri-apps/api/shell';
import { cloneDeep, isEqual, last } from "lodash";
import { isEqual } from "lodash";
import { sleep } from "../util";
import { hubURL } from "../characterCards";
import { decodeRisuSave, encodeRisuSave } from "../storage/risuSave";
@@ -108,7 +107,7 @@ let BackupDb:Database = null
export async function syncDrive() {
BackupDb = cloneDeep(get(DataBase))
BackupDb = structuredClone(get(DataBase))
return
while(true){
const maindb = get(DataBase)
@@ -136,7 +135,7 @@ export async function syncDrive() {
localStorage.setItem('risu_lastsaved', `${lastSaved}`)
const hadNoSync = d === 'noSync'
if((!isEqual(maindb, BackupDb)) || hadNoSync){
BackupDb = cloneDeep(maindb)
BackupDb = structuredClone(maindb)
const files:DriveFile[] = await getFilesInFolder(ACCESS_TOKEN)
const fileNames = files.map((d) => {
return d.name

View File

@@ -1,6 +1,5 @@
import { get } from "svelte/store";
import { DataBase, setDatabase } from "../storage/database";
import { cloneDeep } from "lodash";
import { downloadFile } from "../storage/globalApi";
import { BufferToText, selectSingleFile } from "../util";
import { alertError } from "../alert";
@@ -102,7 +101,7 @@ export const colorSchemeList = Object.keys(colorShemes) as (keyof typeof colorSh
export function changeColorScheme(colorScheme: string){
let db = get(DataBase)
if(colorScheme !== 'custom'){
db.colorScheme = cloneDeep(colorShemes[colorScheme])
db.colorScheme = structuredClone(colorShemes[colorScheme])
}
db.colorSchemeName = colorScheme
setDatabase(db)

View File

@@ -4,7 +4,6 @@ import { selectSingleFile, sleep } from "./util"
import { alertError, alertNormal, alertStore } from "./alert"
import { downloadFile, readImage } from "./storage/globalApi"
import { language } from "src/lang"
import { cloneDeep } from "lodash"
import { reencodeImage } from "./process/files/image"
import { PngChunk } from "./pngChunk"
@@ -70,7 +69,7 @@ export async function exportUserPersona(){
let img = await readImage(db.userIcon)
let card:PersonaCard = cloneDeep({
let card:PersonaCard = structuredClone({
name: db.username,
personaPrompt: db.personaPrompt,
})

View File

@@ -2,11 +2,8 @@ import { get } from 'svelte/store'
import type { ScriptMode } from '../process/scripts'
//@ts-ignore
import WorkerUrl from './embedworker?worker&url'
import { DataBase, type Chat, type character, type Message } from '../storage/database'
import { DataBase, type Message } from '../storage/database'
import { selectedCharID } from '../stores'
import { add, cloneDeep } from 'lodash'
import { sleep } from '../util'
import { characterFormatUpdate } from '../characters'
import { setDatabase } from '../storage/database'
let worker = new Worker(WorkerUrl, {type: 'module'})
@@ -83,7 +80,7 @@ addWorkerFunction('getChat', async () => {
const db = get(DataBase)
const selectedChar = get(selectedCharID)
const char = db.characters[selectedChar]
return cloneDeep(char.chats[char.chatPage].message)
return structuredClone(char.chats[char.chatPage].message)
})
addWorkerFunction('setChat', async (data:Message[]) => {

View File

@@ -13,7 +13,6 @@ import { exampleMessage } from "./exampleMessages";
import { sayTTS } from "./tts";
import { supaMemory } from "./memory/supaMemory";
import { v4 } from "uuid";
import { cloneDeep } from "lodash";
import { groupOrder } from "./group";
import { runTrigger } from "./triggers";
import { HypaProcesser } from "./memory/hypamemory";
@@ -207,7 +206,7 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n
'personaPrompt':([] as OpenAIChat[])
}
let promptTemplate = cloneDeep(db.promptTemplate)
let promptTemplate = structuredClone(db.promptTemplate)
const usingPromptTemplate = !!promptTemplate
if(promptTemplate){
let hasPostEverything = false
@@ -394,7 +393,7 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n
for(const card of template){
switch(card.type){
case 'persona':{
let pmt = cloneDeep(unformated.personaPrompt)
let pmt = structuredClone(unformated.personaPrompt)
if(card.innerFormat && pmt.length > 0){
for(let i=0;i<pmt.length;i++){
pmt[i].content = risuChatParser(card.innerFormat, {chara: currentChar}).replace('{{slot}}', pmt[i].content)
@@ -405,7 +404,7 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n
break
}
case 'description':{
let pmt = cloneDeep(unformated.description)
let pmt = structuredClone(unformated.description)
if(card.innerFormat && pmt.length > 0){
for(let i=0;i<pmt.length;i++){
pmt[i].content = risuChatParser(card.innerFormat, {chara: currentChar}).replace('{{slot}}', pmt[i].content)
@@ -416,7 +415,7 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n
break
}
case 'authornote':{
let pmt = cloneDeep(unformated.authorNote)
let pmt = structuredClone(unformated.authorNote)
if(card.innerFormat && pmt.length > 0){
for(let i=0;i<pmt.length;i++){
pmt[i].content = risuChatParser(card.innerFormat, {chara: currentChar}).replace('{{slot}}', pmt[i].content || card.defaultText || '')
@@ -759,7 +758,7 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n
//make into one
let formated:OpenAIChat[] = []
const formatOrder = cloneDeep(db.formatingOrder)
const formatOrder = structuredClone(db.formatingOrder)
if(formatOrder){
formatOrder.push('postEverything')
}
@@ -803,7 +802,7 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n
for(const card of template){
switch(card.type){
case 'persona':{
let pmt = cloneDeep(unformated.personaPrompt)
let pmt = structuredClone(unformated.personaPrompt)
if(card.innerFormat && pmt.length > 0){
for(let i=0;i<pmt.length;i++){
pmt[i].content = risuChatParser(card.innerFormat, {chara: currentChar}).replace('{{slot}}', pmt[i].content)
@@ -814,7 +813,7 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n
break
}
case 'description':{
let pmt = cloneDeep(unformated.description)
let pmt = structuredClone(unformated.description)
if(card.innerFormat && pmt.length > 0){
for(let i=0;i<pmt.length;i++){
pmt[i].content = risuChatParser(card.innerFormat, {chara: currentChar}).replace('{{slot}}', pmt[i].content)
@@ -825,7 +824,7 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n
break
}
case 'authornote':{
let pmt = cloneDeep(unformated.authorNote)
let pmt = structuredClone(unformated.authorNote)
if(card.innerFormat && pmt.length > 0){
for(let i=0;i<pmt.length;i++){
pmt[i].content = risuChatParser(card.innerFormat, {chara: currentChar}).replace('{{slot}}', pmt[i].content || card.defaultText || '')
@@ -917,7 +916,7 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n
break
}
case 'memory':{
let pmt = cloneDeep(memories)
let pmt = structuredClone(memories)
if(card.innerFormat && pmt.length > 0){
for(let i=0;i<pmt.length;i++){
pmt[i].content = risuChatParser(card.innerFormat, {chara: currentChar}).replace('{{slot}}', pmt[i].content)

View File

@@ -3,7 +3,6 @@ import type { OpenAIChat } from "..";
import { DataBase, type Chat, type character, type groupChat } from "../../storage/database";
import { tokenize, type ChatTokenizer } from "../../tokenizer";
import { requestChatData } from "../request";
import { cloneDeep } from "lodash";
import { HypaProcesser } from "./hypamemory";
import { stringlizeChat } from "../stringlize";
import { globalFetch } from "src/ts/storage/globalApi";
@@ -74,7 +73,7 @@ export async function supaMemory(
for(let j=0;j<HypaData.length;j++){
let i =0;
let countTokens = currentTokens
let countChats = cloneDeep(chats)
let countChats = structuredClone(chats)
while(true){
if(countChats.length === 0){
break

View File

@@ -14,7 +14,6 @@ import { SignatureV4 } from "@smithy/signature-v4";
import { HttpRequest } from "@smithy/protocol-http";
import { Sha256 } from "@aws-crypto/sha256-js";
import { v4 } from "uuid";
import { cloneDeep } from "lodash";
import { supportsInlayImage } from "./files/image";
import { OaifixBias } from "../plugins/fixer";
import { Capacitor } from "@capacitor/core";
@@ -124,7 +123,7 @@ export interface OpenAIChatExtra {
export async function requestChatDataMain(arg:requestDataArgument, model:'model'|'submodel', abortSignal:AbortSignal=null):Promise<requestDataResponse> {
const db = get(DataBase)
let formated = cloneDeep(arg.formated)
let formated = structuredClone(arg.formated)
let maxTokens = arg.maxTokens ??db.maxResponse
let temperature = arg.temperature ?? (db.temperature / 100)
let bias = arg.bias
@@ -178,7 +177,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
for(let i=0;i<formated.length;i++){
const m = formated[i]
if(m.multimodals && m.multimodals.length > 0 && m.role === 'user'){
let v:OpenAIChatExtra = cloneDeep(m)
let v:OpenAIChatExtra = structuredClone(m)
let contents:OpenAIContents[] = []
for(let j=0;j<m.multimodals.length;j++){
contents.push({

View File

@@ -1,4 +1,3 @@
import { cloneDeep } from 'lodash'
import type { Database } from 'src/ts/storage/database'
export function templateCheck(db:Database){

View File

@@ -1,4 +1,3 @@
import { cloneDeep } from "lodash";
import { risuChatParser } from "../parser";
import { DataBase, type Chat, type character } from "../storage/database";
import { tokenize } from "../tokenizer";
@@ -85,7 +84,7 @@ export async function runTrigger(char:character,mode:triggerMode, arg:{
manualName?: string
}){
arg.recursiveCount ??= 0
char = cloneDeep(char)
char = structuredClone(char)
let varChanged = false
let stopSending = arg.stopSending ?? false
const currentChat = get(CurrentChat)
@@ -95,7 +94,7 @@ export async function runTrigger(char:character,mode:triggerMode, arg:{
promptend: ''
}
const triggers = char.triggerscript.concat(getModuleTriggers())
let chat = cloneDeep(arg.chat ?? char.chats[char.chatPage])
let chat = structuredClone(arg.chat ?? char.chats[char.chatPage])
if((!triggers) || (triggers.length === 0)){
return null
}

View File

@@ -4,7 +4,6 @@ import { changeLanguage, language } from '../../lang';
import type { RisuPlugin } from '../plugins/plugins';
import type {triggerscript as triggerscriptMain} from '../process/triggers';
import { downloadFile, saveAsset as saveImageGlobal } from './globalApi';
import { cloneDeep } from 'lodash';
import { defaultAutoSuggestPrompt, defaultJailbreak, defaultMainPrompt } from './defaultPrompts';
import { alertNormal, alertSelect } from '../alert';
import type { NAISettings } from '../process/models/nai';
@@ -312,16 +311,16 @@ export function setDatabase(data:Database){
largePortrait: false
}]
data.classicMaxWidth ??= false
data.ooba ??= cloneDeep(defaultOoba)
data.ainconfig ??= cloneDeep(defaultAIN)
data.ooba ??= structuredClone(defaultOoba)
data.ainconfig ??= structuredClone(defaultAIN)
data.openrouterKey ??= ''
data.openrouterRequestModel ??= 'openai/gpt-3.5-turbo'
data.toggleConfirmRecommendedPreset ??= true
data.officialplugins ??= {}
data.NAIsettings ??= cloneDeep(prebuiltNAIpresets)
data.NAIsettings ??= structuredClone(prebuiltNAIpresets)
data.assetWidth ??= -1
data.animationSpeed ??= 0.4
data.colorScheme ??= cloneDeep(defaultColorScheme)
data.colorScheme ??= structuredClone(defaultColorScheme)
data.colorSchemeName ??= 'default'
data.NAIsettings.starter ??= ""
data.hypaModel ??= 'MiniLM'
@@ -1049,8 +1048,8 @@ export const presetTemplate:botPreset = {
promptPreprocess: false,
proxyKey: '',
bias: [],
ooba: cloneDeep(defaultOoba),
ainconfig: cloneDeep(defaultAIN),
ooba: structuredClone(defaultOoba),
ainconfig: structuredClone(defaultAIN),
reverseProxyOobaArgs: {
mode: 'instruct'
},
@@ -1070,7 +1069,7 @@ const defaultSdData:[string,string][] = [
]
export const defaultSdDataFunc = () =>{
return cloneDeep(defaultSdData)
return structuredClone(defaultSdData)
}
export function saveCurrentPreset(){
@@ -1100,20 +1099,20 @@ export function saveCurrentPreset(){
bias: db.bias,
koboldURL: db.koboldURL,
proxyKey: db.proxyKey,
ooba: cloneDeep(db.ooba),
ainconfig: cloneDeep(db.ainconfig),
ooba: structuredClone(db.ooba),
ainconfig: structuredClone(db.ainconfig),
proxyRequestModel: db.proxyRequestModel,
openrouterRequestModel: db.openrouterRequestModel,
NAISettings: cloneDeep(db.NAIsettings),
NAISettings: structuredClone(db.NAIsettings),
promptTemplate: db.promptTemplate ?? null,
NAIadventure: db.NAIadventure ?? false,
NAIappendName: db.NAIappendName ?? false,
localStopStrings: db.localStopStrings,
autoSuggestPrompt: db.autoSuggestPrompt,
customProxyRequestModel: db.customProxyRequestModel,
reverseProxyOobaArgs: cloneDeep(db.reverseProxyOobaArgs) ?? null,
reverseProxyOobaArgs: structuredClone(db.reverseProxyOobaArgs) ?? null,
top_p: db.top_p ?? 1,
promptSettings: cloneDeep(db.promptSettings) ?? null,
promptSettings: structuredClone(db.promptSettings) ?? null,
repetition_penalty: db.repetition_penalty,
min_p: db.min_p,
top_a: db.top_a,
@@ -1128,7 +1127,7 @@ export function copyPreset(id:number){
saveCurrentPreset()
let db = get(DataBase)
let pres = db.botPresets
const newPres = cloneDeep(pres[id])
const newPres = structuredClone(pres[id])
newPres.name += " Copy"
db.botPresets.push(newPres)
setDatabase(db)
@@ -1168,8 +1167,8 @@ export function setPreset(db:Database, newPres: botPreset){
db.bias = newPres.bias ?? db.bias
db.koboldURL = newPres.koboldURL ?? db.koboldURL
db.proxyKey = newPres.proxyKey ?? db.proxyKey
db.ooba = cloneDeep(newPres.ooba ?? db.ooba)
db.ainconfig = cloneDeep(newPres.ainconfig ?? db.ainconfig)
db.ooba = structuredClone(newPres.ooba ?? db.ooba)
db.ainconfig = structuredClone(newPres.ainconfig ?? db.ainconfig)
db.openrouterRequestModel = newPres.openrouterRequestModel ?? db.openrouterRequestModel
db.proxyRequestModel = newPres.proxyRequestModel ?? db.proxyRequestModel
db.NAIsettings = newPres.NAISettings ?? db.NAIsettings
@@ -1184,12 +1183,12 @@ export function setPreset(db:Database, newPres: botPreset){
db.NAIsettings.mirostat_lr ??= 1
db.localStopStrings = newPres.localStopStrings
db.customProxyRequestModel = newPres.customProxyRequestModel ?? ''
db.reverseProxyOobaArgs = cloneDeep(newPres.reverseProxyOobaArgs) ?? {
db.reverseProxyOobaArgs = structuredClone(newPres.reverseProxyOobaArgs) ?? {
mode: 'instruct'
}
db.top_p = newPres.top_p ?? 1
//@ts-ignore //for legacy mistpings
db.promptSettings = cloneDeep(newPres.promptSettings) ?? {
db.promptSettings = structuredClone(newPres.promptSettings) ?? {
assistantPrefill: '',
postEndInnerFormat: '',
sendChatAsSystem: false,
@@ -1212,7 +1211,7 @@ import type { RisuModule } from '../process/modules';
export async function downloadPreset(id:number){
saveCurrentPreset()
let db = get(DataBase)
let pres = cloneDeep(db.botPresets[id])
let pres = structuredClone(db.botPresets[id])
console.log(pres)
pres.openAIKey = ''
pres.forceReplaceUrl = ''
@@ -1258,7 +1257,7 @@ export async function importPreset(){
let db = get(DataBase)
if(pre.presetVersion && pre.presetVersion >= 3){
//NAI preset
const pr = cloneDeep(prebuiltPresets.NAI2)
const pr = structuredClone(prebuiltPresets.NAI2)
pr.temperature = pre.parameters.temperature * 100
pr.maxResponse = pre.parameters.max_length
pr.NAISettings.topK = pre.parameters.top_k
@@ -1283,7 +1282,7 @@ export async function importPreset(){
if(Array.isArray(pre?.prompt_order?.[0]?.order) && Array.isArray(pre?.prompts)){
//ST preset
const pr = cloneDeep(presetTemplate)
const pr = structuredClone(presetTemplate)
pr.promptTemplate = []
function findPrompt(identifier:number){

View File

@@ -15,7 +15,6 @@ import { alertConfirm, alertError, alertNormal, alertNormalWait } from "../alert
import { checkDriverInit, syncDrive } from "../drive/drive";
import { hasher } from "../parser";
import { characterURLImport, hubURL } from "../characterCards";
import { cloneDeep } from "lodash";
import { defaultJailbreak, defaultMainPrompt, oldJailbreak, oldMainPrompt } from "./defaultPrompts";
import { loadRisuAccountData } from "../drive/accounter";
import { decodeRisuSave, encodeRisuSave } from "./risuSave";
@@ -940,7 +939,7 @@ async function checkNewFormat() {
name: "Global Regex",
description: "Converted from legacy global regex",
id: id,
regex: cloneDeep(db.globalscript)
regex: structuredClone(db.globalscript)
}
db.modules.push(regexModule)
db.enabledModules.push(id)
@@ -954,7 +953,7 @@ async function checkNewFormat() {
name: db.loreBook[i].name || "Unnamed Global Lorebook",
description: "Converted from legacy global lorebook",
id: id,
lorebook: cloneDeep(db.loreBook[i].data)
lorebook: structuredClone(db.loreBook[i].data)
}
db.modules.push(lbModule)
if(i === selIndex){
@@ -983,7 +982,7 @@ async function checkNewFormat() {
export function checkCharOrder() {
let db = get(DataBase)
db.characterOrder = db.characterOrder ?? []
let ordered = cloneDeep(db.characterOrder ?? [])
let ordered = structuredClone(db.characterOrder ?? [])
for(let i=0;i<db.characterOrder.length;i++){
const folder =db.characterOrder[i]
if(typeof(folder) !== 'string' && folder){

View File

@@ -1,6 +1,6 @@
import { get, writable } from "svelte/store";
import { DataBase, type character, type groupChat } from "./storage/database";
import { cloneDeep, isEqual } from "lodash";
import { isEqual } from "lodash";
import type { simpleCharacterArgument } from "./parser";
function updateSize(){
@@ -30,9 +30,9 @@ let db = get(DataBase)
let currentChar = get(selectedCharID)
let currentCharacter = db.characters ? (db.characters[currentChar]) : null
let currentChat = currentCharacter ? (currentCharacter.chats[currentCharacter.chatPage]) : null
export const CurrentCharacter = writable(cloneDeep(currentCharacter))
export const CurrentCharacter = writable(structuredClone(currentCharacter))
export const CurrentSimpleCharacter = writable(createSimpleCharacter(currentCharacter))
export const CurrentChat = writable(cloneDeep(currentChat))
export const CurrentChat = writable(structuredClone(currentChat))
export const CurrentUsername = writable(db.username)
export const CurrentUserIcon = writable(db.userIcon)
export const CurrentShowMemoryLimit = writable(db.showMemoryLimit)
@@ -49,7 +49,7 @@ function createSimpleCharacter(char:character|groupChat){
const simpleChar:simpleCharacterArgument = {
type: "simple",
customscript: cloneDeep(char.customscript),
customscript: structuredClone(char.customscript),
chaId: char.chaId,
additionalAssets: char.additionalAssets,
virtualscript: char.virtualscript,
@@ -80,7 +80,7 @@ function updateCurrentCharacter(){
ShowVN.set(currentChar?.viewScreen === 'vn')
}
CurrentCharacter.set(cloneDeep(currentChar))
CurrentCharacter.set(structuredClone(currentChar))
const simp = createSimpleCharacter(currentChar)
if(!isEqual(get(CurrentSimpleCharacter), simp)){
@@ -101,7 +101,7 @@ function updateCurrentChat(){
if(isEqual(gotChat, chat)){
return
}
CurrentChat.set(cloneDeep(chat))
CurrentChat.set(structuredClone(chat))
}
DataBase.subscribe((data) => {
@@ -133,7 +133,7 @@ CurrentCharacter.subscribe((char) => {
if(isEqual(cha, char)){
return
}
db.characters[charId] = cloneDeep(char)
db.characters[charId] = structuredClone(char)
DataBase.set(db)
})
@@ -142,7 +142,7 @@ CurrentChat.subscribe((chat) => {
if(currentChar){
if(!isEqual(currentChar.chats[currentChar.chatPage], chat)){
currentChar.chats[currentChar.chatPage] = cloneDeep(chat)
currentChar.chats[currentChar.chatPage] = structuredClone(chat)
CurrentCharacter.set(currentChar)
}
}

View File

@@ -3,7 +3,6 @@ import { alertError, alertInput, alertNormal, alertWait } from '../alert';
import { get } from 'svelte/store';
import { DataBase, setDatabase, type character, saveImage } from '../storage/database';
import { selectedCharID } from '../stores';
import { cloneDeep } from 'lodash';
import { findCharacterIndexbyId, sleep } from '../util';
import type { DataConnection, Peer } from 'peerjs';
import { readImage } from '../storage/globalApi';
@@ -40,7 +39,7 @@ export async function createMultiuserRoom(){
async function requestChar(excludeAssets:string[]|null = null){
const db = get(DataBase)
const selectedCharId = get(selectedCharID)
const char = cloneDeep(db.characters[selectedCharId])
const char = structuredClone(db.characters[selectedCharId])
if(char.type === 'group'){
return
}
@@ -88,7 +87,7 @@ export async function createMultiuserRoom(){
if(data.type === 'receive-char'){
const db = get(DataBase)
const selectedCharId = get(selectedCharID)
const char = cloneDeep(db.characters[selectedCharId])
const char = structuredClone(db.characters[selectedCharId])
const recivedChar = data.data
if(char.type === 'group'){
return