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

@@ -82,7 +82,6 @@
"@types/dompurify": "^3.0.5", "@types/dompurify": "^3.0.5",
"@types/libsodium-wrappers-sumo": "^0.7.8", "@types/libsodium-wrappers-sumo": "^0.7.8",
"@types/lodash": "^4.14.202", "@types/lodash": "^4.14.202",
"@types/lodash.clonedeep": "^4.5.9",
"@types/lodash.isequal": "^4.5.8", "@types/lodash.isequal": "^4.5.8",
"@types/marked": "^5.0.2", "@types/marked": "^5.0.2",
"@types/node": "^18.19.7", "@types/node": "^18.19.7",

9
pnpm-lock.yaml generated
View File

@@ -199,9 +199,6 @@ devDependencies:
'@types/lodash': '@types/lodash':
specifier: ^4.14.202 specifier: ^4.14.202
version: 4.14.202 version: 4.14.202
'@types/lodash.clonedeep':
specifier: ^4.5.9
version: 4.5.9
'@types/lodash.isequal': '@types/lodash.isequal':
specifier: ^4.5.8 specifier: ^4.5.8
version: 4.5.8 version: 4.5.8
@@ -1612,12 +1609,6 @@ packages:
resolution: {integrity: sha512-KeAKtlObirLJk/na6jHBFEdTDjDfFS6Vcr0eG2FjiHKn3Nw8axJFfIu0Y9TpwaauRldQBj/pZm/MHtK76r6OWg==} resolution: {integrity: sha512-KeAKtlObirLJk/na6jHBFEdTDjDfFS6Vcr0eG2FjiHKn3Nw8axJFfIu0Y9TpwaauRldQBj/pZm/MHtK76r6OWg==}
dev: true dev: true
/@types/lodash.clonedeep@4.5.9:
resolution: {integrity: sha512-19429mWC+FyaAhOLzsS8kZUsI+/GmBAQ0HFiCPsKGU+7pBXOQWhyrY6xNNDwUSX8SMZMJvuFVMF9O5dQOlQK9Q==}
dependencies:
'@types/lodash': 4.14.202
dev: true
/@types/lodash.isequal@4.5.8: /@types/lodash.isequal@4.5.8:
resolution: {integrity: sha512-uput6pg4E/tj2LGxCZo9+y27JNyB2OZuuI/T5F+ylVDYuqICLG2/ktjxx0v6GvVntAf8TvEzeQLcV0ffRirXuA==} resolution: {integrity: sha512-uput6pg4E/tj2LGxCZo9+y27JNyB2OZuuI/T5F+ylVDYuqICLG2/ktjxx0v6GvVntAf8TvEzeQLcV0ffRirXuA==}
dependencies: dependencies:

View File

