@kevisual/api 0.0.48 → 0.0.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { QueryClient, Result } from '@kevisual/query';
1
+ import { QueryClient } from '@kevisual/query';
2
2
  import { QueryRouterServer, Route } from '@kevisual/router/browser';
3
3
  import { EventEmitter } from 'eventemitter3';
4
4
  import { QueryRouterServer as QueryRouterServer$1, App } from '@kevisual/router';
@@ -60,7 +60,7 @@ type RouterViewWorker = {
60
60
  };
61
61
  } & RouteViewBase;
62
62
  /**
63
- * 去掉不需要保存都服务器的数据
63
+ * 去掉不需要保存的服务器的数据
64
64
  * @param item
65
65
  * @returns
66
66
  */
@@ -113,7 +113,7 @@ declare const pickRouterViewData: (item: RouterViewItem) => {
113
113
  enabled?: boolean;
114
114
  };
115
115
  /**
116
- * 注入 js 的url地址,使用importScripts加载
116
+ * 注入 js 的url地址,使用 importScripts 加载
117
117
  */
118
118
  type RouteViewPage = {
119
119
  type: 'page';
@@ -126,6 +126,9 @@ type RouterViewQuery = {
126
126
  query: string;
127
127
  title: string;
128
128
  };
129
+ /**
130
+ * 后端存储结构
131
+ */
129
132
  type RouterViewData = {
130
133
  data: {
131
134
  items: RouterViewItem[];
@@ -145,9 +148,9 @@ declare class QueryProxy {
145
148
  token?: string;
146
149
  routerViewData?: RouterViewData;
147
150
  });
148
- getDefulatToken(): string;
151
+ private getDefulatToken;
149
152
  initRouterViewQuery(): void;
150
- initRouterView(item: RouterViewItem): RouterViewItem<{}>;
153
+ private initRouterView;
151
154
  /**
152
155
  * 初始化路由
153
156
  * main
@@ -162,10 +165,10 @@ declare class QueryProxy {
162
165
  initApi(item?: RouterViewApi): Promise<void>;
163
166
  initContext(item?: RouterViewContext): Promise<void>;
164
167
  generateId(): string;
165
- callWorker(msg: any, viewItem: RouterViewWorker['worker']): Promise<Result>;
166
- initWorker(item?: RouterViewWorker, initRoutes?: boolean): Promise<void>;
167
- initPage(item?: RouteViewPage): Promise<void>;
168
- getQueryByViewId(viewId: string): string | undefined;
168
+ private callWorker;
169
+ private initWorker;
170
+ private initPage;
171
+ private getQueryByViewId;
169
172
  /**
170
173
  * 列出路由
171
174
  * @param filter
@@ -175,8 +178,8 @@ declare class QueryProxy {
175
178
  listRoutes(filterFn?: (item: Route) => boolean, opts?: {
176
179
  viewId?: string;
177
180
  query?: string;
178
- }): Promise<any>;
179
- getViewQuery(viewId: string): Promise<string>;
181
+ }): Promise<any[]>;
182
+ getViewQuery(viewId: string): Promise<string | undefined>;
180
183
  /**
181
184
  * 运行路由
182
185
  * @param msg
@@ -197,6 +200,7 @@ type RouterItem = {
197
200
  middleware?: string[];
198
201
  metadata?: Record<string, any>;
199
202
  };
203
+ declare const createViewData: (routerViewData: RouterViewItem | RouterViewItem[], data?: RouterViewData) => RouterViewData;
200
204
 
201
205
  declare const initApi: (opts: {
202
206
  item?: RouterViewApi;
@@ -207,9 +211,9 @@ declare const initApi: (opts: {
207
211
  */
208
212
  exclude?: string;
209
213
  }) => Promise<{
210
- code: any;
214
+ code: number;
211
215
  message: string;
212
216
  }>;
213
217
 
214
- export { QueryProxy, RouteTypeList, initApi, pickRouterViewData };
218
+ export { QueryProxy, RouteTypeList, createViewData, initApi, pickRouterViewData };
215
219
  export type { RouteViewPage, RouterItem, RouterViewApi, RouterViewContext, RouterViewData, RouterViewItem, RouterViewItemInfo, RouterViewQuery, RouterViewWorker };
