lupine.api 1.1.57 → 1.1.59

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.
Files changed (137) hide show
  1. package/README.md +3 -3
  2. package/admin/admin-about.tsx +12 -16
  3. package/admin/admin-config.tsx +47 -44
  4. package/admin/admin-css.tsx +3 -3
  5. package/admin/admin-db.tsx +75 -75
  6. package/admin/admin-frame-helper.tsx +364 -364
  7. package/admin/admin-frame.tsx +164 -164
  8. package/admin/admin-index.tsx +65 -65
  9. package/admin/admin-login.tsx +111 -111
  10. package/admin/admin-menu-edit.tsx +637 -637
  11. package/admin/admin-menu-list.tsx +87 -87
  12. package/admin/admin-page-edit.tsx +564 -564
  13. package/admin/admin-page-list.tsx +83 -83
  14. package/admin/admin-performance.tsx +28 -28
  15. package/admin/admin-release.tsx +427 -404
  16. package/admin/admin-resources.tsx +382 -382
  17. package/admin/admin-shell.tsx +89 -89
  18. package/admin/admin-table-data.tsx +146 -146
  19. package/admin/admin-table-list.tsx +230 -230
  20. package/admin/admin-test-animations.tsx +395 -395
  21. package/admin/admin-test-component.tsx +823 -808
  22. package/admin/admin-test-edit.tsx +319 -319
  23. package/admin/admin-test-themes.tsx +56 -56
  24. package/admin/admin-tokens.tsx +338 -338
  25. package/admin/design/admin-design.tsx +174 -174
  26. package/admin/design/block-grid.tsx +36 -36
  27. package/admin/design/block-grid1.tsx +21 -21
  28. package/admin/design/block-paragraph.tsx +19 -19
  29. package/admin/design/block-title.tsx +19 -19
  30. package/admin/design/design-block-box.tsx +140 -140
  31. package/admin/design/drag-data.tsx +24 -24
  32. package/admin/index.ts +9 -9
  33. package/admin/package.json +15 -15
  34. package/admin/tsconfig.json +127 -127
  35. package/dev/copy-folder.js +32 -32
  36. package/dev/cp-index-html.js +69 -69
  37. package/dev/file-utils.js +12 -12
  38. package/dev/index.js +18 -19
  39. package/dev/package.json +12 -12
  40. package/dev/plugin-ifelse.js +168 -168
  41. package/dev/plugin-ifelse.test.js +37 -37
  42. package/dev/run-cmd.js +14 -14
  43. package/dev/send-request.js +12 -12
  44. package/package.json +55 -55
  45. package/src/admin-api/admin-api-helper.ts +210 -205
  46. package/src/admin-api/admin-api.ts +65 -65
  47. package/src/admin-api/admin-auth.ts +152 -146
  48. package/src/admin-api/admin-config.ts +94 -84
  49. package/src/admin-api/admin-csv.ts +94 -94
  50. package/src/admin-api/admin-db.ts +269 -269
  51. package/src/admin-api/admin-menu.ts +135 -135
  52. package/src/admin-api/admin-page.ts +135 -135
  53. package/src/admin-api/admin-performance.ts +128 -128
  54. package/src/admin-api/admin-release.ts +703 -700
  55. package/src/admin-api/admin-resources.ts +318 -318
  56. package/src/admin-api/admin-token-helper.ts +82 -79
  57. package/src/admin-api/admin-tokens.ts +90 -90
  58. package/src/admin-api/index.ts +2 -2
  59. package/src/admin-api/web-config-api.ts +19 -19
  60. package/src/api/api-cache.ts +103 -103
  61. package/src/api/api-helper.ts +44 -44
  62. package/src/api/api-module.ts +67 -60
  63. package/src/api/api-router.ts +177 -177
  64. package/src/api/api-shared-storage.ts +64 -64
  65. package/src/api/async-storage.ts +5 -5
  66. package/src/api/debug-service.ts +56 -56
  67. package/src/api/encode-html.ts +27 -27
  68. package/src/api/handle-status.ts +75 -75
  69. package/src/api/index.ts +15 -16
  70. package/src/api/mini-web-socket.ts +270 -270
  71. package/src/api/server-content-type.ts +82 -82
  72. package/src/api/server-render.ts +235 -215
  73. package/src/api/shell-service.ts +74 -74
  74. package/src/api/simple-storage.ts +80 -80
  75. package/src/api/static-server.ts +128 -125
  76. package/src/api/to-client-delivery.ts +26 -26
  77. package/src/app/app-cache.ts +55 -55
  78. package/src/app/app-helper.ts +62 -62
  79. package/src/app/app-message.ts +109 -109
  80. package/src/app/app-shared-storage.ts +363 -363
  81. package/src/app/app-start.ts +136 -136
  82. package/src/app/cleanup-exit.ts +16 -16
  83. package/src/app/host-to-path.ts +38 -38
  84. package/src/app/index.ts +11 -11
  85. package/src/app/process-dev-requests.ts +130 -130
  86. package/src/app/web-listener.ts +294 -294
  87. package/src/app/web-processor.ts +47 -42
  88. package/src/app/web-server.ts +100 -100
  89. package/src/common-js/web-env.js +104 -104
  90. package/src/index.ts +7 -7
  91. package/src/lang/api-lang-en.ts +26 -26
  92. package/src/lang/api-lang-zh-cn.ts +27 -27
  93. package/src/lang/index.ts +2 -2
  94. package/src/lang/lang-helper.ts +76 -76
  95. package/src/lang/lang-props.ts +6 -6
  96. package/src/lib/db/db-helper.ts +23 -23
  97. package/src/lib/db/db-mysql.ts +249 -250
  98. package/src/lib/db/db-sqlite.ts +101 -101
  99. package/src/lib/db/db.spec.ts +28 -28
  100. package/src/lib/db/db.ts +325 -325
  101. package/src/lib/db/index.ts +5 -5
  102. package/src/lib/index.ts +3 -3
  103. package/src/lib/logger.spec.ts +214 -214
  104. package/src/lib/logger.ts +281 -281
  105. package/src/lib/runtime-require.ts +37 -37
  106. package/src/lib/utils/cookie-util.ts +34 -34
  107. package/src/lib/utils/crypto.ts +58 -58
  108. package/src/lib/utils/date-utils.ts +317 -317
  109. package/src/lib/utils/deep-merge.ts +37 -37
  110. package/src/lib/utils/delay.ts +12 -12
  111. package/src/lib/utils/file-setting.ts +55 -55
  112. package/src/lib/utils/format-bytes.ts +11 -11
  113. package/src/lib/utils/fs-utils.ts +158 -158
  114. package/src/lib/utils/get-env.ts +27 -27
  115. package/src/lib/utils/index.ts +12 -12
  116. package/src/lib/utils/is-type.ts +48 -48
  117. package/src/lib/utils/load-env.ts +14 -14
  118. package/src/lib/utils/pad.ts +6 -6
  119. package/src/models/api-base.ts +5 -5
  120. package/src/models/api-module-props.ts +10 -11
  121. package/src/models/api-router-props.ts +26 -26
  122. package/src/models/app-cache-props.ts +33 -33
  123. package/src/models/app-data-props.ts +10 -10
  124. package/src/models/app-helper-props.ts +6 -6
  125. package/src/models/app-shared-storage-props.ts +38 -38
  126. package/src/models/app-start-props.ts +18 -18
  127. package/src/models/async-storage-props.ts +13 -13
  128. package/src/models/db-config.ts +30 -30
  129. package/src/models/host-to-path-props.ts +12 -12
  130. package/src/models/index.ts +16 -16
  131. package/src/models/json-object.ts +8 -8
  132. package/src/models/locals-props.ts +36 -36
  133. package/src/models/logger-props.ts +84 -84
  134. package/src/models/simple-storage-props.ts +13 -14
  135. package/src/models/to-client-delivery-props.ts +6 -6
  136. package/tsconfig.json +115 -115
  137. package/dev/plugin-gen-versions.js +0 -20
