mirror of
https://github.com/Yidadaa/ChatGPT-Next-Web.git
synced 2025-08-08 17:44:57 +08:00
feat: close #935 add azure support
This commit is contained in:
@@ -1,3 +1,10 @@
|
||||
export function deepClone<T>(obj: T) {
|
||||
return JSON.parse(JSON.stringify(obj));
|
||||
}
|
||||
|
||||
export function ensure<T extends object>(
|
||||
obj: T,
|
||||
keys: Array<[keyof T][number]>,
|
||||
) {
|
||||
return keys.every((k) => obj[k] !== undefined && obj[k] !== null);
|
||||
}
|
||||
|
@@ -1,5 +1,5 @@
|
||||
import { create } from "zustand";
|
||||
import { persist } from "zustand/middleware";
|
||||
import { combine, persist } from "zustand/middleware";
|
||||
import { Updater } from "../typing";
|
||||
import { deepClone } from "./clone";
|
||||
|
||||
@@ -23,33 +23,42 @@ type SetStoreState<T> = (
|
||||
replace?: boolean | undefined,
|
||||
) => void;
|
||||
|
||||
export function createPersistStore<T, M>(
|
||||
defaultState: T,
|
||||
export function createPersistStore<T extends object, M>(
|
||||
state: T,
|
||||
methods: (
|
||||
set: SetStoreState<T & MakeUpdater<T>>,
|
||||
get: () => T & MakeUpdater<T>,
|
||||
) => M,
|
||||
persistOptions: SecondParam<typeof persist<T & M & MakeUpdater<T>>>,
|
||||
) {
|
||||
return create<T & M & MakeUpdater<T>>()(
|
||||
persist((set, get) => {
|
||||
return {
|
||||
...defaultState,
|
||||
...methods(set as any, get),
|
||||
return create(
|
||||
persist(
|
||||
combine(
|
||||
{
|
||||
...state,
|
||||
lastUpdateTime: 0,
|
||||
},
|
||||
(set, get) => {
|
||||
return {
|
||||
...methods(set, get as any),
|
||||
|
||||
lastUpdateTime: 0,
|
||||
markUpdate() {
|
||||
set({ lastUpdateTime: Date.now() } as Partial<
|
||||
T & M & MakeUpdater<T>
|
||||
>);
|
||||
markUpdate() {
|
||||
set({ lastUpdateTime: Date.now() } as Partial<
|
||||
T & M & MakeUpdater<T>
|
||||
>);
|
||||
},
|
||||
update(updater) {
|
||||
const state = deepClone(get());
|
||||
updater(state);
|
||||
set({
|
||||
...state,
|
||||
lastUpdateTime: Date.now(),
|
||||
});
|
||||
},
|
||||
} as M & MakeUpdater<T>;
|
||||
},
|
||||
update(updater) {
|
||||
const state = deepClone(get());
|
||||
updater(state);
|
||||
get().markUpdate();
|
||||
set(state);
|
||||
},
|
||||
};
|
||||
}, persistOptions),
|
||||
),
|
||||
persistOptions as any,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
Reference in New Issue
Block a user