sa2kit 1.6.52 → 1.6.58

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 (195) hide show
  1. package/dist/AliyunOSSProvider-KSYW2IOG.js +15 -0
  2. package/dist/{AliyunOSSProvider-2FARPAQD.js.map → AliyunOSSProvider-KSYW2IOG.js.map} +1 -1
  3. package/dist/AliyunOSSProvider-TBK3G7YK.mjs +6 -0
  4. package/dist/{AliyunOSSProvider-UMVGVBDJ.mjs.map → AliyunOSSProvider-TBK3G7YK.mjs.map} +1 -1
  5. package/dist/LocalStorageProvider-2DGYRQAB.mjs +6 -0
  6. package/dist/{LocalStorageProvider-PYOHETJV.mjs.map → LocalStorageProvider-2DGYRQAB.mjs.map} +1 -1
  7. package/dist/LocalStorageProvider-SSRW3ZJW.js +15 -0
  8. package/dist/{LocalStorageProvider-JQF5WK5H.js.map → LocalStorageProvider-SSRW3ZJW.js.map} +1 -1
  9. package/dist/UniversalFileService-336GFY6N.mjs +6 -0
  10. package/dist/{UniversalFileService-TNYKO6JN.mjs.map → UniversalFileService-336GFY6N.mjs.map} +1 -1
  11. package/dist/UniversalFileService-J6ET6KZK.js +15 -0
  12. package/dist/{UniversalFileService-RBV6EN5J.js.map → UniversalFileService-J6ET6KZK.js.map} +1 -1
  13. package/dist/booking-BXtkG2ns.d.mts +386 -0
  14. package/dist/booking-BXtkG2ns.d.ts +386 -0
  15. package/dist/bookingAdminService-B2QDjSHJ.d.ts +193 -0
  16. package/dist/bookingAdminService-Dmg7dC6V.d.mts +193 -0
  17. package/dist/calendar/index.js +11 -11
  18. package/dist/calendar/index.mjs +4 -4
  19. package/dist/cart-CcZ7rQyG.d.mts +176 -0
  20. package/dist/cart-D3o67Q3H.d.ts +176 -0
  21. package/dist/chunk-25OFOKNF.js +171 -0
  22. package/dist/chunk-25OFOKNF.js.map +1 -0
  23. package/dist/chunk-3DXPQ4YV.mjs +165 -0
  24. package/dist/chunk-3DXPQ4YV.mjs.map +1 -0
  25. package/dist/{chunk-4VJQZSPU.mjs → chunk-3NHAT7D4.mjs} +3 -4
  26. package/dist/chunk-3NHAT7D4.mjs.map +1 -0
  27. package/dist/{chunk-3JW4X3AC.mjs → chunk-622Y6LTH.mjs} +3 -3
  28. package/dist/{chunk-3JW4X3AC.mjs.map → chunk-622Y6LTH.mjs.map} +1 -1
  29. package/dist/chunk-ANKVXRPY.mjs +30 -0
  30. package/dist/chunk-ANKVXRPY.mjs.map +1 -0
  31. package/dist/chunk-CIVO4R6N.mjs +37 -0
  32. package/dist/chunk-CIVO4R6N.mjs.map +1 -0
  33. package/dist/{chunk-IZOIVYOW.js → chunk-DENROXAE.js} +2 -2
  34. package/dist/{chunk-IZOIVYOW.js.map → chunk-DENROXAE.js.map} +1 -1
  35. package/dist/{chunk-6BJ76BYC.mjs → chunk-EGJPS7OL.mjs} +3 -3
  36. package/dist/{chunk-6BJ76BYC.mjs.map → chunk-EGJPS7OL.mjs.map} +1 -1
  37. package/dist/chunk-EKIOJEJK.js +2719 -0
  38. package/dist/chunk-EKIOJEJK.js.map +1 -0
  39. package/dist/chunk-EOWTOG7Y.js +119 -0
  40. package/dist/chunk-EOWTOG7Y.js.map +1 -0
  41. package/dist/chunk-HDMIOOZY.mjs +546 -0
  42. package/dist/chunk-HDMIOOZY.mjs.map +1 -0
  43. package/dist/{chunk-MZKATHB7.js → chunk-HHVDOIPV.js} +4 -4
  44. package/dist/{chunk-MZKATHB7.js.map → chunk-HHVDOIPV.js.map} +1 -1
  45. package/dist/chunk-HJ6MH7J7.js +552 -0
  46. package/dist/chunk-HJ6MH7J7.js.map +1 -0
  47. package/dist/chunk-KH6RQ4J5.js +28 -0
  48. package/dist/chunk-KH6RQ4J5.js.map +1 -0
  49. package/dist/{chunk-GFVAIT6Y.mjs → chunk-MFG2Y6UR.mjs} +2 -2
  50. package/dist/{chunk-GFVAIT6Y.mjs.map → chunk-MFG2Y6UR.mjs.map} +1 -1
  51. package/dist/{chunk-35CXIK5Y.js → chunk-NCOXT7SK.js} +11 -11
  52. package/dist/{chunk-35CXIK5Y.js.map → chunk-NCOXT7SK.js.map} +1 -1
  53. package/dist/chunk-NZZZUMMX.mjs +784 -0
  54. package/dist/chunk-NZZZUMMX.mjs.map +1 -0
  55. package/dist/{chunk-OBIPI4GU.mjs → chunk-OFYBMMWT.mjs} +4 -4
  56. package/dist/{chunk-OBIPI4GU.mjs.map → chunk-OFYBMMWT.mjs.map} +1 -1
  57. package/dist/chunk-PVLLRDUT.js +6944 -0
  58. package/dist/chunk-PVLLRDUT.js.map +1 -0
  59. package/dist/chunk-Q5EDCKQA.js +336 -0
  60. package/dist/chunk-Q5EDCKQA.js.map +1 -0
  61. package/dist/{chunk-SHY424RZ.mjs → chunk-SNBILYSH.mjs} +6 -6
  62. package/dist/{chunk-SHY424RZ.mjs.map → chunk-SNBILYSH.mjs.map} +1 -1
  63. package/dist/chunk-TJZDPOO7.js +34 -0
  64. package/dist/chunk-TJZDPOO7.js.map +1 -0
  65. package/dist/{chunk-7JN25DJB.js → chunk-UVHPCLP6.js} +14 -14
  66. package/dist/{chunk-7JN25DJB.js.map → chunk-UVHPCLP6.js.map} +1 -1
  67. package/dist/chunk-WGD2NBVR.mjs +6904 -0
  68. package/dist/chunk-WGD2NBVR.mjs.map +1 -0
  69. package/dist/chunk-WS3QZYBI.mjs +2701 -0
  70. package/dist/chunk-WS3QZYBI.mjs.map +1 -0
  71. package/dist/chunk-XLR6QUDR.mjs +113 -0
  72. package/dist/chunk-XLR6QUDR.mjs.map +1 -0
  73. package/dist/chunk-YMS6BPXS.js +807 -0
  74. package/dist/chunk-YMS6BPXS.js.map +1 -0
  75. package/dist/chunk-YOTQG4NP.mjs +314 -0
  76. package/dist/chunk-YOTQG4NP.mjs.map +1 -0
  77. package/dist/chunk-ZGVB35L2.mjs +25 -0
  78. package/dist/chunk-ZGVB35L2.mjs.map +1 -0
  79. package/dist/chunk-ZRAW3HXA.js +43 -0
  80. package/dist/chunk-ZRAW3HXA.js.map +1 -0
  81. package/dist/{chunk-4XXIBWCO.js → chunk-ZRWED7Q6.js} +66 -66
  82. package/dist/{chunk-4XXIBWCO.js.map → chunk-ZRWED7Q6.js.map} +1 -1
  83. package/dist/{chunk-DVENFCQY.js → chunk-ZWQJSZEY.js} +4 -5
  84. package/dist/chunk-ZWQJSZEY.js.map +1 -0
  85. package/dist/components/index.js +104 -104
  86. package/dist/components/index.mjs +4 -4
  87. package/dist/index.js +146 -148
  88. package/dist/index.js.map +1 -1
  89. package/dist/index.mjs +8 -11
  90. package/dist/index.mjs.map +1 -1
  91. package/dist/logger/index.js +7 -7
  92. package/dist/logger/index.mjs +1 -4
  93. package/dist/mikuFusionGame/index.js +4 -4
  94. package/dist/mikuFusionGame/index.mjs +3 -3
  95. package/dist/portfolio/index.js +10 -10
  96. package/dist/portfolio/index.mjs +5 -5
  97. package/dist/showmasterpiece/db/index.d.mts +3028 -0
  98. package/dist/showmasterpiece/db/index.d.ts +3028 -0
  99. package/dist/showmasterpiece/db/index.js +179 -0
  100. package/dist/showmasterpiece/db/index.js.map +1 -0
  101. package/dist/showmasterpiece/db/index.mjs +6 -0
  102. package/dist/showmasterpiece/db/index.mjs.map +1 -0
  103. package/dist/showmasterpiece/index.d.mts +10 -1729
  104. package/dist/showmasterpiece/index.d.ts +10 -1729
  105. package/dist/showmasterpiece/index.js +439 -9659
  106. package/dist/showmasterpiece/index.js.map +1 -1
  107. package/dist/showmasterpiece/index.mjs +12 -9633
  108. package/dist/showmasterpiece/index.mjs.map +1 -1
  109. package/dist/showmasterpiece/logic/index.d.mts +372 -0
  110. package/dist/showmasterpiece/logic/index.d.ts +372 -0
  111. package/dist/showmasterpiece/logic/index.js +91 -0
  112. package/dist/showmasterpiece/logic/index.js.map +1 -0
  113. package/dist/showmasterpiece/logic/index.mjs +6 -0
  114. package/dist/showmasterpiece/logic/index.mjs.map +1 -0
  115. package/dist/showmasterpiece/server/index.d.mts +3 -2704
  116. package/dist/showmasterpiece/server/index.d.ts +3 -2704
  117. package/dist/showmasterpiece/server/index.js +43 -43
  118. package/dist/showmasterpiece/server/index.mjs +2 -2
  119. package/dist/showmasterpiece/ui/miniapp/index.d.mts +86 -0
  120. package/dist/showmasterpiece/ui/miniapp/index.d.ts +86 -0
  121. package/dist/showmasterpiece/ui/miniapp/index.js +196 -0
  122. package/dist/showmasterpiece/ui/miniapp/index.js.map +1 -0
  123. package/dist/showmasterpiece/ui/miniapp/index.mjs +183 -0
  124. package/dist/showmasterpiece/ui/miniapp/index.mjs.map +1 -0
  125. package/dist/showmasterpiece/ui/web/index.d.mts +600 -0
  126. package/dist/showmasterpiece/ui/web/index.d.ts +600 -0
  127. package/dist/showmasterpiece/ui/web/index.js +131 -0
  128. package/dist/showmasterpiece/ui/web/index.js.map +1 -0
  129. package/dist/showmasterpiece/ui/web/index.mjs +14 -0
  130. package/dist/showmasterpiece/ui/web/index.mjs.map +1 -0
  131. package/dist/universalExport/server/index.js +2 -4
  132. package/dist/universalExport/server/index.js.map +1 -1
  133. package/dist/universalExport/server/index.mjs +1 -3
  134. package/dist/universalExport/server/index.mjs.map +1 -1
  135. package/dist/universalFile/index.js +6 -9
  136. package/dist/universalFile/index.js.map +1 -1
  137. package/dist/universalFile/index.mjs +1 -5
  138. package/dist/universalFile/index.mjs.map +1 -1
  139. package/dist/universalFile/server/index.js +5852 -291
  140. package/dist/universalFile/server/index.js.map +1 -1
  141. package/dist/universalFile/server/index.mjs +5764 -8
  142. package/dist/universalFile/server/index.mjs.map +1 -1
  143. package/dist/utils/index.js +11 -11
  144. package/dist/utils/index.mjs +2 -2
  145. package/package.json +26 -1
  146. package/dist/AliyunOSSProvider-2FARPAQD.js +0 -15
  147. package/dist/AliyunOSSProvider-UMVGVBDJ.mjs +0 -9
  148. package/dist/LocalStorageProvider-JQF5WK5H.js +0 -15
  149. package/dist/LocalStorageProvider-PYOHETJV.mjs +0 -9
  150. package/dist/UniversalFileService-RBV6EN5J.js +0 -15
  151. package/dist/UniversalFileService-TNYKO6JN.mjs +0 -9
  152. package/dist/chunk-4NFOSCM6.js +0 -34
  153. package/dist/chunk-4NFOSCM6.js.map +0 -1
  154. package/dist/chunk-4VJQZSPU.mjs.map +0 -1
  155. package/dist/chunk-6AHYPPUP.js +0 -344
  156. package/dist/chunk-6AHYPPUP.js.map +0 -1
  157. package/dist/chunk-76V7EKBX.mjs +0 -796
  158. package/dist/chunk-76V7EKBX.mjs.map +0 -1
  159. package/dist/chunk-ACLOJXXE.js +0 -195
  160. package/dist/chunk-ACLOJXXE.js.map +0 -1
  161. package/dist/chunk-AEXPAH7Z.mjs +0 -32
  162. package/dist/chunk-AEXPAH7Z.mjs.map +0 -1
  163. package/dist/chunk-CFGX3EKK.js +0 -560
  164. package/dist/chunk-CFGX3EKK.js.map +0 -1
  165. package/dist/chunk-D2HXMGXS.js +0 -46
  166. package/dist/chunk-D2HXMGXS.js.map +0 -1
  167. package/dist/chunk-DVENFCQY.js.map +0 -1
  168. package/dist/chunk-K7WNCB4V.mjs +0 -554
  169. package/dist/chunk-K7WNCB4V.mjs.map +0 -1
  170. package/dist/chunk-L4ZYBFB2.mjs +0 -44
  171. package/dist/chunk-L4ZYBFB2.mjs.map +0 -1
  172. package/dist/chunk-M4HGHTIC.js +0 -820
  173. package/dist/chunk-M4HGHTIC.js.map +0 -1
  174. package/dist/chunk-PKKIDPXE.mjs +0 -5797
  175. package/dist/chunk-PKKIDPXE.mjs.map +0 -1
  176. package/dist/chunk-PXWDQFWV.mjs +0 -192
  177. package/dist/chunk-PXWDQFWV.mjs.map +0 -1
  178. package/dist/chunk-TSTBLX6B.js +0 -5888
  179. package/dist/chunk-TSTBLX6B.js.map +0 -1
  180. package/dist/chunk-VTGPHE4Z.mjs +0 -322
  181. package/dist/chunk-VTGPHE4Z.mjs.map +0 -1
  182. package/dist/popupConfig-BznThU1O.d.mts +0 -330
  183. package/dist/popupConfig-BznThU1O.d.ts +0 -330
  184. package/dist/showmasterpiece/migration/index.d.mts +0 -120
  185. package/dist/showmasterpiece/migration/index.d.ts +0 -120
  186. package/dist/showmasterpiece/migration/index.js +0 -595
  187. package/dist/showmasterpiece/migration/index.js.map +0 -1
  188. package/dist/showmasterpiece/migration/index.mjs +0 -589
  189. package/dist/showmasterpiece/migration/index.mjs.map +0 -1
  190. package/dist/showmasterpiece/scripts/index.d.mts +0 -28
  191. package/dist/showmasterpiece/scripts/index.d.ts +0 -28
  192. package/dist/showmasterpiece/scripts/index.js +0 -327
  193. package/dist/showmasterpiece/scripts/index.js.map +0 -1
  194. package/dist/showmasterpiece/scripts/index.mjs +0 -325
  195. package/dist/showmasterpiece/scripts/index.mjs.map +0 -1
