1
import { shallow } from 'zustand/shallow';
2
import { createWithEqualityFn } from 'zustand/traditional';
3
import { StateCreator } from 'zustand/vanilla';
5
import { createDevtools } from '../middleware/createDevtools';
6
import { ToolStoreState, initialState } from './initialState';
7
import { BuiltinToolAction, createBuiltinToolSlice } from './slices/builtin';
8
import { CustomPluginAction, createCustomPluginSlice } from './slices/customPlugin';
9
import { PluginAction, createPluginSlice } from './slices/plugin';
10
import { PluginStoreAction, createPluginStoreSlice } from './slices/store';
12
// =============== 聚合 createStoreFn ============ //
14
export type ToolStore = ToolStoreState &
20
const createStore: StateCreator<ToolStore, [['zustand/devtools', never]]> = (...parameters) => ({
22
...createPluginSlice(...parameters),
23
...createCustomPluginSlice(...parameters),
24
...createPluginStoreSlice(...parameters),
25
...createBuiltinToolSlice(...parameters),
28
// =============== 实装 useStore ============ //
30
const devtools = createDevtools('tools');
32
export const useToolStore = createWithEqualityFn<ToolStore>()(devtools(createStore), shallow);