@@ -8839,6 +8839,7 @@ var initApi = async (opts) => {
8839
8839
  let metadata = r.metadata || {};
8840
8840
  metadata.viewItem = item;
8841
8841
  metadata.url = query.url;
8842
+ metadata.source = "query-proxy-api";
8842
8843
  router.route({
8843
8844
  path: r.path,
8844
8845
  key: r.key || "",
@@ -10307,6 +10308,7 @@ class QueryProxy {
10307
10308
  console.debug(`注册路由: [${r.path}] ${r?.key}`, "Context");
10308
10309
  let metadata = r.metadata || {};
10309
10310
  metadata.viewItem = item;
10311
+ metadata.source = "query-proxy-context";
10310
10312
  this.router.route({
10311
10313
  path: r.path,
10312
10314
  key: r.key || "",
@@ -10399,6 +10401,7 @@ class QueryProxy {
10399
10401
  console.debug(`注册路由: [${r.path}] ${r?.key}`, "API");
10400
10402
  let metadata = r.metadata || {};
10401
10403
  metadata.viewItem = item;
10404
+ metadata.source = "query-proxy-worker";
10402
10405
  this.router.route({
10403
10406
  path: r.path,
10404
10407
  key: r.key || "",
@@ -10504,13 +10507,24 @@ class QueryProxy {
10504
10507
  item.response = res;
10505
10508
  return item;
10506
10509
  }
10507
- item.response = { code: 500, message: "无法处理的路由类型" };
10510
+ item.response = { code: 500, message: "无法处理的路由类型", data: item };
10508
10511
  return item;
10509
10512
  }
10510
10513
  }
10514
+ var createViewData = (routerViewData, data) => {
10515
+ return {
10516
+ views: [],
10517
+ viewId: undefined,
10518
+ data: {
10519
+ items: Array.isArray(routerViewData) ? routerViewData : [routerViewData]
10520
+ },
10521
+ ...data
10522
+ };
10523
+ };
10511
10524
  export {
10512
10525
  pickRouterViewData,
10513
10526
  initApi,
10527
+ createViewData,
10514
10528
  RouteTypeList,
10515
10529
  QueryProxy
10516
10530
  };
@@ -28,17 +28,39 @@ type PostOpts = {
28
28
  declare class QueryConfig {
29
29
  query: Query;
30
30
  constructor(opts?: QueryConfigOpts);
31
- post<T = Config>(data: any): Promise<any>;
31
+ post<T = Config>(data: any): Promise<{
32
+ code: number;
33
+ data?: T | undefined;
34
+ message?: string;
35
+ }>;
32
36
  getItem({ id, key }: {
33
37
  id?: string;
34
38
  key?: string;
35
- }, opts?: PostOpts): Promise<any>;
36
- updateItem(data: Config, opts?: PostOpts): Promise<any>;
39
+ }, opts?: PostOpts): Promise<{
40
+ code: number;
41
+ data?: Config<any> | undefined;
42
+ message?: string;
43
+ }>;
44
+ updateItem(data: Config, opts?: PostOpts): Promise<{
45
+ code: number;
46
+ data?: Config<any> | undefined;
47
+ message?: string;
48
+ }>;
37
49
  deleteItem(data: {
38
50
  id?: string;
39
51
  key?: string;
40
- }, opts?: PostOpts): Promise<any>;
41
- listItems(opts?: PostOpts): Promise<any>;
52
+ }, opts?: PostOpts): Promise<{
53
+ code: number;
54
+ data?: Config<any> | undefined;
55
+ message?: string;
56
+ }>;
57
+ listItems(opts?: PostOpts): Promise<{
58
+ code: number;
59
+ data?: {
60
+ list: Config[];
61
+ } | undefined;
62
+ message?: string;
63
+ }>;
42
64
  }
43
65
 
44
66
  export { QueryConfig };
@@ -1,12 +1,38 @@
1
1
  import { Query, BaseQuery, DataOpts } from '@kevisual/query/query';
2
+ import { QueryUtil } from '@kevisual/router/define';
2
3
 
3
- declare const shopDefine: any;
4
+ declare const shopDefine: QueryUtil<{
5
+ getRegistry: {
6
+ path: string;
7
+ key: string;
8
+ description: string;
9
+ };
10
+ listInstalled: {
11
+ path: string;
12
+ key: string;
13
+ description: string;
14
+ };
15
+ install: {
16
+ path: string;
17
+ key: string;
18
+ description: string;
19
+ };
20
+ uninstall: {
21
+ path: string;
22
+ key: string;
23
+ description: string;
24
+ };
25
+ }>;
4
26
 
5
27
  declare class QueryShop<T extends Query = Query> extends BaseQuery<T> {
6
28
  constructor(opts?: {
7
29
  query: T;
8
30
  });
9
- getInstall(data: any, opts?: DataOpts): any;
31
+ getInstall(data: any, opts?: DataOpts): Promise<{
32
+ code: number;
33
+ data?: any;
34
+ message?: string;
35
+ }>;
10
36
  }
11
37
 
12
38
  export { QueryShop, shopDefine };
@@ -0,0 +1,30 @@
1
+ import * as zustand from 'zustand';
2
+
3
+ type Me = {
4
+ id?: string;
5
+ username?: string;
6
+ nickname?: string | null;
7
+ needChangePassword?: boolean;
8
+ role?: string;
9
+ description?: string | null;
10
+ type?: 'user' | 'org';
11
+ orgs?: string[];
12
+ avatar?: string;
13
+ };
14
+ type LayoutStore = {
15
+ open: boolean;
16
+ setOpen: (open: boolean) => void;
17
+ me: Me;
18
+ setMe: (me: Me) => void;
19
+ getMe: () => Promise<void>;
20
+ openUser: boolean;
21
+ setOpenUser: (openUser: boolean) => void;
22
+ switchOrg: (username?: string, type?: 'user' | 'org') => Promise<void>;
23
+ isAdmin: boolean;
24
+ setIsAdmin: (isAdmin: boolean) => void;
25
+ checkHasOrg: () => boolean;
26
+ };
27
+ declare const useLayoutStore: zustand.UseBoundStore<zustand.StoreApi<LayoutStore>>;
28
+
29
+ export { useLayoutStore };
30
+ export type { LayoutStore };
@@ -0,0 +1,43 @@
1
+ // store/store-auth/index.ts
2
+ import { create } from "zustand";
3
+ import { toast } from "sonner";
4
+ import { useContextKey } from "@kevisual/context";
5
+ var queryLogin = useContextKey("queryLogin");
6
+ var useLayoutStore = create((set, get) => ({
7
+ open: false,
8
+ setOpen: (open) => set({ open }),
9
+ me: {},
10
+ setMe: (me) => set({ me }),
11
+ getMe: async () => {
12
+ const res = await queryLogin.getMe();
13
+ if (res.code === 200) {
14
+ set({ me: res.data });
15
+ set({ isAdmin: res.data.orgs?.includes("admin") });
16
+ }
17
+ },
18
+ openUser: false,
19
+ setOpenUser: (openUser) => set({ openUser }),
20
+ switchOrg: async (username, type) => {
21
+ const res = await queryLogin.switchUser(username || "");
22
+ if (res.code === 200) {
23
+ toast.success("Switch success");
24
+ setTimeout(() => {
25
+ window.location.reload();
26
+ }, 1000);
27
+ } else {
28
+ toast.error(res.message || "Request failed");
29
+ }
30
+ },
31
+ isAdmin: false,
32
+ setIsAdmin: (isAdmin) => set({ isAdmin }),
33
+ checkHasOrg: () => {
34
+ const user = get().me || {};
35
+ if (!user.orgs) {
36
+ return false;
37
+ }
38
+ return user?.orgs?.length > 0;
39
+ }
40
+ }));
41
+ export {
42
+ useLayoutStore
43
+ };
@@ -0,0 +1,154 @@
1
+ import * as zustand from 'zustand';
2
+ import { Result, DataOpts } from '@kevisual/query/query';
3
+ import { Query } from '@kevisual/query';
4
+
5
+ type SimpleObject = Record<string, any>;
6
+ declare const markType: readonly ["simple", "md", "mdx", "wallnote", "excalidraw", "chat"];
7
+ type MarkType = (typeof markType)[number];
8
+ type MarkData = {
9
+ nodes?: any[];
10
+ edges?: any[];
11
+ elements?: any[];
12
+ permission?: any;
13
+ [key: string]: any;
14
+ };
15
+ type Mark = {
16
+ id: string;
17
+ title: string;
18
+ description: string;
19
+ markType: MarkType;
20
+ link: string;
21
+ data?: MarkData;
22
+ uid: string;
23
+ puid: string;
24
+ summary: string;
25
+ thumbnail?: string;
26
+ tags: string[];
27
+ createdAt: string;
28
+ updatedAt: string;
29
+ version: number;
30
+ };
31
+ type SearchOpts = {
32
+ page?: number;
33
+ pageSize?: number;
34
+ search?: string;
35
+ sort?: string;
36
+ markType?: MarkType;
37
+ [key: string]: any;
38
+ };
39
+ type QueryMarkOpts<T extends SimpleObject = SimpleObject> = {
40
+ query?: Query;
41
+ isBrowser?: boolean;
42
+ onLoad?: () => void;
43
+ } & T;
44
+ type ResultMarkList = {
45
+ list: Mark[];
46
+ pagination: {
47
+ pageSize: number;
48
+ current: number;
49
+ total: number;
50
+ };
51
+ };
52
+ declare class QueryMarkBase<T extends SimpleObject = SimpleObject> {
53
+ query: Query;
54
+ isBrowser: boolean;
55
+ load?: boolean;
56
+ storage?: Storage;
57
+ onLoad?: () => void;
58
+ constructor(opts?: QueryMarkOpts<T>);
59
+ setQuery(query: Query): void;
60
+ private init;
61
+ post<T = Result<any>>(data: any, opts?: DataOpts): Promise<T>;
62
+ getMarkList(search: SearchOpts, opts?: DataOpts): Promise<{
63
+ code: number;
64
+ data?: ResultMarkList | undefined;
65
+ message?: string;
66
+ }>;
67
+ getMark(id: string, opts?: DataOpts): Promise<{
68
+ code: number;
69
+ data?: Mark | undefined;
70
+ message?: string;
71
+ }>;
72
+ getVersion(id: string, opts?: DataOpts): Promise<{
73
+ code: number;
74
+ data?: {
75
+ version: number;
76
+ id: string;
77
+ } | undefined;
78
+ message?: string;
79
+ }>;
80
+ /**
81
+ * 检查版本
82
+ * 当需要更新时,返回true
83
+ * @param id
84
+ * @param version
85
+ * @param opts
86
+ * @returns
87
+ */
88
+ checkVersion(id: string, version?: number, opts?: DataOpts): Promise<boolean>;
89
+ updateMark(data: any, opts?: DataOpts): Promise<{
90
+ code: number;
91
+ data?: Mark | undefined;
92
+ message?: string;
93
+ }>;
94
+ deleteMark(id: string, opts?: DataOpts): Promise<{
95
+ code: number;
96
+ data?: Mark | undefined;
97
+ message?: string;
98
+ }>;
99
+ }
100
+ declare class QueryMark extends QueryMarkBase<SimpleObject> {
101
+ markType: string;
102
+ constructor(opts?: QueryMarkOpts & {
103
+ markType?: MarkType;
104
+ });
105
+ getMarkList(search?: SearchOpts, opts?: DataOpts): Promise<{
106
+ code: number;
107
+ data?: ResultMarkList | undefined;
108
+ message?: string;
109
+ }>;
110
+ updateMark(data: any, opts?: DataOpts): Promise<{
111
+ code: number;
112
+ data?: Mark | undefined;
113
+ message?: string;
114
+ }>;
115
+ }
116
+
117
+ type ManagerStore = {
118
+ /** 当前选中的Mark */
119
+ currentMarkId: string;
120
+ setCurrentMarkId: (markId: string) => void;
121
+ markData?: Mark | undefined;
122
+ setMarkData: (mark?: Partial<Mark>) => void;
123
+ /** 获取Mark列表 */
124
+ getList: () => Promise<any>;
125
+ getMarkFromList: (markId: string) => Mark | undefined;
126
+ updateMark: (mark: Mark) => Promise<any>;
127
+ getMark: (markId: string) => Promise<Result<Mark>>;
128
+ deleteMark: (markId: string) => Promise<any>;
129
+ /** Mark列表 */
130
+ list: Mark[];
131
+ setList: (list: Mark[]) => void;
132
+ pagination: {
133
+ current: number;
134
+ pageSize: number;
135
+ total: number;
136
+ };
137
+ setPagination: (pagination: {
138
+ current: number;
139
+ pageSize: number;
140
+ total: number;
141
+ }) => void;
142
+ /** 搜索 */
143
+ search: string;
144
+ setSearch: (search: string) => void;
145
+ /** 初始化 */
146
+ init: (markType: MarkType) => Promise<void>;
147
+ queryMark?: QueryMark;
148
+ markType?: MarkType;
149
+ open: boolean;
150
+ setOpen: (open: boolean) => void;
151
+ };
152
+ declare const useMarkStore: zustand.UseBoundStore<zustand.StoreApi<ManagerStore>>;
153
+
154
+ export { useMarkStore };