@@ -1,364 +1,364 @@
1
- import { VNode, MenuItemProps } from 'lupine.components';
2
- import { NestMenuItemProps, TabsHookProps } from 'lupine.components';
3
- import { CreateTablesPage, RunSqlPage } from './admin-db';
4
- import { TableListPage } from './admin-table-list';
5
- import { AdminMenuPage } from './admin-menu-list';
6
- import { TestThemesPage } from './admin-test-themes';
7
- import { AdminPagePage } from './admin-page-list';
8
- import { AdminPerformancePage } from './admin-performance';
9
- import { AdminReleasePage } from './admin-release';
10
- import { AdminTestAnimationsPage } from './admin-test-animations';
11
- import { AdminTestEditPage } from './admin-test-edit';
12
- import { AdminResourcesPage } from './admin-resources';
13
- import { AdminTokensPage } from './admin-tokens';
14
- import { TestComponentPage } from './admin-test-component';
15
- import { AdminConfigPage } from './admin-config';
16
- import { AdminAboutPage } from './admin-about';
17
- import { AdminShellPage } from './admin-shell';
18
-
19
- const chineseMenuText: { text: string; zh: string }[] = [
20
- { text: 'Contents', zh: '内容管理' },
21
- { text: 'Menu List', zh: '菜单列表' },
22
- { text: 'Page List', zh: '页面列表' },
23
- { text: 'Process List', zh: '流程列表' },
24
-
25
- { text: 'DB', zh: '数据库' },
26
- { text: 'Table List', zh: '表' },
27
- { text: 'Create Tables', zh: '创建表' },
28
- { text: 'Run SQL', zh: '运行 SQL' },
29
-
30
- { text: 'Test', zh: '测试' },
31
- { text: 'Test Themes', zh: '测试主题' },
32
- { text: 'Test Component', zh: '测试组件' },
33
- { text: 'Test Animations', zh: '测试动画' },
34
- { text: 'Test Edit', zh: '测试编辑' },
35
-
36
- { text: 'Access', zh: '管理服务器' },
37
- { text: 'Release', zh: '发布' },
38
- { text: 'Tokens', zh: '管理令牌' },
39
-
40
- { text: 'Server Info', zh: '服务器信息' },
41
- { text: 'Resources', zh: '管理资源' },
42
- { text: 'Config', zh: '管理配置' },
43
- { text: 'Shell', zh: '命令终端' },
44
- { text: 'Server Info', zh: '服务器信息' },
45
- { text: 'Performance', zh: '性能' },
46
-
47
- { text: 'Help', zh: '帮助' },
48
- { text: 'About', zh: '关于' },
49
- ];
50
- const translateMenuToChinese = (text: string) => {
51
- const menuItem = chineseMenuText.find((item) => item.text === text);
52
- return menuItem ? menuItem.zh : text;
53
- };
54
-
55
- export type AppAdminHookCheckLoginProps = (authResponse: object) => Promise<boolean>;
56
- export type AppAdminHookLogoutProps = () => Promise<void>;
57
- export class AdminFrameHelper {
58
- consoleTitle = 'Welcome to Admin Panel';
59
- getConsoleTitle() {
60
- return this.consoleTitle;
61
- }
62
- setConsoleTitle(title: string) {
63
- this.consoleTitle = title;
64
- }
65
-
66
- isDevAdmin = false;
67
- getIsDevAdmin() {
68
- return this.isDevAdmin;
69
- }
70
- setIsDevAdmin(isDevAdmin: boolean) {
71
- this.isDevAdmin = isDevAdmin;
72
- }
73
-
74
- maxWidthMobileMenu = '700px';
75
- setMaxWidthMobileMenu(maxWidthMobileMenu: string) {
76
- this.maxWidthMobileMenu = maxWidthMobileMenu;
77
- }
78
- getMaxWidthMobileMenu() {
79
- return this.maxWidthMobileMenu;
80
- }
81
-
82
- maxTabsCount = 20;
83
- setMaxTabsCount(count: number) {
84
- this.maxTabsCount = count;
85
- }
86
- getMaxTabsCount() {
87
- return this.maxTabsCount;
88
- }
89
-
90
- tabsHook: TabsHookProps = {} as TabsHookProps;
91
- setTabsHook(hook: TabsHookProps) {
92
- this.tabsHook = hook;
93
- }
94
- getTabsHook() {
95
- return this.tabsHook;
96
- }
97
-
98
- AppAdminHookCheckLogin?: AppAdminHookCheckLoginProps;
99
- setAppAdminHookCheckLogin(hook: AppAdminHookCheckLoginProps) {
100
- this.AppAdminHookCheckLogin = hook;
101
- }
102
- getAppAdminHookCheckLogin() {
103
- return this.AppAdminHookCheckLogin;
104
- }
105
-
106
- AppAdminHookLogout?: AppAdminHookLogoutProps;
107
- setAppAdminHookLogout(hook: AppAdminHookLogoutProps) {
108
- this.AppAdminHookLogout = hook;
109
- }
110
- getAppAdminHookLogout() {
111
- return this.AppAdminHookLogout;
112
- }
113
-
114
- adminTopMenu: NestMenuItemProps[] = [
115
- // { text: 'Top', url: '/admin' },
116
- {
117
- id: 'contents',
118
- text: 'Contents',
119
- url: '',
120
- // hide: true,
121
- devAdmin: true,
122
- items: [
123
- {
124
- id: 'menu-list',
125
- text: 'Menu List',
126
- url: '',
127
- // hide: true,
128
- js: () => this.addPanel('Menu', AdminMenuPage()),
129
- },
130
- {
131
- id: 'page-list',
132
- text: 'Page List',
133
- url: '',
134
- js: () => this.addPanel('Page', AdminPagePage()),
135
- },
136
- {
137
- id: 'process-list',
138
- text: 'Process List',
139
- url: '',
140
- js: () => this.addPanel('Process', <div>new Process</div>),
141
- },
142
- ],
143
- },
144
- // { text: 'menu2', url: '/st_did.l--liangbufan.gunanguanvqingguandeng.html' },
145
- // {
146
- // text: 'Admin',
147
- // url: '',
148
- // items: [{ text: 'Users', url: '/admin/users' }],
149
- // },
150
- {
151
- id: 'db',
152
- text: 'DB',
153
- url: '',
154
- devAdmin: true,
155
- items: [
156
- {
157
- id: 'table-list',
158
- text: 'Table List',
159
- url: '',
160
- js: () => this.addPanel('Table List', TableListPage()),
161
- },
162
- {
163
- id: 'create-tables',
164
- text: 'Create Tables',
165
- url: '',
166
- js: () => this.addPanel('Create Tables', CreateTablesPage()),
167
- },
168
- {
169
- id: 'run-sql',
170
- text: 'Run SQL',
171
- url: '',
172
- js: () => this.addPanel('Run SQL', RunSqlPage()),
173
- },
174
- ],
175
- },
176
- {
177
- id: 'test',
178
- text: 'Test',
179
- url: '',
180
- devAdmin: true,
181
- items: [
182
- {
183
- id: 'test-themes',
184
- text: 'Test Themes',
185
- url: '',
186
- js: () => this.addPanel('Test Themes', TestThemesPage()),
187
- },
188
- {
189
- id: 'test-component',
190
- text: 'Test Component',
191
- url: '',
192
- js: () => this.addPanel('Test Component', TestComponentPage()),
193
- },
194
- {
195
- id: 'test-animations',
196
- text: 'Test Animations',
197
- url: '',
198
- js: () => this.addPanel('Test Animations', AdminTestAnimationsPage()),
199
- },
200
- {
201
- id: 'test-edit',
202
- text: 'Test Edit',
203
- url: '',
204
- js: () => this.addPanel('Test Edit', AdminTestEditPage()),
205
- },
206
- ],
207
- },
208
-
209
- {
210
- id: 'access',
211
- text: 'Access',
212
- url: '',
213
- devAdmin: true,
214
- items: [
215
- {
216
- id: 'release',
217
- text: 'Release',
218
- url: '',
219
- js: () => this.addPanel('Release', AdminReleasePage()),
220
- },
221
- {
222
- id: 'tokens',
223
- text: 'Tokens',
224
- url: '',
225
- js: () => this.addPanel('Tokens', AdminTokensPage()),
226
- },
227
- ],
228
- },
229
-
230
- {
231
- id: 'server-info',
232
- text: 'Server Info',
233
- url: '',
234
- devAdmin: true,
235
- items: [
236
- {
237
- id: 'performance',
238
- text: 'Performance',
239
- url: '',
240
- js: () => this.addPanel('Performance', AdminPerformancePage()),
241
- },
242
- {
243
- id: 'resources',
244
- text: 'Resources',
245
- url: '',
246
- js: () => this.addPanel('Resources', AdminResourcesPage()),
247
- },
248
- {
249
- id: 'config',
250
- text: 'Config',
251
- url: '',
252
- js: () => this.addPanel('Config', AdminConfigPage()),
253
- },
254
- {
255
- id: 'shell',
256
- text: 'Shell',
257
- url: '',
258
- js: () => this.addPanel('Shell', AdminShellPage()),
259
- },
260
- ],
261
- },
262
- {
263
- id: 'help',
264
- text: 'Help',
265
- url: '',
266
- devAdmin: true,
267
- items: [
268
- {
269
- id: 'about',
270
- text: 'About',
271
- url: '',
272
- js: () => this.addPanel('About', AdminAboutPage()),
273
- },
274
- ],
275
- },
276
- ];
277
-
278
- hookBeforeShowMenu?: (adminTopMenu: NestMenuItemProps[]) => NestMenuItemProps[];
279
- // Set a hook to modify the admin top menu dynamically before it is shown
280
- setHookBeforeShowMenu(hook: (adminTopMenu: NestMenuItemProps[]) => NestMenuItemProps[]) {
281
- this.hookBeforeShowMenu = hook;
282
- }
283
- getAdminTopMenu() {
284
- if (this.hookBeforeShowMenu) {
285
- return this.hookBeforeShowMenu(this.adminTopMenu);
286
- }
287
- return this.adminTopMenu;
288
- }
289
- setAdminTopMenu(adminTopMenu: NestMenuItemProps[]) {
290
- this.adminTopMenu = adminTopMenu;
291
- }
292
- setChineseAdminTopMenu() {
293
- this.adminTopMenu.forEach((item) => {
294
- item.text = translateMenuToChinese(item.text);
295
- item.items?.forEach((subItem) => {
296
- subItem.text = translateMenuToChinese(subItem.text);
297
- });
298
- });
299
- }
300
-
301
- mobileMenuMaxWidth = '700px';
302
- setMobileMenuMaxWidth(maxWidth: string) {
303
- this.mobileMenuMaxWidth = maxWidth;
304
- }
305
- getMobileMenuMaxWidth() {
306
- return this.mobileMenuMaxWidth;
307
- }
308
-
309
- insertMenuItem(item: NestMenuItemProps[], beforeMenuId?: string) {
310
- let index = -1;
311
- if (beforeMenuId) {
312
- index = this.adminTopMenu.findIndex((m) => m.id === beforeMenuId);
313
- }
314
- if (index !== -1) {
315
- this.adminTopMenu.splice(index, 0, ...item);
316
- } else {
317
- this.adminTopMenu.push(...item);
318
- }
319
- }
320
- insertSubMenuItem(item: MenuItemProps[], beforeMenuId: string, beforeSubMenuId?: string) {
321
- const index = this.adminTopMenu.findIndex((m) => m.id === beforeMenuId);
322
- if (index !== -1) {
323
- const subMenu = this.adminTopMenu[index].items || [];
324
- const subIndex = subMenu.findIndex((s) => s.id === beforeSubMenuId);
325
- if (subIndex !== -1) {
326
- subMenu.splice(subIndex, 0, ...item);
327
- } else {
328
- subMenu.push(...item);
329
- }
330
- // this.adminTopMenu[index].items = subMenu;
331
- }
332
- }
333
- getMenuItem(menuId: string): NestMenuItemProps | null {
334
- const index = this.adminTopMenu.findIndex((m) => m.id === menuId);
335
- if (index !== -1) {
336
- return this.adminTopMenu[index];
337
- }
338
- return null;
339
- }
340
- getSubMenuItem(menuId: string, subMenuId: string): MenuItemProps | null {
341
- const index = this.adminTopMenu.findIndex((m) => m.id === menuId);
342
- if (index !== -1) {
343
- const subMenu = this.adminTopMenu[index].items || [];
344
- const subIndex = subMenu.findIndex((s) => s.id === subMenuId);
345
- if (subIndex !== -1) {
346
- return subMenu[subIndex];
347
- }
348
- }
349
- return null;
350
- }
351
-
352
- refUpdate = this.getTabsHook();
353
- async addPanel(title: string, page: VNode) {
354
- if (this.getTabsHook().getCount!() > this.getMaxTabsCount()) {
355
- alert('You are opening too many pages');
356
- return;
357
- }
358
- if (this.getTabsHook().findAndActivate!(title)) {
359
- return;
360
- }
361
- await this.getTabsHook().newPage!(title, page);
362
- }
363
- }
364
- export const adminFrameHelper = /* @__PURE__ */ new AdminFrameHelper();
1
+ import { VNode, MenuItemProps } from 'lupine.components';
2
+ import { NestMenuItemProps, TabsHookProps } from 'lupine.components';
3
+ import { CreateTablesPage, RunSqlPage } from './admin-db';
4
+ import { TableListPage } from './admin-table-list';
5
+ import { AdminMenuPage } from './admin-menu-list';
6
+ import { TestThemesPage } from './admin-test-themes';
7
+ import { AdminPagePage } from './admin-page-list';
8
+ import { AdminPerformancePage } from './admin-performance';
9
+ import { AdminReleasePage } from './admin-release';
10
+ import { AdminTestAnimationsPage } from './admin-test-animations';
11
+ import { AdminTestEditPage } from './admin-test-edit';
12
+ import { AdminResourcesPage } from './admin-resources';
13
+ import { AdminTokensPage } from './admin-tokens';
14
+ import { TestComponentPage } from './admin-test-component';
15
+ import { AdminConfigPage } from './admin-config';
16
+ import { AdminAboutPage } from './admin-about';
17
+ import { AdminShellPage } from './admin-shell';
18
+
19
+ const chineseMenuText: { text: string; zh: string }[] = [
20
+ { text: 'Contents', zh: '内容管理' },
21
+ { text: 'Menu List', zh: '菜单列表' },
22
+ { text: 'Page List', zh: '页面列表' },
23
+ { text: 'Process List', zh: '流程列表' },
24
+
25
+ { text: 'DB', zh: '数据库' },
26
+ { text: 'Table List', zh: '表' },
27
+ { text: 'Create Tables', zh: '创建表' },
28
+ { text: 'Run SQL', zh: '运行 SQL' },
29
+
30
+ { text: 'Test', zh: '测试' },
31
+ { text: 'Test Themes', zh: '测试主题' },
32
+ { text: 'Test Component', zh: '测试组件' },
33
+ { text: 'Test Animations', zh: '测试动画' },
34
+ { text: 'Test Edit', zh: '测试编辑' },
35
+
36
+ { text: 'Access', zh: '管理服务器' },
37
+ { text: 'Release', zh: '发布' },
38
+ { text: 'Tokens', zh: '管理令牌' },
39
+
40
+ { text: 'Server Info', zh: '服务器信息' },
41
+ { text: 'Resources', zh: '管理资源' },
42
+ { text: 'Config', zh: '管理配置' },
43
+ { text: 'Shell', zh: '命令终端' },
44
+ { text: 'Server Info', zh: '服务器信息' },
45
+ { text: 'Performance', zh: '性能' },
46
+
47
+ { text: 'Help', zh: '帮助' },
48
+ { text: 'About', zh: '关于' },
49
+ ];
50
+ const translateMenuToChinese = (text: string) => {
51
+ const menuItem = chineseMenuText.find((item) => item.text === text);
52
+ return menuItem ? menuItem.zh : text;
53
+ };
54
+
55
+ export type AppAdminHookCheckLoginProps = (authResponse: object) => Promise<boolean>;
56
+ export type AppAdminHookLogoutProps = () => Promise<void>;
57
+ export class AdminFrameHelper {
58
+ consoleTitle = 'Welcome to Admin Panel';
59
+ getConsoleTitle() {
60
+ return this.consoleTitle;
61
+ }
62
+ setConsoleTitle(title: string) {
63
+ this.consoleTitle = title;
64
+ }
65
+
66
+ isDevAdmin = false;
67
+ getIsDevAdmin() {
68
+ return this.isDevAdmin;
69
+ }
70
+ setIsDevAdmin(isDevAdmin: boolean) {
71
+ this.isDevAdmin = isDevAdmin;
72
+ }
73
+
74
+ maxWidthMobileMenu = '700px';
75
+ setMaxWidthMobileMenu(maxWidthMobileMenu: string) {
76
+ this.maxWidthMobileMenu = maxWidthMobileMenu;
77
+ }
78
+ getMaxWidthMobileMenu() {
79
+ return this.maxWidthMobileMenu;
80
+ }
81
+
82
+ maxTabsCount = 20;
83
+ setMaxTabsCount(count: number) {
84
+ this.maxTabsCount = count;
85
+ }
86
+ getMaxTabsCount() {
87
+ return this.maxTabsCount;
88
+ }
89
+
90
+ tabsHook: TabsHookProps = {} as TabsHookProps;
91
+ setTabsHook(hook: TabsHookProps) {
92
+ this.tabsHook = hook;
93
+ }
94
+ getTabsHook() {
95
+ return this.tabsHook;
96
+ }
97
+
98
+ AppAdminHookCheckLogin?: AppAdminHookCheckLoginProps;
99
+ setAppAdminHookCheckLogin(hook: AppAdminHookCheckLoginProps) {
100
+ this.AppAdminHookCheckLogin = hook;
101
+ }
102
+ getAppAdminHookCheckLogin() {
103
+ return this.AppAdminHookCheckLogin;
104
+ }
105
+
106
+ AppAdminHookLogout?: AppAdminHookLogoutProps;
107
+ setAppAdminHookLogout(hook: AppAdminHookLogoutProps) {
108
+ this.AppAdminHookLogout = hook;
109
+ }
110
+ getAppAdminHookLogout() {
111
+ return this.AppAdminHookLogout;
112
+ }
113
+
114
+ adminTopMenu: NestMenuItemProps[] = [
115
+ // { text: 'Top', url: '/admin' },
116
+ {
117
+ id: 'contents',
118
+ text: 'Contents',
119
+ url: '',
120
+ // hide: true,
121
+ devAdmin: true,
122
+ items: [
123
+ {
124
+ id: 'menu-list',
125
+ text: 'Menu List',
126
+ url: '',
127
+ // hide: true,
128
+ js: () => this.addPanel('Menu', AdminMenuPage()),
129
+ },
130
+ {
131
+ id: 'page-list',
132
+ text: 'Page List',
133
+ url: '',
134
+ js: () => this.addPanel('Page', AdminPagePage()),
135
+ },
136
+ {
137
+ id: 'process-list',
138
+ text: 'Process List',
139
+ url: '',
140
+ js: () => this.addPanel('Process', <div>new Process</div>),
141
+ },
142
+ ],
143
+ },
144
+ // { text: 'menu2', url: '/st_did.l--liangbufan.gunanguanvqingguandeng.html' },
145
+ // {
146
+ // text: 'Admin',
147
+ // url: '',
148
+ // items: [{ text: 'Users', url: '/admin/users' }],
149
+ // },
150
+ {
151
+ id: 'db',
152
+ text: 'DB',
153
+ url: '',
154
+ devAdmin: true,
155
+ items: [
156
+ {
157
+ id: 'table-list',
158
+ text: 'Table List',
159
+ url: '',
160
+ js: () => this.addPanel('Table List', TableListPage()),
161
+ },
162
+ {
163
+ id: 'create-tables',
164
+ text: 'Create Tables',
165
+ url: '',
166
+ js: () => this.addPanel('Create Tables', CreateTablesPage()),
167
+ },
168
+ {
169
+ id: 'run-sql',
170
+ text: 'Run SQL',
171
+ url: '',
172
+ js: () => this.addPanel('Run SQL', RunSqlPage()),
173
+ },
174
+ ],
175
+ },
176
+ {
177
+ id: 'test',
178
+ text: 'Test',
179
+ url: '',
180
+ devAdmin: true,
181
+ items: [
182
+ {
183
+ id: 'test-themes',
184
+ text: 'Test Themes',
185
+ url: '',
186
+ js: () => this.addPanel('Test Themes', TestThemesPage()),
187
+ },
188
+ {
189
+ id: 'test-component',
190
+ text: 'Test Component',
191
+ url: '',
192
+ js: () => this.addPanel('Test Component', TestComponentPage()),
193
+ },
194
+ {
195
+ id: 'test-animations',
196
+ text: 'Test Animations',
197
+ url: '',
198
+ js: () => this.addPanel('Test Animations', AdminTestAnimationsPage()),
199
+ },
200
+ {
201
+ id: 'test-edit',
202
+ text: 'Test Edit',
203
+ url: '',
204
+ js: () => this.addPanel('Test Edit', AdminTestEditPage()),
205
+ },
206
+ ],
207
+ },
208
+
209
+ {
210
+ id: 'access',
211
+ text: 'Access',
212
+ url: '',
213
+ devAdmin: true,
214
+ items: [
215
+ {
216
+ id: 'release',
217
+ text: 'Release',
218
+ url: '',
219
+ js: () => this.addPanel('Release', AdminReleasePage()),
220
+ },
221
+ {
222
+ id: 'tokens',
223
+ text: 'Tokens',
224
+ url: '',
225
+ js: () => this.addPanel('Tokens', AdminTokensPage()),
226
+ },
227
+ ],
228
+ },
229
+
230
+ {
231
+ id: 'server-info',
232
+ text: 'Server Info',
233
+ url: '',
234
+ devAdmin: true,
235
+ items: [
236
+ {
237
+ id: 'performance',
238
+ text: 'Performance',
239
+ url: '',
240
+ js: () => this.addPanel('Performance', AdminPerformancePage()),
241
+ },
242
+ {
243
+ id: 'resources',
244
+ text: 'Resources',
245
+ url: '',
246
+ js: () => this.addPanel('Resources', AdminResourcesPage()),
247
+ },
248
+ {
249
+ id: 'config',
250
+ text: 'Config',
251
+ url: '',
252
+ js: () => this.addPanel('Config', AdminConfigPage()),
253
+ },
254
+ {
255
+ id: 'shell',
256
+ text: 'Shell',
257
+ url: '',
258
+ js: () => this.addPanel('Shell', AdminShellPage()),
259
+ },
260
+ ],
261
+ },
262
+ {
263
+ id: 'help',
264
+ text: 'Help',
265
+ url: '',
266
+ devAdmin: true,
267
+ items: [
268
+ {
269
+ id: 'about',
270
+ text: 'About',
271
+ url: '',
272
+ js: () => this.addPanel('About', AdminAboutPage()),
273
+ },
274
+ ],
275
+ },
276
+ ];
277
+
278
+ hookBeforeShowMenu?: (adminTopMenu: NestMenuItemProps[]) => NestMenuItemProps[];
279
+ // Set a hook to modify the admin top menu dynamically before it is shown
280
+ setHookBeforeShowMenu(hook: (adminTopMenu: NestMenuItemProps[]) => NestMenuItemProps[]) {
281
+ this.hookBeforeShowMenu = hook;
282
+ }
283
+ getAdminTopMenu() {
284
+ if (this.hookBeforeShowMenu) {
285
+ return this.hookBeforeShowMenu(this.adminTopMenu);
286
+ }
287
+ return this.adminTopMenu;
288
+ }
289
+ setAdminTopMenu(adminTopMenu: NestMenuItemProps[]) {
290
+ this.adminTopMenu = adminTopMenu;
291
+ }
292
+ setChineseAdminTopMenu() {
293
+ this.adminTopMenu.forEach((item) => {
294
+ item.text = translateMenuToChinese(item.text);
295
+ item.items?.forEach((subItem) => {
296
+ subItem.text = translateMenuToChinese(subItem.text);
297
+ });
298
+ });
299
+ }
300
+
301
+ mobileMenuMaxWidth = '700px';
302
+ setMobileMenuMaxWidth(maxWidth: string) {
303
+ this.mobileMenuMaxWidth = maxWidth;
304
+ }
305
+ getMobileMenuMaxWidth() {
306
+ return this.mobileMenuMaxWidth;
307
+ }
308
+
309
+ insertMenuItem(item: NestMenuItemProps[], beforeMenuId?: string) {
310
+ let index = -1;
311
+ if (beforeMenuId) {
312
+ index = this.adminTopMenu.findIndex((m) => m.id === beforeMenuId);
313
+ }
314
+ if (index !== -1) {
315
+ this.adminTopMenu.splice(index, 0, ...item);
316
+ } else {
317
+ this.adminTopMenu.push(...item);
318
+ }
319
+ }
320
+ insertSubMenuItem(item: MenuItemProps[], beforeMenuId: string, beforeSubMenuId?: string) {
321
+ const index = this.adminTopMenu.findIndex((m) => m.id === beforeMenuId);
322
+ if (index !== -1) {
323
+ const subMenu = this.adminTopMenu[index].items || [];
324
+ const subIndex = subMenu.findIndex((s) => s.id === beforeSubMenuId);
325
+ if (subIndex !== -1) {
326
+ subMenu.splice(subIndex, 0, ...item);
327
+ } else {
328
+ subMenu.push(...item);
329
+ }
330
+ // this.adminTopMenu[index].items = subMenu;
331
+ }
332
+ }
333
+ getMenuItem(menuId: string): NestMenuItemProps | null {
334
+ const index = this.adminTopMenu.findIndex((m) => m.id === menuId);
335
+ if (index !== -1) {
336
+ return this.adminTopMenu[index];
337
+ }
338
+ return null;
339
+ }
340
+ getSubMenuItem(menuId: string, subMenuId: string): MenuItemProps | null {
341
+ const index = this.adminTopMenu.findIndex((m) => m.id === menuId);
342
+ if (index !== -1) {
343
+ const subMenu = this.adminTopMenu[index].items || [];
344
+ const subIndex = subMenu.findIndex((s) => s.id === subMenuId);
345
+ if (subIndex !== -1) {
346
+ return subMenu[subIndex];
347
+ }
348
+ }
349
+ return null;
350
+ }
351
+
352
+ refUpdate = this.getTabsHook();
353
+ async addPanel(title: string, page: VNode) {
354
+ if (this.getTabsHook().getCount!() > this.getMaxTabsCount()) {
355
+ alert('You are opening too many pages');
356
+ return;
357
+ }
358
+ if (this.getTabsHook().findAndActivate!(title)) {
359
+ return;
360
+ }
361
+ await this.getTabsHook().newPage!(title, page);
362
+ }
363
+ }
364
+ export const adminFrameHelper = /* @__PURE__ */ new AdminFrameHelper();