@@ -1,325 +0,0 @@
1
- import '../../chunk-WMJKH4XE.mjs';
2
- import { writeFileSync } from 'fs';
3
-
4
- var CONFIG_MIGRATION_MAP = {
5
- // OSS 配置
6
- ALIYUN_OSS_REGION: {
7
- displayName: "OSS\u533A\u57DF",
8
- description: "\u963F\u91CC\u4E91OSS\u5B58\u50A8\u533A\u57DF",
9
- type: "string",
10
- isRequired: true,
11
- isSensitive: false,
12
- category: "oss"
13
- },
14
- ALIYUN_OSS_BUCKET: {
15
- displayName: "OSS\u5B58\u50A8\u6876",
16
- description: "\u963F\u91CC\u4E91OSS\u5B58\u50A8\u6876\u540D\u79F0",
17
- type: "string",
18
- isRequired: true,
19
- isSensitive: false,
20
- category: "oss"
21
- },
22
- ALIYUN_OSS_ACCESS_KEY_ID: {
23
- displayName: "AccessKey ID",
24
- description: "\u963F\u91CC\u4E91AccessKey ID",
25
- type: "string",
26
- isRequired: true,
27
- isSensitive: true,
28
- category: "oss"
29
- },
30
- ALIYUN_OSS_ACCESS_KEY_SECRET: {
31
- displayName: "AccessKey Secret",
32
- description: "\u963F\u91CC\u4E91AccessKey Secret",
33
- type: "password",
34
- isRequired: true,
35
- isSensitive: true,
36
- category: "oss"
37
- },
38
- ALIYUN_OSS_CUSTOM_DOMAIN: {
39
- displayName: "\u81EA\u5B9A\u4E49\u57DF\u540D",
40
- description: "OSS\u81EA\u5B9A\u4E49\u57DF\u540D\uFF08\u53EF\u9009\uFF09",
41
- type: "string",
42
- isRequired: false,
43
- isSensitive: false,
44
- category: "oss"
45
- },
46
- ALIYUN_OSS_SECURE: {
47
- displayName: "\u4F7F\u7528HTTPS",
48
- description: "\u662F\u5426\u4F7F\u7528HTTPS\u8FDE\u63A5",
49
- type: "boolean",
50
- isRequired: false,
51
- isSensitive: false,
52
- category: "oss"
53
- },
54
- ALIYUN_OSS_INTERNAL: {
55
- displayName: "\u5185\u7F51\u8BBF\u95EE",
56
- description: "\u662F\u5426\u4F7F\u7528\u5185\u7F51\u8BBF\u95EE",
57
- type: "boolean",
58
- isRequired: false,
59
- isSensitive: false,
60
- category: "oss"
61
- },
62
- // CDN 配置(可选)
63
- ALIYUN_CDN_DOMAIN: {
64
- displayName: "CDN\u57DF\u540D",
65
- description: "\u963F\u91CC\u4E91CDN\u52A0\u901F\u57DF\u540D",
66
- type: "string",
67
- isRequired: false,
68
- isSensitive: false,
69
- category: "cdn"
70
- },
71
- ALIYUN_CDN_ACCESS_KEY_ID: {
72
- displayName: "CDN AccessKey ID",
73
- description: "\u963F\u91CC\u4E91CDN AccessKey ID",
74
- type: "string",
75
- isRequired: false,
76
- isSensitive: true,
77
- category: "cdn"
78
- },
79
- ALIYUN_CDN_ACCESS_KEY_SECRET: {
80
- displayName: "CDN AccessKey Secret",
81
- description: "\u963F\u91CC\u4E91CDN AccessKey Secret",
82
- type: "password",
83
- isRequired: false,
84
- isSensitive: true,
85
- category: "cdn"
86
- },
87
- // 文件服务相关配置
88
- MAX_FILE_SIZE: {
89
- displayName: "\u6700\u5927\u6587\u4EF6\u5927\u5C0F",
90
- description: "\u5141\u8BB8\u4E0A\u4F20\u7684\u6700\u5927\u6587\u4EF6\u5927\u5C0F\uFF08\u5B57\u8282\uFF09",
91
- type: "number",
92
- isRequired: false,
93
- isSensitive: false,
94
- category: "file"
95
- },
96
- FILE_STORAGE_PATH: {
97
- displayName: "\u672C\u5730\u5B58\u50A8\u8DEF\u5F84",
98
- description: "\u672C\u5730\u6587\u4EF6\u5B58\u50A8\u8DEF\u5F84",
99
- type: "string",
100
- isRequired: false,
101
- isSensitive: false,
102
- category: "file"
103
- },
104
- FILE_BASE_URL: {
105
- displayName: "\u6587\u4EF6\u57FA\u7840URL",
106
- description: "\u6587\u4EF6\u8BBF\u95EE\u57FA\u7840URL",
107
- type: "string",
108
- isRequired: false,
109
- isSensitive: false,
110
- category: "file"
111
- }
112
- };
113
- var NON_MIGRATED_CONFIGS = {
114
- DATABASE_URL: "\u6570\u636E\u5E93\u8FDE\u63A5\u5B57\u7B26\u4E32 - \u5EFA\u8BAE\u7531\u5E73\u53F0\u7EDF\u4E00\u7BA1\u7406",
115
- DATABASE_POOL_SIZE: "\u6570\u636E\u5E93\u8FDE\u63A5\u6C60\u914D\u7F6E - \u5EFA\u8BAE\u7531\u5E73\u53F0\u7EDF\u4E00\u7BA1\u7406",
116
- DATABASE_TIMEOUT: "\u6570\u636E\u5E93\u8D85\u65F6\u914D\u7F6E - \u5EFA\u8BAE\u7531\u5E73\u53F0\u7EDF\u4E00\u7BA1\u7406",
117
- DATABASE_SSL_MODE: "\u6570\u636E\u5E93SSL\u914D\u7F6E - \u5EFA\u8BAE\u7531\u5E73\u53F0\u7EDF\u4E00\u7BA1\u7406",
118
- NODE_ENV: "\u8FD0\u884C\u73AF\u5883\u6807\u8BC6 - \u7531\u90E8\u7F72\u73AF\u5883\u51B3\u5B9A",
119
- NEXTAUTH_SECRET: "NextAuth\u5BC6\u94A5 - \u5EFA\u8BAE\u7531\u5E73\u53F0\u7EDF\u4E00\u7BA1\u7406",
120
- NEXTAUTH_URL: "NextAuth\u56DE\u8C03URL - \u5EFA\u8BAE\u7531\u5E73\u53F0\u7EDF\u4E00\u7BA1\u7406",
121
- QINIU_ACCESS_KEY: "\u4E03\u725B\u4E91\u914D\u7F6E - ShowMasterpiece\u6A21\u5757\u4E0D\u4F7F\u7528",
122
- QINIU_SECRET_KEY: "\u4E03\u725B\u4E91\u914D\u7F6E - ShowMasterpiece\u6A21\u5757\u4E0D\u4F7F\u7528",
123
- QINIU_BUCKET_NAME: "\u4E03\u725B\u4E91\u914D\u7F6E - ShowMasterpiece\u6A21\u5757\u4E0D\u4F7F\u7528",
124
- QINIU_DOMAIN: "\u4E03\u725B\u4E91\u914D\u7F6E - ShowMasterpiece\u6A21\u5757\u4E0D\u4F7F\u7528",
125
- OPENAI_API_KEY: "OpenAI\u914D\u7F6E - \u4E0D\u5C5E\u4E8E\u6587\u4EF6\u5B58\u50A8\u8303\u7574",
126
- REDIS_URL: "Redis\u914D\u7F6E - \u5EFA\u8BAE\u7531\u5E73\u53F0\u7EDF\u4E00\u7BA1\u7406",
127
- "EMAIL_*": "\u90AE\u4EF6\u670D\u52A1\u914D\u7F6E - \u4E0D\u5C5E\u4E8E\u6587\u4EF6\u5B58\u50A8\u8303\u7574"
128
- };
129
- async function migrateConfigToShowmasterpiece(services, options = {}) {
130
- const { configDbService, showmasterConfigService } = services;
131
- const { dryRun = false, environment = "development", overwrite = false } = options;
132
- console.log("\u{1F680} [\u914D\u7F6E\u8FC1\u79FB] \u5F00\u59CB\u8FC1\u79FB\u516C\u5171\u914D\u7F6E\u5230ShowMasterpiece\u72EC\u7ACB\u914D\u7F6E...");
133
- console.log(`\u{1F4CB} [\u914D\u7F6E\u8FC1\u79FB] \u9009\u9879: \u9884\u6F14=${dryRun}, \u73AF\u5883=${environment}, \u8986\u76D6=${overwrite}`);
134
- const migrationResult = {
135
- categories: 0,
136
- migrated: 0,
137
- skipped: 0,
138
- errors: [],
139
- migratedConfigs: [],
140
- skippedConfigs: [],
141
- nonMigratableConfigs: Object.keys(NON_MIGRATED_CONFIGS)
142
- };
143
- console.log("\u{1F4E6} [\u914D\u7F6E\u8FC1\u79FB] \u521B\u5EFA\u914D\u7F6E\u5206\u7C7B...");
144
- const categories = [
145
- {
146
- name: "oss",
147
- displayName: "\u963F\u91CC\u4E91OSS\u914D\u7F6E",
148
- description: "ShowMasterpiece\u6A21\u5757\u4E13\u7528\u7684\u963F\u91CC\u4E91\u5BF9\u8C61\u5B58\u50A8\u670D\u52A1\u914D\u7F6E",
149
- icon: "fas fa-cloud",
150
- sortOrder: 1
151
- },
152
- {
153
- name: "cdn",
154
- displayName: "\u963F\u91CC\u4E91CDN\u914D\u7F6E",
155
- description: "ShowMasterpiece\u6A21\u5757\u4E13\u7528\u7684\u963F\u91CC\u4E91\u5185\u5BB9\u5206\u53D1\u7F51\u7EDC\u914D\u7F6E",
156
- icon: "fas fa-globe",
157
- sortOrder: 2
158
- },
159
- {
160
- name: "file",
161
- displayName: "\u6587\u4EF6\u670D\u52A1\u914D\u7F6E",
162
- description: "ShowMasterpiece\u6A21\u5757\u7684\u6587\u4EF6\u5B58\u50A8\u548C\u5904\u7406\u914D\u7F6E",
163
- icon: "fas fa-file",
164
- sortOrder: 3
165
- }
166
- ];
167
- for (const category of categories) {
168
- if (!dryRun) {
169
- try {
170
- const existingCategory = await showmasterConfigService.getCategoryByName(category.name);
171
- if (!existingCategory) {
172
- await showmasterConfigService.createCategory({
173
- ...category,
174
- isActive: true
175
- });
176
- migrationResult.categories++;
177
- console.log(`\u2705 [\u914D\u7F6E\u8FC1\u79FB] \u521B\u5EFA\u5206\u7C7B: ${category.displayName}`);
178
- } else {
179
- console.log(`\u2139\uFE0F [\u914D\u7F6E\u8FC1\u79FB] \u5206\u7C7B\u5DF2\u5B58\u5728: ${category.displayName}`);
180
- }
181
- } catch (error) {
182
- console.error(`\u274C [\u914D\u7F6E\u8FC1\u79FB] \u521B\u5EFA\u5206\u7C7B\u5931\u8D25: ${category.displayName}`, error);
183
- migrationResult.errors.push(`\u521B\u5EFA\u5206\u7C7B\u5931\u8D25: ${category.displayName}`);
184
- }
185
- } else {
186
- console.log(`\u{1F50D} [\u914D\u7F6E\u8FC1\u79FB] \u9884\u6F14: \u5C06\u521B\u5EFA\u5206\u7C7B ${category.displayName}`);
187
- }
188
- }
189
- console.log("\u{1F4CB} [\u914D\u7F6E\u8FC1\u79FB] \u83B7\u53D6\u516C\u5171\u914D\u7F6E\u9879...");
190
- const publicConfigItems = await configDbService.getAllConfigItems();
191
- const categoryMap = /* @__PURE__ */ new Map();
192
- if (!dryRun) {
193
- const allCategories = await showmasterConfigService.getAllCategories();
194
- for (const cat of allCategories) {
195
- categoryMap.set(cat.name, cat);
196
- }
197
- } else {
198
- categoryMap.set("oss", { id: "mock-oss-id", name: "oss", displayName: "\u963F\u91CC\u4E91OSS\u914D\u7F6E" });
199
- categoryMap.set("cdn", { id: "mock-cdn-id", name: "cdn", displayName: "\u963F\u91CC\u4E91CDN\u914D\u7F6E" });
200
- categoryMap.set("file", { id: "mock-file-id", name: "file", displayName: "\u6587\u4EF6\u670D\u52A1\u914D\u7F6E" });
201
- }
202
- console.log("\u{1F504} [\u914D\u7F6E\u8FC1\u79FB] \u5F00\u59CB\u8FC1\u79FB\u914D\u7F6E\u9879...");
203
- for (const [configKey, migrationInfo] of Object.entries(CONFIG_MIGRATION_MAP)) {
204
- try {
205
- const publicConfigItem = publicConfigItems.find((item) => item.key === configKey);
206
- if (!publicConfigItem) {
207
- console.log(`\u26A0\uFE0F [\u914D\u7F6E\u8FC1\u79FB] \u516C\u5171\u914D\u7F6E\u4E2D\u672A\u627E\u5230: ${configKey}`);
208
- migrationResult.skippedConfigs.push(`${configKey} (\u516C\u5171\u914D\u7F6E\u4E2D\u4E0D\u5B58\u5728)`);
209
- migrationResult.skipped++;
210
- continue;
211
- }
212
- const existingConfig = !dryRun ? await showmasterConfigService.getConfigItemByKey(configKey, environment) : null;
213
- if (existingConfig && !overwrite) {
214
- console.log(`\u2139\uFE0F [\u914D\u7F6E\u8FC1\u79FB] \u914D\u7F6E\u5DF2\u5B58\u5728\uFF0C\u8DF3\u8FC7: ${configKey}`);
215
- migrationResult.skippedConfigs.push(`${configKey} (\u5DF2\u5B58\u5728)`);
216
- migrationResult.skipped++;
217
- continue;
218
- }
219
- const category = categoryMap.get(migrationInfo.category);
220
- if (!category) {
221
- console.error(`\u274C [\u914D\u7F6E\u8FC1\u79FB] \u5206\u7C7B\u4E0D\u5B58\u5728: ${migrationInfo.category} for ${configKey}`);
222
- migrationResult.errors.push(`\u5206\u7C7B\u4E0D\u5B58\u5728: ${migrationInfo.category}`);
223
- continue;
224
- }
225
- if (!dryRun) {
226
- const configData = {
227
- categoryId: category.id,
228
- key: configKey,
229
- displayName: migrationInfo.displayName,
230
- description: migrationInfo.description,
231
- value: publicConfigItem.value || publicConfigItem.defaultValue || "",
232
- defaultValue: publicConfigItem.defaultValue || "",
233
- type: migrationInfo.type,
234
- isRequired: migrationInfo.isRequired,
235
- isSensitive: migrationInfo.isSensitive,
236
- environment,
237
- sortOrder: migrationResult.migrated + 1,
238
- isActive: true
239
- };
240
- if (existingConfig && overwrite) {
241
- await showmasterConfigService.updateConfigItem(existingConfig.id, {
242
- ...configData,
243
- value: publicConfigItem.value || existingConfig.value
244
- });
245
- console.log(
246
- `\u{1F504} [\u914D\u7F6E\u8FC1\u79FB] \u66F4\u65B0\u914D\u7F6E: ${configKey} = ${publicConfigItem.value ? "***" : "(empty)"}`
247
- );
248
- } else {
249
- await showmasterConfigService.createConfigItem(configData);
250
- console.log(`\u2705 [\u914D\u7F6E\u8FC1\u79FB] \u8FC1\u79FB\u914D\u7F6E: ${configKey} = ${publicConfigItem.value ? "***" : "(empty)"}`);
251
- }
252
- migrationResult.migratedConfigs.push(configKey);
253
- migrationResult.migrated++;
254
- } else {
255
- console.log(
256
- `\u{1F50D} [\u914D\u7F6E\u8FC1\u79FB] \u9884\u6F14: \u5C06\u8FC1\u79FB ${configKey} = ${publicConfigItem.value ? "***" : "(empty)"}`
257
- );
258
- migrationResult.migratedConfigs.push(configKey);
259
- }
260
- } catch (error) {
261
- console.error(`\u274C [\u914D\u7F6E\u8FC1\u79FB] \u8FC1\u79FB\u914D\u7F6E\u5931\u8D25: ${configKey}`, error);
262
- migrationResult.errors.push(`\u8FC1\u79FB\u914D\u7F6E\u5931\u8D25: ${configKey} - ${error}`);
263
- }
264
- }
265
- console.log("\n\u{1F4CA} [\u914D\u7F6E\u8FC1\u79FB] \u8FC1\u79FB\u5B8C\u6210\uFF01\u751F\u6210\u62A5\u544A...\n");
266
- const report = `
267
- # ShowMasterpiece \u914D\u7F6E\u8FC1\u79FB\u62A5\u544A
268
-
269
- ## \u8FC1\u79FB\u6982\u8981
270
- - **\u8FC1\u79FB\u6A21\u5F0F**: ${dryRun ? "\u9884\u6F14\u6A21\u5F0F" : "\u5B9E\u9645\u8FC1\u79FB"}
271
- - **\u76EE\u6807\u73AF\u5883**: ${environment}
272
- - **\u8986\u76D6\u6A21\u5F0F**: ${overwrite ? "\u542F\u7528" : "\u7981\u7528"}
273
- - **\u6267\u884C\u65F6\u95F4**: ${(/* @__PURE__ */ new Date()).toLocaleString()}
274
-
275
- ## \u8FC1\u79FB\u7EDF\u8BA1
276
- - **\u521B\u5EFA\u5206\u7C7B**: ${migrationResult.categories} \u4E2A
277
- - **\u6210\u529F\u8FC1\u79FB**: ${migrationResult.migrated} \u4E2A\u914D\u7F6E\u9879
278
- - **\u8DF3\u8FC7\u9879\u76EE**: ${migrationResult.skipped} \u4E2A\u914D\u7F6E\u9879
279
- - **\u9519\u8BEF\u6570\u91CF**: ${migrationResult.errors.length} \u4E2A
280
-
281
- ## \u5DF2\u8FC1\u79FB\u7684\u914D\u7F6E\u9879
282
- ${migrationResult.migratedConfigs.length > 0 ? migrationResult.migratedConfigs.map(
283
- (key) => `- \u2705 ${key}: ${CONFIG_MIGRATION_MAP[key]?.displayName}`
284
- ).join("\n") : "- \u65E0"}
285
-
286
- ## \u8DF3\u8FC7\u7684\u914D\u7F6E\u9879
287
- ${migrationResult.skippedConfigs.length > 0 ? migrationResult.skippedConfigs.map((item) => `- \u23ED\uFE0F ${item}`).join("\n") : "- \u65E0"}
288
-
289
- ## \u4E0D\u53EF\u8FC1\u79FB\u7684\u914D\u7F6E\u9879 (\u9700\u8981\u4EBA\u5DE5\u5904\u7406)
290
- ${Object.entries(NON_MIGRATED_CONFIGS).map(([key, reason]) => `- \u26A0\uFE0F ${key}: ${reason}`).join("\n")}
291
-
292
- ## \u9519\u8BEF\u5217\u8868
293
- ${migrationResult.errors.length > 0 ? migrationResult.errors.map((error) => `- \u274C ${error}`).join("\n") : "- \u65E0\u9519\u8BEF"}
294
-
295
- ## \u540E\u7EED\u6B65\u9AA4
296
-
297
- ### 1. \u9A8C\u8BC1\u8FC1\u79FB\u7ED3\u679C
298
- \u8BBF\u95EE ShowMasterpiece \u914D\u7F6E\u9875\u9762\u9A8C\u8BC1\u914D\u7F6E\u662F\u5426\u6B63\u786E\u8FC1\u79FB\uFF1A
299
- \`\`\`
300
- http://localhost:3000/testField/ShowMasterPieces/config
301
- \`\`\`
302
-
303
- ### 2. \u6D4B\u8BD5\u6587\u4EF6\u4E0A\u4F20\u529F\u80FD
304
- \u5C1D\u8BD5\u5728 ShowMasterpiece \u4E2D\u4E0A\u4F20\u56FE\u7247\uFF0C\u9A8C\u8BC1 OSS \u914D\u7F6E\u662F\u5426\u6B63\u5E38\u5DE5\u4F5C\u3002
305
-
306
- ### 3. \u5904\u7406\u654F\u611F\u914D\u7F6E
307
- \u4EE5\u4E0B\u654F\u611F\u914D\u7F6E\u9879\u9700\u8981\u4EBA\u5DE5\u586B\u5165\u5B9E\u9645\u503C\uFF1A
308
- ${migrationResult.migratedConfigs.filter((key) => CONFIG_MIGRATION_MAP[key]?.isSensitive).map((key) => `- ${key}: ${CONFIG_MIGRATION_MAP[key]?.displayName}`).join("\n")}
309
-
310
- ### 4. \u6E05\u7406\u65E7\u914D\u7F6E\uFF08\u53EF\u9009\uFF09
311
- \u8FC1\u79FB\u6210\u529F\u540E\uFF0C\u53EF\u4EE5\u8003\u8651\u5728\u516C\u5171\u914D\u7F6E\u7BA1\u7406\u5668\u4E2D\u7981\u7528\u6216\u5220\u9664\u5DF2\u8FC1\u79FB\u7684\u914D\u7F6E\u9879\uFF0C\u907F\u514D\u914D\u7F6E\u51B2\u7A81\u3002
312
-
313
- ### 5. \u66F4\u65B0\u6587\u6863
314
- \u66F4\u65B0\u9879\u76EE\u6587\u6863\uFF0C\u8BF4\u660E ShowMasterpiece \u6A21\u5757\u73B0\u5728\u4F7F\u7528\u72EC\u7ACB\u914D\u7F6E\u3002
315
- `;
316
- const reportPath = `showmasterpiece-config-migration-report-${environment}-${Date.now()}.md`;
317
- writeFileSync(reportPath, report);
318
- console.log(report);
319
- console.log(`\u{1F4C4} [\u914D\u7F6E\u8FC1\u79FB] \u8BE6\u7EC6\u62A5\u544A\u5DF2\u4FDD\u5B58\u5230: ${reportPath}`);
320
- return migrationResult;
321
- }
322
-
323
- export { migrateConfigToShowmasterpiece };
324
- //# sourceMappingURL=index.mjs.map
325
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/showmasterpiece/scripts/migrateConfig.ts"],"names":[],"mappings":";;;AAmCA,IAAM,oBAAA,GAAuB;AAAA;AAAA,EAE3B,iBAAA,EAAmB;AAAA,IACjB,WAAA,EAAa,iBAAA;AAAA,IACb,WAAA,EAAa,+CAAA;AAAA,IACb,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY,IAAA;AAAA,IACZ,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,WAAA,EAAa,uBAAA;AAAA,IACb,WAAA,EAAa,qDAAA;AAAA,IACb,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY,IAAA;AAAA,IACZ,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,wBAAA,EAA0B;AAAA,IACxB,WAAA,EAAa,cAAA;AAAA,IACb,WAAA,EAAa,gCAAA;AAAA,IACb,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY,IAAA;AAAA,IACZ,WAAA,EAAa,IAAA;AAAA,IACb,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,4BAAA,EAA8B;AAAA,IAC5B,WAAA,EAAa,kBAAA;AAAA,IACb,WAAA,EAAa,oCAAA;AAAA,IACb,IAAA,EAAM,UAAA;AAAA,IACN,UAAA,EAAY,IAAA;AAAA,IACZ,WAAA,EAAa,IAAA;AAAA,IACb,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,wBAAA,EAA0B;AAAA,IACxB,WAAA,EAAa,gCAAA;AAAA,IACb,WAAA,EAAa,2DAAA;AAAA,IACb,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY,KAAA;AAAA,IACZ,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,WAAA,EAAa,mBAAA;AAAA,IACb,WAAA,EAAa,2CAAA;AAAA,IACb,IAAA,EAAM,SAAA;AAAA,IACN,UAAA,EAAY,KAAA;AAAA,IACZ,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,mBAAA,EAAqB;AAAA,IACnB,WAAA,EAAa,0BAAA;AAAA,IACb,WAAA,EAAa,kDAAA;AAAA,IACb,IAAA,EAAM,SAAA;AAAA,IACN,UAAA,EAAY,KAAA;AAAA,IACZ,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU;AAAA,GACZ;AAAA;AAAA,EAGA,iBAAA,EAAmB;AAAA,IACjB,WAAA,EAAa,iBAAA;AAAA,IACb,WAAA,EAAa,+CAAA;AAAA,IACb,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY,KAAA;AAAA,IACZ,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,wBAAA,EAA0B;AAAA,IACxB,WAAA,EAAa,kBAAA;AAAA,IACb,WAAA,EAAa,oCAAA;AAAA,IACb,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY,KAAA;AAAA,IACZ,WAAA,EAAa,IAAA;AAAA,IACb,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,4BAAA,EAA8B;AAAA,IAC5B,WAAA,EAAa,sBAAA;AAAA,IACb,WAAA,EAAa,wCAAA;AAAA,IACb,IAAA,EAAM,UAAA;AAAA,IACN,UAAA,EAAY,KAAA;AAAA,IACZ,WAAA,EAAa,IAAA;AAAA,IACb,QAAA,EAAU;AAAA,GACZ;AAAA;AAAA,EAGA,aAAA,EAAe;AAAA,IACb,WAAA,EAAa,sCAAA;AAAA,IACb,WAAA,EAAa,4FAAA;AAAA,IACb,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY,KAAA;AAAA,IACZ,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,WAAA,EAAa,sCAAA;AAAA,IACb,WAAA,EAAa,kDAAA;AAAA,IACb,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY,KAAA;AAAA,IACZ,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,aAAA,EAAe;AAAA,IACb,WAAA,EAAa,6BAAA;AAAA,IACb,WAAA,EAAa,yCAAA;AAAA,IACb,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY,KAAA;AAAA,IACZ,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU;AAAA;AAEd,CAAA;AAKA,IAAM,oBAAA,GAAuB;AAAA,EAC3B,YAAA,EAAc,2GAAA;AAAA,EACd,kBAAA,EAAoB,2GAAA;AAAA,EACpB,gBAAA,EAAkB,qGAAA;AAAA,EAClB,iBAAA,EAAmB,4FAAA;AAAA,EAEnB,QAAA,EAAU,mFAAA;AAAA,EACV,eAAA,EAAiB,+EAAA;AAAA,EACjB,YAAA,EAAc,kFAAA;AAAA,EAEd,gBAAA,EAAkB,gFAAA;AAAA,EAClB,gBAAA,EAAkB,gFAAA;AAAA,EAClB,iBAAA,EAAmB,gFAAA;AAAA,EACnB,YAAA,EAAc,gFAAA;AAAA,EAEd,cAAA,EAAgB,6EAAA;AAAA,EAChB,SAAA,EAAW,4EAAA;AAAA,EACX,SAAA,EAAW;AACb,CAAA;AAEA,eAAsB,8BAAA,CACpB,QAAA,EACA,OAAA,GAAgC,EAAC,EACnB;AACd,EAAA,MAAM,EAAE,eAAA,EAAiB,uBAAA,EAAwB,GAAI,QAAA;AACrD,EAAA,MAAM,EAAE,MAAA,GAAS,KAAA,EAAO,cAAc,aAAA,EAAe,SAAA,GAAY,OAAM,GAAI,OAAA;AAE3E,EAAA,OAAA,CAAQ,IAAI,uIAA2C,CAAA;AACvD,EAAA,OAAA,CAAQ,IAAI,CAAA,gEAAA,EAAoB,MAAM,kBAAQ,WAAW,CAAA,eAAA,EAAQ,SAAS,CAAA,CAAE,CAAA;AAE5E,EAAA,MAAM,eAAA,GAAkB;AAAA,IACtB,UAAA,EAAY,CAAA;AAAA,IACZ,QAAA,EAAU,CAAA;AAAA,IACV,OAAA,EAAS,CAAA;AAAA,IACT,QAAQ,EAAC;AAAA,IACT,iBAAiB,EAAC;AAAA,IAClB,gBAAgB,EAAC;AAAA,IACjB,oBAAA,EAAsB,MAAA,CAAO,IAAA,CAAK,oBAAoB;AAAA,GACxD;AAGA,EAAA,OAAA,CAAQ,IAAI,8EAAqB,CAAA;AACjC,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB;AAAA,MACE,IAAA,EAAM,KAAA;AAAA,MACN,WAAA,EAAa,mCAAA;AAAA,MACb,WAAA,EAAa,iHAAA;AAAA,MACb,IAAA,EAAM,cAAA;AAAA,MACN,SAAA,EAAW;AAAA,KACb;AAAA,IACA;AAAA,MACE,IAAA,EAAM,KAAA;AAAA,MACN,WAAA,EAAa,mCAAA;AAAA,MACb,WAAA,EAAa,iHAAA;AAAA,MACb,IAAA,EAAM,cAAA;AAAA,MACN,SAAA,EAAW;AAAA,KACb;AAAA,IACA;AAAA,MACE,IAAA,EAAM,MAAA;AAAA,MACN,WAAA,EAAa,sCAAA;AAAA,MACb,WAAA,EAAa,yFAAA;AAAA,MACb,IAAA,EAAM,aAAA;AAAA,MACN,SAAA,EAAW;AAAA;AACb,GACF;AAEA,EAAA,KAAA,MAAW,YAAY,UAAA,EAAY;AACjC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,IAAI;AACF,QAAA,MAAM,gBAAA,GAAmB,MAAM,uBAAA,CAAwB,iBAAA,CAAkB,SAAS,IAAI,CAAA;AACtF,QAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,UAAA,MAAM,wBAAwB,cAAA,CAAe;AAAA,YAC3C,GAAG,QAAA;AAAA,YACH,QAAA,EAAU;AAAA,WACX,CAAA;AACD,UAAA,eAAA,CAAgB,UAAA,EAAA;AAChB,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,4DAAA,EAAkB,QAAA,CAAS,WAAW,CAAA,CAAE,CAAA;AAAA,QACtD,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,wEAAA,EAAoB,QAAA,CAAS,WAAW,CAAA,CAAE,CAAA;AAAA,QACxD;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,wEAAA,EAAoB,QAAA,CAAS,WAAW,IAAI,KAAK,CAAA;AAC/D,QAAA,eAAA,CAAgB,MAAA,CAAO,IAAA,CAAK,CAAA,sCAAA,EAAW,QAAA,CAAS,WAAW,CAAA,CAAE,CAAA;AAAA,MAC/D;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,kFAAA,EAAuB,QAAA,CAAS,WAAW,CAAA,CAAE,CAAA;AAAA,IAC3D;AAAA,EACF;AAGA,EAAA,OAAA,CAAQ,IAAI,oFAAsB,CAAA;AAClC,EAAA,MAAM,iBAAA,GAAoB,MAAM,eAAA,CAAgB,iBAAA,EAAkB;AAGlE,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAiB;AACzC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,aAAA,GAAgB,MAAM,uBAAA,CAAwB,gBAAA,EAAiB;AACrE,IAAA,KAAA,MAAW,OAAO,aAAA,EAAe;AAC/B,MAAA,WAAA,CAAY,GAAA,CAAI,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AAAA,IAC/B;AAAA,EACF,CAAA,MAAO;AACL,IAAA,WAAA,CAAY,GAAA,CAAI,OAAO,EAAE,EAAA,EAAI,eAAe,IAAA,EAAM,KAAA,EAAO,WAAA,EAAa,mCAAA,EAAY,CAAA;AAClF,IAAA,WAAA,CAAY,GAAA,CAAI,OAAO,EAAE,EAAA,EAAI,eAAe,IAAA,EAAM,KAAA,EAAO,WAAA,EAAa,mCAAA,EAAY,CAAA;AAClF,IAAA,WAAA,CAAY,GAAA,CAAI,QAAQ,EAAE,EAAA,EAAI,gBAAgB,IAAA,EAAM,MAAA,EAAQ,WAAA,EAAa,sCAAA,EAAU,CAAA;AAAA,EACrF;AAGA,EAAA,OAAA,CAAQ,IAAI,oFAAsB,CAAA;AAClC,EAAA,KAAA,MAAW,CAAC,SAAA,EAAW,aAAa,KAAK,MAAA,CAAO,OAAA,CAAQ,oBAAoB,CAAA,EAAG;AAC7E,IAAA,IAAI;AACF,MAAA,MAAM,mBAAmB,iBAAA,CAAkB,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,QAAQ,SAAS,CAAA;AAEhF,MAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,0FAAA,EAAuB,SAAS,CAAA,CAAE,CAAA;AAC9C,QAAA,eAAA,CAAgB,cAAA,CAAe,IAAA,CAAK,CAAA,EAAG,SAAS,CAAA,mDAAA,CAAa,CAAA;AAC7D,QAAA,eAAA,CAAgB,OAAA,EAAA;AAChB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,cAAA,GAAiB,CAAC,MAAA,GACpB,MAAM,wBAAwB,kBAAA,CAAmB,SAAA,EAAW,WAAW,CAAA,GACvE,IAAA;AAEJ,MAAA,IAAI,cAAA,IAAkB,CAAC,SAAA,EAAW;AAChC,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,0FAAA,EAAuB,SAAS,CAAA,CAAE,CAAA;AAC9C,QAAA,eAAA,CAAgB,cAAA,CAAe,IAAA,CAAK,CAAA,EAAG,SAAS,CAAA,qBAAA,CAAQ,CAAA;AACxD,QAAA,eAAA,CAAgB,OAAA,EAAA;AAChB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,QAAA,GAAW,WAAA,CAAY,GAAA,CAAI,aAAA,CAAc,QAAQ,CAAA;AACvD,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,OAAA,CAAQ,MAAM,CAAA,kEAAA,EAAmB,aAAA,CAAc,QAAQ,CAAA,KAAA,EAAQ,SAAS,CAAA,CAAE,CAAA;AAC1E,QAAA,eAAA,CAAgB,MAAA,CAAO,IAAA,CAAK,CAAA,gCAAA,EAAU,aAAA,CAAc,QAAQ,CAAA,CAAE,CAAA;AAC9D,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,UAAA,GAAa;AAAA,UACjB,YAAY,QAAA,CAAS,EAAA;AAAA,UACrB,GAAA,EAAK,SAAA;AAAA,UACL,aAAa,aAAA,CAAc,WAAA;AAAA,UAC3B,aAAa,aAAA,CAAc,WAAA;AAAA,UAC3B,KAAA,EAAO,gBAAA,CAAiB,KAAA,IAAS,gBAAA,CAAiB,YAAA,IAAgB,EAAA;AAAA,UAClE,YAAA,EAAc,iBAAiB,YAAA,IAAgB,EAAA;AAAA,UAC/C,MAAM,aAAA,CAAc,IAAA;AAAA,UACpB,YAAY,aAAA,CAAc,UAAA;AAAA,UAC1B,aAAa,aAAA,CAAc,WAAA;AAAA,UAC3B,WAAA;AAAA,UACA,SAAA,EAAW,gBAAgB,QAAA,GAAW,CAAA;AAAA,UACtC,QAAA,EAAU;AAAA,SACZ;AAEA,QAAA,IAAI,kBAAkB,SAAA,EAAW;AAC/B,UAAA,MAAM,uBAAA,CAAwB,gBAAA,CAAiB,cAAA,CAAe,EAAA,EAAI;AAAA,YAChE,GAAG,UAAA;AAAA,YACH,KAAA,EAAO,gBAAA,CAAiB,KAAA,IAAS,cAAA,CAAe;AAAA,WACjD,CAAA;AACD,UAAA,OAAA,CAAQ,GAAA;AAAA,YACN,kEAAmB,SAAS,CAAA,GAAA,EAAM,gBAAA,CAAiB,KAAA,GAAQ,QAAQ,SAAS,CAAA;AAAA,WAC9E;AAAA,QACF,CAAA,MAAO;AACL,UAAA,MAAM,uBAAA,CAAwB,iBAAiB,UAAU,CAAA;AACzD,UAAA,OAAA,CAAQ,GAAA,CAAI,+DAAkB,SAAS,CAAA,GAAA,EAAM,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,SAAS,CAAA,CAAE,CAAA;AAAA,QAC3F;AAEA,QAAA,eAAA,CAAgB,eAAA,CAAgB,KAAK,SAAS,CAAA;AAC9C,QAAA,eAAA,CAAgB,QAAA,EAAA;AAAA,MAClB,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,yEAAqB,SAAS,CAAA,GAAA,EAAM,gBAAA,CAAiB,KAAA,GAAQ,QAAQ,SAAS,CAAA;AAAA,SAChF;AACA,QAAA,eAAA,CAAgB,eAAA,CAAgB,KAAK,SAAS,CAAA;AAAA,MAChD;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,wEAAA,EAAoB,SAAS,CAAA,CAAA,EAAI,KAAK,CAAA;AACpD,MAAA,eAAA,CAAgB,OAAO,IAAA,CAAK,CAAA,sCAAA,EAAW,SAAS,CAAA,GAAA,EAAM,KAAK,CAAA,CAAE,CAAA;AAAA,IAC/D;AAAA,EACF;AAGA,EAAA,OAAA,CAAQ,IAAI,oGAA4B,CAAA;AAExC,EAAA,MAAM,MAAA,GAAS;AAAA;;AAAA;AAAA,gCAAA,EAIH,MAAA,GAAS,6BAAS,0BAAM;AAAA,gCAAA,EACxB,WAAW;AAAA,gCAAA,EACX,SAAA,GAAY,iBAAO,cAAI;AAAA,gCAAA,EAAA,iBACvB,IAAI,IAAA,EAAK,EAAE,cAAA,EAAgB;;AAAA;AAAA,gCAAA,EAG3B,gBAAgB,UAAU,CAAA;AAAA,gCAAA,EAC1B,gBAAgB,QAAQ,CAAA;AAAA,gCAAA,EACxB,gBAAgB,OAAO,CAAA;AAAA,gCAAA,EACvB,eAAA,CAAgB,OAAO,MAAM,CAAA;;AAAA;AAAA,EAIzC,eAAA,CAAgB,eAAA,CAAgB,MAAA,GAAS,CAAA,GACrC,gBAAgB,eAAA,CACb,GAAA;AAAA,IACC,CAAC,QACC,CAAA,SAAA,EAAO,GAAG,KAAK,oBAAA,CAAqB,GAAwC,GAAG,WAAW,CAAA;AAAA,GAC9F,CACC,IAAA,CAAK,IAAI,CAAA,GACZ,UACN;;AAAA;AAAA,EAIE,gBAAgB,cAAA,CAAe,MAAA,GAAS,CAAA,GACpC,eAAA,CAAgB,eAAe,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,eAAA,EAAQ,IAAI,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,IACtE,UACN;;AAAA;AAAA,EAGE,OAAO,OAAA,CAAQ,oBAAoB,EAClC,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,MAAM,CAAA,KAAM,CAAA,eAAA,EAAQ,GAAG,CAAA,EAAA,EAAK,MAAM,EAAE,CAAA,CAC/C,IAAA,CAAK,IAAI,CAAC;;AAAA;AAAA,EAIX,gBAAgB,MAAA,CAAO,MAAA,GAAS,CAAA,GAC5B,eAAA,CAAgB,OAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAA,SAAA,EAAO,KAAK,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,IAC/D,sBACN;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA,EAeE,eAAA,CAAgB,eAAA,CACf,MAAA,CAAO,CAAC,GAAA,KAAQ,qBAAqB,GAAwC,CAAA,EAAG,WAAW,CAAA,CAC3F,GAAA,CAAI,CAAC,QAAQ,CAAA,EAAA,EAAK,GAAG,CAAA,EAAA,EAAK,oBAAA,CAAqB,GAAwC,CAAA,EAAG,WAAW,CAAA,CAAE,CAAA,CACvG,IAAA,CAAK,IAAI,CAAC;;AAAA;AAAA;;AAAA;AAAA;AAAA,CAAA;AASX,EAAA,MAAM,aAAa,CAAA,wCAAA,EAA2C,WAAW,CAAA,CAAA,EAAI,IAAA,CAAK,KAAK,CAAA,GAAA,CAAA;AACvF,EAAA,aAAA,CAAc,YAAY,MAAM,CAAA;AAEhC,EAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAClB,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,uFAAA,EAAuB,UAAU,CAAA,CAAE,CAAA;AAE/C,EAAA,OAAO,eAAA;AACT","file":"index.mjs","sourcesContent":["/**\n * ShowMasterpiece 配置迁移脚本\n *\n * 将公共配置管理器中的 OSS 及相关配置复制到 showmasterpiece 独立配置中\n */\n\nimport { writeFileSync } from 'fs';\n\nexport interface ConfigDbServiceLike {\n getAllConfigItems(): Promise<any[]>;\n}\n\nexport interface ShowmasterConfigServiceLike {\n getCategoryByName(name: string): Promise<any | null>;\n createCategory(payload: any): Promise<any>;\n getAllCategories(): Promise<any[]>;\n getConfigItemByKey(key: string, environment?: string): Promise<any | null>;\n updateConfigItem(id: number | string, payload: any): Promise<any>;\n createConfigItem(payload: any): Promise<any>;\n}\n\nexport interface MigrateConfigOptions {\n dryRun?: boolean;\n environment?: 'development' | 'production';\n overwrite?: boolean;\n}\n\nexport interface MigrationServices {\n configDbService: ConfigDbServiceLike;\n showmasterConfigService: ShowmasterConfigServiceLike;\n}\n\n/**\n * 需要迁移的配置项映射\n */\nconst CONFIG_MIGRATION_MAP = {\n // OSS 配置\n ALIYUN_OSS_REGION: {\n displayName: 'OSS区域',\n description: '阿里云OSS存储区域',\n type: 'string',\n isRequired: true,\n isSensitive: false,\n category: 'oss',\n },\n ALIYUN_OSS_BUCKET: {\n displayName: 'OSS存储桶',\n description: '阿里云OSS存储桶名称',\n type: 'string',\n isRequired: true,\n isSensitive: false,\n category: 'oss',\n },\n ALIYUN_OSS_ACCESS_KEY_ID: {\n displayName: 'AccessKey ID',\n description: '阿里云AccessKey ID',\n type: 'string',\n isRequired: true,\n isSensitive: true,\n category: 'oss',\n },\n ALIYUN_OSS_ACCESS_KEY_SECRET: {\n displayName: 'AccessKey Secret',\n description: '阿里云AccessKey Secret',\n type: 'password',\n isRequired: true,\n isSensitive: true,\n category: 'oss',\n },\n ALIYUN_OSS_CUSTOM_DOMAIN: {\n displayName: '自定义域名',\n description: 'OSS自定义域名(可选)',\n type: 'string',\n isRequired: false,\n isSensitive: false,\n category: 'oss',\n },\n ALIYUN_OSS_SECURE: {\n displayName: '使用HTTPS',\n description: '是否使用HTTPS连接',\n type: 'boolean',\n isRequired: false,\n isSensitive: false,\n category: 'oss',\n },\n ALIYUN_OSS_INTERNAL: {\n displayName: '内网访问',\n description: '是否使用内网访问',\n type: 'boolean',\n isRequired: false,\n isSensitive: false,\n category: 'oss',\n },\n\n // CDN 配置(可选)\n ALIYUN_CDN_DOMAIN: {\n displayName: 'CDN域名',\n description: '阿里云CDN加速域名',\n type: 'string',\n isRequired: false,\n isSensitive: false,\n category: 'cdn',\n },\n ALIYUN_CDN_ACCESS_KEY_ID: {\n displayName: 'CDN AccessKey ID',\n description: '阿里云CDN AccessKey ID',\n type: 'string',\n isRequired: false,\n isSensitive: true,\n category: 'cdn',\n },\n ALIYUN_CDN_ACCESS_KEY_SECRET: {\n displayName: 'CDN AccessKey Secret',\n description: '阿里云CDN AccessKey Secret',\n type: 'password',\n isRequired: false,\n isSensitive: true,\n category: 'cdn',\n },\n\n // 文件服务相关配置\n MAX_FILE_SIZE: {\n displayName: '最大文件大小',\n description: '允许上传的最大文件大小(字节)',\n type: 'number',\n isRequired: false,\n isSensitive: false,\n category: 'file',\n },\n FILE_STORAGE_PATH: {\n displayName: '本地存储路径',\n description: '本地文件存储路径',\n type: 'string',\n isRequired: false,\n isSensitive: false,\n category: 'file',\n },\n FILE_BASE_URL: {\n displayName: '文件基础URL',\n description: '文件访问基础URL',\n type: 'string',\n isRequired: false,\n isSensitive: false,\n category: 'file',\n },\n} as const;\n\n/**\n * 不迁移的配置项(将在报告中列出)\n */\nconst NON_MIGRATED_CONFIGS = {\n DATABASE_URL: '数据库连接字符串 - 建议由平台统一管理',\n DATABASE_POOL_SIZE: '数据库连接池配置 - 建议由平台统一管理',\n DATABASE_TIMEOUT: '数据库超时配置 - 建议由平台统一管理',\n DATABASE_SSL_MODE: '数据库SSL配置 - 建议由平台统一管理',\n\n NODE_ENV: '运行环境标识 - 由部署环境决定',\n NEXTAUTH_SECRET: 'NextAuth密钥 - 建议由平台统一管理',\n NEXTAUTH_URL: 'NextAuth回调URL - 建议由平台统一管理',\n\n QINIU_ACCESS_KEY: '七牛云配置 - ShowMasterpiece模块不使用',\n QINIU_SECRET_KEY: '七牛云配置 - ShowMasterpiece模块不使用',\n QINIU_BUCKET_NAME: '七牛云配置 - ShowMasterpiece模块不使用',\n QINIU_DOMAIN: '七牛云配置 - ShowMasterpiece模块不使用',\n\n OPENAI_API_KEY: 'OpenAI配置 - 不属于文件存储范畴',\n REDIS_URL: 'Redis配置 - 建议由平台统一管理',\n 'EMAIL_*': '邮件服务配置 - 不属于文件存储范畴',\n} as const;\n\nexport async function migrateConfigToShowmasterpiece(\n services: MigrationServices,\n options: MigrateConfigOptions = {},\n): Promise<any> {\n const { configDbService, showmasterConfigService } = services;\n const { dryRun = false, environment = 'development', overwrite = false } = options;\n\n console.log('🚀 [配置迁移] 开始迁移公共配置到ShowMasterpiece独立配置...');\n console.log(`📋 [配置迁移] 选项: 预演=${dryRun}, 环境=${environment}, 覆盖=${overwrite}`);\n\n const migrationResult = {\n categories: 0,\n migrated: 0,\n skipped: 0,\n errors: [] as string[],\n migratedConfigs: [] as string[],\n skippedConfigs: [] as string[],\n nonMigratableConfigs: Object.keys(NON_MIGRATED_CONFIGS),\n };\n\n // 1. 创建配置分类\n console.log('📦 [配置迁移] 创建配置分类...');\n const categories = [\n {\n name: 'oss',\n displayName: '阿里云OSS配置',\n description: 'ShowMasterpiece模块专用的阿里云对象存储服务配置',\n icon: 'fas fa-cloud',\n sortOrder: 1,\n },\n {\n name: 'cdn',\n displayName: '阿里云CDN配置',\n description: 'ShowMasterpiece模块专用的阿里云内容分发网络配置',\n icon: 'fas fa-globe',\n sortOrder: 2,\n },\n {\n name: 'file',\n displayName: '文件服务配置',\n description: 'ShowMasterpiece模块的文件存储和处理配置',\n icon: 'fas fa-file',\n sortOrder: 3,\n },\n ];\n\n for (const category of categories) {\n if (!dryRun) {\n try {\n const existingCategory = await showmasterConfigService.getCategoryByName(category.name);\n if (!existingCategory) {\n await showmasterConfigService.createCategory({\n ...category,\n isActive: true,\n });\n migrationResult.categories++;\n console.log(`✅ [配置迁移] 创建分类: ${category.displayName}`);\n } else {\n console.log(`ℹ️ [配置迁移] 分类已存在: ${category.displayName}`);\n }\n } catch (error) {\n console.error(`❌ [配置迁移] 创建分类失败: ${category.displayName}`, error);\n migrationResult.errors.push(`创建分类失败: ${category.displayName}`);\n }\n } else {\n console.log(`🔍 [配置迁移] 预演: 将创建分类 ${category.displayName}`);\n }\n }\n\n // 2. 获取公共配置项\n console.log('📋 [配置迁移] 获取公共配置项...');\n const publicConfigItems = await configDbService.getAllConfigItems();\n\n // 3. 获取所有分类的映射\n const categoryMap = new Map<string, any>();\n if (!dryRun) {\n const allCategories = await showmasterConfigService.getAllCategories();\n for (const cat of allCategories) {\n categoryMap.set(cat.name, cat);\n }\n } else {\n categoryMap.set('oss', { id: 'mock-oss-id', name: 'oss', displayName: '阿里云OSS配置' });\n categoryMap.set('cdn', { id: 'mock-cdn-id', name: 'cdn', displayName: '阿里云CDN配置' });\n categoryMap.set('file', { id: 'mock-file-id', name: 'file', displayName: '文件服务配置' });\n }\n\n // 4. 迁移配置项\n console.log('🔄 [配置迁移] 开始迁移配置项...');\n for (const [configKey, migrationInfo] of Object.entries(CONFIG_MIGRATION_MAP)) {\n try {\n const publicConfigItem = publicConfigItems.find((item) => item.key === configKey);\n\n if (!publicConfigItem) {\n console.log(`⚠️ [配置迁移] 公共配置中未找到: ${configKey}`);\n migrationResult.skippedConfigs.push(`${configKey} (公共配置中不存在)`);\n migrationResult.skipped++;\n continue;\n }\n\n const existingConfig = !dryRun\n ? await showmasterConfigService.getConfigItemByKey(configKey, environment)\n : null;\n\n if (existingConfig && !overwrite) {\n console.log(`ℹ️ [配置迁移] 配置已存在,跳过: ${configKey}`);\n migrationResult.skippedConfigs.push(`${configKey} (已存在)`);\n migrationResult.skipped++;\n continue;\n }\n\n const category = categoryMap.get(migrationInfo.category);\n if (!category) {\n console.error(`❌ [配置迁移] 分类不存在: ${migrationInfo.category} for ${configKey}`);\n migrationResult.errors.push(`分类不存在: ${migrationInfo.category}`);\n continue;\n }\n\n if (!dryRun) {\n const configData = {\n categoryId: category.id,\n key: configKey,\n displayName: migrationInfo.displayName,\n description: migrationInfo.description,\n value: publicConfigItem.value || publicConfigItem.defaultValue || '',\n defaultValue: publicConfigItem.defaultValue || '',\n type: migrationInfo.type,\n isRequired: migrationInfo.isRequired,\n isSensitive: migrationInfo.isSensitive,\n environment,\n sortOrder: migrationResult.migrated + 1,\n isActive: true,\n };\n\n if (existingConfig && overwrite) {\n await showmasterConfigService.updateConfigItem(existingConfig.id, {\n ...configData,\n value: publicConfigItem.value || existingConfig.value,\n });\n console.log(\n `🔄 [配置迁移] 更新配置: ${configKey} = ${publicConfigItem.value ? '***' : '(empty)'}`,\n );\n } else {\n await showmasterConfigService.createConfigItem(configData);\n console.log(`✅ [配置迁移] 迁移配置: ${configKey} = ${publicConfigItem.value ? '***' : '(empty)'}`);\n }\n\n migrationResult.migratedConfigs.push(configKey);\n migrationResult.migrated++;\n } else {\n console.log(\n `🔍 [配置迁移] 预演: 将迁移 ${configKey} = ${publicConfigItem.value ? '***' : '(empty)'}`,\n );\n migrationResult.migratedConfigs.push(configKey);\n }\n } catch (error) {\n console.error(`❌ [配置迁移] 迁移配置失败: ${configKey}`, error);\n migrationResult.errors.push(`迁移配置失败: ${configKey} - ${error}`);\n }\n }\n\n // 5. 生成迁移报告\n console.log('\\n📊 [配置迁移] 迁移完成!生成报告...\\n');\n\n const report = `\n# ShowMasterpiece 配置迁移报告\n\n## 迁移概要\n- **迁移模式**: ${dryRun ? '预演模式' : '实际迁移'}\n- **目标环境**: ${environment}\n- **覆盖模式**: ${overwrite ? '启用' : '禁用'}\n- **执行时间**: ${new Date().toLocaleString()}\n\n## 迁移统计\n- **创建分类**: ${migrationResult.categories} 个\n- **成功迁移**: ${migrationResult.migrated} 个配置项\n- **跳过项目**: ${migrationResult.skipped} 个配置项\n- **错误数量**: ${migrationResult.errors.length} 个\n\n## 已迁移的配置项\n${\n migrationResult.migratedConfigs.length > 0\n ? migrationResult.migratedConfigs\n .map(\n (key) =>\n `- ✅ ${key}: ${CONFIG_MIGRATION_MAP[key as keyof typeof CONFIG_MIGRATION_MAP]?.displayName}`,\n )\n .join('\\n')\n : '- 无'\n}\n\n## 跳过的配置项\n${\n migrationResult.skippedConfigs.length > 0\n ? migrationResult.skippedConfigs.map((item) => `- ⏭️ ${item}`).join('\\n')\n : '- 无'\n}\n\n## 不可迁移的配置项 (需要人工处理)\n${Object.entries(NON_MIGRATED_CONFIGS)\n .map(([key, reason]) => `- ⚠️ ${key}: ${reason}`)\n .join('\\n')}\n\n## 错误列表\n${\n migrationResult.errors.length > 0\n ? migrationResult.errors.map((error) => `- ❌ ${error}`).join('\\n')\n : '- 无错误'\n}\n\n## 后续步骤\n\n### 1. 验证迁移结果\n访问 ShowMasterpiece 配置页面验证配置是否正确迁移:\n\\`\\`\\`\nhttp://localhost:3000/testField/ShowMasterPieces/config\n\\`\\`\\`\n\n### 2. 测试文件上传功能\n尝试在 ShowMasterpiece 中上传图片,验证 OSS 配置是否正常工作。\n\n### 3. 处理敏感配置\n以下敏感配置项需要人工填入实际值:\n${migrationResult.migratedConfigs\n .filter((key) => CONFIG_MIGRATION_MAP[key as keyof typeof CONFIG_MIGRATION_MAP]?.isSensitive)\n .map((key) => `- ${key}: ${CONFIG_MIGRATION_MAP[key as keyof typeof CONFIG_MIGRATION_MAP]?.displayName}`)\n .join('\\n')}\n\n### 4. 清理旧配置(可选)\n迁移成功后,可以考虑在公共配置管理器中禁用或删除已迁移的配置项,避免配置冲突。\n\n### 5. 更新文档\n更新项目文档,说明 ShowMasterpiece 模块现在使用独立配置。\n`;\n\n const reportPath = `showmasterpiece-config-migration-report-${environment}-${Date.now()}.md`;\n writeFileSync(reportPath, report);\n\n console.log(report);\n console.log(`📄 [配置迁移] 详细报告已保存到: ${reportPath}`);\n\n return migrationResult;\n}\n"]}