prime-dev-cli 1.0.9 → 1.0.11-beta.1

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 (306) hide show
  1. package/bin/cli.mjs +160 -28
  2. package/config/projects.example.json +351 -0
  3. package/config/projects.json +45 -3
  4. package/dist/server/.next/BUILD_ID +1 -1
  5. package/dist/server/.next/app-build-manifest.json +1 -1
  6. package/dist/server/.next/build-manifest.json +2 -2
  7. package/dist/server/.next/cache/.rscinfo +1 -1
  8. package/dist/server/.next/cache/.tsbuildinfo +1 -1
  9. package/dist/server/.next/cache/eslint/.cache_1qa5vxt +1 -1
  10. package/dist/server/.next/fallback-build-manifest.json +2 -2
  11. package/dist/server/.next/next-minimal-server.js.nft.json +1 -1
  12. package/dist/server/.next/next-server.js.nft.json +1 -1
  13. package/dist/server/.next/prerender-manifest.json +12 -12
  14. package/dist/server/.next/server/app/_not-found.html +1 -1
  15. package/dist/server/.next/server/app/_not-found.rsc +1 -1
  16. package/dist/server/.next/server/app/api/check-workspace/route.js.nft.json +1 -1
  17. package/dist/server/.next/server/app/api/initialize-workspace/route.js.nft.json +1 -1
  18. package/dist/server/.next/server/app/api/microapp-proxy-config/route.js.nft.json +1 -1
  19. package/dist/server/.next/server/app/api/open-project/route.js.nft.json +1 -1
  20. package/dist/server/.next/server/app/api/project-config/route.js.nft.json +1 -1
  21. package/dist/server/.next/server/app/api/retry-project/route.js.nft.json +1 -1
  22. package/dist/server/.next/server/app/configuration/page/app-build-manifest.json +1 -1
  23. package/dist/server/.next/server/app/configuration/page_client-reference-manifest.js +1 -1
  24. package/dist/server/.next/server/app/configuration.html +1 -1
  25. package/dist/server/.next/server/app/configuration.rsc +2 -2
  26. package/dist/server/.next/server/app/index.html +1 -1
  27. package/dist/server/.next/server/app/index.rsc +1 -1
  28. package/dist/server/.next/server/app/initialization.html +1 -1
  29. package/dist/server/.next/server/app/initialization.rsc +1 -1
  30. package/dist/server/.next/server/chunks/[root-of-the-server]__0111ac14._.js +3 -3
  31. package/dist/server/.next/server/chunks/[root-of-the-server]__0111ac14._.js.map +1 -1
  32. package/dist/server/.next/server/chunks/[root-of-the-server]__1efea51d._.js +2 -2
  33. package/dist/server/.next/server/chunks/[root-of-the-server]__1efea51d._.js.map +1 -1
  34. package/dist/server/.next/server/chunks/[root-of-the-server]__27f3b464._.js +1 -1
  35. package/dist/server/.next/server/chunks/[root-of-the-server]__27f3b464._.js.map +1 -1
  36. package/dist/server/.next/server/chunks/[root-of-the-server]__3da8edfd._.js +1 -1
  37. package/dist/server/.next/server/chunks/[root-of-the-server]__3da8edfd._.js.map +1 -1
  38. package/dist/server/.next/server/chunks/[root-of-the-server]__84542811._.js +2 -2
  39. package/dist/server/.next/server/chunks/[root-of-the-server]__84542811._.js.map +1 -1
  40. package/dist/server/.next/server/chunks/[root-of-the-server]__c513ec4a._.js +2 -2
  41. package/dist/server/.next/server/chunks/[root-of-the-server]__c513ec4a._.js.map +1 -1
  42. package/dist/server/.next/server/chunks/[root-of-the-server]__ec0f2f72._.js +1 -1
  43. package/dist/server/.next/server/chunks/[root-of-the-server]__ec0f2f72._.js.map +1 -1
  44. package/dist/server/.next/server/chunks/ssr/_2488faea._.js +1 -1
  45. package/dist/server/.next/server/chunks/ssr/_2488faea._.js.map +1 -1
  46. package/dist/server/.next/server/pages/404.html +1 -1
  47. package/dist/server/.next/server/pages/500.html +1 -1
  48. package/dist/server/.next/server/server-reference-manifest.js +1 -1
  49. package/dist/server/.next/server/server-reference-manifest.json +1 -1
  50. package/dist/server/.next/static/chunks/{6c6c1dcf9e7e2204.js.map → 4791e420776e4b33.js.map} +1 -1
  51. package/dist/server/.next/static/chunks/{512b4b5323114f56.js → f99d8b48dbb26003.js} +2 -2
  52. package/dist/server/.next/trace +1 -1
  53. package/package.json +4 -3
  54. package/dist/server/.next/cache/eslint/.cache_13k185s +0 -1
  55. package/dist/server/.next/cache/webpack/client-production/0.pack +0 -0
  56. package/dist/server/.next/cache/webpack/client-production/1.pack +0 -0
  57. package/dist/server/.next/cache/webpack/client-production/10.pack +0 -0
  58. package/dist/server/.next/cache/webpack/client-production/11.pack +0 -0
  59. package/dist/server/.next/cache/webpack/client-production/12.pack +0 -0
  60. package/dist/server/.next/cache/webpack/client-production/13.pack +0 -0
  61. package/dist/server/.next/cache/webpack/client-production/14.pack +0 -0
  62. package/dist/server/.next/cache/webpack/client-production/15.pack +0 -0
  63. package/dist/server/.next/cache/webpack/client-production/16.pack +0 -0
  64. package/dist/server/.next/cache/webpack/client-production/17.pack +0 -0
  65. package/dist/server/.next/cache/webpack/client-production/18.pack +0 -0
  66. package/dist/server/.next/cache/webpack/client-production/2.pack +0 -0
  67. package/dist/server/.next/cache/webpack/client-production/3.pack +0 -0
  68. package/dist/server/.next/cache/webpack/client-production/4.pack +0 -0
  69. package/dist/server/.next/cache/webpack/client-production/5.pack +0 -0
  70. package/dist/server/.next/cache/webpack/client-production/6.pack +0 -0
  71. package/dist/server/.next/cache/webpack/client-production/7.pack +0 -0
  72. package/dist/server/.next/cache/webpack/client-production/8.pack +0 -0
  73. package/dist/server/.next/cache/webpack/client-production/9.pack +0 -0
  74. package/dist/server/.next/cache/webpack/client-production/index.pack +0 -0
  75. package/dist/server/.next/cache/webpack/client-production/index.pack.old +0 -0
  76. package/dist/server/.next/cache/webpack/edge-server-production/0.pack +0 -0
  77. package/dist/server/.next/cache/webpack/edge-server-production/index.pack +0 -0
  78. package/dist/server/.next/cache/webpack/edge-server-production/index.pack.old +0 -0
  79. package/dist/server/.next/cache/webpack/server-production/0.pack +0 -0
  80. package/dist/server/.next/cache/webpack/server-production/1.pack +0 -0
  81. package/dist/server/.next/cache/webpack/server-production/2.pack +0 -0
  82. package/dist/server/.next/cache/webpack/server-production/3.pack +0 -0
  83. package/dist/server/.next/cache/webpack/server-production/4.pack +0 -0
  84. package/dist/server/.next/cache/webpack/server-production/5.pack +0 -0
  85. package/dist/server/.next/cache/webpack/server-production/6.pack +0 -0
  86. package/dist/server/.next/cache/webpack/server-production/7.pack +0 -0
  87. package/dist/server/.next/cache/webpack/server-production/8.pack +0 -0
  88. package/dist/server/.next/cache/webpack/server-production/9.pack +0 -0
  89. package/dist/server/.next/cache/webpack/server-production/index.pack +0 -0
  90. package/dist/server/.next/cache/webpack/server-production/index.pack.old +0 -0
  91. package/dist/server/.next/react-loadable-manifest.json +0 -1
  92. package/dist/server/.next/server/chunks/131.js +0 -20
  93. package/dist/server/.next/server/chunks/135.js +0 -20
  94. package/dist/server/.next/server/chunks/426.js +0 -1
  95. package/dist/server/.next/server/chunks/542.js +0 -1
  96. package/dist/server/.next/server/chunks/821.js +0 -5
  97. package/dist/server/.next/server/chunks/901.js +0 -1
  98. package/dist/server/.next/server/chunks/967.js +0 -5
  99. package/dist/server/.next/server/chunks/972.js +0 -6
  100. package/dist/server/.next/server/middleware-react-loadable-manifest.js +0 -1
  101. package/dist/server/.next/server/webpack-runtime.js +0 -1
  102. package/dist/server/.next/static/0L93NbbowsMpjl-fJPWIj/_buildManifest.js +0 -1
  103. package/dist/server/.next/static/0YG3L7wZtbtQp2XameODj/_buildManifest.js +0 -1
  104. package/dist/server/.next/static/0YG3L7wZtbtQp2XameODj/_ssgManifest.js +0 -1
  105. package/dist/server/.next/static/4EggIRp7gmu3C68Fsraff/_buildManifest.js +0 -1
  106. package/dist/server/.next/static/4EggIRp7gmu3C68Fsraff/_ssgManifest.js +0 -1
  107. package/dist/server/.next/static/4F2ksJZLv3Xaz5X--KGOp/_buildManifest.js +0 -1
  108. package/dist/server/.next/static/4F2ksJZLv3Xaz5X--KGOp/_ssgManifest.js +0 -1
  109. package/dist/server/.next/static/CcPdKvbUmZBYZz_Z0RQOI/_ssgManifest.js +0 -1
  110. package/dist/server/.next/static/G7Z-m_yayOJWJic2pMxim/_buildManifest.js +0 -1
  111. package/dist/server/.next/static/G7Z-m_yayOJWJic2pMxim/_clientMiddlewareManifest.json +0 -1
  112. package/dist/server/.next/static/G7Z-m_yayOJWJic2pMxim/_ssgManifest.js +0 -1
  113. package/dist/server/.next/static/Mmn2KHpe4Btd9UFvAkzbC/_buildManifest.js +0 -1
  114. package/dist/server/.next/static/Mmn2KHpe4Btd9UFvAkzbC/_ssgManifest.js +0 -1
  115. package/dist/server/.next/static/MwYZh9prxBMJtf26zAtTY/_buildManifest.js +0 -1
  116. package/dist/server/.next/static/MwYZh9prxBMJtf26zAtTY/_ssgManifest.js +0 -1
  117. package/dist/server/.next/static/OrhaeyZZfCZRWwhHqa6d_/_buildManifest.js +0 -1
  118. package/dist/server/.next/static/OrhaeyZZfCZRWwhHqa6d_/_ssgManifest.js +0 -1
  119. package/dist/server/.next/static/S8uHKVezmbN9FqrOMghlT/_buildManifest.js +0 -1
  120. package/dist/server/.next/static/S8uHKVezmbN9FqrOMghlT/_ssgManifest.js +0 -1
  121. package/dist/server/.next/static/Vj8TOfdXSkRSgi8JoSCLF/_buildManifest.js +0 -1
  122. package/dist/server/.next/static/Vj8TOfdXSkRSgi8JoSCLF/_ssgManifest.js +0 -1
  123. package/dist/server/.next/static/W9gpINx4oQDxDFLMkCJQL/_buildManifest.js +0 -1
  124. package/dist/server/.next/static/W9gpINx4oQDxDFLMkCJQL/_ssgManifest.js +0 -1
  125. package/dist/server/.next/static/Ws4syXZ5lu2blUfguY1K3/_buildManifest.js +0 -1
  126. package/dist/server/.next/static/Ws4syXZ5lu2blUfguY1K3/_ssgManifest.js +0 -1
  127. package/dist/server/.next/static/chunks/09f18d884b3a25a2.js.map +0 -1
  128. package/dist/server/.next/static/chunks/167-e44cb396108f68cd.js +0 -1
  129. package/dist/server/.next/static/chunks/180-8dacaec05f53f53f.js +0 -1
  130. package/dist/server/.next/static/chunks/180-aabf82e25d34cbe3.js +0 -1
  131. package/dist/server/.next/static/chunks/28309924e4c23ccc.js +0 -5
  132. package/dist/server/.next/static/chunks/2b6075b99689b028.css.map +0 -1
  133. package/dist/server/.next/static/chunks/355-0aabfb42ab072146.js +0 -1
  134. package/dist/server/.next/static/chunks/371387b426d53320.js +0 -3
  135. package/dist/server/.next/static/chunks/4695aadfc21f48b8.js +0 -5
  136. package/dist/server/.next/static/chunks/495-1a64c3075b5b8ac4.js +0 -1
  137. package/dist/server/.next/static/chunks/770-17268e5a9d004dae.js +0 -1
  138. package/dist/server/.next/static/chunks/847-ec9c92b94ad678e0.js +0 -1
  139. package/dist/server/.next/static/chunks/86b5e8830b67bd88.js.map +0 -1
  140. package/dist/server/.next/static/chunks/app/_not-found/page-95616ed7a70b84d7.js +0 -1
  141. package/dist/server/.next/static/chunks/app/_not-found/page-ba0969dacdea05f3.js +0 -1
  142. package/dist/server/.next/static/chunks/app/api/all-projects-envs/route-312524aaaaffe75e.js +0 -1
  143. package/dist/server/.next/static/chunks/app/api/all-projects-envs/route-4a1691275c5ae416.js +0 -1
  144. package/dist/server/.next/static/chunks/app/api/all-projects-envs/route-59998dcbe9d03177.js +0 -1
  145. package/dist/server/.next/static/chunks/app/api/all-projects-envs/route-70d14c8af28994db.js +0 -1
  146. package/dist/server/.next/static/chunks/app/api/all-projects-envs/route-cfa7e75a9cc44674.js +0 -1
  147. package/dist/server/.next/static/chunks/app/api/check-mock-intercept/route-207d5b6627adc282.js +0 -1
  148. package/dist/server/.next/static/chunks/app/api/check-mock-intercept/route-21db47c08229689f.js +0 -1
  149. package/dist/server/.next/static/chunks/app/api/check-mock-intercept/route-445157e82ef8e75b.js +0 -1
  150. package/dist/server/.next/static/chunks/app/api/check-mock-intercept/route-a14cdbb0879f7da6.js +0 -1
  151. package/dist/server/.next/static/chunks/app/api/check-mock-intercept/route-f2e048a9d229f7e7.js +0 -1
  152. package/dist/server/.next/static/chunks/app/api/check-workspace/route-29f5d718929ea780.js +0 -1
  153. package/dist/server/.next/static/chunks/app/api/check-workspace/route-3292111d9978949a.js +0 -1
  154. package/dist/server/.next/static/chunks/app/api/check-workspace/route-3569564cd2b09683.js +0 -1
  155. package/dist/server/.next/static/chunks/app/api/check-workspace/route-db1a504fc730c8dc.js +0 -1
  156. package/dist/server/.next/static/chunks/app/api/check-workspace/route-ea618578d55f6d3e.js +0 -1
  157. package/dist/server/.next/static/chunks/app/api/cleanup-mock/route-bbcac882e4f160cb.js +0 -1
  158. package/dist/server/.next/static/chunks/app/api/cleanup-project/route-16fdad40de98b440.js +0 -1
  159. package/dist/server/.next/static/chunks/app/api/cleanup-project/route-3bf856128b701bac.js +0 -1
  160. package/dist/server/.next/static/chunks/app/api/cleanup-project/route-a6c005b8a485a192.js +0 -1
  161. package/dist/server/.next/static/chunks/app/api/get-mock-data/route-0ff137f28b0bbfd4.js +0 -1
  162. package/dist/server/.next/static/chunks/app/api/get-mock-data/route-39e7fa4c6fa2da8f.js +0 -1
  163. package/dist/server/.next/static/chunks/app/api/get-mock-data/route-dc1cc7e42c23cc90.js +0 -1
  164. package/dist/server/.next/static/chunks/app/api/get-mock-data/route-e8c5eb5bfef356e4.js +0 -1
  165. package/dist/server/.next/static/chunks/app/api/get-mock-data/route-f674eb4d564fe302.js +0 -1
  166. package/dist/server/.next/static/chunks/app/api/initialize-workspace/route-202c20e85127f869.js +0 -1
  167. package/dist/server/.next/static/chunks/app/api/initialize-workspace/route-736e54e6ee59e3ce.js +0 -1
  168. package/dist/server/.next/static/chunks/app/api/initialize-workspace/route-7faec0a7a2e6383d.js +0 -1
  169. package/dist/server/.next/static/chunks/app/api/initialize-workspace/route-9cb53efb3778be70.js +0 -1
  170. package/dist/server/.next/static/chunks/app/api/initialize-workspace/route-a546e3abb74bc427.js +0 -1
  171. package/dist/server/.next/static/chunks/app/api/microapp-proxy-change-stream/route-219fff48736f39a4.js +0 -1
  172. package/dist/server/.next/static/chunks/app/api/microapp-proxy-change-stream/route-39d78899804e9b55.js +0 -1
  173. package/dist/server/.next/static/chunks/app/api/microapp-proxy-change-stream/route-81a2d573a6a5b3d9.js +0 -1
  174. package/dist/server/.next/static/chunks/app/api/microapp-proxy-change-stream/route-92fea0302ce9e17c.js +0 -1
  175. package/dist/server/.next/static/chunks/app/api/microapp-proxy-config/route-05c8c2aae5088b98.js +0 -1
  176. package/dist/server/.next/static/chunks/app/api/microapp-proxy-config/route-ad103dba19eb36c2.js +0 -1
  177. package/dist/server/.next/static/chunks/app/api/microapp-proxy-config/route-bda82800578d31a4.js +0 -1
  178. package/dist/server/.next/static/chunks/app/api/microapp-proxy-config/route-c98223a508d30485.js +0 -1
  179. package/dist/server/.next/static/chunks/app/api/microapp-proxy-config/route-e535c24ff110bccf.js +0 -1
  180. package/dist/server/.next/static/chunks/app/api/mock-file/route-457801bb0f6a76f5.js +0 -1
  181. package/dist/server/.next/static/chunks/app/api/mock-file/route-51694377ff9d7e5b.js +0 -1
  182. package/dist/server/.next/static/chunks/app/api/mock-file/route-606d825407e0fd4c.js +0 -1
  183. package/dist/server/.next/static/chunks/app/api/mock-file/route-a7322a0267bf30b2.js +0 -1
  184. package/dist/server/.next/static/chunks/app/api/mock-file/route-d8676439ef29db7c.js +0 -1
  185. package/dist/server/.next/static/chunks/app/api/mock-file-content/route-3b736acba2fc51fb.js +0 -1
  186. package/dist/server/.next/static/chunks/app/api/mock-file-content/route-4abdd46a628dfa45.js +0 -1
  187. package/dist/server/.next/static/chunks/app/api/mock-file-content/route-4bc78ec0cbed800a.js +0 -1
  188. package/dist/server/.next/static/chunks/app/api/mock-file-content/route-508f2755a233b154.js +0 -1
  189. package/dist/server/.next/static/chunks/app/api/mock-file-content/route-ed711cf05050ae4b.js +0 -1
  190. package/dist/server/.next/static/chunks/app/api/mock-open-status/route-2397a28b4e49887e.js +0 -1
  191. package/dist/server/.next/static/chunks/app/api/mock-open-status/route-7e4d9c8f09b286c3.js +0 -1
  192. package/dist/server/.next/static/chunks/app/api/mock-open-status/route-81148f608ccbb94c.js +0 -1
  193. package/dist/server/.next/static/chunks/app/api/mock-open-status/route-8c87291c773d3e77.js +0 -1
  194. package/dist/server/.next/static/chunks/app/api/mock-open-status/route-a9410ab77572cb9e.js +0 -1
  195. package/dist/server/.next/static/chunks/app/api/mock-setting/route-2f57558f61602b8d.js +0 -1
  196. package/dist/server/.next/static/chunks/app/api/mock-setting/route-34a6b89ca2fa264f.js +0 -1
  197. package/dist/server/.next/static/chunks/app/api/mock-setting/route-48cfb30a284d746d.js +0 -1
  198. package/dist/server/.next/static/chunks/app/api/mock-setting/route-93afc6add1edf9f2.js +0 -1
  199. package/dist/server/.next/static/chunks/app/api/mock-setting/route-fc5ad9735304a090.js +0 -1
  200. package/dist/server/.next/static/chunks/app/api/open-all-mock/route-57687ce93101e033.js +0 -1
  201. package/dist/server/.next/static/chunks/app/api/open-project/route-0f748b5bb9f5f133.js +0 -1
  202. package/dist/server/.next/static/chunks/app/api/open-project/route-28f8ff642f5256ac.js +0 -1
  203. package/dist/server/.next/static/chunks/app/api/open-project/route-33e8ebae3ec34cf6.js +0 -1
  204. package/dist/server/.next/static/chunks/app/api/open-project/route-b6e6fca6c827640d.js +0 -1
  205. package/dist/server/.next/static/chunks/app/api/open-project/route-dbd2412a4a395d57.js +0 -1
  206. package/dist/server/.next/static/chunks/app/api/process/logs/route-2dda16be53467324.js +0 -1
  207. package/dist/server/.next/static/chunks/app/api/process/logs/route-3d9ee52d7c8aacef.js +0 -1
  208. package/dist/server/.next/static/chunks/app/api/process/logs/stream/route-e3aa80178b56d92e.js +0 -1
  209. package/dist/server/.next/static/chunks/app/api/process/logs/stream/route-e9633e0e72dfb31b.js +0 -1
  210. package/dist/server/.next/static/chunks/app/api/process/start/route-4fe85c59a6cf5d14.js +0 -1
  211. package/dist/server/.next/static/chunks/app/api/process/start/route-54c553f9e551d14b.js +0 -1
  212. package/dist/server/.next/static/chunks/app/api/process/status/route-06151b6ca21ffd52.js +0 -1
  213. package/dist/server/.next/static/chunks/app/api/process/status/route-9dadfb92dd227115.js +0 -1
  214. package/dist/server/.next/static/chunks/app/api/project-config/route-0317b7b8279f882c.js +0 -1
  215. package/dist/server/.next/static/chunks/app/api/project-config/route-0d5799a7d2a92f24.js +0 -1
  216. package/dist/server/.next/static/chunks/app/api/project-config/route-52a76cdb81639dcd.js +0 -1
  217. package/dist/server/.next/static/chunks/app/api/project-config/route-870fae74c20ad5cc.js +0 -1
  218. package/dist/server/.next/static/chunks/app/api/project-config/route-ebe1c2ee41dedc74.js +0 -1
  219. package/dist/server/.next/static/chunks/app/api/retry-project/route-1672c3841762e7a2.js +0 -1
  220. package/dist/server/.next/static/chunks/app/api/retry-project/route-57227158a21c503e.js +0 -1
  221. package/dist/server/.next/static/chunks/app/api/retry-project/route-887b04ae65e577ee.js +0 -1
  222. package/dist/server/.next/static/chunks/app/api/retry-project/route-c25d253b5eacedef.js +0 -1
  223. package/dist/server/.next/static/chunks/app/api/retry-project/route-ed8eb5f938cd3503.js +0 -1
  224. package/dist/server/.next/static/chunks/app/configuration/page-40c4eaee20608a71.js +0 -1
  225. package/dist/server/.next/static/chunks/app/configuration/page-68644ad1d0dbda4f.js +0 -1
  226. package/dist/server/.next/static/chunks/app/configuration/page-978351fa7fe07983.js +0 -1
  227. package/dist/server/.next/static/chunks/app/configuration/page-c873f4a20842fe9f.js +0 -1
  228. package/dist/server/.next/static/chunks/app/configuration/page-de2896125aeef266.js +0 -1
  229. package/dist/server/.next/static/chunks/app/initialization/page-2937c3ff149f25f9.js +0 -1
  230. package/dist/server/.next/static/chunks/app/initialization/page-9c8eb31c4b362777.js +0 -1
  231. package/dist/server/.next/static/chunks/app/initialization/page-d107335a70a6aa9a.js +0 -1
  232. package/dist/server/.next/static/chunks/app/layout-2c381be4c1bb73ed.js +0 -1
  233. package/dist/server/.next/static/chunks/app/layout-84c22b799284e008.js +0 -1
  234. package/dist/server/.next/static/chunks/app/layout-882f4e368aeaff73.js +0 -1
  235. package/dist/server/.next/static/chunks/app/page-46b160ccc2d2f6fd.js +0 -1
  236. package/dist/server/.next/static/chunks/app/page-7a16585bfada96fc.js +0 -1
  237. package/dist/server/.next/static/chunks/app/page-7ad3377c8cadf31e.js +0 -1
  238. package/dist/server/.next/static/chunks/app/page-912f1af8f4bd1f6c.js +0 -1
  239. package/dist/server/.next/static/chunks/app/page-9ce2b4651df441b0.js +0 -1
  240. package/dist/server/.next/static/chunks/app/page-9e7caf746eefeed4.js +0 -1
  241. package/dist/server/.next/static/chunks/b8f30182-57e8efeaf5f155f2.js +0 -1
  242. package/dist/server/.next/static/chunks/b8f30182-a6d2a523c696fa81.js +0 -1
  243. package/dist/server/.next/static/chunks/da35f4984aadc7ee.css +0 -3
  244. package/dist/server/.next/static/chunks/fc31ec097889736e.js +0 -61
  245. package/dist/server/.next/static/chunks/framework-4f3c796c070f0605.js +0 -1
  246. package/dist/server/.next/static/chunks/main-5057d359c86395ff.js +0 -1
  247. package/dist/server/.next/static/chunks/main-app-0672b5550b5e5a29.js +0 -1
  248. package/dist/server/.next/static/chunks/main-app-204ad1b9f48b1359.js +0 -1
  249. package/dist/server/.next/static/chunks/pages/_app-3679013cc4e97ce6.js +0 -1
  250. package/dist/server/.next/static/chunks/pages/_error-0822a2d0b86fca98.js +0 -1
  251. package/dist/server/.next/static/chunks/polyfills-42372ed130431b0a.js +0 -1
  252. package/dist/server/.next/static/chunks/webpack-c15acc5db8adea14.js +0 -1
  253. package/dist/server/.next/static/chunks/webpack-d5f30c51b0af95c2.js +0 -1
  254. package/dist/server/.next/static/chunks/webpack-e34e044e63e0dcd2.js +0 -1
  255. package/dist/server/.next/static/css/1c3633790ce12b77.css +0 -3
  256. package/dist/server/.next/static/css/6393282fdcf30b00.css +0 -3
  257. package/dist/server/.next/static/css/99c159237be93dc6.css +0 -1
  258. package/dist/server/.next/static/css/b10a602544a179de.css +0 -3
  259. package/dist/server/.next/static/css/deb8e469bf5e7676.css +0 -3
  260. package/dist/server/.next/static/ctEn8UHYZESgGhsRFLpGu/_buildManifest.js +0 -1
  261. package/dist/server/.next/static/ctEn8UHYZESgGhsRFLpGu/_ssgManifest.js +0 -1
  262. package/dist/server/.next/static/jdnaR1jA-uiriPQs5tK55/_buildManifest.js +0 -1
  263. package/dist/server/.next/static/jdnaR1jA-uiriPQs5tK55/_ssgManifest.js +0 -1
  264. package/dist/server/.next/static/media/569ce4b8f30dc480-s.p.woff2 +0 -0
  265. package/dist/server/.next/static/media/747892c23ea88013-s.woff2 +0 -0
  266. package/dist/server/.next/static/media/8d697b304b401681-s.woff2 +0 -0
  267. package/dist/server/.next/static/media/93f479601ee12b01-s.p.woff2 +0 -0
  268. package/dist/server/.next/static/media/9610d9e46709d722-s.woff2 +0 -0
  269. package/dist/server/.next/static/media/ba015fad6dcf6784-s.woff2 +0 -0
  270. package/dist/server/.next/static/qPRyAah5ijpk6JBI-hD27/_buildManifest.js +0 -1
  271. package/dist/server/.next/static/qPRyAah5ijpk6JBI-hD27/_clientMiddlewareManifest.json +0 -1
  272. package/dist/server/.next/static/qPRyAah5ijpk6JBI-hD27/_ssgManifest.js +0 -1
  273. package/dist/server/.next/static/stSAKws68akBgeDAAHOBI/_buildManifest.js +0 -1
  274. package/dist/server/.next/static/stSAKws68akBgeDAAHOBI/_ssgManifest.js +0 -1
  275. package/dist/server/.next/static/tATlS048MJsMzIVQDTgrk/_buildManifest.js +0 -1
  276. package/dist/server/.next/static/tATlS048MJsMzIVQDTgrk/_ssgManifest.js +0 -1
  277. package/dist/server/.next/types/app/api/all-projects-envs/route.ts +0 -347
  278. package/dist/server/.next/types/app/api/check-mock-intercept/route.ts +0 -347
  279. package/dist/server/.next/types/app/api/check-workspace/route.ts +0 -347
  280. package/dist/server/.next/types/app/api/cleanup-mock/route.ts +0 -347
  281. package/dist/server/.next/types/app/api/cleanup-project/route.ts +0 -347
  282. package/dist/server/.next/types/app/api/get-mock-data/route.ts +0 -347
  283. package/dist/server/.next/types/app/api/initialize-workspace/route.ts +0 -347
  284. package/dist/server/.next/types/app/api/microapp-proxy-change-stream/route.ts +0 -347
  285. package/dist/server/.next/types/app/api/microapp-proxy-config/route.ts +0 -347
  286. package/dist/server/.next/types/app/api/mock-file/route.ts +0 -347
  287. package/dist/server/.next/types/app/api/mock-file-content/route.ts +0 -347
  288. package/dist/server/.next/types/app/api/mock-open-status/route.ts +0 -347
  289. package/dist/server/.next/types/app/api/mock-setting/route.ts +0 -347
  290. package/dist/server/.next/types/app/api/open-all-mock/route.ts +0 -347
  291. package/dist/server/.next/types/app/api/open-project/route.ts +0 -347
  292. package/dist/server/.next/types/app/api/process/logs/route.ts +0 -347
  293. package/dist/server/.next/types/app/api/process/logs/stream/route.ts +0 -347
  294. package/dist/server/.next/types/app/api/process/start/route.ts +0 -347
  295. package/dist/server/.next/types/app/api/process/status/route.ts +0 -347
  296. package/dist/server/.next/types/app/api/project-config/route.ts +0 -347
  297. package/dist/server/.next/types/app/api/retry-project/route.ts +0 -347
  298. package/dist/server/.next/types/app/configuration/page.ts +0 -84
  299. package/dist/server/.next/types/app/initialization/page.ts +0 -84
  300. package/dist/server/.next/types/app/layout.ts +0 -84
  301. package/dist/server/.next/types/app/page.ts +0 -84
  302. package/dist/server/.next/types/cache-life.d.ts +0 -141
  303. package/dist/server/.next/types/package.json +0 -1
  304. /package/dist/server/.next/static/{CcPdKvbUmZBYZz_Z0RQOI → DiL7txnLfsR2XvLBEz06H}/_buildManifest.js +0 -0
  305. /package/dist/server/.next/static/{CcPdKvbUmZBYZz_Z0RQOI → DiL7txnLfsR2XvLBEz06H}/_clientMiddlewareManifest.json +0 -0
  306. /package/dist/server/.next/static/{0L93NbbowsMpjl-fJPWIj → DiL7txnLfsR2XvLBEz06H}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[823],{6162:(e,t,s)=>{"use strict";s.d(t,{cn:()=>r});var a=s(4407),n=s(1467);function r(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];return(0,n.QP)((0,a.$)(t))}},7541:(e,t,s)=>{"use strict";s.d(t,{$:()=>l});var a=s(5167);s(6343);var n=s(7775),r=s(2703),c=s(6162);let i=(0,r.F)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",destructive:"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9"}},defaultVariants:{variant:"default",size:"default"}});function l(e){let{className:t,variant:s,size:r,asChild:l=!1,...o}=e,d=l?n.DX:"button";return(0,a.jsx)(d,{"data-slot":"button",className:(0,c.cn)(i({variant:s,size:r,className:t})),...o})}},8851:(e,t,s)=>{Promise.resolve().then(s.bind(s,9510))},9510:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>W});var a=s(5167),n=s(6343),r=s(1349),c=s(7541),i=s(405),l=s(6162);function o(e){let{className:t,...s}=e;return(0,a.jsx)(i.bL,{"data-slot":"tabs",className:(0,l.cn)("flex flex-col gap-2",t),...s})}function d(e){let{className:t,...s}=e;return(0,a.jsx)(i.B8,{"data-slot":"tabs-list",className:(0,l.cn)("bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]",t),...s})}function m(e){let{className:t,...s}=e;return(0,a.jsx)(i.l9,{"data-slot":"tabs-trigger",className:(0,l.cn)("data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...s})}function u(e){let{className:t,...s}=e;return(0,a.jsx)(i.UC,{"data-slot":"tabs-content",className:(0,l.cn)("flex-1 outline-none",t),...s})}var x=s(6421),h=s(7151),p=s(5211),g=s(9926);function f(e){let{...t}=e;return(0,a.jsx)(x.bL,{"data-slot":"select",...t})}function j(e){let{...t}=e;return(0,a.jsx)(x.WT,{"data-slot":"select-value",...t})}function v(e){let{className:t,size:s="default",children:n,...r}=e;return(0,a.jsxs)(x.l9,{"data-slot":"select-trigger","data-size":s,className:(0,l.cn)("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...r,children:[n,(0,a.jsx)(x.In,{asChild:!0,children:(0,a.jsx)(h.A,{className:"size-4 opacity-50"})})]})}function b(e){let{className:t,children:s,position:n="popper",...r}=e;return(0,a.jsx)(x.ZL,{children:(0,a.jsxs)(x.UC,{"data-slot":"select-content",className:(0,l.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md","popper"===n&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",t),position:n,...r,children:[(0,a.jsx)(y,{}),(0,a.jsx)(x.LM,{className:(0,l.cn)("p-1","popper"===n&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:s}),(0,a.jsx)(k,{})]})})}function N(e){let{className:t,children:s,...n}=e;return(0,a.jsxs)(x.q7,{"data-slot":"select-item",className:(0,l.cn)("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",t),...n,children:[(0,a.jsx)("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:(0,a.jsx)(x.VF,{children:(0,a.jsx)(p.A,{className:"size-4"})})}),(0,a.jsx)(x.p4,{children:s})]})}function y(e){let{className:t,...s}=e;return(0,a.jsx)(x.PP,{"data-slot":"select-scroll-up-button",className:(0,l.cn)("flex cursor-default items-center justify-center py-1",t),...s,children:(0,a.jsx)(g.A,{className:"size-4"})})}function k(e){let{className:t,...s}=e;return(0,a.jsx)(x.wn,{"data-slot":"select-scroll-down-button",className:(0,l.cn)("flex cursor-default items-center justify-center py-1",t),...s,children:(0,a.jsx)(h.A,{className:"size-4"})})}function w(e){let{className:t,type:s,...n}=e;return(0,a.jsx)("input",{type:s,"data-slot":"input",className:(0,l.cn)("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",t),...n})}var C=s(8700);function S(e){let{className:t,...s}=e;return(0,a.jsx)(C.b,{"data-slot":"label",className:(0,l.cn)("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",t),...s})}var E=s(7394);function P(e){let{className:t,...s}=e;return(0,a.jsx)(E.bL,{"data-slot":"switch",className:(0,l.cn)("peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",t),...s,children:(0,a.jsx)(E.zi,{"data-slot":"switch-thumb",className:(0,l.cn)("bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0")})})}function M(e){let{className:t,...s}=e;return(0,a.jsx)("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:(0,a.jsx)("table",{"data-slot":"table",className:(0,l.cn)("w-full caption-bottom text-sm",t),...s})})}function O(e){let{className:t,...s}=e;return(0,a.jsx)("thead",{"data-slot":"table-header",className:(0,l.cn)("[&_tr]:border-b",t),...s})}function T(e){let{className:t,...s}=e;return(0,a.jsx)("tbody",{"data-slot":"table-body",className:(0,l.cn)("[&_tr:last-child]:border-0",t),...s})}function z(e){let{className:t,...s}=e;return(0,a.jsx)("tr",{"data-slot":"table-row",className:(0,l.cn)("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",t),...s})}function L(e){let{className:t,...s}=e;return(0,a.jsx)("th",{"data-slot":"table-head",className:(0,l.cn)("text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",t),...s})}function U(e){let{className:t,...s}=e;return(0,a.jsx)("td",{"data-slot":"table-cell",className:(0,l.cn)("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",t),...s})}var _=s(1966),I=s(4279);function $(e){let{...t}=e;return(0,a.jsx)(_.bL,{"data-slot":"dialog",...t})}function A(e){let{...t}=e;return(0,a.jsx)(_.ZL,{"data-slot":"dialog-portal",...t})}function F(e){let{className:t,...s}=e;return(0,a.jsx)(_.hJ,{"data-slot":"dialog-overlay",className:(0,l.cn)("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",t),...s})}function R(e){let{className:t,children:s,showCloseButton:n=!0,...r}=e;return(0,a.jsxs)(A,{"data-slot":"dialog-portal",children:[(0,a.jsx)(F,{}),(0,a.jsxs)(_.UC,{"data-slot":"dialog-content",className:(0,l.cn)("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200",t),...r,children:[s,n&&(0,a.jsxs)(_.bm,{"data-slot":"dialog-close",className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[(0,a.jsx)(I.A,{}),(0,a.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function G(e){let{className:t,...s}=e;return(0,a.jsx)("div",{"data-slot":"dialog-header",className:(0,l.cn)("flex flex-col gap-2 text-center sm:text-left",t),...s})}function D(e){let{className:t,...s}=e;return(0,a.jsx)("div",{"data-slot":"dialog-footer",className:(0,l.cn)("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",t),...s})}function J(e){let{className:t,...s}=e;return(0,a.jsx)(_.hE,{"data-slot":"dialog-title",className:(0,l.cn)("text-lg leading-none font-semibold",t),...s})}function V(e){let{className:t,...s}=e;return(0,a.jsx)(_.VY,{"data-slot":"dialog-description",className:(0,l.cn)("text-muted-foreground text-sm",t),...s})}var H=s(4064);function q(e){let{className:t,currentProjectName:s,currentEnvName:r}=e,[i,l]=(0,n.useState)([]),[o,d]=(0,n.useState)(!0),[m,u]=(0,n.useState)(null),[x,h]=(0,n.useState)(new Set),[p,g]=(0,n.useState)(""),[f,j]=(0,n.useState)(!1),[v,b]=(0,n.useState)(""),[N,y]=(0,n.useState)(!1),[k,C]=(0,n.useState)(null),S=(0,n.useRef)(null);(0,n.useEffect)(()=>{if(i.length>0){let e=i.find(e=>e.projectName===s&&e.envName===r);if(e&&e.subApps.length>0){let t=new Set;e.subApps.forEach(e=>{i.forEach(s=>{s.envName===e&&t.add($(s))})}),h(t)}}},[i,s,r]);let E=async()=>{d(!0),u(null);try{let e=await fetch("/api/all-projects-envs"),t=await e.json();t.success?l(t.data):u(t.error||"获取项目环境信息失败")}catch(e){console.error("获取项目环境信息失败:",e),u("获取项目环境信息失败: 网络错误")}finally{d(!1)}};(0,n.useEffect)(()=>(E(),P(),()=>{_()}),[r]);let P=()=>{S.current&&_();let e="microapp-table-".concat(Date.now(),"-").concat(Math.random().toString(36).substr(2,9)),t="/api/microapp-proxy-change-stream?env=".concat(encodeURIComponent(r),"&clientId=").concat(encodeURIComponent(e));console.log("[SSE] 建立连接到: ".concat(t)),C(null);try{let e=new EventSource(t);S.current=e,e.onopen=()=>{console.log("[SSE] 连接已建立,环境: ".concat(r)),y(!0),C(null)},e.onmessage=e=>{try{let t=JSON.parse(e.data);I(t)}catch(e){console.error("[SSE] 解析消息失败:",e)}},e.onerror=()=>{console.error("[SSE] 连接错误,环境: ".concat(r)),y(!1),C("实时推送连接断开"),setTimeout(()=>{S.current&&S.current.readyState!==EventSource.CLOSED||(console.log("[SSE] 尝试重新连接..."),P())},3e3)}}catch(e){console.error("[SSE] 建立连接失败:",e),C("无法建立实时推送连接")}},_=()=>{S.current&&(console.log("[SSE] 关闭连接"),S.current.close(),S.current=null,y(!1))},I=e=>{switch(console.log("[SSE] 收到消息:",e),e.type){case"connection-established":console.log("[SSE] 连接确认: ".concat(e.message)),y(!0),C(null);break;case"microapp-proxy-config-change":if(console.log("[SSE] 配置变化通知: 环境=".concat(e.envName)),console.log("[SSE] 变化详情:",e.changes),e.changes){let{added:t,removed:s}=e.changes,a="";t.length>0&&(a+="新增: ".concat(t.join(", "))),s.length>0&&(a&&(a+="; "),a+="移除: ".concat(s.join(", "))),b("配置已更新 (".concat(a,")"))}else b("配置已更新");E(),setTimeout(()=>b(""),3e3);break;case"heartbeat":y(!0),C(null);break;default:console.log("[SSE] 未知消息类型:",e.type)}},$=e=>"".concat(e.projectName,"-").concat(e.envName),A=p.trim()?i.filter(e=>e.projectName.toLowerCase().includes(p.toLowerCase())||e.envName.toLowerCase().includes(p.toLowerCase())||e.host.toLowerCase().includes(p.toLowerCase())):i,F=(e,t)=>{let s=new Set(x);t?s.add(e):s.delete(e),h(s)},R=e=>{e?h(new Set(A.map(e=>$(e)))):h(new Set)},G=async()=>{j(!0),b("");try{let e=Array.from(x).map(e=>{let t=i.find(t=>$(t)===e);return t?t.envName:""}).filter(e=>""!==e),t=[...new Set(e)],a=await fetch("/api/microapp-proxy-config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s,envName:r,selectedItems:t})}),n=await a.json();n.success?(b(n.message||"保存成功"),await E()):b("保存失败: ".concat(n.error))}catch(e){console.error("保存MicroApp代理配置失败:",e),b("保存失败: 网络错误")}finally{j(!1),setTimeout(()=>{b("")},5e3)}},D=x.size,J=A.length>0&&A.every(e=>x.has($(e))),V=A.some(e=>x.has($(e)));return o?(0,a.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg ".concat(t),children:[(0,a.jsx)("h4",{className:"text-md font-medium mb-4",children:"MicroApp代理配置"}),(0,a.jsx)("div",{className:"text-center py-8",children:(0,a.jsx)("p",{className:"text-gray-500",children:"加载中..."})})]}):m?(0,a.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg ".concat(t),children:[(0,a.jsx)("h4",{className:"text-md font-medium mb-4",children:"MicroApp代理配置"}),(0,a.jsxs)("div",{className:"text-center py-8",children:[(0,a.jsx)("p",{className:"text-red-500",children:m}),(0,a.jsx)(c.$,{variant:"outline",size:"sm",onClick:E,className:"mt-2",children:"重试"})]})]}):(0,a.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg ".concat(t),children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h4",{className:"text-md font-medium",children:"MicroApp代理配置"}),(0,a.jsxs)("p",{className:"text-xs text-gray-500 mt-1",children:["为 ",s," - ",r," 环境配置微应用代理"]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)("div",{className:"flex items-center gap-1",children:[(0,a.jsx)("div",{className:"w-2 h-2 rounded-full ".concat(N?"bg-green-500":"bg-red-500"),title:N?"实时推送已连接":"实时推送断开"}),(0,a.jsx)("span",{className:"text-xs text-gray-500",children:N?"实时":"离线"})]}),(v||k)&&(0,a.jsx)("span",{className:"text-sm max-w-xs ".concat(v&&v.includes("失败")||k?"text-red-600":v&&v.includes("但有")?"text-yellow-600":"text-green-600"),title:v||k||"",children:v||k}),(0,a.jsx)(c.$,{variant:"outline",size:"sm",onClick:E,disabled:f,children:"刷新"}),(0,a.jsx)(c.$,{variant:"default",size:"sm",onClick:G,disabled:f,children:f?"保存中...":"保存配置"})]})]}),(0,a.jsxs)("div",{className:"space-y-3 mb-4",children:[(0,a.jsx)("div",{className:"flex items-center gap-2",children:(0,a.jsxs)("div",{className:"relative flex-1 max-w-md",children:[(0,a.jsx)(w,{placeholder:"搜索项目名称、环境名称或Host...",value:p,onChange:e=>g(e.target.value),className:"pr-8"}),p&&(0,a.jsx)(c.$,{variant:"ghost",size:"sm",onClick:()=>{g("")},className:"absolute right-1 top-1/2 transform -translate-y-1/2 h-6 w-6 p-0 hover:bg-gray-100",children:"\xd7"})]})}),(0,a.jsxs)("div",{className:"flex items-center justify-between text-sm text-gray-600",children:[(0,a.jsxs)("div",{className:"flex items-center gap-4",children:[(0,a.jsxs)("span",{children:["显示 ",A.length," 个环境配置",p&&' (搜索: "'.concat(p,'")')]}),D>0&&(0,a.jsxs)("span",{className:"text-blue-600 font-medium",children:["已选择 ",D," 项"]})]}),D>0&&(0,a.jsx)(c.$,{variant:"outline",size:"sm",onClick:()=>{h(new Set)},children:"清空选择"})]})]}),A.length>0?(0,a.jsx)("div",{className:"border rounded-md",children:(0,a.jsxs)(M,{children:[(0,a.jsx)(O,{children:(0,a.jsxs)(z,{children:[(0,a.jsx)(L,{className:"w-12",children:(0,a.jsx)("input",{type:"checkbox",checked:J,onChange:e=>R(e.target.checked),ref:e=>{e&&(e.indeterminate=V&&!J)},className:"rounded border-gray-300"})}),(0,a.jsx)(L,{children:"环境名称"}),(0,a.jsx)(L,{children:"项目名称"}),(0,a.jsx)(L,{children:"Host地址"}),(0,a.jsx)(L,{children:"当前代理"})]})}),(0,a.jsx)(T,{children:A.map(e=>{let t=$(e),s=x.has(t);return(0,a.jsxs)(z,{children:[(0,a.jsx)(U,{children:(0,a.jsx)("input",{type:"checkbox",checked:s,onChange:e=>F(t,e.target.checked),className:"rounded border-gray-300"})}),(0,a.jsx)(U,{children:(0,a.jsx)("span",{className:"px-2 py-1 rounded text-xs font-medium bg-blue-100 text-blue-800",children:e.envName})}),(0,a.jsx)(U,{className:"font-medium",children:e.projectName}),(0,a.jsx)(U,{className:"font-mono text-sm",children:e.host}),(0,a.jsxs)(U,{className:"text-sm text-gray-600",children:[e.currentProxy,e.proxyEnv[e.currentProxy]&&(0,a.jsx)("div",{className:"text-xs text-gray-500",children:e.proxyEnv[e.currentProxy]})]})]},t)})})]})}):(0,a.jsx)("div",{className:"text-center py-8",children:(0,a.jsx)("p",{className:"text-gray-500",children:p?"没有找到匹配的环境配置":"暂无环境配置"})}),D>0&&(0,a.jsx)("div",{className:"mt-4 p-3 bg-blue-50 rounded-md",children:(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("span",{className:"text-sm text-blue-700",children:["已选择 ",D," 个环境配置将作为微应用代理"]}),(0,a.jsx)("span",{className:"text-xs text-blue-600",children:"点击上方“保存配置”按钮保存设置"})]})})]})}var B=function(e){return e.PENDING="pending",e.EXISTING="existing",e.CLONING="cloning",e.SUCCESS="success",e.FAILED="failed",e.RETRYING="retrying",e}(B||{});function K(){let e=(0,r.useSearchParams)(),t=(0,r.useRouter)(),s=e.get("project"),[i,l]=(0,n.useState)(null),[x,h]=(0,n.useState)(!0),[p,g]=(0,n.useState)(null),[y,k]=(0,n.useState)({}),[C,E]=(0,n.useState)({mockingIntercept:!1,mockOpen:!1}),[_,I]=(0,n.useState)(!1),[A,F]=(0,n.useState)(null),[B,K]=(0,n.useState)(!1),[W,X]=(0,n.useState)(1),[Y]=(0,n.useState)(10),[Z,Q]=(0,n.useState)(""),[ee,et]=(0,n.useState)(null),[es,ea]=(0,n.useState)(!1),[en,er]=(0,n.useState)(!1),[ec,ei]=(0,n.useState)(!1),[el,eo]=(0,n.useState)(!0),[ed,em]=(0,n.useState)(null),[eu,ex]=(0,n.useState)([]),[eh,ep]=(0,n.useState)(!1),[eg,ef]=(0,n.useState)(!1),[ej,ev]=(0,n.useState)(!1),[eb,eN]=(0,n.useState)({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0}),[ey,ek]=(0,n.useState)(null),[ew,eC]=(0,n.useState)(!1),[eS,eE]=(0,n.useState)(""),eP=async()=>{ed&&await eO(ed)},eM=async e=>{es&&(e.metaKey||e.ctrlKey)&&"s"===e.key&&(e.preventDefault(),await eP())};(0,n.useEffect)(()=>{if(es)return document.addEventListener("keydown",eM),()=>{document.removeEventListener("keydown",eM)}},[es,ed]);let eO=async e=>{try{await new Promise(e=>setTimeout(e,200));let s=e.getModel();if(s){var t;await (null==(t=e.getAction("editor.action.formatDocument"))?void 0:t.run());let a=s.getValue();if(a&&!a.includes("\n")&&a.length>50){let t=a.replace(/\{\s*/g,"{\n ").replace(/\}\s*/g,"\n}").replace(/;\s*/g,";\n ").replace(/,\s*/g,",\n ").replace(/\n\s*\n/g,"\n").trim();t!==a&&(s.setValue(t),setTimeout(()=>{var t;null==(t=e.getAction("editor.action.formatDocument"))||t.run()},100))}}}catch(e){console.log("自动格式化失败:",e)}},eT=()=>{t.push("/initialization")},ez=async()=>{ep(!0);try{let e=await fetch("/api/check-workspace"),t=await e.json();if(t.success&&t.projects){let e=t.projects.map(e=>({name:e.name,status:e.status,message:e.message}));ex(e)}else console.error("获取项目列表失败:",t.error),ex([])}catch(e){console.error("获取项目列表失败:",e),ex([])}finally{ep(!1)}},eL=async()=>{if(s){I(!0);try{let e=await fetch("/api/open-project",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s})}),t=await e.json();t.success||(console.error("打开项目失败:",t.error),alert("打开项目失败: ".concat(t.error)))}catch(e){console.error("打开项目失败:",e),alert("打开项目失败: 网络错误")}finally{I(!1)}}};(0,n.useEffect)(()=>{if(!s){g("项目名称缺失"),h(!1);return}(async()=>{try{let e=await fetch("/api/project-config?project=".concat(encodeURIComponent(s))),t=await e.json();if(t.success){l(t.data);let e={};Object.keys(t.data.envs).forEach(s=>{let a=t.data.envs[s],n="";n=a.proxyEnv[a.currentProxy]?a.proxyEnv[a.currentProxy]:a.currentProxy;let r="";r=a.proxyEnv[a.currentProxy]?a.currentProxy:"custom",e[s]={selectedProxy:n||"",selectedOption:r}}),k(e),E({mockingIntercept:t.data.mockingIntercept||!1,mockOpen:t.data.mockOpen||!1})}else g(t.error)}catch(e){g("获取项目配置失败"),console.error("获取项目配置失败:",e)}finally{h(!1)}})()},[s]),(0,n.useEffect)(()=>{if(i&&s){let e=Object.keys(i.envs),t=new URLSearchParams(window.location.search).get("tab"),s="";(s=Z&&("mock"===Z||e.includes(Z))?Z:t&&("mock"===t||e.includes(t))?t:e.length>0?e[0]:"mock")!==Z&&(Q(s),"mock"===s&&eF())}},[i,s]),(0,n.useEffect)(()=>{ez()},[]);let eU=(e,t)=>{if(!i)return;let s=i.envs[e],a="";if("custom"===t){var n,r;a=(null==(n=y[e])?void 0:n.selectedOption)==="custom"?(null==(r=y[e])?void 0:r.selectedProxy)||"":s.proxyEnv.custom||""}else a=s.proxyEnv[t]||"";k(s=>({...s,[e]:{...s[e],selectedProxy:a,selectedOption:t,saveMessage:""}}))},e_=(e,t)=>{k(s=>({...s,[e]:{...s[e],selectedProxy:t,saveMessage:""}}))},eI=async e=>{E(t=>({...t,mockingIntercept:e,saving:!0,saveMessage:""}));try{let t=await fetch("/api/project-config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s,projectConfig:{mockingIntercept:e,mockOpen:C.mockOpen}})}),a=await t.json();if(a.success)l(t=>t?{...t,mockingIntercept:e}:t),E(e=>({...e,saving:!1,saveMessage:"Mock拦截配置已保存"})),setTimeout(()=>{E(e=>({...e,saveMessage:""}))},2e3);else throw Error(a.error||"保存失败")}catch(t){console.error("保存Mock拦截配置失败:",t),E(s=>({...s,mockingIntercept:!e,saving:!1,saveMessage:"保存失败: ".concat(t instanceof Error?t.message:"未知错误")})),setTimeout(()=>{E(e=>({...e,saveMessage:""}))},3e3)}},e$=async e=>{E(t=>({...t,mockOpen:e,saving:!0,saveMessage:""}));try{let t=await fetch("/api/project-config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s,projectConfig:{mockingIntercept:C.mockingIntercept,mockOpen:e}})}),a=await t.json();if(a.success)l(t=>t?{...t,mockOpen:e}:t),E(e=>({...e,saving:!1,saveMessage:"Mock开启配置已保存"})),setTimeout(()=>{E(e=>({...e,saveMessage:""}))},2e3);else throw Error(a.error||"保存失败")}catch(t){console.error("保存Mock开启配置失败:",t),E(s=>({...s,mockOpen:!e,saving:!1,saveMessage:"保存失败: ".concat(t instanceof Error?t.message:"未知错误")})),setTimeout(()=>{E(e=>({...e,saveMessage:""}))},3e3)}},eA=async e=>{var t,a;if(!i||!s)return;let n=null==(a=y[e])||null==(t=a.selectedProxy)?void 0:t.trim();if(!n)return void k(t=>({...t,[e]:{...t[e],saveMessage:"请先选择或填写代理地址"}}));let r=i.envs[e],c=!Object.values(r.proxyEnv).includes(n);k(t=>({...t,[e]:{...t[e],saving:!0,saveMessage:""}}));try{let t={projectName:s,envName:e,newProxy:c?"custom":Object.keys(r.proxyEnv).find(e=>r.proxyEnv[e]===n)||""};c&&(t.customProxyUrl=n);let a=await fetch("/api/project-config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),i=await a.json();i.success?(l(t=>{if(!t)return t;let s={...t.envs};return s[e]={...s[e],currentProxy:i.data.currentProxy},"custom"===i.data.currentProxy&&(s[e].proxyEnv={...s[e].proxyEnv,custom:n}),{...t,envs:s}}),k(t=>({...t,[e]:{...t[e],saving:!1,saveMessage:"保存成功"}}))):k(t=>({...t,[e]:{...t[e],saving:!1,saveMessage:"保存失败: ".concat(i.error)}}))}catch(t){console.error("保存配置失败:",t),k(t=>({...t,[e]:{...t[e],saving:!1,saveMessage:"保存失败: 网络错误"}}))}},eF=async()=>{if(s){K(!0);try{let e=await fetch("/api/mock-file?project=".concat(encodeURIComponent(s))),t=await e.json();t.success?F(t.data):console.error("获取Mock数据失败:",t.error)}catch(e){console.error("获取Mock数据失败:",e)}finally{K(!1)}}},eR=async(e,t,a)=>{if(s)try{let n=await fetch("/api/mock-setting",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s,apiName:e,method:t,currentSite:a})}),r=await n.json();r.success?F(s=>s?{...s,mockFiles:s.mockFiles.map(s=>s.apiName===e?{...s,methods:s.methods.map(e=>e.method===t?{...e,setting:{...e.setting,currentSite:a}}:e)}:s)}:s):(console.error("更新场景失败:",r.error),alert("更新场景失败: ".concat(r.error)))}catch(e){console.error("更新场景失败:",e),alert("更新场景失败: 网络错误")}},eG=async(e,t,a)=>{if(s){er(!0),eo(!0);try{let n=await fetch("/api/mock-file-content?project=".concat(encodeURIComponent(s),"&apiName=").concat(encodeURIComponent(e),"&method=").concat(encodeURIComponent(t),"&siteName=").concat(encodeURIComponent(a))),r=await n.json();r.success?(et({projectName:s,apiName:e,method:t,siteName:a,content:r.data.content}),ea(!0)):(console.error("获取文件内容失败:",r.error),alert("获取文件内容失败: ".concat(r.error)))}catch(e){console.error("获取文件内容失败:",e),alert("获取文件内容失败: 网络错误")}finally{er(!1)}}},eD=async()=>{if(ee){ei(!0);try{let e=await fetch("/api/mock-file-content",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(ee)}),t=await e.json();t.success?(ea(!1),et(null)):(console.error("保存文件失败:",t.error),alert("保存文件失败: ".concat(t.error)))}catch(e){console.error("保存文件失败:",e),alert("保存文件失败: 网络错误")}finally{ei(!1)}}},eJ=()=>{ea(!1),et(null),eo(!0)},eV=(e,t)=>{"siteName"===e&&eg||eN(s=>({...s,[e]:t}))},eH=(e,t)=>{let s=e.toUpperCase(),a=t.replace(/\//g,"_").replace(/^_/,"");switch(s){case"GET":return'module.exports = {\n "code": 200,\n "message": "获取'.concat(a,'成功",\n "data": {\n "id": 1,\n "name": "示例数据",\n "status": "active",\n "createTime": "2024-01-01 12:00:00"\n }\n}');case"POST":return'module.exports = {\n "code": 200,\n "message": "创建'.concat(a,'成功",\n "data": {\n "id": 1,\n "result": "success"\n }\n}');case"PUT":return'module.exports = {\n "code": 200,\n "message": "更新'.concat(a,'成功",\n "data": {\n "result": "success"\n }\n}');case"DELETE":return'module.exports = {\n "code": 200,\n "message": "删除'.concat(a,'成功",\n "data": {\n "result": "success"\n }\n}');default:return'module.exports = {\n "code": 200,\n "message": "操作成功",\n "data": {}\n}'}},eq=(e,t,s)=>{if(!A)return!1;let a=e.replace(/\//g,"_").replace(/^_/,""),n=A.mockFiles.find(e=>e.apiName===a);if(!n)return!1;let r=n.methods.find(e=>e.method.toLowerCase()===t.toLowerCase());return!!r&&!!r.files.find(e=>e.siteName===s)},eB=async()=>{if(!eb.apiPath.trim())return void alert("请输入接口地址");if(eq(eb.apiPath,eb.method,eb.siteName))return void alert("接口 ".concat(eb.apiPath," [").concat(eb.method.toUpperCase(),'] 的场景 "').concat(eb.siteName,'" 已存在,不能重复创建'));eC(!0);try{let e=eb.apiPath.replace(/\//g,"_").replace(/^_/,""),t=eH(eb.method,eb.apiPath),a=await fetch("/api/mock-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s,apiName:e,method:eb.method.toLowerCase(),siteName:eb.siteName,content:t})}),n=await a.json();if(n.success)eb.mockOpen&&await eY(e,eb.method.toLowerCase(),eb.siteName,!0),eN({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0}),ef(!1),await eF(),alert("Mock文件创建成功");else throw Error(n.error||"创建失败")}catch(e){console.error("创建Mock文件失败:",e),alert("创建Mock文件失败: ".concat(e instanceof Error?e.message:"未知错误"))}finally{eC(!1)}},eK=(e,t,s)=>{console.log("新增场景点击:",{apiName:e,method:t,apiPath:s}),ek({apiName:e,method:t,apiPath:s});let a={apiPath:s,method:t.toUpperCase(),siteName:"",mockOpen:!0};console.log("设置表单数据:",a),eN(a),ev(!0)},eW=(e,t,s)=>{if(!A)return!1;let a=A.mockFiles.find(t=>t.apiName===e);if(!a)return!1;let n=a.methods.find(e=>e.method.toLowerCase()===t.toLowerCase());return!!n&&!!n.files.find(e=>e.siteName===s)},eX=async()=>{if(!ey||!eb.siteName.trim())return void alert("请输入场景名称");if(eW(ey.apiName,ey.method,eb.siteName))return void alert("接口 ".concat(ey.apiPath," [").concat(ey.method.toUpperCase(),'] 的场景 "').concat(eb.siteName,'" 已存在'));eC(!0);try{let e=eH(ey.method,ey.apiPath),t=await fetch("/api/mock-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s,apiName:ey.apiName,method:ey.method.toLowerCase(),siteName:eb.siteName,content:e})}),a=await t.json();if(a.success)eb.mockOpen&&await eY(ey.apiName,ey.method,eb.siteName,!0),eN({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0}),ev(!1),ek(null),await eF(),alert("场景创建成功");else throw Error(a.error||"创建失败")}catch(e){console.error("创建场景失败:",e),alert("创建场景失败: ".concat(e instanceof Error?e.message:"未知错误"))}finally{eC(!1)}},eY=async(e,t,s,a)=>{if(i)try{let n=await fetch("/api/mock-open-status",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:i.projectName,apiName:e,method:t,siteName:s,isOpen:a})}),r=await n.json();r.success?await eF():console.error("更新Mock开启状态失败:",r.error)}catch(e){console.error("更新Mock开启状态失败:",e)}},eZ=e=>{eE(e),X(1)};if(x)return(0,a.jsx)("main",{className:"container mx-auto p-4 sm:p-6 md:p-8",children:(0,a.jsx)("div",{className:"text-center py-8",children:(0,a.jsx)("p",{children:"加载中..."})})});if(p||!i)return(0,a.jsxs)("main",{className:"container mx-auto p-4 sm:p-6 md:p-8",children:[(0,a.jsxs)("div",{className:"flex justify-between items-center mb-6",children:[(0,a.jsx)("h1",{className:"text-2xl font-bold",children:"项目配置"}),(0,a.jsxs)("div",{className:"flex gap-2",children:[s&&(0,a.jsx)(c.$,{variant:"default",onClick:eL,disabled:_,children:_?"打开中...":"在 Cursor 中打开"}),(0,a.jsx)(c.$,{variant:"outline",onClick:eT,children:"返回初始化页面"})]})]}),(0,a.jsx)("div",{className:"text-center text-red-500 py-8",children:(0,a.jsx)("p",{children:p||"未找到项目配置"})})]});let eQ=Object.keys(i.envs);return(0,a.jsxs)("main",{className:"container mx-auto p-4 sm:p-6 md:p-8",children:[(0,a.jsxs)("div",{className:"flex justify-between items-center mb-6",children:[(0,a.jsxs)("div",{className:"flex items-center gap-4",children:[(0,a.jsxs)("h1",{className:"text-2xl font-bold",children:[i.projectName," - 项目配置"]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(S,{className:"text-sm font-medium text-gray-600",children:"切换项目:"}),(0,a.jsxs)(f,{value:s||"",onValueChange:a=>{if(a===s)return;let n=e.get("tab"),r="/configuration?project=".concat(encodeURIComponent(a)).concat(n?"&tab=".concat(n):"");t.push(r)},disabled:eh,children:[(0,a.jsx)(v,{className:"w-40",children:(0,a.jsx)(j,{placeholder:eh?"加载中...":"选择项目"})}),(0,a.jsx)(b,{children:eu.map(e=>(0,a.jsx)(N,{value:e.name,children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"w-2 h-2 rounded-full ".concat("existing"===e.status?"bg-green-500":"failed"===e.status?"bg-red-500":"bg-yellow-500")}),(0,a.jsx)("span",{children:e.name})]})},e.name))})]})]})]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(c.$,{variant:"default",onClick:eL,disabled:_,children:_?"打开中...":"在 Cursor 中打开"}),(0,a.jsx)(c.$,{variant:"outline",onClick:eT,children:"返回初始化页面"})]})]}),eQ.length>0?(0,a.jsxs)(o,{value:Z||eQ[0],onValueChange:e=>{Q(e),"mock"===e&&eF()},className:"w-full",children:[(0,a.jsxs)(d,{className:"grid w-full",style:{gridTemplateColumns:"repeat(".concat(eQ.length+1,", 1fr)")},children:[eQ.map(e=>(0,a.jsx)(m,{value:e,className:"capitalize",children:e},e)),(0,a.jsx)(m,{value:"mock",className:"capitalize",children:"Mock配置"})]}),eQ.map(e=>{var t,s,n,r,l,o,d;let m=i.envs[e],x=Object.entries(m.proxyEnv),h=(null==(t=y[e])?void 0:t.selectedProxy)||"",p=(null==(s=y[e])?void 0:s.selectedOption)||"",g=m.currentProxy,k=m.proxyEnv[g]||g,C=m.proxyEnv[g]?g:"custom";return(0,a.jsx)(u,{value:e,className:"space-y-6",children:(0,a.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[(0,a.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg",children:[(0,a.jsxs)("h3",{className:"text-lg font-semibold mb-4",children:[e," 环境配置"]}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)(S,{className:"block text-sm font-medium mb-2",children:"接口代理环境切换"}),(0,a.jsxs)(f,{value:p,onValueChange:t=>eU(e,t),children:[(0,a.jsx)(v,{className:"w-full",children:(0,a.jsx)(j,{placeholder:"选择代理环境"})}),(0,a.jsx)(b,{children:x.map(e=>{let[t,s]=e;return(0,a.jsxs)(N,{value:t,children:[t,"(",s,")"]},t)})})]})]}),k&&(0,a.jsxs)("div",{className:"p-3 bg-blue-50 rounded-md",children:[(0,a.jsxs)("p",{className:"text-sm text-blue-700",children:["当前项目接口已代理至:",C," 环境"]}),(0,a.jsxs)("p",{className:"text-sm text-blue-600",children:["代理地址为:",k]})]}),"custom"===p&&(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(S,{className:"block text-sm font-medium",children:"自定义代理地址"}),(0,a.jsx)(w,{type:"url",placeholder:"请输入自定义代理地址 (如: http://localhost:52741)",value:h,onChange:t=>e_(e,t.target.value),className:"w-full"}),(0,a.jsx)("p",{className:"text-xs text-gray-500",children:"请输入完整的代理地址,包括协议 (http:// 或 https://)"})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)(c.$,{onClick:()=>eA(e),disabled:null==(n=y[e])?void 0:n.saving,className:"w-full sm:w-auto",children:(null==(r=y[e])?void 0:r.saving)?"保存中...":"保存配置"}),(null==(l=y[e])?void 0:l.saveMessage)&&(0,a.jsx)("span",{className:"text-sm ml-3 ".concat((null==(o=y[e])?void 0:o.saveMessage)==="保存成功"?"text-green-600":"text-red-600"),children:null==(d=y[e])?void 0:d.saveMessage})]})]})]}),(0,a.jsx)(q,{currentProjectName:i.projectName,currentEnvName:e})]})},e)}),(0,a.jsx)(u,{value:"mock",className:"space-y-6",children:(0,a.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg",children:[(0,a.jsx)("h3",{className:"text-lg font-semibold mb-4",children:"Mock配置"}),(0,a.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6 mb-6",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)(S,{className:"text-sm font-medium",children:"Mock拦截"}),(0,a.jsx)("p",{className:"text-xs text-gray-500",children:"启用或禁用Mock拦截功能"})]}),(0,a.jsx)(P,{checked:C.mockingIntercept,onCheckedChange:eI})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)(S,{className:"text-sm font-medium",children:"Mock开启"}),(0,a.jsx)("p",{className:"text-xs text-gray-500",children:"启用或禁用Mock功能"})]}),(0,a.jsx)(P,{checked:C.mockOpen,onCheckedChange:e$})]})]}),C.saveMessage&&(0,a.jsx)("div",{className:"mb-6",children:(0,a.jsx)("span",{className:"text-sm ".concat(C.saveMessage.includes("已保存")?"text-green-600":"text-red-600"),children:C.saveMessage})}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)("h4",{className:"text-md font-medium",children:"Mock接口列表"}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(c.$,{onClick:()=>ef(!0),variant:"default",size:"sm",children:"新建"}),(0,a.jsx)(c.$,{onClick:eF,disabled:B,variant:"outline",size:"sm",children:B?"加载中...":"刷新"})]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)("div",{className:"relative flex-1 max-w-md",children:[(0,a.jsx)(w,{placeholder:"搜索接口地址...",value:eS,onChange:e=>eZ(e.target.value),className:"pr-8"}),eS&&(0,a.jsx)(c.$,{variant:"ghost",size:"sm",onClick:()=>{eE(""),X(1)},className:"absolute right-1 top-1/2 transform -translate-y-1/2 h-6 w-6 p-0 hover:bg-gray-100",children:"\xd7"})]}),eS&&(0,a.jsxs)("span",{className:"text-sm text-gray-500",children:['搜索关键词: "',eS,'"']})]}),B?(0,a.jsx)("div",{className:"text-center py-8",children:(0,a.jsx)("p",{className:"text-gray-500",children:"加载Mock数据中..."})}):A&&A.mockFiles.length>0?(()=>{let e=[];A.mockFiles.forEach(t=>{t.methods.forEach(s=>{var a,n;let r=t.apiName.replace(/_/g,"/"),c=s.files.map(e=>e.siteName),i=(null==(a=s.setting)?void 0:a.currentSite)||c[0]||"",l=(null==(n=s.setting)?void 0:n.open)||[],o=l.includes(i);e.push({apiPath:r,method:s.method.toUpperCase(),currentSite:i,availableSites:c,apiName:t.apiName,isOpen:o,openSites:l})})});let t=eS.trim()?e.filter(e=>e.apiPath.toLowerCase().includes(eS.toLowerCase())):e,s=t.length,n=Math.ceil(s/Y),r=(W-1)*Y,i=r+Y,l=t.slice(r,i);return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)(M,{children:[(0,a.jsx)(O,{children:(0,a.jsxs)(z,{children:[(0,a.jsx)(L,{children:"接口地址"}),(0,a.jsx)(L,{children:"请求方法"}),(0,a.jsx)(L,{children:"当前场景"}),(0,a.jsx)(L,{children:"开启mock"}),(0,a.jsx)(L,{children:"操作"})]})}),(0,a.jsx)(T,{children:l.map((e,t)=>(0,a.jsxs)(z,{children:[(0,a.jsx)(U,{className:"font-medium",children:e.apiPath}),(0,a.jsx)(U,{children:(0,a.jsx)("span",{className:"px-2 py-1 rounded text-xs font-medium ".concat("GET"===e.method?"bg-green-100 text-green-800":"POST"===e.method?"bg-blue-100 text-blue-800":"PUT"===e.method?"bg-yellow-100 text-yellow-800":"DELETE"===e.method?"bg-red-100 text-red-800":"bg-gray-100 text-gray-800"),children:e.method})}),(0,a.jsx)(U,{children:(0,a.jsxs)(f,{value:e.currentSite,onValueChange:t=>eR(e.apiName,e.method.toLowerCase(),t),children:[(0,a.jsx)(v,{className:"w-32",children:(0,a.jsx)(j,{})}),(0,a.jsx)(b,{children:e.availableSites.map(e=>(0,a.jsx)(N,{value:e,children:e},e))})]})}),(0,a.jsx)(U,{children:(0,a.jsx)(P,{checked:e.isOpen,onCheckedChange:t=>eY(e.apiName,e.method.toLowerCase(),e.currentSite,t)})}),(0,a.jsx)(U,{children:(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(c.$,{variant:"outline",size:"sm",onClick:()=>eG(e.apiName,e.method.toLowerCase(),e.currentSite),disabled:en,children:en?"加载中...":"编辑"}),(0,a.jsx)(c.$,{variant:"outline",size:"sm",onClick:()=>eK(e.apiName,e.method.toLowerCase(),e.apiPath),disabled:ew,children:"新增场景"})]})})]},"".concat(e.apiName,"-").concat(e.method,"-").concat(t)))})]}),n>1&&(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"text-sm text-gray-500",children:["显示 ",r+1,"-",Math.min(i,s)," 条,共 ",s," 条"]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(c.$,{variant:"outline",size:"sm",onClick:()=>X(e=>Math.max(1,e-1)),disabled:1===W,children:"上一页"}),(0,a.jsxs)("span",{className:"text-sm",children:[W," / ",n]}),(0,a.jsx)(c.$,{variant:"outline",size:"sm",onClick:()=>X(e=>Math.min(n,e+1)),disabled:W===n,children:"下一页"})]})]})]})})():(0,a.jsxs)("div",{className:"text-center py-8",children:[(0,a.jsx)("p",{className:"text-gray-500",children:"暂无Mock接口数据"}),(0,a.jsx)("p",{className:"text-xs text-gray-400 mt-1",children:"请先创建Mock文件"})]})]})]})})]}):(0,a.jsx)("div",{className:"text-center text-gray-500 py-8",children:(0,a.jsx)("p",{children:"该项目没有配置环境信息"})}),(0,a.jsx)($,{open:es||eg||ej,onOpenChange:e=>{e||(ea(!1),ef(!1),ev(!1),ek(null))},children:(0,a.jsxs)(R,{className:"w-screen h-screen max-w-none max-h-none m-0 rounded-none overflow-hidden flex flex-col",children:[(0,a.jsxs)(G,{className:"flex-shrink-0 border-b pb-4",children:[(0,a.jsx)(J,{children:eg?"新建Mock文件":ej?"新增场景":"编辑Mock文件"}),(0,a.jsx)(V,{children:eg?"创建一个新的Mock接口文件":ej&&ey?(0,a.jsxs)(a.Fragment,{children:["为接口 ",ey.apiPath," [",ey.method.toUpperCase(),"] 新增场景"]}):ee?(0,a.jsxs)(a.Fragment,{children:["编辑 ",ee.apiName.replace(/_/g,"/")," - ",ee.method.toUpperCase()," - ",ee.siteName,".js"]}):null})]}),(eg||ej)&&(0,a.jsxs)("div",{className:"flex-shrink-0 border-b pb-4",children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(S,{htmlFor:"apiPath",className:"text-sm font-medium",children:"接口地址"}),ej?(0,a.jsx)("div",{className:"px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-sm text-gray-600",children:eb.apiPath}):(0,a.jsx)(w,{id:"apiPath",placeholder:"/api/user/info",value:eb.apiPath,onChange:e=>eV("apiPath",e.target.value)})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(S,{htmlFor:"method",className:"text-sm font-medium",children:"请求方法"}),ej?(0,a.jsx)("div",{className:"px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-sm text-gray-600",children:eb.method}):(0,a.jsxs)(f,{value:eb.method,onValueChange:e=>eV("method",e),children:[(0,a.jsx)(v,{children:(0,a.jsx)(j,{})}),(0,a.jsxs)(b,{children:[(0,a.jsx)(N,{value:"GET",children:"GET"}),(0,a.jsx)(N,{value:"POST",children:"POST"}),(0,a.jsx)(N,{value:"PUT",children:"PUT"}),(0,a.jsx)(N,{value:"DELETE",children:"DELETE"}),(0,a.jsx)(N,{value:"PATCH",children:"PATCH"})]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(S,{htmlFor:"siteName",className:"text-sm font-medium",children:"场景名称"}),eg?(0,a.jsx)("div",{className:"px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-sm text-gray-600",children:"默认场景"}):(0,a.jsx)(w,{id:"siteName",placeholder:"请输入场景名称",value:eb.siteName,onChange:e=>eV("siteName",e.target.value)})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(S,{htmlFor:"mockOpen",className:"text-sm font-medium",children:"开启Mock"}),(0,a.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,a.jsx)(P,{id:"mockOpen",checked:eb.mockOpen,onCheckedChange:e=>eV("mockOpen",e)}),(0,a.jsx)("span",{className:"text-sm text-gray-600",children:eb.mockOpen?"开启":"关闭"})]})]})]}),eg&&eb.apiPath.trim()&&eb.siteName.trim()&&eq(eb.apiPath,eb.method,eb.siteName)&&(0,a.jsx)("div",{className:"mt-4 p-3 bg-red-50 border border-red-200 rounded-md",children:(0,a.jsx)("div",{className:"flex items-center",children:(0,a.jsxs)("span",{className:"text-red-600 text-sm",children:["⚠️ 接口 ",eb.apiPath," [",eb.method.toUpperCase(),'] 的场景 "',eb.siteName,'" 已存在']})})}),ej&&ey&&eb.siteName.trim()&&eW(ey.apiName,ey.method,eb.siteName)&&(0,a.jsx)("div",{className:"mt-4 p-3 bg-red-50 border border-red-200 rounded-md",children:(0,a.jsx)("div",{className:"flex items-center",children:(0,a.jsxs)("span",{className:"text-red-600 text-sm",children:['⚠️ 场景 "',eb.siteName,'" 已存在']})})})]}),(0,a.jsx)("div",{className:"flex-1 flex flex-col space-y-4 py-4",children:(0,a.jsxs)("div",{className:"flex-1 flex flex-col",children:[(0,a.jsx)(S,{className:"text-sm font-medium mb-2",children:"文件内容"}),(0,a.jsxs)("div",{className:"flex-1 border rounded-md overflow-hidden relative",children:[el&&(0,a.jsx)("div",{className:"absolute inset-0 bg-gray-50 flex items-center justify-center z-10",children:(0,a.jsx)("p",{className:"text-gray-500",children:"编辑器加载中..."})}),(0,a.jsx)(H.Ay,{height:"100%",defaultLanguage:"javascript",value:eg||ej?eH(eb.method,eb.apiPath):(null==ee?void 0:ee.content)||"",onChange:e=>{eg||ej||et(t=>t?{...t,content:e||""}:null)},onMount:async e=>{console.log("编辑器挂载,模式:",{isCreateMode:eg,isAddSceneMode:ej,createFormData:eb}),em(e),eo(!1),setTimeout(()=>eO(e),500)},loading:(0,a.jsx)("div",{className:"flex items-center justify-center h-full",children:(0,a.jsx)("p",{className:"text-gray-500",children:"编辑器加载中..."})}),options:{minimap:{enabled:!1},fontSize:14,lineNumbers:"on",roundedSelection:!1,scrollBeyondLastLine:!1,automaticLayout:!0,tabSize:2,insertSpaces:!0,wordWrap:"on",theme:"vs-dark",bracketPairColorization:{enabled:!0},quickSuggestions:{other:!0,comments:!0,strings:!0},formatOnPaste:!0,formatOnType:!0,readOnly:eg&&!eb.apiPath.trim()||ej&&!eb.apiPath.trim()}},eg?"create":ej?"addscene":"edit")]})]})}),(0,a.jsxs)(D,{className:"flex justify-between flex-shrink-0 border-t pt-4",children:[(0,a.jsx)(c.$,{variant:"secondary",onClick:eP,disabled:!ed||el,children:"格式化代码"}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(c.$,{variant:"outline",onClick:()=>{eg?(ef(!1),eN({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0})):ej?(ev(!1),ek(null),eN({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0})):eJ()},children:"取消"}),eg?(0,a.jsx)(c.$,{onClick:eB,disabled:ew||!eb.apiPath.trim()||!eb.siteName.trim()||eq(eb.apiPath,eb.method,eb.siteName),children:ew?"创建中...":"创建"}):ej?(0,a.jsx)(c.$,{onClick:eX,disabled:ew||!eb.siteName.trim()||!!ey&&eW(ey.apiName,ey.method,eb.siteName),children:ew?"创建中...":"创建"}):(0,a.jsx)(c.$,{onClick:eD,disabled:ec,children:ec?"保存中...":"保存"})]})]})]})})]})}function W(){return(0,a.jsx)(n.Suspense,{fallback:(0,a.jsx)("div",{className:"min-h-screen bg-gray-50 flex items-center justify-center",children:(0,a.jsxs)("div",{className:"text-center space-y-4",children:[(0,a.jsx)("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600 mx-auto"}),(0,a.jsx)("p",{className:"text-gray-600",children:"正在加载配置页面..."})]})}),children:(0,a.jsx)(K,{})})}}},e=>{var t=t=>e(e.s=t);e.O(0,[167,770,619,180,358],()=>t(8851)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[823],{2190:(e,t,s)=>{Promise.resolve().then(s.bind(s,6175))},6162:(e,t,s)=>{"use strict";s.d(t,{cn:()=>r});var a=s(4407),n=s(1467);function r(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];return(0,n.QP)((0,a.$)(t))}},6175:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>X});var a=s(5167),n=s(6343),r=s(1349),l=s(7541),c=s(508),i=s(6162);function o(e){let{className:t,...s}=e;return(0,a.jsx)(c.bL,{"data-slot":"tabs",className:(0,i.cn)("flex flex-col gap-2",t),...s})}function d(e){let{className:t,...s}=e;return(0,a.jsx)(c.B8,{"data-slot":"tabs-list",className:(0,i.cn)("bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]",t),...s})}function m(e){let{className:t,...s}=e;return(0,a.jsx)(c.l9,{"data-slot":"tabs-trigger",className:(0,i.cn)("data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...s})}function u(e){let{className:t,...s}=e;return(0,a.jsx)(c.UC,{"data-slot":"tabs-content",className:(0,i.cn)("flex-1 outline-none",t),...s})}var x=s(8358),h=s(7151),p=s(5211),g=s(9926);function f(e){let{...t}=e;return(0,a.jsx)(x.bL,{"data-slot":"select",...t})}function j(e){let{...t}=e;return(0,a.jsx)(x.WT,{"data-slot":"select-value",...t})}function v(e){let{className:t,size:s="default",children:n,...r}=e;return(0,a.jsxs)(x.l9,{"data-slot":"select-trigger","data-size":s,className:(0,i.cn)("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...r,children:[n,(0,a.jsx)(x.In,{asChild:!0,children:(0,a.jsx)(h.A,{className:"size-4 opacity-50"})})]})}function b(e){let{className:t,children:s,position:n="popper",...r}=e;return(0,a.jsx)(x.ZL,{children:(0,a.jsxs)(x.UC,{"data-slot":"select-content",className:(0,i.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md","popper"===n&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",t),position:n,...r,children:[(0,a.jsx)(y,{}),(0,a.jsx)(x.LM,{className:(0,i.cn)("p-1","popper"===n&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:s}),(0,a.jsx)(w,{})]})})}function N(e){let{className:t,children:s,...n}=e;return(0,a.jsxs)(x.q7,{"data-slot":"select-item",className:(0,i.cn)("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",t),...n,children:[(0,a.jsx)("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:(0,a.jsx)(x.VF,{children:(0,a.jsx)(p.A,{className:"size-4"})})}),(0,a.jsx)(x.p4,{children:s})]})}function y(e){let{className:t,...s}=e;return(0,a.jsx)(x.PP,{"data-slot":"select-scroll-up-button",className:(0,i.cn)("flex cursor-default items-center justify-center py-1",t),...s,children:(0,a.jsx)(g.A,{className:"size-4"})})}function w(e){let{className:t,...s}=e;return(0,a.jsx)(x.wn,{"data-slot":"select-scroll-down-button",className:(0,i.cn)("flex cursor-default items-center justify-center py-1",t),...s,children:(0,a.jsx)(h.A,{className:"size-4"})})}function k(e){let{className:t,type:s,...n}=e;return(0,a.jsx)("input",{type:s,"data-slot":"input",className:(0,i.cn)("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",t),...n})}var C=s(7752);function S(e){let{className:t,...s}=e;return(0,a.jsx)(C.b,{"data-slot":"label",className:(0,i.cn)("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",t),...s})}var E=s(7807);function P(e){let{className:t,...s}=e;return(0,a.jsx)(E.bL,{"data-slot":"switch",className:(0,i.cn)("peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",t),...s,children:(0,a.jsx)(E.zi,{"data-slot":"switch-thumb",className:(0,i.cn)("bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0")})})}function T(e){let{className:t,...s}=e;return(0,a.jsx)("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:(0,a.jsx)("table",{"data-slot":"table",className:(0,i.cn)("w-full caption-bottom text-sm",t),...s})})}function O(e){let{className:t,...s}=e;return(0,a.jsx)("thead",{"data-slot":"table-header",className:(0,i.cn)("[&_tr]:border-b",t),...s})}function M(e){let{className:t,...s}=e;return(0,a.jsx)("tbody",{"data-slot":"table-body",className:(0,i.cn)("[&_tr:last-child]:border-0",t),...s})}function z(e){let{className:t,...s}=e;return(0,a.jsx)("tr",{"data-slot":"table-row",className:(0,i.cn)("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",t),...s})}function L(e){let{className:t,...s}=e;return(0,a.jsx)("th",{"data-slot":"table-head",className:(0,i.cn)("text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",t),...s})}function U(e){let{className:t,...s}=e;return(0,a.jsx)("td",{"data-slot":"table-cell",className:(0,i.cn)("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",t),...s})}var I=s(7890),_=s(4279);function $(e){let{...t}=e;return(0,a.jsx)(I.bL,{"data-slot":"dialog",...t})}function R(e){let{...t}=e;return(0,a.jsx)(I.ZL,{"data-slot":"dialog-portal",...t})}function A(e){let{className:t,...s}=e;return(0,a.jsx)(I.hJ,{"data-slot":"dialog-overlay",className:(0,i.cn)("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",t),...s})}function D(e){let{className:t,children:s,showCloseButton:n=!0,...r}=e;return(0,a.jsxs)(R,{"data-slot":"dialog-portal",children:[(0,a.jsx)(A,{}),(0,a.jsxs)(I.UC,{"data-slot":"dialog-content",className:(0,i.cn)("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200",t),...r,children:[s,n&&(0,a.jsxs)(I.bm,{"data-slot":"dialog-close",className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[(0,a.jsx)(_.A,{}),(0,a.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function F(e){let{className:t,...s}=e;return(0,a.jsx)("div",{"data-slot":"dialog-header",className:(0,i.cn)("flex flex-col gap-2 text-center sm:text-left",t),...s})}function G(e){let{className:t,...s}=e;return(0,a.jsx)("div",{"data-slot":"dialog-footer",className:(0,i.cn)("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",t),...s})}function J(e){let{className:t,...s}=e;return(0,a.jsx)(I.hE,{"data-slot":"dialog-title",className:(0,i.cn)("text-lg leading-none font-semibold",t),...s})}function V(e){let{className:t,...s}=e;return(0,a.jsx)(I.VY,{"data-slot":"dialog-description",className:(0,i.cn)("text-muted-foreground text-sm",t),...s})}var H=s(4064);function K(e){let{className:t,currentProjectName:s,currentEnvName:r}=e,[c,i]=(0,n.useState)([]),[o,d]=(0,n.useState)(!0),[m,u]=(0,n.useState)(null),[x,h]=(0,n.useState)(new Set),[p,g]=(0,n.useState)(""),[f,j]=(0,n.useState)(!1),[v,b]=(0,n.useState)(""),[N,y]=(0,n.useState)(!1),[w,C]=(0,n.useState)(null),S=(0,n.useRef)(null);(0,n.useEffect)(()=>{if(c.length>0){let e=c.find(e=>e.projectName===s&&e.envName===r);if(e&&e.subApps.length>0){let t=new Set;e.subApps.forEach(e=>{c.forEach(s=>{s.envName===e&&t.add($(s))})}),h(t)}}},[c,s,r]);let E=async()=>{d(!0),u(null);try{let e=await fetch("/api/all-projects-envs"),t=await e.json();t.success?i(t.data):u(t.error||"获取项目环境信息失败")}catch(e){console.error("获取项目环境信息失败:",e),u("获取项目环境信息失败: 网络错误")}finally{d(!1)}};(0,n.useEffect)(()=>(E(),P(),()=>{I()}),[r]);let P=()=>{S.current&&I();let e="microapp-table-".concat(Date.now(),"-").concat(Math.random().toString(36).substr(2,9)),t="/api/microapp-proxy-change-stream?env=".concat(encodeURIComponent(r),"&clientId=").concat(encodeURIComponent(e));console.log("[SSE] 建立连接到: ".concat(t)),C(null);try{let e=new EventSource(t);S.current=e,e.onopen=()=>{console.log("[SSE] 连接已建立,环境: ".concat(r)),y(!0),C(null)},e.onmessage=e=>{try{let t=JSON.parse(e.data);_(t)}catch(e){console.error("[SSE] 解析消息失败:",e)}},e.onerror=()=>{console.error("[SSE] 连接错误,环境: ".concat(r)),y(!1),C("实时推送连接断开"),setTimeout(()=>{S.current&&S.current.readyState!==EventSource.CLOSED||(console.log("[SSE] 尝试重新连接..."),P())},3e3)}}catch(e){console.error("[SSE] 建立连接失败:",e),C("无法建立实时推送连接")}},I=()=>{S.current&&(console.log("[SSE] 关闭连接"),S.current.close(),S.current=null,y(!1))},_=e=>{switch(console.log("[SSE] 收到消息:",e),e.type){case"connection-established":console.log("[SSE] 连接确认: ".concat(e.message)),y(!0),C(null);break;case"microapp-proxy-config-change":if(console.log("[SSE] 配置变化通知: 环境=".concat(e.envName)),console.log("[SSE] 变化详情:",e.changes),e.changes){let{added:t,removed:s}=e.changes,a="";t.length>0&&(a+="新增: ".concat(t.join(", "))),s.length>0&&(a&&(a+="; "),a+="移除: ".concat(s.join(", "))),b("配置已更新 (".concat(a,")"))}else b("配置已更新");E(),setTimeout(()=>b(""),3e3);break;case"heartbeat":y(!0),C(null);break;default:console.log("[SSE] 未知消息类型:",e.type)}},$=e=>"".concat(e.projectName,"-").concat(e.envName),R=p.trim()?c.filter(e=>e.projectName.toLowerCase().includes(p.toLowerCase())||e.envName.toLowerCase().includes(p.toLowerCase())||e.host.toLowerCase().includes(p.toLowerCase())):c,A=(e,t)=>{let s=new Set(x);t?s.add(e):s.delete(e),h(s)},D=e=>{e?h(new Set(R.map(e=>$(e)))):h(new Set)},F=async()=>{j(!0),b("");try{let e=Array.from(x).map(e=>{let t=c.find(t=>$(t)===e);return t?t.envName:""}).filter(e=>""!==e),t=[...new Set(e)],a=await fetch("/api/microapp-proxy-config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s,envName:r,selectedItems:t})}),n=await a.json();n.success?(b(n.message||"保存成功"),await E()):b("保存失败: ".concat(n.error))}catch(e){console.error("保存MicroApp代理配置失败:",e),b("保存失败: 网络错误")}finally{j(!1),setTimeout(()=>{b("")},5e3)}},G=x.size,J=R.length>0&&R.every(e=>x.has($(e))),V=R.some(e=>x.has($(e)));return o?(0,a.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg ".concat(t),children:[(0,a.jsx)("h4",{className:"text-md font-medium mb-4",children:"MicroApp代理配置"}),(0,a.jsx)("div",{className:"text-center py-8",children:(0,a.jsx)("p",{className:"text-gray-500",children:"加载中..."})})]}):m?(0,a.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg ".concat(t),children:[(0,a.jsx)("h4",{className:"text-md font-medium mb-4",children:"MicroApp代理配置"}),(0,a.jsxs)("div",{className:"text-center py-8",children:[(0,a.jsx)("p",{className:"text-red-500",children:m}),(0,a.jsx)(l.$,{variant:"outline",size:"sm",onClick:E,className:"mt-2",children:"重试"})]})]}):(0,a.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg ".concat(t),children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h4",{className:"text-md font-medium",children:"MicroApp代理配置"}),(0,a.jsxs)("p",{className:"text-xs text-gray-500 mt-1",children:["为 ",s," - ",r," 环境配置微应用代理"]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)("div",{className:"flex items-center gap-1",children:[(0,a.jsx)("div",{className:"w-2 h-2 rounded-full ".concat(N?"bg-green-500":"bg-red-500"),title:N?"实时推送已连接":"实时推送断开"}),(0,a.jsx)("span",{className:"text-xs text-gray-500",children:N?"实时":"离线"})]}),(v||w)&&(0,a.jsx)("span",{className:"text-sm max-w-xs ".concat(v&&v.includes("失败")||w?"text-red-600":v&&v.includes("但有")?"text-yellow-600":"text-green-600"),title:v||w||"",children:v||w}),(0,a.jsx)(l.$,{variant:"outline",size:"sm",onClick:E,disabled:f,children:"刷新"}),(0,a.jsx)(l.$,{variant:"default",size:"sm",onClick:F,disabled:f,children:f?"保存中...":"保存配置"})]})]}),(0,a.jsxs)("div",{className:"space-y-3 mb-4",children:[(0,a.jsx)("div",{className:"flex items-center gap-2",children:(0,a.jsxs)("div",{className:"relative flex-1 max-w-md",children:[(0,a.jsx)(k,{placeholder:"搜索项目名称、环境名称或Host...",value:p,onChange:e=>g(e.target.value),className:"pr-8"}),p&&(0,a.jsx)(l.$,{variant:"ghost",size:"sm",onClick:()=>{g("")},className:"absolute right-1 top-1/2 transform -translate-y-1/2 h-6 w-6 p-0 hover:bg-gray-100",children:"\xd7"})]})}),(0,a.jsxs)("div",{className:"flex items-center justify-between text-sm text-gray-600",children:[(0,a.jsxs)("div",{className:"flex items-center gap-4",children:[(0,a.jsxs)("span",{children:["显示 ",R.length," 个环境配置",p&&' (搜索: "'.concat(p,'")')]}),G>0&&(0,a.jsxs)("span",{className:"text-blue-600 font-medium",children:["已选择 ",G," 项"]})]}),G>0&&(0,a.jsx)(l.$,{variant:"outline",size:"sm",onClick:()=>{h(new Set)},children:"清空选择"})]})]}),R.length>0?(0,a.jsx)("div",{className:"border rounded-md",children:(0,a.jsxs)(T,{children:[(0,a.jsx)(O,{children:(0,a.jsxs)(z,{children:[(0,a.jsx)(L,{className:"w-12",children:(0,a.jsx)("input",{type:"checkbox",checked:J,onChange:e=>D(e.target.checked),ref:e=>{e&&(e.indeterminate=V&&!J)},className:"rounded border-gray-300"})}),(0,a.jsx)(L,{children:"环境名称"}),(0,a.jsx)(L,{children:"项目名称"}),(0,a.jsx)(L,{children:"Host地址"}),(0,a.jsx)(L,{children:"当前代理"})]})}),(0,a.jsx)(M,{children:R.map(e=>{let t=$(e),s=x.has(t);return(0,a.jsxs)(z,{children:[(0,a.jsx)(U,{children:(0,a.jsx)("input",{type:"checkbox",checked:s,onChange:e=>A(t,e.target.checked),className:"rounded border-gray-300"})}),(0,a.jsx)(U,{children:(0,a.jsx)("span",{className:"px-2 py-1 rounded text-xs font-medium bg-blue-100 text-blue-800",children:e.envName})}),(0,a.jsx)(U,{className:"font-medium",children:e.projectName}),(0,a.jsx)(U,{className:"font-mono text-sm",children:e.host}),(0,a.jsxs)(U,{className:"text-sm text-gray-600",children:[e.currentProxy,e.proxyEnv[e.currentProxy]&&(0,a.jsx)("div",{className:"text-xs text-gray-500",children:e.proxyEnv[e.currentProxy]})]})]},t)})})]})}):(0,a.jsx)("div",{className:"text-center py-8",children:(0,a.jsx)("p",{className:"text-gray-500",children:p?"没有找到匹配的环境配置":"暂无环境配置"})}),G>0&&(0,a.jsx)("div",{className:"mt-4 p-3 bg-blue-50 rounded-md",children:(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("span",{className:"text-sm text-blue-700",children:["已选择 ",G," 个环境配置将作为微应用代理"]}),(0,a.jsx)("span",{className:"text-xs text-blue-600",children:"点击上方“保存配置”按钮保存设置"})]})})]})}var Z=s(5735),B=s.n(Z);function Y(e){let{logs:t}=e,s=(0,n.useRef)(null),r=(0,n.useRef)(!0),l=e=>e.replace(/\x1b\[[0-9;]*m/g,"").replace(/\x1b\[[0-9]*[A-Z]/g,"").replace(/\x1b\[K/g,"").replace(/\x1b\[2K/g,"").replace(/\x1b\[G/g,"").replace(/\x1b\[\d+A/g,"").replace(/\x1b\[\d+B/g,"").replace(/\x1b\[\d+C/g,"").replace(/\x1b\[\d+D/g,"").replace(/\[2K\[1A\[2K\[G/g,"").replace(/\[\d+[A-Z]/g,"").replace(/\[STDOUT\]/g,"[OUT]").replace(/\[STDERR\]/g,"[ERR]"),c=()=>{if(!s.current)return!0;let{scrollTop:e,scrollHeight:t,clientHeight:a}=s.current;return t-e-a<100},i=()=>{s.current&&r.current&&(s.current.scrollTop=s.current.scrollHeight)};return(0,n.useEffect)(()=>{setTimeout(i,10)},[t]),(0,a.jsxs)("div",{ref:s,onScroll:()=>{r.current=c()},style:{scrollBehavior:"smooth",maxHeight:"100%"},className:"jsx-b464fb0f479e34f5 h-full w-full overflow-y-auto overflow-x-hidden p-4 custom-scrollbar",children:[(0,a.jsx)(B(),{id:"b464fb0f479e34f5",children:".custom-scrollbar.jsx-b464fb0f479e34f5{scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.2)rgba(0,0,0,.1)}.custom-scrollbar.jsx-b464fb0f479e34f5::-webkit-scrollbar{width:10px;height:10px}.custom-scrollbar.jsx-b464fb0f479e34f5::-webkit-scrollbar-track{background:rgba(0,0,0,.1);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.custom-scrollbar.jsx-b464fb0f479e34f5::-webkit-scrollbar-thumb{background:rgba(255,255,255,.3);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.custom-scrollbar.jsx-b464fb0f479e34f5::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.4)}"}),(0,a.jsx)("div",{className:"jsx-b464fb0f479e34f5 space-y-0.5",children:t.length>0?t.map((e,t)=>{var s;let n=l(e);if(!n.trim())return null;let r=e.includes("[STDERR]"),c=e.includes("[SYSTEM]"),i=null==(s=n.match(/^\[([\d-T:.Z]+)\]/))?void 0:s[1],o=n.replace(/^\[[\d-T:.Z]+\]\s*/,"");return(0,a.jsxs)("div",{className:"jsx-b464fb0f479e34f5 "+"font-mono text-xs leading-5 ".concat(r?"text-red-400":c?"text-yellow-400":"text-gray-100"),children:[i&&(0,a.jsxs)("span",{className:"jsx-b464fb0f479e34f5 text-gray-500 mr-2",children:["[",new Date(i).toLocaleTimeString("zh-CN"),"]"]}),(0,a.jsx)("span",{className:"jsx-b464fb0f479e34f5 whitespace-pre-wrap break-all",children:o})]},t)}):(0,a.jsx)("div",{className:"jsx-b464fb0f479e34f5 text-center text-gray-500 mt-8",children:"等待日志输出..."})})]})}var q=function(e){return e.PENDING="pending",e.EXISTING="existing",e.CLONING="cloning",e.SUCCESS="success",e.FAILED="failed",e.RETRYING="retrying",e}(q||{});function W(){let e=(0,r.useSearchParams)(),t=(0,r.useRouter)(),s=e.get("project"),[c,i]=(0,n.useState)(null),[x,h]=(0,n.useState)(!0),[p,g]=(0,n.useState)(null),[y,w]=(0,n.useState)({}),[C,E]=(0,n.useState)({mockingIntercept:!1,mockOpen:!1}),[I,_]=(0,n.useState)(!1),[R,A]=(0,n.useState)(null),[Z,B]=(0,n.useState)(!1),[q,W]=(0,n.useState)(1),[X]=(0,n.useState)(10),[Q,ee]=(0,n.useState)(""),[et,es]=(0,n.useState)(null),[ea,en]=(0,n.useState)(!1),[er,el]=(0,n.useState)(!1),[ec,ei]=(0,n.useState)(!1),[eo,ed]=(0,n.useState)(!0),[em,eu]=(0,n.useState)(null),[ex,eh]=(0,n.useState)([]),[ep,eg]=(0,n.useState)(!1),[ef,ej]=(0,n.useState)(!1),[ev,eb]=(0,n.useState)(!1),[eN,ey]=(0,n.useState)({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0}),[ew,ek]=(0,n.useState)(null),[eC,eS]=(0,n.useState)(!1),[eE,eP]=(0,n.useState)(""),[eT,eO]=(0,n.useState)({}),[eM,ez]=(0,n.useState)(!1),[eL,eU]=(0,n.useState)(""),[eI,e_]=(0,n.useState)([]),e$=async()=>{em&&await eA(em)},eR=async e=>{ea&&(e.metaKey||e.ctrlKey)&&"s"===e.key&&(e.preventDefault(),await e$())};(0,n.useEffect)(()=>{if(ea)return document.addEventListener("keydown",eR),()=>{document.removeEventListener("keydown",eR)}},[ea,em]);let eA=async e=>{try{await new Promise(e=>setTimeout(e,200));let s=e.getModel();if(s){var t;await (null==(t=e.getAction("editor.action.formatDocument"))?void 0:t.run());let a=s.getValue();if(a&&!a.includes("\n")&&a.length>50){let t=a.replace(/\{\s*/g,"{\n ").replace(/\}\s*/g,"\n}").replace(/;\s*/g,";\n ").replace(/,\s*/g,",\n ").replace(/\n\s*\n/g,"\n").trim();t!==a&&(s.setValue(t),setTimeout(()=>{var t;null==(t=e.getAction("editor.action.formatDocument"))||t.run()},100))}}}catch(e){console.log("自动格式化失败:",e)}},eD=()=>{t.push("/initialization")},eF=async()=>{eg(!0);try{let e=await fetch("/api/check-workspace"),t=await e.json();if(t.success&&t.projects){let e=t.projects.map(e=>({name:e.name,status:e.status,message:e.message}));eh(e)}else console.error("获取项目列表失败:",t.error),eh([])}catch(e){console.error("获取项目列表失败:",e),eh([])}finally{eg(!1)}},eG=async()=>{if(s){_(!0);try{let e=await fetch("/api/open-project",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s})}),t=await e.json();t.success||(console.error("打开项目失败:",t.error),alert("打开项目失败: ".concat(t.error)))}catch(e){console.error("打开项目失败:",e),alert("打开项目失败: 网络错误")}finally{_(!1)}}};(0,n.useEffect)(()=>{if(!s){g("项目名称缺失"),h(!1);return}(async()=>{try{let e=await fetch("/api/project-config?project=".concat(encodeURIComponent(s))),t=await e.json();if(t.success){i(t.data);let e={};Object.keys(t.data.envs).forEach(s=>{let a=t.data.envs[s],n="";n=a.proxyEnv[a.currentProxy]?a.proxyEnv[a.currentProxy]:a.currentProxy;let r="";r=a.proxyEnv[a.currentProxy]?a.currentProxy:"custom",e[s]={selectedProxy:n||"",selectedOption:r}}),w(e),E({mockingIntercept:t.data.mockingIntercept||!1,mockOpen:t.data.mockOpen||!1})}else g(t.error)}catch(e){g("获取项目配置失败"),console.error("获取项目配置失败:",e)}finally{h(!1)}})()},[s]),(0,n.useEffect)(()=>{if(c&&s){let e=Object.keys(c.envs),t=new URLSearchParams(window.location.search).get("tab"),s="";(s=Q&&("mock"===Q||e.includes(Q))?Q:t&&("mock"===t||e.includes(t))?t:e.length>0?e[0]:"mock")!==Q&&(ee(s),"mock"===s&&e2())}},[c,s]),(0,n.useEffect)(()=>{eF()},[]);let eJ=(0,n.useCallback)(async()=>{if(!s||!c)return;let e={};for(let t of Object.keys(c.envs))e["".concat(t)]={loading:!0,running:!1};eO(e);let t=Object.keys(c.envs).map(async e=>{try{let t=await fetch("/api/process/status?projectName=".concat(encodeURIComponent(s),"&envName=").concat(encodeURIComponent(e))),a=await t.json();if(a.success&&a.data)return{envName:e,status:a.data}}catch(t){console.error("获取环境 ".concat(e," 状态失败:"),t)}return{envName:e,status:{running:!1}}}),a=await Promise.all(t),n={};a.forEach(e=>{let{envName:t,status:s}=e;n[t]={running:s.running||!1,pid:s.pid,startTime:s.startTime,port:s.port,loading:!1}}),eO(n)},[s,c]),eV=async e=>{if(!s||!c)return;let t=c.envs[e];if(!t.startCommand)return void alert("该环境未配置启动命令");eO(t=>({...t,[e]:{...t[e],loading:!0}}));try{let a=await fetch("/api/process/start",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s,envName:e,startCommand:t.startCommand})}),n=await a.json();if(n.success)eO(t=>({...t,[e]:{running:!0,pid:n.data.pid,startTime:n.data.startTime,port:n.data.port,loading:!1}}));else throw Error(n.error||"启动失败")}catch(t){console.error("启动进程失败:",t),alert("启动失败: ".concat(t instanceof Error?t.message:"未知错误")),eO(t=>({...t,[e]:{...t[e],loading:!1}}))}},eH=async e=>{if(s){eO(t=>({...t,[e]:{...t[e],loading:!0}}));try{let t=await fetch("/api/process/start?projectName=".concat(encodeURIComponent(s),"&envName=").concat(encodeURIComponent(e)),{method:"DELETE"}),a=await t.json();if(a.success)eO(t=>({...t,[e]:{running:!1,loading:!1}}));else throw Error(a.error||"停止失败")}catch(t){console.error("停止进程失败:",t),alert("停止失败: ".concat(t instanceof Error?t.message:"未知错误")),eO(t=>({...t,[e]:{...t[e],loading:!1}}))}}},[eK,eZ]=(0,n.useState)(null),eB=e=>{if(!s)return;eK&&eK.close(),e_([]);let t=new EventSource("/api/process/logs/stream?projectName=".concat(encodeURIComponent(s),"&envName=").concat(encodeURIComponent(e)));t.onmessage=e=>{try{let t=JSON.parse(e.data);"log"===t.type?e_(e=>{let s=[...e,t.content];return s.length>1e3?s.slice(-1e3):s}):"init"===t.type?e_([t.message]):"end"===t.type&&e_(e=>[...e,"[系统] ".concat(t.message)])}catch(e){console.error("解析日志数据失败:",e)}},t.onerror=e=>{console.error("日志流错误:",e),t.close(),eZ(null)},eZ(t)},eY=()=>{eK&&(eK.close(),eZ(null))},eq=e=>{eU(e),ez(!0),eB(e)},eW=()=>{ez(!1),e_([]),eU(""),eY()};(0,n.useEffect)(()=>{if(c&&s){eJ();let e=setInterval(()=>{eJ()},5e3);return()=>clearInterval(e)}},[c,s,eJ]);let eX=(e,t)=>{if(!c)return;let s=c.envs[e],a="";if("custom"===t){var n,r;a=(null==(n=y[e])?void 0:n.selectedOption)==="custom"?(null==(r=y[e])?void 0:r.selectedProxy)||"":s.proxyEnv.custom||""}else a=s.proxyEnv[t]||"";w(s=>({...s,[e]:{...s[e],selectedProxy:a,selectedOption:t,saveMessage:""}}))},eQ=(e,t)=>{w(s=>({...s,[e]:{...s[e],selectedProxy:t,saveMessage:""}}))},e0=async e=>{E(t=>({...t,mockingIntercept:e,saving:!0,saveMessage:""}));try{let t=await fetch("/api/project-config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s,projectConfig:{mockingIntercept:e,mockOpen:C.mockOpen}})}),a=await t.json();if(a.success)i(t=>t?{...t,mockingIntercept:e}:t),E(e=>({...e,saving:!1,saveMessage:"Mock拦截配置已保存"})),setTimeout(()=>{E(e=>({...e,saveMessage:""}))},2e3);else throw Error(a.error||"保存失败")}catch(t){console.error("保存Mock拦截配置失败:",t),E(s=>({...s,mockingIntercept:!e,saving:!1,saveMessage:"保存失败: ".concat(t instanceof Error?t.message:"未知错误")})),setTimeout(()=>{E(e=>({...e,saveMessage:""}))},3e3)}},e1=async e=>{E(t=>({...t,mockOpen:e,saving:!0,saveMessage:""}));try{let t=await fetch("/api/project-config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s,projectConfig:{mockingIntercept:C.mockingIntercept,mockOpen:e}})}),a=await t.json();if(a.success)i(t=>t?{...t,mockOpen:e}:t),E(e=>({...e,saving:!1,saveMessage:"Mock开启配置已保存"})),setTimeout(()=>{E(e=>({...e,saveMessage:""}))},2e3);else throw Error(a.error||"保存失败")}catch(t){console.error("保存Mock开启配置失败:",t),E(s=>({...s,mockOpen:!e,saving:!1,saveMessage:"保存失败: ".concat(t instanceof Error?t.message:"未知错误")})),setTimeout(()=>{E(e=>({...e,saveMessage:""}))},3e3)}},e5=async e=>{var t,a;if(!c||!s)return;let n=null==(a=y[e])||null==(t=a.selectedProxy)?void 0:t.trim();if(!n)return void w(t=>({...t,[e]:{...t[e],saveMessage:"请先选择或填写代理地址"}}));let r=c.envs[e],l=!Object.values(r.proxyEnv).includes(n);w(t=>({...t,[e]:{...t[e],saving:!0,saveMessage:""}}));try{let t={projectName:s,envName:e,newProxy:l?"custom":Object.keys(r.proxyEnv).find(e=>r.proxyEnv[e]===n)||""};l&&(t.customProxyUrl=n);let a=await fetch("/api/project-config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),c=await a.json();c.success?(i(t=>{if(!t)return t;let s={...t.envs};return s[e]={...s[e],currentProxy:c.data.currentProxy},"custom"===c.data.currentProxy&&(s[e].proxyEnv={...s[e].proxyEnv,custom:n}),{...t,envs:s}}),w(t=>({...t,[e]:{...t[e],saving:!1,saveMessage:"保存成功"}}))):w(t=>({...t,[e]:{...t[e],saving:!1,saveMessage:"保存失败: ".concat(c.error)}}))}catch(t){console.error("保存配置失败:",t),w(t=>({...t,[e]:{...t[e],saving:!1,saveMessage:"保存失败: 网络错误"}}))}},e2=async()=>{if(s){B(!0);try{let e=await fetch("/api/mock-file?project=".concat(encodeURIComponent(s))),t=await e.json();t.success?A(t.data):console.error("获取Mock数据失败:",t.error)}catch(e){console.error("获取Mock数据失败:",e)}finally{B(!1)}}},e4=async(e,t,a)=>{if(s)try{let n=await fetch("/api/mock-setting",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s,apiName:e,method:t,currentSite:a})}),r=await n.json();r.success?A(s=>s?{...s,mockFiles:s.mockFiles.map(s=>s.apiName===e?{...s,methods:s.methods.map(e=>e.method===t?{...e,setting:{...e.setting,currentSite:a}}:e)}:s)}:s):(console.error("更新场景失败:",r.error),alert("更新场景失败: ".concat(r.error)))}catch(e){console.error("更新场景失败:",e),alert("更新场景失败: 网络错误")}},e6=async(e,t,a)=>{if(s){el(!0),ed(!0);try{let n=await fetch("/api/mock-file-content?project=".concat(encodeURIComponent(s),"&apiName=").concat(encodeURIComponent(e),"&method=").concat(encodeURIComponent(t),"&siteName=").concat(encodeURIComponent(a))),r=await n.json();r.success?(es({projectName:s,apiName:e,method:t,siteName:a,content:r.data.content}),en(!0)):(console.error("获取文件内容失败:",r.error),alert("获取文件内容失败: ".concat(r.error)))}catch(e){console.error("获取文件内容失败:",e),alert("获取文件内容失败: 网络错误")}finally{el(!1)}}},e3=async()=>{if(et){ei(!0);try{let e=await fetch("/api/mock-file-content",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(et)}),t=await e.json();t.success?(en(!1),es(null)):(console.error("保存文件失败:",t.error),alert("保存文件失败: ".concat(t.error)))}catch(e){console.error("保存文件失败:",e),alert("保存文件失败: 网络错误")}finally{ei(!1)}}},e8=()=>{en(!1),es(null),ed(!0)},e7=(e,t)=>{"siteName"===e&&ef||ey(s=>({...s,[e]:t}))},e9=(e,t)=>{let s=e.toUpperCase(),a=t.replace(/\//g,"_").replace(/^_/,"");switch(s){case"GET":return'module.exports = {\n "code": 200,\n "message": "获取'.concat(a,'成功",\n "data": {\n "id": 1,\n "name": "示例数据",\n "status": "active",\n "createTime": "2024-01-01 12:00:00"\n }\n}');case"POST":return'module.exports = {\n "code": 200,\n "message": "创建'.concat(a,'成功",\n "data": {\n "id": 1,\n "result": "success"\n }\n}');case"PUT":return'module.exports = {\n "code": 200,\n "message": "更新'.concat(a,'成功",\n "data": {\n "result": "success"\n }\n}');case"DELETE":return'module.exports = {\n "code": 200,\n "message": "删除'.concat(a,'成功",\n "data": {\n "result": "success"\n }\n}');default:return'module.exports = {\n "code": 200,\n "message": "操作成功",\n "data": {}\n}'}},te=(e,t,s)=>{if(!R)return!1;let a=e.replace(/\//g,"_").replace(/^_/,""),n=R.mockFiles.find(e=>e.apiName===a);if(!n)return!1;let r=n.methods.find(e=>e.method.toLowerCase()===t.toLowerCase());return!!r&&!!r.files.find(e=>e.siteName===s)},tt=async()=>{if(!eN.apiPath.trim())return void alert("请输入接口地址");if(te(eN.apiPath,eN.method,eN.siteName))return void alert("接口 ".concat(eN.apiPath," [").concat(eN.method.toUpperCase(),'] 的场景 "').concat(eN.siteName,'" 已存在,不能重复创建'));eS(!0);try{let e=eN.apiPath.replace(/\//g,"_").replace(/^_/,""),t=e9(eN.method,eN.apiPath),a=await fetch("/api/mock-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s,apiName:e,method:eN.method.toLowerCase(),siteName:eN.siteName,content:t})}),n=await a.json();if(n.success)eN.mockOpen&&await tr(e,eN.method.toLowerCase(),eN.siteName,!0),ey({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0}),ej(!1),await e2(),alert("Mock文件创建成功");else throw Error(n.error||"创建失败")}catch(e){console.error("创建Mock文件失败:",e),alert("创建Mock文件失败: ".concat(e instanceof Error?e.message:"未知错误"))}finally{eS(!1)}},ts=(e,t,s)=>{console.log("新增场景点击:",{apiName:e,method:t,apiPath:s}),ek({apiName:e,method:t,apiPath:s});let a={apiPath:s,method:t.toUpperCase(),siteName:"",mockOpen:!0};console.log("设置表单数据:",a),ey(a),eb(!0)},ta=(e,t,s)=>{if(!R)return!1;let a=R.mockFiles.find(t=>t.apiName===e);if(!a)return!1;let n=a.methods.find(e=>e.method.toLowerCase()===t.toLowerCase());return!!n&&!!n.files.find(e=>e.siteName===s)},tn=async()=>{if(!ew||!eN.siteName.trim())return void alert("请输入场景名称");if(ta(ew.apiName,ew.method,eN.siteName))return void alert("接口 ".concat(ew.apiPath," [").concat(ew.method.toUpperCase(),'] 的场景 "').concat(eN.siteName,'" 已存在'));eS(!0);try{let e=e9(ew.method,ew.apiPath),t=await fetch("/api/mock-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s,apiName:ew.apiName,method:ew.method.toLowerCase(),siteName:eN.siteName,content:e})}),a=await t.json();if(a.success)eN.mockOpen&&await tr(ew.apiName,ew.method,eN.siteName,!0),ey({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0}),eb(!1),ek(null),await e2(),alert("场景创建成功");else throw Error(a.error||"创建失败")}catch(e){console.error("创建场景失败:",e),alert("创建场景失败: ".concat(e instanceof Error?e.message:"未知错误"))}finally{eS(!1)}},tr=async(e,t,s,a)=>{if(c)try{let n=await fetch("/api/mock-open-status",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:c.projectName,apiName:e,method:t,siteName:s,isOpen:a})}),r=await n.json();r.success?await e2():console.error("更新Mock开启状态失败:",r.error)}catch(e){console.error("更新Mock开启状态失败:",e)}},tl=e=>{eP(e),W(1)};if(x)return(0,a.jsx)("main",{className:"container mx-auto p-4 sm:p-6 md:p-8",children:(0,a.jsx)("div",{className:"text-center py-8",children:(0,a.jsx)("p",{children:"加载中..."})})});if(p||!c)return(0,a.jsxs)("main",{className:"container mx-auto p-4 sm:p-6 md:p-8",children:[(0,a.jsxs)("div",{className:"flex justify-between items-center mb-6",children:[(0,a.jsx)("h1",{className:"text-2xl font-bold",children:"项目配置"}),(0,a.jsxs)("div",{className:"flex gap-2",children:[s&&(0,a.jsx)(l.$,{variant:"default",onClick:eG,disabled:I,children:I?"打开中...":"在 Cursor 中打开"}),(0,a.jsx)(l.$,{variant:"outline",onClick:eD,children:"返回初始化页面"})]})]}),(0,a.jsx)("div",{className:"text-center text-red-500 py-8",children:(0,a.jsx)("p",{children:p||"未找到项目配置"})})]});let tc=Object.keys(c.envs);return(0,a.jsxs)("main",{className:"container mx-auto p-4 sm:p-6 md:p-8",children:[(0,a.jsxs)("div",{className:"flex justify-between items-center mb-6",children:[(0,a.jsxs)("div",{className:"flex items-center gap-4",children:[(0,a.jsxs)("h1",{className:"text-2xl font-bold",children:[c.projectName," - 项目配置"]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(S,{className:"text-sm font-medium text-gray-600",children:"切换项目:"}),(0,a.jsxs)(f,{value:s||"",onValueChange:a=>{if(a===s)return;let n=e.get("tab"),r="/configuration?project=".concat(encodeURIComponent(a)).concat(n?"&tab=".concat(n):"");t.push(r)},disabled:ep,children:[(0,a.jsx)(v,{className:"w-40",children:(0,a.jsx)(j,{placeholder:ep?"加载中...":"选择项目"})}),(0,a.jsx)(b,{children:ex.map(e=>(0,a.jsx)(N,{value:e.name,children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"w-2 h-2 rounded-full ".concat("existing"===e.status?"bg-green-500":"failed"===e.status?"bg-red-500":"bg-yellow-500")}),(0,a.jsx)("span",{children:e.name})]})},e.name))})]})]})]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(l.$,{variant:"default",onClick:eG,disabled:I,children:I?"打开中...":"在 Cursor 中打开"}),(0,a.jsx)(l.$,{variant:"outline",onClick:eD,children:"返回初始化页面"})]})]}),tc.length>0?(0,a.jsxs)(o,{value:Q||tc[0],onValueChange:e=>{ee(e),"mock"===e&&e2()},className:"w-full",children:[(0,a.jsxs)(d,{className:"grid w-full",style:{gridTemplateColumns:"repeat(".concat(tc.length+1,", 1fr)")},children:[tc.map(e=>{var t;return(0,a.jsx)(m,{value:e,className:"capitalize relative",children:(0,a.jsxs)("span",{className:"flex items-center gap-2",children:[e,(null==(t=eT[e])?void 0:t.running)&&(0,a.jsx)("span",{className:"w-2 h-2 bg-green-500 rounded-full animate-pulse",title:"运行中"})]})},e)}),(0,a.jsx)(m,{value:"mock",className:"capitalize",children:"Mock配置"})]}),tc.map(e=>{var t,s,n,r,i,o,d,m,x,h,p,g,w,C;let E=c.envs[e],P=Object.entries(E.proxyEnv),T=(null==(t=y[e])?void 0:t.selectedProxy)||"",O=(null==(s=y[e])?void 0:s.selectedOption)||"",M=E.currentProxy,z=E.proxyEnv[M]||M,L=E.proxyEnv[M]?M:"custom";return(0,a.jsxs)(u,{value:e,className:"space-y-6",children:[(0,a.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,a.jsx)("h3",{className:"text-lg font-semibold",children:"开发服务器控制"}),(0,a.jsx)("div",{className:"flex items-center gap-4",children:(null==(n=eT[e])?void 0:n.running)?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("span",{className:"flex items-center gap-2 text-sm text-green-600",children:[(0,a.jsx)("span",{className:"w-2 h-2 bg-green-500 rounded-full animate-pulse"}),"运行中 (PID: ",null==(r=eT[e])?void 0:r.pid,")"]}),(0,a.jsx)(l.$,{variant:"outline",size:"sm",onClick:()=>eq(e),children:"查看日志"}),(0,a.jsx)(l.$,{variant:"destructive",size:"sm",onClick:()=>eH(e),disabled:null==(i=eT[e])?void 0:i.loading,children:(null==(o=eT[e])?void 0:o.loading)?"处理中...":"停止"})]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("span",{className:"flex items-center gap-2 text-sm text-gray-500",children:[(0,a.jsx)("span",{className:"w-2 h-2 bg-gray-400 rounded-full"}),"未运行"]}),(0,a.jsx)(l.$,{variant:"outline",size:"sm",onClick:()=>eq(e),children:"查看日志"}),(0,a.jsx)(l.$,{variant:"default",size:"sm",onClick:()=>eV(e),disabled:(null==(d=eT[e])?void 0:d.loading)||!E.startCommand,children:(null==(m=eT[e])?void 0:m.loading)?"处理中...":"启动"})]})})]}),E.startCommand?(0,a.jsxs)("div",{className:"text-sm text-gray-600",children:[(0,a.jsx)("span",{className:"font-medium",children:"启动命令:"})," ",(0,a.jsx)("code",{className:"px-2 py-1 bg-gray-200 rounded",children:E.startCommand})]}):(0,a.jsx)("div",{className:"text-sm text-yellow-600",children:"⚠️ 该环境未配置启动命令"}),E.host&&(0,a.jsxs)("div",{className:"text-sm text-gray-600 mt-2",children:[(0,a.jsx)("span",{className:"font-medium",children:"访问地址:"}),(null==(x=eT[e])?void 0:x.running)?(0,a.jsx)("a",{href:E.host,target:"_blank",rel:"noopener noreferrer",className:"ml-2 text-blue-600 hover:underline",children:E.host}):(0,a.jsx)("span",{className:"ml-2",children:E.host})]})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[(0,a.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg",children:[(0,a.jsxs)("h3",{className:"text-lg font-semibold mb-4",children:[e," 环境配置"]}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)(S,{className:"block text-sm font-medium mb-2",children:"接口代理环境切换"}),(0,a.jsxs)(f,{value:O,onValueChange:t=>eX(e,t),children:[(0,a.jsx)(v,{className:"w-full",children:(0,a.jsx)(j,{placeholder:"选择代理环境"})}),(0,a.jsx)(b,{children:P.map(e=>{let[t,s]=e;return(0,a.jsxs)(N,{value:t,children:[t,"(",s,")"]},t)})})]})]}),z&&(0,a.jsxs)("div",{className:"p-3 bg-blue-50 rounded-md",children:[(0,a.jsxs)("p",{className:"text-sm text-blue-700",children:["当前项目接口已代理至:",L," 环境"]}),(0,a.jsxs)("p",{className:"text-sm text-blue-600",children:["代理地址为:",z]})]}),"custom"===O&&(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(S,{className:"block text-sm font-medium",children:"自定义代理地址"}),(0,a.jsx)(k,{type:"url",placeholder:"请输入自定义代理地址 (如: http://localhost:52741)",value:T,onChange:t=>eQ(e,t.target.value),className:"w-full"}),(0,a.jsx)("p",{className:"text-xs text-gray-500",children:"请输入完整的代理地址,包括协议 (http:// 或 https://)"})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)(l.$,{onClick:()=>e5(e),disabled:null==(h=y[e])?void 0:h.saving,className:"w-full sm:w-auto",children:(null==(p=y[e])?void 0:p.saving)?"保存中...":"保存配置"}),(null==(g=y[e])?void 0:g.saveMessage)&&(0,a.jsx)("span",{className:"text-sm ml-3 ".concat((null==(w=y[e])?void 0:w.saveMessage)==="保存成功"?"text-green-600":"text-red-600"),children:null==(C=y[e])?void 0:C.saveMessage})]})]})]}),(0,a.jsx)(K,{currentProjectName:c.projectName,currentEnvName:e})]})]},e)}),(0,a.jsx)(u,{value:"mock",className:"space-y-6",children:(0,a.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg",children:[(0,a.jsx)("h3",{className:"text-lg font-semibold mb-4",children:"Mock配置"}),(0,a.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6 mb-6",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)(S,{className:"text-sm font-medium",children:"Mock拦截"}),(0,a.jsx)("p",{className:"text-xs text-gray-500",children:"启用或禁用Mock拦截功能"})]}),(0,a.jsx)(P,{checked:C.mockingIntercept,onCheckedChange:e0})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)(S,{className:"text-sm font-medium",children:"Mock开启"}),(0,a.jsx)("p",{className:"text-xs text-gray-500",children:"启用或禁用Mock功能"})]}),(0,a.jsx)(P,{checked:C.mockOpen,onCheckedChange:e1})]})]}),C.saveMessage&&(0,a.jsx)("div",{className:"mb-6",children:(0,a.jsx)("span",{className:"text-sm ".concat(C.saveMessage.includes("已保存")?"text-green-600":"text-red-600"),children:C.saveMessage})}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)("h4",{className:"text-md font-medium",children:"Mock接口列表"}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(l.$,{onClick:()=>ej(!0),variant:"default",size:"sm",children:"新建"}),(0,a.jsx)(l.$,{onClick:e2,disabled:Z,variant:"outline",size:"sm",children:Z?"加载中...":"刷新"})]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)("div",{className:"relative flex-1 max-w-md",children:[(0,a.jsx)(k,{placeholder:"搜索接口地址...",value:eE,onChange:e=>tl(e.target.value),className:"pr-8"}),eE&&(0,a.jsx)(l.$,{variant:"ghost",size:"sm",onClick:()=>{eP(""),W(1)},className:"absolute right-1 top-1/2 transform -translate-y-1/2 h-6 w-6 p-0 hover:bg-gray-100",children:"\xd7"})]}),eE&&(0,a.jsxs)("span",{className:"text-sm text-gray-500",children:['搜索关键词: "',eE,'"']})]}),Z?(0,a.jsx)("div",{className:"text-center py-8",children:(0,a.jsx)("p",{className:"text-gray-500",children:"加载Mock数据中..."})}):R&&R.mockFiles.length>0?(()=>{let e=[];R.mockFiles.forEach(t=>{t.methods.forEach(s=>{var a,n;let r=t.apiName.replace(/_/g,"/"),l=s.files.map(e=>e.siteName),c=(null==(a=s.setting)?void 0:a.currentSite)||l[0]||"",i=(null==(n=s.setting)?void 0:n.open)||[],o=i.includes(c);e.push({apiPath:r,method:s.method.toUpperCase(),currentSite:c,availableSites:l,apiName:t.apiName,isOpen:o,openSites:i})})});let t=eE.trim()?e.filter(e=>e.apiPath.toLowerCase().includes(eE.toLowerCase())):e,s=t.length,n=Math.ceil(s/X),r=(q-1)*X,c=r+X,i=t.slice(r,c);return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)(T,{children:[(0,a.jsx)(O,{children:(0,a.jsxs)(z,{children:[(0,a.jsx)(L,{children:"接口地址"}),(0,a.jsx)(L,{children:"请求方法"}),(0,a.jsx)(L,{children:"当前场景"}),(0,a.jsx)(L,{children:"开启mock"}),(0,a.jsx)(L,{children:"操作"})]})}),(0,a.jsx)(M,{children:i.map((e,t)=>(0,a.jsxs)(z,{children:[(0,a.jsx)(U,{className:"font-medium",children:e.apiPath}),(0,a.jsx)(U,{children:(0,a.jsx)("span",{className:"px-2 py-1 rounded text-xs font-medium ".concat("GET"===e.method?"bg-green-100 text-green-800":"POST"===e.method?"bg-blue-100 text-blue-800":"PUT"===e.method?"bg-yellow-100 text-yellow-800":"DELETE"===e.method?"bg-red-100 text-red-800":"bg-gray-100 text-gray-800"),children:e.method})}),(0,a.jsx)(U,{children:(0,a.jsxs)(f,{value:e.currentSite,onValueChange:t=>e4(e.apiName,e.method.toLowerCase(),t),children:[(0,a.jsx)(v,{className:"w-32",children:(0,a.jsx)(j,{})}),(0,a.jsx)(b,{children:e.availableSites.map(e=>(0,a.jsx)(N,{value:e,children:e},e))})]})}),(0,a.jsx)(U,{children:(0,a.jsx)(P,{checked:e.isOpen,onCheckedChange:t=>tr(e.apiName,e.method.toLowerCase(),e.currentSite,t)})}),(0,a.jsx)(U,{children:(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(l.$,{variant:"outline",size:"sm",onClick:()=>e6(e.apiName,e.method.toLowerCase(),e.currentSite),disabled:er,children:er?"加载中...":"编辑"}),(0,a.jsx)(l.$,{variant:"outline",size:"sm",onClick:()=>ts(e.apiName,e.method.toLowerCase(),e.apiPath),disabled:eC,children:"新增场景"})]})})]},"".concat(e.apiName,"-").concat(e.method,"-").concat(t)))})]}),n>1&&(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"text-sm text-gray-500",children:["显示 ",r+1,"-",Math.min(c,s)," 条,共 ",s," 条"]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(l.$,{variant:"outline",size:"sm",onClick:()=>W(e=>Math.max(1,e-1)),disabled:1===q,children:"上一页"}),(0,a.jsxs)("span",{className:"text-sm",children:[q," / ",n]}),(0,a.jsx)(l.$,{variant:"outline",size:"sm",onClick:()=>W(e=>Math.min(n,e+1)),disabled:q===n,children:"下一页"})]})]})]})})():(0,a.jsxs)("div",{className:"text-center py-8",children:[(0,a.jsx)("p",{className:"text-gray-500",children:"暂无Mock接口数据"}),(0,a.jsx)("p",{className:"text-xs text-gray-400 mt-1",children:"请先创建Mock文件"})]})]})]})})]}):(0,a.jsx)("div",{className:"text-center text-gray-500 py-8",children:(0,a.jsx)("p",{children:"该项目没有配置环境信息"})}),(0,a.jsx)($,{open:ea||ef||ev,onOpenChange:e=>{e||(en(!1),ej(!1),eb(!1),ek(null))},children:(0,a.jsxs)(D,{className:"w-screen h-screen max-w-none max-h-none m-0 rounded-none overflow-hidden flex flex-col",children:[(0,a.jsxs)(F,{className:"flex-shrink-0 border-b pb-4",children:[(0,a.jsx)(J,{children:ef?"新建Mock文件":ev?"新增场景":"编辑Mock文件"}),(0,a.jsx)(V,{children:ef?"创建一个新的Mock接口文件":ev&&ew?(0,a.jsxs)(a.Fragment,{children:["为接口 ",ew.apiPath," [",ew.method.toUpperCase(),"] 新增场景"]}):et?(0,a.jsxs)(a.Fragment,{children:["编辑 ",et.apiName.replace(/_/g,"/")," - ",et.method.toUpperCase()," - ",et.siteName,".js"]}):null})]}),(ef||ev)&&(0,a.jsxs)("div",{className:"flex-shrink-0 border-b pb-4",children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(S,{htmlFor:"apiPath",className:"text-sm font-medium",children:"接口地址"}),ev?(0,a.jsx)("div",{className:"px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-sm text-gray-600",children:eN.apiPath}):(0,a.jsx)(k,{id:"apiPath",placeholder:"/api/user/info",value:eN.apiPath,onChange:e=>e7("apiPath",e.target.value)})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(S,{htmlFor:"method",className:"text-sm font-medium",children:"请求方法"}),ev?(0,a.jsx)("div",{className:"px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-sm text-gray-600",children:eN.method}):(0,a.jsxs)(f,{value:eN.method,onValueChange:e=>e7("method",e),children:[(0,a.jsx)(v,{children:(0,a.jsx)(j,{})}),(0,a.jsxs)(b,{children:[(0,a.jsx)(N,{value:"GET",children:"GET"}),(0,a.jsx)(N,{value:"POST",children:"POST"}),(0,a.jsx)(N,{value:"PUT",children:"PUT"}),(0,a.jsx)(N,{value:"DELETE",children:"DELETE"}),(0,a.jsx)(N,{value:"PATCH",children:"PATCH"})]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(S,{htmlFor:"siteName",className:"text-sm font-medium",children:"场景名称"}),ef?(0,a.jsx)("div",{className:"px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-sm text-gray-600",children:"默认场景"}):(0,a.jsx)(k,{id:"siteName",placeholder:"请输入场景名称",value:eN.siteName,onChange:e=>e7("siteName",e.target.value)})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(S,{htmlFor:"mockOpen",className:"text-sm font-medium",children:"开启Mock"}),(0,a.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,a.jsx)(P,{id:"mockOpen",checked:eN.mockOpen,onCheckedChange:e=>e7("mockOpen",e)}),(0,a.jsx)("span",{className:"text-sm text-gray-600",children:eN.mockOpen?"开启":"关闭"})]})]})]}),ef&&eN.apiPath.trim()&&eN.siteName.trim()&&te(eN.apiPath,eN.method,eN.siteName)&&(0,a.jsx)("div",{className:"mt-4 p-3 bg-red-50 border border-red-200 rounded-md",children:(0,a.jsx)("div",{className:"flex items-center",children:(0,a.jsxs)("span",{className:"text-red-600 text-sm",children:["⚠️ 接口 ",eN.apiPath," [",eN.method.toUpperCase(),'] 的场景 "',eN.siteName,'" 已存在']})})}),ev&&ew&&eN.siteName.trim()&&ta(ew.apiName,ew.method,eN.siteName)&&(0,a.jsx)("div",{className:"mt-4 p-3 bg-red-50 border border-red-200 rounded-md",children:(0,a.jsx)("div",{className:"flex items-center",children:(0,a.jsxs)("span",{className:"text-red-600 text-sm",children:['⚠️ 场景 "',eN.siteName,'" 已存在']})})})]}),(0,a.jsx)("div",{className:"flex-1 flex flex-col space-y-4 py-4",children:(0,a.jsxs)("div",{className:"flex-1 flex flex-col",children:[(0,a.jsx)(S,{className:"text-sm font-medium mb-2",children:"文件内容"}),(0,a.jsxs)("div",{className:"flex-1 border rounded-md overflow-hidden relative",children:[eo&&(0,a.jsx)("div",{className:"absolute inset-0 bg-gray-50 flex items-center justify-center z-10",children:(0,a.jsx)("p",{className:"text-gray-500",children:"编辑器加载中..."})}),(0,a.jsx)(H.Ay,{height:"100%",defaultLanguage:"javascript",value:ef||ev?e9(eN.method,eN.apiPath):(null==et?void 0:et.content)||"",onChange:e=>{ef||ev||es(t=>t?{...t,content:e||""}:null)},onMount:async e=>{console.log("编辑器挂载,模式:",{isCreateMode:ef,isAddSceneMode:ev,createFormData:eN}),eu(e),ed(!1),setTimeout(()=>eA(e),500)},loading:(0,a.jsx)("div",{className:"flex items-center justify-center h-full",children:(0,a.jsx)("p",{className:"text-gray-500",children:"编辑器加载中..."})}),options:{minimap:{enabled:!1},fontSize:14,lineNumbers:"on",roundedSelection:!1,scrollBeyondLastLine:!1,automaticLayout:!0,tabSize:2,insertSpaces:!0,wordWrap:"on",theme:"vs-dark",bracketPairColorization:{enabled:!0},quickSuggestions:{other:!0,comments:!0,strings:!0},formatOnPaste:!0,formatOnType:!0,readOnly:ef&&!eN.apiPath.trim()||ev&&!eN.apiPath.trim()}},ef?"create":ev?"addscene":"edit")]})]})}),(0,a.jsxs)(G,{className:"flex justify-between flex-shrink-0 border-t pt-4",children:[(0,a.jsx)(l.$,{variant:"secondary",onClick:e$,disabled:!em||eo,children:"格式化代码"}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(l.$,{variant:"outline",onClick:()=>{ef?(ej(!1),ey({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0})):ev?(eb(!1),ek(null),ey({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0})):e8()},children:"取消"}),ef?(0,a.jsx)(l.$,{onClick:tt,disabled:eC||!eN.apiPath.trim()||!eN.siteName.trim()||te(eN.apiPath,eN.method,eN.siteName),children:eC?"创建中...":"创建"}):ev?(0,a.jsx)(l.$,{onClick:tn,disabled:eC||!eN.siteName.trim()||!!ew&&ta(ew.apiName,ew.method,eN.siteName),children:eC?"创建中...":"创建"}):(0,a.jsx)(l.$,{onClick:e3,disabled:ec,children:ec?"保存中...":"保存"})]})]})]})}),(0,a.jsx)($,{open:eM,onOpenChange:e=>{e||eW()},children:(0,a.jsxs)(D,{className:"max-w-5xl h-[85vh] max-h-[85vh] flex flex-col p-0",children:[(0,a.jsxs)(F,{className:"px-6 pt-6 pb-4",children:[(0,a.jsxs)(J,{className:"flex items-center justify-between",children:[(0,a.jsxs)("span",{children:["进程日志 - ",s," - ",eL]}),(0,a.jsx)("span",{className:"flex items-center gap-2 text-sm font-normal",children:eK&&(0,a.jsxs)("span",{className:"flex items-center gap-1 text-green-600",children:[(0,a.jsx)("span",{className:"w-2 h-2 bg-green-500 rounded-full animate-pulse"}),"实时连接"]})})]}),(0,a.jsx)(V,{children:"实时显示进程输出日志"})]}),(0,a.jsx)("div",{className:"flex-1 min-h-0 bg-gray-900 mx-6 rounded-md overflow-hidden",children:(0,a.jsx)(Y,{logs:eI})}),(0,a.jsxs)(G,{className:"flex items-center justify-between px-6 pb-6 pt-4",children:[(0,a.jsxs)("div",{className:"text-sm text-gray-500",children:["共 ",eI.length," 条日志"]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(l.$,{variant:"outline",onClick:()=>{eL&&(eY(),eB(eL))},disabled:!!eK,children:"重新连接"}),(0,a.jsx)(l.$,{variant:"default",onClick:eW,children:"关闭"})]})]})]})})]})}function X(){return(0,a.jsx)(n.Suspense,{fallback:(0,a.jsx)("div",{className:"min-h-screen bg-gray-50 flex items-center justify-center",children:(0,a.jsxs)("div",{className:"text-center space-y-4",children:[(0,a.jsx)("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600 mx-auto"}),(0,a.jsx)("p",{className:"text-gray-600",children:"正在加载配置页面..."})]})}),children:(0,a.jsx)(W,{})})}},7541:(e,t,s)=>{"use strict";s.d(t,{$:()=>i});var a=s(5167);s(6343);var n=s(7775),r=s(2703),l=s(6162);let c=(0,r.F)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",destructive:"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9"}},defaultVariants:{variant:"default",size:"default"}});function i(e){let{className:t,variant:s,size:r,asChild:i=!1,...o}=e,d=i?n.DX:"button";return(0,a.jsx)(d,{"data-slot":"button",className:(0,l.cn)(c({variant:s,size:r,className:t})),...o})}}},e=>{var t=t=>e(e.s=t);e.O(0,[167,495,619,180,358],()=>t(2190)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[823],{2190:(e,t,s)=>{Promise.resolve().then(s.bind(s,6175))},6162:(e,t,s)=>{"use strict";s.d(t,{cn:()=>r});var a=s(4407),n=s(1467);function r(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];return(0,n.QP)((0,a.$)(t))}},6175:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>X});var a=s(5167),n=s(6343),r=s(1349),l=s(7541),c=s(508),i=s(6162);function o(e){let{className:t,...s}=e;return(0,a.jsx)(c.bL,{"data-slot":"tabs",className:(0,i.cn)("flex flex-col gap-2",t),...s})}function d(e){let{className:t,...s}=e;return(0,a.jsx)(c.B8,{"data-slot":"tabs-list",className:(0,i.cn)("bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]",t),...s})}function m(e){let{className:t,...s}=e;return(0,a.jsx)(c.l9,{"data-slot":"tabs-trigger",className:(0,i.cn)("data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...s})}function u(e){let{className:t,...s}=e;return(0,a.jsx)(c.UC,{"data-slot":"tabs-content",className:(0,i.cn)("flex-1 outline-none",t),...s})}var x=s(8358),h=s(7151),p=s(5211),g=s(9926);function f(e){let{...t}=e;return(0,a.jsx)(x.bL,{"data-slot":"select",...t})}function j(e){let{...t}=e;return(0,a.jsx)(x.WT,{"data-slot":"select-value",...t})}function v(e){let{className:t,size:s="default",children:n,...r}=e;return(0,a.jsxs)(x.l9,{"data-slot":"select-trigger","data-size":s,className:(0,i.cn)("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...r,children:[n,(0,a.jsx)(x.In,{asChild:!0,children:(0,a.jsx)(h.A,{className:"size-4 opacity-50"})})]})}function b(e){let{className:t,children:s,position:n="popper",...r}=e;return(0,a.jsx)(x.ZL,{children:(0,a.jsxs)(x.UC,{"data-slot":"select-content",className:(0,i.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md","popper"===n&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",t),position:n,...r,children:[(0,a.jsx)(y,{}),(0,a.jsx)(x.LM,{className:(0,i.cn)("p-1","popper"===n&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:s}),(0,a.jsx)(w,{})]})})}function N(e){let{className:t,children:s,...n}=e;return(0,a.jsxs)(x.q7,{"data-slot":"select-item",className:(0,i.cn)("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",t),...n,children:[(0,a.jsx)("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:(0,a.jsx)(x.VF,{children:(0,a.jsx)(p.A,{className:"size-4"})})}),(0,a.jsx)(x.p4,{children:s})]})}function y(e){let{className:t,...s}=e;return(0,a.jsx)(x.PP,{"data-slot":"select-scroll-up-button",className:(0,i.cn)("flex cursor-default items-center justify-center py-1",t),...s,children:(0,a.jsx)(g.A,{className:"size-4"})})}function w(e){let{className:t,...s}=e;return(0,a.jsx)(x.wn,{"data-slot":"select-scroll-down-button",className:(0,i.cn)("flex cursor-default items-center justify-center py-1",t),...s,children:(0,a.jsx)(h.A,{className:"size-4"})})}function k(e){let{className:t,type:s,...n}=e;return(0,a.jsx)("input",{type:s,"data-slot":"input",className:(0,i.cn)("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",t),...n})}var C=s(7752);function S(e){let{className:t,...s}=e;return(0,a.jsx)(C.b,{"data-slot":"label",className:(0,i.cn)("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",t),...s})}var E=s(7807);function P(e){let{className:t,...s}=e;return(0,a.jsx)(E.bL,{"data-slot":"switch",className:(0,i.cn)("peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",t),...s,children:(0,a.jsx)(E.zi,{"data-slot":"switch-thumb",className:(0,i.cn)("bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0")})})}function T(e){let{className:t,...s}=e;return(0,a.jsx)("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:(0,a.jsx)("table",{"data-slot":"table",className:(0,i.cn)("w-full caption-bottom text-sm",t),...s})})}function O(e){let{className:t,...s}=e;return(0,a.jsx)("thead",{"data-slot":"table-header",className:(0,i.cn)("[&_tr]:border-b",t),...s})}function M(e){let{className:t,...s}=e;return(0,a.jsx)("tbody",{"data-slot":"table-body",className:(0,i.cn)("[&_tr:last-child]:border-0",t),...s})}function z(e){let{className:t,...s}=e;return(0,a.jsx)("tr",{"data-slot":"table-row",className:(0,i.cn)("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",t),...s})}function L(e){let{className:t,...s}=e;return(0,a.jsx)("th",{"data-slot":"table-head",className:(0,i.cn)("text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",t),...s})}function U(e){let{className:t,...s}=e;return(0,a.jsx)("td",{"data-slot":"table-cell",className:(0,i.cn)("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",t),...s})}var I=s(7890),_=s(4279);function $(e){let{...t}=e;return(0,a.jsx)(I.bL,{"data-slot":"dialog",...t})}function R(e){let{...t}=e;return(0,a.jsx)(I.ZL,{"data-slot":"dialog-portal",...t})}function A(e){let{className:t,...s}=e;return(0,a.jsx)(I.hJ,{"data-slot":"dialog-overlay",className:(0,i.cn)("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",t),...s})}function D(e){let{className:t,children:s,showCloseButton:n=!0,...r}=e;return(0,a.jsxs)(R,{"data-slot":"dialog-portal",children:[(0,a.jsx)(A,{}),(0,a.jsxs)(I.UC,{"data-slot":"dialog-content",className:(0,i.cn)("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200",t),...r,children:[s,n&&(0,a.jsxs)(I.bm,{"data-slot":"dialog-close",className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[(0,a.jsx)(_.A,{}),(0,a.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function F(e){let{className:t,...s}=e;return(0,a.jsx)("div",{"data-slot":"dialog-header",className:(0,i.cn)("flex flex-col gap-2 text-center sm:text-left",t),...s})}function J(e){let{className:t,...s}=e;return(0,a.jsx)("div",{"data-slot":"dialog-footer",className:(0,i.cn)("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",t),...s})}function G(e){let{className:t,...s}=e;return(0,a.jsx)(I.hE,{"data-slot":"dialog-title",className:(0,i.cn)("text-lg leading-none font-semibold",t),...s})}function V(e){let{className:t,...s}=e;return(0,a.jsx)(I.VY,{"data-slot":"dialog-description",className:(0,i.cn)("text-muted-foreground text-sm",t),...s})}var H=s(4064);function K(e){let{className:t,currentProjectName:s,currentEnvName:r}=e,[c,i]=(0,n.useState)([]),[o,d]=(0,n.useState)(!0),[m,u]=(0,n.useState)(null),[x,h]=(0,n.useState)(new Set),[p,g]=(0,n.useState)(""),[f,j]=(0,n.useState)(!1),[v,b]=(0,n.useState)(""),[N,y]=(0,n.useState)(!1),[w,C]=(0,n.useState)(null),S=(0,n.useRef)(null);(0,n.useEffect)(()=>{if(c.length>0){let e=c.find(e=>e.projectName===s&&e.envName===r);if(e&&e.subApps.length>0){let t=new Set;e.subApps.forEach(e=>{c.forEach(s=>{s.envName===e&&t.add($(s))})}),h(t)}}},[c,s,r]);let E=async()=>{d(!0),u(null);try{let e=await fetch("/api/all-projects-envs"),t=await e.json();t.success?i(t.data):u(t.error||"获取项目环境信息失败")}catch(e){console.error("获取项目环境信息失败:",e),u("获取项目环境信息失败: 网络错误")}finally{d(!1)}};(0,n.useEffect)(()=>(E(),P(),()=>{I()}),[r]);let P=()=>{S.current&&I();let e="microapp-table-".concat(Date.now(),"-").concat(Math.random().toString(36).substr(2,9)),t="/api/microapp-proxy-change-stream?env=".concat(encodeURIComponent(r),"&clientId=").concat(encodeURIComponent(e));console.log("[SSE] 建立连接到: ".concat(t)),C(null);try{let e=new EventSource(t);S.current=e,e.onopen=()=>{console.log("[SSE] 连接已建立,环境: ".concat(r)),y(!0),C(null)},e.onmessage=e=>{try{let t=JSON.parse(e.data);_(t)}catch(e){console.error("[SSE] 解析消息失败:",e)}},e.onerror=()=>{console.error("[SSE] 连接错误,环境: ".concat(r)),y(!1),C("实时推送连接断开"),setTimeout(()=>{S.current&&S.current.readyState!==EventSource.CLOSED||(console.log("[SSE] 尝试重新连接..."),P())},3e3)}}catch(e){console.error("[SSE] 建立连接失败:",e),C("无法建立实时推送连接")}},I=()=>{S.current&&(console.log("[SSE] 关闭连接"),S.current.close(),S.current=null,y(!1))},_=e=>{switch(console.log("[SSE] 收到消息:",e),e.type){case"connection-established":console.log("[SSE] 连接确认: ".concat(e.message)),y(!0),C(null);break;case"microapp-proxy-config-change":if(console.log("[SSE] 配置变化通知: 环境=".concat(e.envName)),console.log("[SSE] 变化详情:",e.changes),e.changes){let{added:t,removed:s}=e.changes,a="";t.length>0&&(a+="新增: ".concat(t.join(", "))),s.length>0&&(a&&(a+="; "),a+="移除: ".concat(s.join(", "))),b("配置已更新 (".concat(a,")"))}else b("配置已更新");E(),setTimeout(()=>b(""),3e3);break;case"heartbeat":y(!0),C(null);break;default:console.log("[SSE] 未知消息类型:",e.type)}},$=e=>"".concat(e.projectName,"-").concat(e.envName),R=p.trim()?c.filter(e=>e.projectName.toLowerCase().includes(p.toLowerCase())||e.envName.toLowerCase().includes(p.toLowerCase())||e.host.toLowerCase().includes(p.toLowerCase())):c,A=(e,t)=>{let s=new Set(x);t?s.add(e):s.delete(e),h(s)},D=e=>{e?h(new Set(R.map(e=>$(e)))):h(new Set)},F=async()=>{j(!0),b("");try{let e=Array.from(x).map(e=>{let t=c.find(t=>$(t)===e);return t?t.envName:""}).filter(e=>""!==e),t=[...new Set(e)],a=await fetch("/api/microapp-proxy-config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s,envName:r,selectedItems:t})}),n=await a.json();n.success?(b(n.message||"保存成功"),await E()):b("保存失败: ".concat(n.error))}catch(e){console.error("保存MicroApp代理配置失败:",e),b("保存失败: 网络错误")}finally{j(!1),setTimeout(()=>{b("")},5e3)}},J=x.size,G=R.length>0&&R.every(e=>x.has($(e))),V=R.some(e=>x.has($(e)));return o?(0,a.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg ".concat(t),children:[(0,a.jsx)("h4",{className:"text-md font-medium mb-4",children:"MicroApp代理配置"}),(0,a.jsx)("div",{className:"text-center py-8",children:(0,a.jsx)("p",{className:"text-gray-500",children:"加载中..."})})]}):m?(0,a.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg ".concat(t),children:[(0,a.jsx)("h4",{className:"text-md font-medium mb-4",children:"MicroApp代理配置"}),(0,a.jsxs)("div",{className:"text-center py-8",children:[(0,a.jsx)("p",{className:"text-red-500",children:m}),(0,a.jsx)(l.$,{variant:"outline",size:"sm",onClick:E,className:"mt-2",children:"重试"})]})]}):(0,a.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg ".concat(t),children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h4",{className:"text-md font-medium",children:"MicroApp代理配置"}),(0,a.jsxs)("p",{className:"text-xs text-gray-500 mt-1",children:["为 ",s," - ",r," 环境配置微应用代理"]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)("div",{className:"flex items-center gap-1",children:[(0,a.jsx)("div",{className:"w-2 h-2 rounded-full ".concat(N?"bg-green-500":"bg-red-500"),title:N?"实时推送已连接":"实时推送断开"}),(0,a.jsx)("span",{className:"text-xs text-gray-500",children:N?"实时":"离线"})]}),(v||w)&&(0,a.jsx)("span",{className:"text-sm max-w-xs ".concat(v&&v.includes("失败")||w?"text-red-600":v&&v.includes("但有")?"text-yellow-600":"text-green-600"),title:v||w||"",children:v||w}),(0,a.jsx)(l.$,{variant:"outline",size:"sm",onClick:E,disabled:f,children:"刷新"}),(0,a.jsx)(l.$,{variant:"default",size:"sm",onClick:F,disabled:f,children:f?"保存中...":"保存配置"})]})]}),(0,a.jsxs)("div",{className:"space-y-3 mb-4",children:[(0,a.jsx)("div",{className:"flex items-center gap-2",children:(0,a.jsxs)("div",{className:"relative flex-1 max-w-md",children:[(0,a.jsx)(k,{placeholder:"搜索项目名称、环境名称或Host...",value:p,onChange:e=>g(e.target.value),className:"pr-8"}),p&&(0,a.jsx)(l.$,{variant:"ghost",size:"sm",onClick:()=>{g("")},className:"absolute right-1 top-1/2 transform -translate-y-1/2 h-6 w-6 p-0 hover:bg-gray-100",children:"\xd7"})]})}),(0,a.jsxs)("div",{className:"flex items-center justify-between text-sm text-gray-600",children:[(0,a.jsxs)("div",{className:"flex items-center gap-4",children:[(0,a.jsxs)("span",{children:["显示 ",R.length," 个环境配置",p&&' (搜索: "'.concat(p,'")')]}),J>0&&(0,a.jsxs)("span",{className:"text-blue-600 font-medium",children:["已选择 ",J," 项"]})]}),J>0&&(0,a.jsx)(l.$,{variant:"outline",size:"sm",onClick:()=>{h(new Set)},children:"清空选择"})]})]}),R.length>0?(0,a.jsx)("div",{className:"border rounded-md",children:(0,a.jsxs)(T,{children:[(0,a.jsx)(O,{children:(0,a.jsxs)(z,{children:[(0,a.jsx)(L,{className:"w-12",children:(0,a.jsx)("input",{type:"checkbox",checked:G,onChange:e=>D(e.target.checked),ref:e=>{e&&(e.indeterminate=V&&!G)},className:"rounded border-gray-300"})}),(0,a.jsx)(L,{children:"环境名称"}),(0,a.jsx)(L,{children:"项目名称"}),(0,a.jsx)(L,{children:"Host地址"}),(0,a.jsx)(L,{children:"当前代理"})]})}),(0,a.jsx)(M,{children:R.map(e=>{let t=$(e),s=x.has(t);return(0,a.jsxs)(z,{children:[(0,a.jsx)(U,{children:(0,a.jsx)("input",{type:"checkbox",checked:s,onChange:e=>A(t,e.target.checked),className:"rounded border-gray-300"})}),(0,a.jsx)(U,{children:(0,a.jsx)("span",{className:"px-2 py-1 rounded text-xs font-medium bg-blue-100 text-blue-800",children:e.envName})}),(0,a.jsx)(U,{className:"font-medium",children:e.projectName}),(0,a.jsx)(U,{className:"font-mono text-sm",children:e.host}),(0,a.jsxs)(U,{className:"text-sm text-gray-600",children:[e.currentProxy,e.proxyEnv[e.currentProxy]&&(0,a.jsx)("div",{className:"text-xs text-gray-500",children:e.proxyEnv[e.currentProxy]})]})]},t)})})]})}):(0,a.jsx)("div",{className:"text-center py-8",children:(0,a.jsx)("p",{className:"text-gray-500",children:p?"没有找到匹配的环境配置":"暂无环境配置"})}),J>0&&(0,a.jsx)("div",{className:"mt-4 p-3 bg-blue-50 rounded-md",children:(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("span",{className:"text-sm text-blue-700",children:["已选择 ",J," 个环境配置将作为微应用代理"]}),(0,a.jsx)("span",{className:"text-xs text-blue-600",children:"点击上方“保存配置”按钮保存设置"})]})})]})}var Z=s(5735),B=s.n(Z);function Y(e){let{logs:t}=e,s=(0,n.useRef)(null),r=(0,n.useRef)(!0),l=e=>e.replace(/\x1b\[[0-9;]*m/g,"").replace(/\x1b\[[0-9]*[A-Z]/g,"").replace(/\x1b\[K/g,"").replace(/\x1b\[2K/g,"").replace(/\x1b\[G/g,"").replace(/\x1b\[\d+A/g,"").replace(/\x1b\[\d+B/g,"").replace(/\x1b\[\d+C/g,"").replace(/\x1b\[\d+D/g,"").replace(/\[2K\[1A\[2K\[G/g,"").replace(/\[\d+[A-Z]/g,"").replace(/\[STDOUT\]/g,"[OUT]").replace(/\[STDERR\]/g,"[ERR]"),c=()=>{if(!s.current)return!0;let{scrollTop:e,scrollHeight:t,clientHeight:a}=s.current;return t-e-a<100},i=()=>{s.current&&r.current&&(s.current.scrollTop=s.current.scrollHeight)};return(0,n.useEffect)(()=>{setTimeout(i,10)},[t]),(0,a.jsxs)("div",{ref:s,onScroll:()=>{r.current=c()},style:{scrollBehavior:"smooth",maxHeight:"100%"},className:"jsx-b464fb0f479e34f5 h-full w-full overflow-y-auto overflow-x-hidden p-4 custom-scrollbar",children:[(0,a.jsx)(B(),{id:"b464fb0f479e34f5",children:".custom-scrollbar.jsx-b464fb0f479e34f5{scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.2)rgba(0,0,0,.1)}.custom-scrollbar.jsx-b464fb0f479e34f5::-webkit-scrollbar{width:10px;height:10px}.custom-scrollbar.jsx-b464fb0f479e34f5::-webkit-scrollbar-track{background:rgba(0,0,0,.1);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.custom-scrollbar.jsx-b464fb0f479e34f5::-webkit-scrollbar-thumb{background:rgba(255,255,255,.3);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.custom-scrollbar.jsx-b464fb0f479e34f5::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.4)}"}),(0,a.jsx)("div",{className:"jsx-b464fb0f479e34f5 space-y-0.5",children:t.length>0?t.map((e,t)=>{var s;let n=l(e);if(!n.trim())return null;let r=e.includes("[STDERR]"),c=e.includes("[SYSTEM]"),i=null==(s=n.match(/^\[([\d-T:.Z]+)\]/))?void 0:s[1],o=n.replace(/^\[[\d-T:.Z]+\]\s*/,"");return(0,a.jsxs)("div",{className:"jsx-b464fb0f479e34f5 "+"font-mono text-xs leading-5 ".concat(r?"text-red-400":c?"text-yellow-400":"text-gray-100"),children:[i&&(0,a.jsxs)("span",{className:"jsx-b464fb0f479e34f5 text-gray-500 mr-2",children:["[",new Date(i).toLocaleTimeString("zh-CN"),"]"]}),(0,a.jsx)("span",{className:"jsx-b464fb0f479e34f5 whitespace-pre-wrap break-all",children:o})]},t)}):(0,a.jsx)("div",{className:"jsx-b464fb0f479e34f5 text-center text-gray-500 mt-8",children:"等待日志输出..."})})]})}var q=function(e){return e.PENDING="pending",e.EXISTING="existing",e.CLONING="cloning",e.SUCCESS="success",e.FAILED="failed",e.RETRYING="retrying",e}(q||{});function W(){let e=(0,r.useSearchParams)(),t=(0,r.useRouter)(),s=e.get("project"),[c,i]=(0,n.useState)(null),[x,h]=(0,n.useState)(!0),[p,g]=(0,n.useState)(null),[y,w]=(0,n.useState)({}),[C,E]=(0,n.useState)({mockingIntercept:!1,mockOpen:!1}),[I,_]=(0,n.useState)(!1),[R,A]=(0,n.useState)(null),[Z,B]=(0,n.useState)(!1),[q,W]=(0,n.useState)(1),[X]=(0,n.useState)(10),[Q,ee]=(0,n.useState)(""),[et,es]=(0,n.useState)(null),[ea,en]=(0,n.useState)(!1),[er,el]=(0,n.useState)(!1),[ec,ei]=(0,n.useState)(!1),[eo,ed]=(0,n.useState)(!0),[em,eu]=(0,n.useState)(null),[ex,eh]=(0,n.useState)([]),[ep,eg]=(0,n.useState)(!1),[ef,ej]=(0,n.useState)(!1),[ev,eb]=(0,n.useState)(!1),[eN,ey]=(0,n.useState)({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0}),[ew,ek]=(0,n.useState)(null),[eC,eS]=(0,n.useState)(!1),[eE,eP]=(0,n.useState)(""),[eT,eO]=(0,n.useState)({}),[eM,ez]=(0,n.useState)(!1),[eL,eU]=(0,n.useState)(""),[eI,e_]=(0,n.useState)([]),e$=async()=>{em&&await eA(em)},eR=async e=>{ea&&(e.metaKey||e.ctrlKey)&&"s"===e.key&&(e.preventDefault(),await e$())};(0,n.useEffect)(()=>{if(ea)return document.addEventListener("keydown",eR),()=>{document.removeEventListener("keydown",eR)}},[ea,em]);let eA=async e=>{try{await new Promise(e=>setTimeout(e,200));let s=e.getModel();if(s){var t;await (null==(t=e.getAction("editor.action.formatDocument"))?void 0:t.run());let a=s.getValue();if(a&&!a.includes("\n")&&a.length>50){let t=a.replace(/\{\s*/g,"{\n ").replace(/\}\s*/g,"\n}").replace(/;\s*/g,";\n ").replace(/,\s*/g,",\n ").replace(/\n\s*\n/g,"\n").trim();t!==a&&(s.setValue(t),setTimeout(()=>{var t;null==(t=e.getAction("editor.action.formatDocument"))||t.run()},100))}}}catch(e){console.log("自动格式化失败:",e)}},eD=()=>{t.push("/initialization")},eF=async()=>{eg(!0);try{let e=await fetch("/api/check-workspace"),t=await e.json();if(t.success&&t.projects){let e=t.projects.map(e=>({name:e.name,status:e.status,message:e.message}));eh(e)}else console.error("获取项目列表失败:",t.error),eh([])}catch(e){console.error("获取项目列表失败:",e),eh([])}finally{eg(!1)}},eJ=async()=>{if(s){_(!0);try{let e=await fetch("/api/open-project",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s})}),t=await e.json();t.success||(console.error("打开项目失败:",t.error),alert("打开项目失败: ".concat(t.error)))}catch(e){console.error("打开项目失败:",e),alert("打开项目失败: 网络错误")}finally{_(!1)}}};(0,n.useEffect)(()=>{if(!s){g("项目名称缺失"),h(!1);return}(async()=>{try{let e=await fetch("/api/project-config?project=".concat(encodeURIComponent(s))),t=await e.json();if(t.success){i(t.data);let e={};Object.keys(t.data.envs).forEach(s=>{let a=t.data.envs[s],n="";n=a.proxyEnv[a.currentProxy]?a.proxyEnv[a.currentProxy]:a.currentProxy;let r="";r=a.proxyEnv[a.currentProxy]?a.currentProxy:"custom",e[s]={selectedProxy:n||"",selectedOption:r}}),w(e),E({mockingIntercept:t.data.mockingIntercept||!1,mockOpen:t.data.mockOpen||!1})}else g(t.error)}catch(e){g("获取项目配置失败"),console.error("获取项目配置失败:",e)}finally{h(!1)}})()},[s]),(0,n.useEffect)(()=>{if(c&&s){let e=Object.keys(c.envs),t=new URLSearchParams(window.location.search).get("tab"),s="";(s=Q&&("mock"===Q||e.includes(Q))?Q:t&&("mock"===t||e.includes(t))?t:e.length>0?e[0]:"mock")!==Q&&(ee(s),"mock"===s&&e6())}},[c,s]),(0,n.useEffect)(()=>{eF()},[]);let eG=(0,n.useCallback)(async()=>{if(!s||!c)return;let e={};for(let t of Object.keys(c.envs))e["".concat(t)]={loading:!0,running:!1};eO(e);let t=Object.keys(c.envs).map(async e=>{try{let t=await fetch("/api/process/status?projectName=".concat(encodeURIComponent(s),"&envName=").concat(encodeURIComponent(e))),a=await t.json();if(a.success&&a.data)return{envName:e,status:a.data}}catch(t){console.error("获取环境 ".concat(e," 状态失败:"),t)}return{envName:e,status:{running:!1}}}),a=await Promise.all(t),n={};a.forEach(e=>{let{envName:t,status:s}=e;n[t]={running:s.running||!1,pid:s.pid,startTime:s.startTime,port:s.port,loading:!1}}),eO(n)},[s,c]),eV=async e=>{if(!s||!c)return;let t=c.envs[e];if(!t.startCommand)return void alert("该环境未配置启动命令");eO(t=>({...t,[e]:{...t[e],loading:!0}}));try{let a=await fetch("/api/process/start",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s,envName:e,startCommand:t.startCommand})}),n=await a.json();if(n.success)eO(t=>({...t,[e]:{running:!0,pid:n.data.pid,startTime:n.data.startTime,port:n.data.port,loading:!1}}));else throw Error(n.error||"启动失败")}catch(t){console.error("启动进程失败:",t),alert("启动失败: ".concat(t instanceof Error?t.message:"未知错误")),eO(t=>({...t,[e]:{...t[e],loading:!1}}))}},eH=async e=>{if(s){eO(t=>({...t,[e]:{...t[e],loading:!0}}));try{let t=await fetch("/api/process/start?projectName=".concat(encodeURIComponent(s),"&envName=").concat(encodeURIComponent(e)),{method:"DELETE"}),a=await t.json();if(a.success)eO(t=>({...t,[e]:{running:!1,loading:!1}}));else throw Error(a.error||"停止失败")}catch(t){console.error("停止进程失败:",t),alert("停止失败: ".concat(t instanceof Error?t.message:"未知错误")),eO(t=>({...t,[e]:{...t[e],loading:!1}}))}}},[eK,eZ]=(0,n.useState)(null),eB=e=>{if(!s)return;eK&&eK.close(),e_([]);let t=new EventSource("/api/process/logs/stream?projectName=".concat(encodeURIComponent(s),"&envName=").concat(encodeURIComponent(e)));t.onmessage=e=>{try{let t=JSON.parse(e.data);"log"===t.type?e_(e=>{let s=[...e,t.content];return s.length>1e3?s.slice(-1e3):s}):"init"===t.type?e_([t.message]):"end"===t.type&&e_(e=>[...e,"[系统] ".concat(t.message)])}catch(e){console.error("解析日志数据失败:",e)}},t.onerror=e=>{console.error("日志流错误:",e),t.close(),eZ(null)},eZ(t)},eY=()=>{eK&&(eK.close(),eZ(null))},eq=e=>{eU(e),ez(!0),eB(e)},eW=()=>{ez(!1),e_([]),eU(""),eY()};(0,n.useEffect)(()=>{if(c&&s){eG();let e=setInterval(()=>{eG()},5e3);return()=>clearInterval(e)}},[c,s,eG]);let eX=(e,t)=>{if(!c)return;let s=c.envs[e],a="";if("custom"===t){var n,r;a=(null==(n=y[e])?void 0:n.selectedOption)==="custom"?(null==(r=y[e])?void 0:r.selectedProxy)||"":s.proxyEnv.custom||""}else a=s.proxyEnv[t]||"";w(s=>({...s,[e]:{...s[e],selectedProxy:a,selectedOption:t,saveMessage:""}}))},eQ=(e,t)=>{w(s=>({...s,[e]:{...s[e],selectedProxy:t,saveMessage:""}}))},e0=async e=>{E(t=>({...t,mockingIntercept:e,saving:!0,saveMessage:""}));try{let t=await fetch("/api/project-config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s,projectConfig:{mockingIntercept:e,mockOpen:C.mockOpen}})}),a=await t.json();if(a.success)i(t=>t?{...t,mockingIntercept:e}:t),E(e=>({...e,saving:!1,saveMessage:"Mock拦截配置已保存"})),setTimeout(()=>{E(e=>({...e,saveMessage:""}))},2e3);else throw Error(a.error||"保存失败")}catch(t){console.error("保存Mock拦截配置失败:",t),E(s=>({...s,mockingIntercept:!e,saving:!1,saveMessage:"保存失败: ".concat(t instanceof Error?t.message:"未知错误")})),setTimeout(()=>{E(e=>({...e,saveMessage:""}))},3e3)}},e1=async e=>{E(t=>({...t,mockOpen:e,saving:!0,saveMessage:""}));try{let t=await fetch("/api/project-config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s,projectConfig:{mockingIntercept:C.mockingIntercept,mockOpen:e}})}),a=await t.json();if(a.success)i(t=>t?{...t,mockOpen:e}:t),E(e=>({...e,saving:!1,saveMessage:"Mock开启配置已保存"})),setTimeout(()=>{E(e=>({...e,saveMessage:""}))},2e3);else throw Error(a.error||"保存失败")}catch(t){console.error("保存Mock开启配置失败:",t),E(s=>({...s,mockOpen:!e,saving:!1,saveMessage:"保存失败: ".concat(t instanceof Error?t.message:"未知错误")})),setTimeout(()=>{E(e=>({...e,saveMessage:""}))},3e3)}},e5=async e=>{var t,a;if(!c||!s)return;let n=null==(a=y[e])||null==(t=a.selectedProxy)?void 0:t.trim();if(!n)return void w(t=>({...t,[e]:{...t[e],saveMessage:"请先选择或填写代理地址"}}));let r=c.envs[e],l=!Object.values(r.proxyEnv).includes(n);w(t=>({...t,[e]:{...t[e],saving:!0,saveMessage:""}}));try{let t={projectName:s,envName:e,newProxy:l?"custom":Object.keys(r.proxyEnv).find(e=>r.proxyEnv[e]===n)||""};l&&(t.customProxyUrl=n);let a=await fetch("/api/project-config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),c=await a.json();c.success?(i(t=>{if(!t)return t;let s={...t.envs};return s[e]={...s[e],currentProxy:c.data.currentProxy},"custom"===c.data.currentProxy&&(s[e].proxyEnv={...s[e].proxyEnv,custom:n}),{...t,envs:s}}),w(t=>({...t,[e]:{...t[e],saving:!1,saveMessage:"保存成功"}}))):w(t=>({...t,[e]:{...t[e],saving:!1,saveMessage:"保存失败: ".concat(c.error)}}))}catch(t){console.error("保存配置失败:",t),w(t=>({...t,[e]:{...t[e],saving:!1,saveMessage:"保存失败: 网络错误"}}))}},e2=async()=>{if(window.confirm("确定要一键关闭所有Mock吗?"))try{let e=await fetch("/api/cleanup-mock",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s})});(await e.json()).success&&await e6()}catch(e){console.error("清空Mock配置失败:",e)}},e4=async()=>{if(window.confirm("确定要一键开启所有Mock吗?"))try{let e=await fetch("/api/open-all-mock",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s})});(await e.json()).success&&await e6()}catch(e){console.error("清空Mock配置失败:",e)}},e6=async()=>{if(s){B(!0);try{let e=await fetch("/api/mock-file?project=".concat(encodeURIComponent(s))),t=await e.json();t.success?A(t.data):console.error("获取Mock数据失败:",t.error)}catch(e){console.error("获取Mock数据失败:",e)}finally{B(!1)}}},e3=async(e,t,a)=>{if(s)try{let n=await fetch("/api/mock-setting",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s,apiName:e,method:t,currentSite:a})}),r=await n.json();r.success?A(s=>s?{...s,mockFiles:s.mockFiles.map(s=>s.apiName===e?{...s,methods:s.methods.map(e=>e.method===t?{...e,setting:{...e.setting,currentSite:a}}:e)}:s)}:s):(console.error("更新场景失败:",r.error),alert("更新场景失败: ".concat(r.error)))}catch(e){console.error("更新场景失败:",e),alert("更新场景失败: 网络错误")}},e8=async(e,t,a)=>{if(s){el(!0),ed(!0);try{let n=await fetch("/api/mock-file-content?project=".concat(encodeURIComponent(s),"&apiName=").concat(encodeURIComponent(e),"&method=").concat(encodeURIComponent(t),"&siteName=").concat(encodeURIComponent(a))),r=await n.json();r.success?(es({projectName:s,apiName:e,method:t,siteName:a,content:r.data.content}),en(!0)):(console.error("获取文件内容失败:",r.error),alert("获取文件内容失败: ".concat(r.error)))}catch(e){console.error("获取文件内容失败:",e),alert("获取文件内容失败: 网络错误")}finally{el(!1)}}},e7=async()=>{if(et){ei(!0);try{let e=await fetch("/api/mock-file-content",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(et)}),t=await e.json();t.success?(en(!1),es(null)):(console.error("保存文件失败:",t.error),alert("保存文件失败: ".concat(t.error)))}catch(e){console.error("保存文件失败:",e),alert("保存文件失败: 网络错误")}finally{ei(!1)}}},e9=()=>{en(!1),es(null),ed(!0)},te=(e,t)=>{"siteName"===e&&ef||ey(s=>({...s,[e]:t}))},tt=(e,t)=>{let s=e.toUpperCase(),a=t.replace(/\//g,"_").replace(/^_/,"");switch(s){case"GET":return'module.exports = {\n "code": 200,\n "message": "获取'.concat(a,'成功",\n "data": {\n "id": 1,\n "name": "示例数据",\n "status": "active",\n "createTime": "2024-01-01 12:00:00"\n }\n}');case"POST":return'module.exports = {\n "code": 200,\n "message": "创建'.concat(a,'成功",\n "data": {\n "id": 1,\n "result": "success"\n }\n}');case"PUT":return'module.exports = {\n "code": 200,\n "message": "更新'.concat(a,'成功",\n "data": {\n "result": "success"\n }\n}');case"DELETE":return'module.exports = {\n "code": 200,\n "message": "删除'.concat(a,'成功",\n "data": {\n "result": "success"\n }\n}');default:return'module.exports = {\n "code": 200,\n "message": "操作成功",\n "data": {}\n}'}},ts=(e,t,s)=>{if(!R)return!1;let a=e.replace(/\//g,"_").replace(/^_/,""),n=R.mockFiles.find(e=>e.apiName===a);if(!n)return!1;let r=n.methods.find(e=>e.method.toLowerCase()===t.toLowerCase());return!!r&&!!r.files.find(e=>e.siteName===s)},ta=async()=>{if(!eN.apiPath.trim())return void alert("请输入接口地址");if(ts(eN.apiPath,eN.method,eN.siteName))return void alert("接口 ".concat(eN.apiPath," [").concat(eN.method.toUpperCase(),'] 的场景 "').concat(eN.siteName,'" 已存在,不能重复创建'));eS(!0);try{var e;let t=eN.apiPath.replace(/\//g,"_").replace(/^_/,""),a=null!=(e=null==et?void 0:et.content)?e:tt(eN.method,eN.apiPath),n=await fetch("/api/mock-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s,apiName:t,method:eN.method.toLowerCase(),siteName:eN.siteName,content:a})}),r=await n.json();if(r.success)eN.mockOpen&&await tc(t,eN.method.toLowerCase(),eN.siteName,!0),ey({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0}),ej(!1),await e6(),alert("Mock文件创建成功");else throw Error(r.error||"创建失败")}catch(e){console.error("创建Mock文件失败:",e),alert("创建Mock文件失败: ".concat(e instanceof Error?e.message:"未知错误"))}finally{eS(!1)}},tn=(e,t,a)=>{console.log("新增场景点击:",{apiName:e,method:t,apiPath:a}),ek({apiName:e,method:t,apiPath:a});let n={apiPath:a,method:t.toUpperCase(),siteName:"",mockOpen:!0};console.log("设置表单数据:",n),ey(n),eb(!0);let r=tt(n.method,n.apiPath);es({projectName:s||"",apiName:e,method:t.toLowerCase(),siteName:"",content:r||""})},tr=(e,t,s)=>{if(!R)return!1;let a=R.mockFiles.find(t=>t.apiName===e);if(!a)return!1;let n=a.methods.find(e=>e.method.toLowerCase()===t.toLowerCase());return!!n&&!!n.files.find(e=>e.siteName===s)},tl=async()=>{if(!ew||!eN.siteName.trim())return void alert("请输入场景名称");if(tr(ew.apiName,ew.method,eN.siteName))return void alert("接口 ".concat(ew.apiPath," [").concat(ew.method.toUpperCase(),'] 的场景 "').concat(eN.siteName,'" 已存在'));eS(!0);try{var e;let t=null!=(e=null==et?void 0:et.content)?e:tt(ew.method,ew.apiPath);console.log("defaultContent",t,et);let a=await fetch("/api/mock-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s,apiName:ew.apiName,method:ew.method.toLowerCase(),siteName:eN.siteName,content:t})}),n=await a.json();if(n.success)eN.mockOpen&&await tc(ew.apiName,ew.method,eN.siteName,!0),ey({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0}),eb(!1),ek(null),await e6(),alert("场景创建成功");else throw Error(n.error||"创建失败")}catch(e){console.error("创建场景失败:",e),alert("创建场景失败: ".concat(e instanceof Error?e.message:"未知错误"))}finally{eS(!1)}},tc=async(e,t,s,a)=>{if(c)try{let n=await fetch("/api/mock-open-status",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:c.projectName,apiName:e,method:t,siteName:s,isOpen:a})}),r=await n.json();r.success?await e6():console.error("更新Mock开启状态失败:",r.error)}catch(e){console.error("更新Mock开启状态失败:",e)}},ti=e=>{eP(e),W(1)};if(x)return(0,a.jsx)("main",{className:"container mx-auto p-4 sm:p-6 md:p-8",children:(0,a.jsx)("div",{className:"text-center py-8",children:(0,a.jsx)("p",{children:"加载中..."})})});if(p||!c)return(0,a.jsxs)("main",{className:"container mx-auto p-4 sm:p-6 md:p-8",children:[(0,a.jsxs)("div",{className:"flex justify-between items-center mb-6",children:[(0,a.jsx)("h1",{className:"text-2xl font-bold",children:"项目配置"}),(0,a.jsxs)("div",{className:"flex gap-2",children:[s&&(0,a.jsx)(l.$,{variant:"default",onClick:eJ,disabled:I,children:I?"打开中...":"在 Cursor 中打开"}),(0,a.jsx)(l.$,{variant:"outline",onClick:eD,children:"返回初始化页面"})]})]}),(0,a.jsx)("div",{className:"text-center text-red-500 py-8",children:(0,a.jsx)("p",{children:p||"未找到项目配置"})})]});let to=Object.keys(c.envs);return(0,a.jsxs)("main",{className:"container mx-auto p-4 sm:p-6 md:p-8",children:[(0,a.jsxs)("div",{className:"flex justify-between items-center mb-6",children:[(0,a.jsxs)("div",{className:"flex items-center gap-4",children:[(0,a.jsxs)("h1",{className:"text-2xl font-bold",children:[c.projectName," - 项目配置"]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(S,{className:"text-sm font-medium text-gray-600",children:"切换项目:"}),(0,a.jsxs)(f,{value:s||"",onValueChange:a=>{if(a===s)return;let n=e.get("tab"),r="/configuration?project=".concat(encodeURIComponent(a)).concat(n?"&tab=".concat(n):"");t.push(r)},disabled:ep,children:[(0,a.jsx)(v,{className:"w-40",children:(0,a.jsx)(j,{placeholder:ep?"加载中...":"选择项目"})}),(0,a.jsx)(b,{children:ex.map(e=>(0,a.jsx)(N,{value:e.name,children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"w-2 h-2 rounded-full ".concat("existing"===e.status?"bg-green-500":"failed"===e.status?"bg-red-500":"bg-yellow-500")}),(0,a.jsx)("span",{children:e.name})]})},e.name))})]})]})]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(l.$,{variant:"default",onClick:eJ,disabled:I,children:I?"打开中...":"在 Cursor 中打开"}),(0,a.jsx)(l.$,{variant:"outline",onClick:eD,children:"返回初始化页面"})]})]}),to.length>0?(0,a.jsxs)(o,{value:Q||to[0],onValueChange:e=>{ee(e),"mock"===e&&e6()},className:"w-full",children:[(0,a.jsxs)(d,{className:"grid w-full",style:{gridTemplateColumns:"repeat(".concat(to.length+1,", 1fr)")},children:[to.map(e=>{var t;return(0,a.jsx)(m,{value:e,className:"capitalize relative",children:(0,a.jsxs)("span",{className:"flex items-center gap-2",children:[e,(null==(t=eT[e])?void 0:t.running)&&(0,a.jsx)("span",{className:"w-2 h-2 bg-green-500 rounded-full animate-pulse",title:"运行中"})]})},e)}),(0,a.jsx)(m,{value:"mock",className:"capitalize",children:"Mock配置"})]}),to.map(e=>{var t,s,n,r,i,o,d,m,x,h,p,g,w,C;let E=c.envs[e],P=Object.entries(E.proxyEnv),T=(null==(t=y[e])?void 0:t.selectedProxy)||"",O=(null==(s=y[e])?void 0:s.selectedOption)||"",M=E.currentProxy,z=E.proxyEnv[M]||M,L=E.proxyEnv[M]?M:"custom";return(0,a.jsxs)(u,{value:e,className:"space-y-6",children:[(0,a.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,a.jsx)("h3",{className:"text-lg font-semibold",children:"开发服务器控制"}),(0,a.jsx)("div",{className:"flex items-center gap-4",children:(null==(n=eT[e])?void 0:n.running)?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("span",{className:"flex items-center gap-2 text-sm text-green-600",children:[(0,a.jsx)("span",{className:"w-2 h-2 bg-green-500 rounded-full animate-pulse"}),"运行中 (PID: ",null==(r=eT[e])?void 0:r.pid,")"]}),(0,a.jsx)(l.$,{variant:"outline",size:"sm",onClick:()=>eq(e),children:"查看日志"}),(0,a.jsx)(l.$,{variant:"destructive",size:"sm",onClick:()=>eH(e),disabled:null==(i=eT[e])?void 0:i.loading,children:(null==(o=eT[e])?void 0:o.loading)?"处理中...":"停止"})]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("span",{className:"flex items-center gap-2 text-sm text-gray-500",children:[(0,a.jsx)("span",{className:"w-2 h-2 bg-gray-400 rounded-full"}),"未运行"]}),(0,a.jsx)(l.$,{variant:"outline",size:"sm",onClick:()=>eq(e),children:"查看日志"}),(0,a.jsx)(l.$,{variant:"default",size:"sm",onClick:()=>eV(e),disabled:(null==(d=eT[e])?void 0:d.loading)||!E.startCommand,children:(null==(m=eT[e])?void 0:m.loading)?"处理中...":"启动"})]})})]}),E.startCommand?(0,a.jsxs)("div",{className:"text-sm text-gray-600",children:[(0,a.jsx)("span",{className:"font-medium",children:"启动命令:"})," ",(0,a.jsx)("code",{className:"px-2 py-1 bg-gray-200 rounded",children:E.startCommand})]}):(0,a.jsx)("div",{className:"text-sm text-yellow-600",children:"⚠️ 该环境未配置启动命令"}),E.host&&(0,a.jsxs)("div",{className:"text-sm text-gray-600 mt-2",children:[(0,a.jsx)("span",{className:"font-medium",children:"访问地址:"}),(null==(x=eT[e])?void 0:x.running)?(0,a.jsx)("a",{href:E.host,target:"_blank",rel:"noopener noreferrer",className:"ml-2 text-blue-600 hover:underline",children:E.host}):(0,a.jsx)("span",{className:"ml-2",children:E.host})]})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[(0,a.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg",children:[(0,a.jsxs)("h3",{className:"text-lg font-semibold mb-4",children:[e," 环境配置"]}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)(S,{className:"block text-sm font-medium mb-2",children:"接口代理环境切换"}),(0,a.jsxs)(f,{value:O,onValueChange:t=>eX(e,t),children:[(0,a.jsx)(v,{className:"w-full",children:(0,a.jsx)(j,{placeholder:"选择代理环境"})}),(0,a.jsx)(b,{children:P.map(e=>{let[t,s]=e;return(0,a.jsxs)(N,{value:t,children:[t,"(",s,")"]},t)})})]})]}),z&&(0,a.jsxs)("div",{className:"p-3 bg-blue-50 rounded-md",children:[(0,a.jsxs)("p",{className:"text-sm text-blue-700",children:["当前项目接口已代理至:",L," 环境"]}),(0,a.jsxs)("p",{className:"text-sm text-blue-600",children:["代理地址为:",z]})]}),"custom"===O&&(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(S,{className:"block text-sm font-medium",children:"自定义代理地址"}),(0,a.jsx)(k,{type:"url",placeholder:"请输入自定义代理地址 (如: http://localhost:52741)",value:T,onChange:t=>eQ(e,t.target.value),className:"w-full"}),(0,a.jsx)("p",{className:"text-xs text-gray-500",children:"请输入完整的代理地址,包括协议 (http:// 或 https://)"})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)(l.$,{onClick:()=>e5(e),disabled:null==(h=y[e])?void 0:h.saving,className:"w-full sm:w-auto",children:(null==(p=y[e])?void 0:p.saving)?"保存中...":"保存配置"}),(null==(g=y[e])?void 0:g.saveMessage)&&(0,a.jsx)("span",{className:"text-sm ml-3 ".concat((null==(w=y[e])?void 0:w.saveMessage)==="保存成功"?"text-green-600":"text-red-600"),children:null==(C=y[e])?void 0:C.saveMessage})]})]})]}),(0,a.jsx)(K,{currentProjectName:c.projectName,currentEnvName:e})]})]},e)}),(0,a.jsx)(u,{value:"mock",className:"space-y-6",children:(0,a.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg",children:[(0,a.jsx)("h3",{className:"text-lg font-semibold mb-4",children:"Mock配置"}),(0,a.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6 mb-6",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)(S,{className:"text-sm font-medium",children:"Mock拦截"}),(0,a.jsx)("p",{className:"text-xs text-gray-500",children:"启用或禁用Mock拦截功能"})]}),(0,a.jsx)(P,{checked:C.mockingIntercept,onCheckedChange:e0})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)(S,{className:"text-sm font-medium",children:"Mock开启"}),(0,a.jsx)("p",{className:"text-xs text-gray-500",children:"启用或禁用Mock功能"})]}),(0,a.jsx)(P,{checked:C.mockOpen,onCheckedChange:e1})]})]}),C.saveMessage&&(0,a.jsx)("div",{className:"mb-6",children:(0,a.jsx)("span",{className:"text-sm ".concat(C.saveMessage.includes("已保存")?"text-green-600":"text-red-600"),children:C.saveMessage})}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)("h4",{className:"text-md font-medium",children:"Mock接口列表"}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(l.$,{onClick:()=>{ej(!0);let e=tt(eN.method,eN.apiPath);es({projectName:s||"",apiName:eN.apiPath,method:eN.method.toLowerCase(),siteName:"",content:e||""})},variant:"default",size:"sm",children:"新建"}),(0,a.jsx)(l.$,{onClick:e6,disabled:Z,variant:"outline",size:"sm",children:Z?"加载中...":"刷新"}),(0,a.jsx)(l.$,{onClick:e2,variant:"outline",size:"sm",children:"一键关闭"}),(0,a.jsx)(l.$,{onClick:e4,variant:"outline",size:"sm",children:"一键开启"})]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)("div",{className:"relative flex-1 max-w-md",children:[(0,a.jsx)(k,{placeholder:"搜索接口地址...",value:eE,onChange:e=>ti(e.target.value),className:"pr-8"}),eE&&(0,a.jsx)(l.$,{variant:"ghost",size:"sm",onClick:()=>{eP(""),W(1)},className:"absolute right-1 top-1/2 transform -translate-y-1/2 h-6 w-6 p-0 hover:bg-gray-100",children:"\xd7"})]}),eE&&(0,a.jsxs)("span",{className:"text-sm text-gray-500",children:['搜索关键词: "',eE,'"']})]}),Z?(0,a.jsx)("div",{className:"text-center py-8",children:(0,a.jsx)("p",{className:"text-gray-500",children:"加载Mock数据中..."})}):R&&R.mockFiles.length>0?(()=>{let e=[];R.mockFiles.forEach(t=>{t.methods.forEach(s=>{var a,n;let r=t.apiName.replace(/_/g,"/"),l=s.files.map(e=>e.siteName),c=(null==(a=s.setting)?void 0:a.currentSite)||l[0]||"",i=(null==(n=s.setting)?void 0:n.open)||[],o=i.includes(c);e.push({apiPath:r,method:s.method.toUpperCase(),currentSite:c,availableSites:l,apiName:t.apiName,isOpen:o,openSites:i})})});let t=eE.trim()?e.filter(e=>e.apiPath.toLowerCase().includes(eE.toLowerCase())):e,s=t.length,n=Math.ceil(s/X),r=(q-1)*X,c=r+X,i=t.slice(r,c);return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)(T,{children:[(0,a.jsx)(O,{children:(0,a.jsxs)(z,{children:[(0,a.jsx)(L,{children:"接口地址"}),(0,a.jsx)(L,{children:"请求方法"}),(0,a.jsx)(L,{children:"当前场景"}),(0,a.jsx)(L,{children:"开启mock"}),(0,a.jsx)(L,{children:"操作"})]})}),(0,a.jsx)(M,{children:i.map((e,t)=>(0,a.jsxs)(z,{children:[(0,a.jsx)(U,{className:"font-medium",children:e.apiPath}),(0,a.jsx)(U,{children:(0,a.jsx)("span",{className:"px-2 py-1 rounded text-xs font-medium ".concat("GET"===e.method?"bg-green-100 text-green-800":"POST"===e.method?"bg-blue-100 text-blue-800":"PUT"===e.method?"bg-yellow-100 text-yellow-800":"DELETE"===e.method?"bg-red-100 text-red-800":"bg-gray-100 text-gray-800"),children:e.method})}),(0,a.jsx)(U,{children:(0,a.jsxs)(f,{value:e.currentSite,onValueChange:t=>e3(e.apiName,e.method.toLowerCase(),t),children:[(0,a.jsx)(v,{className:"w-32",children:(0,a.jsx)(j,{})}),(0,a.jsx)(b,{children:e.availableSites.map(e=>(0,a.jsx)(N,{value:e,children:e},e))})]})}),(0,a.jsx)(U,{children:(0,a.jsx)(P,{checked:e.isOpen,onCheckedChange:t=>tc(e.apiName,e.method.toLowerCase(),e.currentSite,t)})}),(0,a.jsx)(U,{children:(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(l.$,{variant:"outline",size:"sm",onClick:()=>e8(e.apiName,e.method.toLowerCase(),e.currentSite),disabled:er,children:er?"加载中...":"编辑"}),(0,a.jsx)(l.$,{variant:"outline",size:"sm",onClick:()=>tn(e.apiName,e.method.toLowerCase(),e.apiPath),disabled:eC,children:"新增场景"})]})})]},"".concat(e.apiName,"-").concat(e.method,"-").concat(t)))})]}),n>1&&(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"text-sm text-gray-500",children:["显示 ",r+1,"-",Math.min(c,s)," 条,共 ",s," 条"]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(l.$,{variant:"outline",size:"sm",onClick:()=>W(e=>Math.max(1,e-1)),disabled:1===q,children:"上一页"}),(0,a.jsxs)("span",{className:"text-sm",children:[q," / ",n]}),(0,a.jsx)(l.$,{variant:"outline",size:"sm",onClick:()=>W(e=>Math.min(n,e+1)),disabled:q===n,children:"下一页"})]})]})]})})():(0,a.jsxs)("div",{className:"text-center py-8",children:[(0,a.jsx)("p",{className:"text-gray-500",children:"暂无Mock接口数据"}),(0,a.jsx)("p",{className:"text-xs text-gray-400 mt-1",children:"请先创建Mock文件"})]})]})]})})]}):(0,a.jsx)("div",{className:"text-center text-gray-500 py-8",children:(0,a.jsx)("p",{children:"该项目没有配置环境信息"})}),(0,a.jsx)($,{open:ea||ef||ev,onOpenChange:e=>{e||(en(!1),ej(!1),eb(!1),ek(null))},children:(0,a.jsxs)(D,{className:"w-screen h-screen max-w-none max-h-none m-0 rounded-none overflow-hidden flex flex-col",children:[(0,a.jsxs)(F,{className:"flex-shrink-0 border-b pb-4",children:[(0,a.jsx)(G,{children:ef?"新建Mock文件":ev?"新增场景":"编辑Mock文件"}),(0,a.jsx)(V,{children:ef?"创建一个新的Mock接口文件":ev&&ew?(0,a.jsxs)(a.Fragment,{children:["为接口 ",ew.apiPath," [",ew.method.toUpperCase(),"] 新增场景"]}):et?(0,a.jsxs)(a.Fragment,{children:["编辑 ",et.apiName.replace(/_/g,"/")," - ",et.method.toUpperCase()," - ",et.siteName,".js"]}):null})]}),(ef||ev)&&(0,a.jsxs)("div",{className:"flex-shrink-0 border-b pb-4",children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(S,{htmlFor:"apiPath",className:"text-sm font-medium",children:"接口地址"}),ev?(0,a.jsx)("div",{className:"px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-sm text-gray-600",children:eN.apiPath}):(0,a.jsx)(k,{id:"apiPath",placeholder:"/api/user/info",value:eN.apiPath,onChange:e=>te("apiPath",e.target.value)})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(S,{htmlFor:"method",className:"text-sm font-medium",children:"请求方法"}),ev?(0,a.jsx)("div",{className:"px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-sm text-gray-600",children:eN.method}):(0,a.jsxs)(f,{value:eN.method,onValueChange:e=>te("method",e),children:[(0,a.jsx)(v,{children:(0,a.jsx)(j,{})}),(0,a.jsxs)(b,{children:[(0,a.jsx)(N,{value:"GET",children:"GET"}),(0,a.jsx)(N,{value:"POST",children:"POST"}),(0,a.jsx)(N,{value:"PUT",children:"PUT"}),(0,a.jsx)(N,{value:"DELETE",children:"DELETE"}),(0,a.jsx)(N,{value:"PATCH",children:"PATCH"})]})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(S,{htmlFor:"siteName",className:"text-sm font-medium",children:"场景名称"}),ef?(0,a.jsx)("div",{className:"px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-sm text-gray-600",children:"默认场景"}):(0,a.jsx)(k,{id:"siteName",placeholder:"请输入场景名称",value:eN.siteName,onChange:e=>te("siteName",e.target.value)})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(S,{htmlFor:"mockOpen",className:"text-sm font-medium",children:"开启Mock"}),(0,a.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,a.jsx)(P,{id:"mockOpen",checked:eN.mockOpen,onCheckedChange:e=>te("mockOpen",e)}),(0,a.jsx)("span",{className:"text-sm text-gray-600",children:eN.mockOpen?"开启":"关闭"})]})]})]}),ef&&eN.apiPath.trim()&&eN.siteName.trim()&&ts(eN.apiPath,eN.method,eN.siteName)&&(0,a.jsx)("div",{className:"mt-4 p-3 bg-red-50 border border-red-200 rounded-md",children:(0,a.jsx)("div",{className:"flex items-center",children:(0,a.jsxs)("span",{className:"text-red-600 text-sm",children:["⚠️ 接口 ",eN.apiPath," [",eN.method.toUpperCase(),'] 的场景 "',eN.siteName,'" 已存在']})})}),ev&&ew&&eN.siteName.trim()&&tr(ew.apiName,ew.method,eN.siteName)&&(0,a.jsx)("div",{className:"mt-4 p-3 bg-red-50 border border-red-200 rounded-md",children:(0,a.jsx)("div",{className:"flex items-center",children:(0,a.jsxs)("span",{className:"text-red-600 text-sm",children:['⚠️ 场景 "',eN.siteName,'" 已存在']})})})]}),(0,a.jsx)("div",{className:"flex-1 flex flex-col space-y-4 py-4",children:(0,a.jsxs)("div",{className:"flex-1 flex flex-col",children:[(0,a.jsx)(S,{className:"text-sm font-medium mb-2",children:"文件内容"}),(0,a.jsxs)("div",{className:"flex-1 border rounded-md overflow-hidden relative",children:[eo&&(0,a.jsx)("div",{className:"absolute inset-0 bg-gray-50 flex items-center justify-center z-10",children:(0,a.jsx)("p",{className:"text-gray-500",children:"编辑器加载中..."})}),(0,a.jsx)(H.Ay,{height:"100%",defaultLanguage:"javascript",value:(null==et?void 0:et.content)||"",onChange:e=>{es(t=>t?{...t,content:e||""}:null)},onMount:async e=>{console.log("编辑器挂载,模式:",{isCreateMode:ef,isAddSceneMode:ev,createFormData:eN}),eu(e),ed(!1),setTimeout(()=>eA(e),500)},loading:(0,a.jsx)("div",{className:"flex items-center justify-center h-full",children:(0,a.jsx)("p",{className:"text-gray-500",children:"编辑器加载中..."})}),options:{minimap:{enabled:!1},fontSize:14,lineNumbers:"on",roundedSelection:!1,scrollBeyondLastLine:!1,automaticLayout:!0,tabSize:2,insertSpaces:!0,wordWrap:"on",theme:"vs-dark",bracketPairColorization:{enabled:!0},quickSuggestions:{other:!0,comments:!0,strings:!0},formatOnPaste:!0,formatOnType:!0,readOnly:ef&&!eN.apiPath.trim()||ev&&!eN.apiPath.trim()}},ef?"create":ev?"addscene":"edit")]})]})}),(0,a.jsxs)(J,{className:"flex justify-between flex-shrink-0 border-t pt-4",children:[(0,a.jsx)(l.$,{variant:"secondary",onClick:e$,disabled:!em||eo,children:"格式化代码"}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(l.$,{variant:"outline",onClick:()=>{ef?(ej(!1),ey({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0})):ev?(eb(!1),ek(null),ey({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0})):e9()},children:"取消"}),ef?(0,a.jsx)(l.$,{onClick:ta,disabled:eC||!eN.apiPath.trim()||!eN.siteName.trim()||ts(eN.apiPath,eN.method,eN.siteName),children:eC?"创建中...":"创建"}):ev?(0,a.jsx)(l.$,{onClick:tl,disabled:eC||!eN.siteName.trim()||!!ew&&tr(ew.apiName,ew.method,eN.siteName),children:eC?"创建中...":"创建"}):(0,a.jsx)(l.$,{onClick:e7,disabled:ec,children:ec?"保存中...":"保存"})]})]})]})}),(0,a.jsx)($,{open:eM,onOpenChange:e=>{e||eW()},children:(0,a.jsxs)(D,{className:"max-w-5xl h-[85vh] max-h-[85vh] flex flex-col p-0",children:[(0,a.jsxs)(F,{className:"px-6 pt-6 pb-4",children:[(0,a.jsxs)(G,{className:"flex items-center justify-between",children:[(0,a.jsxs)("span",{children:["进程日志 - ",s," - ",eL]}),(0,a.jsx)("span",{className:"flex items-center gap-2 text-sm font-normal",children:eK&&(0,a.jsxs)("span",{className:"flex items-center gap-1 text-green-600",children:[(0,a.jsx)("span",{className:"w-2 h-2 bg-green-500 rounded-full animate-pulse"}),"实时连接"]})})]}),(0,a.jsx)(V,{children:"实时显示进程输出日志"})]}),(0,a.jsx)("div",{className:"flex-1 min-h-0 bg-gray-900 mx-6 rounded-md overflow-hidden",children:(0,a.jsx)(Y,{logs:eI})}),(0,a.jsxs)(J,{className:"flex items-center justify-between px-6 pb-6 pt-4",children:[(0,a.jsxs)("div",{className:"text-sm text-gray-500",children:["共 ",eI.length," 条日志"]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(l.$,{variant:"outline",onClick:()=>{eL&&(eY(),eB(eL))},disabled:!!eK,children:"重新连接"}),(0,a.jsx)(l.$,{variant:"default",onClick:eW,children:"关闭"})]})]})]})})]})}function X(){return(0,a.jsx)(n.Suspense,{fallback:(0,a.jsx)("div",{className:"min-h-screen bg-gray-50 flex items-center justify-center",children:(0,a.jsxs)("div",{className:"text-center space-y-4",children:[(0,a.jsx)("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600 mx-auto"}),(0,a.jsx)("p",{className:"text-gray-600",children:"正在加载配置页面..."})]})}),children:(0,a.jsx)(W,{})})}},7541:(e,t,s)=>{"use strict";s.d(t,{$:()=>i});var a=s(5167);s(6343);var n=s(7775),r=s(2703),l=s(6162);let c=(0,r.F)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",destructive:"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9"}},defaultVariants:{variant:"default",size:"default"}});function i(e){let{className:t,variant:s,size:r,asChild:i=!1,...o}=e,d=i?n.DX:"button";return(0,a.jsx)(d,{"data-slot":"button",className:(0,l.cn)(c({variant:s,size:r,className:t})),...o})}}},e=>{var t=t=>e(e.s=t);e.O(0,[167,495,619,180,358],()=>t(2190)),_N_E=e.O()}]);