prime-dev-cli 1.0.11-beta.2 → 1.0.12-beta.2
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.
- package/dist/server/.next/BUILD_ID +1 -1
- package/dist/server/.next/app-build-manifest.json +5 -5
- package/dist/server/.next/app-path-routes-manifest.json +1 -0
- package/dist/server/.next/build-manifest.json +6 -6
- package/dist/server/.next/cache/.tsbuildinfo +1 -1
- package/dist/server/.next/cache/eslint/.cache_1qa5vxt +1 -1
- package/dist/server/.next/fallback-build-manifest.json +6 -6
- package/dist/server/.next/next-minimal-server.js.nft.json +1 -1
- package/dist/server/.next/next-server.js.nft.json +1 -1
- package/dist/server/.next/prerender-manifest.json +12 -12
- package/dist/server/.next/required-server-files.json +1 -1
- package/dist/server/.next/server/app/_not-found/page/app-build-manifest.json +1 -1
- package/dist/server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/server/.next/server/app/_not-found.html +1 -1
- package/dist/server/.next/server/app/_not-found.rsc +2 -2
- package/dist/server/.next/server/app/api/all-projects-envs/route.js +1 -1
- package/dist/server/.next/server/app/api/all-projects-envs/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/check-mock-intercept/route.js +1 -1
- package/dist/server/.next/server/app/api/check-mock-intercept/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/check-workspace/route.js +1 -1
- package/dist/server/.next/server/app/api/check-workspace/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/cleanup-mock/route.js +1 -1
- package/dist/server/.next/server/app/api/cleanup-mock/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/current-branch/route/app-build-manifest.json +11 -0
- package/dist/server/.next/server/app/api/current-branch/route/app-paths-manifest.json +3 -0
- package/dist/server/.next/server/app/api/current-branch/route/build-manifest.json +17 -0
- package/dist/server/.next/server/app/api/current-branch/route/next-font-manifest.json +6 -0
- package/dist/server/.next/server/app/api/current-branch/route/react-loadable-manifest.json +1 -0
- package/dist/server/.next/server/app/api/current-branch/route/server-reference-manifest.json +4 -0
- package/dist/server/.next/server/app/api/current-branch/route.js +8 -0
- package/dist/server/.next/server/app/api/current-branch/route.js.map +5 -0
- package/dist/server/.next/server/app/api/current-branch/route.js.nft.json +1 -0
- package/dist/server/.next/server/app/api/current-branch/route_client-reference-manifest.js +2 -0
- package/dist/server/.next/server/app/api/delete-mock-api/route.js +1 -1
- package/dist/server/.next/server/app/api/delete-mock-api/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/get-mock-data/route.js +1 -1
- package/dist/server/.next/server/app/api/get-mock-data/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/initialize-workspace/route.js +1 -1
- package/dist/server/.next/server/app/api/initialize-workspace/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/microapp-proxy-change-stream/route.js +1 -1
- package/dist/server/.next/server/app/api/microapp-proxy-change-stream/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/microapp-proxy-config/route.js +1 -1
- package/dist/server/.next/server/app/api/microapp-proxy-config/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/mock-file/route.js +1 -1
- package/dist/server/.next/server/app/api/mock-file/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/mock-file-content/route.js +1 -1
- package/dist/server/.next/server/app/api/mock-file-content/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/mock-open-status/route.js +1 -1
- package/dist/server/.next/server/app/api/mock-open-status/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/mock-setting/route.js +1 -1
- package/dist/server/.next/server/app/api/mock-setting/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/open-all-mock/route.js +1 -1
- package/dist/server/.next/server/app/api/open-all-mock/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/process/start/route.js +1 -1
- package/dist/server/.next/server/app/api/process/start/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/process/status/route.js +1 -1
- package/dist/server/.next/server/app/api/process/status/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/project-config/route.js +1 -1
- package/dist/server/.next/server/app/api/project-config/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/api/retry-project/route.js +1 -1
- package/dist/server/.next/server/app/api/retry-project/route.js.nft.json +1 -1
- package/dist/server/.next/server/app/configuration/page/app-build-manifest.json +2 -2
- package/dist/server/.next/server/app/configuration/page.js.nft.json +1 -1
- package/dist/server/.next/server/app/configuration/page_client-reference-manifest.js +1 -1
- package/dist/server/.next/server/app/configuration.html +1 -1
- package/dist/server/.next/server/app/configuration.rsc +3 -3
- package/dist/server/.next/server/app/index.html +1 -1
- package/dist/server/.next/server/app/index.rsc +2 -2
- package/dist/server/.next/server/app/initialization/page/app-build-manifest.json +1 -1
- package/dist/server/.next/server/app/initialization/page_client-reference-manifest.js +1 -1
- package/dist/server/.next/server/app/initialization.html +1 -1
- package/dist/server/.next/server/app/initialization.rsc +2 -2
- package/dist/server/.next/server/app/page/app-build-manifest.json +1 -1
- package/dist/server/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/server/.next/server/app-paths-manifest.json +1 -0
- package/dist/server/.next/server/chunks/{[root-of-the-server]__27f3b464._.js → [root-of-the-server]__07de450e._.js} +2 -2
- package/dist/server/.next/server/chunks/{[root-of-the-server]__27f3b464._.js.map → [root-of-the-server]__07de450e._.js.map} +1 -1
- package/dist/server/.next/server/chunks/{[root-of-the-server]__ec631eb4._.js → [root-of-the-server]__09808308._.js} +2 -2
- package/dist/server/.next/server/chunks/{[root-of-the-server]__ec631eb4._.js.map → [root-of-the-server]__09808308._.js.map} +1 -1
- package/dist/server/.next/server/chunks/{[root-of-the-server]__dfe36c1a._.js → [root-of-the-server]__09914a79._.js} +2 -2
- package/dist/server/.next/server/chunks/{[root-of-the-server]__dfe36c1a._.js.map → [root-of-the-server]__09914a79._.js.map} +1 -1
- package/dist/server/.next/server/chunks/{[root-of-the-server]__c513ec4a._.js → [root-of-the-server]__42bc7b42._.js} +2 -2
- package/dist/server/.next/server/chunks/{[root-of-the-server]__c513ec4a._.js.map → [root-of-the-server]__42bc7b42._.js.map} +1 -1
- package/dist/server/.next/server/chunks/{[root-of-the-server]__b68e0025._.js → [root-of-the-server]__4dc677cb._.js} +2 -2
- package/dist/server/.next/server/chunks/{[root-of-the-server]__b68e0025._.js.map → [root-of-the-server]__4dc677cb._.js.map} +1 -1
- package/dist/server/.next/server/chunks/{[root-of-the-server]__92625851._.js → [root-of-the-server]__52d487d8._.js} +2 -2
- package/dist/server/.next/server/chunks/{[root-of-the-server]__92625851._.js.map → [root-of-the-server]__52d487d8._.js.map} +1 -1
- package/dist/server/.next/server/chunks/{[root-of-the-server]__7a46f739._.js → [root-of-the-server]__582946e6._.js} +2 -2
- package/dist/server/.next/server/chunks/{[root-of-the-server]__7a46f739._.js.map → [root-of-the-server]__582946e6._.js.map} +1 -1
- package/dist/server/.next/server/chunks/{[root-of-the-server]__0111ac14._.js → [root-of-the-server]__5cddc64c._.js} +2 -2
- package/dist/server/.next/server/chunks/{[root-of-the-server]__0111ac14._.js.map → [root-of-the-server]__5cddc64c._.js.map} +1 -1
- package/dist/server/.next/server/chunks/{[root-of-the-server]__63462bcb._.js → [root-of-the-server]__802aba2d._.js} +2 -2
- package/dist/server/.next/server/chunks/{[root-of-the-server]__63462bcb._.js.map → [root-of-the-server]__802aba2d._.js.map} +1 -1
- package/dist/server/.next/server/chunks/{[root-of-the-server]__9544d1f9._.js → [root-of-the-server]__837d58ae._.js} +2 -2
- package/dist/server/.next/server/chunks/{[root-of-the-server]__9544d1f9._.js.map → [root-of-the-server]__837d58ae._.js.map} +1 -1
- package/dist/server/.next/server/chunks/{[root-of-the-server]__c43c9880._.js → [root-of-the-server]__933f7077._.js} +2 -2
- package/dist/server/.next/server/chunks/{[root-of-the-server]__c43c9880._.js.map → [root-of-the-server]__933f7077._.js.map} +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__94e10604._.js +3 -0
- package/dist/server/.next/server/chunks/[root-of-the-server]__94e10604._.js.map +1 -0
- package/dist/server/.next/server/chunks/{[root-of-the-server]__84542811._.js → [root-of-the-server]__a6211ee0._.js} +2 -2
- package/dist/server/.next/server/chunks/{[root-of-the-server]__84542811._.js.map → [root-of-the-server]__a6211ee0._.js.map} +1 -1
- package/dist/server/.next/server/chunks/{[root-of-the-server]__29969c0b._.js → [root-of-the-server]__aca25fcf._.js} +2 -2
- package/dist/server/.next/server/chunks/{[root-of-the-server]__29969c0b._.js.map → [root-of-the-server]__aca25fcf._.js.map} +1 -1
- package/dist/server/.next/server/chunks/{[root-of-the-server]__3da8edfd._.js → [root-of-the-server]__be3de126._.js} +2 -2
- package/dist/server/.next/server/chunks/{[root-of-the-server]__3da8edfd._.js.map → [root-of-the-server]__be3de126._.js.map} +1 -1
- package/dist/server/.next/server/chunks/{[root-of-the-server]__fab72f0c._.js → [root-of-the-server]__da89e112._.js} +2 -2
- package/dist/server/.next/server/chunks/{[root-of-the-server]__fab72f0c._.js.map → [root-of-the-server]__da89e112._.js.map} +1 -1
- package/dist/server/.next/server/chunks/[root-of-the-server]__e07d75ff._.js +3 -0
- package/dist/server/.next/server/chunks/[root-of-the-server]__e07d75ff._.js.map +1 -0
- package/dist/server/.next/server/chunks/{[root-of-the-server]__1efea51d._.js → [root-of-the-server]__e301c560._.js} +2 -2
- package/dist/server/.next/server/chunks/{[root-of-the-server]__1efea51d._.js.map → [root-of-the-server]__e301c560._.js.map} +1 -1
- package/dist/server/.next/server/chunks/{[root-of-the-server]__525f44e0._.js → [root-of-the-server]__ef09a48e._.js} +2 -2
- package/dist/server/.next/server/chunks/{[root-of-the-server]__525f44e0._.js.map → [root-of-the-server]__ef09a48e._.js.map} +1 -1
- package/dist/server/.next/server/chunks/ssr/{_2488faea._.js → _bb352729._.js} +3 -3
- package/dist/server/.next/server/chunks/ssr/_bb352729._.js.map +1 -0
- package/dist/server/.next/server/middleware-build-manifest.js +4 -4
- package/dist/server/.next/server/pages/404.html +1 -1
- package/dist/server/.next/server/pages/500.html +1 -1
- package/dist/server/.next/server/pages/_app/build-manifest.json +2 -2
- package/dist/server/.next/server/pages/_error/build-manifest.json +2 -2
- package/dist/server/.next/static/chunks/{d5028315079b40b4.js → 2befba13bed43c5f.js} +1 -1
- package/dist/server/.next/static/chunks/344b0062191ace22.css.map +1 -0
- package/dist/server/.next/static/chunks/{249486689b72c55c.js → 4cbec079b6e3e189.js} +2 -2
- package/dist/server/.next/static/chunks/6c91d5f280e79a14.css +3 -0
- package/dist/server/.next/static/chunks/700389bfed628512.js +61 -0
- package/dist/server/.next/static/chunks/8d4c1c4e33fc41f3.js.map +1 -0
- package/dist/server/.next/static/chunks/{5e9dc9d078da6e2d.js.map → a898634af0862944.js.map} +1 -1
- package/dist/server/.next/static/chunks/{8d6bbd36cdf03018.js → d74cc70dd8ef74c9.js} +1 -1
- package/dist/server/.next/static/chunks/pages/_app.js +2 -2
- package/dist/server/.next/static/chunks/pages/_error.js +2 -2
- package/dist/server/.next/trace +1 -1
- package/package.json +3 -2
- package/dist/server/.next/server/chunks/[root-of-the-server]__ec0f2f72._.js +0 -3
- package/dist/server/.next/server/chunks/[root-of-the-server]__ec0f2f72._.js.map +0 -1
- package/dist/server/.next/server/chunks/ssr/_2488faea._.js.map +0 -1
- package/dist/server/.next/static/chunks/1f1c09f06b1f73d5.css +0 -3
- package/dist/server/.next/static/chunks/4791e420776e4b33.js.map +0 -1
- package/dist/server/.next/static/chunks/76692beeeb707278.css.map +0 -1
- package/dist/server/.next/static/chunks/f99d8b48dbb26003.js +0 -61
- /package/dist/server/.next/static/{DiL7txnLfsR2XvLBEz06H → ya7XZCHk8dAnbhG7KfvLe}/_buildManifest.js +0 -0
- /package/dist/server/.next/static/{DiL7txnLfsR2XvLBEz06H → ya7XZCHk8dAnbhG7KfvLe}/_clientMiddlewareManifest.json +0 -0
- /package/dist/server/.next/static/{DiL7txnLfsR2XvLBEz06H → ya7XZCHk8dAnbhG7KfvLe}/_ssgManifest.js +0 -0
|
@@ -2,7 +2,7 @@ module.exports={94491:a=>{"use strict";var{g:b,__dirname:c}=a;function d(a,b,{ch
|
|
|
2
2
|
|
|
3
3
|
If you want to hide the \`${b.titleName}\`, you can wrap it with our VisuallyHidden component.
|
|
4
4
|
|
|
5
|
-
For more information, see https://radix-ui.com/primitives/docs/components/${b.docsSlug}`;return(0,d.useEffect)(()=>{a&&(document.getElementById(a)||console.error(c))},[c,a]),null},Z=({contentRef:a,descriptionId:b})=>{let c=X("DialogDescriptionWarning"),e=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${c.contentName}}.`;return(0,d.useEffect)(()=>{let c=a.current?.getAttribute("aria-describedby");b&&c&&(document.getElementById(b)||console.warn(e))},[e,a,b]),null},$=y,_=A,aa=E,ab=G,ac=K,ad=P,ae=R,af=T},76315:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({__iconNode:()=>b,default:()=>c});var d=a.i(49756);let b=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],c=(0,d.default)("x",b)}},97231:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({XIcon:()=>d.default});var d=a.i(76315)},22529:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({Dialog:()=>h,DialogClose:()=>k,DialogContent:()=>m,DialogDescription:()=>q,DialogFooter:()=>o,DialogHeader:()=>n,DialogOverlay:()=>l,DialogPortal:()=>j,DialogTitle:()=>p,DialogTrigger:()=>i});var d=a.i(99559),e=a.i(66067),f=a.i(97231),g=a.i(61073);function h({...a}){return(0,d.jsx)(e.Root,{"data-slot":"dialog",...a})}function i({...a}){return(0,d.jsx)(e.Trigger,{"data-slot":"dialog-trigger",...a})}function j({...a}){return(0,d.jsx)(e.Portal,{"data-slot":"dialog-portal",...a})}function k({...a}){return(0,d.jsx)(e.Close,{"data-slot":"dialog-close",...a})}function l({className:a,...b}){return(0,d.jsx)(e.Overlay,{"data-slot":"dialog-overlay",className:(0,g.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",a),...b})}function m({className:a,children:b,showCloseButton:c=!0,...h}){return(0,d.jsxs)(j,{"data-slot":"dialog-portal",children:[(0,d.jsx)(l,{}),(0,d.jsxs)(e.Content,{"data-slot":"dialog-content",className:(0,g.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",a),...h,children:[b,c&&(0,d.jsxs)(e.Close,{"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,d.jsx)(f.XIcon,{}),(0,d.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function n({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"dialog-header",className:(0,g.cn)("flex flex-col gap-2 text-center sm:text-left",a),...b})}function o({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"dialog-footer",className:(0,g.cn)("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",a),...b})}function p({className:a,...b}){return(0,d.jsx)(e.Title,{"data-slot":"dialog-title",className:(0,g.cn)("text-lg leading-none font-semibold",a),...b})}function q({className:a,...b}){return(0,d.jsx)(e.Description,{"data-slot":"dialog-description",className:(0,g.cn)("text-muted-foreground text-sm",a),...b})}},84172:a=>{"use strict";var{g:b,__dirname:c}=a;function d(a,b,c){return b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function e(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function f(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?e(Object(c),!0).forEach(function(b){d(a,b,c[b])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):e(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}function g(a,b){if(null==a)return{};var c,d,e={},f=Object.keys(a);for(d=0;d<f.length;d++)c=f[d],b.indexOf(c)>=0||(e[c]=a[c]);return e}function h(a,b){if(null==a)return{};var c,d,e=g(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],!(b.indexOf(c)>=0)&&Object.prototype.propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}function i(a,b){return j(a)||k(a,b)||l(a,b)||n()}function j(a){if(Array.isArray(a))return a}function k(a,b){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(a)){var c=[],d=!0,e=!1,f=void 0;try{for(var g,h=a[Symbol.iterator]();!(d=(g=h.next()).done)&&(c.push(g.value),!b||c.length!==b);d=!0);}catch(a){e=!0,f=a}finally{try{d||null==h.return||h.return()}finally{if(e)throw f}}return c}}function l(a,b){if(a){if("string"==typeof a)return m(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);if("Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c)return Array.from(a);if("Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c))return m(a,b)}}function m(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}function n(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}a.s({arrayLikeToArray:()=>m,arrayWithHoles:()=>j,defineProperty:()=>d,iterableToArrayLimit:()=>k,nonIterableRest:()=>n,objectSpread2:()=>f,objectWithoutProperties:()=>h,objectWithoutPropertiesLoose:()=>g,slicedToArray:()=>i,unsupportedIterableToArray:()=>l})},21782:a=>{"use strict";var{g:b,__dirname:c}=a;{function d(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function e(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?d(Object(c),!0).forEach(function(b){var d;d=c[b],b in a?Object.defineProperty(a,b,{value:d,enumerable:!0,configurable:!0,writable:!0}):a[b]=d}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):d(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}function f(a){return function b(){for(var c=this,d=arguments.length,e=Array(d),f=0;f<d;f++)e[f]=arguments[f];return e.length>=a.length?a.apply(this,e):function(){for(var a=arguments.length,d=Array(a),f=0;f<a;f++)d[f]=arguments[f];return b.apply(c,[].concat(e,d))}}}function g(a){return({}).toString.call(a).includes("Object")}function h(a){return"function"==typeof a}a.s({default:()=>b});var i=f(function(a,b){throw Error(a[b]||a.default)})({initialIsRequired:"initial state is required",initialType:"initial state should be an object",initialContent:"initial state shouldn't be an empty object",handlerType:"handler should be an object or a function",handlersType:"all handlers should be a functions",selectorType:"selector should be a function",changeType:"provided value of changes should be an object",changeField:'it seams you want to change a field in the state which is not specified in the "initial" state',default:"an unknown error accured in `state-local` package"}),j={changes:function(a,b){return g(b)||i("changeType"),Object.keys(b).some(function(b){return!Object.prototype.hasOwnProperty.call(a,b)})&&i("changeField"),b},selector:function(a){h(a)||i("selectorType")},handler:function(a){h(a)||g(a)||i("handlerType"),g(a)&&Object.values(a).some(function(a){return!h(a)})&&i("handlersType")},initial:function(a){a||i("initialIsRequired"),g(a)||i("initialType"),Object.keys(a).length||i("initialContent")}};function k(a,b){return h(b)?b(a.current):b}function l(a,b){return a.current=e(e({},a.current),b),b}function m(a,b,c){return h(b)?b(a.current):Object.keys(c).forEach(function(c){var d;return null==(d=b[c])?void 0:d.call(b,a.current[c])}),c}let b={create:function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};j.initial(a),j.handler(b);var c={current:a},d=f(m)(c,b),e=f(l)(c),g=f(j.changes)(a),h=f(k)(c);return[function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(a){return a};return j.selector(a),a(c.current)},function(a){(function(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];return function(a){return b.reduceRight(function(a,b){return b(a)},a)}})(d,e,g,h)(a)}]}}}},14260:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({default:()=>b});let b={paths:{vs:"https://cdn.jsdelivr.net/npm/monaco-editor@0.52.2/min/vs"}}}},45287:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({default:()=>b});let b=function(a){return function b(){for(var c=this,d=arguments.length,e=Array(d),f=0;f<d;f++)e[f]=arguments[f];return e.length>=a.length?a.apply(this,e):function(){for(var a=arguments.length,d=Array(a),f=0;f<a;f++)d[f]=arguments[f];return b.apply(c,[].concat(e,d))}}}}},82863:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({default:()=>b});let b=function(a){return({}).toString.call(a).includes("Object")}}},72859:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({default:()=>b,errorHandler:()=>g,errorMessages:()=>f});var d=a.i(45287),e=a.i(82863),f={configIsRequired:"the configuration object is required",configType:"the configuration object should be an object",default:"an unknown error accured in `@monaco-editor/loader` package",deprecation:"Deprecation warning!\n You are using deprecated way of configuration.\n\n Instead of using\n monaco.config({ urls: { monacoBase: '...' } })\n use\n monaco.config({ paths: { vs: '...' } })\n\n For more please check the link https://github.com/suren-atoyan/monaco-loader#config\n "},g=(0,d.default)(function(a,b){throw Error(a[b]||a.default)})(f);let b={config:function(a){return(a||g("configIsRequired"),(0,e.default)(a)||g("configType"),a.urls)?(console.warn(f.deprecation),{paths:{vs:a.urls.monacoBase}}):a}}}},87871:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({default:()=>b});let b=function(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];return function(a){return b.reduceRight(function(a,b){return b(a)},a)}}}},28251:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({default:()=>b});var d=a.i(84172);let b=function a(b,c){return Object.keys(c).forEach(function(d){c[d]instanceof Object&&b[d]&&Object.assign(c[d],a(b[d],c[d]))}),(0,d.objectSpread2)((0,d.objectSpread2)({},b),c)}}},83021:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({CANCELATION_MESSAGE:()=>d,default:()=>b});var d={type:"cancelation",msg:"operation is manually canceled"};let b=function(a){var b=!1,c=new Promise(function(c,e){a.then(function(a){return b?e(d):c(a)}),a.catch(e)});return c.cancel=function(){return b=!0},c}}},75092:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({default:()=>b});var d=a.i(84172),e=a.i(21782),f=a.i(14260),g=a.i(72859),h=a.i(87871),i=a.i(28251),j=a.i(83021),k=e.default.create({config:f.default,isInitialized:!1,resolve:null,reject:null,monaco:null}),l=(0,d.slicedToArray)(k,2),m=l[0],n=l[1];function o(a){return document.body.appendChild(a)}function p(a){var b,c,d=m(function(a){return{config:a.config,reject:a.reject}}),e=(b="".concat(d.config.paths.vs,"/loader.js"),c=document.createElement("script"),b&&(c.src=b),c);return e.onload=function(){return a()},e.onerror=d.reject,e}function q(){var a=m(function(a){return{config:a.config,resolve:a.resolve,reject:a.reject}}),b=window.require;b.config(a.config),b(["vs/editor/editor.main"],function(b){r(b),a.resolve(b)},function(b){a.reject(b)})}function r(a){m().monaco||n({monaco:a})}var s=new Promise(function(a,b){return n({resolve:a,reject:b})});let b={config:function(a){var b=g.default.config(a),c=b.monaco,e=(0,d.objectWithoutProperties)(b,["monaco"]);n(function(a){return{config:(0,i.default)(a.config,e),monaco:c}})},init:function(){var a=m(function(a){return{monaco:a.monaco,isInitialized:a.isInitialized,resolve:a.resolve}});if(!a.isInitialized){if(n({isInitialized:!0}),a.monaco)return a.resolve(a.monaco),(0,j.default)(s);if(window.monaco&&window.monaco.editor)return r(window.monaco),a.resolve(window.monaco),(0,j.default)(s);(0,h.default)(o,p)(q)}return(0,j.default)(s)},__getMonacoInstance:function(){return m(function(a){return a.monaco})}}}},74403:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({}),a.i(75092)},30132:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({}),a.i(75092),a.i(74403)},22027:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({DiffEditor:()=>o,Editor:()=>s,default:()=>t,useMonaco:()=>p}),a.i(30132);var d=a.i(57560),e=a.i(75092),f={wrapper:{display:"flex",position:"relative",textAlign:"initial"},fullWidth:{width:"100%"},hide:{display:"none"}},g={container:{display:"flex",height:"100%",width:"100%",justifyContent:"center",alignItems:"center"}},h=function({children:a}){return d.default.createElement("div",{style:g.container},a)},i=(0,d.memo)(function({width:a,height:b,isEditorReady:c,loading:e,_ref:g,className:i,wrapperProps:j}){return d.default.createElement("section",{style:{...f.wrapper,width:a,height:b},...j},!c&&d.default.createElement(h,null,e),d.default.createElement("div",{ref:g,style:{...f.fullWidth,...!c&&f.hide},className:i}))}),j=function(a){(0,d.useEffect)(a,[])},k=function(a,b,c=!0){let e=(0,d.useRef)(!0);(0,d.useEffect)(e.current||!c?()=>{e.current=!1}:a,b)};function l(){}function m(a,b,c,d){var e,f,g,h,i,j;return e=a,f=d,e.editor.getModel(n(e,f))||(g=a,h=b,i=c,j=d,g.editor.createModel(h,i,j?n(g,j):void 0))}function n(a,b){return a.Uri.parse(b)}var o=(0,d.memo)(function({original:a,modified:b,language:c,originalLanguage:f,modifiedLanguage:g,originalModelPath:h,modifiedModelPath:n,keepCurrentOriginalModel:o=!1,keepCurrentModifiedModel:p=!1,theme:q="light",loading:r="Loading...",options:s={},height:t="100%",width:u="100%",className:v,wrapperProps:w={},beforeMount:x=l,onMount:y=l}){let[z,A]=(0,d.useState)(!1),[B,C]=(0,d.useState)(!0),D=(0,d.useRef)(null),E=(0,d.useRef)(null),F=(0,d.useRef)(null),G=(0,d.useRef)(y),H=(0,d.useRef)(x),I=(0,d.useRef)(!1);j(()=>{let a=e.default.init();return a.then(a=>(E.current=a)&&C(!1)).catch(a=>a?.type!=="cancelation"&&console.error("Monaco initialization: error:",a)),()=>{let b;return D.current?(b=D.current?.getModel(),void(o||b?.original?.dispose(),p||b?.modified?.dispose(),D.current?.dispose())):a.cancel()}}),k(()=>{if(D.current&&E.current){let b=D.current.getOriginalEditor(),d=m(E.current,a||"",f||c||"text",h||"");d!==b.getModel()&&b.setModel(d)}},[h],z),k(()=>{if(D.current&&E.current){let a=D.current.getModifiedEditor(),d=m(E.current,b||"",g||c||"text",n||"");d!==a.getModel()&&a.setModel(d)}},[n],z),k(()=>{let a=D.current.getModifiedEditor();a.getOption(E.current.editor.EditorOption.readOnly)?a.setValue(b||""):b!==a.getValue()&&(a.executeEdits("",[{range:a.getModel().getFullModelRange(),text:b||"",forceMoveMarkers:!0}]),a.pushUndoStop())},[b],z),k(()=>{D.current?.getModel()?.original.setValue(a||"")},[a],z),k(()=>{let{original:a,modified:b}=D.current.getModel();E.current.editor.setModelLanguage(a,f||c||"text"),E.current.editor.setModelLanguage(b,g||c||"text")},[c,f,g],z),k(()=>{E.current?.editor.setTheme(q)},[q],z),k(()=>{D.current?.updateOptions(s)},[s],z);let J=(0,d.useCallback)(()=>{if(!E.current)return;H.current(E.current);let d=m(E.current,a||"",f||c||"text",h||""),e=m(E.current,b||"",g||c||"text",n||"");D.current?.setModel({original:d,modified:e})},[c,b,g,a,f,h,n]),K=(0,d.useCallback)(()=>{!I.current&&F.current&&(D.current=E.current.editor.createDiffEditor(F.current,{automaticLayout:!0,...s}),J(),E.current?.editor.setTheme(q),A(!0),I.current=!0)},[s,q,J]);return(0,d.useEffect)(()=>{z&&G.current(D.current,E.current)},[z]),(0,d.useEffect)(()=>{B||z||K()},[B,z,K]),d.default.createElement(i,{width:u,height:t,isEditorReady:z,loading:r,_ref:F,className:v,wrapperProps:w})}),p=function(){let[a,b]=(0,d.useState)(e.default.__getMonacoInstance());return j(()=>{let c;return a||(c=e.default.init()).then(a=>{b(a)}),()=>c?.cancel()}),a},q=function(a){let b=(0,d.useRef)();return(0,d.useEffect)(()=>{b.current=a},[a]),b.current},r=new Map,s=(0,d.memo)(function({defaultValue:a,defaultLanguage:b,defaultPath:c,value:f,language:g,path:h,theme:n="light",line:o,loading:p="Loading...",options:s={},overrideServices:t={},saveViewState:u=!0,keepCurrentModel:v=!1,width:w="100%",height:x="100%",className:y,wrapperProps:z={},beforeMount:A=l,onMount:B=l,onChange:C,onValidate:D=l}){let[E,F]=(0,d.useState)(!1),[G,H]=(0,d.useState)(!0),I=(0,d.useRef)(null),J=(0,d.useRef)(null),K=(0,d.useRef)(null),L=(0,d.useRef)(B),M=(0,d.useRef)(A),N=(0,d.useRef)(),O=(0,d.useRef)(f),P=q(h),Q=(0,d.useRef)(!1),R=(0,d.useRef)(!1);j(()=>{let a=e.default.init();return a.then(a=>(I.current=a)&&H(!1)).catch(a=>a?.type!=="cancelation"&&console.error("Monaco initialization: error:",a)),()=>J.current?void(N.current?.dispose(),v?u&&r.set(h,J.current.saveViewState()):J.current.getModel()?.dispose(),J.current.dispose()):a.cancel()}),k(()=>{let d=m(I.current,a||f||"",b||g||"",h||c||"");d!==J.current?.getModel()&&(u&&r.set(P,J.current?.saveViewState()),J.current?.setModel(d),u&&J.current?.restoreViewState(r.get(h)))},[h],E),k(()=>{J.current?.updateOptions(s)},[s],E),k(()=>{J.current&&void 0!==f&&(J.current.getOption(I.current.editor.EditorOption.readOnly)?J.current.setValue(f):f!==J.current.getValue()&&(R.current=!0,J.current.executeEdits("",[{range:J.current.getModel().getFullModelRange(),text:f,forceMoveMarkers:!0}]),J.current.pushUndoStop(),R.current=!1))},[f],E),k(()=>{let a=J.current?.getModel();a&&g&&I.current?.editor.setModelLanguage(a,g)},[g],E),k(()=>{void 0!==o&&J.current?.revealLine(o)},[o],E),k(()=>{I.current?.editor.setTheme(n)},[n],E);let S=(0,d.useCallback)(()=>{if(!(!K.current||!I.current)&&!Q.current){M.current(I.current);let d=h||c,e=m(I.current,f||a||"",b||g||"",d||"");J.current=I.current?.editor.create(K.current,{model:e,automaticLayout:!0,...s},t),u&&J.current.restoreViewState(r.get(d)),I.current.editor.setTheme(n),void 0!==o&&J.current.revealLine(o),F(!0),Q.current=!0}},[a,b,c,f,g,h,s,t,u,n,o]);return(0,d.useEffect)(()=>{E&&L.current(J.current,I.current)},[E]),(0,d.useEffect)(()=>{G||E||S()},[G,E,S]),O.current=f,(0,d.useEffect)(()=>{E&&C&&(N.current?.dispose(),N.current=J.current?.onDidChangeModelContent(a=>{R.current||C(J.current.getValue(),a)}))},[E,C]),(0,d.useEffect)(()=>{if(E){let a=I.current.editor.onDidChangeMarkers(a=>{let b=J.current.getModel()?.uri;if(b&&a.find(a=>a.path===b.path)){let a=I.current.editor.getModelMarkers({resource:b});D?.(a)}});return()=>{a?.dispose()}}return()=>{}},[E,D]),d.default.createElement(i,{width:w,height:x,isEditorReady:E,loading:p,_ref:K,className:y,wrapperProps:z})}),t=s},28783:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({}),a.i(30132),a.i(57560),a.i(22027)},82587:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({default:()=>i});var d=a.i(99559),e=a.i(57560),f=a.i(60284),g=a.i(94688),h=a.i(50923);function i({className:a,currentProjectName:b,currentEnvName:c}){let[i,j]=(0,e.useState)([]),[k,l]=(0,e.useState)(!0),[m,n]=(0,e.useState)(null),[o,p]=(0,e.useState)(new Set),[q,r]=(0,e.useState)(""),[s,t]=(0,e.useState)(!1),[u,v]=(0,e.useState)(""),[w,x]=(0,e.useState)(!1),[y,z]=(0,e.useState)(null),A=(0,e.useRef)(null);(0,e.useEffect)(()=>{if(i.length>0){let a=i.find(a=>a.projectName===b&&a.envName===c);if(a&&a.subApps.length>0){let b=new Set;a.subApps.forEach(a=>{i.forEach(c=>{c.envName===a&&b.add(F(c))})}),p(b)}}},[i,b,c]);let B=async()=>{l(!0),n(null);try{let a=await fetch("/api/all-projects-envs"),b=await a.json();b.success?j(b.data):n(b.error||"获取项目环境信息失败")}catch(a){console.error("获取项目环境信息失败:",a),n("获取项目环境信息失败: 网络错误")}finally{l(!1)}};(0,e.useEffect)(()=>(B(),C(),()=>{D()}),[c]);let C=()=>{A.current&&D();let a=`microapp-table-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,b=`/api/microapp-proxy-change-stream?env=${encodeURIComponent(c)}&clientId=${encodeURIComponent(a)}`;console.log(`[SSE] 建立连接到: ${b}`),z(null);try{let a=new EventSource(b);A.current=a,a.onopen=()=>{console.log(`[SSE] 连接已建立,环境: ${c}`),x(!0),z(null)},a.onmessage=a=>{try{let b=JSON.parse(a.data);E(b)}catch(a){console.error("[SSE] 解析消息失败:",a)}},a.onerror=()=>{console.error(`[SSE] 连接错误,环境: ${c}`),x(!1),z("实时推送连接断开"),setTimeout(()=>{A.current&&A.current.readyState!==EventSource.CLOSED||(console.log("[SSE] 尝试重新连接..."),C())},3e3)}}catch(a){console.error("[SSE] 建立连接失败:",a),z("无法建立实时推送连接")}},D=()=>{A.current&&(console.log("[SSE] 关闭连接"),A.current.close(),A.current=null,x(!1))},E=a=>{switch(console.log("[SSE] 收到消息:",a),a.type){case"connection-established":console.log(`[SSE] 连接确认: ${a.message}`),x(!0),z(null);break;case"microapp-proxy-config-change":if(console.log(`[SSE] 配置变化通知: 环境=${a.envName}`),console.log(`[SSE] 变化详情:`,a.changes),a.changes){let{added:b,removed:c}=a.changes,d="";b.length>0&&(d+=`新增: ${b.join(", ")}`),c.length>0&&(d&&(d+="; "),d+=`移除: ${c.join(", ")}`),v(`配置已更新 (${d})`)}else v("配置已更新");B(),setTimeout(()=>v(""),3e3);break;case"heartbeat":x(!0),z(null);break;default:console.log("[SSE] 未知消息类型:",a.type)}},F=a=>`${a.projectName}-${a.envName}`,G=q.trim()?i.filter(a=>a.projectName.toLowerCase().includes(q.toLowerCase())||a.envName.toLowerCase().includes(q.toLowerCase())||a.host.toLowerCase().includes(q.toLowerCase())):i,H=(a,b)=>{let c=new Set(o);b?c.add(a):c.delete(a),p(c)},I=a=>{a?p(new Set(G.map(a=>F(a)))):p(new Set)},J=async()=>{t(!0),v("");try{let a=Array.from(o).map(a=>{let b=i.find(b=>F(b)===a);return b?b.envName:""}).filter(a=>""!==a),d=[...new Set(a)],e=await fetch("/api/microapp-proxy-config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:b,envName:c,selectedItems:d})}),f=await e.json();f.success?(v(f.message||"保存成功"),await B()):v(`保存失败: ${f.error}`)}catch(a){console.error("保存MicroApp代理配置失败:",a),v("保存失败: 网络错误")}finally{t(!1),setTimeout(()=>{v("")},5e3)}},K=o.size,L=G.length>0&&G.every(a=>o.has(F(a))),M=G.some(a=>o.has(F(a)));return k?(0,d.jsxs)("div",{className:`p-6 bg-gray-50 rounded-lg ${a}`,children:[(0,d.jsx)("h4",{className:"text-md font-medium mb-4",children:"MicroApp代理配置"}),(0,d.jsx)("div",{className:"text-center py-8",children:(0,d.jsx)("p",{className:"text-gray-500",children:"加载中..."})})]}):m?(0,d.jsxs)("div",{className:`p-6 bg-gray-50 rounded-lg ${a}`,children:[(0,d.jsx)("h4",{className:"text-md font-medium mb-4",children:"MicroApp代理配置"}),(0,d.jsxs)("div",{className:"text-center py-8",children:[(0,d.jsx)("p",{className:"text-red-500",children:m}),(0,d.jsx)(h.Button,{variant:"outline",size:"sm",onClick:B,className:"mt-2",children:"重试"})]})]}):(0,d.jsxs)("div",{className:`p-6 bg-gray-50 rounded-lg ${a}`,children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("h4",{className:"text-md font-medium",children:"MicroApp代理配置"}),(0,d.jsxs)("p",{className:"text-xs text-gray-500 mt-1",children:["为 ",b," - ",c," 环境配置微应用代理"]})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)("div",{className:"flex items-center gap-1",children:[(0,d.jsx)("div",{className:`w-2 h-2 rounded-full ${w?"bg-green-500":"bg-red-500"}`,title:w?"实时推送已连接":"实时推送断开"}),(0,d.jsx)("span",{className:"text-xs text-gray-500",children:w?"实时":"离线"})]}),(u||y)&&(0,d.jsx)("span",{className:`text-sm max-w-xs ${u&&u.includes("失败")||y?"text-red-600":u&&u.includes("但有")?"text-yellow-600":"text-green-600"}`,title:u||y||"",children:u||y}),(0,d.jsx)(h.Button,{variant:"outline",size:"sm",onClick:B,disabled:s,children:"刷新"}),(0,d.jsx)(h.Button,{variant:"default",size:"sm",onClick:J,disabled:s,children:s?"保存中...":"保存配置"})]})]}),(0,d.jsxs)("div",{className:"space-y-3 mb-4",children:[(0,d.jsx)("div",{className:"flex items-center gap-2",children:(0,d.jsxs)("div",{className:"relative flex-1 max-w-md",children:[(0,d.jsx)(g.Input,{placeholder:"搜索项目名称、环境名称或Host...",value:q,onChange:a=>r(a.target.value),className:"pr-8"}),q&&(0,d.jsx)(h.Button,{variant:"ghost",size:"sm",onClick:()=>{r("")},className:"absolute right-1 top-1/2 transform -translate-y-1/2 h-6 w-6 p-0 hover:bg-gray-100",children:"×"})]})}),(0,d.jsxs)("div",{className:"flex items-center justify-between text-sm text-gray-600",children:[(0,d.jsxs)("div",{className:"flex items-center gap-4",children:[(0,d.jsxs)("span",{children:["显示 ",G.length," 个环境配置",q&&` (搜索: "${q}")`]}),K>0&&(0,d.jsxs)("span",{className:"text-blue-600 font-medium",children:["已选择 ",K," 项"]})]}),K>0&&(0,d.jsx)(h.Button,{variant:"outline",size:"sm",onClick:()=>{p(new Set)},children:"清空选择"})]})]}),G.length>0?(0,d.jsx)("div",{className:"border rounded-md",children:(0,d.jsxs)(f.Table,{children:[(0,d.jsx)(f.TableHeader,{children:(0,d.jsxs)(f.TableRow,{children:[(0,d.jsx)(f.TableHead,{className:"w-12",children:(0,d.jsx)("input",{type:"checkbox",checked:L,onChange:a=>I(a.target.checked),ref:a=>{a&&(a.indeterminate=M&&!L)},className:"rounded border-gray-300"})}),(0,d.jsx)(f.TableHead,{children:"环境名称"}),(0,d.jsx)(f.TableHead,{children:"项目名称"}),(0,d.jsx)(f.TableHead,{children:"Host地址"}),(0,d.jsx)(f.TableHead,{children:"当前代理"})]})}),(0,d.jsx)(f.TableBody,{children:G.map(a=>{let b=F(a),c=o.has(b);return(0,d.jsxs)(f.TableRow,{children:[(0,d.jsx)(f.TableCell,{children:(0,d.jsx)("input",{type:"checkbox",checked:c,onChange:a=>H(b,a.target.checked),className:"rounded border-gray-300"})}),(0,d.jsx)(f.TableCell,{children:(0,d.jsx)("span",{className:"px-2 py-1 rounded text-xs font-medium bg-blue-100 text-blue-800",children:a.envName})}),(0,d.jsx)(f.TableCell,{className:"font-medium",children:a.projectName}),(0,d.jsx)(f.TableCell,{className:"font-mono text-sm",children:a.host}),(0,d.jsxs)(f.TableCell,{className:"text-sm text-gray-600",children:[a.currentProxy,a.proxyEnv[a.currentProxy]&&(0,d.jsx)("div",{className:"text-xs text-gray-500",children:a.proxyEnv[a.currentProxy]})]})]},b)})})]})}):(0,d.jsx)("div",{className:"text-center py-8",children:(0,d.jsx)("p",{className:"text-gray-500",children:q?"没有找到匹配的环境配置":"暂无环境配置"})}),K>0&&(0,d.jsx)("div",{className:"mt-4 p-3 bg-blue-50 rounded-md",children:(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsxs)("span",{className:"text-sm text-blue-700",children:["已选择 ",K," 个环境配置将作为微应用代理"]}),(0,d.jsx)("span",{className:"text-xs text-blue-600",children:"点击上方“保存配置”按钮保存设置"})]})})]})}},23936:function(a){var{g:b,__dirname:c,m:d,e:e}=a},22842:function(a){var{g:b,__dirname:c,m:d,e:e}=a;a.r(23936);var f=a.r(57560),g=f&&"object"==typeof f&&"default"in f?f:{default:f},h="undefined"!=typeof process&&process.env&&!0,i=function(a){return"[object String]"===Object.prototype.toString.call(a)},j=function(){function a(a){var b=void 0===a?{}:a,c=b.name,d=void 0===c?"stylesheet":c,e=b.optimizeForSpeed,f=void 0===e?h:e;k(i(d),"`name` must be a string"),this._name=d,this._deletedRulePlaceholder="#"+d+"-deleted-rule____{}",k("boolean"==typeof f,"`optimizeForSpeed` must be a boolean"),this._optimizeForSpeed=f,this._serverSheet=void 0,this._tags=[],this._injected=!1,this._rulesCount=0;var g="undefined"!=typeof window&&document.querySelector('meta[property="csp-nonce"]');this._nonce=g?g.getAttribute("content"):null}var b,c=a.prototype;return c.setOptimizeForSpeed=function(a){k("boolean"==typeof a,"`setOptimizeForSpeed` accepts a boolean"),k(0===this._rulesCount,"optimizeForSpeed cannot be when rules have already been inserted"),this.flush(),this._optimizeForSpeed=a,this.inject()},c.isOptimizeForSpeed=function(){return this._optimizeForSpeed},c.inject=function(){var a=this;if(k(!this._injected,"sheet already injected"),this._injected=!0,"undefined"!=typeof window&&this._optimizeForSpeed){this._tags[0]=this.makeStyleTag(this._name),this._optimizeForSpeed="insertRule"in this.getSheet(),this._optimizeForSpeed||(h||console.warn("StyleSheet: optimizeForSpeed mode not supported falling back to standard mode."),this.flush(),this._injected=!0);return}this._serverSheet={cssRules:[],insertRule:function(b,c){return"number"==typeof c?a._serverSheet.cssRules[c]={cssText:b}:a._serverSheet.cssRules.push({cssText:b}),c},deleteRule:function(b){a._serverSheet.cssRules[b]=null}}},c.getSheetForTag=function(a){if(a.sheet)return a.sheet;for(var b=0;b<document.styleSheets.length;b++)if(document.styleSheets[b].ownerNode===a)return document.styleSheets[b]},c.getSheet=function(){return this.getSheetForTag(this._tags[this._tags.length-1])},c.insertRule=function(a,b){if(k(i(a),"`insertRule` accepts only strings"),"undefined"==typeof window)return"number"!=typeof b&&(b=this._serverSheet.cssRules.length),this._serverSheet.insertRule(a,b),this._rulesCount++;if(this._optimizeForSpeed){var c=this.getSheet();"number"!=typeof b&&(b=c.cssRules.length);try{c.insertRule(a,b)}catch(b){return h||console.warn("StyleSheet: illegal rule: \n\n"+a+"\n\nSee https://stackoverflow.com/q/20007992 for more info"),-1}}else{var d=this._tags[b];this._tags.push(this.makeStyleTag(this._name,a,d))}return this._rulesCount++},c.replaceRule=function(a,b){if(this._optimizeForSpeed||"undefined"==typeof window){var c="undefined"!=typeof window?this.getSheet():this._serverSheet;if(b.trim()||(b=this._deletedRulePlaceholder),!c.cssRules[a])return a;c.deleteRule(a);try{c.insertRule(b,a)}catch(d){h||console.warn("StyleSheet: illegal rule: \n\n"+b+"\n\nSee https://stackoverflow.com/q/20007992 for more info"),c.insertRule(this._deletedRulePlaceholder,a)}}else{var d=this._tags[a];k(d,"old rule at index `"+a+"` not found"),d.textContent=b}return a},c.deleteRule=function(a){if("undefined"==typeof window)return void this._serverSheet.deleteRule(a);if(this._optimizeForSpeed)this.replaceRule(a,"");else{var b=this._tags[a];k(b,"rule at index `"+a+"` not found"),b.parentNode.removeChild(b),this._tags[a]=null}},c.flush=function(){this._injected=!1,this._rulesCount=0,"undefined"!=typeof window?(this._tags.forEach(function(a){return a&&a.parentNode.removeChild(a)}),this._tags=[]):this._serverSheet.cssRules=[]},c.cssRules=function(){var a=this;return"undefined"==typeof window?this._serverSheet.cssRules:this._tags.reduce(function(b,c){return c?b=b.concat(Array.prototype.map.call(a.getSheetForTag(c).cssRules,function(b){return b.cssText===a._deletedRulePlaceholder?null:b})):b.push(null),b},[])},c.makeStyleTag=function(a,b,c){b&&k(i(b),"makeStyleTag accepts only strings as second parameter");var d=document.createElement("style");this._nonce&&d.setAttribute("nonce",this._nonce),d.type="text/css",d.setAttribute("data-"+a,""),b&&d.appendChild(document.createTextNode(b));var e=document.head||document.getElementsByTagName("head")[0];return c?e.insertBefore(d,c):e.appendChild(d),d},b=[{key:"length",get:function(){return this._rulesCount}}],function(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}(a.prototype,b),a}();function k(a,b){if(!a)throw Error("StyleSheet: "+b+".")}var l=function(a){for(var b=5381,c=a.length;c;)b=33*b^a.charCodeAt(--c);return b>>>0},m={};function n(a,b){if(!b)return"jsx-"+a;var c=String(b),d=a+c;return m[d]||(m[d]="jsx-"+l(a+"-"+c)),m[d]}function o(a,b){"undefined"==typeof window&&(b=b.replace(/\/style/gi,"\\/style"));var c=a+b;return m[c]||(m[c]=b.replace(/__jsx-style-dynamic-selector/g,a)),m[c]}var p=function(){function a(a){var b=void 0===a?{}:a,c=b.styleSheet,d=void 0===c?null:c,e=b.optimizeForSpeed,f=void 0!==e&&e;this._sheet=d||new j({name:"styled-jsx",optimizeForSpeed:f}),this._sheet.inject(),d&&"boolean"==typeof f&&(this._sheet.setOptimizeForSpeed(f),this._optimizeForSpeed=this._sheet.isOptimizeForSpeed()),this._fromServer=void 0,this._indices={},this._instancesCounts={}}var b=a.prototype;return b.add=function(a){var b=this;void 0===this._optimizeForSpeed&&(this._optimizeForSpeed=Array.isArray(a.children),this._sheet.setOptimizeForSpeed(this._optimizeForSpeed),this._optimizeForSpeed=this._sheet.isOptimizeForSpeed()),"undefined"==typeof window||this._fromServer||(this._fromServer=this.selectFromServer(),this._instancesCounts=Object.keys(this._fromServer).reduce(function(a,b){return a[b]=0,a},{}));var c=this.getIdAndRules(a),d=c.styleId,e=c.rules;if(d in this._instancesCounts){this._instancesCounts[d]+=1;return}var f=e.map(function(a){return b._sheet.insertRule(a)}).filter(function(a){return -1!==a});this._indices[d]=f,this._instancesCounts[d]=1},b.remove=function(a){var b=this,c=this.getIdAndRules(a).styleId;if(function(a,b){if(!a)throw Error("StyleSheetRegistry: "+b+".")}(c in this._instancesCounts,"styleId: `"+c+"` not found"),this._instancesCounts[c]-=1,this._instancesCounts[c]<1){var d=this._fromServer&&this._fromServer[c];d?(d.parentNode.removeChild(d),delete this._fromServer[c]):(this._indices[c].forEach(function(a){return b._sheet.deleteRule(a)}),delete this._indices[c]),delete this._instancesCounts[c]}},b.update=function(a,b){this.add(b),this.remove(a)},b.flush=function(){this._sheet.flush(),this._sheet.inject(),this._fromServer=void 0,this._indices={},this._instancesCounts={}},b.cssRules=function(){var a=this,b=this._fromServer?Object.keys(this._fromServer).map(function(b){return[b,a._fromServer[b]]}):[],c=this._sheet.cssRules();return b.concat(Object.keys(this._indices).map(function(b){return[b,a._indices[b].map(function(a){return c[a].cssText}).join(a._optimizeForSpeed?"":"\n")]}).filter(function(a){return!!a[1]}))},b.styles=function(a){var b,c;return b=this.cssRules(),void 0===(c=a)&&(c={}),b.map(function(a){var b=a[0],d=a[1];return g.default.createElement("style",{id:"__"+b,key:"__"+b,nonce:c.nonce?c.nonce:void 0,dangerouslySetInnerHTML:{__html:d}})})},b.getIdAndRules=function(a){var b=a.children,c=a.dynamic,d=a.id;if(c){var e=n(d,c);return{styleId:e,rules:Array.isArray(b)?b.map(function(a){return o(e,a)}):[o(e,b)]}}return{styleId:n(d),rules:Array.isArray(b)?b:[b]}},b.selectFromServer=function(){return Array.prototype.slice.call(document.querySelectorAll('[id^="__jsx-"]')).reduce(function(a,b){return a[b.id.slice(2)]=b,a},{})},a}(),q=f.createContext(null);function r(){return new p}function s(){return f.useContext(q)}q.displayName="StyleSheetContext";var t=g.default.useInsertionEffect||g.default.useLayoutEffect,u="undefined"!=typeof window?r():void 0;function v(a){var b=u||s();return b&&("undefined"==typeof window?b.add(a):t(function(){return b.add(a),function(){b.remove(a)}},[a.id,String(a.dynamic)])),null}v.dynamic=function(a){return a.map(function(a){return n(a[0],a[1])}).join(" ")},e.StyleRegistry=function(a){var b=a.registry,c=a.children,d=f.useContext(q),e=f.useState(function(){return d||b||r()})[0];return g.default.createElement(q.Provider,{value:e},c)},e.createStyleRegistry=r,e.style=v,e.useStyleRegistry=s},62012:function(a){var{g:b,__dirname:c,m:d,e:e}=a;d.exports=a.r(22842).style},55441:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({default:()=>g});var d=a.i(99559),e=a.i(62012),f=a.i(57560);function g({logs:a}){let b=(0,f.useRef)(null),c=(0,f.useRef)(!0),g=a=>a.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]"),h=()=>{if(!b.current)return!0;let{scrollTop:a,scrollHeight:c,clientHeight:d}=b.current;return c-a-d<100},i=()=>{b.current&&c.current&&(b.current.scrollTop=b.current.scrollHeight)};return(0,f.useEffect)(()=>{setTimeout(i,10)},[a]),(0,d.jsxs)("div",{ref:b,onScroll:()=>{c.current=h()},style:{scrollBehavior:"smooth",maxHeight:"100%"},className:"jsx-b464fb0f479e34f5 h-full w-full overflow-y-auto overflow-x-hidden p-4 custom-scrollbar",children:[(0,d.jsx)(e.default,{id:"b464fb0f479e34f5",children:".custom-scrollbar.jsx-b464fb0f479e34f5{scrollbar-width:thin;scrollbar-color:#fff3 #0000001a}.custom-scrollbar.jsx-b464fb0f479e34f5::-webkit-scrollbar{width:10px;height:10px}.custom-scrollbar.jsx-b464fb0f479e34f5::-webkit-scrollbar-track{background:#0000001a;border-radius:5px}.custom-scrollbar.jsx-b464fb0f479e34f5::-webkit-scrollbar-thumb{background:#ffffff4d;border-radius:5px}.custom-scrollbar.jsx-b464fb0f479e34f5.jsx-b464fb0f479e34f5::-webkit-scrollbar-thumb:hover{background:#fff6}"}),(0,d.jsx)("div",{className:"jsx-b464fb0f479e34f5 space-y-0.5",children:a.length>0?a.map((a,b)=>{let c=g(a);if(!c.trim())return null;let e=a.includes("[STDERR]"),f=a.includes("[SYSTEM]"),h=c.match(/^\[([\d-T:.Z]+)\]/)?.[1],i=c.replace(/^\[[\d-T:.Z]+\]\s*/,"");return(0,d.jsxs)("div",{className:`jsx-b464fb0f479e34f5 font-mono text-xs leading-5 ${e?"text-red-400":f?"text-yellow-400":"text-gray-100"}`,children:[h&&(0,d.jsxs)("span",{className:"jsx-b464fb0f479e34f5 text-gray-500 mr-2",children:["[",new Date(h).toLocaleTimeString("zh-CN"),"]"]}),(0,d.jsx)("span",{className:"jsx-b464fb0f479e34f5 whitespace-pre-wrap break-all",children:i})]},b)}):(0,d.jsx)("div",{className:"jsx-b464fb0f479e34f5 text-center text-gray-500 mt-8",children:"等待日志输出..."})})]})}},73426:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({default:()=>t});var d=a.i(99559),e=a.i(57560),f=a.i(40490),g=a.i(50923),h=a.i(74939),i=a.i(49566),j=a.i(94688),k=a.i(58413),l=a.i(67252),m=a.i(60284),n=a.i(22529);a.i(28783);var o=a.i(22027),p=a.i(82587),q=a.i(55441),r=function(a){return a.PENDING="pending",a.EXISTING="existing",a.CLONING="cloning",a.SUCCESS="success",a.FAILED="failed",a.RETRYING="retrying",a}(r||{});function s(){let a=(0,f.useSearchParams)(),b=(0,f.useRouter)(),c=a.get("project"),[r,s]=(0,e.useState)(null),[t,u]=(0,e.useState)(!0),[v,w]=(0,e.useState)(null),[x,y]=(0,e.useState)({}),[z,A]=(0,e.useState)({mockingIntercept:!1,mockOpen:!1}),[B,C]=(0,e.useState)(!1),[D,E]=(0,e.useState)(null),[F,G]=(0,e.useState)(!1),[H,I]=(0,e.useState)(1),[J]=(0,e.useState)(10),[K,L]=(0,e.useState)(""),[M,N]=(0,e.useState)(null),[O,P]=(0,e.useState)(!1),[Q,R]=(0,e.useState)(!1),[S,T]=(0,e.useState)(!1),[U,V]=(0,e.useState)(!0),[W,X]=(0,e.useState)(null),[Y,Z]=(0,e.useState)([]),[$,_]=(0,e.useState)(!1),[aa,ab]=(0,e.useState)(!1),[ac,ad]=(0,e.useState)(!1),[ae,af]=(0,e.useState)({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0}),[ag,ah]=(0,e.useState)(null),[ai,aj]=(0,e.useState)(!1),[ak,al]=(0,e.useState)({open:!1,apiName:"",method:"",siteName:""}),[am,an]=(0,e.useState)({open:!1,apiName:"",apiPath:""}),[ao,ap]=(0,e.useState)({open:!1,type:"success",message:""}),[aq,ar]=(0,e.useState)(""),[as,at]=(0,e.useState)({}),[au,av]=(0,e.useState)(!1),[aw,ax]=(0,e.useState)(""),[ay,az]=(0,e.useState)([]),aA=async()=>{W&&await aC(W)},aB=async a=>{O&&(a.metaKey||a.ctrlKey)&&"s"===a.key&&(a.preventDefault(),await aA())};(0,e.useEffect)(()=>{if(O)return document.addEventListener("keydown",aB),()=>{document.removeEventListener("keydown",aB)}},[O,W]);let aC=async a=>{try{await new Promise(a=>setTimeout(a,200));let b=a.getModel();if(b){await a.getAction("editor.action.formatDocument")?.run();let c=b.getValue();if(c&&!c.includes("\n")&&c.length>50){let d=c.replace(/\{\s*/g,"{\n ").replace(/\}\s*/g,"\n}").replace(/;\s*/g,";\n ").replace(/,\s*/g,",\n ").replace(/\n\s*\n/g,"\n").trim();d!==c&&(b.setValue(d),setTimeout(()=>{a.getAction("editor.action.formatDocument")?.run()},100))}}}catch(a){console.log("自动格式化失败:",a)}},aD=()=>{b.push("/initialization")},aE=async()=>{_(!0);try{let a=await fetch("/api/check-workspace"),b=await a.json();if(b.success&&b.projects){let a=b.projects.map(a=>({name:a.name,status:a.status,message:a.message}));Z(a)}else console.error("获取项目列表失败:",b.error),Z([])}catch(a){console.error("获取项目列表失败:",a),Z([])}finally{_(!1)}},aF=async()=>{if(c){C(!0);try{let a=await fetch("/api/open-project",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:c})}),b=await a.json();b.success||(console.error("打开项目失败:",b.error),a7("error",`打开项目失败: ${b.error}`))}catch(a){console.error("打开项目失败:",a),a7("error","打开项目失败: 网络错误")}finally{C(!1)}}};(0,e.useEffect)(()=>{if(!c){w("项目名称缺失"),u(!1);return}(async()=>{try{let a=await fetch(`/api/project-config?project=${encodeURIComponent(c)}`),b=await a.json();if(b.success){s(b.data);let a={};Object.keys(b.data.envs).forEach(c=>{let d=b.data.envs[c],e="";e=d.proxyEnv[d.currentProxy]?d.proxyEnv[d.currentProxy]:d.currentProxy;let f="";f=d.proxyEnv[d.currentProxy]?d.currentProxy:"custom",a[c]={selectedProxy:e||"",selectedOption:f}}),y(a),A({mockingIntercept:b.data.mockingIntercept||!1,mockOpen:b.data.mockOpen||!1})}else w(b.error)}catch(a){w("获取项目配置失败"),console.error("获取项目配置失败:",a)}finally{u(!1)}})()},[c]),(0,e.useEffect)(()=>{if(r&&c){let a=Object.keys(r.envs),b=new URLSearchParams(window.location.search).get("tab"),c="";(c=K&&("mock"===K||a.includes(K))?K:b&&("mock"===b||a.includes(b))?b:a.length>0?a[0]:"mock")!==K&&(L(c),"mock"===c&&aW())}},[r,c]),(0,e.useEffect)(()=>{aE()},[]);let aG=(0,e.useCallback)(async()=>{if(!c||!r)return;let a={};for(let b of Object.keys(r.envs))a[`${b}`]={loading:!0,running:!1};at(a);let b=Object.keys(r.envs).map(async a=>{try{let b=await fetch(`/api/process/status?projectName=${encodeURIComponent(c)}&envName=${encodeURIComponent(a)}`),d=await b.json();if(d.success&&d.data)return{envName:a,status:d.data}}catch(b){console.error(`获取环境 ${a} 状态失败:`,b)}return{envName:a,status:{running:!1}}}),d=await Promise.all(b),e={};d.forEach(({envName:a,status:b})=>{e[a]={running:b.running||!1,pid:b.pid,startTime:b.startTime,port:b.port,loading:!1}}),at(e)},[c,r]),aH=async a=>{if(!c||!r)return;let b=r.envs[a];if(!b.startCommand)return void a7("error","该环境未配置启动命令");at(b=>({...b,[a]:{...b[a],loading:!0}}));try{let d=await fetch("/api/process/start",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:c,envName:a,startCommand:b.startCommand})}),e=await d.json();if(e.success)at(b=>({...b,[a]:{running:!0,pid:e.data.pid,startTime:e.data.startTime,port:e.data.port,loading:!1}}));else throw Error(e.error||"启动失败")}catch(b){console.error("启动进程失败:",b),a7("error",`启动失败: ${b instanceof Error?b.message:"未知错误"}`),at(b=>({...b,[a]:{...b[a],loading:!1}}))}},aI=async a=>{if(c){at(b=>({...b,[a]:{...b[a],loading:!0}}));try{let b=await fetch(`/api/process/start?projectName=${encodeURIComponent(c)}&envName=${encodeURIComponent(a)}`,{method:"DELETE"}),d=await b.json();if(d.success)at(b=>({...b,[a]:{running:!1,loading:!1}}));else throw Error(d.error||"停止失败")}catch(b){console.error("停止进程失败:",b),a7("error",`停止失败: ${b instanceof Error?b.message:"未知错误"}`),at(b=>({...b,[a]:{...b[a],loading:!1}}))}}},[aJ,aK]=(0,e.useState)(null),aL=a=>{if(!c)return;aJ&&aJ.close(),az([]);let b=new EventSource(`/api/process/logs/stream?projectName=${encodeURIComponent(c)}&envName=${encodeURIComponent(a)}`);b.onmessage=a=>{try{let b=JSON.parse(a.data);"log"===b.type?az(a=>{let c=[...a,b.content];return c.length>1e3?c.slice(-1e3):c}):"init"===b.type?az([b.message]):"end"===b.type&&az(a=>[...a,`[系统] ${b.message}`])}catch(a){console.error("解析日志数据失败:",a)}},b.onerror=a=>{console.error("日志流错误:",a),b.close(),aK(null)},aK(b)},aM=()=>{aJ&&(aJ.close(),aK(null))},aN=a=>{ax(a),av(!0),aL(a)},aO=()=>{av(!1),az([]),ax(""),aM()};(0,e.useEffect)(()=>{if(r&&c){aG();let a=setInterval(()=>{aG()},5e3);return()=>clearInterval(a)}},[r,c,aG]);let aP=(a,b)=>{if(!r)return;let c=r.envs[a],d="";d="custom"===b?x[a]?.selectedOption==="custom"?x[a]?.selectedProxy||"":c.proxyEnv.custom||"":c.proxyEnv[b]||"",y(c=>({...c,[a]:{...c[a],selectedProxy:d,selectedOption:b,saveMessage:""}}))},aQ=(a,b)=>{y(c=>({...c,[a]:{...c[a],selectedProxy:b,saveMessage:""}}))},aR=async a=>{A(b=>({...b,mockingIntercept:a,saving:!0,saveMessage:""}));try{let b=await fetch("/api/project-config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:c,projectConfig:{mockingIntercept:a,mockOpen:z.mockOpen}})}),d=await b.json();if(d.success)s(b=>b?{...b,mockingIntercept:a}:b),A(a=>({...a,saving:!1,saveMessage:"Mock拦截配置已保存"})),setTimeout(()=>{A(a=>({...a,saveMessage:""}))},2e3);else throw Error(d.error||"保存失败")}catch(b){console.error("保存Mock拦截配置失败:",b),A(c=>({...c,mockingIntercept:!a,saving:!1,saveMessage:`保存失败: ${b instanceof Error?b.message:"未知错误"}`})),setTimeout(()=>{A(a=>({...a,saveMessage:""}))},3e3)}},aS=async a=>{A(b=>({...b,mockOpen:a,saving:!0,saveMessage:""}));try{let b=await fetch("/api/project-config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:c,projectConfig:{mockingIntercept:z.mockingIntercept,mockOpen:a}})}),d=await b.json();if(d.success)s(b=>b?{...b,mockOpen:a}:b),A(a=>({...a,saving:!1,saveMessage:"Mock开启配置已保存"})),setTimeout(()=>{A(a=>({...a,saveMessage:""}))},2e3);else throw Error(d.error||"保存失败")}catch(b){console.error("保存Mock开启配置失败:",b),A(c=>({...c,mockOpen:!a,saving:!1,saveMessage:`保存失败: ${b instanceof Error?b.message:"未知错误"}`})),setTimeout(()=>{A(a=>({...a,saveMessage:""}))},3e3)}},aT=async a=>{if(!r||!c)return;let b=x[a]?.selectedProxy?.trim();if(!b)return void y(b=>({...b,[a]:{...b[a],saveMessage:"请先选择或填写代理地址"}}));let d=x[a]?.selectedOption,e="custom"===d;y(b=>({...b,[a]:{...b[a],saving:!0,saveMessage:""}}));try{let f={projectName:c,envName:a,newProxy:e?"custom":d||""};e&&(f.customProxyUrl=b);let g=await fetch("/api/project-config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(f)}),h=await g.json();h.success?(s(c=>{if(!c)return c;let d={...c.envs};return d[a]={...d[a],currentProxy:h.data.currentProxy},"custom"===h.data.currentProxy&&(d[a].proxyEnv={...d[a].proxyEnv,custom:b}),{...c,envs:d}}),y(b=>({...b,[a]:{...b[a],saving:!1,saveMessage:"保存成功"}}))):y(b=>({...b,[a]:{...b[a],saving:!1,saveMessage:`保存失败: ${h.error}`}}))}catch(b){console.error("保存配置失败:",b),y(b=>({...b,[a]:{...b[a],saving:!1,saveMessage:"保存失败: 网络错误"}}))}},aU=async()=>{if(window.confirm("确定要一键关闭所有Mock吗?"))try{let a=await fetch("/api/cleanup-mock",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:c})});(await a.json()).success&&await aW()}catch(a){console.error("清空Mock配置失败:",a)}},aV=async()=>{if(window.confirm("确定要一键开启所有Mock吗?"))try{let a=await fetch("/api/open-all-mock",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:c})});(await a.json()).success&&await aW()}catch(a){console.error("清空Mock配置失败:",a)}},aW=async()=>{if(c){G(!0);try{let a=await fetch(`/api/mock-file?project=${encodeURIComponent(c)}`),b=await a.json();b.success?E(b.data):console.error("获取Mock数据失败:",b.error)}catch(a){console.error("获取Mock数据失败:",a)}finally{G(!1)}}},aX=async(a,b,d)=>{if(c)try{let e=await fetch("/api/mock-setting",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:c,apiName:a,method:b,currentSite:d})}),f=await e.json();f.success?E(c=>c?{...c,mockFiles:c.mockFiles.map(c=>c.apiName===a?{...c,methods:c.methods.map(a=>a.method===b?{...a,setting:{...a.setting,currentSite:d}}:a)}:c)}:c):(console.error("更新场景失败:",f.error),a7("error",`更新场景失败: ${f.error}`))}catch(a){console.error("更新场景失败:",a),a7("error","更新场景失败: 网络错误")}},aY=async(a,b,d)=>{if(c){R(!0),V(!0);try{let e=await fetch(`/api/mock-file-content?project=${encodeURIComponent(c)}&apiName=${encodeURIComponent(a)}&method=${encodeURIComponent(b)}&siteName=${encodeURIComponent(d)}`),f=await e.json();f.success?(N({projectName:c,apiName:a,method:b,siteName:d,content:f.data.content}),P(!0)):(console.error("获取文件内容失败:",f.error),a7("error",`获取文件内容失败: ${f.error}`))}catch(a){console.error("获取文件内容失败:",a),a7("error","获取文件内容失败: 网络错误")}finally{R(!1)}}},aZ=async()=>{if(M){T(!0);try{let a=await fetch("/api/mock-file-content",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(M)}),b=await a.json();b.success?(P(!1),N(null)):(console.error("保存文件失败:",b.error),a7("error",`保存文件失败: ${b.error}`))}catch(a){console.error("保存文件失败:",a),a7("error","保存文件失败: 网络错误")}finally{T(!1)}}},a$=()=>{P(!1),N(null),V(!0)},a_=(a,b)=>{"siteName"===a&&aa||af(c=>({...c,[a]:b}))},a0=(a,b)=>{let c=a.toUpperCase(),d=b.replace(/\//g,"_").replace(/^_/,"");switch(c){case"GET":return`const Mock = require('mockjs');
|
|
5
|
+
For more information, see https://radix-ui.com/primitives/docs/components/${b.docsSlug}`;return(0,d.useEffect)(()=>{a&&(document.getElementById(a)||console.error(c))},[c,a]),null},Z=({contentRef:a,descriptionId:b})=>{let c=X("DialogDescriptionWarning"),e=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${c.contentName}}.`;return(0,d.useEffect)(()=>{let c=a.current?.getAttribute("aria-describedby");b&&c&&(document.getElementById(b)||console.warn(e))},[e,a,b]),null},$=y,_=A,aa=E,ab=G,ac=K,ad=P,ae=R,af=T},76315:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({__iconNode:()=>b,default:()=>c});var d=a.i(49756);let b=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],c=(0,d.default)("x",b)}},97231:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({XIcon:()=>d.default});var d=a.i(76315)},22529:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({Dialog:()=>h,DialogClose:()=>k,DialogContent:()=>m,DialogDescription:()=>q,DialogFooter:()=>o,DialogHeader:()=>n,DialogOverlay:()=>l,DialogPortal:()=>j,DialogTitle:()=>p,DialogTrigger:()=>i});var d=a.i(99559),e=a.i(66067),f=a.i(97231),g=a.i(61073);function h({...a}){return(0,d.jsx)(e.Root,{"data-slot":"dialog",...a})}function i({...a}){return(0,d.jsx)(e.Trigger,{"data-slot":"dialog-trigger",...a})}function j({...a}){return(0,d.jsx)(e.Portal,{"data-slot":"dialog-portal",...a})}function k({...a}){return(0,d.jsx)(e.Close,{"data-slot":"dialog-close",...a})}function l({className:a,...b}){return(0,d.jsx)(e.Overlay,{"data-slot":"dialog-overlay",className:(0,g.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",a),...b})}function m({className:a,children:b,showCloseButton:c=!0,...h}){return(0,d.jsxs)(j,{"data-slot":"dialog-portal",children:[(0,d.jsx)(l,{}),(0,d.jsxs)(e.Content,{"data-slot":"dialog-content",className:(0,g.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",a),...h,children:[b,c&&(0,d.jsxs)(e.Close,{"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,d.jsx)(f.XIcon,{}),(0,d.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function n({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"dialog-header",className:(0,g.cn)("flex flex-col gap-2 text-center sm:text-left",a),...b})}function o({className:a,...b}){return(0,d.jsx)("div",{"data-slot":"dialog-footer",className:(0,g.cn)("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",a),...b})}function p({className:a,...b}){return(0,d.jsx)(e.Title,{"data-slot":"dialog-title",className:(0,g.cn)("text-lg leading-none font-semibold",a),...b})}function q({className:a,...b}){return(0,d.jsx)(e.Description,{"data-slot":"dialog-description",className:(0,g.cn)("text-muted-foreground text-sm",a),...b})}},84172:a=>{"use strict";var{g:b,__dirname:c}=a;function d(a,b,c){return b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function e(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function f(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?e(Object(c),!0).forEach(function(b){d(a,b,c[b])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):e(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}function g(a,b){if(null==a)return{};var c,d,e={},f=Object.keys(a);for(d=0;d<f.length;d++)c=f[d],b.indexOf(c)>=0||(e[c]=a[c]);return e}function h(a,b){if(null==a)return{};var c,d,e=g(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],!(b.indexOf(c)>=0)&&Object.prototype.propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}function i(a,b){return j(a)||k(a,b)||l(a,b)||n()}function j(a){if(Array.isArray(a))return a}function k(a,b){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(a)){var c=[],d=!0,e=!1,f=void 0;try{for(var g,h=a[Symbol.iterator]();!(d=(g=h.next()).done)&&(c.push(g.value),!b||c.length!==b);d=!0);}catch(a){e=!0,f=a}finally{try{d||null==h.return||h.return()}finally{if(e)throw f}}return c}}function l(a,b){if(a){if("string"==typeof a)return m(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);if("Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c)return Array.from(a);if("Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c))return m(a,b)}}function m(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}function n(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}a.s({arrayLikeToArray:()=>m,arrayWithHoles:()=>j,defineProperty:()=>d,iterableToArrayLimit:()=>k,nonIterableRest:()=>n,objectSpread2:()=>f,objectWithoutProperties:()=>h,objectWithoutPropertiesLoose:()=>g,slicedToArray:()=>i,unsupportedIterableToArray:()=>l})},21782:a=>{"use strict";var{g:b,__dirname:c}=a;{function d(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function e(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?d(Object(c),!0).forEach(function(b){var d;d=c[b],b in a?Object.defineProperty(a,b,{value:d,enumerable:!0,configurable:!0,writable:!0}):a[b]=d}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):d(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}function f(a){return function b(){for(var c=this,d=arguments.length,e=Array(d),f=0;f<d;f++)e[f]=arguments[f];return e.length>=a.length?a.apply(this,e):function(){for(var a=arguments.length,d=Array(a),f=0;f<a;f++)d[f]=arguments[f];return b.apply(c,[].concat(e,d))}}}function g(a){return({}).toString.call(a).includes("Object")}function h(a){return"function"==typeof a}a.s({default:()=>b});var i=f(function(a,b){throw Error(a[b]||a.default)})({initialIsRequired:"initial state is required",initialType:"initial state should be an object",initialContent:"initial state shouldn't be an empty object",handlerType:"handler should be an object or a function",handlersType:"all handlers should be a functions",selectorType:"selector should be a function",changeType:"provided value of changes should be an object",changeField:'it seams you want to change a field in the state which is not specified in the "initial" state',default:"an unknown error accured in `state-local` package"}),j={changes:function(a,b){return g(b)||i("changeType"),Object.keys(b).some(function(b){return!Object.prototype.hasOwnProperty.call(a,b)})&&i("changeField"),b},selector:function(a){h(a)||i("selectorType")},handler:function(a){h(a)||g(a)||i("handlerType"),g(a)&&Object.values(a).some(function(a){return!h(a)})&&i("handlersType")},initial:function(a){a||i("initialIsRequired"),g(a)||i("initialType"),Object.keys(a).length||i("initialContent")}};function k(a,b){return h(b)?b(a.current):b}function l(a,b){return a.current=e(e({},a.current),b),b}function m(a,b,c){return h(b)?b(a.current):Object.keys(c).forEach(function(c){var d;return null==(d=b[c])?void 0:d.call(b,a.current[c])}),c}let b={create:function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};j.initial(a),j.handler(b);var c={current:a},d=f(m)(c,b),e=f(l)(c),g=f(j.changes)(a),h=f(k)(c);return[function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(a){return a};return j.selector(a),a(c.current)},function(a){(function(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];return function(a){return b.reduceRight(function(a,b){return b(a)},a)}})(d,e,g,h)(a)}]}}}},14260:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({default:()=>b});let b={paths:{vs:"https://cdn.jsdelivr.net/npm/monaco-editor@0.52.2/min/vs"}}}},45287:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({default:()=>b});let b=function(a){return function b(){for(var c=this,d=arguments.length,e=Array(d),f=0;f<d;f++)e[f]=arguments[f];return e.length>=a.length?a.apply(this,e):function(){for(var a=arguments.length,d=Array(a),f=0;f<a;f++)d[f]=arguments[f];return b.apply(c,[].concat(e,d))}}}}},82863:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({default:()=>b});let b=function(a){return({}).toString.call(a).includes("Object")}}},72859:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({default:()=>b,errorHandler:()=>g,errorMessages:()=>f});var d=a.i(45287),e=a.i(82863),f={configIsRequired:"the configuration object is required",configType:"the configuration object should be an object",default:"an unknown error accured in `@monaco-editor/loader` package",deprecation:"Deprecation warning!\n You are using deprecated way of configuration.\n\n Instead of using\n monaco.config({ urls: { monacoBase: '...' } })\n use\n monaco.config({ paths: { vs: '...' } })\n\n For more please check the link https://github.com/suren-atoyan/monaco-loader#config\n "},g=(0,d.default)(function(a,b){throw Error(a[b]||a.default)})(f);let b={config:function(a){return(a||g("configIsRequired"),(0,e.default)(a)||g("configType"),a.urls)?(console.warn(f.deprecation),{paths:{vs:a.urls.monacoBase}}):a}}}},87871:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({default:()=>b});let b=function(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];return function(a){return b.reduceRight(function(a,b){return b(a)},a)}}}},28251:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({default:()=>b});var d=a.i(84172);let b=function a(b,c){return Object.keys(c).forEach(function(d){c[d]instanceof Object&&b[d]&&Object.assign(c[d],a(b[d],c[d]))}),(0,d.objectSpread2)((0,d.objectSpread2)({},b),c)}}},83021:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({CANCELATION_MESSAGE:()=>d,default:()=>b});var d={type:"cancelation",msg:"operation is manually canceled"};let b=function(a){var b=!1,c=new Promise(function(c,e){a.then(function(a){return b?e(d):c(a)}),a.catch(e)});return c.cancel=function(){return b=!0},c}}},75092:a=>{"use strict";var{g:b,__dirname:c}=a;{a.s({default:()=>b});var d=a.i(84172),e=a.i(21782),f=a.i(14260),g=a.i(72859),h=a.i(87871),i=a.i(28251),j=a.i(83021),k=e.default.create({config:f.default,isInitialized:!1,resolve:null,reject:null,monaco:null}),l=(0,d.slicedToArray)(k,2),m=l[0],n=l[1];function o(a){return document.body.appendChild(a)}function p(a){var b,c,d=m(function(a){return{config:a.config,reject:a.reject}}),e=(b="".concat(d.config.paths.vs,"/loader.js"),c=document.createElement("script"),b&&(c.src=b),c);return e.onload=function(){return a()},e.onerror=d.reject,e}function q(){var a=m(function(a){return{config:a.config,resolve:a.resolve,reject:a.reject}}),b=window.require;b.config(a.config),b(["vs/editor/editor.main"],function(b){r(b),a.resolve(b)},function(b){a.reject(b)})}function r(a){m().monaco||n({monaco:a})}var s=new Promise(function(a,b){return n({resolve:a,reject:b})});let b={config:function(a){var b=g.default.config(a),c=b.monaco,e=(0,d.objectWithoutProperties)(b,["monaco"]);n(function(a){return{config:(0,i.default)(a.config,e),monaco:c}})},init:function(){var a=m(function(a){return{monaco:a.monaco,isInitialized:a.isInitialized,resolve:a.resolve}});if(!a.isInitialized){if(n({isInitialized:!0}),a.monaco)return a.resolve(a.monaco),(0,j.default)(s);if(window.monaco&&window.monaco.editor)return r(window.monaco),a.resolve(window.monaco),(0,j.default)(s);(0,h.default)(o,p)(q)}return(0,j.default)(s)},__getMonacoInstance:function(){return m(function(a){return a.monaco})}}}},74403:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({}),a.i(75092)},30132:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({}),a.i(75092),a.i(74403)},22027:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({DiffEditor:()=>o,Editor:()=>s,default:()=>t,useMonaco:()=>p}),a.i(30132);var d=a.i(57560),e=a.i(75092),f={wrapper:{display:"flex",position:"relative",textAlign:"initial"},fullWidth:{width:"100%"},hide:{display:"none"}},g={container:{display:"flex",height:"100%",width:"100%",justifyContent:"center",alignItems:"center"}},h=function({children:a}){return d.default.createElement("div",{style:g.container},a)},i=(0,d.memo)(function({width:a,height:b,isEditorReady:c,loading:e,_ref:g,className:i,wrapperProps:j}){return d.default.createElement("section",{style:{...f.wrapper,width:a,height:b},...j},!c&&d.default.createElement(h,null,e),d.default.createElement("div",{ref:g,style:{...f.fullWidth,...!c&&f.hide},className:i}))}),j=function(a){(0,d.useEffect)(a,[])},k=function(a,b,c=!0){let e=(0,d.useRef)(!0);(0,d.useEffect)(e.current||!c?()=>{e.current=!1}:a,b)};function l(){}function m(a,b,c,d){var e,f,g,h,i,j;return e=a,f=d,e.editor.getModel(n(e,f))||(g=a,h=b,i=c,j=d,g.editor.createModel(h,i,j?n(g,j):void 0))}function n(a,b){return a.Uri.parse(b)}var o=(0,d.memo)(function({original:a,modified:b,language:c,originalLanguage:f,modifiedLanguage:g,originalModelPath:h,modifiedModelPath:n,keepCurrentOriginalModel:o=!1,keepCurrentModifiedModel:p=!1,theme:q="light",loading:r="Loading...",options:s={},height:t="100%",width:u="100%",className:v,wrapperProps:w={},beforeMount:x=l,onMount:y=l}){let[z,A]=(0,d.useState)(!1),[B,C]=(0,d.useState)(!0),D=(0,d.useRef)(null),E=(0,d.useRef)(null),F=(0,d.useRef)(null),G=(0,d.useRef)(y),H=(0,d.useRef)(x),I=(0,d.useRef)(!1);j(()=>{let a=e.default.init();return a.then(a=>(E.current=a)&&C(!1)).catch(a=>a?.type!=="cancelation"&&console.error("Monaco initialization: error:",a)),()=>{let b;return D.current?(b=D.current?.getModel(),void(o||b?.original?.dispose(),p||b?.modified?.dispose(),D.current?.dispose())):a.cancel()}}),k(()=>{if(D.current&&E.current){let b=D.current.getOriginalEditor(),d=m(E.current,a||"",f||c||"text",h||"");d!==b.getModel()&&b.setModel(d)}},[h],z),k(()=>{if(D.current&&E.current){let a=D.current.getModifiedEditor(),d=m(E.current,b||"",g||c||"text",n||"");d!==a.getModel()&&a.setModel(d)}},[n],z),k(()=>{let a=D.current.getModifiedEditor();a.getOption(E.current.editor.EditorOption.readOnly)?a.setValue(b||""):b!==a.getValue()&&(a.executeEdits("",[{range:a.getModel().getFullModelRange(),text:b||"",forceMoveMarkers:!0}]),a.pushUndoStop())},[b],z),k(()=>{D.current?.getModel()?.original.setValue(a||"")},[a],z),k(()=>{let{original:a,modified:b}=D.current.getModel();E.current.editor.setModelLanguage(a,f||c||"text"),E.current.editor.setModelLanguage(b,g||c||"text")},[c,f,g],z),k(()=>{E.current?.editor.setTheme(q)},[q],z),k(()=>{D.current?.updateOptions(s)},[s],z);let J=(0,d.useCallback)(()=>{if(!E.current)return;H.current(E.current);let d=m(E.current,a||"",f||c||"text",h||""),e=m(E.current,b||"",g||c||"text",n||"");D.current?.setModel({original:d,modified:e})},[c,b,g,a,f,h,n]),K=(0,d.useCallback)(()=>{!I.current&&F.current&&(D.current=E.current.editor.createDiffEditor(F.current,{automaticLayout:!0,...s}),J(),E.current?.editor.setTheme(q),A(!0),I.current=!0)},[s,q,J]);return(0,d.useEffect)(()=>{z&&G.current(D.current,E.current)},[z]),(0,d.useEffect)(()=>{B||z||K()},[B,z,K]),d.default.createElement(i,{width:u,height:t,isEditorReady:z,loading:r,_ref:F,className:v,wrapperProps:w})}),p=function(){let[a,b]=(0,d.useState)(e.default.__getMonacoInstance());return j(()=>{let c;return a||(c=e.default.init()).then(a=>{b(a)}),()=>c?.cancel()}),a},q=function(a){let b=(0,d.useRef)();return(0,d.useEffect)(()=>{b.current=a},[a]),b.current},r=new Map,s=(0,d.memo)(function({defaultValue:a,defaultLanguage:b,defaultPath:c,value:f,language:g,path:h,theme:n="light",line:o,loading:p="Loading...",options:s={},overrideServices:t={},saveViewState:u=!0,keepCurrentModel:v=!1,width:w="100%",height:x="100%",className:y,wrapperProps:z={},beforeMount:A=l,onMount:B=l,onChange:C,onValidate:D=l}){let[E,F]=(0,d.useState)(!1),[G,H]=(0,d.useState)(!0),I=(0,d.useRef)(null),J=(0,d.useRef)(null),K=(0,d.useRef)(null),L=(0,d.useRef)(B),M=(0,d.useRef)(A),N=(0,d.useRef)(),O=(0,d.useRef)(f),P=q(h),Q=(0,d.useRef)(!1),R=(0,d.useRef)(!1);j(()=>{let a=e.default.init();return a.then(a=>(I.current=a)&&H(!1)).catch(a=>a?.type!=="cancelation"&&console.error("Monaco initialization: error:",a)),()=>J.current?void(N.current?.dispose(),v?u&&r.set(h,J.current.saveViewState()):J.current.getModel()?.dispose(),J.current.dispose()):a.cancel()}),k(()=>{let d=m(I.current,a||f||"",b||g||"",h||c||"");d!==J.current?.getModel()&&(u&&r.set(P,J.current?.saveViewState()),J.current?.setModel(d),u&&J.current?.restoreViewState(r.get(h)))},[h],E),k(()=>{J.current?.updateOptions(s)},[s],E),k(()=>{J.current&&void 0!==f&&(J.current.getOption(I.current.editor.EditorOption.readOnly)?J.current.setValue(f):f!==J.current.getValue()&&(R.current=!0,J.current.executeEdits("",[{range:J.current.getModel().getFullModelRange(),text:f,forceMoveMarkers:!0}]),J.current.pushUndoStop(),R.current=!1))},[f],E),k(()=>{let a=J.current?.getModel();a&&g&&I.current?.editor.setModelLanguage(a,g)},[g],E),k(()=>{void 0!==o&&J.current?.revealLine(o)},[o],E),k(()=>{I.current?.editor.setTheme(n)},[n],E);let S=(0,d.useCallback)(()=>{if(!(!K.current||!I.current)&&!Q.current){M.current(I.current);let d=h||c,e=m(I.current,f||a||"",b||g||"",d||"");J.current=I.current?.editor.create(K.current,{model:e,automaticLayout:!0,...s},t),u&&J.current.restoreViewState(r.get(d)),I.current.editor.setTheme(n),void 0!==o&&J.current.revealLine(o),F(!0),Q.current=!0}},[a,b,c,f,g,h,s,t,u,n,o]);return(0,d.useEffect)(()=>{E&&L.current(J.current,I.current)},[E]),(0,d.useEffect)(()=>{G||E||S()},[G,E,S]),O.current=f,(0,d.useEffect)(()=>{E&&C&&(N.current?.dispose(),N.current=J.current?.onDidChangeModelContent(a=>{R.current||C(J.current.getValue(),a)}))},[E,C]),(0,d.useEffect)(()=>{if(E){let a=I.current.editor.onDidChangeMarkers(a=>{let b=J.current.getModel()?.uri;if(b&&a.find(a=>a.path===b.path)){let a=I.current.editor.getModelMarkers({resource:b});D?.(a)}});return()=>{a?.dispose()}}return()=>{}},[E,D]),d.default.createElement(i,{width:w,height:x,isEditorReady:E,loading:p,_ref:K,className:y,wrapperProps:z})}),t=s},28783:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({}),a.i(30132),a.i(57560),a.i(22027)},82587:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({default:()=>i});var d=a.i(99559),e=a.i(57560),f=a.i(60284),g=a.i(94688),h=a.i(50923);function i({className:a,currentProjectName:b,currentEnvName:c}){let[i,j]=(0,e.useState)([]),[k,l]=(0,e.useState)(!0),[m,n]=(0,e.useState)(null),[o,p]=(0,e.useState)(new Set),[q,r]=(0,e.useState)(""),[s,t]=(0,e.useState)(!1),[u,v]=(0,e.useState)(""),[w,x]=(0,e.useState)(!1),[y,z]=(0,e.useState)(null),A=(0,e.useRef)(null);(0,e.useEffect)(()=>{if(i.length>0){let a=i.find(a=>a.projectName===b&&a.envName===c);if(a&&a.subApps.length>0){let b=new Set;a.subApps.forEach(a=>{i.forEach(c=>{c.envName===a&&b.add(F(c))})}),p(b)}}},[i,b,c]);let B=async()=>{l(!0),n(null);try{let a=await fetch("/api/all-projects-envs"),b=await a.json();b.success?j(b.data):n(b.error||"获取项目环境信息失败")}catch(a){console.error("获取项目环境信息失败:",a),n("获取项目环境信息失败: 网络错误")}finally{l(!1)}};(0,e.useEffect)(()=>(B(),C(),()=>{D()}),[c]);let C=()=>{A.current&&D();let a=`microapp-table-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,b=`/api/microapp-proxy-change-stream?env=${encodeURIComponent(c)}&clientId=${encodeURIComponent(a)}`;console.log(`[SSE] 建立连接到: ${b}`),z(null);try{let a=new EventSource(b);A.current=a,a.onopen=()=>{console.log(`[SSE] 连接已建立,环境: ${c}`),x(!0),z(null)},a.onmessage=a=>{try{let b=JSON.parse(a.data);E(b)}catch(a){console.error("[SSE] 解析消息失败:",a)}},a.onerror=()=>{console.error(`[SSE] 连接错误,环境: ${c}`),x(!1),z("实时推送连接断开"),setTimeout(()=>{A.current&&A.current.readyState!==EventSource.CLOSED||(console.log("[SSE] 尝试重新连接..."),C())},3e3)}}catch(a){console.error("[SSE] 建立连接失败:",a),z("无法建立实时推送连接")}},D=()=>{A.current&&(console.log("[SSE] 关闭连接"),A.current.close(),A.current=null,x(!1))},E=a=>{switch(console.log("[SSE] 收到消息:",a),a.type){case"connection-established":console.log(`[SSE] 连接确认: ${a.message}`),x(!0),z(null);break;case"microapp-proxy-config-change":if(console.log(`[SSE] 配置变化通知: 环境=${a.envName}`),console.log(`[SSE] 变化详情:`,a.changes),a.changes){let{added:b,removed:c}=a.changes,d="";b.length>0&&(d+=`新增: ${b.join(", ")}`),c.length>0&&(d&&(d+="; "),d+=`移除: ${c.join(", ")}`),v(`配置已更新 (${d})`)}else v("配置已更新");B(),setTimeout(()=>v(""),3e3);break;case"heartbeat":x(!0),z(null);break;default:console.log("[SSE] 未知消息类型:",a.type)}},F=a=>`${a.projectName}-${a.envName}`,G=q.trim()?i.filter(a=>a.projectName.toLowerCase().includes(q.toLowerCase())||a.envName.toLowerCase().includes(q.toLowerCase())||a.host.toLowerCase().includes(q.toLowerCase())):i,H=(a,b)=>{let c=new Set(o);b?c.add(a):c.delete(a),p(c)},I=a=>{a?p(new Set(G.map(a=>F(a)))):p(new Set)},J=async()=>{t(!0),v("");try{let a=Array.from(o).map(a=>{let b=i.find(b=>F(b)===a);return b?b.envName:""}).filter(a=>""!==a),d=[...new Set(a)],e=await fetch("/api/microapp-proxy-config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:b,envName:c,selectedItems:d})}),f=await e.json();f.success?(v(f.message||"保存成功"),await B()):v(`保存失败: ${f.error}`)}catch(a){console.error("保存MicroApp代理配置失败:",a),v("保存失败: 网络错误")}finally{t(!1),setTimeout(()=>{v("")},5e3)}},K=o.size,L=G.length>0&&G.every(a=>o.has(F(a))),M=G.some(a=>o.has(F(a)));return k?(0,d.jsxs)("div",{className:`p-6 bg-gray-50 rounded-lg ${a}`,children:[(0,d.jsx)("h4",{className:"text-md font-medium mb-4",children:"MicroApp代理配置"}),(0,d.jsx)("div",{className:"text-center py-8",children:(0,d.jsx)("p",{className:"text-gray-500",children:"加载中..."})})]}):m?(0,d.jsxs)("div",{className:`p-6 bg-gray-50 rounded-lg ${a}`,children:[(0,d.jsx)("h4",{className:"text-md font-medium mb-4",children:"MicroApp代理配置"}),(0,d.jsxs)("div",{className:"text-center py-8",children:[(0,d.jsx)("p",{className:"text-red-500",children:m}),(0,d.jsx)(h.Button,{variant:"outline",size:"sm",onClick:B,className:"mt-2",children:"重试"})]})]}):(0,d.jsxs)("div",{className:`p-6 bg-gray-50 rounded-lg ${a}`,children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("h4",{className:"text-md font-medium",children:"MicroApp代理配置"}),(0,d.jsxs)("p",{className:"text-xs text-gray-500 mt-1",children:["为 ",b," - ",c," 环境配置微应用代理"]})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)("div",{className:"flex items-center gap-1",children:[(0,d.jsx)("div",{className:`w-2 h-2 rounded-full ${w?"bg-green-500":"bg-red-500"}`,title:w?"实时推送已连接":"实时推送断开"}),(0,d.jsx)("span",{className:"text-xs text-gray-500",children:w?"实时":"离线"})]}),(u||y)&&(0,d.jsx)("span",{className:`text-sm max-w-xs ${u&&u.includes("失败")||y?"text-red-600":u&&u.includes("但有")?"text-yellow-600":"text-green-600"}`,title:u||y||"",children:u||y}),(0,d.jsx)(h.Button,{variant:"outline",size:"sm",onClick:B,disabled:s,children:"刷新"}),(0,d.jsx)(h.Button,{variant:"default",size:"sm",onClick:J,disabled:s,children:s?"保存中...":"保存配置"})]})]}),(0,d.jsxs)("div",{className:"space-y-3 mb-4",children:[(0,d.jsx)("div",{className:"flex items-center gap-2",children:(0,d.jsxs)("div",{className:"relative flex-1 max-w-md",children:[(0,d.jsx)(g.Input,{placeholder:"搜索项目名称、环境名称或Host...",value:q,onChange:a=>r(a.target.value),className:"pr-8"}),q&&(0,d.jsx)(h.Button,{variant:"ghost",size:"sm",onClick:()=>{r("")},className:"absolute right-1 top-1/2 transform -translate-y-1/2 h-6 w-6 p-0 hover:bg-gray-100",children:"×"})]})}),(0,d.jsxs)("div",{className:"flex items-center justify-between text-sm text-gray-600",children:[(0,d.jsxs)("div",{className:"flex items-center gap-4",children:[(0,d.jsxs)("span",{children:["显示 ",G.length," 个环境配置",q&&` (搜索: "${q}")`]}),K>0&&(0,d.jsxs)("span",{className:"text-blue-600 font-medium",children:["已选择 ",K," 项"]})]}),K>0&&(0,d.jsx)(h.Button,{variant:"outline",size:"sm",onClick:()=>{p(new Set)},children:"清空选择"})]})]}),G.length>0?(0,d.jsx)("div",{className:"border rounded-md",children:(0,d.jsxs)(f.Table,{children:[(0,d.jsx)(f.TableHeader,{children:(0,d.jsxs)(f.TableRow,{children:[(0,d.jsx)(f.TableHead,{className:"w-12",children:(0,d.jsx)("input",{type:"checkbox",checked:L,onChange:a=>I(a.target.checked),ref:a=>{a&&(a.indeterminate=M&&!L)},className:"rounded border-gray-300"})}),(0,d.jsx)(f.TableHead,{children:"环境名称"}),(0,d.jsx)(f.TableHead,{children:"项目名称"}),(0,d.jsx)(f.TableHead,{children:"Host地址"}),(0,d.jsx)(f.TableHead,{children:"当前代理"})]})}),(0,d.jsx)(f.TableBody,{children:G.map(a=>{let b=F(a),c=o.has(b);return(0,d.jsxs)(f.TableRow,{children:[(0,d.jsx)(f.TableCell,{children:(0,d.jsx)("input",{type:"checkbox",checked:c,onChange:a=>H(b,a.target.checked),className:"rounded border-gray-300"})}),(0,d.jsx)(f.TableCell,{children:(0,d.jsx)("span",{className:"px-2 py-1 rounded text-xs font-medium bg-blue-100 text-blue-800",children:a.envName})}),(0,d.jsx)(f.TableCell,{className:"font-medium",children:a.projectName}),(0,d.jsx)(f.TableCell,{className:"font-mono text-sm",children:a.host}),(0,d.jsxs)(f.TableCell,{className:"text-sm text-gray-600",children:[a.currentProxy,a.proxyEnv[a.currentProxy]&&(0,d.jsx)("div",{className:"text-xs text-gray-500",children:a.proxyEnv[a.currentProxy]})]})]},b)})})]})}):(0,d.jsx)("div",{className:"text-center py-8",children:(0,d.jsx)("p",{className:"text-gray-500",children:q?"没有找到匹配的环境配置":"暂无环境配置"})}),K>0&&(0,d.jsx)("div",{className:"mt-4 p-3 bg-blue-50 rounded-md",children:(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsxs)("span",{className:"text-sm text-blue-700",children:["已选择 ",K," 个环境配置将作为微应用代理"]}),(0,d.jsx)("span",{className:"text-xs text-blue-600",children:"点击上方“保存配置”按钮保存设置"})]})})]})}},23936:function(a){var{g:b,__dirname:c,m:d,e:e}=a},22842:function(a){var{g:b,__dirname:c,m:d,e:e}=a;a.r(23936);var f=a.r(57560),g=f&&"object"==typeof f&&"default"in f?f:{default:f},h="undefined"!=typeof process&&process.env&&!0,i=function(a){return"[object String]"===Object.prototype.toString.call(a)},j=function(){function a(a){var b=void 0===a?{}:a,c=b.name,d=void 0===c?"stylesheet":c,e=b.optimizeForSpeed,f=void 0===e?h:e;k(i(d),"`name` must be a string"),this._name=d,this._deletedRulePlaceholder="#"+d+"-deleted-rule____{}",k("boolean"==typeof f,"`optimizeForSpeed` must be a boolean"),this._optimizeForSpeed=f,this._serverSheet=void 0,this._tags=[],this._injected=!1,this._rulesCount=0;var g="undefined"!=typeof window&&document.querySelector('meta[property="csp-nonce"]');this._nonce=g?g.getAttribute("content"):null}var b,c=a.prototype;return c.setOptimizeForSpeed=function(a){k("boolean"==typeof a,"`setOptimizeForSpeed` accepts a boolean"),k(0===this._rulesCount,"optimizeForSpeed cannot be when rules have already been inserted"),this.flush(),this._optimizeForSpeed=a,this.inject()},c.isOptimizeForSpeed=function(){return this._optimizeForSpeed},c.inject=function(){var a=this;if(k(!this._injected,"sheet already injected"),this._injected=!0,"undefined"!=typeof window&&this._optimizeForSpeed){this._tags[0]=this.makeStyleTag(this._name),this._optimizeForSpeed="insertRule"in this.getSheet(),this._optimizeForSpeed||(h||console.warn("StyleSheet: optimizeForSpeed mode not supported falling back to standard mode."),this.flush(),this._injected=!0);return}this._serverSheet={cssRules:[],insertRule:function(b,c){return"number"==typeof c?a._serverSheet.cssRules[c]={cssText:b}:a._serverSheet.cssRules.push({cssText:b}),c},deleteRule:function(b){a._serverSheet.cssRules[b]=null}}},c.getSheetForTag=function(a){if(a.sheet)return a.sheet;for(var b=0;b<document.styleSheets.length;b++)if(document.styleSheets[b].ownerNode===a)return document.styleSheets[b]},c.getSheet=function(){return this.getSheetForTag(this._tags[this._tags.length-1])},c.insertRule=function(a,b){if(k(i(a),"`insertRule` accepts only strings"),"undefined"==typeof window)return"number"!=typeof b&&(b=this._serverSheet.cssRules.length),this._serverSheet.insertRule(a,b),this._rulesCount++;if(this._optimizeForSpeed){var c=this.getSheet();"number"!=typeof b&&(b=c.cssRules.length);try{c.insertRule(a,b)}catch(b){return h||console.warn("StyleSheet: illegal rule: \n\n"+a+"\n\nSee https://stackoverflow.com/q/20007992 for more info"),-1}}else{var d=this._tags[b];this._tags.push(this.makeStyleTag(this._name,a,d))}return this._rulesCount++},c.replaceRule=function(a,b){if(this._optimizeForSpeed||"undefined"==typeof window){var c="undefined"!=typeof window?this.getSheet():this._serverSheet;if(b.trim()||(b=this._deletedRulePlaceholder),!c.cssRules[a])return a;c.deleteRule(a);try{c.insertRule(b,a)}catch(d){h||console.warn("StyleSheet: illegal rule: \n\n"+b+"\n\nSee https://stackoverflow.com/q/20007992 for more info"),c.insertRule(this._deletedRulePlaceholder,a)}}else{var d=this._tags[a];k(d,"old rule at index `"+a+"` not found"),d.textContent=b}return a},c.deleteRule=function(a){if("undefined"==typeof window)return void this._serverSheet.deleteRule(a);if(this._optimizeForSpeed)this.replaceRule(a,"");else{var b=this._tags[a];k(b,"rule at index `"+a+"` not found"),b.parentNode.removeChild(b),this._tags[a]=null}},c.flush=function(){this._injected=!1,this._rulesCount=0,"undefined"!=typeof window?(this._tags.forEach(function(a){return a&&a.parentNode.removeChild(a)}),this._tags=[]):this._serverSheet.cssRules=[]},c.cssRules=function(){var a=this;return"undefined"==typeof window?this._serverSheet.cssRules:this._tags.reduce(function(b,c){return c?b=b.concat(Array.prototype.map.call(a.getSheetForTag(c).cssRules,function(b){return b.cssText===a._deletedRulePlaceholder?null:b})):b.push(null),b},[])},c.makeStyleTag=function(a,b,c){b&&k(i(b),"makeStyleTag accepts only strings as second parameter");var d=document.createElement("style");this._nonce&&d.setAttribute("nonce",this._nonce),d.type="text/css",d.setAttribute("data-"+a,""),b&&d.appendChild(document.createTextNode(b));var e=document.head||document.getElementsByTagName("head")[0];return c?e.insertBefore(d,c):e.appendChild(d),d},b=[{key:"length",get:function(){return this._rulesCount}}],function(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}(a.prototype,b),a}();function k(a,b){if(!a)throw Error("StyleSheet: "+b+".")}var l=function(a){for(var b=5381,c=a.length;c;)b=33*b^a.charCodeAt(--c);return b>>>0},m={};function n(a,b){if(!b)return"jsx-"+a;var c=String(b),d=a+c;return m[d]||(m[d]="jsx-"+l(a+"-"+c)),m[d]}function o(a,b){"undefined"==typeof window&&(b=b.replace(/\/style/gi,"\\/style"));var c=a+b;return m[c]||(m[c]=b.replace(/__jsx-style-dynamic-selector/g,a)),m[c]}var p=function(){function a(a){var b=void 0===a?{}:a,c=b.styleSheet,d=void 0===c?null:c,e=b.optimizeForSpeed,f=void 0!==e&&e;this._sheet=d||new j({name:"styled-jsx",optimizeForSpeed:f}),this._sheet.inject(),d&&"boolean"==typeof f&&(this._sheet.setOptimizeForSpeed(f),this._optimizeForSpeed=this._sheet.isOptimizeForSpeed()),this._fromServer=void 0,this._indices={},this._instancesCounts={}}var b=a.prototype;return b.add=function(a){var b=this;void 0===this._optimizeForSpeed&&(this._optimizeForSpeed=Array.isArray(a.children),this._sheet.setOptimizeForSpeed(this._optimizeForSpeed),this._optimizeForSpeed=this._sheet.isOptimizeForSpeed()),"undefined"==typeof window||this._fromServer||(this._fromServer=this.selectFromServer(),this._instancesCounts=Object.keys(this._fromServer).reduce(function(a,b){return a[b]=0,a},{}));var c=this.getIdAndRules(a),d=c.styleId,e=c.rules;if(d in this._instancesCounts){this._instancesCounts[d]+=1;return}var f=e.map(function(a){return b._sheet.insertRule(a)}).filter(function(a){return -1!==a});this._indices[d]=f,this._instancesCounts[d]=1},b.remove=function(a){var b=this,c=this.getIdAndRules(a).styleId;if(function(a,b){if(!a)throw Error("StyleSheetRegistry: "+b+".")}(c in this._instancesCounts,"styleId: `"+c+"` not found"),this._instancesCounts[c]-=1,this._instancesCounts[c]<1){var d=this._fromServer&&this._fromServer[c];d?(d.parentNode.removeChild(d),delete this._fromServer[c]):(this._indices[c].forEach(function(a){return b._sheet.deleteRule(a)}),delete this._indices[c]),delete this._instancesCounts[c]}},b.update=function(a,b){this.add(b),this.remove(a)},b.flush=function(){this._sheet.flush(),this._sheet.inject(),this._fromServer=void 0,this._indices={},this._instancesCounts={}},b.cssRules=function(){var a=this,b=this._fromServer?Object.keys(this._fromServer).map(function(b){return[b,a._fromServer[b]]}):[],c=this._sheet.cssRules();return b.concat(Object.keys(this._indices).map(function(b){return[b,a._indices[b].map(function(a){return c[a].cssText}).join(a._optimizeForSpeed?"":"\n")]}).filter(function(a){return!!a[1]}))},b.styles=function(a){var b,c;return b=this.cssRules(),void 0===(c=a)&&(c={}),b.map(function(a){var b=a[0],d=a[1];return g.default.createElement("style",{id:"__"+b,key:"__"+b,nonce:c.nonce?c.nonce:void 0,dangerouslySetInnerHTML:{__html:d}})})},b.getIdAndRules=function(a){var b=a.children,c=a.dynamic,d=a.id;if(c){var e=n(d,c);return{styleId:e,rules:Array.isArray(b)?b.map(function(a){return o(e,a)}):[o(e,b)]}}return{styleId:n(d),rules:Array.isArray(b)?b:[b]}},b.selectFromServer=function(){return Array.prototype.slice.call(document.querySelectorAll('[id^="__jsx-"]')).reduce(function(a,b){return a[b.id.slice(2)]=b,a},{})},a}(),q=f.createContext(null);function r(){return new p}function s(){return f.useContext(q)}q.displayName="StyleSheetContext";var t=g.default.useInsertionEffect||g.default.useLayoutEffect,u="undefined"!=typeof window?r():void 0;function v(a){var b=u||s();return b&&("undefined"==typeof window?b.add(a):t(function(){return b.add(a),function(){b.remove(a)}},[a.id,String(a.dynamic)])),null}v.dynamic=function(a){return a.map(function(a){return n(a[0],a[1])}).join(" ")},e.StyleRegistry=function(a){var b=a.registry,c=a.children,d=f.useContext(q),e=f.useState(function(){return d||b||r()})[0];return g.default.createElement(q.Provider,{value:e},c)},e.createStyleRegistry=r,e.style=v,e.useStyleRegistry=s},62012:function(a){var{g:b,__dirname:c,m:d,e:e}=a;d.exports=a.r(22842).style},55441:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({default:()=>g});var d=a.i(99559),e=a.i(62012),f=a.i(57560);function g({logs:a}){let b=(0,f.useRef)(null),c=(0,f.useRef)(!0),g=a=>a.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]"),h=()=>{if(!b.current)return!0;let{scrollTop:a,scrollHeight:c,clientHeight:d}=b.current;return c-a-d<100},i=()=>{b.current&&c.current&&(b.current.scrollTop=b.current.scrollHeight)};return(0,f.useEffect)(()=>{setTimeout(i,10)},[a]),(0,d.jsxs)("div",{ref:b,onScroll:()=>{c.current=h()},style:{scrollBehavior:"smooth",maxHeight:"100%"},className:"jsx-b464fb0f479e34f5 h-full w-full overflow-y-auto overflow-x-hidden p-4 custom-scrollbar",children:[(0,d.jsx)(e.default,{id:"b464fb0f479e34f5",children:".custom-scrollbar.jsx-b464fb0f479e34f5{scrollbar-width:thin;scrollbar-color:#fff3 #0000001a}.custom-scrollbar.jsx-b464fb0f479e34f5::-webkit-scrollbar{width:10px;height:10px}.custom-scrollbar.jsx-b464fb0f479e34f5::-webkit-scrollbar-track{background:#0000001a;border-radius:5px}.custom-scrollbar.jsx-b464fb0f479e34f5::-webkit-scrollbar-thumb{background:#ffffff4d;border-radius:5px}.custom-scrollbar.jsx-b464fb0f479e34f5.jsx-b464fb0f479e34f5::-webkit-scrollbar-thumb:hover{background:#fff6}"}),(0,d.jsx)("div",{className:"jsx-b464fb0f479e34f5 space-y-0.5",children:a.length>0?a.map((a,b)=>{let c=g(a);if(!c.trim())return null;let e=a.includes("[STDERR]"),f=a.includes("[SYSTEM]"),h=c.match(/^\[([\d-T:.Z]+)\]/)?.[1],i=c.replace(/^\[[\d-T:.Z]+\]\s*/,"");return(0,d.jsxs)("div",{className:`jsx-b464fb0f479e34f5 font-mono text-xs leading-5 ${e?"text-red-400":f?"text-yellow-400":"text-gray-100"}`,children:[h&&(0,d.jsxs)("span",{className:"jsx-b464fb0f479e34f5 text-gray-500 mr-2",children:["[",new Date(h).toLocaleTimeString("zh-CN"),"]"]}),(0,d.jsx)("span",{className:"jsx-b464fb0f479e34f5 whitespace-pre-wrap break-all",children:i})]},b)}):(0,d.jsx)("div",{className:"jsx-b464fb0f479e34f5 text-center text-gray-500 mt-8",children:"等待日志输出..."})})]})}},64708:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({default:()=>g});var d=a.i(99559),e=a.i(57560),f=a.i(50923);function g({projectName:a,className:b="",compact:c=!1}){let[g,h]=(0,e.useState)(null),[i,j]=(0,e.useState)(!1),[k,l]=(0,e.useState)(null),[m,n]=(0,e.useState)(""),o=(0,e.useCallback)(async()=>{if(a){j(!0),l(null);try{let b=await fetch(`/api/current-branch?project=${encodeURIComponent(a)}`),c=await b.json();c.success?(h(c.data),n(new Date().toLocaleTimeString("zh-CN",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"}))):l(c.error||"获取分支信息失败")}catch(a){l("网络请求失败"),console.error("获取分支信息失败:",a)}finally{j(!1)}}},[a]);(0,e.useEffect)(()=>{o()},[o]),(0,e.useEffect)(()=>{if(!a)return;let b=setInterval(()=>{o()},c?15e3:3e4);return()=>clearInterval(b)},[a,o,c]);let p=a=>0===a?"text-gray-500":"text-orange-600",q=()=>{if(!g)return null;let{ahead:a,behind:b}=g.status;return a>0&&b>0?(0,d.jsx)("span",{className:"text-yellow-500 text-xs",children:"↕"}):a>0?(0,d.jsx)("span",{className:"text-green-500 text-xs",children:"↑"}):b>0?(0,d.jsx)("span",{className:"text-red-500 text-xs",children:"↓"}):(0,d.jsx)("span",{className:"text-gray-400 text-xs",children:"✓"})};return i&&!g?c?(0,d.jsxs)("div",{className:`flex items-center gap-2 px-3 py-1 bg-gray-50 rounded-md ${b}`,children:[(0,d.jsx)("div",{className:"animate-spin w-3 h-3 border-2 border-blue-500 border-t-transparent rounded-full"}),(0,d.jsx)("span",{className:"text-xs text-gray-500",children:"加载中..."})]}):(0,d.jsxs)("div",{className:`bg-white rounded-lg shadow-sm border p-4 ${b}`,children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold text-gray-700",children:"Git 分支信息"}),(0,d.jsx)("div",{className:"animate-spin w-4 h-4 border-2 border-blue-500 border-t-transparent rounded-full"})]}),(0,d.jsx)("div",{className:"text-sm text-gray-500",children:"正在加载分支信息..."})]}):k?c?(0,d.jsxs)("div",{className:`flex items-center gap-2 px-3 py-1 bg-red-50 rounded-md ${b}`,children:[(0,d.jsx)("span",{className:"text-xs text-red-500",children:"分支信息错误"}),(0,d.jsx)(f.Button,{variant:"ghost",size:"sm",onClick:o,disabled:i,className:"h-5 w-5 p-0 text-red-500 hover:bg-red-100",children:"↻"})]}):(0,d.jsxs)("div",{className:`bg-white rounded-lg shadow-sm border p-4 ${b}`,children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold text-gray-700",children:"Git 分支信息"}),(0,d.jsx)(f.Button,{variant:"outline",size:"sm",onClick:o,disabled:i,className:"h-6 px-2 text-xs",children:i?"刷新中...":"重试"})]}),(0,d.jsx)("div",{className:"text-sm text-red-500 bg-red-50 p-2 rounded",children:k})]}):g?c?(0,d.jsxs)("div",{className:`flex items-center gap-2 px-3 py-1 bg-blue-50 border border-blue-200 rounded-md ${b}`,children:[(0,d.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"text-blue-600",children:[(0,d.jsx)("polyline",{points:"6,3 6,15"}),(0,d.jsx)("circle",{cx:"18",cy:"6",r:"3"}),(0,d.jsx)("circle",{cx:"6",cy:"18",r:"3"}),(0,d.jsx)("path",{d:"m18,9a9,9 0 0,1-9,9"})]}),(0,d.jsx)("span",{className:"text-sm font-medium text-blue-800",children:g.currentBranch}),q(),(0,d.jsx)(f.Button,{variant:"ghost",size:"sm",onClick:o,disabled:i,className:"h-5 w-5 p-0 text-blue-600 hover:bg-blue-100",title:"刷新分支信息",children:i?(0,d.jsx)("div",{className:"animate-spin w-3 h-3 border-2 border-blue-600 border-t-transparent rounded-full"}):"↻"})]}):(0,d.jsxs)("div",{className:`bg-white rounded-lg shadow-sm border p-4 ${b}`,children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,d.jsx)("h3",{className:"text-sm font-semibold text-gray-700",children:"Git 分支信息"}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[m&&(0,d.jsx)("span",{className:"text-xs text-gray-400",children:m}),(0,d.jsx)(f.Button,{variant:"outline",size:"sm",onClick:o,disabled:i,className:"h-6 px-2 text-xs",children:i?"刷新中...":"刷新"})]})]}),(0,d.jsxs)("div",{className:"space-y-3",children:[(0,d.jsx)("div",{className:"flex items-center gap-2",children:(0,d.jsxs)("div",{className:"flex items-center gap-1",children:[(0,d.jsx)("span",{className:"text-xs text-gray-500",children:"分支:"}),(0,d.jsx)("span",{className:"text-sm font-medium text-blue-600 bg-blue-50 px-2 py-1 rounded",children:g.currentBranch}),q()]})}),(0,d.jsxs)("div",{className:"bg-gray-50 p-3 rounded text-xs space-y-1",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"text-gray-500",children:"提交:"}),(0,d.jsx)("code",{className:"bg-gray-200 px-1 rounded font-mono text-xs",children:g.lastCommit.hash})]}),(0,d.jsx)("div",{className:"text-gray-700 font-medium line-clamp-2",children:g.lastCommit.message}),(0,d.jsxs)("div",{className:"flex items-center justify-between text-gray-500",children:[(0,d.jsx)("span",{children:g.lastCommit.author}),(0,d.jsx)("span",{children:g.lastCommit.date})]})]}),(0,d.jsxs)("div",{className:"grid grid-cols-2 gap-2 text-xs",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsx)("span",{className:"text-gray-500",children:"领先:"}),(0,d.jsx)("span",{className:p(g.status.ahead),children:g.status.ahead})]}),(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsx)("span",{className:"text-gray-500",children:"落后:"}),(0,d.jsx)("span",{className:p(g.status.behind),children:g.status.behind})]}),(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsx)("span",{className:"text-gray-500",children:"已修改:"}),(0,d.jsx)("span",{className:p(g.status.modified),children:g.status.modified})]}),(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsx)("span",{className:"text-gray-500",children:"已暂存:"}),(0,d.jsx)("span",{className:p(g.status.staged),children:g.status.staged})]}),(0,d.jsxs)("div",{className:"flex items-center justify-between col-span-2",children:[(0,d.jsx)("span",{className:"text-gray-500",children:"未跟踪:"}),(0,d.jsx)("span",{className:p(g.status.untracked),children:g.status.untracked})]})]}),(g.status.ahead>0||g.status.behind>0)&&(0,d.jsxs)("div",{className:"text-xs p-2 rounded bg-yellow-50 border border-yellow-200",children:[g.status.ahead>0&&g.status.behind>0&&(0,d.jsxs)("span",{className:"text-yellow-700",children:["分支与远程不同步,有 ",g.status.ahead," 个本地提交,",g.status.behind," 个远程提交"]}),g.status.ahead>0&&0===g.status.behind&&(0,d.jsxs)("span",{className:"text-green-700",children:["本地领先远程 ",g.status.ahead," 个提交"]}),0===g.status.ahead&&g.status.behind>0&&(0,d.jsxs)("span",{className:"text-red-700",children:["本地落后远程 ",g.status.behind," 个提交"]})]})]})]}):c?(0,d.jsx)("div",{className:`flex items-center gap-2 px-3 py-1 bg-gray-50 rounded-md ${b}`,children:(0,d.jsx)("span",{className:"text-xs text-gray-500",children:"暂无分支信息"})}):(0,d.jsxs)("div",{className:`bg-white rounded-lg shadow-sm border p-4 ${b}`,children:[(0,d.jsx)("div",{className:"flex items-center justify-between mb-3",children:(0,d.jsx)("h3",{className:"text-sm font-semibold text-gray-700",children:"Git 分支信息"})}),(0,d.jsx)("div",{className:"text-sm text-gray-500",children:"暂无分支信息"})]})}},73426:a=>{"use strict";var{g:b,__dirname:c}=a;a.s({default:()=>u});var d=a.i(99559),e=a.i(57560),f=a.i(40490),g=a.i(50923),h=a.i(74939),i=a.i(49566),j=a.i(94688),k=a.i(58413),l=a.i(67252),m=a.i(60284),n=a.i(22529);a.i(28783);var o=a.i(22027),p=a.i(82587),q=a.i(55441),r=a.i(64708),s=function(a){return a.PENDING="pending",a.EXISTING="existing",a.CLONING="cloning",a.SUCCESS="success",a.FAILED="failed",a.RETRYING="retrying",a}(s||{});function t(){let a=(0,f.useSearchParams)(),b=(0,f.useRouter)(),c=a.get("project"),[s,t]=(0,e.useState)(null),[u,v]=(0,e.useState)(!0),[w,x]=(0,e.useState)(null),[y,z]=(0,e.useState)({}),[A,B]=(0,e.useState)({mockingIntercept:!1,mockOpen:!1}),[C,D]=(0,e.useState)(!1),[E,F]=(0,e.useState)(null),[G,H]=(0,e.useState)(!1),[I,J]=(0,e.useState)(1),[K]=(0,e.useState)(10),[L,M]=(0,e.useState)(""),[N,O]=(0,e.useState)(null),[P,Q]=(0,e.useState)(!1),[R,S]=(0,e.useState)(!1),[T,U]=(0,e.useState)(!1),[V,W]=(0,e.useState)(!0),[X,Y]=(0,e.useState)(null),[Z,$]=(0,e.useState)([]),[_,aa]=(0,e.useState)(!1),[ab,ac]=(0,e.useState)(!1),[ad,ae]=(0,e.useState)(!1),[af,ag]=(0,e.useState)({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0}),[ah,ai]=(0,e.useState)(null),[aj,ak]=(0,e.useState)(!1),[al,am]=(0,e.useState)({open:!1,apiName:"",method:"",siteName:""}),[an,ao]=(0,e.useState)({open:!1,apiName:"",apiPath:""}),[ap,aq]=(0,e.useState)({open:!1,type:"success",message:""}),[ar,as]=(0,e.useState)(""),[at,au]=(0,e.useState)({}),[av,aw]=(0,e.useState)(!1),[ax,ay]=(0,e.useState)(""),[az,aA]=(0,e.useState)([]),aB=(0,e.useCallback)(async()=>{X&&await aD(X)},[X]),aC=(0,e.useCallback)(async a=>{P&&(a.metaKey||a.ctrlKey)&&"s"===a.key&&(a.preventDefault(),await aB())},[P,aB]);(0,e.useEffect)(()=>{if(P)return document.addEventListener("keydown",aC),()=>{document.removeEventListener("keydown",aC)}},[P,X,aC]);let aD=async a=>{try{await new Promise(a=>setTimeout(a,200));let b=a.getModel();if(b){await a.getAction("editor.action.formatDocument")?.run();let c=b.getValue();if(c&&!c.includes("\n")&&c.length>50){let d=c.replace(/\{\s*/g,"{\n ").replace(/\}\s*/g,"\n}").replace(/;\s*/g,";\n ").replace(/,\s*/g,",\n ").replace(/\n\s*\n/g,"\n").trim();d!==c&&(b.setValue(d),setTimeout(()=>{a.getAction("editor.action.formatDocument")?.run()},100))}}}catch(a){console.log("自动格式化失败:",a)}},aE=()=>{b.push("/initialization")},aF=async()=>{aa(!0);try{let a=await fetch("/api/check-workspace"),b=await a.json();if(b.success&&b.projects){let a=b.projects.map(a=>({name:a.name,status:a.status,message:a.message}));$(a)}else console.error("获取项目列表失败:",b.error),$([])}catch(a){console.error("获取项目列表失败:",a),$([])}finally{aa(!1)}},aG=async()=>{if(c){D(!0);try{let a=await fetch("/api/open-project",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:c})}),b=await a.json();b.success||(console.error("打开项目失败:",b.error),a8("error",`打开项目失败: ${b.error}`))}catch(a){console.error("打开项目失败:",a),a8("error","打开项目失败: 网络错误")}finally{D(!1)}}};(0,e.useEffect)(()=>{if(!c){x("项目名称缺失"),v(!1);return}(async()=>{try{let a=await fetch(`/api/project-config?project=${encodeURIComponent(c)}`),b=await a.json();if(b.success){t(b.data);let a={};Object.keys(b.data.envs).forEach(c=>{let d=b.data.envs[c],e="";e=d.proxyEnv[d.currentProxy]?d.proxyEnv[d.currentProxy]:d.currentProxy;let f="";f=d.proxyEnv[d.currentProxy]?d.currentProxy:"custom",a[c]={selectedProxy:e||"",selectedOption:f}}),z(a),B({mockingIntercept:b.data.mockingIntercept||!1,mockOpen:b.data.mockOpen||!1})}else x(b.error)}catch(a){x("获取项目配置失败"),console.error("获取项目配置失败:",a)}finally{v(!1)}})()},[c]);let aH=(0,e.useCallback)(async()=>{if(c){H(!0);try{let a=await fetch(`/api/mock-file?project=${encodeURIComponent(c)}`),b=await a.json();b.success?F(b.data):console.error("获取Mock数据失败:",b.error)}catch(a){console.error("获取Mock数据失败:",a)}finally{H(!1)}}},[c]);(0,e.useEffect)(()=>{if(s&&c){let a=Object.keys(s.envs),b=new URLSearchParams(window.location.search).get("tab"),c="";(c=L&&("mock"===L||a.includes(L))?L:b&&("mock"===b||a.includes(b))?b:a.length>0?a[0]:"mock")!==L&&(M(c),"mock"===c&&aH())}},[s,c,L,aH]),(0,e.useEffect)(()=>{aF()},[]);let aI=(0,e.useCallback)(async()=>{if(!c||!s)return;let a={};for(let b of Object.keys(s.envs))a[`${b}`]={loading:!0,running:!1};au(a);let b=Object.keys(s.envs).map(async a=>{try{let b=await fetch(`/api/process/status?projectName=${encodeURIComponent(c)}&envName=${encodeURIComponent(a)}`),d=await b.json();if(d.success&&d.data)return{envName:a,status:d.data}}catch(b){console.error(`获取环境 ${a} 状态失败:`,b)}return{envName:a,status:{running:!1}}}),d=await Promise.all(b),e={};d.forEach(({envName:a,status:b})=>{e[a]={running:b.running||!1,pid:b.pid,startTime:b.startTime,port:b.port,loading:!1}}),au(e)},[c,s]),aJ=async a=>{if(!c||!s)return;let b=s.envs[a];if(!b.startCommand)return void a8("error","该环境未配置启动命令");au(b=>({...b,[a]:{...b[a],loading:!0}}));try{let d=await fetch("/api/process/start",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:c,envName:a,startCommand:b.startCommand})}),e=await d.json();if(e.success)au(b=>({...b,[a]:{running:!0,pid:e.data.pid,startTime:e.data.startTime,port:e.data.port,loading:!1}}));else throw Error(e.error||"启动失败")}catch(b){console.error("启动进程失败:",b),a8("error",`启动失败: ${b instanceof Error?b.message:"未知错误"}`),au(b=>({...b,[a]:{...b[a],loading:!1}}))}},aK=async a=>{if(c){au(b=>({...b,[a]:{...b[a],loading:!0}}));try{let b=await fetch(`/api/process/start?projectName=${encodeURIComponent(c)}&envName=${encodeURIComponent(a)}`,{method:"DELETE"}),d=await b.json();if(d.success)au(b=>({...b,[a]:{running:!1,loading:!1}}));else throw Error(d.error||"停止失败")}catch(b){console.error("停止进程失败:",b),a8("error",`停止失败: ${b instanceof Error?b.message:"未知错误"}`),au(b=>({...b,[a]:{...b[a],loading:!1}}))}}},[aL,aM]=(0,e.useState)(null),aN=a=>{if(!c)return;aL&&aL.close(),aA([]);let b=new EventSource(`/api/process/logs/stream?projectName=${encodeURIComponent(c)}&envName=${encodeURIComponent(a)}`);b.onmessage=a=>{try{let b=JSON.parse(a.data);"log"===b.type?aA(a=>{let c=[...a,b.content];return c.length>1e3?c.slice(-1e3):c}):"init"===b.type?aA([b.message]):"end"===b.type&&aA(a=>[...a,`[系统] ${b.message}`])}catch(a){console.error("解析日志数据失败:",a)}},b.onerror=a=>{console.error("日志流错误:",a),b.close(),aM(null)},aM(b)},aO=()=>{aL&&(aL.close(),aM(null))},aP=a=>{ay(a),aw(!0),aN(a)},aQ=()=>{aw(!1),aA([]),ay(""),aO()};(0,e.useEffect)(()=>{if(s&&c){aI();let a=setInterval(()=>{aI()},5e3);return()=>clearInterval(a)}},[s,c,aI]);let aR=(a,b)=>{if(!s)return;let c=s.envs[a],d="";d="custom"===b?y[a]?.selectedOption==="custom"?y[a]?.selectedProxy||"":c.proxyEnv.custom||"":c.proxyEnv[b]||"",z(c=>({...c,[a]:{...c[a],selectedProxy:d,selectedOption:b,saveMessage:""}}))},aS=(a,b)=>{z(c=>({...c,[a]:{...c[a],selectedProxy:b,saveMessage:""}}))},aT=async a=>{B(b=>({...b,mockingIntercept:a,saving:!0,saveMessage:""}));try{let b=await fetch("/api/project-config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:c,projectConfig:{mockingIntercept:a,mockOpen:A.mockOpen}})}),d=await b.json();if(d.success)t(b=>b?{...b,mockingIntercept:a}:b),B(a=>({...a,saving:!1,saveMessage:"Mock拦截配置已保存"})),setTimeout(()=>{B(a=>({...a,saveMessage:""}))},2e3);else throw Error(d.error||"保存失败")}catch(b){console.error("保存Mock拦截配置失败:",b),B(c=>({...c,mockingIntercept:!a,saving:!1,saveMessage:`保存失败: ${b instanceof Error?b.message:"未知错误"}`})),setTimeout(()=>{B(a=>({...a,saveMessage:""}))},3e3)}},aU=async a=>{B(b=>({...b,mockOpen:a,saving:!0,saveMessage:""}));try{let b=await fetch("/api/project-config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:c,projectConfig:{mockingIntercept:A.mockingIntercept,mockOpen:a}})}),d=await b.json();if(d.success)t(b=>b?{...b,mockOpen:a}:b),B(a=>({...a,saving:!1,saveMessage:"Mock开启配置已保存"})),setTimeout(()=>{B(a=>({...a,saveMessage:""}))},2e3);else throw Error(d.error||"保存失败")}catch(b){console.error("保存Mock开启配置失败:",b),B(c=>({...c,mockOpen:!a,saving:!1,saveMessage:`保存失败: ${b instanceof Error?b.message:"未知错误"}`})),setTimeout(()=>{B(a=>({...a,saveMessage:""}))},3e3)}},aV=async a=>{if(!s||!c)return;let b=y[a]?.selectedProxy?.trim();if(!b)return void z(b=>({...b,[a]:{...b[a],saveMessage:"请先选择或填写代理地址"}}));let d=y[a]?.selectedOption,e="custom"===d;z(b=>({...b,[a]:{...b[a],saving:!0,saveMessage:""}}));try{let f={projectName:c,envName:a,newProxy:e?"custom":d||""};e&&(f.customProxyUrl=b);let g=await fetch("/api/project-config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(f)}),h=await g.json();h.success?(t(c=>{if(!c)return c;let d={...c.envs};return d[a]={...d[a],currentProxy:h.data.currentProxy},"custom"===h.data.currentProxy&&(d[a].proxyEnv={...d[a].proxyEnv,custom:b}),{...c,envs:d}}),z(b=>({...b,[a]:{...b[a],saving:!1,saveMessage:"保存成功"}}))):z(b=>({...b,[a]:{...b[a],saving:!1,saveMessage:`保存失败: ${h.error}`}}))}catch(b){console.error("保存配置失败:",b),z(b=>({...b,[a]:{...b[a],saving:!1,saveMessage:"保存失败: 网络错误"}}))}},aW=async()=>{if(window.confirm("确定要一键关闭所有Mock吗?"))try{let a=await fetch("/api/cleanup-mock",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:c})});(await a.json()).success&&await aH()}catch(a){console.error("清空Mock配置失败:",a)}},aX=async()=>{if(window.confirm("确定要一键开启所有Mock吗?"))try{let a=await fetch("/api/open-all-mock",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:c})});(await a.json()).success&&await aH()}catch(a){console.error("清空Mock配置失败:",a)}},aY=async(a,b,d)=>{if(c)try{let e=await fetch("/api/mock-setting",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:c,apiName:a,method:b,currentSite:d})}),f=await e.json();f.success?F(c=>c?{...c,mockFiles:c.mockFiles.map(c=>c.apiName===a?{...c,methods:c.methods.map(a=>a.method===b?{...a,setting:{...a.setting,currentSite:d}}:a)}:c)}:c):(console.error("更新场景失败:",f.error),a8("error",`更新场景失败: ${f.error}`))}catch(a){console.error("更新场景失败:",a),a8("error","更新场景失败: 网络错误")}},aZ=async(a,b,d)=>{if(c){S(!0),W(!0);try{let e=await fetch(`/api/mock-file-content?project=${encodeURIComponent(c)}&apiName=${encodeURIComponent(a)}&method=${encodeURIComponent(b)}&siteName=${encodeURIComponent(d)}`),f=await e.json();f.success?(O({projectName:c,apiName:a,method:b,siteName:d,content:f.data.content}),Q(!0)):(console.error("获取文件内容失败:",f.error),a8("error",`获取文件内容失败: ${f.error}`))}catch(a){console.error("获取文件内容失败:",a),a8("error","获取文件内容失败: 网络错误")}finally{S(!1)}}},a$=async()=>{if(N){U(!0);try{let a=await fetch("/api/mock-file-content",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(N)}),b=await a.json();b.success?(Q(!1),O(null)):(console.error("保存文件失败:",b.error),a8("error",`保存文件失败: ${b.error}`))}catch(a){console.error("保存文件失败:",a),a8("error","保存文件失败: 网络错误")}finally{U(!1)}}},a_=()=>{Q(!1),O(null),W(!0)},a0=(a,b)=>{"siteName"===a&&ab||ag(c=>({...c,[a]:b}))},a1=(a,b)=>{let c=a.toUpperCase(),d=b.replace(/\//g,"_").replace(/^_/,"");switch(c){case"GET":return`const Mock = require('mockjs');
|
|
6
6
|
|
|
7
7
|
module.exports = Mock.mock({
|
|
8
8
|
"code": 200,
|
|
@@ -56,6 +56,6 @@ module.exports = Mock.mock({
|
|
|
56
56
|
"id|1-100": 1,
|
|
57
57
|
"timestamp": "@now('yyyy-MM-dd HH:mm:ss')"
|
|
58
58
|
}
|
|
59
|
-
});`}},a1=(a,b,c)=>{if(!D)return!1;let d=a.replace(/\//g,"_").replace(/^_/,""),e=D.mockFiles.find(a=>a.apiName===d);if(!e)return!1;let f=e.methods.find(a=>a.method.toLowerCase()===b.toLowerCase());return!!f&&!!f.files.find(a=>a.siteName===c)},a2=async()=>{if(!ae.apiPath.trim())return void a7("error","请输入接口地址");if(a1(ae.apiPath,ae.method,ae.siteName))return void a7("error",`接口 ${ae.apiPath} [${ae.method.toUpperCase()}] 的场景 "${ae.siteName}" 已存在,不能重复创建`);aj(!0);try{let a=ae.apiPath.replace(/\//g,"_").replace(/^_/,""),b=M?.content??a0(ae.method,ae.apiPath),d=await fetch("/api/mock-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:c,apiName:a,method:ae.method.toLowerCase(),siteName:ae.siteName,content:b})}),e=await d.json();if(e.success)ae.mockOpen&&await a6(a,ae.method.toLowerCase(),ae.siteName,!0),af({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0}),ab(!1),await aW(),a7("success","Mock文件创建成功");else throw Error(e.error||"创建失败")}catch(a){console.error("创建Mock文件失败:",a),a7("error",`创建Mock文件失败: ${a instanceof Error?a.message:"未知错误"}`)}finally{aj(!1)}},a3=(a,b,d)=>{console.log("新增场景点击:",{apiName:a,method:b,apiPath:d}),ah({apiName:a,method:b,apiPath:d});let e={apiPath:d,method:b.toUpperCase(),siteName:"",mockOpen:!0};console.log("设置表单数据:",e),af(e),ad(!0);let f=a0(e.method,e.apiPath);N({projectName:c||"",apiName:a,method:b.toLowerCase(),siteName:"",content:f||""})},a4=(a,b,c)=>{if(!D)return!1;let d=D.mockFiles.find(b=>b.apiName===a);if(!d)return!1;let e=d.methods.find(a=>a.method.toLowerCase()===b.toLowerCase());return!!e&&!!e.files.find(a=>a.siteName===c)},a5=async()=>{if(!ag||!ae.siteName.trim())return void a7("error","请输入场景名称");if(a4(ag.apiName,ag.method,ae.siteName))return void a7("error",`接口 ${ag.apiPath} [${ag.method.toUpperCase()}] 的场景 "${ae.siteName}" 已存在`);aj(!0);try{let a=M?.content??a0(ag.method,ag.apiPath);console.log("defaultContent",a,M);let b=await fetch("/api/mock-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:c,apiName:ag.apiName,method:ag.method.toLowerCase(),siteName:ae.siteName,content:a})}),d=await b.json();if(d.success){if(ae.mockOpen&&await a6(ag.apiName,ag.method,ae.siteName,!0),af({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0}),r)try{let a=await fetch("/api/mock-setting",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:r.projectName,apiName:ag.apiName,method:ag.method,currentSite:ae.siteName})}),b=await a.json();b.success||console.warn("切换到新场景失败:",b.error)}catch(a){console.warn("切换到新场景失败:",a)}try{await a6(ag.apiName,ag.method,ae.siteName,!0)}catch(a){console.warn("自动开启新场景失败:",a)}ad(!1),ah(null),await aW(),a7("success","场景创建成功")}else throw Error(d.error||"创建失败")}catch(a){console.error("创建场景失败:",a),a7("error",`创建场景失败: ${a instanceof Error?a.message:"未知错误"}`)}finally{aj(!1)}},a6=async(a,b,c,d)=>{if(r)try{let e=await fetch("/api/mock-open-status",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:r.projectName,apiName:a,method:b,siteName:c,isOpen:d})}),f=await e.json();f.success?await aW():console.error("更新Mock开启状态失败:",f.error)}catch(a){console.error("更新Mock开启状态失败:",a)}},a7=(a,b)=>{ap({open:!0,type:a,message:b}),setTimeout(()=>{ap({open:!1,type:"success",message:""})},3e3)},a8=(a,b,c)=>{al({open:!0,apiName:a,method:b,siteName:c})},a9=async()=>{if(!r)return;let{apiName:a,method:b,siteName:c}=ak;try{let d=await fetch(`/api/mock-file?project=${encodeURIComponent(r.projectName)}&apiName=${encodeURIComponent(a)}&method=${encodeURIComponent(b)}&siteName=${encodeURIComponent(c)}`,{method:"DELETE"}),e=await d.json();if(e.success){let a=window.scrollY;await aW(),window.scrollTo(0,a),a7("success","场景删除成功")}else console.error("删除场景失败:",e.error),a7("error",`删除场景失败: ${e.error}`)}catch(a){console.error("删除场景失败:",a),a7("error","删除场景失败: 网络错误")}finally{al({open:!1,apiName:"",method:"",siteName:""})}},ba=(a,b)=>{an({open:!0,apiName:a,apiPath:b})},bb=async()=>{if(!r)return;let{apiName:a}=am;try{let b=await fetch(`/api/delete-mock-api?project=${encodeURIComponent(r.projectName)}&apiName=${encodeURIComponent(a)}`,{method:"DELETE"}),c=await b.json();if(c.success){let a=window.scrollY;await aW(),window.scrollTo(0,a),a7("success","接口删除成功")}else console.error("删除接口失败:",c.error),a7("error",`删除接口失败: ${c.error}`)}catch(a){console.error("删除接口失败:",a),a7("error","删除接口失败: 网络错误")}finally{an({open:!1,apiName:"",apiPath:""})}},bc=a=>{ar(a),I(1)};if(t)return(0,d.jsx)("main",{className:"container mx-auto p-4 sm:p-6 md:p-8",children:(0,d.jsx)("div",{className:"text-center py-8",children:(0,d.jsx)("p",{children:"加载中..."})})});if(v||!r)return(0,d.jsxs)("main",{className:"container mx-auto p-4 sm:p-6 md:p-8",children:[(0,d.jsxs)("div",{className:"flex justify-between items-center mb-6",children:[(0,d.jsx)("h1",{className:"text-2xl font-bold",children:"项目配置"}),(0,d.jsxs)("div",{className:"flex gap-2",children:[c&&(0,d.jsx)(g.Button,{variant:"default",onClick:aF,disabled:B,children:B?"打开中...":"在 Cursor 中打开"}),(0,d.jsx)(g.Button,{variant:"outline",onClick:aD,children:"返回初始化页面"})]})]}),(0,d.jsx)("div",{className:"text-center text-red-500 py-8",children:(0,d.jsx)("p",{children:v||"未找到项目配置"})})]});let bd=Object.keys(r.envs);return(0,d.jsxs)("main",{className:"container mx-auto p-4 sm:p-6 md:p-8",children:[(0,d.jsxs)("div",{className:"flex justify-between items-center mb-6",children:[(0,d.jsxs)("div",{className:"flex items-center gap-4",children:[(0,d.jsxs)("h1",{className:"text-2xl font-bold",children:[r.projectName," - 项目配置"]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)(k.Label,{className:"text-sm font-medium text-gray-600",children:"切换项目:"}),(0,d.jsxs)(i.Select,{value:c||"",onValueChange:d=>{if(d===c)return;let e=a.get("tab"),f=`/configuration?project=${encodeURIComponent(d)}${e?`&tab=${e}`:""}`;b.push(f)},disabled:$,children:[(0,d.jsx)(i.SelectTrigger,{className:"w-40",children:(0,d.jsx)(i.SelectValue,{placeholder:$?"加载中...":"选择项目"})}),(0,d.jsx)(i.SelectContent,{children:Y.map(a=>(0,d.jsx)(i.SelectItem,{value:a.name,children:(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:`w-2 h-2 rounded-full ${"existing"===a.status?"bg-green-500":"failed"===a.status?"bg-red-500":"bg-yellow-500"}`}),(0,d.jsx)("span",{children:a.name})]})},a.name))})]})]})]}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(g.Button,{variant:"default",onClick:aF,disabled:B,children:B?"打开中...":"在 Cursor 中打开"}),(0,d.jsx)(g.Button,{variant:"outline",onClick:aD,children:"返回初始化页面"})]})]}),bd.length>0?(0,d.jsxs)(h.Tabs,{value:K||bd[0],onValueChange:a=>{L(a),"mock"===a&&aW()},className:"w-full",children:[(0,d.jsxs)(h.TabsList,{className:"grid w-full",style:{gridTemplateColumns:`repeat(${bd.length+1}, 1fr)`},children:[bd.map(a=>(0,d.jsx)(h.TabsTrigger,{value:a,className:"capitalize relative",children:(0,d.jsxs)("span",{className:"flex items-center gap-2",children:[a,as[a]?.running&&(0,d.jsx)("span",{className:"w-2 h-2 bg-green-500 rounded-full animate-pulse",title:"运行中"})]})},a)),(0,d.jsx)(h.TabsTrigger,{value:"mock",className:"capitalize",children:"Mock配置"})]}),bd.map(a=>{let b=r.envs[a],c=Object.entries(b.proxyEnv),e=x[a]?.selectedProxy||"",f=x[a]?.selectedOption||"",l=b.currentProxy,m=b.proxyEnv[l]||l,n=b.proxyEnv[l]?l:"custom";return(0,d.jsxs)(h.TabsContent,{value:a,className:"space-y-6",children:[(0,d.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,d.jsx)("h3",{className:"text-lg font-semibold",children:"开发服务器控制"}),(0,d.jsx)("div",{className:"flex items-center gap-4",children:as[a]?.running?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("span",{className:"flex items-center gap-2 text-sm text-green-600",children:[(0,d.jsx)("span",{className:"w-2 h-2 bg-green-500 rounded-full animate-pulse"}),"运行中 (PID: ",as[a]?.pid,")"]}),(0,d.jsx)(g.Button,{variant:"outline",size:"sm",onClick:()=>aN(a),children:"查看日志"}),(0,d.jsx)(g.Button,{variant:"destructive",size:"sm",onClick:()=>aI(a),disabled:as[a]?.loading,children:as[a]?.loading?"处理中...":"停止"})]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("span",{className:"flex items-center gap-2 text-sm text-gray-500",children:[(0,d.jsx)("span",{className:"w-2 h-2 bg-gray-400 rounded-full"}),"未运行"]}),(0,d.jsx)(g.Button,{variant:"outline",size:"sm",onClick:()=>aN(a),children:"查看日志"}),(0,d.jsx)(g.Button,{variant:"default",size:"sm",onClick:()=>aH(a),disabled:as[a]?.loading||!b.startCommand,children:as[a]?.loading?"处理中...":"启动"})]})})]}),b.startCommand?(0,d.jsxs)("div",{className:"text-sm text-gray-600",children:[(0,d.jsx)("span",{className:"font-medium",children:"启动命令:"})," ",(0,d.jsx)("code",{className:"px-2 py-1 bg-gray-200 rounded",children:b.startCommand})]}):(0,d.jsx)("div",{className:"text-sm text-yellow-600",children:"⚠️ 该环境未配置启动命令"}),b.host&&(0,d.jsxs)("div",{className:"text-sm text-gray-600 mt-2",children:[(0,d.jsx)("span",{className:"font-medium",children:"访问地址:"}),as[a]?.running?(0,d.jsx)("a",{href:b.host,target:"_blank",rel:"noopener noreferrer",className:"ml-2 text-blue-600 hover:underline",children:b.host}):(0,d.jsx)("span",{className:"ml-2",children:b.host})]})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[(0,d.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg",children:[(0,d.jsxs)("h3",{className:"text-lg font-semibold mb-4",children:[a," 环境配置"]}),(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)(k.Label,{className:"block text-sm font-medium mb-2",children:"接口代理环境切换"}),(0,d.jsxs)(i.Select,{value:f,onValueChange:b=>aP(a,b),children:[(0,d.jsx)(i.SelectTrigger,{className:"w-full",children:(0,d.jsx)(i.SelectValue,{placeholder:"选择代理环境"})}),(0,d.jsx)(i.SelectContent,{children:c.map(([a,b])=>(0,d.jsxs)(i.SelectItem,{value:a,children:[a,"(",b,")"]},a))})]})]}),m&&(0,d.jsxs)("div",{className:"p-3 bg-blue-50 rounded-md",children:[(0,d.jsxs)("p",{className:"text-sm text-blue-700",children:["当前项目接口已代理至:",n," 环境"]}),(0,d.jsxs)("p",{className:"text-sm text-blue-600",children:["代理地址为:",m]})]}),"custom"===f&&(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(k.Label,{className:"block text-sm font-medium",children:"自定义代理地址"}),(0,d.jsx)(j.Input,{type:"url",placeholder:"请输入自定义代理地址 (如: http://localhost:52741)",value:e,onChange:b=>aQ(a,b.target.value),className:"w-full"}),(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"请输入完整的代理地址,包括协议 (http:// 或 https://)"})]}),(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsx)(g.Button,{onClick:()=>aT(a),disabled:x[a]?.saving,className:"w-full sm:w-auto",children:x[a]?.saving?"保存中...":"保存配置"}),x[a]?.saveMessage&&(0,d.jsx)("span",{className:`text-sm ml-3 ${x[a]?.saveMessage==="保存成功"?"text-green-600":"text-red-600"}`,children:x[a]?.saveMessage})]})]})]}),(0,d.jsx)(p.default,{currentProjectName:r.projectName,currentEnvName:a})]})]},a)}),(0,d.jsx)(h.TabsContent,{value:"mock",className:"space-y-6",children:(0,d.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg",children:[(0,d.jsx)("h3",{className:"text-lg font-semibold mb-4",children:"Mock配置"}),(0,d.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6 mb-6",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsxs)("div",{className:"space-y-1",children:[(0,d.jsx)(k.Label,{className:"text-sm font-medium",children:"Mock拦截"}),(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"启用或禁用Mock拦截功能"})]}),(0,d.jsx)(l.Switch,{checked:z.mockingIntercept,onCheckedChange:aR})]}),(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsxs)("div",{className:"space-y-1",children:[(0,d.jsx)(k.Label,{className:"text-sm font-medium",children:"Mock开启"}),(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"启用或禁用Mock功能"})]}),(0,d.jsx)(l.Switch,{checked:z.mockOpen,onCheckedChange:aS})]})]}),z.saveMessage&&(0,d.jsx)("div",{className:"mb-6",children:(0,d.jsx)("span",{className:`text-sm ${z.saveMessage.includes("已保存")?"text-green-600":"text-red-600"}`,children:z.saveMessage})}),(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsx)("h4",{className:"text-md font-medium",children:"Mock接口列表"}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)(g.Button,{onClick:()=>{ab(!0);let a=a0(ae.method,ae.apiPath);N({projectName:c||"",apiName:ae.apiPath,method:ae.method.toLowerCase(),siteName:"",content:a||""})},variant:"default",size:"sm",children:"新建"}),(0,d.jsx)(g.Button,{onClick:aW,disabled:F,variant:"outline",size:"sm",children:F?"加载中...":"刷新"}),(0,d.jsx)(g.Button,{onClick:aU,variant:"outline",size:"sm",children:"一键关闭"}),(0,d.jsx)(g.Button,{onClick:aV,variant:"outline",size:"sm",children:"一键开启"})]})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)("div",{className:"relative flex-1 max-w-md",children:[(0,d.jsx)(j.Input,{placeholder:"搜索接口地址...",value:aq,onChange:a=>bc(a.target.value),className:"pr-8"}),aq&&(0,d.jsx)(g.Button,{variant:"ghost",size:"sm",onClick:()=>{ar(""),I(1)},className:"absolute right-1 top-1/2 transform -translate-y-1/2 h-6 w-6 p-0 hover:bg-gray-100",children:"×"})]}),aq&&(0,d.jsxs)("span",{className:"text-sm text-gray-500",children:['搜索关键词: "',aq,'"']})]}),F?(0,d.jsx)("div",{className:"text-center py-8",children:(0,d.jsx)("p",{className:"text-gray-500",children:"加载Mock数据中..."})}):D&&D.mockFiles.length>0?(()=>{let a=[];D.mockFiles.forEach(b=>{b.methods.forEach(c=>{let d=b.apiName.replace(/_/g,"/"),e=c.files.map(a=>a.siteName),f=c.setting?.currentSite||e[0]||"",g=c.setting?.open||[],h=g.includes(f);a.push({apiPath:d,method:c.method.toUpperCase(),currentSite:f,availableSites:e,apiName:b.apiName,isOpen:h,openSites:g})})});let b=aq.trim()?a.filter(a=>a.apiPath.toLowerCase().includes(aq.toLowerCase())):a,c=b.length,e=Math.ceil(c/J),f=(H-1)*J,h=f+J,j=b.slice(f,h);return(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsxs)(m.Table,{children:[(0,d.jsx)(m.TableHeader,{children:(0,d.jsxs)(m.TableRow,{children:[(0,d.jsx)(m.TableHead,{children:"接口地址"}),(0,d.jsx)(m.TableHead,{children:"请求方法"}),(0,d.jsx)(m.TableHead,{children:"当前场景"}),(0,d.jsx)(m.TableHead,{children:"开启mock"}),(0,d.jsx)(m.TableHead,{children:"操作"})]})}),(0,d.jsx)(m.TableBody,{children:j.map((a,b)=>(0,d.jsxs)(m.TableRow,{children:[(0,d.jsx)(m.TableCell,{className:"font-medium",children:a.apiPath}),(0,d.jsx)(m.TableCell,{children:(0,d.jsx)("span",{className:`px-2 py-1 rounded text-xs font-medium ${"GET"===a.method?"bg-green-100 text-green-800":"POST"===a.method?"bg-blue-100 text-blue-800":"PUT"===a.method?"bg-yellow-100 text-yellow-800":"DELETE"===a.method?"bg-red-100 text-red-800":"bg-gray-100 text-gray-800"}`,children:a.method})}),(0,d.jsx)(m.TableCell,{children:(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)(i.Select,{value:a.currentSite,onValueChange:b=>aX(a.apiName,a.method.toLowerCase(),b),children:[(0,d.jsx)(i.SelectTrigger,{className:"w-32",children:(0,d.jsx)(i.SelectValue,{})}),(0,d.jsx)(i.SelectContent,{children:a.availableSites.map(a=>(0,d.jsx)(i.SelectItem,{value:a,children:a},a))})]}),a.availableSites.length>1&&(0,d.jsx)(g.Button,{variant:"ghost",size:"sm",onClick:()=>a8(a.apiName,a.method.toLowerCase(),a.currentSite),className:"h-8 w-8 p-0 text-red-500 hover:text-red-700 hover:bg-red-50",title:"删除当前场景",children:(0,d.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,d.jsx)("path",{d:"M3 6h18"}),(0,d.jsx)("path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"}),(0,d.jsx)("path",{d:"M8 6V4c0-1 1-2 2-2h4c0 1 1 2 2 2v2"})]})})]})}),(0,d.jsx)(m.TableCell,{children:(0,d.jsx)(l.Switch,{checked:a.isOpen,onCheckedChange:b=>a6(a.apiName,a.method.toLowerCase(),a.currentSite,b)})}),(0,d.jsx)(m.TableCell,{children:(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(g.Button,{variant:"outline",size:"sm",onClick:()=>aY(a.apiName,a.method.toLowerCase(),a.currentSite),disabled:Q,children:Q?"加载中...":"编辑"}),(0,d.jsx)(g.Button,{variant:"outline",size:"sm",onClick:()=>a3(a.apiName,a.method.toLowerCase(),a.apiPath),disabled:ai,children:"新增场景"}),(0,d.jsx)(g.Button,{variant:"outline",size:"sm",onClick:()=>ba(a.apiName,a.apiPath),className:"text-red-500 hover:text-red-700 hover:border-red-300",children:"删除接口"})]})})]},`${a.apiName}-${a.method}-${b}`))})]}),e>1&&(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsxs)("div",{className:"text-sm text-gray-500",children:["显示 ",f+1,"-",Math.min(h,c)," 条,共 ",c," 条"]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)(g.Button,{variant:"outline",size:"sm",onClick:()=>I(a=>Math.max(1,a-1)),disabled:1===H,children:"上一页"}),(0,d.jsxs)("span",{className:"text-sm",children:[H," / ",e]}),(0,d.jsx)(g.Button,{variant:"outline",size:"sm",onClick:()=>I(a=>Math.min(e,a+1)),disabled:H===e,children:"下一页"})]})]})]})})():(0,d.jsxs)("div",{className:"text-center py-8",children:[(0,d.jsx)("p",{className:"text-gray-500",children:"暂无Mock接口数据"}),(0,d.jsx)("p",{className:"text-xs text-gray-400 mt-1",children:"请先创建Mock文件"})]})]})]})})]}):(0,d.jsx)("div",{className:"text-center text-gray-500 py-8",children:(0,d.jsx)("p",{children:"该项目没有配置环境信息"})}),(0,d.jsx)(n.Dialog,{open:O||aa||ac,onOpenChange:a=>{a||(P(!1),ab(!1),ad(!1),ah(null))},children:(0,d.jsxs)(n.DialogContent,{className:"w-screen h-screen max-w-none max-h-none m-0 rounded-none overflow-hidden flex flex-col",children:[(0,d.jsxs)(n.DialogHeader,{className:"flex-shrink-0 border-b pb-4",children:[(0,d.jsx)(n.DialogTitle,{children:aa?"新建Mock文件":ac?"新增场景":"编辑Mock文件"}),(0,d.jsx)(n.DialogDescription,{children:aa?"创建一个新的Mock接口文件":ac&&ag?(0,d.jsxs)(d.Fragment,{children:["为接口 ",ag.apiPath," [",ag.method.toUpperCase(),"] 新增场景"]}):M?(0,d.jsxs)(d.Fragment,{children:["编辑 ",M.apiName.replace(/_/g,"/")," - ",M.method.toUpperCase()," - ",M.siteName,".cjs"]}):null})]}),(aa||ac)&&(0,d.jsxs)("div",{className:"flex-shrink-0 border-b pb-4",children:[(0,d.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(k.Label,{htmlFor:"apiPath",className:"text-sm font-medium",children:"接口地址"}),ac?(0,d.jsx)("div",{className:"px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-sm text-gray-600",children:ae.apiPath}):(0,d.jsx)(j.Input,{id:"apiPath",placeholder:"/api/user/info",value:ae.apiPath,onChange:a=>a_("apiPath",a.target.value)})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(k.Label,{htmlFor:"method",className:"text-sm font-medium",children:"请求方法"}),ac?(0,d.jsx)("div",{className:"px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-sm text-gray-600",children:ae.method}):(0,d.jsxs)(i.Select,{value:ae.method,onValueChange:a=>a_("method",a),children:[(0,d.jsx)(i.SelectTrigger,{children:(0,d.jsx)(i.SelectValue,{})}),(0,d.jsxs)(i.SelectContent,{children:[(0,d.jsx)(i.SelectItem,{value:"GET",children:"GET"}),(0,d.jsx)(i.SelectItem,{value:"POST",children:"POST"}),(0,d.jsx)(i.SelectItem,{value:"PUT",children:"PUT"}),(0,d.jsx)(i.SelectItem,{value:"DELETE",children:"DELETE"}),(0,d.jsx)(i.SelectItem,{value:"PATCH",children:"PATCH"})]})]})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(k.Label,{htmlFor:"siteName",className:"text-sm font-medium",children:"场景名称"}),aa?(0,d.jsx)("div",{className:"px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-sm text-gray-600",children:"默认场景"}):(0,d.jsx)(j.Input,{id:"siteName",placeholder:"请输入场景名称",value:ae.siteName,onChange:a=>a_("siteName",a.target.value)})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(k.Label,{htmlFor:"mockOpen",className:"text-sm font-medium",children:"开启Mock"}),(0,d.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,d.jsx)(l.Switch,{id:"mockOpen",checked:ae.mockOpen,onCheckedChange:a=>a_("mockOpen",a)}),(0,d.jsx)("span",{className:"text-sm text-gray-600",children:ae.mockOpen?"开启":"关闭"})]})]})]}),aa&&ae.apiPath.trim()&&ae.siteName.trim()&&a1(ae.apiPath,ae.method,ae.siteName)&&(0,d.jsx)("div",{className:"mt-4 p-3 bg-red-50 border border-red-200 rounded-md",children:(0,d.jsx)("div",{className:"flex items-center",children:(0,d.jsxs)("span",{className:"text-red-600 text-sm",children:["⚠️ 接口 ",ae.apiPath," [",ae.method.toUpperCase(),'] 的场景 "',ae.siteName,'" 已存在']})})}),ac&&ag&&ae.siteName.trim()&&a4(ag.apiName,ag.method,ae.siteName)&&(0,d.jsx)("div",{className:"mt-4 p-3 bg-red-50 border border-red-200 rounded-md",children:(0,d.jsx)("div",{className:"flex items-center",children:(0,d.jsxs)("span",{className:"text-red-600 text-sm",children:['⚠️ 场景 "',ae.siteName,'" 已存在']})})})]}),(0,d.jsx)("div",{className:"flex-1 flex flex-col space-y-4 py-4",children:(0,d.jsxs)("div",{className:"flex-1 flex flex-col",children:[(0,d.jsx)(k.Label,{className:"text-sm font-medium mb-2",children:"文件内容"}),(0,d.jsxs)("div",{className:"flex-1 border rounded-md overflow-hidden relative",children:[U&&(0,d.jsx)("div",{className:"absolute inset-0 bg-gray-50 flex items-center justify-center z-10",children:(0,d.jsx)("p",{className:"text-gray-500",children:"编辑器加载中..."})}),(0,d.jsx)(o.default,{height:"100%",defaultLanguage:"javascript",value:M?.content||"",onChange:a=>{N(b=>b?{...b,content:a||""}:null)},onMount:async a=>{console.log("编辑器挂载,模式:",{isCreateMode:aa,isAddSceneMode:ac,createFormData:ae}),X(a),V(!1),setTimeout(()=>aC(a),500)},loading:(0,d.jsx)("div",{className:"flex items-center justify-center h-full",children:(0,d.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:!1}},aa?"create":ac?"addscene":"edit")]})]})}),(0,d.jsxs)(n.DialogFooter,{className:"flex justify-between flex-shrink-0 border-t pt-4",children:[(0,d.jsx)(g.Button,{variant:"secondary",onClick:aA,disabled:!W||U,children:"格式化代码"}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(g.Button,{variant:"outline",onClick:()=>{aa?(ab(!1),af({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0})):ac?(ad(!1),ah(null),af({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0})):a$()},children:"取消"}),aa?(0,d.jsx)(g.Button,{onClick:a2,disabled:ai||!ae.apiPath.trim()||!ae.siteName.trim()||a1(ae.apiPath,ae.method,ae.siteName),children:ai?"创建中...":"创建"}):ac?(0,d.jsx)(g.Button,{onClick:a5,disabled:ai||!ae.siteName.trim()||!!ag&&a4(ag.apiName,ag.method,ae.siteName),children:ai?"创建中...":"创建"}):(0,d.jsx)(g.Button,{onClick:aZ,disabled:S,children:S?"保存中...":"保存"})]})]})]})}),(0,d.jsx)(n.Dialog,{open:au,onOpenChange:a=>{a||aO()},children:(0,d.jsxs)(n.DialogContent,{className:"max-w-5xl h-[85vh] max-h-[85vh] flex flex-col p-0",children:[(0,d.jsxs)(n.DialogHeader,{className:"px-6 pt-6 pb-4",children:[(0,d.jsxs)(n.DialogTitle,{className:"flex items-center justify-between",children:[(0,d.jsxs)("span",{children:["进程日志 - ",c," - ",aw]}),(0,d.jsx)("span",{className:"flex items-center gap-2 text-sm font-normal",children:aJ&&(0,d.jsxs)("span",{className:"flex items-center gap-1 text-green-600",children:[(0,d.jsx)("span",{className:"w-2 h-2 bg-green-500 rounded-full animate-pulse"}),"实时连接"]})})]}),(0,d.jsx)(n.DialogDescription,{children:"实时显示进程输出日志"})]}),(0,d.jsx)("div",{className:"flex-1 min-h-0 bg-gray-900 mx-6 rounded-md overflow-hidden",children:(0,d.jsx)(q.default,{logs:ay})}),(0,d.jsxs)(n.DialogFooter,{className:"flex items-center justify-between px-6 pb-6 pt-4",children:[(0,d.jsxs)("div",{className:"text-sm text-gray-500",children:["共 ",ay.length," 条日志"]}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(g.Button,{variant:"outline",onClick:()=>{aw&&(aM(),aL(aw))},disabled:!!aJ,children:"重新连接"}),(0,d.jsx)(g.Button,{variant:"default",onClick:aO,children:"关闭"})]})]})]})}),(0,d.jsx)(n.Dialog,{open:ak.open,onOpenChange:a=>{a||al({open:!1,apiName:"",method:"",siteName:""})},children:(0,d.jsxs)(n.DialogContent,{className:"max-w-md",children:[(0,d.jsxs)(n.DialogHeader,{children:[(0,d.jsxs)(n.DialogTitle,{className:"flex items-center gap-2 text-red-600",children:[(0,d.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,d.jsx)("path",{d:"M3 6h18"}),(0,d.jsx)("path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"}),(0,d.jsx)("path",{d:"M8 6V4c0-1 1-2 2-2h4c0 1 1 2 2 2v2"})]}),"确认删除场景"]}),(0,d.jsxs)(n.DialogDescription,{children:["确定要删除场景 ",(0,d.jsxs)("span",{className:"font-medium text-gray-900",children:['"',ak.siteName,'"']})," 吗?",(0,d.jsx)("br",{}),(0,d.jsx)("span",{className:"text-red-500 text-sm mt-2 block",children:"此操作不可撤销"})]})]}),(0,d.jsxs)(n.DialogFooter,{className:"flex gap-2 justify-end",children:[(0,d.jsx)(g.Button,{variant:"outline",onClick:()=>al({open:!1,apiName:"",method:"",siteName:""}),children:"取消"}),(0,d.jsx)(g.Button,{variant:"destructive",onClick:a9,children:"删除"})]})]})}),(0,d.jsx)(n.Dialog,{open:am.open,onOpenChange:a=>{a||an({open:!1,apiName:"",apiPath:""})},children:(0,d.jsxs)(n.DialogContent,{className:"max-w-md",children:[(0,d.jsxs)(n.DialogHeader,{children:[(0,d.jsxs)(n.DialogTitle,{className:"flex items-center gap-2 text-red-600",children:[(0,d.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,d.jsx)("path",{d:"M3 6h18"}),(0,d.jsx)("path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"}),(0,d.jsx)("path",{d:"M8 6V4c0-1 1-2 2-2h4c0 1 1 2 2 2v2"})]}),"确认删除接口"]}),(0,d.jsxs)(n.DialogDescription,{children:["确定要删除整个接口 ",(0,d.jsxs)("span",{className:"font-medium text-gray-900",children:['"',am.apiPath,'"']})," 吗?",(0,d.jsx)("br",{}),(0,d.jsx)("span",{className:"text-red-500 text-sm mt-2 block font-medium",children:"⚠️ 这将删除该接口的所有场景和相关文件,此操作不可撤销"})]})]}),(0,d.jsxs)(n.DialogFooter,{className:"flex gap-2 justify-end",children:[(0,d.jsx)(g.Button,{variant:"outline",onClick:()=>an({open:!1,apiName:"",apiPath:""}),children:"取消"}),(0,d.jsx)(g.Button,{variant:"destructive",onClick:bb,children:"删除整个接口"})]})]})}),ao.open&&(0,d.jsx)("div",{className:"fixed top-4 right-4 z-50 animate-in slide-in-from-top-2 duration-300",children:(0,d.jsxs)("div",{className:`flex items-center gap-3 px-4 py-3 rounded-lg shadow-lg border max-w-sm ${"success"===ao.type?"bg-green-50 border-green-200 text-green-800":"bg-red-50 border-red-200 text-red-800"}`,children:[(0,d.jsx)("div",{className:"flex-shrink-0",children:"success"===ao.type?(0,d.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"text-green-600",children:(0,d.jsx)("path",{d:"M20 6L9 17l-5-5"})}):(0,d.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"text-red-600",children:[(0,d.jsx)("circle",{cx:"12",cy:"12",r:"10"}),(0,d.jsx)("line",{x1:"15",y1:"9",x2:"9",y2:"15"}),(0,d.jsx)("line",{x1:"9",y1:"9",x2:"15",y2:"15"})]})}),(0,d.jsx)("p",{className:"text-sm font-medium",children:ao.message}),(0,d.jsx)("button",{onClick:()=>ap({open:!1,type:"success",message:""}),className:"flex-shrink-0 ml-auto",children:(0,d.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"opacity-60 hover:opacity-100",children:[(0,d.jsx)("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),(0,d.jsx)("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})})]})}function t(){return(0,d.jsx)(e.Suspense,{fallback:(0,d.jsx)("div",{className:"min-h-screen bg-gray-50 flex items-center justify-center",children:(0,d.jsxs)("div",{className:"text-center space-y-4",children:[(0,d.jsx)("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600 mx-auto"}),(0,d.jsx)("p",{className:"text-gray-600",children:"正在加载配置页面..."})]})}),children:(0,d.jsx)(s,{})})}}};
|
|
59
|
+
});`}},a2=(a,b,c)=>{if(!E)return!1;let d=a.replace(/\//g,"_").replace(/^_/,""),e=E.mockFiles.find(a=>a.apiName===d);if(!e)return!1;let f=e.methods.find(a=>a.method.toLowerCase()===b.toLowerCase());return!!f&&!!f.files.find(a=>a.siteName===c)},a3=async()=>{if(!af.apiPath.trim())return void a8("error","请输入接口地址");if(a2(af.apiPath,af.method,af.siteName))return void a8("error",`接口 ${af.apiPath} [${af.method.toUpperCase()}] 的场景 "${af.siteName}" 已存在,不能重复创建`);ak(!0);try{let a=af.apiPath.replace(/\//g,"_").replace(/^_/,""),b=N?.content??a1(af.method,af.apiPath),d=await fetch("/api/mock-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:c,apiName:a,method:af.method.toLowerCase(),siteName:af.siteName,content:b})}),e=await d.json();if(e.success)af.mockOpen&&await a7(a,af.method.toLowerCase(),af.siteName,!0),ag({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0}),ac(!1),await aH(),a8("success","Mock文件创建成功");else throw Error(e.error||"创建失败")}catch(a){console.error("创建Mock文件失败:",a),a8("error",`创建Mock文件失败: ${a instanceof Error?a.message:"未知错误"}`)}finally{ak(!1)}},a4=(a,b,d)=>{console.log("新增场景点击:",{apiName:a,method:b,apiPath:d}),ai({apiName:a,method:b,apiPath:d});let e={apiPath:d,method:b.toUpperCase(),siteName:"",mockOpen:!0};console.log("设置表单数据:",e),ag(e),ae(!0);let f=a1(e.method,e.apiPath);O({projectName:c||"",apiName:a,method:b.toLowerCase(),siteName:"",content:f||""})},a5=(a,b,c)=>{if(!E)return!1;let d=E.mockFiles.find(b=>b.apiName===a);if(!d)return!1;let e=d.methods.find(a=>a.method.toLowerCase()===b.toLowerCase());return!!e&&!!e.files.find(a=>a.siteName===c)},a6=async()=>{if(!ah||!af.siteName.trim())return void a8("error","请输入场景名称");if(a5(ah.apiName,ah.method,af.siteName))return void a8("error",`接口 ${ah.apiPath} [${ah.method.toUpperCase()}] 的场景 "${af.siteName}" 已存在`);ak(!0);try{let a=N?.content??a1(ah.method,ah.apiPath);console.log("defaultContent",a,N);let b=await fetch("/api/mock-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:c,apiName:ah.apiName,method:ah.method.toLowerCase(),siteName:af.siteName,content:a})}),d=await b.json();if(d.success){if(af.mockOpen&&await a7(ah.apiName,ah.method,af.siteName,!0),ag({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0}),s)try{let a=await fetch("/api/mock-setting",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s.projectName,apiName:ah.apiName,method:ah.method,currentSite:af.siteName})}),b=await a.json();b.success||console.warn("切换到新场景失败:",b.error)}catch(a){console.warn("切换到新场景失败:",a)}try{await a7(ah.apiName,ah.method,af.siteName,!0)}catch(a){console.warn("自动开启新场景失败:",a)}ae(!1),ai(null),await aH(),a8("success","场景创建成功")}else throw Error(d.error||"创建失败")}catch(a){console.error("创建场景失败:",a),a8("error",`创建场景失败: ${a instanceof Error?a.message:"未知错误"}`)}finally{ak(!1)}},a7=async(a,b,c,d)=>{if(s)try{let e=await fetch("/api/mock-open-status",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:s.projectName,apiName:a,method:b,siteName:c,isOpen:d})}),f=await e.json();f.success?await aH():console.error("更新Mock开启状态失败:",f.error)}catch(a){console.error("更新Mock开启状态失败:",a)}},a8=(a,b)=>{aq({open:!0,type:a,message:b}),setTimeout(()=>{aq({open:!1,type:"success",message:""})},3e3)},a9=(a,b,c)=>{am({open:!0,apiName:a,method:b,siteName:c})},ba=async()=>{if(!s)return;let{apiName:a,method:b,siteName:c}=al;try{let d=await fetch(`/api/mock-file?project=${encodeURIComponent(s.projectName)}&apiName=${encodeURIComponent(a)}&method=${encodeURIComponent(b)}&siteName=${encodeURIComponent(c)}`,{method:"DELETE"}),e=await d.json();if(e.success){let a=window.scrollY;await aH(),window.scrollTo(0,a),a8("success","场景删除成功")}else console.error("删除场景失败:",e.error),a8("error",`删除场景失败: ${e.error}`)}catch(a){console.error("删除场景失败:",a),a8("error","删除场景失败: 网络错误")}finally{am({open:!1,apiName:"",method:"",siteName:""})}},bb=(a,b)=>{ao({open:!0,apiName:a,apiPath:b})},bc=async()=>{if(!s)return;let{apiName:a}=an;try{let b=await fetch(`/api/delete-mock-api?project=${encodeURIComponent(s.projectName)}&apiName=${encodeURIComponent(a)}`,{method:"DELETE"}),c=await b.json();if(c.success){let a=window.scrollY;await aH(),window.scrollTo(0,a),a8("success","接口删除成功")}else console.error("删除接口失败:",c.error),a8("error",`删除接口失败: ${c.error}`)}catch(a){console.error("删除接口失败:",a),a8("error","删除接口失败: 网络错误")}finally{ao({open:!1,apiName:"",apiPath:""})}},bd=a=>{as(a),J(1)};if(u)return(0,d.jsx)("main",{className:"container mx-auto p-4 sm:p-6 md:p-8",children:(0,d.jsx)("div",{className:"text-center py-8",children:(0,d.jsx)("p",{children:"加载中..."})})});if(w||!s)return(0,d.jsxs)("main",{className:"container mx-auto p-4 sm:p-6 md:p-8",children:[(0,d.jsxs)("div",{className:"flex justify-between items-center mb-6",children:[(0,d.jsx)("h1",{className:"text-2xl font-bold",children:"项目配置"}),(0,d.jsxs)("div",{className:"flex gap-2",children:[c&&(0,d.jsx)(g.Button,{variant:"default",onClick:aG,disabled:C,children:C?"打开中...":"在 Cursor 中打开"}),(0,d.jsx)(g.Button,{variant:"outline",onClick:aE,children:"返回初始化页面"})]})]}),(0,d.jsx)("div",{className:"text-center text-red-500 py-8",children:(0,d.jsx)("p",{children:w||"未找到项目配置"})})]});let be=Object.keys(s.envs);return(0,d.jsxs)("main",{className:"container mx-auto p-4 sm:p-6 md:p-8",children:[(0,d.jsxs)("div",{className:"flex justify-between items-center mb-6",children:[(0,d.jsxs)("div",{className:"flex items-center gap-4",children:[(0,d.jsxs)("h1",{className:"text-2xl font-bold",children:[s.projectName," - 项目配置"]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)(k.Label,{className:"text-sm font-medium text-gray-600",children:"切换项目:"}),(0,d.jsxs)(i.Select,{value:c||"",onValueChange:d=>{if(d===c)return;let e=a.get("tab"),f=`/configuration?project=${encodeURIComponent(d)}${e?`&tab=${e}`:""}`;b.push(f)},disabled:_,children:[(0,d.jsx)(i.SelectTrigger,{className:"w-40",children:(0,d.jsx)(i.SelectValue,{placeholder:_?"加载中...":"选择项目"})}),(0,d.jsx)(i.SelectContent,{children:Z.map(a=>(0,d.jsx)(i.SelectItem,{value:a.name,children:(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:`w-2 h-2 rounded-full ${"existing"===a.status?"bg-green-500":"failed"===a.status?"bg-red-500":"bg-yellow-500"}`}),(0,d.jsx)("span",{children:a.name})]})},a.name))})]})]}),(0,d.jsx)("div",{className:"ml-4",children:(0,d.jsx)(r.default,{projectName:c||"",compact:!0})})]}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(g.Button,{variant:"default",onClick:aG,disabled:C,children:C?"打开中...":"在 Cursor 中打开"}),(0,d.jsx)(g.Button,{variant:"outline",onClick:aE,children:"返回初始化页面"})]})]}),be.length>0?(0,d.jsxs)(h.Tabs,{value:L||be[0],onValueChange:a=>{M(a),"mock"===a&&aH()},className:"w-full",children:[(0,d.jsxs)(h.TabsList,{className:"grid w-full",style:{gridTemplateColumns:`repeat(${be.length+1}, 1fr)`},children:[be.map(a=>(0,d.jsx)(h.TabsTrigger,{value:a,className:"capitalize relative",children:(0,d.jsxs)("span",{className:"flex items-center gap-2",children:[a,at[a]?.running&&(0,d.jsx)("span",{className:"w-2 h-2 bg-green-500 rounded-full animate-pulse",title:"运行中"})]})},a)),(0,d.jsx)(h.TabsTrigger,{value:"mock",className:"capitalize",children:"Mock配置"})]}),be.map(a=>{let b=s.envs[a],c=Object.entries(b.proxyEnv),e=y[a]?.selectedProxy||"",f=y[a]?.selectedOption||"",l=b.currentProxy,m=b.proxyEnv[l]||l,n=b.proxyEnv[l]?l:"custom";return(0,d.jsxs)(h.TabsContent,{value:a,className:"space-y-6",children:[(0,d.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,d.jsx)("h3",{className:"text-lg font-semibold",children:"开发服务器控制"}),(0,d.jsx)("div",{className:"flex items-center gap-4",children:at[a]?.running?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("span",{className:"flex items-center gap-2 text-sm text-green-600",children:[(0,d.jsx)("span",{className:"w-2 h-2 bg-green-500 rounded-full animate-pulse"}),"运行中 (PID: ",at[a]?.pid,")"]}),(0,d.jsx)(g.Button,{variant:"outline",size:"sm",onClick:()=>aP(a),children:"查看日志"}),(0,d.jsx)(g.Button,{variant:"destructive",size:"sm",onClick:()=>aK(a),disabled:at[a]?.loading,children:at[a]?.loading?"处理中...":"停止"})]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("span",{className:"flex items-center gap-2 text-sm text-gray-500",children:[(0,d.jsx)("span",{className:"w-2 h-2 bg-gray-400 rounded-full"}),"未运行"]}),(0,d.jsx)(g.Button,{variant:"outline",size:"sm",onClick:()=>aP(a),children:"查看日志"}),(0,d.jsx)(g.Button,{variant:"default",size:"sm",onClick:()=>aJ(a),disabled:at[a]?.loading||!b.startCommand,children:at[a]?.loading?"处理中...":"启动"})]})})]}),b.startCommand?(0,d.jsxs)("div",{className:"text-sm text-gray-600",children:[(0,d.jsx)("span",{className:"font-medium",children:"启动命令:"})," ",(0,d.jsx)("code",{className:"px-2 py-1 bg-gray-200 rounded",children:b.startCommand})]}):(0,d.jsx)("div",{className:"text-sm text-yellow-600",children:"⚠️ 该环境未配置启动命令"}),b.host&&(0,d.jsxs)("div",{className:"text-sm text-gray-600 mt-2",children:[(0,d.jsx)("span",{className:"font-medium",children:"访问地址:"}),at[a]?.running?(0,d.jsx)("a",{href:b.host,target:"_blank",rel:"noopener noreferrer",className:"ml-2 text-blue-600 hover:underline",children:b.host}):(0,d.jsx)("span",{className:"ml-2",children:b.host})]})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[(0,d.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg",children:[(0,d.jsxs)("h3",{className:"text-lg font-semibold mb-4",children:[a," 环境配置"]}),(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)(k.Label,{className:"block text-sm font-medium mb-2",children:"接口代理环境切换"}),(0,d.jsxs)(i.Select,{value:f,onValueChange:b=>aR(a,b),children:[(0,d.jsx)(i.SelectTrigger,{className:"w-full",children:(0,d.jsx)(i.SelectValue,{placeholder:"选择代理环境"})}),(0,d.jsx)(i.SelectContent,{children:c.map(([a,b])=>(0,d.jsxs)(i.SelectItem,{value:a,children:[a,"(",b,")"]},a))})]})]}),m&&(0,d.jsxs)("div",{className:"p-3 bg-blue-50 rounded-md",children:[(0,d.jsxs)("p",{className:"text-sm text-blue-700",children:["当前项目接口已代理至:",n," 环境"]}),(0,d.jsxs)("p",{className:"text-sm text-blue-600",children:["代理地址为:",m]})]}),"custom"===f&&(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(k.Label,{className:"block text-sm font-medium",children:"自定义代理地址"}),(0,d.jsx)(j.Input,{type:"url",placeholder:"请输入自定义代理地址 (如: http://localhost:52741)",value:e,onChange:b=>aS(a,b.target.value),className:"w-full"}),(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"请输入完整的代理地址,包括协议 (http:// 或 https://)"})]}),(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsx)(g.Button,{onClick:()=>aV(a),disabled:y[a]?.saving,className:"w-full sm:w-auto",children:y[a]?.saving?"保存中...":"保存配置"}),y[a]?.saveMessage&&(0,d.jsx)("span",{className:`text-sm ml-3 ${y[a]?.saveMessage==="保存成功"?"text-green-600":"text-red-600"}`,children:y[a]?.saveMessage})]})]})]}),(0,d.jsx)(p.default,{currentProjectName:s.projectName,currentEnvName:a})]})]},a)}),(0,d.jsx)(h.TabsContent,{value:"mock",className:"space-y-6",children:(0,d.jsxs)("div",{className:"p-6 bg-gray-50 rounded-lg",children:[(0,d.jsx)("h3",{className:"text-lg font-semibold mb-4",children:"Mock配置"}),(0,d.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6 mb-6",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsxs)("div",{className:"space-y-1",children:[(0,d.jsx)(k.Label,{className:"text-sm font-medium",children:"Mock拦截"}),(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"启用或禁用Mock拦截功能"})]}),(0,d.jsx)(l.Switch,{checked:A.mockingIntercept,onCheckedChange:aT})]}),(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsxs)("div",{className:"space-y-1",children:[(0,d.jsx)(k.Label,{className:"text-sm font-medium",children:"Mock开启"}),(0,d.jsx)("p",{className:"text-xs text-gray-500",children:"启用或禁用Mock功能"})]}),(0,d.jsx)(l.Switch,{checked:A.mockOpen,onCheckedChange:aU})]})]}),A.saveMessage&&(0,d.jsx)("div",{className:"mb-6",children:(0,d.jsx)("span",{className:`text-sm ${A.saveMessage.includes("已保存")?"text-green-600":"text-red-600"}`,children:A.saveMessage})}),(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsx)("h4",{className:"text-md font-medium",children:"Mock接口列表"}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)(g.Button,{onClick:()=>{ac(!0);let a=a1(af.method,af.apiPath);O({projectName:c||"",apiName:af.apiPath,method:af.method.toLowerCase(),siteName:"",content:a||""})},variant:"default",size:"sm",children:"新建"}),(0,d.jsx)(g.Button,{onClick:aH,disabled:G,variant:"outline",size:"sm",children:G?"加载中...":"刷新"}),(0,d.jsx)(g.Button,{onClick:aW,variant:"outline",size:"sm",children:"一键关闭"}),(0,d.jsx)(g.Button,{onClick:aX,variant:"outline",size:"sm",children:"一键开启"})]})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)("div",{className:"relative flex-1 max-w-md",children:[(0,d.jsx)(j.Input,{placeholder:"搜索接口地址...",value:ar,onChange:a=>bd(a.target.value),className:"pr-8"}),ar&&(0,d.jsx)(g.Button,{variant:"ghost",size:"sm",onClick:()=>{as(""),J(1)},className:"absolute right-1 top-1/2 transform -translate-y-1/2 h-6 w-6 p-0 hover:bg-gray-100",children:"×"})]}),ar&&(0,d.jsxs)("span",{className:"text-sm text-gray-500",children:['搜索关键词: "',ar,'"']})]}),G?(0,d.jsx)("div",{className:"text-center py-8",children:(0,d.jsx)("p",{className:"text-gray-500",children:"加载Mock数据中..."})}):E&&E.mockFiles.length>0?(()=>{let a=[];E.mockFiles.forEach(b=>{b.methods.forEach(c=>{let d=b.apiName.replace(/_/g,"/"),e=c.files.map(a=>a.siteName),f=c.setting?.currentSite||e[0]||"",g=c.setting?.open||[],h=g.includes(f);a.push({apiPath:d,method:c.method.toUpperCase(),currentSite:f,availableSites:e,apiName:b.apiName,isOpen:h,openSites:g})})});let b=ar.trim()?a.filter(a=>a.apiPath.toLowerCase().includes(ar.toLowerCase())):a,c=b.length,e=Math.ceil(c/K),f=(I-1)*K,h=f+K,j=b.slice(f,h);return(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsxs)(m.Table,{children:[(0,d.jsx)(m.TableHeader,{children:(0,d.jsxs)(m.TableRow,{children:[(0,d.jsx)(m.TableHead,{children:"接口地址"}),(0,d.jsx)(m.TableHead,{children:"请求方法"}),(0,d.jsx)(m.TableHead,{children:"当前场景"}),(0,d.jsx)(m.TableHead,{children:"开启mock"}),(0,d.jsx)(m.TableHead,{children:"操作"})]})}),(0,d.jsx)(m.TableBody,{children:j.map((a,b)=>(0,d.jsxs)(m.TableRow,{children:[(0,d.jsx)(m.TableCell,{className:"font-medium",children:a.apiPath}),(0,d.jsx)(m.TableCell,{children:(0,d.jsx)("span",{className:`px-2 py-1 rounded text-xs font-medium ${"GET"===a.method?"bg-green-100 text-green-800":"POST"===a.method?"bg-blue-100 text-blue-800":"PUT"===a.method?"bg-yellow-100 text-yellow-800":"DELETE"===a.method?"bg-red-100 text-red-800":"bg-gray-100 text-gray-800"}`,children:a.method})}),(0,d.jsx)(m.TableCell,{children:(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)(i.Select,{value:a.currentSite,onValueChange:b=>aY(a.apiName,a.method.toLowerCase(),b),children:[(0,d.jsx)(i.SelectTrigger,{className:"w-32",children:(0,d.jsx)(i.SelectValue,{})}),(0,d.jsx)(i.SelectContent,{children:a.availableSites.map(a=>(0,d.jsx)(i.SelectItem,{value:a,children:a},a))})]}),a.availableSites.length>1&&(0,d.jsx)(g.Button,{variant:"ghost",size:"sm",onClick:()=>a9(a.apiName,a.method.toLowerCase(),a.currentSite),className:"h-8 w-8 p-0 text-red-500 hover:text-red-700 hover:bg-red-50",title:"删除当前场景",children:(0,d.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,d.jsx)("path",{d:"M3 6h18"}),(0,d.jsx)("path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"}),(0,d.jsx)("path",{d:"M8 6V4c0-1 1-2 2-2h4c0 1 1 2 2 2v2"})]})})]})}),(0,d.jsx)(m.TableCell,{children:(0,d.jsx)(l.Switch,{checked:a.isOpen,onCheckedChange:b=>a7(a.apiName,a.method.toLowerCase(),a.currentSite,b)})}),(0,d.jsx)(m.TableCell,{children:(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(g.Button,{variant:"outline",size:"sm",onClick:()=>aZ(a.apiName,a.method.toLowerCase(),a.currentSite),disabled:R,children:R?"加载中...":"编辑"}),(0,d.jsx)(g.Button,{variant:"outline",size:"sm",onClick:()=>a4(a.apiName,a.method.toLowerCase(),a.apiPath),disabled:aj,children:"新增场景"}),(0,d.jsx)(g.Button,{variant:"outline",size:"sm",onClick:()=>bb(a.apiName,a.apiPath),className:"text-red-500 hover:text-red-700 hover:border-red-300",children:"删除接口"})]})})]},`${a.apiName}-${a.method}-${b}`))})]}),e>1&&(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsxs)("div",{className:"text-sm text-gray-500",children:["显示 ",f+1,"-",Math.min(h,c)," 条,共 ",c," 条"]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)(g.Button,{variant:"outline",size:"sm",onClick:()=>J(a=>Math.max(1,a-1)),disabled:1===I,children:"上一页"}),(0,d.jsxs)("span",{className:"text-sm",children:[I," / ",e]}),(0,d.jsx)(g.Button,{variant:"outline",size:"sm",onClick:()=>J(a=>Math.min(e,a+1)),disabled:I===e,children:"下一页"})]})]})]})})():(0,d.jsxs)("div",{className:"text-center py-8",children:[(0,d.jsx)("p",{className:"text-gray-500",children:"暂无Mock接口数据"}),(0,d.jsx)("p",{className:"text-xs text-gray-400 mt-1",children:"请先创建Mock文件"})]})]})]})})]}):(0,d.jsx)("div",{className:"text-center text-gray-500 py-8",children:(0,d.jsx)("p",{children:"该项目没有配置环境信息"})}),(0,d.jsx)(n.Dialog,{open:P||ab||ad,onOpenChange:a=>{a||(Q(!1),ac(!1),ae(!1),ai(null))},children:(0,d.jsxs)(n.DialogContent,{className:"w-screen h-screen max-w-none max-h-none m-0 rounded-none overflow-hidden flex flex-col",children:[(0,d.jsxs)(n.DialogHeader,{className:"flex-shrink-0 border-b pb-4",children:[(0,d.jsx)(n.DialogTitle,{children:ab?"新建Mock文件":ad?"新增场景":"编辑Mock文件"}),(0,d.jsx)(n.DialogDescription,{children:ab?"创建一个新的Mock接口文件":ad&&ah?(0,d.jsxs)(d.Fragment,{children:["为接口 ",ah.apiPath," [",ah.method.toUpperCase(),"] 新增场景"]}):N?(0,d.jsxs)(d.Fragment,{children:["编辑 ",N.apiName.replace(/_/g,"/")," - ",N.method.toUpperCase()," - ",N.siteName,".cjs"]}):null})]}),(ab||ad)&&(0,d.jsxs)("div",{className:"flex-shrink-0 border-b pb-4",children:[(0,d.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(k.Label,{htmlFor:"apiPath",className:"text-sm font-medium",children:"接口地址"}),ad?(0,d.jsx)("div",{className:"px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-sm text-gray-600",children:af.apiPath}):(0,d.jsx)(j.Input,{id:"apiPath",placeholder:"/api/user/info",value:af.apiPath,onChange:a=>a0("apiPath",a.target.value)})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(k.Label,{htmlFor:"method",className:"text-sm font-medium",children:"请求方法"}),ad?(0,d.jsx)("div",{className:"px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-sm text-gray-600",children:af.method}):(0,d.jsxs)(i.Select,{value:af.method,onValueChange:a=>a0("method",a),children:[(0,d.jsx)(i.SelectTrigger,{children:(0,d.jsx)(i.SelectValue,{})}),(0,d.jsxs)(i.SelectContent,{children:[(0,d.jsx)(i.SelectItem,{value:"GET",children:"GET"}),(0,d.jsx)(i.SelectItem,{value:"POST",children:"POST"}),(0,d.jsx)(i.SelectItem,{value:"PUT",children:"PUT"}),(0,d.jsx)(i.SelectItem,{value:"DELETE",children:"DELETE"}),(0,d.jsx)(i.SelectItem,{value:"PATCH",children:"PATCH"})]})]})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(k.Label,{htmlFor:"siteName",className:"text-sm font-medium",children:"场景名称"}),ab?(0,d.jsx)("div",{className:"px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-sm text-gray-600",children:"默认场景"}):(0,d.jsx)(j.Input,{id:"siteName",placeholder:"请输入场景名称",value:af.siteName,onChange:a=>a0("siteName",a.target.value)})]}),(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)(k.Label,{htmlFor:"mockOpen",className:"text-sm font-medium",children:"开启Mock"}),(0,d.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,d.jsx)(l.Switch,{id:"mockOpen",checked:af.mockOpen,onCheckedChange:a=>a0("mockOpen",a)}),(0,d.jsx)("span",{className:"text-sm text-gray-600",children:af.mockOpen?"开启":"关闭"})]})]})]}),ab&&af.apiPath.trim()&&af.siteName.trim()&&a2(af.apiPath,af.method,af.siteName)&&(0,d.jsx)("div",{className:"mt-4 p-3 bg-red-50 border border-red-200 rounded-md",children:(0,d.jsx)("div",{className:"flex items-center",children:(0,d.jsxs)("span",{className:"text-red-600 text-sm",children:["⚠️ 接口 ",af.apiPath," [",af.method.toUpperCase(),'] 的场景 "',af.siteName,'" 已存在']})})}),ad&&ah&&af.siteName.trim()&&a5(ah.apiName,ah.method,af.siteName)&&(0,d.jsx)("div",{className:"mt-4 p-3 bg-red-50 border border-red-200 rounded-md",children:(0,d.jsx)("div",{className:"flex items-center",children:(0,d.jsxs)("span",{className:"text-red-600 text-sm",children:['⚠️ 场景 "',af.siteName,'" 已存在']})})})]}),(0,d.jsx)("div",{className:"flex-1 flex flex-col space-y-4 py-4",children:(0,d.jsxs)("div",{className:"flex-1 flex flex-col",children:[(0,d.jsx)(k.Label,{className:"text-sm font-medium mb-2",children:"文件内容"}),(0,d.jsxs)("div",{className:"flex-1 border rounded-md overflow-hidden relative",children:[V&&(0,d.jsx)("div",{className:"absolute inset-0 bg-gray-50 flex items-center justify-center z-10",children:(0,d.jsx)("p",{className:"text-gray-500",children:"编辑器加载中..."})}),(0,d.jsx)(o.default,{height:"100%",defaultLanguage:"javascript",value:N?.content||"",onChange:a=>{O(b=>b?{...b,content:a||""}:null)},onMount:async a=>{console.log("编辑器挂载,模式:",{isCreateMode:ab,isAddSceneMode:ad,createFormData:af}),Y(a),W(!1),setTimeout(()=>aD(a),500)},loading:(0,d.jsx)("div",{className:"flex items-center justify-center h-full",children:(0,d.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:!1}},ab?"create":ad?"addscene":"edit")]})]})}),(0,d.jsxs)(n.DialogFooter,{className:"flex justify-between flex-shrink-0 border-t pt-4",children:[(0,d.jsx)(g.Button,{variant:"secondary",onClick:aB,disabled:!X||V,children:"格式化代码"}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(g.Button,{variant:"outline",onClick:()=>{ab?(ac(!1),ag({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0})):ad?(ae(!1),ai(null),ag({apiPath:"",method:"GET",siteName:"默认场景",mockOpen:!0})):a_()},children:"取消"}),ab?(0,d.jsx)(g.Button,{onClick:a3,disabled:aj||!af.apiPath.trim()||!af.siteName.trim()||a2(af.apiPath,af.method,af.siteName),children:aj?"创建中...":"创建"}):ad?(0,d.jsx)(g.Button,{onClick:a6,disabled:aj||!af.siteName.trim()||!!ah&&a5(ah.apiName,ah.method,af.siteName),children:aj?"创建中...":"创建"}):(0,d.jsx)(g.Button,{onClick:a$,disabled:T,children:T?"保存中...":"保存"})]})]})]})}),(0,d.jsx)(n.Dialog,{open:av,onOpenChange:a=>{a||aQ()},children:(0,d.jsxs)(n.DialogContent,{className:"max-w-5xl h-[85vh] max-h-[85vh] flex flex-col p-0",children:[(0,d.jsxs)(n.DialogHeader,{className:"px-6 pt-6 pb-4",children:[(0,d.jsxs)(n.DialogTitle,{className:"flex items-center justify-between",children:[(0,d.jsxs)("span",{children:["进程日志 - ",c," - ",ax]}),(0,d.jsx)("span",{className:"flex items-center gap-2 text-sm font-normal",children:aL&&(0,d.jsxs)("span",{className:"flex items-center gap-1 text-green-600",children:[(0,d.jsx)("span",{className:"w-2 h-2 bg-green-500 rounded-full animate-pulse"}),"实时连接"]})})]}),(0,d.jsx)(n.DialogDescription,{children:"实时显示进程输出日志"})]}),(0,d.jsx)("div",{className:"flex-1 min-h-0 bg-gray-900 mx-6 rounded-md overflow-hidden",children:(0,d.jsx)(q.default,{logs:az})}),(0,d.jsxs)(n.DialogFooter,{className:"flex items-center justify-between px-6 pb-6 pt-4",children:[(0,d.jsxs)("div",{className:"text-sm text-gray-500",children:["共 ",az.length," 条日志"]}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(g.Button,{variant:"outline",onClick:()=>{ax&&(aO(),aN(ax))},disabled:!!aL,children:"重新连接"}),(0,d.jsx)(g.Button,{variant:"default",onClick:aQ,children:"关闭"})]})]})]})}),(0,d.jsx)(n.Dialog,{open:al.open,onOpenChange:a=>{a||am({open:!1,apiName:"",method:"",siteName:""})},children:(0,d.jsxs)(n.DialogContent,{className:"max-w-md",children:[(0,d.jsxs)(n.DialogHeader,{children:[(0,d.jsxs)(n.DialogTitle,{className:"flex items-center gap-2 text-red-600",children:[(0,d.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,d.jsx)("path",{d:"M3 6h18"}),(0,d.jsx)("path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"}),(0,d.jsx)("path",{d:"M8 6V4c0-1 1-2 2-2h4c0 1 1 2 2 2v2"})]}),"确认删除场景"]}),(0,d.jsxs)(n.DialogDescription,{children:["确定要删除场景 ",(0,d.jsxs)("span",{className:"font-medium text-gray-900",children:['"',al.siteName,'"']})," 吗?",(0,d.jsx)("br",{}),(0,d.jsx)("span",{className:"text-red-500 text-sm mt-2 block",children:"此操作不可撤销"})]})]}),(0,d.jsxs)(n.DialogFooter,{className:"flex gap-2 justify-end",children:[(0,d.jsx)(g.Button,{variant:"outline",onClick:()=>am({open:!1,apiName:"",method:"",siteName:""}),children:"取消"}),(0,d.jsx)(g.Button,{variant:"destructive",onClick:ba,children:"删除"})]})]})}),(0,d.jsx)(n.Dialog,{open:an.open,onOpenChange:a=>{a||ao({open:!1,apiName:"",apiPath:""})},children:(0,d.jsxs)(n.DialogContent,{className:"max-w-md",children:[(0,d.jsxs)(n.DialogHeader,{children:[(0,d.jsxs)(n.DialogTitle,{className:"flex items-center gap-2 text-red-600",children:[(0,d.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,d.jsx)("path",{d:"M3 6h18"}),(0,d.jsx)("path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"}),(0,d.jsx)("path",{d:"M8 6V4c0-1 1-2 2-2h4c0 1 1 2 2 2v2"})]}),"确认删除接口"]}),(0,d.jsxs)(n.DialogDescription,{children:["确定要删除整个接口 ",(0,d.jsxs)("span",{className:"font-medium text-gray-900",children:['"',an.apiPath,'"']})," 吗?",(0,d.jsx)("br",{}),(0,d.jsx)("span",{className:"text-red-500 text-sm mt-2 block font-medium",children:"⚠️ 这将删除该接口的所有场景和相关文件,此操作不可撤销"})]})]}),(0,d.jsxs)(n.DialogFooter,{className:"flex gap-2 justify-end",children:[(0,d.jsx)(g.Button,{variant:"outline",onClick:()=>ao({open:!1,apiName:"",apiPath:""}),children:"取消"}),(0,d.jsx)(g.Button,{variant:"destructive",onClick:bc,children:"删除整个接口"})]})]})}),ap.open&&(0,d.jsx)("div",{className:"fixed top-4 right-4 z-50 animate-in slide-in-from-top-2 duration-300",children:(0,d.jsxs)("div",{className:`flex items-center gap-3 px-4 py-3 rounded-lg shadow-lg border max-w-sm ${"success"===ap.type?"bg-green-50 border-green-200 text-green-800":"bg-red-50 border-red-200 text-red-800"}`,children:[(0,d.jsx)("div",{className:"flex-shrink-0",children:"success"===ap.type?(0,d.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"text-green-600",children:(0,d.jsx)("path",{d:"M20 6L9 17l-5-5"})}):(0,d.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"text-red-600",children:[(0,d.jsx)("circle",{cx:"12",cy:"12",r:"10"}),(0,d.jsx)("line",{x1:"15",y1:"9",x2:"9",y2:"15"}),(0,d.jsx)("line",{x1:"9",y1:"9",x2:"15",y2:"15"})]})}),(0,d.jsx)("p",{className:"text-sm font-medium",children:ap.message}),(0,d.jsx)("button",{onClick:()=>aq({open:!1,type:"success",message:""}),className:"flex-shrink-0 ml-auto",children:(0,d.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"opacity-60 hover:opacity-100",children:[(0,d.jsx)("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),(0,d.jsx)("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})})]})}function u(){return(0,d.jsx)(e.Suspense,{fallback:(0,d.jsx)("div",{className:"min-h-screen bg-gray-50 flex items-center justify-center",children:(0,d.jsxs)("div",{className:"text-center space-y-4",children:[(0,d.jsx)("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600 mx-auto"}),(0,d.jsx)("p",{className:"text-gray-600",children:"正在加载配置页面..."})]})}),children:(0,d.jsx)(t,{})})}}};
|
|
60
60
|
|
|
61
|
-
//# sourceMappingURL=
|
|
61
|
+
//# sourceMappingURL=_bb352729._.js.map
|