@4399ywkf/cli 1.0.7 → 1.0.9

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 (254) hide show
  1. package/dist/templates/AntdStaticMethods/index.tsx +20 -0
  2. package/dist/templates/AppTheme.tsx +136 -0
  3. package/dist/templates/DIRECTORY_STRUCTURE.md +141 -0
  4. package/dist/templates/GlobalProvider/AppTheme.tsx +136 -0
  5. package/dist/templates/GlobalProvider/Locale.tsx +84 -0
  6. package/dist/templates/GlobalProvider/Query.tsx +12 -0
  7. package/dist/templates/GlobalProvider/StyleRegistry.tsx +9 -0
  8. package/dist/templates/GlobalProvider/index.tsx +23 -0
  9. package/dist/templates/HarmonyOS_Sans_Bold.woff2 +0 -0
  10. package/dist/templates/HarmonyOS_Sans_Medium.woff2 +0 -0
  11. package/dist/templates/HarmonyOS_Sans_Regular.woff2 +0 -0
  12. package/dist/templates/Locale.tsx +49 -54
  13. package/dist/templates/MainContentWrap.tsx +11 -15
  14. package/dist/templates/Query.tsx +12 -0
  15. package/dist/templates/StyleRegistry.tsx +9 -0
  16. package/dist/templates/ThemeContext.tsx +27 -24
  17. package/dist/templates/analyzeUnusedKeys.ts +506 -0
  18. package/dist/templates/app/.i18nrc.js +57 -0
  19. package/dist/templates/app/config/env/.env.public.tpl +2 -19
  20. package/dist/templates/app/config/jwt/index.ts +4 -4
  21. package/dist/templates/app/config/request/error-handler.ts +67 -0
  22. package/dist/templates/app/config/request/index.ts +127 -129
  23. package/dist/templates/app/config/request/interceptors.ts +118 -0
  24. package/dist/templates/app/config/request/token-manager.ts +23 -0
  25. package/dist/templates/app/config/request/types.ts +63 -0
  26. package/dist/templates/app/config/rspack/rspack.config.mjs +62 -61
  27. package/dist/templates/app/config/rspack/rspack.prod.mjs +41 -62
  28. package/dist/templates/app/docs/DIRECTORY_STRUCTURE.md +141 -0
  29. package/dist/templates/app/docs/glossary.md +11 -0
  30. package/dist/templates/app/locales/zh-CN/common.json +3 -0
  31. package/dist/templates/app/package.json.tpl +8 -25
  32. package/dist/templates/app/public/fonts/HarmonyOS_Sans_Bold.woff2 +0 -0
  33. package/dist/templates/app/public/fonts/HarmonyOS_Sans_Medium.woff2 +0 -0
  34. package/dist/templates/app/public/fonts/HarmonyOS_Sans_Regular.woff2 +0 -0
  35. package/dist/templates/app/react-app-env.d.ts +13 -8
  36. package/dist/templates/app/scripts/i18nWorkflow/analyzeUnusedKeys.ts +506 -0
  37. package/dist/templates/app/scripts/i18nWorkflow/cleanUnusedKeys.ts +344 -0
  38. package/dist/templates/app/scripts/i18nWorkflow/const.ts +18 -0
  39. package/dist/templates/app/scripts/i18nWorkflow/flattenLocaleKeys.ts +139 -0
  40. package/dist/templates/app/scripts/i18nWorkflow/genDefaultLocale.ts +19 -0
  41. package/dist/templates/app/scripts/i18nWorkflow/genDiff.ts +49 -0
  42. package/dist/templates/app/scripts/i18nWorkflow/i18nConfig.ts +7 -0
  43. package/dist/templates/app/scripts/i18nWorkflow/index.ts +11 -0
  44. package/dist/templates/app/scripts/i18nWorkflow/protectedPatterns.ts +91 -0
  45. package/dist/templates/app/scripts/i18nWorkflow/utils.ts +76 -0
  46. package/dist/templates/app/src/bootstrap/index.ts +34 -0
  47. package/dist/templates/app/src/components/AntdStaticMethods/index.tsx +20 -0
  48. package/dist/templates/app/src/config/env.ts +84 -0
  49. package/dist/templates/app/src/index.tsx +13 -51
  50. package/dist/templates/app/src/layout/GlobalProvider/AppTheme.tsx +136 -0
  51. package/dist/templates/app/src/layout/GlobalProvider/Locale.tsx +84 -0
  52. package/dist/templates/app/src/layout/GlobalProvider/Query.tsx +12 -0
  53. package/dist/templates/app/src/layout/GlobalProvider/StyleRegistry.tsx +9 -0
  54. package/dist/templates/app/src/layout/GlobalProvider/index.tsx +23 -0
  55. package/dist/templates/app/src/layout/Locale.tsx +14 -18
  56. package/dist/templates/app/src/layout/MainContentWrap.tsx +11 -15
  57. package/dist/templates/app/src/layout/ThemeContext.tsx +27 -24
  58. package/dist/templates/app/src/locales/default/common.ts +3 -1
  59. package/dist/templates/app/src/locales/utils.ts +23 -0
  60. package/dist/templates/app/src/micro/garfish.ts +53 -0
  61. package/dist/templates/app/src/pages/base/index.tsx +280 -25
  62. package/dist/templates/app/src/routes.tsx +21 -12
  63. package/dist/templates/app/src/types/global.d.ts +19 -0
  64. package/dist/templates/app/src/utils/index.ts +3 -1
  65. package/dist/templates/app/store/middleware/createDevtools.ts +7 -7
  66. package/dist/templates/app/tsconfig.json +19 -3
  67. package/dist/templates/base/index.tsx +280 -25
  68. package/dist/templates/bootstrap/index.ts +34 -0
  69. package/dist/templates/cleanUnusedKeys.ts +344 -0
  70. package/dist/templates/common.json +3 -0
  71. package/dist/templates/common.ts +3 -1
  72. package/dist/templates/components/AntdStaticMethods/index.tsx +20 -0
  73. package/dist/templates/config/env/.env.public.tpl +2 -19
  74. package/dist/templates/config/env.ts +84 -0
  75. package/dist/templates/config/jwt/index.ts +4 -4
  76. package/dist/templates/config/request/error-handler.ts +67 -0
  77. package/dist/templates/config/request/index.ts +127 -129
  78. package/dist/templates/config/request/interceptors.ts +118 -0
  79. package/dist/templates/config/request/token-manager.ts +23 -0
  80. package/dist/templates/config/request/types.ts +63 -0
  81. package/dist/templates/config/rspack/rspack.config.mjs +62 -61
  82. package/dist/templates/config/rspack/rspack.prod.mjs +41 -62
  83. package/dist/templates/const.ts +18 -0
  84. package/dist/templates/createDevtools.ts +7 -7
  85. package/dist/templates/default/common.ts +3 -1
  86. package/dist/templates/docs/DIRECTORY_STRUCTURE.md +141 -0
  87. package/dist/templates/docs/glossary.md +11 -0
  88. package/dist/templates/env/.env.public.tpl +2 -19
  89. package/dist/templates/env.ts +83 -2
  90. package/dist/templates/error-handler.ts +67 -0
  91. package/dist/templates/flattenLocaleKeys.ts +139 -0
  92. package/dist/templates/fonts/HarmonyOS_Sans_Bold.woff2 +0 -0
  93. package/dist/templates/fonts/HarmonyOS_Sans_Medium.woff2 +0 -0
  94. package/dist/templates/fonts/HarmonyOS_Sans_Regular.woff2 +0 -0
  95. package/dist/templates/garfish.ts +53 -0
  96. package/dist/templates/genDefaultLocale.ts +19 -0
  97. package/dist/templates/genDiff.ts +49 -0
  98. package/dist/templates/global.d.ts +19 -0
  99. package/dist/templates/glossary.md +11 -0
  100. package/dist/templates/i18nConfig.ts +7 -0
  101. package/dist/templates/i18nWorkflow/analyzeUnusedKeys.ts +506 -0
  102. package/dist/templates/i18nWorkflow/cleanUnusedKeys.ts +344 -0
  103. package/dist/templates/i18nWorkflow/const.ts +18 -0
  104. package/dist/templates/i18nWorkflow/flattenLocaleKeys.ts +139 -0
  105. package/dist/templates/i18nWorkflow/genDefaultLocale.ts +19 -0
  106. package/dist/templates/i18nWorkflow/genDiff.ts +49 -0
  107. package/dist/templates/i18nWorkflow/i18nConfig.ts +7 -0
  108. package/dist/templates/i18nWorkflow/index.ts +11 -0
  109. package/dist/templates/i18nWorkflow/protectedPatterns.ts +91 -0
  110. package/dist/templates/i18nWorkflow/utils.ts +76 -0
  111. package/dist/templates/index.tsx +280 -25
  112. package/dist/templates/interceptors.ts +118 -0
  113. package/dist/templates/jwt/index.ts +4 -4
  114. package/dist/templates/layout/GlobalProvider/AppTheme.tsx +136 -0
  115. package/dist/templates/layout/GlobalProvider/Locale.tsx +84 -0
  116. package/dist/templates/layout/GlobalProvider/Query.tsx +12 -0
  117. package/dist/templates/layout/GlobalProvider/StyleRegistry.tsx +9 -0
  118. package/dist/templates/layout/GlobalProvider/index.tsx +23 -0
  119. package/dist/templates/layout/Locale.tsx +14 -18
  120. package/dist/templates/layout/MainContentWrap.tsx +11 -15
  121. package/dist/templates/layout/ThemeContext.tsx +27 -24
  122. package/dist/templates/locales/default/common.ts +3 -1
  123. package/dist/templates/locales/utils.ts +23 -0
  124. package/dist/templates/locales/zh-CN/common.json +3 -0
  125. package/dist/templates/micro/garfish.ts +53 -0
  126. package/dist/templates/middleware/createDevtools.ts +7 -7
  127. package/dist/templates/package.json.tpl +8 -25
  128. package/dist/templates/page.tsx +21 -19
  129. package/dist/templates/pages/base/index.tsx +280 -25
  130. package/dist/templates/protectedPatterns.ts +91 -0
  131. package/dist/templates/public/fonts/HarmonyOS_Sans_Bold.woff2 +0 -0
  132. package/dist/templates/public/fonts/HarmonyOS_Sans_Medium.woff2 +0 -0
  133. package/dist/templates/public/fonts/HarmonyOS_Sans_Regular.woff2 +0 -0
  134. package/dist/templates/react-app-env.d.ts +13 -8
  135. package/dist/templates/request/error-handler.ts +67 -0
  136. package/dist/templates/request/index.ts +127 -129
  137. package/dist/templates/request/interceptors.ts +118 -0
  138. package/dist/templates/request/token-manager.ts +23 -0
  139. package/dist/templates/request/types.ts +63 -0
  140. package/dist/templates/routes.tsx +21 -12
  141. package/dist/templates/rspack/rspack.config.mjs +62 -61
  142. package/dist/templates/rspack/rspack.prod.mjs +41 -62
  143. package/dist/templates/rspack.config.mjs +62 -61
  144. package/dist/templates/rspack.prod.mjs +41 -62
  145. package/dist/templates/scripts/i18nWorkflow/analyzeUnusedKeys.ts +506 -0
  146. package/dist/templates/scripts/i18nWorkflow/cleanUnusedKeys.ts +344 -0
  147. package/dist/templates/scripts/i18nWorkflow/const.ts +18 -0
  148. package/dist/templates/scripts/i18nWorkflow/flattenLocaleKeys.ts +139 -0
  149. package/dist/templates/scripts/i18nWorkflow/genDefaultLocale.ts +19 -0
  150. package/dist/templates/scripts/i18nWorkflow/genDiff.ts +49 -0
  151. package/dist/templates/scripts/i18nWorkflow/i18nConfig.ts +7 -0
  152. package/dist/templates/scripts/i18nWorkflow/index.ts +11 -0
  153. package/dist/templates/scripts/i18nWorkflow/protectedPatterns.ts +91 -0
  154. package/dist/templates/scripts/i18nWorkflow/utils.ts +76 -0
  155. package/dist/templates/src/bootstrap/index.ts +34 -0
  156. package/dist/templates/src/components/AntdStaticMethods/index.tsx +20 -0
  157. package/dist/templates/src/config/env.ts +84 -0
  158. package/dist/templates/src/index.tsx +13 -51
  159. package/dist/templates/src/layout/GlobalProvider/AppTheme.tsx +136 -0
  160. package/dist/templates/src/layout/GlobalProvider/Locale.tsx +84 -0
  161. package/dist/templates/src/layout/GlobalProvider/Query.tsx +12 -0
  162. package/dist/templates/src/layout/GlobalProvider/StyleRegistry.tsx +9 -0
  163. package/dist/templates/src/layout/GlobalProvider/index.tsx +23 -0
  164. package/dist/templates/src/layout/Locale.tsx +14 -18
  165. package/dist/templates/src/layout/MainContentWrap.tsx +11 -15
  166. package/dist/templates/src/layout/ThemeContext.tsx +27 -24
  167. package/dist/templates/src/locales/default/common.ts +3 -1
  168. package/dist/templates/src/locales/utils.ts +23 -0
  169. package/dist/templates/src/micro/garfish.ts +53 -0
  170. package/dist/templates/src/pages/base/index.tsx +280 -25
  171. package/dist/templates/src/routes.tsx +21 -12
  172. package/dist/templates/src/types/global.d.ts +19 -0
  173. package/dist/templates/src/utils/index.ts +3 -1
  174. package/dist/templates/store/middleware/createDevtools.ts +7 -7
  175. package/dist/templates/token-manager.ts +23 -0
  176. package/dist/templates/tsconfig.json +19 -3
  177. package/dist/templates/type.ts +23 -24
  178. package/dist/templates/types/global.d.ts +19 -0
  179. package/dist/templates/utils/index.ts +3 -1
  180. package/dist/templates/utils.ts +23 -0
  181. package/dist/templates/zh-CN/common.json +3 -0
  182. package/package.json +19 -21
  183. package/dist/templates/app/config/sentry/sentry.config.ts +0 -188
  184. package/dist/templates/app/src/hooks/useRouteTitle.tsx +0 -36
  185. package/dist/templates/app/src/hooks/useSentry.ts +0 -92
  186. package/dist/templates/app/src/pages/base/layout.tsx +0 -6
  187. package/dist/templates/app/src/pages/base/page.tsx +0 -25
  188. package/dist/templates/app/src/utils/env.ts +0 -3
  189. package/dist/templates/app/src/utils/format.ts +0 -21
  190. package/dist/templates/app/src/utils/getMicroApp.ts +0 -39
  191. package/dist/templates/app/src/utils/sentry.ts +0 -187
  192. package/dist/templates/app/src/utils/sentryDecorators.ts +0 -34
  193. package/dist/templates/app/src/utils/updateVersion.ts +0 -186
  194. package/dist/templates/base/layout.tsx +0 -6
  195. package/dist/templates/base/page.tsx +0 -25
  196. package/dist/templates/config/public/404.png +0 -0
  197. package/dist/templates/config/public/favicon.ico +0 -0
  198. package/dist/templates/config/public/images/banner_market_modal.webp +0 -0
  199. package/dist/templates/config/public/images/chatmode_chat_dark.webp +0 -0
  200. package/dist/templates/config/public/images/chatmode_chat_light.webp +0 -0
  201. package/dist/templates/config/public/images/chatmode_docs_dark.webp +0 -0
  202. package/dist/templates/config/public/images/chatmode_docs_light.webp +0 -0
  203. package/dist/templates/config/public/images/empty_topic_dark.webp +0 -0
  204. package/dist/templates/config/public/images/empty_topic_light.webp +0 -0
  205. package/dist/templates/config/public/images/screenshot_background.webp +0 -0
  206. package/dist/templates/config/public/images/theme_auto.webp +0 -0
  207. package/dist/templates/config/public/images/theme_dark.webp +0 -0
  208. package/dist/templates/config/public/images/theme_light.webp +0 -0
  209. package/dist/templates/config/public/index.html +0 -29
  210. package/dist/templates/config/sentry/sentry.config.ts +0 -188
  211. package/dist/templates/format.ts +0 -21
  212. package/dist/templates/getMicroApp.ts +0 -39
  213. package/dist/templates/hooks/useRouteTitle.tsx +0 -36
  214. package/dist/templates/hooks/useSentry.ts +0 -92
  215. package/dist/templates/layout.tsx +0 -6
  216. package/dist/templates/pages/base/layout.tsx +0 -6
  217. package/dist/templates/pages/base/page.tsx +0 -25
  218. package/dist/templates/sentry/sentry.config.ts +0 -188
  219. package/dist/templates/sentry.config.ts +0 -188
  220. package/dist/templates/sentry.ts +0 -187
  221. package/dist/templates/sentryDecorators.ts +0 -34
  222. package/dist/templates/src/hooks/useRouteTitle.tsx +0 -36
  223. package/dist/templates/src/hooks/useSentry.ts +0 -92
  224. package/dist/templates/src/pages/base/layout.tsx +0 -6
  225. package/dist/templates/src/pages/base/page.tsx +0 -25
  226. package/dist/templates/src/utils/env.ts +0 -3
  227. package/dist/templates/src/utils/format.ts +0 -21
  228. package/dist/templates/src/utils/getMicroApp.ts +0 -39
  229. package/dist/templates/src/utils/sentry.ts +0 -187
  230. package/dist/templates/src/utils/sentryDecorators.ts +0 -34
  231. package/dist/templates/src/utils/updateVersion.ts +0 -186
  232. package/dist/templates/updateVersion.ts +0 -186
  233. package/dist/templates/useRouteTitle.tsx +0 -36
  234. package/dist/templates/useSentry.ts +0 -92
  235. package/dist/templates/utils/env.ts +0 -3
  236. package/dist/templates/utils/format.ts +0 -21
  237. package/dist/templates/utils/getMicroApp.ts +0 -39
  238. package/dist/templates/utils/sentry.ts +0 -187
  239. package/dist/templates/utils/sentryDecorators.ts +0 -34
  240. package/dist/templates/utils/updateVersion.ts +0 -186
  241. /package/dist/templates/app/{config/public → public}/404.png +0 -0
  242. /package/dist/templates/app/{config/public → public}/favicon.ico +0 -0
  243. /package/dist/templates/app/{config/public → public}/images/banner_market_modal.webp +0 -0
  244. /package/dist/templates/app/{config/public → public}/images/chatmode_chat_dark.webp +0 -0
  245. /package/dist/templates/app/{config/public → public}/images/chatmode_chat_light.webp +0 -0
  246. /package/dist/templates/app/{config/public → public}/images/chatmode_docs_dark.webp +0 -0
  247. /package/dist/templates/app/{config/public → public}/images/chatmode_docs_light.webp +0 -0
  248. /package/dist/templates/app/{config/public → public}/images/empty_topic_dark.webp +0 -0
  249. /package/dist/templates/app/{config/public → public}/images/empty_topic_light.webp +0 -0
  250. /package/dist/templates/app/{config/public → public}/images/screenshot_background.webp +0 -0
  251. /package/dist/templates/app/{config/public → public}/images/theme_auto.webp +0 -0
  252. /package/dist/templates/app/{config/public → public}/images/theme_dark.webp +0 -0
  253. /package/dist/templates/app/{config/public → public}/images/theme_light.webp +0 -0
  254. /package/dist/templates/app/{config/public → public}/index.html +0 -0