@@ -1,4 +1,4 @@
import { cloneDeep, merge } from "lodash"; import { merge } from "lodash";
import { languageChinese } from "./cn"; import { languageChinese } from "./cn";
import { languageGerman } from "./de"; import { languageGerman } from "./de";
import { languageEnglish } from "./en"; import { languageEnglish } from "./en";
@@ -10,16 +10,16 @@ export let language:typeof languageEnglish = languageEnglish
export function changeLanguage(lang:string){ export function changeLanguage(lang:string){
if(lang === 'cn'){ if(lang === 'cn'){
language = merge(cloneDeep(languageEnglish), languageChinese) language = merge(structuredClone(languageEnglish), languageChinese)
} }
else if(lang === 'de'){ else if(lang === 'de'){
language = merge(cloneDeep(languageEnglish), languageGerman) language = merge(structuredClone(languageEnglish), languageGerman)
} }
else if(lang === 'ko'){ else if(lang === 'ko'){
language = merge(cloneDeep(languageEnglish), languageKorean) language = merge(structuredClone(languageEnglish), languageKorean)
} }
else if(lang === 'vi'){ else if(lang === 'vi'){
language = merge(cloneDeep(languageEnglish), LanguageVietnamese) language = merge(structuredClone(languageEnglish), LanguageVietnamese)
} }
else{ else{
language = languageEnglish language = languageEnglish

View File

@@ -9,9 +9,10 @@
import { translateHTML } from "../../ts/translator/translator"; import { translateHTML } from "../../ts/translator/translator";
import { risuChatParser } from "src/ts/process/scripts"; import { risuChatParser } from "src/ts/process/scripts";
import { get } from "svelte/store"; import { get } from "svelte/store";
import { capitalize, isEqual } from "lodash"; import { isEqual } from "lodash";
import { sayTTS } from "src/ts/process/tts"; import { sayTTS } from "src/ts/process/tts";
import { getModelShortName } from "src/ts/model/names"; import { getModelShortName } from "src/ts/model/names";
import { capitalize } from "src/ts/util";
export let message = '' export let message = ''
export let name = '' export let name = ''
export let largePortrait = false export let largePortrait = false

View File

@@ -12,7 +12,6 @@
import { isExpTranslator, translate } from "../../ts/translator/translator"; import { isExpTranslator, translate } from "../../ts/translator/translator";
import { alertError, alertNormal, alertWait } from "../../ts/alert"; import { alertError, alertNormal, alertWait } from "../../ts/alert";
import sendSound from '../../etc/send.mp3' import sendSound from '../../etc/send.mp3'
import {cloneDeep} from 'lodash'
import { processScript } from "src/ts/process/scripts"; import { processScript } from "src/ts/process/scripts";
import CreatorQuote from "./CreatorQuote.svelte"; import CreatorQuote from "./CreatorQuote.svelte";
import { stopTTS } from "src/ts/process/tts"; import { stopTTS } from "src/ts/process/tts";
@@ -140,7 +139,7 @@
if(Array.isArray(rerolls[rerollid + 1])){ if(Array.isArray(rerolls[rerollid + 1])){
let db = $DataBase let db = $DataBase
rerollid += 1 rerollid += 1
let rerollData = cloneDeep(rerolls[rerollid]) let rerollData = structuredClone(rerolls[rerollid])
let msgs = db.characters[$selectedCharID].chats[$CurrentCharacter.chatPage].message let msgs = db.characters[$selectedCharID].chats[$CurrentCharacter.chatPage].message
for(let i = 0; i < rerollData.length; i++){ for(let i = 0; i < rerollData.length; i++){
msgs[msgs.length - rerollData.length + i] = rerollData[i] msgs[msgs.length - rerollData.length + i] = rerollData[i]
@@ -151,10 +150,10 @@
return return
} }
if(rerolls.length === 0){ if(rerolls.length === 0){
rerolls.push(cloneDeep([$CurrentChat.message.at(-1)])) rerolls.push(structuredClone([$CurrentChat.message.at(-1)]))
rerollid = rerolls.length - 1 rerollid = rerolls.length - 1
} }
let cha = cloneDeep($CurrentChat.message) let cha = structuredClone($CurrentChat.message)
if(cha.length === 0 ){ if(cha.length === 0 ){
return return
} }
@@ -199,7 +198,7 @@
if(Array.isArray(rerolls[rerollid - 1])){ if(Array.isArray(rerolls[rerollid - 1])){
let db = $DataBase let db = $DataBase
rerollid -= 1 rerollid -= 1
let rerollData = cloneDeep(rerolls[rerollid]) let rerollData = structuredClone(rerolls[rerollid])
let msgs = db.characters[$selectedCharID].chats[$CurrentCharacter.chatPage].message let msgs = db.characters[$selectedCharID].chats[$CurrentCharacter.chatPage].message
for(let i = 0; i < rerollData.length; i++){ for(let i = 0; i < rerollData.length; i++){
msgs[msgs.length - rerollData.length + i] = rerollData[i] msgs[msgs.length - rerollData.length + i] = rerollData[i]
@@ -222,7 +221,7 @@
continue:continued continue:continued
}) })
if(previousLength < $CurrentChat.message.length){ if(previousLength < $CurrentChat.message.length){
rerolls.push(cloneDeep($CurrentChat.message).slice(previousLength)) rerolls.push(structuredClone($CurrentChat.message).slice(previousLength))
rerollid = rerolls.length - 1 rerollid = rerolls.length - 1
} }
} catch (error) { } catch (error) {

View File

@@ -3,9 +3,8 @@
import { language } from "../../lang"; import { language } from "../../lang";
import { DataBase, changeToPreset, copyPreset, downloadPreset, importPreset, presetTemplate } from "../../ts/storage/database"; import { DataBase, changeToPreset, copyPreset, downloadPreset, importPreset, presetTemplate } from "../../ts/storage/database";
import { CopyIcon, DownloadIcon, EditIcon, FolderUpIcon, PlusIcon, TrashIcon, XIcon } from "lucide-svelte"; import { CopyIcon, DownloadIcon, EditIcon, FolderUpIcon, PlusIcon, TrashIcon, XIcon } from "lucide-svelte";
import { cloneDeep } from "lodash"; import TextInput from "../UI/GUI/TextInput.svelte";
import TextInput from "../UI/GUI/TextInput.svelte"; import { prebuiltPresets } from "src/ts/process/templates/templates";
import { prebuiltPresets } from "src/ts/process/templates/templates";
let editMode = false let editMode = false
export let close = () => {} export let close = () => {}
@@ -74,7 +73,7 @@
<div class="flex mt-2 items-center"> <div class="flex mt-2 items-center">
<button class="text-textcolor2 hover:text-green-500 cursor-pointer mr-1" on:click={() => { <button class="text-textcolor2 hover:text-green-500 cursor-pointer mr-1" on:click={() => {
let botPresets = $DataBase.botPresets let botPresets = $DataBase.botPresets
let newPreset = cloneDeep(prebuiltPresets.OAI2) let newPreset = structuredClone(prebuiltPresets.OAI2)
newPreset.name = `New Preset` newPreset.name = `New Preset`
botPresets.push(newPreset) botPresets.push(newPreset)

View File

@@ -1,19 +1,18 @@
<script lang="ts"> <script lang="ts">
import { language } from "../../lang"; import { language } from "../../lang";
import { tokenize, tokenizeAccurate } from "../../ts/tokenizer"; import { tokenizeAccurate } from "../../ts/tokenizer";
import { DataBase, saveImage as saveAsset, type Database, type character, type groupChat } from "../../ts/storage/database"; import { DataBase, saveImage as saveAsset, type Database, type character, type groupChat } from "../../ts/storage/database";
import { selectedCharID } from "../../ts/stores"; import { selectedCharID } from "../../ts/stores";
import { PlusIcon, SmileIcon, TrashIcon, UserIcon, ActivityIcon, BookIcon, LoaderIcon, User, DnaIcon, CurlyBraces, Volume2Icon, XIcon } from 'lucide-svelte' import { PlusIcon, SmileIcon, TrashIcon, UserIcon, ActivityIcon, BookIcon, User, CurlyBraces, Volume2Icon } from 'lucide-svelte'
import Check from "../UI/GUI/CheckInput.svelte"; import Check from "../UI/GUI/CheckInput.svelte";
import { addCharEmotion, addingEmotion, getCharImage, rmCharEmotion, selectCharImg, makeGroupImage } from "../../ts/characters"; import { addCharEmotion, addingEmotion, getCharImage, rmCharEmotion, selectCharImg, makeGroupImage } from "../../ts/characters";
import LoreBook from "./LoreBook/LoreBookSetting.svelte"; import LoreBook from "./LoreBook/LoreBookSetting.svelte";
import { alertConfirm, alertError, alertNormal, alertSelectChar, alertTOS } from "../../ts/alert"; import { alertConfirm, alertNormal, alertSelectChar, alertTOS } from "../../ts/alert";
import BarIcon from "./BarIcon.svelte"; import BarIcon from "./BarIcon.svelte";
import { findCharacterbyId, getAuthorNoteDefaultText, selectMultipleFile } from "../../ts/util"; import { findCharacterbyId, getAuthorNoteDefaultText, selectMultipleFile } from "../../ts/util";
import { onDestroy } from "svelte"; import { onDestroy } from "svelte";
import {isEqual, cloneDeep} from 'lodash' import {isEqual} from 'lodash'
import Help from "../Others/Help.svelte"; import Help from "../Others/Help.svelte";
import RegexData from "./Scripts/RegexData.svelte";
import { exportChar, shareRisuHub } from "src/ts/characterCards"; import { exportChar, shareRisuHub } from "src/ts/characterCards";
import { getElevenTTSVoices, getWebSpeechTTSVoices, getVOICEVOXVoices, oaiVoices, getNovelAIVoices, FixNAITTS } from "src/ts/process/tts"; import { getElevenTTSVoices, getWebSpeechTTSVoices, getVOICEVOXVoices, oaiVoices, getNovelAIVoices, FixNAITTS } from "src/ts/process/tts";
import { checkCharOrder, getFileSrc } from "src/ts/storage/globalApi"; import { checkCharOrder, getFileSrc } from "src/ts/storage/globalApi";
@@ -92,13 +91,13 @@
if(cha.type === 'character'){ if(cha.type === 'character'){
currentChar = { currentChar = {
type: 'character', type: 'character',
data: cloneDeep(cha) data: structuredClone(cha)
} }
} }
else{ else{
currentChar = { currentChar = {
type: 'group', type: 'group',
data: cloneDeep(cha) data: structuredClone(cha)
} }
} }
} }

View File

@@ -26,7 +26,6 @@
FolderIcon, FolderIcon,
FolderOpenIcon, FolderOpenIcon,
HomeIcon, HomeIcon,
MilestoneIcon,
} from "lucide-svelte"; } from "lucide-svelte";
import { import {
characterFormatUpdate, characterFormatUpdate,
@@ -38,18 +37,17 @@
import CharConfig from "./CharConfig.svelte"; import CharConfig from "./CharConfig.svelte";
import { language } from "../../lang"; import { language } from "../../lang";
import Botpreset from "../Setting/botpreset.svelte"; import Botpreset from "../Setting/botpreset.svelte";
import { onDestroy, onMount } from "svelte"; import { onDestroy } from "svelte";
import { cloneDeep, isEqual } from "lodash"; import { isEqual } from "lodash";
import SidebarAvatar from "./SidebarAvatar.svelte"; import SidebarAvatar from "./SidebarAvatar.svelte";
import BaseRoundedButton from "../UI/BaseRoundedButton.svelte"; import BaseRoundedButton from "../UI/BaseRoundedButton.svelte";
import { get } from "svelte/store"; import { get } from "svelte/store";
import { findCharacterIndexbyId, findCharacterbyId, getCharacterIndexObject, sleep } from "src/ts/util"; import { getCharacterIndexObject } from "src/ts/util";
import { v4 } from "uuid"; import { v4 } from "uuid";
import { checkCharOrder } from "src/ts/storage/globalApi"; import { checkCharOrder } from "src/ts/storage/globalApi";
import { doingChat } from "src/ts/process"; import { doingChat } from "src/ts/process";
import { BotCreator } from "src/ts/creation/creator"; import { BotCreator } from "src/ts/creation/creator";
import Button from "../UI/GUI/Button.svelte"; import Button from "../UI/GUI/Button.svelte";
import { fly } from "svelte/transition";
import { alertAddCharacter, alertInput, alertSelect } from "src/ts/alert"; import { alertAddCharacter, alertInput, alertSelect } from "src/ts/alert";
import SideChatList from "./SideChatList.svelte"; import SideChatList from "./SideChatList.svelte";
import { joinMultiuserRoom } from "src/ts/sync/multiuser"; import { joinMultiuserRoom } from "src/ts/sync/multiuser";
@@ -57,7 +55,6 @@
let sideBarMode = 0; let sideBarMode = 0;
let editMode = false; let editMode = false;
let menuMode = 0; let menuMode = 0;
let dragable = navigator.maxTouchPoints <= 1
export let openGrid = () => {}; export let openGrid = () => {};
function createScratch() { function createScratch() {
@@ -178,7 +175,7 @@
const da = db.characterOrder[mainIndex.index] const da = db.characterOrder[mainIndex.index]
if(typeof(da) !== 'string'){ if(typeof(da) !== 'string'){
mainId = da.id mainId = da.id
movingFolder = cloneDeep(da) movingFolder = structuredClone(da)
if(targetIndex.folder){ if(targetIndex.folder){
return return
} }

View File

@@ -6,7 +6,6 @@ import { language } from "src/lang"
import { v4 as uuidv4 } from 'uuid'; import { v4 as uuidv4 } from 'uuid';
import { characterFormatUpdate } from "./characters" import { characterFormatUpdate } from "./characters"
import { AppendableBuffer, checkCharOrder, downloadFile, loadAsset, LocalWriter, readImage, saveAsset, VirtualWriter } from "./storage/globalApi" import { AppendableBuffer, checkCharOrder, downloadFile, loadAsset, LocalWriter, readImage, saveAsset, VirtualWriter } from "./storage/globalApi"
import { cloneDeep, update } from "lodash"
import { CurrentCharacter, selectedCharID } from "./stores" import { CurrentCharacter, selectedCharID } from "./stores"
import { convertImage, hasher } from "./parser" import { convertImage, hasher } from "./parser"
@@ -275,7 +274,7 @@ function convertOldTavernAndJSON(charaData:OldTavernChar, imgp:string|undefined
export async function exportChar(charaID:number) { export async function exportChar(charaID:number) {
const db = get(DataBase) const db = get(DataBase)
let char = cloneDeep(db.characters[charaID]) let char = structuredClone(db.characters[charaID])
if(char.type === 'group'){ if(char.type === 'group'){
return return
@@ -314,7 +313,7 @@ async function importSpecv2(card:CharacterCardV2, img?:Uint8Array, mode:'hub'|'n
const im = img ? await saveAsset(await reencodeImage(img)) : undefined const im = img ? await saveAsset(await reencodeImage(img)) : undefined
let db = get(DataBase) let db = get(DataBase)
const risuext = cloneDeep(data.extensions.risuai) const risuext = structuredClone(data.extensions.risuai)
let emotions:[string, string][] = [] let emotions:[string, string][] = []
let bias:[string, number][] = [] let bias:[string, number][] = []
let viewScreen: "none" | "emotion" | "imggen" = 'none' 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){ for(const key in ext){
if(key === 'risuai'){ if(key === 'risuai'){
@@ -533,7 +532,7 @@ async function createBaseV2(char:character) {
key:string key:string
data:string[] data:string[]
} }
} = cloneDeep(lore.extentions ?? {}) } = structuredClone(lore.extentions ?? {})
let caseSensitive = ext.risu_case_sensitive ?? false let caseSensitive = ext.risu_case_sensitive ?? false
ext.risu_activationPercent = lore.activationPercent ext.risu_activationPercent = lore.activationPercent
@@ -733,7 +732,7 @@ export async function shareRisuHub2(char:character, arg:{
update: boolean update: boolean
}) { }) {
try { try {
char = cloneDeep(char) char = structuredClone(char)
char.license = arg.license char.license = arg.license
let tagList = arg.tag.split(',') let tagList = arg.tag.split(',')
@@ -794,7 +793,7 @@ export async function shareRisuHub(char:character, arg:{
license: string license: string
anon: boolean anon: boolean
}) { }) {
char = cloneDeep(char) char = structuredClone(char)
char.license = arg.license char.license = arg.license
let tagList = arg.tag.split(',') 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 { BaseDirectory, exists, readBinaryFile, readDir, writeBinaryFile } from "@tauri-apps/api/fs";
import { language } from "../../lang"; import { language } from "../../lang";
import { relaunch } from '@tauri-apps/api/process'; import { relaunch } from '@tauri-apps/api/process';
import { open } from '@tauri-apps/api/shell'; import { isEqual } from "lodash";
import { cloneDeep, isEqual, last } from "lodash";
import { sleep } from "../util"; import { sleep } from "../util";
import { hubURL } from "../characterCards"; import { hubURL } from "../characterCards";
import { decodeRisuSave, encodeRisuSave } from "../storage/risuSave"; import { decodeRisuSave, encodeRisuSave } from "../storage/risuSave";
@@ -108,7 +107,7 @@ let BackupDb:Database = null
export async function syncDrive() { export async function syncDrive() {
BackupDb = cloneDeep(get(DataBase)) BackupDb = structuredClone(get(DataBase))
return return
while(true){ while(true){
const maindb = get(DataBase) const maindb = get(DataBase)
@@ -136,7 +135,7 @@ export async function syncDrive() {
localStorage.setItem('risu_lastsaved', `${lastSaved}`) localStorage.setItem('risu_lastsaved', `${lastSaved}`)
const hadNoSync = d === 'noSync' const hadNoSync = d === 'noSync'
if((!isEqual(maindb, BackupDb)) || hadNoSync){ if((!isEqual(maindb, BackupDb)) || hadNoSync){
BackupDb = cloneDeep(maindb) BackupDb = structuredClone(maindb)
const files:DriveFile[] = await getFilesInFolder(ACCESS_TOKEN) const files:DriveFile[] = await getFilesInFolder(ACCESS_TOKEN)
const fileNames = files.map((d) => { const fileNames = files.map((d) => {
return d.name return d.name

View File

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

View File

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

View File

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

View File

@@ -13,7 +13,6 @@ import { exampleMessage } from "./exampleMessages";
import { sayTTS } from "./tts"; import { sayTTS } from "./tts";
import { supaMemory } from "./memory/supaMemory"; import { supaMemory } from "./memory/supaMemory";
import { v4 } from "uuid"; import { v4 } from "uuid";
import { cloneDeep } from "lodash";
import { groupOrder } from "./group"; import { groupOrder } from "./group";
import { runTrigger } from "./triggers"; import { runTrigger } from "./triggers";
import { HypaProcesser } from "./memory/hypamemory"; import { HypaProcesser } from "./memory/hypamemory";
@@ -207,7 +206,7 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n
'personaPrompt':([] as OpenAIChat[]) 'personaPrompt':([] as OpenAIChat[])
} }
let promptTemplate = cloneDeep(db.promptTemplate) let promptTemplate = structuredClone(db.promptTemplate)
const usingPromptTemplate = !!promptTemplate const usingPromptTemplate = !!promptTemplate
if(promptTemplate){ if(promptTemplate){
let hasPostEverything = false let hasPostEverything = false
@@ -394,7 +393,7 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n
for(const card of template){ for(const card of template){
switch(card.type){ switch(card.type){
case 'persona':{ case 'persona':{
let pmt = cloneDeep(unformated.personaPrompt) let pmt = structuredClone(unformated.personaPrompt)
if(card.innerFormat && pmt.length > 0){ if(card.innerFormat && pmt.length > 0){
for(let i=0;i<pmt.length;i++){ for(let i=0;i<pmt.length;i++){
pmt[i].content = risuChatParser(card.innerFormat, {chara: currentChar}).replace('{{slot}}', pmt[i].content) 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 break
} }
case 'description':{ case 'description':{
let pmt = cloneDeep(unformated.description) let pmt = structuredClone(unformated.description)
if(card.innerFormat && pmt.length > 0){ if(card.innerFormat && pmt.length > 0){
for(let i=0;i<pmt.length;i++){ for(let i=0;i<pmt.length;i++){
pmt[i].content = risuChatParser(card.innerFormat, {chara: currentChar}).replace('{{slot}}', pmt[i].content) 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 break
} }
case 'authornote':{ case 'authornote':{
let pmt = cloneDeep(unformated.authorNote) let pmt = structuredClone(unformated.authorNote)
if(card.innerFormat && pmt.length > 0){ if(card.innerFormat && pmt.length > 0){
for(let i=0;i<pmt.length;i++){ for(let i=0;i<pmt.length;i++){
pmt[i].content = risuChatParser(card.innerFormat, {chara: currentChar}).replace('{{slot}}', pmt[i].content || card.defaultText || '') 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 //make into one
let formated:OpenAIChat[] = [] let formated:OpenAIChat[] = []
const formatOrder = cloneDeep(db.formatingOrder) const formatOrder = structuredClone(db.formatingOrder)
if(formatOrder){ if(formatOrder){
formatOrder.push('postEverything') formatOrder.push('postEverything')
} }
@@ -803,7 +802,7 @@ export async function sendChat(chatProcessIndex = -1,arg:{chatAdditonalTokens?:n
for(const card of template){ for(const card of template){
switch(card.type){ switch(card.type){
case 'persona':{ case 'persona':{
let pmt = cloneDeep(unformated.personaPrompt) let pmt = structuredClone(unformated.personaPrompt)
if(card.innerFormat && pmt.length > 0){ if(card.innerFormat && pmt.length > 0){
for(let i=0;i<pmt.length;i++){ for(let i=0;i<pmt.length;i++){
pmt[i].content = risuChatParser(card.innerFormat, {chara: currentChar}).replace('{{slot}}', pmt[i].content) 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 break
} }
case 'description':{ case 'description':{
let pmt = cloneDeep(unformated.description) let pmt = structuredClone(unformated.description)
if(card.innerFormat && pmt.length > 0){ if(card.innerFormat && pmt.length > 0){
for(let i=0;i<pmt.length;i++){ for(let i=0;i<pmt.length;i++){
pmt[i].content = risuChatParser(card.innerFormat, {chara: currentChar}).replace('{{slot}}', pmt[i].content) 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 break
} }
case 'authornote':{ case 'authornote':{
let pmt = cloneDeep(unformated.authorNote) let pmt = structuredClone(unformated.authorNote)
if(card.innerFormat && pmt.length > 0){ if(card.innerFormat && pmt.length > 0){
for(let i=0;i<pmt.length;i++){ for(let i=0;i<pmt.length;i++){
pmt[i].content = risuChatParser(card.innerFormat, {chara: currentChar}).replace('{{slot}}', pmt[i].content || card.defaultText || '') 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 break
} }
case 'memory':{ case 'memory':{
let pmt = cloneDeep(memories) let pmt = structuredClone(memories)
if(card.innerFormat && pmt.length > 0){ if(card.innerFormat && pmt.length > 0){
for(let i=0;i<pmt.length;i++){ for(let i=0;i<pmt.length;i++){
pmt[i].content = risuChatParser(card.innerFormat, {chara: currentChar}).replace('{{slot}}', pmt[i].content) 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 { DataBase, type Chat, type character, type groupChat } from "../../storage/database";
import { tokenize, type ChatTokenizer } from "../../tokenizer"; import { tokenize, type ChatTokenizer } from "../../tokenizer";
import { requestChatData } from "../request"; import { requestChatData } from "../request";
import { cloneDeep } from "lodash";
import { HypaProcesser } from "./hypamemory"; import { HypaProcesser } from "./hypamemory";
import { stringlizeChat } from "../stringlize"; import { stringlizeChat } from "../stringlize";
import { globalFetch } from "src/ts/storage/globalApi"; import { globalFetch } from "src/ts/storage/globalApi";
@@ -74,7 +73,7 @@ export async function supaMemory(
for(let j=0;j<HypaData.length;j++){ for(let j=0;j<HypaData.length;j++){
let i =0; let i =0;
let countTokens = currentTokens let countTokens = currentTokens
let countChats = cloneDeep(chats) let countChats = structuredClone(chats)
while(true){ while(true){
if(countChats.length === 0){ if(countChats.length === 0){
break break

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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