@@ -1,187 +0,0 @@
1
- import * as Sentry from '@sentry/react';
2
-
3
- // 性能监控
4
- export const sentryPerformance = {
5
- // 开始性能追踪
6
- startSpan: (name: string, op?: string) => {
7
- return Sentry.startSpan(
8
- {
9
- name,
10
- op: op || 'custom',
11
- },
12
- (span) => {
13
- return span;
14
- },
15
- );
16
- },
17
-
18
- // 测量函数执行时间
19
- measureFunction: <T extends any[], R>(fn: (...args: T) => R, name: string, op?: string): ((...args: T) => R) => {
20
- return (...args: T): R => {
21
- return Sentry.startSpan(
22
- {
23
- name,
24
- op: op || 'function',
25
- },
26
- () => fn(...args),
27
- );
28
- };
29
- },
30
-
31
- // 测量异步函数
32
- measureAsyncFunction: <T extends any[], R>(fn: (...args: T) => Promise<R>, name: string, op?: string): ((...args: T) => Promise<R>) => {
33
- return async (...args: T): Promise<R> => {
34
- return Sentry.startSpan(
35
- {
36
- name,
37
- op: op || 'async_function',
38
- },
39
- async () => await fn(...args),
40
- );
41
- };
42
- },
43
-
44
- // 添加面包屑
45
- addBreadcrumb: (message: string, category?: string, level?: Sentry.SeverityLevel) => {
46
- Sentry.addBreadcrumb({
47
- message,
48
- category: category || 'custom',
49
- level: level || 'info',
50
- timestamp: Date.now() / 1000,
51
- });
52
- },
53
-
54
- // 手动创建 span
55
- withSpan: <T>(name: string, op: string, callback: () => T): T => {
56
- return Sentry.startSpan({ name, op }, callback);
57
- },
58
- };
59
-
60
- // 错误报告
61
- export const sentryError = {
62
- // 捕获异常
63
- captureException: (error: Error, context?: Record<string, any>) => {
64
- Sentry.withScope((scope) => {
65
- if (context) {
66
- Object.entries(context).forEach(([key, value]) => {
67
- scope.setExtra(key, value);
68
- });
69
- }
70
- Sentry.captureException(error);
71
- });
72
- },
73
-
74
- // 捕获消息
75
- captureMessage: (message: string, level?: Sentry.SeverityLevel) => {
76
- Sentry.captureMessage(message, level || 'info');
77
- },
78
-
79
- // 手动报告错误
80
- reportError: (error: Error, tags?: Record<string, string>) => {
81
- Sentry.withScope((scope) => {
82
- if (tags) {
83
- Object.entries(tags).forEach(([key, value]) => {
84
- scope.setTag(key, value);
85
- });
86
- }
87
- scope.setLevel('error');
88
- Sentry.captureException(error);
89
- });
90
- },
91
- };
92
-
93
- // 用户上下文
94
- export const sentryUser = {
95
- // 设置用户信息
96
- setUser: (user: { id: string; email?: string; username?: string }) => {
97
- Sentry.setUser(user);
98
- },
99
-
100
- // 清除用户信息
101
- clearUser: () => {
102
- Sentry.setUser(null);
103
- },
104
-
105
- // 设置用户反馈
106
- showReportDialog: (options?: Sentry.ReportDialogOptions) => {
107
- Sentry.showReportDialog(options);
108
- },
109
- };
110
-
111
- // 自定义标签和上下文
112
- export const sentryContext = {
113
- // 设置标签
114
- setTag: (key: string, value: string) => {
115
- Sentry.setTag(key, value);
116
- },
117
-
118
- // 设置上下文
119
- setContext: (key: string, context: Record<string, any>) => {
120
- Sentry.setContext(key, context);
121
- },
122
-
123
- // 设置额外信息
124
- setExtra: (key: string, extra: any) => {
125
- Sentry.setExtra(key, extra);
126
- },
127
- };
128
-
129
- // ✨ 新增:会话管理
130
- export const sentrySession = {
131
- // 开始用户会话
132
- startUserSession: (userId: string, userInfo?: { email?: string; username?: string }) => {
133
- // 设置用户信息
134
- Sentry.setUser({
135
- id: userId,
136
- ...userInfo,
137
- });
138
-
139
- // 开始会话
140
- Sentry.startSession();
141
-
142
- // 添加会话开始的面包屑
143
- Sentry.addBreadcrumb({
144
- message: `User session started for ${userId}`,
145
- category: 'session',
146
- level: 'info',
147
- });
148
- },
149
-
150
- // 结束用户会话
151
- endUserSession: () => {
152
- Sentry.addBreadcrumb({
153
- message: 'User session ended',
154
- category: 'session',
155
- level: 'info',
156
- });
157
-
158
- Sentry.endSession();
159
- Sentry.setUser(null);
160
- },
161
-
162
- // 记录页面访问(会话活动)
163
- recordPageView: (pageName: string, url: string) => {
164
- Sentry.addBreadcrumb({
165
- message: `Page view: ${pageName}`,
166
- category: 'navigation',
167
- level: 'info',
168
- data: {
169
- url,
170
- timestamp: new Date().toISOString(),
171
- },
172
- });
173
- },
174
-
175
- // 记录用户操作(保持会话活跃)
176
- recordUserAction: (action: string, details?: Record<string, any>) => {
177
- Sentry.addBreadcrumb({
178
- message: `User action: ${action}`,
179
- category: 'user',
180
- level: 'info',
181
- data: {
182
- ...details,
183
- timestamp: new Date().toISOString(),
184
- },
185
- });
186
- },
187
- };
@@ -1,34 +0,0 @@
1
- import { sentryPerformance } from './sentry';
2
-
3
- // 函数性能监控装饰器
4
- export function withSentryPerformance(name: string, op = 'function') {
5
- return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {
6
- const originalMethod = descriptor.value;
7
-
8
- descriptor.value = sentryPerformance.measureFunction(
9
- originalMethod,
10
- name,
11
- op,
12
- );
13
-
14
- return descriptor;
15
- };
16
- }
17
-
18
- // 异步函数性能监控装饰器
19
- export function withSentryAsyncPerformance(
20
- name: string,
21
- op = 'async_function',
22
- ) {
23
- return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {
24
- const originalMethod = descriptor.value;
25
-
26
- descriptor.value = sentryPerformance.measureAsyncFunction(
27
- originalMethod,
28
- name,
29
- op,
30
- );
31
-
32
- return descriptor;
33
- };
34
- }
@@ -1,186 +0,0 @@
1
- import { message, notification } from 'antd';
2
- import React from 'react';
3
-
4
- const APP_NAME = process.env.APP_NAME;
5
- interface IVersionRecord {
6
- action: '' | 'refreshedByClick';
7
- stack: string[];
8
- }
9
- // 对应的数组的key
10
- const RECORD_KEY = `${APP_NAME}_version_record`;
11
-
12
- // 当前版本号
13
- let CUR_VERSION = '';
14
- // 页面是否有通知
15
- let CUR_STATE = false;
16
- // 是否通过点击通知触发刷新
17
- let REFRESHED_BY_CLICK = false;
18
-
19
- window.addEventListener('beforeunload', () => {
20
- if (!REFRESHED_BY_CLICK) {
21
- const recordStr = localStorage.getItem(RECORD_KEY);
22
- if (recordStr === null) return;
23
- const record: IVersionRecord = JSON.parse(recordStr);
24
- if (record.action !== '') {
25
- record.action = '';
26
- localStorage.setItem(RECORD_KEY, JSON.stringify(record));
27
- }
28
- }
29
- });
30
-
31
- const Interval = {
32
- clearInterval: function () {
33
- cancelAnimationFrame(this.timer);
34
- },
35
- setInterval: function (callback: any, interval: any) {
36
- let startTime = new Date().valueOf();
37
- let endTime = new Date().valueOf();
38
- const self: any = this; // eslint-disable-line
39
- const loop = () => {
40
- self.timer = requestAnimationFrame(loop);
41
- endTime = new Date().valueOf();
42
- if (endTime - startTime >= interval) {
43
- endTime = startTime = new Date().valueOf();
44
- callback?.(); // eslint-disable-line
45
- }
46
- };
47
- this.timer = requestAnimationFrame(loop);
48
- return this.timer;
49
- },
50
- timer: 0,
51
- };
52
-
53
- /**
54
- * 读取到更新的json文件版本内容
55
- */
56
- const fetchUpdateVersionFile = () => {
57
- return new Promise((resolve, reject) => {
58
- fetch('/update_version.json')
59
- .then(res => {
60
- return res.body;
61
- })
62
- .then(body => {
63
- const reader = body?.getReader();
64
- if (reader) {
65
- reader
66
- .read()
67
- .then(val => {
68
- let str = '';
69
- if (val.value) {
70
- for (let i = 0; i < val.value.length; i++) {
71
- str += String.fromCharCode(val.value[i]);
72
- }
73
- }
74
- return JSON.parse(str);
75
- })
76
- .then(json => {
77
- resolve(json);
78
- })
79
- .catch(err => {
80
- reject(err);
81
- });
82
- }
83
- })
84
- .catch(err => {
85
- reject(err);
86
- });
87
- });
88
- };
89
-
90
- const ENV = process.env.NODE_ENV;
91
-
92
- const notifyUserUpdate = () => {
93
- const handleClick = () => {
94
- REFRESHED_BY_CLICK = true;
95
- const recordStr = localStorage.getItem(RECORD_KEY);
96
- if (recordStr === null) return;
97
- const record: IVersionRecord = JSON.parse(recordStr);
98
- record.action = 'refreshedByClick';
99
- localStorage.setItem(RECORD_KEY, JSON.stringify(record));
100
- window.location.reload();
101
- };
102
- const handleClose = () => {
103
- Interval.clearInterval();
104
- message.open({
105
- content: '页面将不会提示更新',
106
- type: 'warning',
107
- });
108
- };
109
- const openNotification = () => {
110
- const element = React.createElement(
111
- 'div', // 类型
112
- {
113
- onClick: handleClick,
114
- style: { color: '#1677ff', cursor: 'pointer' },
115
- }, // 属性
116
- '页面已更新,请点击此处刷新页面!', // 子元素
117
- );
118
- notification.warning({
119
- description: element,
120
- duration: null,
121
- message: '温馨提示',
122
- onClose: handleClose,
123
- placement: 'bottomRight',
124
- });
125
- };
126
- openNotification();
127
- CUR_STATE = true;
128
- };
129
-
130
- const handleMain = (version: string, handleCb: any, fetchDelay: number) => {
131
- // 记录当前版本号
132
- CUR_VERSION = version;
133
- // 从本地获取历史记录
134
- const oldVersionRecordStr = localStorage.getItem(RECORD_KEY);
135
- // 继承历史记录中的action、stack
136
- let oldAction: IVersionRecord['action'] = '';
137
- const oldStack: IVersionRecord['stack'] = [version];
138
- if (oldVersionRecordStr !== null) {
139
- const record: IVersionRecord = JSON.parse(oldVersionRecordStr);
140
- oldAction = record.action;
141
- }
142
- // 创建变量记录版本、操作
143
- const curVersionRecord: IVersionRecord = {
144
- action: oldAction,
145
- stack: oldStack,
146
- };
147
-
148
- localStorage.setItem(RECORD_KEY, JSON.stringify(curVersionRecord));
149
-
150
- Interval.setInterval(() => {
151
- fetchUpdateVersionFile().then((res: any) => {
152
- // 读取版本记录
153
- const versionRecordStr = localStorage.getItem(RECORD_KEY);
154
- if (typeof versionRecordStr === 'string') {
155
- const versionRecord: IVersionRecord = JSON.parse(versionRecordStr);
156
- // 读取对应栈
157
- const lastVersion = versionRecord.stack[0];
158
- localStorage.setItem(RECORD_KEY, JSON.stringify(versionRecord));
159
- // 在服务器的版本与当前版本不一致
160
- if (res.version !== CUR_VERSION) {
161
- if (CUR_STATE === false) {
162
- // 发起通知
163
- handleCb();
164
- } else if (
165
- versionRecord.action === 'refreshedByClick' &&
166
- lastVersion !== CUR_VERSION
167
- ) {
168
- // 上一个标签页更新过,且当前标签页未更新
169
- REFRESHED_BY_CLICK = true;
170
- window.location.reload();
171
- }
172
- }
173
- }
174
- });
175
- }, fetchDelay);
176
- };
177
-
178
- export const openUpdateVersionNotify = (fetchDelay: number) => {
179
- // 开发环境没有必要开启版本检测功能
180
- if (ENV === 'development') {
181
- return;
182
- }
183
- fetchUpdateVersionFile().then((res: any) => {
184
- handleMain(res.version, notifyUserUpdate, fetchDelay);
185
- });
186
- };