@jonathanleelx/meddle 0.5.0-beta.24 → 0.5.0-beta.25
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/README.md +1 -1
- package/bin/commands/route/add.js +98 -86
- package/bin/commands/route/delete.js +48 -25
- package/bin/commands/route/index.js +16 -2
- package/bin/commands/route/update.js +118 -87
- package/bin/index.js +3 -1
- package/bin/lib/route-write-args.js +150 -0
- package/dist/server/agent/tools.d.ts.map +1 -1
- package/dist/server/agent/tools.js +2 -1
- package/dist/server/agent/tools.js.map +1 -1
- package/package.json +1 -1
- package/web/dist/assets/{detail-panel-D56nCma2.js → detail-panel-CyOc7gn8.js} +1 -1
- package/web/dist/assets/{global-panel-shell-SKPshqTf.js → global-panel-shell-jXQTb9nw.js} +1 -1
- package/web/dist/assets/{health-panel-CvI-VsvG.js → health-panel-CSV7OqBv.js} +1 -1
- package/web/dist/assets/{index-Dcm171u1.js → index-CSXxaYkG.js} +2 -2
- package/web/dist/assets/{mobile-proxy-panel-cpkvsdBT.js → mobile-proxy-panel-a09S-R79.js} +1 -1
- package/web/dist/assets/{mock-config-CtZ866iI.js → mock-config-D_E5YOE_.js} +1 -1
- package/web/dist/assets/{mock-editor-panel-CweYBdeM.js → mock-editor-panel-t4TDXeaR.js} +1 -1
- package/web/dist/assets/{mocks-file-missing-note-C-QJ8Bpm.js → mocks-file-missing-note-Ddy1TdMX.js} +1 -1
- package/web/dist/assets/{monaco-editor-Cge8h-Ca.js → monaco-editor-GpPLOKA5.js} +1 -1
- package/web/dist/assets/{pane-bar-Dvi-MHuB.js → pane-bar-zJmE3xI5.js} +1 -1
- package/web/dist/assets/{pane-split-ChCHxR7K.js → pane-split-CJ1VXJDy.js} +1 -1
- package/web/dist/assets/{panel-heading-Crmy9fo0.js → panel-heading-DlFWoYAR.js} +1 -1
- package/web/dist/assets/{plugin-code-editor-VaL2lVyD.js → plugin-code-editor-CtaamKWJ.js} +1 -1
- package/web/dist/assets/{plugin-config-DSiOk77l.js → plugin-config-Dg_FCb-L.js} +2 -2
- package/web/dist/assets/{plugin-generator-iAksMY2Q.js → plugin-generator-CVREuZs7.js} +1 -1
- package/web/dist/assets/{plugin-test-dialog-Cx6ifDnm.js → plugin-test-dialog-B-iV8ocm.js} +1 -1
- package/web/dist/assets/{route-preview-T0s6si4V.js → route-preview-CLJeg_9v.js} +1 -1
- package/web/dist/assets/{rule-ai-assistant-panel-DzfobTWM.js → rule-ai-assistant-panel-BvTqm4zV.js} +1 -1
- package/web/dist/assets/{rule-config-ESpfkJg6.js → rule-config-DmNPaKxc.js} +1 -1
- package/web/dist/assets/{rule-overview-panel-BswSByar.js → rule-overview-panel-CB9b-b0t.js} +1 -1
- package/web/dist/assets/{settings-panel-Cj-1Z8Ow.js → settings-panel-DLdeJ8ox.js} +1 -1
- package/web/dist/index.html +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/global-panel-shell-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/global-panel-shell-jXQTb9nw.js","assets/button-BFNlGZ5p.js","assets/dist-CFZ4xMSF.js","assets/dist-DLQKRjuW.js","assets/es2015-DPJTBYa9.js","assets/dist-C-E2R2jk.js","assets/dist-CRmX_NvH.js","assets/circle-alert-zMagrFuI.js","assets/ai-config-store-C8D_PUGV.js","assets/rule-config-DmNPaKxc.js","assets/dist-BQN0rzUS.js","assets/dist-fzPL-8F9.js","assets/checkbox-CQyFsZzS.js","assets/check-BkfHQ6re.js","assets/plus-ixZQRprm.js","assets/table-2-DvGHhMm4.js","assets/toast-9yeTf7d9.js","assets/pane-bar-zJmE3xI5.js","assets/pane-split-CJ1VXJDy.js","assets/table-DaXD6jJv.js","assets/syntax-highlight-BFgN_C0Y.js","assets/rule-config-CHpVij2M.css","assets/mock-config-D_E5YOE_.js","assets/monaco-editor-GpPLOKA5.js","assets/code-DD-AYxxu.js","assets/editor-pane-actions-_ckwcCII.js","assets/mock-editor-panel-t4TDXeaR.js","assets/wand-sparkles-Bmt4dDOf.js","assets/use-mocks-file-status-BUIUJ4oQ.js","assets/mocks-file-missing-note-Ddy1TdMX.js","assets/plugin-config-Dg_FCb-L.js","assets/switch-94vgsMHm.js","assets/refresh-cw-BfLoHqg5.js","assets/zap-BuOtogAv.js","assets/detail-panel-CyOc7gn8.js","assets/body-diff-view-SfLCLzs9.js","assets/arrow-right-BNum_060.js","assets/chevron-down-DHwUtL4O.js","assets/circle-x-BEkinhez.js","assets/server-eYXq3PbE.js","assets/copy-BRnscYy1.js","assets/shield-check-hQXjdfZ7.js","assets/clipboard-Bt1qY01V.js","assets/settings-panel-DLdeJ8ox.js","assets/rotate-ccw-CRguJya4.js","assets/smartphone-D4Q7cQfm.js","assets/alert-B514Frte.js","assets/plugin-generator-CVREuZs7.js","assets/panel-heading-DlFWoYAR.js","assets/textarea-9wB8Hsz-.js","assets/plugin-code-editor-CtaamKWJ.js","assets/pencil-line-CEZ7D-de.js","assets/plugin-test-dialog-B-iV8ocm.js","assets/rule-ai-assistant-panel-BvTqm4zV.js","assets/route-preview-CLJeg_9v.js","assets/rule-overview-panel-CB9b-b0t.js","assets/mobile-proxy-panel-a09S-R79.js","assets/wifi-Cjj_Br1u.js","assets/health-panel-CSV7OqBv.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
import{a as e,c as t,d as n,f as r,i,l as a,n as o,o as s,p as c,r as l,s as u,t as d,u as f}from"./button-BFNlGZ5p.js";import{a as p,c as m,n as h,o as g,r as _,t as v}from"./dist-CFZ4xMSF.js";import{t as y}from"./check-BkfHQ6re.js";import{t as b}from"./chevron-down-DHwUtL4O.js";import{a as x,c as S,i as C,n as ee,o as te,r as ne,s as re,t as w}from"./dist-BQN0rzUS.js";import{a as ie,c as ae,i as oe,n as se,o as ce,r as le,s as T,t as E}from"./dist-DLQKRjuW.js";import{n as ue,t as de}from"./dist-LiAcI8CK.js";import{t as fe}from"./dist-CRmX_NvH.js";import{n as pe,t as D}from"./dist-C-E2R2jk.js";import{a as O,i as me,n as he,o as ge,r as _e,t as ve}from"./es2015-DPJTBYa9.js";import{n as ye}from"./dist-fzPL-8F9.js";import{n as be,r as xe,t as Se}from"./dist-wv9ebJK_.js";import{t as Ce}from"./dist-Bsv9ad5F.js";import{c as we,o as Te,r as Ee}from"./ai-config-store-C8D_PUGV.js";import{n as De,r as Oe,t as ke}from"./toast-9yeTf7d9.js";import{t as Ae}from"./use-mocks-file-status-BUIUJ4oQ.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var je=r((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0<n;){var r=n-1>>>1,a=e[r];if(0<i(a,t))e[r]=t,e[n]=a,n=r;else break a}}function n(e){return e.length===0?null:e[0]}function r(e){if(e.length===0)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;a:for(var r=0,a=e.length,o=a>>>1;r<o;){var s=2*(r+1)-1,c=e[s],l=s+1,u=e[l];if(0>i(c,n))l<a&&0>i(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(l<a&&0>i(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m)if(n(c)!==null)m=!0,S||(S=!0,w());else{var t=n(l);t!==null&&oe(x,t.startTime-e)}}var S=!1,C=-1,ee=5,te=-1;function ne(){return g?!0:!(e.unstable_now()-te<ee)}function re(){if(g=!1,S){var t=e.unstable_now();te=t;var i=!0;try{a:{m=!1,h&&(h=!1,v(C),C=-1),p=!0;var a=f;try{b:{for(b(t),d=n(c);d!==null&&!(d.expirationTime>t&&ne());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&oe(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?w():S=!1}}}var w;if(typeof y==`function`)w=function(){y(re)};else if(typeof MessageChannel<`u`){var ie=new MessageChannel,ae=ie.port2;ie.port1.onmessage=re,w=function(){ae.postMessage(null)}}else w=function(){_(re,0)};function oe(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125<e?console.error(`forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported`):ee=0<e?Math.floor(1e3/e):5},e.unstable_getCurrentPriorityLevel=function(){return f},e.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var n=f;f=t;try{return e()}finally{f=n}},e.unstable_requestPaint=function(){g=!0},e.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=f;f=e;try{return t()}finally{f=n}},e.unstable_scheduleCallback=function(r,i,a){var o=e.unstable_now();switch(typeof a==`object`&&a?(a=a.delay,a=typeof a==`number`&&0<a?o+a:o):a=o,r){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return s=a+s,r={id:u++,callback:i,priorityLevel:r,startTime:a,expirationTime:s,sortIndex:-1},a>o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,oe(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,w()))),r},e.unstable_shouldYield=ne,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),Me=r(((e,t)=>{t.exports=je()})),Ne=r((e=>{var t=Me(),r=n(),i=m();function a(e){var t=`https://react.dev/errors/`+e;if(1<arguments.length){t+=`?args[]=`+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+=`&args[]=`+encodeURIComponent(arguments[n])}return`Minified React error #`+e+`; visit `+t+` for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`}function o(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function s(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do t=e,t.flags&4098&&(n=t.return),e=t.return;while(e)}return t.tag===3?n:null}function c(e){if(e.tag===13){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function l(e){if(e.tag===31){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function u(e){if(s(e)!==e)throw Error(a(188))}function d(e){var t=e.alternate;if(!t){if(t=s(e),t===null)throw Error(a(188));return t===e?e:null}for(var n=e,r=t;;){var i=n.return;if(i===null)break;var o=i.alternate;if(o===null){if(r=i.return,r!==null){n=r;continue}break}if(i.child===o.child){for(o=i.child;o;){if(o===n)return u(i),e;if(o===r)return u(i),t;o=o.sibling}throw Error(a(188))}if(n.return!==r.return)n=i,r=o;else{for(var c=!1,l=i.child;l;){if(l===n){c=!0,n=i,r=o;break}if(l===r){c=!0,r=i,n=o;break}l=l.sibling}if(!c){for(l=o.child;l;){if(l===n){c=!0,n=o,r=i;break}if(l===r){c=!0,r=o,n=i;break}l=l.sibling}if(!c)throw Error(a(189))}}if(n.alternate!==r)throw Error(a(190))}if(n.tag!==3)throw Error(a(188));return n.stateNode.current===n?e:t}function f(e){var t=e.tag;if(t===5||t===26||t===27||t===6)return e;for(e=e.child;e!==null;){if(t=f(e),t!==null)return t;e=e.sibling}return null}var p=Object.assign,h=Symbol.for(`react.element`),g=Symbol.for(`react.transitional.element`),_=Symbol.for(`react.portal`),v=Symbol.for(`react.fragment`),y=Symbol.for(`react.strict_mode`),b=Symbol.for(`react.profiler`),x=Symbol.for(`react.consumer`),S=Symbol.for(`react.context`),C=Symbol.for(`react.forward_ref`),ee=Symbol.for(`react.suspense`),te=Symbol.for(`react.suspense_list`),ne=Symbol.for(`react.memo`),re=Symbol.for(`react.lazy`),w=Symbol.for(`react.activity`),ie=Symbol.for(`react.memo_cache_sentinel`),ae=Symbol.iterator;function oe(e){return typeof e!=`object`||!e?null:(e=ae&&e[ae]||e[`@@iterator`],typeof e==`function`?e:null)}var se=Symbol.for(`react.client.reference`);function ce(e){if(e==null)return null;if(typeof e==`function`)return e.$$typeof===se?null:e.displayName||e.name||null;if(typeof e==`string`)return e;switch(e){case v:return`Fragment`;case b:return`Profiler`;case y:return`StrictMode`;case ee:return`Suspense`;case te:return`SuspenseList`;case w:return`Activity`}if(typeof e==`object`)switch(e.$$typeof){case _:return`Portal`;case S:return e.displayName||`Context`;case x:return(e._context.displayName||`Context`)+`.Consumer`;case C:var t=e.render;return e=e.displayName,e||=(e=t.displayName||t.name||``,e===``?`ForwardRef`:`ForwardRef(`+e+`)`),e;case ne:return t=e.displayName||null,t===null?ce(e.type)||`Memo`:t;case re:t=e._payload,e=e._init;try{return ce(e(t))}catch{}}return null}var le=Array.isArray,T=r.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,E=i.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,ue={pending:!1,data:null,method:null,action:null},de=[],fe=-1;function pe(e){return{current:e}}function D(e){0>fe||(e.current=de[fe],de[fe]=null,fe--)}function O(e,t){fe++,de[fe]=e.current,e.current=t}var me=pe(null),he=pe(null),ge=pe(null),_e=pe(null);function ve(e,t){switch(O(ge,t),O(he,e),O(me,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Vd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Vd(t),e=Hd(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}D(me),O(me,e)}function ye(){D(me),D(he),D(ge)}function be(e){e.memoizedState!==null&&O(_e,e);var t=me.current,n=Hd(t,e.type);t!==n&&(O(he,e),O(me,n))}function xe(e){he.current===e&&(D(me),D(he)),_e.current===e&&(D(_e),Qf._currentValue=ue)}var Se,Ce;function we(e){if(Se===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);Se=t&&t[1]||``,Ce=-1<e.stack.indexOf(`
|
|
3
3
|
at`)?` (<anonymous>)`:-1<e.stack.indexOf(`@`)?`@unknown:0:0`:``}return`
|
|
4
4
|
`+Se+e+Ce}var Te=!1;function Ee(e,t){if(!e||Te)return``;Te=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var r={DetermineComponentFrameRoot:function(){try{if(t){var n=function(){throw Error()};if(Object.defineProperty(n.prototype,`props`,{set:function(){throw Error()}}),typeof Reflect==`object`&&Reflect.construct){try{Reflect.construct(n,[])}catch(e){var r=e}Reflect.construct(e,[],n)}else{try{n.call()}catch(e){r=e}e.call(n.prototype)}}else{try{throw Error()}catch(e){r=e}(n=e())&&typeof n.catch==`function`&&n.catch(function(){})}}catch(e){if(e&&r&&typeof e.stack==`string`)return[e.stack,r.stack]}return[null,null]}};r.DetermineComponentFrameRoot.displayName=`DetermineComponentFrameRoot`;var i=Object.getOwnPropertyDescriptor(r.DetermineComponentFrameRoot,`name`);i&&i.configurable&&Object.defineProperty(r.DetermineComponentFrameRoot,`name`,{value:`DetermineComponentFrameRoot`});var a=r.DetermineComponentFrameRoot(),o=a[0],s=a[1];if(o&&s){var c=o.split(`
|
|
@@ -18,4 +18,4 @@ Please change the parent <Route path="${e}"> to <Route path="${e===`/`?`*`:`${e}
|
|
|
18
18
|
`)}var $u=`该行剩余的 pattern 以 // 或 # 开头,拆开后会被当成注释,请用文本编辑器手动修改`,ed=class extends Error{code=`RULE_LINE_SPLIT_UNSAFE`;constructor(){super($u),this.name=`RuleLineSplitError`}},td=`规则不能以 // 或 # 开头,否则会被当成禁用行或注释。要写注释或禁用规则,请用文本编辑器。`,nd=class extends Error{code=`RULE_LINE_SPLIT_UNSAFE`;constructor(){super(td),this.name=`RuleNewRuleCommentError`}};function rd(e){return e.enabled&&(e.rule.startsWith(`//`)||e.rule.startsWith(`#`))}function id(e,t){if(rd(e))throw t.has(e.rule)?new ed:new nd;return Qu([e])}function ad(e,t){let n=e.exclusions||[],r=t.exclusions||[];return e.enabled===t.enabled&&e.rule===t.rule&&e.target===t.target&&n.length===r.length&&n.every((e,t)=>e===r[t])}function od(e,t){let n=e.length,r=t.length,i=Array(n).fill(-1),a=Array(r).fill(-1);if(n===0||r===0)return{matchA:i,matchB:a};if((n+1)*(r+1)>4e6){let o=0;for(let s=0;s<r&&o<n;s++)for(let r=o;r<n;r++)if(ad(e[r],t[s])){i[r]=s,a[s]=r,o=r+1;break}return{matchA:i,matchB:a}}let o=r+1,s=new Int32Array((n+1)*o);for(let i=n-1;i>=0;i--)for(let n=r-1;n>=0;n--)s[i*o+n]=ad(e[i],t[n])?s[(i+1)*o+n+1]+1:Math.max(s[(i+1)*o+n],s[i*o+n+1]);let c=0,l=0;for(;c<n&&l<r;)ad(e[c],t[l])?(i[c]=l,a[l]=c,c++,l++):s[(c+1)*o+l]>=s[c*o+l+1]?c++:l++;return{matchA:i,matchB:a}}function sd(e,t){if(t.startsWith(``))return``+sd(e,t.slice(1));if(!t){if(e.some(rd))throw new nd;return Qu(e)}let n=t.includes(`\r
|
|
19
19
|
`)?`\r
|
|
20
20
|
`:`
|
|
21
|
-
`,r=t.split(/\r?\n/).map(e=>{let t=Zu(e);return{raw:e,items:t.length>0?t:null}}),i=[],a=[];r.forEach((e,t)=>{e.items?.forEach((e,n)=>{i.push({entry:t,k:n}),a.push(e)})});let{matchA:o,matchB:s}=od(a,e),c=new Set(a.map(e=>e.rule)),l=Array(r.length).fill(-1);i.forEach((e,t)=>{l[e.entry]<0&&(l[e.entry]=t)});let u=r.map((e,t)=>{if(!e.items)return!1;let n=l[t],r=o[n];return r<0?!1:e.items.every((e,t)=>o[n+t]===r+t)}),d=r.map((e,t)=>e.items?e.items.filter((e,n)=>o[l[t]+n]<0).length:0),f=Array(e.length+1).fill(r.length);for(let t=e.length-1;t>=0;t--)f[t]=s[t]>=0?i[s[t]].entry:f[t+1];let p=r.length;for(;p>0&&!r[p-1].raw.trim();)p--;let m=[],h=0,g=e=>{for(;h<e;h++)r[h].items||m.push(r[h].raw)},_=0;for(;_<e.length;){let t=s[_];if(t>=0){let{entry:n,k:a}=i[t];g(n);let o=r[n].items;if(u[n]&&a===0){m.push(r[n].raw),_+=o.length,h=n+1;continue}m.push(id(e[_],c)),_++;continue}let n=f[_+1],a=!1;for(let e=h;e<n;e++)if(r[e].items&&d[e]>0){g(e),d[e]--,a=!0;break}!a&&n===r.length&&g(p),m.push(id(e[_],c)),_++}return g(r.length),m.join(n)}var cd=`X-Meddle-UI-Token`,ld=`meddle-ui-token`,ud=null;function dd(){if(typeof document>`u`)return null;let e=document.querySelector(`meta[name="${ld}"]`)?.getAttribute(`content`);return e&&e.trim()?e.trim():null}async function fd(){try{let e=await fetch(`/api/ui-token`,{cache:`no-store`,credentials:`same-origin`});if(!e.ok)return null;let t=await e.json();return typeof t.token==`string`&&t.token?t.token:null}catch{return null}}async function pd(e=!1){return!e&&(ud||=dd(),ud)||(ud=await fd()),ud}async function md(e,t){for(let n=0;n<2;n+=1){let r=await pd(n>0);try{let i=await fetch(`/api/rule-files/${encodeURIComponent(e)}/readonly`,{method:`PUT`,credentials:`same-origin`,headers:{"Content-Type":`application/json`,...r?{[cd]:r}:{}},body:JSON.stringify({readonly:t})}),a=await i.json().catch(()=>null);if(i.ok&&a?.status===`success`)return{success:!0};if(i.status===403&&a?.code===`UI_TOKEN_INVALID`&&n===0)continue;return{success:!1,error:a?.error||`保存失败(${i.status})`}}catch(e){return{success:!1,error:e instanceof Error?e.message:`保存失败`}}}return{success:!1,error:`保存失败`}}function hd(){let[e,t]=(0,k.useState)([]),[n,r]=(0,k.useState)([]),[i,a]=(0,k.useState)(null),o=(0,k.useRef)(new Map),s=(0,k.useCallback)(async()=>{try{let e=await(await fetch(`/api/rule-files`)).json(),t=Array.isArray(e)?e:[];return r(t),t}catch(e){return console.error(`Failed to fetch rule files:`,e),[]}},[]),c=(0,k.useCallback)(async e=>{let t=await fetch(`/api/rule-files/${encodeURIComponent(e)}/content`);return new TextDecoder(`utf-8`,{ignoreBOM:!0}).decode(await t.arrayBuffer())},[]),l=(0,k.useCallback)(async e=>{try{let n=await c(e);o.current.set(e,n),t(Zu(n)),a(e)}catch(e){console.error(`Failed to fetch file content:`,e)}},[c]),u=(0,k.useCallback)(async(e,t)=>{try{let n=await(await fetch(`/api/rule-files/${encodeURIComponent(e)}/content`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({content:t})})).json();return n.status===`success`&&o.current.set(e,t),n.status===`success`}catch(e){return console.error(`Failed to save file content:`,e),!1}},[]);return{rules:e,setRules:t,ruleFiles:n,activeFileName:i,fetchRuleFiles:s,fetchFileContent:l,fetchRuleFileRawContent:c,saveRuleFileRawContent:u,saveFileContent:(0,k.useCallback)(async(e,t)=>u(e,sd(t,o.current.get(e)??``)),[u]),createRuleFile:(0,k.useCallback)(async(e,t=``)=>{let n=e.trim();try{let e=await(await fetch(`/api/rule-files`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:n,content:t,enabled:!0})})).json();return e.status===`success`?(await s(),{success:!0}):{success:!1,error:e.error}}catch(e){return(await s()).some(e=>e.name===n)?{success:!0}:{success:!1,error:e instanceof Error?e.message:`创建规则文件失败`}}},[s]),toggleRuleFile:(0,k.useCallback)(async(e,t)=>{try{return(await(await fetch(`/api/rule-files/${encodeURIComponent(e)}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({enabled:t})})).json()).status===`success`?(await s(),!0):!1}catch(e){return console.error(`Failed to toggle rule file:`,e),!1}},[s]),renameRuleFile:(0,k.useCallback)(async(e,t)=>{let n=t.trim();if(!n)return{success:!1,error:`规则文件名称不能为空`};try{let t=await(await fetch(`/api/rule-files/${encodeURIComponent(e)}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({newName:n})})).json();if(t.status!==`success`)return{success:!1,error:t.error||`重命名失败`};let r=typeof t.name==`string`?t.name:n;return i===e&&a(r),await s(),{success:!0,name:r}}catch(e){return{success:!1,error:e instanceof Error?e.message:`重命名失败`}}},[i,s]),deleteRuleFile:(0,k.useCallback)(async e=>{try{return(await(await fetch(`/api/rule-files/${encodeURIComponent(e)}`,{method:`DELETE`})).json()).status===`success`?(i===e&&(a(null),t([])),await s(),!0):!1}catch(e){return console.error(`Failed to delete rule file:`,e),!1}},[s,i]),reorderRuleFiles:(0,k.useCallback)(async e=>{let t=n,i=new Map(t.map(e=>[e.name,e])),a=e.map(e=>i.get(e)).filter(e=>!!e);a.length===e.length&&r(a);try{return(await(await fetch(`/api/rule-files/order`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({order:e})})).json()).status===`success`?(await s(),!0):(r(t),await s(),!1)}catch(e){return console.error(`Failed to reorder rule files:`,e),r(t),await s(),!1}},[s,n]),setRuleFileReadonly:(0,k.useCallback)(async(e,t)=>{let n=await md(e,t);return n.success&&(r(n=>n.map(n=>n.name===e?{...n,readonly:t}:n)),s()),n},[s])}}var gd=`mocksUpdated`,_d=!1;function vd(){let e=_d;return _d=!1,e}function yd(e,t={}){let n=e;n?.code===`MOCKS_FILE_INVALID`&&(_d=!0,t.silent||De.error(n.error||`Mock 文件格式错误`),window.dispatchEvent(new CustomEvent(Ae)))}function Q(e,t){return e.some(e=>e.id===t.id)?xd(e,t):e}function bd(e){let t=new Map;for(let n of e)t.set(n.id,n);return Array.from(t.values()).sort((e,t)=>e.id-t.id)}function xd(e,t){return bd([...e.filter(e=>e.id!==t.id),t])}function Sd(){let[e,t]=(0,k.useState)([]),n=(0,k.useCallback)(async()=>{try{let e=await(await fetch(`/api/mocks`,{cache:`no-store`})).json();t(bd(Array.isArray(e)?e:[]))}catch(e){console.error(`Failed to fetch mocks:`,e)}},[]);return(0,k.useEffect)(()=>{n()},[n]),(0,k.useEffect)(()=>{let e=e=>{let n=e;t(bd(Array.isArray(n.detail)?n.detail:[]))};return window.addEventListener(gd,e),()=>window.removeEventListener(gd,e)},[]),{mockRules:e,fetchMocks:n,createMock:(0,k.useCallback)(async(e,n)=>{try{let r=await(await fetch(`/api/mocks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)})).json();return r.status===`success`?(t(e=>xd(e,r.rule)),r.rule):(yd(r,{silent:n?.silentInvalid}),null)}catch(e){return console.error(`Failed to create mock:`,e),null}},[]),updateMock:(0,k.useCallback)(async(e,n,r)=>{let i;t(t=>(i=t.find(t=>t.id===e),i?xd(t,{...i,...n}):t));try{let a=await(await fetch(`/api/mocks/${e}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)})).json();if(a.status===`success`)return t(e=>xd(e,a.rule)),!0;if(yd(a,{silent:r?.silentInvalid}),i){let e=i;t(t=>Q(t,e))}return!1}catch(e){if(console.error(`Failed to update mock:`,e),i){let e=i;t(t=>Q(t,e))}return!1}},[]),deleteMock:(0,k.useCallback)(async e=>{try{let n=await(await fetch(`/api/mocks/${e}`,{method:`DELETE`})).json();return n.status===`success`?(t(t=>t.filter(t=>t.id!==e)),!0):(yd(n),!1)}catch(e){return console.error(`Failed to delete mock:`,e),!1}},[])}}function Cd(){let[e,t]=(0,k.useState)([]),[n,r]=(0,k.useState)(`off`),[i,a]=(0,k.useState)([]),[o,s]=(0,k.useState)({allowAll:!1,trusted:[]}),c=(0,k.useCallback)(async()=>{try{let e=await(await fetch(`/api/plugins`)).json();r(e.mode||`off`),t(e.plugins||[])}catch(e){console.error(`Failed to fetch plugins:`,e)}},[]);return{plugins:e,pluginMode:n,switchPluginMode:(0,k.useCallback)(async e=>{try{(await fetch(`/api/pipeline/mode`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({mode:e})})).ok&&r(e)}catch(e){console.error(`Failed to switch plugin mode:`,e)}},[]),thirdPartyPlugins:i,thirdPartySecurity:o,fetchPlugins:c,startPlugin:(0,k.useCallback)(async e=>{try{await fetch(`/api/plugins/${e}/start`,{method:`POST`})}catch(e){console.error(`Failed to start plugin:`,e)}},[]),stopPlugin:(0,k.useCallback)(async e=>{try{await fetch(`/api/plugins/${e}/stop`,{method:`POST`})}catch(e){console.error(`Failed to stop plugin:`,e)}},[]),togglePlugin:(0,k.useCallback)(async(e,n)=>{try{(await fetch(`/api/plugins/${encodeURIComponent(e)}/toggle`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({enabled:n})})).ok&&t(t=>t.map(t=>t.id===e?{...t,state:n?`running`:`disabled`}:t))}catch(e){console.error(`Failed to toggle plugin:`,e)}},[]),fetchThirdPartyPlugins:(0,k.useCallback)(async()=>{try{let e=await fetch(`/api/plugins/third-party`),t=e.headers.get(`content-type`)||``;if(!e.ok||!t.includes(`application/json`)){a([]),s({allowAll:!1,trusted:[]});return}let n=await e.json();a(n.plugins||[]),s(n.security||{allowAll:!1,trusted:[]})}catch(e){console.error(`Failed to fetch third-party plugins:`,e)}},[]),loadThirdPartyPlugin:(0,k.useCallback)(async e=>{try{await fetch(`/api/plugins/third-party/load`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})})}catch(e){console.error(`Failed to load third-party plugin:`,e)}},[]),unloadThirdPartyPlugin:(0,k.useCallback)(async e=>{try{await fetch(`/api/plugins/third-party/${e}/unload`,{method:`POST`})}catch(e){console.error(`Failed to unload third-party plugin:`,e)}},[])}}function wd(){let[e,t]=(0,k.useState)(Ru),n=Hu(e),r=hd(),i=Sd(),a=Cd();return{records:n.records,selectedRecordId:n.selectedRecordId,recordDetail:n.recordDetail,detailLoading:n.detailLoading,detailError:n.detailError,fetchDetail:n.fetchDetail,closeDetail:n.closeDetail,clearRecords:n.clearRecords,replayRequest:n.replayRequest,maxRecords:e,setMaxRecords:t,rules:r.rules,setRules:r.setRules,ruleFiles:r.ruleFiles,activeFileName:r.activeFileName,fetchRuleFiles:r.fetchRuleFiles,fetchFileContent:r.fetchFileContent,fetchRuleFileRawContent:r.fetchRuleFileRawContent,saveRuleFileRawContent:r.saveRuleFileRawContent,saveFileContent:r.saveFileContent,createRuleFile:r.createRuleFile,toggleRuleFile:r.toggleRuleFile,renameRuleFile:r.renameRuleFile,deleteRuleFile:r.deleteRuleFile,reorderRuleFiles:r.reorderRuleFiles,setRuleFileReadonly:r.setRuleFileReadonly,mockRules:i.mockRules,fetchMocks:i.fetchMocks,createMock:i.createMock,updateMock:i.updateMock,deleteMock:i.deleteMock,plugins:a.plugins,pluginMode:a.pluginMode,switchPluginMode:a.switchPluginMode,thirdPartyPlugins:a.thirdPartyPlugins,thirdPartySecurity:a.thirdPartySecurity,fetchPlugins:a.fetchPlugins,startPlugin:a.startPlugin,stopPlugin:a.stopPlugin,togglePlugin:a.togglePlugin,fetchThirdPartyPlugins:a.fetchThirdPartyPlugins,loadThirdPartyPlugin:a.loadThirdPartyPlugin,unloadThirdPartyPlugin:a.unloadThirdPartyPlugin}}function Td(e){let t=typeof e.source==`string`?e.source:``,n=typeof e.method==`string`?e.method:``,r=t.toLowerCase(),i=n.toUpperCase();if(!r)return`other`;if(r.startsWith(`ws://`)||r.startsWith(`wss://`))return`websocket`;if(i!==`GET`||r.includes(`/api/`)||r.includes(`.json`))return`fetch`;let a=r.split(`?`)[0].split(`#`)[0].split(`/`),o=a[a.length-1]||``,s=o.includes(`.`)&&o.split(`.`).pop()||``;return[`html`,`htm`,`php`,`asp`,`aspx`,`jsp`].includes(s)||!s&&i===`GET`?`doc`:s===`css`?`css`:[`js`,`mjs`,`jsx`,`ts`,`tsx`].includes(s)?`js`:[`woff`,`woff2`,`ttf`,`otf`,`eot`].includes(s)?`font`:[`png`,`jpg`,`jpeg`,`gif`,`svg`,`webp`,`ico`,`bmp`].includes(s)?`img`:[`mp4`,`webm`,`ogg`,`mp3`,`wav`,`flac`,`aac`,`m4a`].includes(s)?`media`:[`manifest`,`webmanifest`].includes(s)?`manifest`:s===`wasm`?`wasm`:`other`}var Ed=new WeakMap;function Dd(e){let t=Ed.get(e);if(t)return t;let n=typeof e.method==`string`?e.method:``,r=typeof e.source==`string`?e.source:``,i=typeof e.target==`string`?e.target:``,a=typeof e.time==`string`?e.time:``,o=e.clientType||``,s=e.clientIp||``,c=e.clientName||``,l=e.applicationName||``,u=e.applicationProcess||``,d=e.applicationBundleId||``,f=e.applicationPid?.toString()||``,p=e.applicationIdentitySource||``,m=e.applicationIdentityConfidence||``,h=r;try{h=new URL(r).hostname}catch{}let g={methodUpper:n.toUpperCase(),statusCode:e.statusCode,statusText:e.statusCode?.toString()||``,sourceLower:r.toLowerCase(),domainLower:h.toLowerCase(),clientLower:`${o} ${c} ${s}`.toLowerCase(),clientIpLower:s.toLowerCase(),applicationLower:`${l} ${u} ${d} ${f} ${p} ${m}`.toLowerCase(),haystack:`${n} ${r} ${i} ${a} ${o} ${s} ${c} ${l} ${u} ${d} ${f} ${p} ${m}`.toLowerCase(),resourceType:Td(e)};return Ed.set(e,g),g}function Od(e){let[t,n]=(0,k.useState)(``),[r,i]=(0,k.useState)(`all`),[a,o]=(0,k.useState)(`all`),s=(0,k.useDeferredValue)(t);return{filterText:t,setFilterText:n,resourceTypeFilter:r,setResourceTypeFilter:i,clientSourceFilter:a,setClientSourceFilter:o,filteredRecords:(0,k.useMemo)(()=>{let t=s.trim();if(!t&&r===`all`&&a===`all`)return e;let n=t.split(/\s+/).filter(Boolean),i=[];for(let t of e){if(a!==`all`&&t.clientType!==a)continue;let e=Dd(t);r!==`all`&&e.resourceType!==r||n.every(t=>{let n=t.startsWith(`-`)&&t.length>1,r=n?t.slice(1):t,i=r.toLowerCase(),a=!1;if(i.startsWith(`method:`))a=e.methodUpper===r.slice(7).toUpperCase();else if(i.startsWith(`status:`)){let t=i.slice(7);if(!e.statusCode)a=!1;else if(t.includes(`x`)){let n=t.replace(/x/gi,``);a=e.statusText.startsWith(n)}else a=e.statusText===t}else a=i.startsWith(`domain:`)?e.domainLower.includes(i.slice(7))||e.sourceLower.includes(i.slice(7)):i.startsWith(`client:`)?e.clientLower.includes(i.slice(7)):i.startsWith(`ip:`)?e.clientIpLower.includes(i.slice(3)):i.startsWith(`app:`)?e.applicationLower.includes(i.slice(4)):kd(i,e.haystack);return n?!a:a})&&i.push(t)}return i},[e,s,r,a])}}function kd(e,t){if(t.includes(e))return!0;let n=0;for(let r=0;r<t.length&&n<e.length;r++)e[n]===t[r]&&n++;return n===e.length}var Ad=[`content-length`,`content-encoding`,`connection`,`date`,`etag`,`last-modified`,`server`];function jd(e){if(!e)return{};let t={};return Object.entries(e).forEach(([e,n])=>{Ad.includes(e.toLowerCase())||(t[e]=n)}),t}function Md(e){let t=e.match(/^\(truncated, \d+ bytes\)\n/);return t?e.substring(t[0].length):e}function $(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function Nd(e){let t=jd(e.responseHeaders),n=Md(e.responseBody);return{urlPattern:$(e.source),body:n,statusCode:e.statusCode,headers:t,name:`从日志创建`,method:`*`,enabled:!0}}var Pd=`mock-config:open-create`,Fd=(0,k.createContext)(null);function Id(e){(0,k.useEffect)(()=>{let t=t=>{t.isComposing||t.key.toLowerCase()===`k`&&(t.metaKey||t.ctrlKey)&&(t.preventDefault(),e())};return window.addEventListener(`keydown`,t,{capture:!0}),()=>window.removeEventListener(`keydown`,t,{capture:!0})},[e])}var Ld=(0,k.lazy)(()=>ze(()=>import(`./global-panel-shell-SKPshqTf.js`).then(e=>({default:e.GlobalPanelShell})),__vite__mapDeps([0,1,2,3,4,5,6,7,8]))),Rd=class extends k.Component{state={error:null};static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,t){console.error(`Global panel failed to render`,e,t)}render(){return this.state.error?(0,N.jsx)(`div`,{className:`fixed inset-0 z-[82] flex items-center justify-center bg-background/80 p-6 backdrop-blur-sm`,children:(0,N.jsxs)(`div`,{className:`w-full max-w-lg rounded-lg border bg-card p-5 shadow-xl`,children:[(0,N.jsx)(`h2`,{className:`font-semibold`,children:`面板加载失败`}),(0,N.jsx)(`p`,{className:`mt-2 break-words text-sm text-destructive`,children:this.state.error.message}),(0,N.jsx)(`button`,{type:`button`,className:`mt-4 rounded-md border px-3 py-1.5 text-sm`,onClick:this.props.onClose,children:`关闭面板`})]})}):this.props.children}};function zd({children:e,commands:t,renderPanel:n}){let[r,i]=(0,k.useState)(!1),[a,o]=(0,k.useState)([]),s=(0,k.useCallback)(()=>{o([]),i(!0)},[]),c=(0,k.useCallback)(e=>{o([e]),i(!0)},[]),l=(0,k.useCallback)(e=>{o(t=>[...t,e]),i(!0)},[]),u=(0,k.useCallback)(()=>{o(e=>e.slice(0,-1))},[]),d=(0,k.useCallback)(()=>{i(!1),o([])},[]);Id(s),(0,k.useEffect)(()=>{let e=()=>s(),t=e=>{let t=e.detail;t?.id&&c(t)};return window.addEventListener(`global-panel:open-command`,e),window.addEventListener(`global-panel:open-panel`,t),()=>{window.removeEventListener(`global-panel:open-command`,e),window.removeEventListener(`global-panel:open-panel`,t)}},[s,c]);let f=a.length>0?a[a.length-1]:null,p=(0,k.useMemo)(()=>({open:r,stack:a,currentRoute:f,openCommand:s,openPanel:c,pushPanel:l,back:u,close:d}),[u,d,f,r,s,c,l,a]),m=typeof t==`function`?t(p):t;return(0,N.jsxs)(Fd.Provider,{value:p,children:[e,r&&(0,N.jsx)(Rd,{onClose:d,children:(0,N.jsx)(k.Suspense,{fallback:null,children:(0,N.jsx)(Ld,{commands:m,renderPanel:e=>n(e,p)})})},f?.id||`command`)]})}function Bd(e){return`local.${e.replace(/\.js$/,``)}`}function Vd(e,t,n=new Set){let r=new Set,i=t.map(t=>{let n=e.find(e=>e.filename===t.filename)??(t.pluginId?e.find(e=>e.id===t.pluginId):void 0)??e.find(e=>e.id===Bd(t.filename)&&e.source!==`builtin`&&(!e.filename||e.filename===t.filename));return n&&r.add(n.id),{filename:t.filename,file:t,pluginId:n?.id??t.pluginId??Bd(t.filename),loadedPlugin:n,fileDeleted:!1}});for(let t of e)r.has(t.id)||n.has(t.id)||!Hd(t)||(r.add(t.id),i.push({filename:Ud(t)||t.id,pluginId:t.id,loadedPlugin:t,fileDeleted:!0}));return{builtinPlugins:e.filter(e=>r.has(e.id)||n.has(e.id)?!1:e.source?e.source===`builtin`:!e.id.startsWith(`local.`)),customRows:i}}function Hd(e){return e.source?e.source===`custom`:e.id.startsWith(`local.`)}function Ud(e){return e.filename?e.filename:e.id.startsWith(`local.`)?`${e.id.slice(6)}.js`:``}var Wd=(0,k.lazy)(()=>ze(()=>import(`./rule-config-ESpfkJg6.js`).then(e=>({default:e.RuleConfig})),__vite__mapDeps([9,1,10,2,5,11,12,6,13,3,4,14,15,16,17,18,19,20,21]))),Gd=(0,k.lazy)(()=>ze(()=>import(`./mock-config-CtZ866iI.js`).then(e=>({default:e.MockConfig})),__vite__mapDeps([22,1,10,2,5,11,23,12,6,13,4,24,14,16,25,26,27,17,28,8,20,29,18,19]))),Kd=(0,k.lazy)(()=>ze(()=>import(`./plugin-config-DSiOk77l.js`).then(e=>({default:e.PluginConfig})),__vite__mapDeps([30,1,10,2,5,11,4,31,32,33,25,17,18]))),qd=(0,k.lazy)(()=>ze(()=>import(`./detail-panel-D56nCma2.js`).then(e=>({default:e.DetailPanel})),__vite__mapDeps([34,1,2,4,5,35,36,13,37,38,39,40,41,27,16,20,42]))),Jd=(0,k.lazy)(()=>ze(()=>import(`./settings-panel-Cj-1Z8Ow.js`).then(e=>({default:e.SettingsPanel})),__vite__mapDeps([43,1,10,2,5,11,4,31,13,7,38,14,32,44,45,16,29,17,46,28,8]))),Yd=(0,k.lazy)(()=>ze(()=>import(`./plugin-generator-iAksMY2Q.js`).then(e=>({default:e.PluginGenerator})),__vite__mapDeps([47,1,2,4,5,13,38,24,40,27,16,25,17,48,49,8]))),Xd=(0,k.lazy)(()=>ze(()=>import(`./plugin-code-editor-VaL2lVyD.js`).then(e=>({default:e.PluginCodeEditor})),__vite__mapDeps([50,1,23,2,4,5,51,44,33,16,25,17,48,49,8]))),Zd=(0,k.lazy)(()=>ze(()=>import(`./plugin-test-dialog-Cx6ifDnm.js`).then(e=>({default:e.PluginTestDialog})),__vite__mapDeps([52,1,23,2,4,5,35,36,7,38,51,32,27,25,48,49,8]))),Qd=(0,k.lazy)(()=>ze(()=>import(`./rule-ai-assistant-panel-DzfobTWM.js`).then(e=>({default:e.RuleAiAssistantPanel})),__vite__mapDeps([53,1,27,46,49,8]))),$d=(0,k.lazy)(()=>ze(()=>import(`./mock-editor-panel-CweYBdeM.js`).then(e=>({default:e.MockEditorPanel})),__vite__mapDeps([26,1,10,2,5,11,23,12,6,13,4,24,14,27,16,25,17,28,8,20]))),ef=(0,k.lazy)(()=>ze(()=>import(`./route-preview-T0s6si4V.js`).then(e=>({default:e.RoutePreview})),__vite__mapDeps([54,1,36]))),tf=(0,k.lazy)(()=>ze(()=>import(`./rule-overview-panel-BswSByar.js`).then(e=>({default:e.RuleOverviewPanel})),__vite__mapDeps([55,1,2,32,15,19]))),nf=(0,k.lazy)(()=>ze(()=>import(`./mobile-proxy-panel-cpkvsdBT.js`).then(e=>({default:e.MobileProxyPanel})),__vite__mapDeps([56,1,2,13,40,32,41,45,57,16,46,42]))),rf=(0,k.lazy)(()=>ze(()=>import(`./health-panel-CvI-VsvG.js`).then(e=>({default:e.HealthPanel})),__vite__mapDeps([58,1,2,31,11,38,39,32,41,57,46,19])));function af(){return(0,N.jsxs)(`div`,{className:`flex flex-col gap-3 p-6`,"aria-label":`加载中`,children:[(0,N.jsx)(Ai,{className:`h-5 w-32`}),(0,N.jsx)(Ai,{className:`h-9 w-full`}),(0,N.jsx)(Ai,{className:`h-64 w-full`})]})}function of(){let e=wd(),t=e.fetchPlugins,n=Zt(),r=Jt(),{filterText:i,setFilterText:a,resourceTypeFilter:o,setResourceTypeFilter:s,clientSourceFilter:c,setClientSourceFilter:l,filteredRecords:u}=Od(e.records),[d,f]=(0,k.useState)(!0),[p,m]=(0,k.useState)(!0),h=yu(r.pathname),g=xu(h),_=bl(`(max-width: 900px)`),v=e=>{n(bu(e))},y=(0,k.useCallback)(t=>{e.closeDetail(),n(`/config`),window.setTimeout(()=>{window.dispatchEvent(new CustomEvent(`route-rule:highlight`,{detail:{pattern:t.source,target:t.target}}))},120)},[n,e]),b=(0,k.useCallback)(t=>{let r=Nd(t);e.closeDetail(),n(`/mock`),window.setTimeout(()=>{window.dispatchEvent(new CustomEvent(Pd,{detail:{initialData:r}}))},120)},[n,e]),x=(0,k.useCallback)(async t=>{let n=await e.replayRequest(t);return e.fetchDetail(n.recordId),n},[e]),C=(0,k.useCallback)(()=>{window.dispatchEvent(new CustomEvent(`global-panel:open-command`))},[]),ee=(0,k.useCallback)(e=>{window.dispatchEvent(new CustomEvent(`global-panel:open-panel`,{detail:e}))},[]),te=(0,k.useCallback)(t=>{if(e.selectedRecordId===t){e.closeDetail();return}e.fetchDetail(t),_&&ee({id:`request.detail`,title:`请求详情`,size:`lg`})},[_,ee,e]),ne=(0,k.useCallback)(t=>[{id:`nav.logs`,title:`打开日志`,section:`导航`,icon:qr,keywords:[`logs`,`请求`],run:()=>n(`/logs`)},{id:`nav.rules`,title:`打开路由规则`,section:`导航`,icon:Wr,keywords:[`rules`,`config`],run:()=>n(`/config`)},{id:`nav.mock`,title:`打开 Mock`,section:`导航`,icon:Rr,keywords:[`mock`],run:()=>n(`/mock`)},{id:`nav.plugins`,title:`打开扩展插件`,section:`导航`,icon:ui,keywords:[`plugin`,`plugins`],run:()=>n(`/plugins`)},{id:`nav.health`,title:`打开运行健康`,section:`导航`,icon:Or,keywords:[`health`,`健康`,`watchdog`,`运行状态`],run:()=>n(`/health`)},{id:`panel.settings`,title:`打开系统设置`,description:`偏好、配置文件、AI 配置`,section:`全局`,icon:gi,keywords:[`settings`,`配置`,`AI`],closeOnRun:!1,run:()=>t.openPanel({id:`settings`,title:`系统设置`,description:`管理系统偏好、配置和 AI 功能`,size:`lg`})},{id:`panel.mobile-proxy`,title:`打开手机代理二维码`,description:`扫码配置手机代理并安装 HTTPS 根证书`,section:`全局`,icon:fi,keywords:[`手机`,`二维码`,`QR`,`remote`,`proxy`],closeOnRun:!1,run:()=>t.openPanel({id:`mobile-proxy`,title:`手机代理`,description:`扫描二维码,在手机上配置代理与 HTTPS 证书`,size:`md`})},{id:`logs.focus-filter`,title:`聚焦日志过滤器`,description:`输入 method:GET、domain:example.com 或关键词筛选请求`,section:`日志`,icon:hi,run:()=>{n(`/logs`),window.setTimeout(()=>document.getElementById(`proxy-log-filter`)?.focus(),50)}},{id:`logs.toggle-recording`,title:d?`暂停记录日志`:`恢复记录日志`,section:`日志`,icon:d?si:li,run:()=>f(e=>!e)},{id:`logs.clear`,title:`清空日志`,section:`日志`,icon:S,danger:!0,confirm:`确定要清空当前日志列表吗?`,run:e.clearRecords},{id:`logs.toggle-auto-scroll`,title:p?`关闭自动滚动`:`开启自动滚动`,section:`日志`,icon:Qr,run:()=>m(e=>!e)},...[{value:`all`,label:`全部资源`},{value:`fetch`,label:`Fetch/XHR`},{value:`doc`,label:`Doc`},{value:`css`,label:`CSS`},{value:`js`,label:`JS`},{value:`font`,label:`Font`},{value:`img`,label:`图片`},{value:`media`,label:`媒体`},{value:`manifest`,label:`Manifest`},{value:`websocket`,label:`WebSocket`},{value:`wasm`,label:`Wasm`},{value:`other`,label:`其他资源`}].map(e=>({id:`logs.resource.${e.value}`,title:`日志只看:${e.label}`,section:`日志`,icon:Kr,keywords:[`资源类型`,e.value],run:()=>{n(`/logs`),s(e.value)}})),{id:`request.detail`,title:`打开当前请求详情`,section:`日志`,icon:Wr,disabled:e.selectedRecordId==null,disabledReason:`请先在日志表里选择一条请求`,closeOnRun:!1,run:()=>t.openPanel({id:`request.detail`,title:`请求详情`,size:`lg`})},{id:`request.replay`,title:`重放当前请求`,section:`日志`,icon:pi,disabled:e.selectedRecordId==null,disabledReason:`请先在日志表里选择一条请求`,run:async()=>{e.selectedRecordId!=null&&await x(e.selectedRecordId)}},{id:`rules.ai`,title:`打开 AI 规则助手`,section:`路由规则`,icon:_i,keywords:[`AI`,`生成规则`,`合并规则`],closeOnRun:!1,run:()=>t.openPanel({id:`rules.ai`,title:`AI 规则助手`,description:`用自然语言生成规则,或安全合并当前配置`,size:`md`})},{id:`rules.preview`,title:`预览 URL 转发结果`,description:`输入 URL,使用当前规则计算真实转发地址`,section:`路由规则`,icon:hi,keywords:[`URL`,`preview`,`route`,`转发`,`预览`],closeOnRun:!1,run:()=>{t.openPanel({id:`rules.preview`,title:`URL 预览`,description:`使用当前编辑中的规则计算真实转发地址`,size:`md`})}},{id:`rules.overview`,title:`查看所有规则`,description:`总览全部规则文件与代理实际生效的路由规则`,section:`路由规则`,icon:Zr,keywords:[`全部`,`总览`,`overview`,`rules`,`生效`,`冲突`,`覆盖`],closeOnRun:!1,run:()=>{t.openPanel({id:`rules.overview`,title:`全局规则总览`,description:`总览全部规则文件与代理实际生效的路由规则`,size:`lg`})}},{id:`rules.add`,title:`添加路由规则`,section:`路由规则`,icon:Ur,disabled:!e.activeFileName,disabledReason:`请先选择或创建一个规则文件`,run:()=>{n(`/config`),e.setRules(e=>[{enabled:!0,rule:``,target:``,exclusions:[]},...e])}},{id:`rules.save`,title:`保存当前规则文件`,description:e.activeFileName?`保存 ${e.activeFileName}`:void 0,section:`路由规则`,icon:mi,disabled:!e.activeFileName,disabledReason:`请先选择一个规则文件`,run:async()=>{if(!e.activeFileName)return;let t=!1;try{t=await e.saveFileContent(e.activeFileName,e.rules)}catch(e){De.error(e instanceof Error?e.message:`规则保存失败`);return}t?(await e.fetchRuleFiles(),De.success(`规则保存成功`)):De.error(`规则保存失败`)}},{id:`rules.create-file`,title:`创建规则文件`,section:`路由规则`,icon:Ur,run:async()=>{let t=window.prompt(`请输入规则文件名称`);if(!t?.trim())return;let r=await e.createRuleFile(t.trim());r.success?(n(`/config`),await e.fetchFileContent(t.trim())):r.error&&window.alert(r.error)}},...e.ruleFiles.map(t=>({id:`rules.file.open.${t.name}`,title:`打开规则文件:${t.name}`,description:`${t.ruleCount} 条规则 · ${t.enabled?`已启用`:`未启用`}`,section:`规则文件`,icon:Wr,keywords:[`规则文件`,t.name],run:async()=>{n(`/config`),await e.fetchFileContent(t.name)}})),...e.ruleFiles.map(t=>({id:`rules.file.toggle.${t.name}`,title:`${t.enabled?`禁用`:`启用`}规则文件:${t.name}`,section:`规则文件`,icon:di,keywords:[`规则文件`,t.name,`启用`,`禁用`],run:async()=>{await e.toggleRuleFile(t.name,!t.enabled)}})),...e.ruleFiles.map(t=>({id:`rules.file.delete.${t.name}`,title:`删除规则文件:${t.name}`,section:`规则文件`,icon:S,danger:!0,confirm:`确定要删除规则文件「${t.name}」吗?`,keywords:[`规则文件`,t.name,`删除`],run:async()=>{await e.deleteRuleFile(t.name)}})),{id:`mock.create`,title:`新建 Mock 规则`,section:`Mock`,icon:Rr,keywords:[`mock`,`新增规则`],closeOnRun:!1,run:()=>t.openPanel({id:`mock.create`,title:`新建 Mock 规则`,size:`lg`})},...e.mockRules.map(e=>({id:`mock.edit.${e.id}`,title:`编辑 Mock:${e.name||e.urlPattern}`,description:`${e.method||`*`} ${e.urlPattern}`,section:`Mock`,icon:ci,keywords:[`mock`,e.name,e.urlPattern],closeOnRun:!1,run:()=>t.openPanel({id:`mock.edit`,title:`编辑 Mock:${e.name||e.urlPattern}`,size:`lg`,params:{id:e.id}})})),...e.mockRules.map(t=>({id:`mock.toggle.${t.id}`,title:`${t.enabled?`禁用`:`启用`} Mock:${t.name||t.urlPattern}`,description:`${t.method||`*`} ${t.urlPattern}`,section:`Mock`,icon:di,keywords:[`mock`,t.name,t.urlPattern,`启用`,`禁用`],run:async()=>{await e.updateMock(t.id,{enabled:!t.enabled}),await e.fetchMocks()}})),...e.mockRules.map(t=>({id:`mock.delete.${t.id}`,title:`删除 Mock:${t.name||t.urlPattern}`,description:`${t.method||`*`} ${t.urlPattern}`,section:`Mock`,icon:S,danger:!0,confirm:`确定要删除 Mock「${t.name||t.urlPattern}」吗?`,keywords:[`mock`,t.name,t.urlPattern,`删除`],run:async()=>{await e.deleteMock(t.id),await e.fetchMocks()}})),{id:`mock.refresh`,title:`刷新 Mock 列表`,section:`Mock`,icon:pi,run:e.fetchMocks},{id:`plugins.mode.off`,title:`关闭插件模式`,section:`插件`,icon:di,keywords:[`plugin`,`plugins`,`mode`,`off`,`插件模式`],run:()=>e.switchPluginMode(`off`)},{id:`plugins.mode.on`,title:`开启插件模式`,section:`插件`,icon:ui,keywords:[`plugin`,`plugins`,`mode`,`on`,`插件模式`],run:()=>e.switchPluginMode(`on`)},{id:`plugins.mode.shadow`,title:`切换到插件影子模式`,section:`插件`,icon:_i,keywords:[`plugin`,`plugins`,`mode`,`shadow`,`插件模式`,`影子模式`],run:()=>e.switchPluginMode(`shadow`)},{id:`plugins.generate`,title:`AI 生成插件`,section:`插件`,icon:Mr,keywords:[`plugin`,`plugins`,`generate`,`AI`,`插件生成`],closeOnRun:!1,run:()=>t.openPanel({id:`plugin.generate`,title:`AI 插件生成器`,size:`xl`})},{id:`plugins.reload`,title:`热加载插件`,section:`插件`,icon:pi,keywords:[`plugin`,`plugins`,`reload`,`hot reload`,`热加载`],run:async()=>{await fetch(`/api/plugins/reload`,{method:`POST`}),await e.fetchPlugins()}},...e.plugins.map(t=>({id:`plugins.runtime.${t.state===`running`?`stop`:`start`}.${t.id}`,title:`${t.state===`running`?`停止`:`启动`}插件:${t.name}`,description:`${t.version} · ${t.hooks.join(`, `)||`无 hooks`}`,section:`插件`,icon:t.state===`running`?vi:li,keywords:[`插件`,t.name,t.id,...t.hooks],run:async()=>{t.state===`running`?await e.stopPlugin(t.id):await e.startPlugin(t.id),await e.fetchPlugins()}})),...e.plugins.filter(e=>Hd(e)&&!!Ud(e)).map(e=>{let n=Ud(e);return{id:`plugins.edit.${e.id}`,title:`编辑插件代码:${e.name}`,description:n,section:`插件`,icon:zr,keywords:[`插件`,`代码`,e.name,e.id,n],closeOnRun:!1,run:()=>t.openPanel({id:`plugin.code`,title:`编辑插件代码:${n}`,size:`xl`,params:{filename:n}})}}),...e.plugins.filter(e=>Hd(e)&&!!Ud(e)).map(e=>({id:`plugins.test.${e.id}`,title:`测试插件:${e.name}`,description:e.hooks.join(`, `)||`无 hooks`,section:`插件`,icon:xi,keywords:[`插件`,`测试`,e.name,e.id,...e.hooks],closeOnRun:!1,run:()=>t.openPanel({id:`plugin.test`,title:`测试插件:${e.name}`,size:`xl`,params:{pluginId:e.id,pluginName:e.name,hooks:e.hooks,filename:Ud(e)}})})),...e.plugins.map(t=>({id:`plugins.toggle.${t.id}`,title:`${t.state===`disabled`?`启用`:`禁用`}插件:${t.name}`,description:t.id,section:`插件`,icon:di,keywords:[`插件`,t.name,t.id,`启用`,`禁用`],run:async()=>{await e.togglePlugin(t.id,t.state===`disabled`),await e.fetchPlugins()}})),{id:`plugins.third-party.load`,title:`加载第三方插件`,section:`插件`,icon:Ci,keywords:[`plugin`,`plugins`,`third party`,`load`,`第三方插件`],run:async()=>{let t=window.prompt(`请输入第三方插件路径`);t?.trim()&&(await e.loadThirdPartyPlugin(t.trim()),await e.fetchThirdPartyPlugins())}},...e.thirdPartyPlugins.map(t=>({id:`plugins.third-party.unload.${t.id}`,title:`卸载第三方插件:${t.name}`,description:t.id,section:`插件`,icon:S,danger:!0,confirm:`确定要卸载第三方插件「${t.name}」吗?`,keywords:[`第三方插件`,t.name,t.id,`卸载`],run:async()=>{await e.unloadThirdPartyPlugin(t.id),await e.fetchThirdPartyPlugins()}})),{id:`settings.theme`,title:`主题与缩放设置`,section:`设置`,icon:Pr,keywords:[`settings`,`theme`,`zoom`,`主题`,`缩放`],closeOnRun:!1,run:()=>{n(`/settings`)}}],[p,x,n,d,s,e]),re=(0,k.useCallback)((t,r)=>{switch(t.id){case`settings`:return(0,N.jsx)(Jd,{embedded:!0});case`mobile-proxy`:return(0,N.jsx)(nf,{});case`request.detail`:return(0,N.jsx)(qd,{embedded:!0,detail:e.recordDetail,loading:e.detailLoading,error:e.detailError,selectedRecord:e.records.find(t=>t.id===e.selectedRecordId),onCreateMock:b,onReplay:x,onJumpToRule:y});case`plugin.generate`:return(0,N.jsx)(Yd,{embedded:!0,onOpenChange:e=>{e||r.close()},onPluginSaved:async()=>{await e.fetchPlugins()}});case`mock.create`:return(0,N.jsx)($d,{initialData:t.params?.initialData,createMock:e.createMock,updateMock:e.updateMock,onSaved:()=>{e.fetchMocks(),r.close()}});case`mock.edit`:{let n=Number(t.params?.id),i=e.mockRules.find(e=>e.id===n);return i?(0,N.jsx)($d,{rule:i,createMock:e.createMock,updateMock:e.updateMock,onSaved:()=>{e.fetchMocks(),r.close()}}):(0,N.jsx)(`div`,{className:`flex h-full items-center justify-center p-6 text-sm text-muted-foreground`,children:`没有找到这条 Mock 规则`})}case`plugin.code`:return(0,N.jsx)(Xd,{embedded:!0,filename:String(t.params?.filename||``),onOpenChange:e=>{e||r.close()},onSaved:e.fetchPlugins});case`plugin.test`:return(0,N.jsx)(Zd,{embedded:!0,pluginId:String(t.params?.pluginId||``),pluginName:String(t.params?.pluginName||``),hooks:Array.isArray(t.params?.hooks)?t.params.hooks:[],filename:typeof t.params?.filename==`string`?t.params.filename:void 0,onOpenChange:e=>{e||r.close()},onPluginFixed:e.fetchPlugins});case`rules.ai`:return(0,N.jsx)(Qd,{rules:e.rules,setRules:e.setRules,ruleFiles:e.ruleFiles,activeFileName:e.activeFileName,fetchRuleFileRawContent:e.fetchRuleFileRawContent});case`rules.preview`:return(0,N.jsx)(ef,{embedded:!0,rules:e.rules,activeFileName:e.activeFileName,onRevealRule:e=>{r.close(),n(`/config`),window.setTimeout(()=>{window.dispatchEvent(new CustomEvent(`route-rule:highlight`,{detail:{pattern:e.pattern,target:e.target}}))},120)}});case`rules.overview`:return(0,N.jsx)(tf,{rules:e.rules,activeFileName:e.activeFileName,onLocateRule:(t,i,a)=>{r.close(),n(`/config`),e.fetchFileContent(t).then(()=>{window.setTimeout(()=>{window.dispatchEvent(new CustomEvent(`route-rule:highlight`,{detail:{pattern:i,target:a}}))},120)})},onSelectFile:t=>{r.close(),n(`/config`),e.fetchFileContent(t)}});default:return(0,N.jsx)(`div`,{className:`flex h-full items-center justify-center p-6 text-sm text-muted-foreground`,children:`未找到这个面板`})}},[b,y,x,n,e]),w=u;return(0,k.useEffect)(()=>{t()},[t]),(0,N.jsx)(zd,{commands:ne,renderPanel:(e,t)=>(0,N.jsx)(k.Suspense,{fallback:(0,N.jsx)(af,{}),children:re(e,t)}),children:(0,N.jsxs)(`div`,{className:`flex h-dvh flex-col overflow-hidden bg-muted/20`,children:[(0,N.jsx)(Ou,{onCommandClick:C}),(0,N.jsx)(Lu,{}),(0,N.jsxs)(`main`,{className:`app-shell-main`,children:[(0,N.jsx)(Du,{activeTab:h,onTabChange:v,mockEnabledCount:e.mockRules.filter(e=>e.enabled).length}),g===`work`?(0,N.jsx)(`div`,{"data-testid":`shell-work`,"data-shell-mode":`work`,className:`mt-[var(--ui-section-gap)] flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden`,children:(0,N.jsx)(wi,{"data-testid":`log-panel-card`,className:`flex h-full min-h-0 flex-1 flex-col gap-0 overflow-hidden py-0 shadow-none`,children:(0,N.jsx)(xl,{detailOpen:e.selectedRecordId!=null,master:(0,N.jsxs)(`div`,{className:`app-page-pad flex min-h-0 flex-1 flex-col overflow-hidden`,children:[(0,N.jsxs)(`div`,{className:`shrink-0 border-b pb-[var(--ui-section-gap)]`,children:[(0,N.jsx)(`span`,{className:`sr-only`,children:`请求日志`}),(0,N.jsx)(Ec,{filterText:i,setFilterText:a,resourceTypeFilter:o,setResourceTypeFilter:s,clientSourceFilter:c,setClientSourceFilter:l,totalCount:e.records.length,filteredCount:u.length,onClear:e.clearRecords,recording:d,onToggleRecording:()=>f(e=>!e)})]}),(0,N.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-hidden`,children:(0,N.jsx)(ml,{records:w,selectedRecordId:e.selectedRecordId,onSelect:te,autoScroll:p})})]}),detail:(0,N.jsx)(k.Suspense,{fallback:(0,N.jsx)(af,{}),children:(0,N.jsx)(qd,{embedded:!0,onClose:e.closeDetail,detail:e.recordDetail,loading:e.detailLoading,error:e.detailError,selectedRecord:e.records.find(t=>t.id===e.selectedRecordId),onCreateMock:b,onReplay:x,onJumpToRule:y})})})})}):(0,N.jsx)(`div`,{"data-testid":`shell-config`,"data-shell-mode":`config`,className:`mt-[var(--ui-section-gap)] flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden`,children:(0,N.jsxs)(wi,{className:`h-full min-h-0 w-full flex-1 gap-0 overflow-hidden rounded-b-none py-0`,children:[h===`config`&&(0,N.jsx)(`div`,{"data-testid":`config-page-rules`,className:`mt-0 flex min-h-0 flex-1 flex-col overflow-hidden`,children:(0,N.jsx)(k.Suspense,{fallback:(0,N.jsx)(af,{}),children:(0,N.jsx)(Wd,{rules:e.rules,setRules:e.setRules,ruleFiles:e.ruleFiles,activeFileName:e.activeFileName,fetchRuleFiles:e.fetchRuleFiles,fetchFileContent:e.fetchFileContent,fetchRuleFileRawContent:e.fetchRuleFileRawContent,saveRuleFileRawContent:e.saveRuleFileRawContent,saveFileContent:e.saveFileContent,createRuleFile:e.createRuleFile,toggleRuleFile:e.toggleRuleFile,renameRuleFile:e.renameRuleFile,deleteRuleFile:e.deleteRuleFile,reorderRuleFiles:e.reorderRuleFiles,setRuleFileReadonly:e.setRuleFileReadonly})})}),h===`mock`&&(0,N.jsx)(`div`,{"data-testid":`config-page-mock`,className:`mt-0 flex min-h-0 flex-1 flex-col overflow-hidden`,children:(0,N.jsx)(k.Suspense,{fallback:(0,N.jsx)(af,{}),children:(0,N.jsx)(Gd,{mockRules:e.mockRules,fetchMocks:e.fetchMocks,createMock:e.createMock,updateMock:e.updateMock,deleteMock:e.deleteMock})})}),h===`plugins`&&(0,N.jsx)(`div`,{"data-testid":`config-page-plugins`,className:`mt-0 flex min-h-0 flex-1 flex-col overflow-hidden`,children:(0,N.jsx)(k.Suspense,{fallback:(0,N.jsx)(af,{}),children:(0,N.jsx)(Kd,{plugins:e.plugins,pluginMode:e.pluginMode,switchPluginMode:e.switchPluginMode,fetchPlugins:e.fetchPlugins,startPlugin:e.startPlugin,stopPlugin:e.stopPlugin,togglePlugin:e.togglePlugin,thirdPartyPlugins:e.thirdPartyPlugins,thirdPartySecurity:e.thirdPartySecurity,fetchThirdPartyPlugins:e.fetchThirdPartyPlugins,loadThirdPartyPlugin:e.loadThirdPartyPlugin,unloadThirdPartyPlugin:e.unloadThirdPartyPlugin})})}),h===`health`&&(0,N.jsx)(`div`,{"data-testid":`config-page-health`,className:`meddle-thin-scroll mt-0 min-h-0 flex-1 overflow-y-auto`,children:(0,N.jsx)(k.Suspense,{fallback:(0,N.jsx)(af,{}),children:(0,N.jsx)(rf,{})})}),h===`settings`&&(0,N.jsx)(`div`,{"data-testid":`config-page-settings`,className:`meddle-thin-scroll mt-0 flex min-h-0 flex-1 flex-col overflow-hidden`,children:(0,N.jsx)(k.Suspense,{fallback:(0,N.jsx)(af,{}),children:(0,N.jsx)(Jd,{embedded:!0})})}),h===`mobile`&&(0,N.jsx)(`div`,{"data-testid":`config-page-mobile`,className:`meddle-thin-scroll mt-0 min-h-0 flex-1 overflow-y-auto`,children:(0,N.jsx)(k.Suspense,{fallback:(0,N.jsx)(af,{}),children:(0,N.jsx)(nf,{})})})]})})]})]})})}function sf({position:e=`bottom-right`,duration:t=ke,...n}){let{resolvedTheme:r}=mu();return(0,N.jsx)(Oe,{theme:r,position:e,duration:t,expand:!0,closeButton:!0,gap:10,visibleToasts:4,offset:16,mobileOffset:12,swipeDirections:[`right`],className:`toaster group`,icons:{success:(0,N.jsx)(Ir,{className:`size-4`}),info:(0,N.jsx)(Xr,{className:`size-4`}),warning:(0,N.jsx)(Si,{className:`size-4`}),error:(0,N.jsx)(ni,{className:`size-4`}),loading:(0,N.jsx)($r,{className:`size-4 animate-spin`}),close:(0,N.jsx)(ae,{className:`size-3`})},toastOptions:{unstyled:!0,closeButtonAriaLabel:`关闭通知`,style:{"--system-toast-duration":`${ke}ms`},classNames:{toast:`system-toast`,content:`system-toast-content`,title:`system-toast-title`,description:`system-toast-description`,icon:`system-toast-icon`,closeButton:`system-toast-close`,actionButton:`system-toast-action`,cancelButton:`system-toast-cancel`,success:`system-toast-success`,info:`system-toast-info`,warning:`system-toast-warning`,error:`system-toast-error`,loading:`system-toast-loading`,default:`system-toast-default`}},...n})}function cf({children:e}){let t=(0,k.useRef)(new Map),n=(0,k.useRef)(0),r=(0,k.useCallback)(e=>{t.current.set(e,{order:n.current++})},[]),i=(0,k.useCallback)((e,i)=>{t.current.get(e)||r(e);let a=t.current.get(e);a&&(!a.registration?.active&&i.active&&(a.order=n.current++),a.registration=i)},[r]),a=(0,k.useCallback)(e=>{t.current.delete(e)},[]);(0,k.useEffect)(()=>{let e=e=>{if(e.isComposing||e.repeat||!(e.metaKey||e.ctrlKey)||e.key.toLowerCase()!==`s`)return;let n=[...t.current.values()].filter(e=>!!e.registration?.active).sort((e,t)=>t.registration.priority-e.registration.priority||t.order-e.order)[0];n&&(e.preventDefault(),e.stopPropagation(),n.registration.enabled&&n.registration.onSave())};return window.addEventListener(`keydown`,e,{capture:!0}),()=>window.removeEventListener(`keydown`,e,{capture:!0})},[]);let o=(0,k.useMemo)(()=>({register:r,update:i,unregister:a}),[r,a,i]);return(0,N.jsx)(eu.Provider,{value:o,children:e})}(0,Pe.createRoot)(document.getElementById(`root`)).render((0,N.jsx)(k.StrictMode,{children:(0,N.jsxs)(pu,{defaultTheme:`light`,storageKey:`theme`,children:[(0,N.jsx)(cf,{children:(0,N.jsx)(sr,{children:(0,N.jsx)(of,{})})}),(0,N.jsx)(sf,{})]})}));export{Ai as $,El as A,Mr as At,Kc as B,Y as C,Zr as Ct,Al as D,Hr as Dt,Ol as E,Wr as Et,tl as F,vc as G,Yc as H,Qc as I,yc as J,Sc as K,Gc as L,Tl as M,Or as Mt,bl as N,ze as Nt,kl as O,zr as Ot,nl as P,ji as Q,Zc as R,ql as S,Qr as St,J as T,Kr as Tt,_c as U,Jc as V,xc as W,gc as X,hc as Y,fc as Z,$l as _,di as _t,vd as a,Ei as at,Hl as b,ei as bt,Zu as c,bi as ct,mu as d,_i as dt,wi as et,su as f,gi as ft,tu as g,fi as gt,nu as h,pi as ht,Pd as i,Ti as it,wl as j,Ar as jt,Sl as k,Ir as kt,Qu as l,yi as lt,cu as m,mi as mt,Vd as n,ki as nt,Xu as o,Si as ot,au as p,hi as pt,bc as q,Fd as r,Di as rt,Yu as s,xi as st,Ud as t,Oi as tt,sd as u,vi as ut,Xl as v,li as vt,Kl as w,qr as wt,Gl as x,$r as xt,Jl as y,ti as yt,Xc as z};
|
|
21
|
+
`,r=t.split(/\r?\n/).map(e=>{let t=Zu(e);return{raw:e,items:t.length>0?t:null}}),i=[],a=[];r.forEach((e,t)=>{e.items?.forEach((e,n)=>{i.push({entry:t,k:n}),a.push(e)})});let{matchA:o,matchB:s}=od(a,e),c=new Set(a.map(e=>e.rule)),l=Array(r.length).fill(-1);i.forEach((e,t)=>{l[e.entry]<0&&(l[e.entry]=t)});let u=r.map((e,t)=>{if(!e.items)return!1;let n=l[t],r=o[n];return r<0?!1:e.items.every((e,t)=>o[n+t]===r+t)}),d=r.map((e,t)=>e.items?e.items.filter((e,n)=>o[l[t]+n]<0).length:0),f=Array(e.length+1).fill(r.length);for(let t=e.length-1;t>=0;t--)f[t]=s[t]>=0?i[s[t]].entry:f[t+1];let p=r.length;for(;p>0&&!r[p-1].raw.trim();)p--;let m=[],h=0,g=e=>{for(;h<e;h++)r[h].items||m.push(r[h].raw)},_=0;for(;_<e.length;){let t=s[_];if(t>=0){let{entry:n,k:a}=i[t];g(n);let o=r[n].items;if(u[n]&&a===0){m.push(r[n].raw),_+=o.length,h=n+1;continue}m.push(id(e[_],c)),_++;continue}let n=f[_+1],a=!1;for(let e=h;e<n;e++)if(r[e].items&&d[e]>0){g(e),d[e]--,a=!0;break}!a&&n===r.length&&g(p),m.push(id(e[_],c)),_++}return g(r.length),m.join(n)}var cd=`X-Meddle-UI-Token`,ld=`meddle-ui-token`,ud=null;function dd(){if(typeof document>`u`)return null;let e=document.querySelector(`meta[name="${ld}"]`)?.getAttribute(`content`);return e&&e.trim()?e.trim():null}async function fd(){try{let e=await fetch(`/api/ui-token`,{cache:`no-store`,credentials:`same-origin`});if(!e.ok)return null;let t=await e.json();return typeof t.token==`string`&&t.token?t.token:null}catch{return null}}async function pd(e=!1){return!e&&(ud||=dd(),ud)||(ud=await fd()),ud}async function md(e,t){for(let n=0;n<2;n+=1){let r=await pd(n>0);try{let i=await fetch(`/api/rule-files/${encodeURIComponent(e)}/readonly`,{method:`PUT`,credentials:`same-origin`,headers:{"Content-Type":`application/json`,...r?{[cd]:r}:{}},body:JSON.stringify({readonly:t})}),a=await i.json().catch(()=>null);if(i.ok&&a?.status===`success`)return{success:!0};if(i.status===403&&a?.code===`UI_TOKEN_INVALID`&&n===0)continue;return{success:!1,error:a?.error||`保存失败(${i.status})`}}catch(e){return{success:!1,error:e instanceof Error?e.message:`保存失败`}}}return{success:!1,error:`保存失败`}}function hd(){let[e,t]=(0,k.useState)([]),[n,r]=(0,k.useState)([]),[i,a]=(0,k.useState)(null),o=(0,k.useRef)(new Map),s=(0,k.useCallback)(async()=>{try{let e=await(await fetch(`/api/rule-files`)).json(),t=Array.isArray(e)?e:[];return r(t),t}catch(e){return console.error(`Failed to fetch rule files:`,e),[]}},[]),c=(0,k.useCallback)(async e=>{let t=await fetch(`/api/rule-files/${encodeURIComponent(e)}/content`);return new TextDecoder(`utf-8`,{ignoreBOM:!0}).decode(await t.arrayBuffer())},[]),l=(0,k.useCallback)(async e=>{try{let n=await c(e);o.current.set(e,n),t(Zu(n)),a(e)}catch(e){console.error(`Failed to fetch file content:`,e)}},[c]),u=(0,k.useCallback)(async(e,t)=>{try{let n=await(await fetch(`/api/rule-files/${encodeURIComponent(e)}/content`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({content:t})})).json();return n.status===`success`&&o.current.set(e,t),n.status===`success`}catch(e){return console.error(`Failed to save file content:`,e),!1}},[]);return{rules:e,setRules:t,ruleFiles:n,activeFileName:i,fetchRuleFiles:s,fetchFileContent:l,fetchRuleFileRawContent:c,saveRuleFileRawContent:u,saveFileContent:(0,k.useCallback)(async(e,t)=>u(e,sd(t,o.current.get(e)??``)),[u]),createRuleFile:(0,k.useCallback)(async(e,t=``)=>{let n=e.trim();try{let e=await(await fetch(`/api/rule-files`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:n,content:t,enabled:!0})})).json();return e.status===`success`?(await s(),{success:!0}):{success:!1,error:e.error}}catch(e){return(await s()).some(e=>e.name===n)?{success:!0}:{success:!1,error:e instanceof Error?e.message:`创建规则文件失败`}}},[s]),toggleRuleFile:(0,k.useCallback)(async(e,t)=>{try{return(await(await fetch(`/api/rule-files/${encodeURIComponent(e)}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({enabled:t})})).json()).status===`success`?(await s(),!0):!1}catch(e){return console.error(`Failed to toggle rule file:`,e),!1}},[s]),renameRuleFile:(0,k.useCallback)(async(e,t)=>{let n=t.trim();if(!n)return{success:!1,error:`规则文件名称不能为空`};try{let t=await(await fetch(`/api/rule-files/${encodeURIComponent(e)}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({newName:n})})).json();if(t.status!==`success`)return{success:!1,error:t.error||`重命名失败`};let r=typeof t.name==`string`?t.name:n;if(r!==e){let t=o.current.get(e);t!==void 0&&o.current.set(r,t),o.current.delete(e)}return i===e&&a(r),await s(),{success:!0,name:r}}catch(e){return{success:!1,error:e instanceof Error?e.message:`重命名失败`}}},[i,s]),deleteRuleFile:(0,k.useCallback)(async e=>{try{return(await(await fetch(`/api/rule-files/${encodeURIComponent(e)}`,{method:`DELETE`})).json()).status===`success`?(i===e&&(a(null),t([])),await s(),!0):!1}catch(e){return console.error(`Failed to delete rule file:`,e),!1}},[s,i]),reorderRuleFiles:(0,k.useCallback)(async e=>{let t=n,i=new Map(t.map(e=>[e.name,e])),a=e.map(e=>i.get(e)).filter(e=>!!e);a.length===e.length&&r(a);try{return(await(await fetch(`/api/rule-files/order`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({order:e})})).json()).status===`success`?(await s(),!0):(r(t),await s(),!1)}catch(e){return console.error(`Failed to reorder rule files:`,e),r(t),await s(),!1}},[s,n]),setRuleFileReadonly:(0,k.useCallback)(async(e,t)=>{let n=await md(e,t);return n.success&&(r(n=>n.map(n=>n.name===e?{...n,readonly:t}:n)),s()),n},[s])}}var gd=`mocksUpdated`,_d=!1;function vd(){let e=_d;return _d=!1,e}function yd(e,t={}){let n=e;n?.code===`MOCKS_FILE_INVALID`&&(_d=!0,t.silent||De.error(n.error||`Mock 文件格式错误`),window.dispatchEvent(new CustomEvent(Ae)))}function Q(e,t){return e.some(e=>e.id===t.id)?xd(e,t):e}function bd(e){let t=new Map;for(let n of e)t.set(n.id,n);return Array.from(t.values()).sort((e,t)=>e.id-t.id)}function xd(e,t){return bd([...e.filter(e=>e.id!==t.id),t])}function Sd(){let[e,t]=(0,k.useState)([]),n=(0,k.useCallback)(async()=>{try{let e=await(await fetch(`/api/mocks`,{cache:`no-store`})).json();t(bd(Array.isArray(e)?e:[]))}catch(e){console.error(`Failed to fetch mocks:`,e)}},[]);return(0,k.useEffect)(()=>{n()},[n]),(0,k.useEffect)(()=>{let e=e=>{let n=e;t(bd(Array.isArray(n.detail)?n.detail:[]))};return window.addEventListener(gd,e),()=>window.removeEventListener(gd,e)},[]),{mockRules:e,fetchMocks:n,createMock:(0,k.useCallback)(async(e,n)=>{try{let r=await(await fetch(`/api/mocks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)})).json();return r.status===`success`?(t(e=>xd(e,r.rule)),r.rule):(yd(r,{silent:n?.silentInvalid}),null)}catch(e){return console.error(`Failed to create mock:`,e),null}},[]),updateMock:(0,k.useCallback)(async(e,n,r)=>{let i;t(t=>(i=t.find(t=>t.id===e),i?xd(t,{...i,...n}):t));try{let a=await(await fetch(`/api/mocks/${e}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)})).json();if(a.status===`success`)return t(e=>xd(e,a.rule)),!0;if(yd(a,{silent:r?.silentInvalid}),i){let e=i;t(t=>Q(t,e))}return!1}catch(e){if(console.error(`Failed to update mock:`,e),i){let e=i;t(t=>Q(t,e))}return!1}},[]),deleteMock:(0,k.useCallback)(async e=>{try{let n=await(await fetch(`/api/mocks/${e}`,{method:`DELETE`})).json();return n.status===`success`?(t(t=>t.filter(t=>t.id!==e)),!0):(yd(n),!1)}catch(e){return console.error(`Failed to delete mock:`,e),!1}},[])}}function Cd(){let[e,t]=(0,k.useState)([]),[n,r]=(0,k.useState)(`off`),[i,a]=(0,k.useState)([]),[o,s]=(0,k.useState)({allowAll:!1,trusted:[]}),c=(0,k.useCallback)(async()=>{try{let e=await(await fetch(`/api/plugins`)).json();r(e.mode||`off`),t(e.plugins||[])}catch(e){console.error(`Failed to fetch plugins:`,e)}},[]);return{plugins:e,pluginMode:n,switchPluginMode:(0,k.useCallback)(async e=>{try{(await fetch(`/api/pipeline/mode`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({mode:e})})).ok&&r(e)}catch(e){console.error(`Failed to switch plugin mode:`,e)}},[]),thirdPartyPlugins:i,thirdPartySecurity:o,fetchPlugins:c,startPlugin:(0,k.useCallback)(async e=>{try{await fetch(`/api/plugins/${e}/start`,{method:`POST`})}catch(e){console.error(`Failed to start plugin:`,e)}},[]),stopPlugin:(0,k.useCallback)(async e=>{try{await fetch(`/api/plugins/${e}/stop`,{method:`POST`})}catch(e){console.error(`Failed to stop plugin:`,e)}},[]),togglePlugin:(0,k.useCallback)(async(e,n)=>{try{(await fetch(`/api/plugins/${encodeURIComponent(e)}/toggle`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({enabled:n})})).ok&&t(t=>t.map(t=>t.id===e?{...t,state:n?`running`:`disabled`}:t))}catch(e){console.error(`Failed to toggle plugin:`,e)}},[]),fetchThirdPartyPlugins:(0,k.useCallback)(async()=>{try{let e=await fetch(`/api/plugins/third-party`),t=e.headers.get(`content-type`)||``;if(!e.ok||!t.includes(`application/json`)){a([]),s({allowAll:!1,trusted:[]});return}let n=await e.json();a(n.plugins||[]),s(n.security||{allowAll:!1,trusted:[]})}catch(e){console.error(`Failed to fetch third-party plugins:`,e)}},[]),loadThirdPartyPlugin:(0,k.useCallback)(async e=>{try{await fetch(`/api/plugins/third-party/load`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})})}catch(e){console.error(`Failed to load third-party plugin:`,e)}},[]),unloadThirdPartyPlugin:(0,k.useCallback)(async e=>{try{await fetch(`/api/plugins/third-party/${e}/unload`,{method:`POST`})}catch(e){console.error(`Failed to unload third-party plugin:`,e)}},[])}}function wd(){let[e,t]=(0,k.useState)(Ru),n=Hu(e),r=hd(),i=Sd(),a=Cd();return{records:n.records,selectedRecordId:n.selectedRecordId,recordDetail:n.recordDetail,detailLoading:n.detailLoading,detailError:n.detailError,fetchDetail:n.fetchDetail,closeDetail:n.closeDetail,clearRecords:n.clearRecords,replayRequest:n.replayRequest,maxRecords:e,setMaxRecords:t,rules:r.rules,setRules:r.setRules,ruleFiles:r.ruleFiles,activeFileName:r.activeFileName,fetchRuleFiles:r.fetchRuleFiles,fetchFileContent:r.fetchFileContent,fetchRuleFileRawContent:r.fetchRuleFileRawContent,saveRuleFileRawContent:r.saveRuleFileRawContent,saveFileContent:r.saveFileContent,createRuleFile:r.createRuleFile,toggleRuleFile:r.toggleRuleFile,renameRuleFile:r.renameRuleFile,deleteRuleFile:r.deleteRuleFile,reorderRuleFiles:r.reorderRuleFiles,setRuleFileReadonly:r.setRuleFileReadonly,mockRules:i.mockRules,fetchMocks:i.fetchMocks,createMock:i.createMock,updateMock:i.updateMock,deleteMock:i.deleteMock,plugins:a.plugins,pluginMode:a.pluginMode,switchPluginMode:a.switchPluginMode,thirdPartyPlugins:a.thirdPartyPlugins,thirdPartySecurity:a.thirdPartySecurity,fetchPlugins:a.fetchPlugins,startPlugin:a.startPlugin,stopPlugin:a.stopPlugin,togglePlugin:a.togglePlugin,fetchThirdPartyPlugins:a.fetchThirdPartyPlugins,loadThirdPartyPlugin:a.loadThirdPartyPlugin,unloadThirdPartyPlugin:a.unloadThirdPartyPlugin}}function Td(e){let t=typeof e.source==`string`?e.source:``,n=typeof e.method==`string`?e.method:``,r=t.toLowerCase(),i=n.toUpperCase();if(!r)return`other`;if(r.startsWith(`ws://`)||r.startsWith(`wss://`))return`websocket`;if(i!==`GET`||r.includes(`/api/`)||r.includes(`.json`))return`fetch`;let a=r.split(`?`)[0].split(`#`)[0].split(`/`),o=a[a.length-1]||``,s=o.includes(`.`)&&o.split(`.`).pop()||``;return[`html`,`htm`,`php`,`asp`,`aspx`,`jsp`].includes(s)||!s&&i===`GET`?`doc`:s===`css`?`css`:[`js`,`mjs`,`jsx`,`ts`,`tsx`].includes(s)?`js`:[`woff`,`woff2`,`ttf`,`otf`,`eot`].includes(s)?`font`:[`png`,`jpg`,`jpeg`,`gif`,`svg`,`webp`,`ico`,`bmp`].includes(s)?`img`:[`mp4`,`webm`,`ogg`,`mp3`,`wav`,`flac`,`aac`,`m4a`].includes(s)?`media`:[`manifest`,`webmanifest`].includes(s)?`manifest`:s===`wasm`?`wasm`:`other`}var Ed=new WeakMap;function Dd(e){let t=Ed.get(e);if(t)return t;let n=typeof e.method==`string`?e.method:``,r=typeof e.source==`string`?e.source:``,i=typeof e.target==`string`?e.target:``,a=typeof e.time==`string`?e.time:``,o=e.clientType||``,s=e.clientIp||``,c=e.clientName||``,l=e.applicationName||``,u=e.applicationProcess||``,d=e.applicationBundleId||``,f=e.applicationPid?.toString()||``,p=e.applicationIdentitySource||``,m=e.applicationIdentityConfidence||``,h=r;try{h=new URL(r).hostname}catch{}let g={methodUpper:n.toUpperCase(),statusCode:e.statusCode,statusText:e.statusCode?.toString()||``,sourceLower:r.toLowerCase(),domainLower:h.toLowerCase(),clientLower:`${o} ${c} ${s}`.toLowerCase(),clientIpLower:s.toLowerCase(),applicationLower:`${l} ${u} ${d} ${f} ${p} ${m}`.toLowerCase(),haystack:`${n} ${r} ${i} ${a} ${o} ${s} ${c} ${l} ${u} ${d} ${f} ${p} ${m}`.toLowerCase(),resourceType:Td(e)};return Ed.set(e,g),g}function Od(e){let[t,n]=(0,k.useState)(``),[r,i]=(0,k.useState)(`all`),[a,o]=(0,k.useState)(`all`),s=(0,k.useDeferredValue)(t);return{filterText:t,setFilterText:n,resourceTypeFilter:r,setResourceTypeFilter:i,clientSourceFilter:a,setClientSourceFilter:o,filteredRecords:(0,k.useMemo)(()=>{let t=s.trim();if(!t&&r===`all`&&a===`all`)return e;let n=t.split(/\s+/).filter(Boolean),i=[];for(let t of e){if(a!==`all`&&t.clientType!==a)continue;let e=Dd(t);r!==`all`&&e.resourceType!==r||n.every(t=>{let n=t.startsWith(`-`)&&t.length>1,r=n?t.slice(1):t,i=r.toLowerCase(),a=!1;if(i.startsWith(`method:`))a=e.methodUpper===r.slice(7).toUpperCase();else if(i.startsWith(`status:`)){let t=i.slice(7);if(!e.statusCode)a=!1;else if(t.includes(`x`)){let n=t.replace(/x/gi,``);a=e.statusText.startsWith(n)}else a=e.statusText===t}else a=i.startsWith(`domain:`)?e.domainLower.includes(i.slice(7))||e.sourceLower.includes(i.slice(7)):i.startsWith(`client:`)?e.clientLower.includes(i.slice(7)):i.startsWith(`ip:`)?e.clientIpLower.includes(i.slice(3)):i.startsWith(`app:`)?e.applicationLower.includes(i.slice(4)):kd(i,e.haystack);return n?!a:a})&&i.push(t)}return i},[e,s,r,a])}}function kd(e,t){if(t.includes(e))return!0;let n=0;for(let r=0;r<t.length&&n<e.length;r++)e[n]===t[r]&&n++;return n===e.length}var Ad=[`content-length`,`content-encoding`,`connection`,`date`,`etag`,`last-modified`,`server`];function jd(e){if(!e)return{};let t={};return Object.entries(e).forEach(([e,n])=>{Ad.includes(e.toLowerCase())||(t[e]=n)}),t}function Md(e){let t=e.match(/^\(truncated, \d+ bytes\)\n/);return t?e.substring(t[0].length):e}function $(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function Nd(e){let t=jd(e.responseHeaders),n=Md(e.responseBody);return{urlPattern:$(e.source),body:n,statusCode:e.statusCode,headers:t,name:`从日志创建`,method:`*`,enabled:!0}}var Pd=`mock-config:open-create`,Fd=(0,k.createContext)(null);function Id(e){(0,k.useEffect)(()=>{let t=t=>{t.isComposing||t.key.toLowerCase()===`k`&&(t.metaKey||t.ctrlKey)&&(t.preventDefault(),e())};return window.addEventListener(`keydown`,t,{capture:!0}),()=>window.removeEventListener(`keydown`,t,{capture:!0})},[e])}var Ld=(0,k.lazy)(()=>ze(()=>import(`./global-panel-shell-jXQTb9nw.js`).then(e=>({default:e.GlobalPanelShell})),__vite__mapDeps([0,1,2,3,4,5,6,7,8]))),Rd=class extends k.Component{state={error:null};static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,t){console.error(`Global panel failed to render`,e,t)}render(){return this.state.error?(0,N.jsx)(`div`,{className:`fixed inset-0 z-[82] flex items-center justify-center bg-background/80 p-6 backdrop-blur-sm`,children:(0,N.jsxs)(`div`,{className:`w-full max-w-lg rounded-lg border bg-card p-5 shadow-xl`,children:[(0,N.jsx)(`h2`,{className:`font-semibold`,children:`面板加载失败`}),(0,N.jsx)(`p`,{className:`mt-2 break-words text-sm text-destructive`,children:this.state.error.message}),(0,N.jsx)(`button`,{type:`button`,className:`mt-4 rounded-md border px-3 py-1.5 text-sm`,onClick:this.props.onClose,children:`关闭面板`})]})}):this.props.children}};function zd({children:e,commands:t,renderPanel:n}){let[r,i]=(0,k.useState)(!1),[a,o]=(0,k.useState)([]),s=(0,k.useCallback)(()=>{o([]),i(!0)},[]),c=(0,k.useCallback)(e=>{o([e]),i(!0)},[]),l=(0,k.useCallback)(e=>{o(t=>[...t,e]),i(!0)},[]),u=(0,k.useCallback)(()=>{o(e=>e.slice(0,-1))},[]),d=(0,k.useCallback)(()=>{i(!1),o([])},[]);Id(s),(0,k.useEffect)(()=>{let e=()=>s(),t=e=>{let t=e.detail;t?.id&&c(t)};return window.addEventListener(`global-panel:open-command`,e),window.addEventListener(`global-panel:open-panel`,t),()=>{window.removeEventListener(`global-panel:open-command`,e),window.removeEventListener(`global-panel:open-panel`,t)}},[s,c]);let f=a.length>0?a[a.length-1]:null,p=(0,k.useMemo)(()=>({open:r,stack:a,currentRoute:f,openCommand:s,openPanel:c,pushPanel:l,back:u,close:d}),[u,d,f,r,s,c,l,a]),m=typeof t==`function`?t(p):t;return(0,N.jsxs)(Fd.Provider,{value:p,children:[e,r&&(0,N.jsx)(Rd,{onClose:d,children:(0,N.jsx)(k.Suspense,{fallback:null,children:(0,N.jsx)(Ld,{commands:m,renderPanel:e=>n(e,p)})})},f?.id||`command`)]})}function Bd(e){return`local.${e.replace(/\.js$/,``)}`}function Vd(e,t,n=new Set){let r=new Set,i=t.map(t=>{let n=e.find(e=>e.filename===t.filename)??(t.pluginId?e.find(e=>e.id===t.pluginId):void 0)??e.find(e=>e.id===Bd(t.filename)&&e.source!==`builtin`&&(!e.filename||e.filename===t.filename));return n&&r.add(n.id),{filename:t.filename,file:t,pluginId:n?.id??t.pluginId??Bd(t.filename),loadedPlugin:n,fileDeleted:!1}});for(let t of e)r.has(t.id)||n.has(t.id)||!Hd(t)||(r.add(t.id),i.push({filename:Ud(t)||t.id,pluginId:t.id,loadedPlugin:t,fileDeleted:!0}));return{builtinPlugins:e.filter(e=>r.has(e.id)||n.has(e.id)?!1:e.source?e.source===`builtin`:!e.id.startsWith(`local.`)),customRows:i}}function Hd(e){return e.source?e.source===`custom`:e.id.startsWith(`local.`)}function Ud(e){return e.filename?e.filename:e.id.startsWith(`local.`)?`${e.id.slice(6)}.js`:``}var Wd=(0,k.lazy)(()=>ze(()=>import(`./rule-config-DmNPaKxc.js`).then(e=>({default:e.RuleConfig})),__vite__mapDeps([9,1,10,2,5,11,12,6,13,3,4,14,15,16,17,18,19,20,21]))),Gd=(0,k.lazy)(()=>ze(()=>import(`./mock-config-D_E5YOE_.js`).then(e=>({default:e.MockConfig})),__vite__mapDeps([22,1,10,2,5,11,23,12,6,13,4,24,14,16,25,26,27,17,28,8,20,29,18,19]))),Kd=(0,k.lazy)(()=>ze(()=>import(`./plugin-config-Dg_FCb-L.js`).then(e=>({default:e.PluginConfig})),__vite__mapDeps([30,1,10,2,5,11,4,31,32,33,25,17,18]))),qd=(0,k.lazy)(()=>ze(()=>import(`./detail-panel-CyOc7gn8.js`).then(e=>({default:e.DetailPanel})),__vite__mapDeps([34,1,2,4,5,35,36,13,37,38,39,40,41,27,16,20,42]))),Jd=(0,k.lazy)(()=>ze(()=>import(`./settings-panel-DLdeJ8ox.js`).then(e=>({default:e.SettingsPanel})),__vite__mapDeps([43,1,10,2,5,11,4,31,13,7,38,14,32,44,45,16,29,17,46,28,8]))),Yd=(0,k.lazy)(()=>ze(()=>import(`./plugin-generator-CVREuZs7.js`).then(e=>({default:e.PluginGenerator})),__vite__mapDeps([47,1,2,4,5,13,38,24,40,27,16,25,17,48,49,8]))),Xd=(0,k.lazy)(()=>ze(()=>import(`./plugin-code-editor-CtaamKWJ.js`).then(e=>({default:e.PluginCodeEditor})),__vite__mapDeps([50,1,23,2,4,5,51,44,33,16,25,17,48,49,8]))),Zd=(0,k.lazy)(()=>ze(()=>import(`./plugin-test-dialog-B-iV8ocm.js`).then(e=>({default:e.PluginTestDialog})),__vite__mapDeps([52,1,23,2,4,5,35,36,7,38,51,32,27,25,48,49,8]))),Qd=(0,k.lazy)(()=>ze(()=>import(`./rule-ai-assistant-panel-BvTqm4zV.js`).then(e=>({default:e.RuleAiAssistantPanel})),__vite__mapDeps([53,1,27,46,49,8]))),$d=(0,k.lazy)(()=>ze(()=>import(`./mock-editor-panel-t4TDXeaR.js`).then(e=>({default:e.MockEditorPanel})),__vite__mapDeps([26,1,10,2,5,11,23,12,6,13,4,24,14,27,16,25,17,28,8,20]))),ef=(0,k.lazy)(()=>ze(()=>import(`./route-preview-CLJeg_9v.js`).then(e=>({default:e.RoutePreview})),__vite__mapDeps([54,1,36]))),tf=(0,k.lazy)(()=>ze(()=>import(`./rule-overview-panel-CB9b-b0t.js`).then(e=>({default:e.RuleOverviewPanel})),__vite__mapDeps([55,1,2,32,15,19]))),nf=(0,k.lazy)(()=>ze(()=>import(`./mobile-proxy-panel-a09S-R79.js`).then(e=>({default:e.MobileProxyPanel})),__vite__mapDeps([56,1,2,13,40,32,41,45,57,16,46,42]))),rf=(0,k.lazy)(()=>ze(()=>import(`./health-panel-CSV7OqBv.js`).then(e=>({default:e.HealthPanel})),__vite__mapDeps([58,1,2,31,11,38,39,32,41,57,46,19])));function af(){return(0,N.jsxs)(`div`,{className:`flex flex-col gap-3 p-6`,"aria-label":`加载中`,children:[(0,N.jsx)(Ai,{className:`h-5 w-32`}),(0,N.jsx)(Ai,{className:`h-9 w-full`}),(0,N.jsx)(Ai,{className:`h-64 w-full`})]})}function of(){let e=wd(),t=e.fetchPlugins,n=Zt(),r=Jt(),{filterText:i,setFilterText:a,resourceTypeFilter:o,setResourceTypeFilter:s,clientSourceFilter:c,setClientSourceFilter:l,filteredRecords:u}=Od(e.records),[d,f]=(0,k.useState)(!0),[p,m]=(0,k.useState)(!0),h=yu(r.pathname),g=xu(h),_=bl(`(max-width: 900px)`),v=e=>{n(bu(e))},y=(0,k.useCallback)(t=>{e.closeDetail(),n(`/config`),window.setTimeout(()=>{window.dispatchEvent(new CustomEvent(`route-rule:highlight`,{detail:{pattern:t.source,target:t.target}}))},120)},[n,e]),b=(0,k.useCallback)(t=>{let r=Nd(t);e.closeDetail(),n(`/mock`),window.setTimeout(()=>{window.dispatchEvent(new CustomEvent(Pd,{detail:{initialData:r}}))},120)},[n,e]),x=(0,k.useCallback)(async t=>{let n=await e.replayRequest(t);return e.fetchDetail(n.recordId),n},[e]),C=(0,k.useCallback)(()=>{window.dispatchEvent(new CustomEvent(`global-panel:open-command`))},[]),ee=(0,k.useCallback)(e=>{window.dispatchEvent(new CustomEvent(`global-panel:open-panel`,{detail:e}))},[]),te=(0,k.useCallback)(t=>{if(e.selectedRecordId===t){e.closeDetail();return}e.fetchDetail(t),_&&ee({id:`request.detail`,title:`请求详情`,size:`lg`})},[_,ee,e]),ne=(0,k.useCallback)(t=>[{id:`nav.logs`,title:`打开日志`,section:`导航`,icon:qr,keywords:[`logs`,`请求`],run:()=>n(`/logs`)},{id:`nav.rules`,title:`打开路由规则`,section:`导航`,icon:Wr,keywords:[`rules`,`config`],run:()=>n(`/config`)},{id:`nav.mock`,title:`打开 Mock`,section:`导航`,icon:Rr,keywords:[`mock`],run:()=>n(`/mock`)},{id:`nav.plugins`,title:`打开扩展插件`,section:`导航`,icon:ui,keywords:[`plugin`,`plugins`],run:()=>n(`/plugins`)},{id:`nav.health`,title:`打开运行健康`,section:`导航`,icon:Or,keywords:[`health`,`健康`,`watchdog`,`运行状态`],run:()=>n(`/health`)},{id:`panel.settings`,title:`打开系统设置`,description:`偏好、配置文件、AI 配置`,section:`全局`,icon:gi,keywords:[`settings`,`配置`,`AI`],closeOnRun:!1,run:()=>t.openPanel({id:`settings`,title:`系统设置`,description:`管理系统偏好、配置和 AI 功能`,size:`lg`})},{id:`panel.mobile-proxy`,title:`打开手机代理二维码`,description:`扫码配置手机代理并安装 HTTPS 根证书`,section:`全局`,icon:fi,keywords:[`手机`,`二维码`,`QR`,`remote`,`proxy`],closeOnRun:!1,run:()=>t.openPanel({id:`mobile-proxy`,title:`手机代理`,description:`扫描二维码,在手机上配置代理与 HTTPS 证书`,size:`md`})},{id:`logs.focus-filter`,title:`聚焦日志过滤器`,description:`输入 method:GET、domain:example.com 或关键词筛选请求`,section:`日志`,icon:hi,run:()=>{n(`/logs`),window.setTimeout(()=>document.getElementById(`proxy-log-filter`)?.focus(),50)}},{id:`logs.toggle-recording`,title:d?`暂停记录日志`:`恢复记录日志`,section:`日志`,icon:d?si:li,run:()=>f(e=>!e)},{id:`logs.clear`,title:`清空日志`,section:`日志`,icon:S,danger:!0,confirm:`确定要清空当前日志列表吗?`,run:e.clearRecords},{id:`logs.toggle-auto-scroll`,title:p?`关闭自动滚动`:`开启自动滚动`,section:`日志`,icon:Qr,run:()=>m(e=>!e)},...[{value:`all`,label:`全部资源`},{value:`fetch`,label:`Fetch/XHR`},{value:`doc`,label:`Doc`},{value:`css`,label:`CSS`},{value:`js`,label:`JS`},{value:`font`,label:`Font`},{value:`img`,label:`图片`},{value:`media`,label:`媒体`},{value:`manifest`,label:`Manifest`},{value:`websocket`,label:`WebSocket`},{value:`wasm`,label:`Wasm`},{value:`other`,label:`其他资源`}].map(e=>({id:`logs.resource.${e.value}`,title:`日志只看:${e.label}`,section:`日志`,icon:Kr,keywords:[`资源类型`,e.value],run:()=>{n(`/logs`),s(e.value)}})),{id:`request.detail`,title:`打开当前请求详情`,section:`日志`,icon:Wr,disabled:e.selectedRecordId==null,disabledReason:`请先在日志表里选择一条请求`,closeOnRun:!1,run:()=>t.openPanel({id:`request.detail`,title:`请求详情`,size:`lg`})},{id:`request.replay`,title:`重放当前请求`,section:`日志`,icon:pi,disabled:e.selectedRecordId==null,disabledReason:`请先在日志表里选择一条请求`,run:async()=>{e.selectedRecordId!=null&&await x(e.selectedRecordId)}},{id:`rules.ai`,title:`打开 AI 规则助手`,section:`路由规则`,icon:_i,keywords:[`AI`,`生成规则`,`合并规则`],closeOnRun:!1,run:()=>t.openPanel({id:`rules.ai`,title:`AI 规则助手`,description:`用自然语言生成规则,或安全合并当前配置`,size:`md`})},{id:`rules.preview`,title:`预览 URL 转发结果`,description:`输入 URL,使用当前规则计算真实转发地址`,section:`路由规则`,icon:hi,keywords:[`URL`,`preview`,`route`,`转发`,`预览`],closeOnRun:!1,run:()=>{t.openPanel({id:`rules.preview`,title:`URL 预览`,description:`使用当前编辑中的规则计算真实转发地址`,size:`md`})}},{id:`rules.overview`,title:`查看所有规则`,description:`总览全部规则文件与代理实际生效的路由规则`,section:`路由规则`,icon:Zr,keywords:[`全部`,`总览`,`overview`,`rules`,`生效`,`冲突`,`覆盖`],closeOnRun:!1,run:()=>{t.openPanel({id:`rules.overview`,title:`全局规则总览`,description:`总览全部规则文件与代理实际生效的路由规则`,size:`lg`})}},{id:`rules.add`,title:`添加路由规则`,section:`路由规则`,icon:Ur,disabled:!e.activeFileName,disabledReason:`请先选择或创建一个规则文件`,run:()=>{n(`/config`),e.setRules(e=>[{enabled:!0,rule:``,target:``,exclusions:[]},...e])}},{id:`rules.save`,title:`保存当前规则文件`,description:e.activeFileName?`保存 ${e.activeFileName}`:void 0,section:`路由规则`,icon:mi,disabled:!e.activeFileName,disabledReason:`请先选择一个规则文件`,run:async()=>{if(!e.activeFileName)return;let t=!1;try{t=await e.saveFileContent(e.activeFileName,e.rules)}catch(e){De.error(e instanceof Error?e.message:`规则保存失败`);return}t?(await e.fetchRuleFiles(),De.success(`规则保存成功`)):De.error(`规则保存失败`)}},{id:`rules.create-file`,title:`创建规则文件`,section:`路由规则`,icon:Ur,run:async()=>{let t=window.prompt(`请输入规则文件名称`);if(!t?.trim())return;let r=await e.createRuleFile(t.trim());r.success?(n(`/config`),await e.fetchFileContent(t.trim())):r.error&&window.alert(r.error)}},...e.ruleFiles.map(t=>({id:`rules.file.open.${t.name}`,title:`打开规则文件:${t.name}`,description:`${t.ruleCount} 条规则 · ${t.enabled?`已启用`:`未启用`}`,section:`规则文件`,icon:Wr,keywords:[`规则文件`,t.name],run:async()=>{n(`/config`),await e.fetchFileContent(t.name)}})),...e.ruleFiles.map(t=>({id:`rules.file.toggle.${t.name}`,title:`${t.enabled?`禁用`:`启用`}规则文件:${t.name}`,section:`规则文件`,icon:di,keywords:[`规则文件`,t.name,`启用`,`禁用`],run:async()=>{await e.toggleRuleFile(t.name,!t.enabled)}})),...e.ruleFiles.map(t=>({id:`rules.file.delete.${t.name}`,title:`删除规则文件:${t.name}`,section:`规则文件`,icon:S,danger:!0,confirm:`确定要删除规则文件「${t.name}」吗?`,keywords:[`规则文件`,t.name,`删除`],run:async()=>{await e.deleteRuleFile(t.name)}})),{id:`mock.create`,title:`新建 Mock 规则`,section:`Mock`,icon:Rr,keywords:[`mock`,`新增规则`],closeOnRun:!1,run:()=>t.openPanel({id:`mock.create`,title:`新建 Mock 规则`,size:`lg`})},...e.mockRules.map(e=>({id:`mock.edit.${e.id}`,title:`编辑 Mock:${e.name||e.urlPattern}`,description:`${e.method||`*`} ${e.urlPattern}`,section:`Mock`,icon:ci,keywords:[`mock`,e.name,e.urlPattern],closeOnRun:!1,run:()=>t.openPanel({id:`mock.edit`,title:`编辑 Mock:${e.name||e.urlPattern}`,size:`lg`,params:{id:e.id}})})),...e.mockRules.map(t=>({id:`mock.toggle.${t.id}`,title:`${t.enabled?`禁用`:`启用`} Mock:${t.name||t.urlPattern}`,description:`${t.method||`*`} ${t.urlPattern}`,section:`Mock`,icon:di,keywords:[`mock`,t.name,t.urlPattern,`启用`,`禁用`],run:async()=>{await e.updateMock(t.id,{enabled:!t.enabled}),await e.fetchMocks()}})),...e.mockRules.map(t=>({id:`mock.delete.${t.id}`,title:`删除 Mock:${t.name||t.urlPattern}`,description:`${t.method||`*`} ${t.urlPattern}`,section:`Mock`,icon:S,danger:!0,confirm:`确定要删除 Mock「${t.name||t.urlPattern}」吗?`,keywords:[`mock`,t.name,t.urlPattern,`删除`],run:async()=>{await e.deleteMock(t.id),await e.fetchMocks()}})),{id:`mock.refresh`,title:`刷新 Mock 列表`,section:`Mock`,icon:pi,run:e.fetchMocks},{id:`plugins.mode.off`,title:`关闭插件模式`,section:`插件`,icon:di,keywords:[`plugin`,`plugins`,`mode`,`off`,`插件模式`],run:()=>e.switchPluginMode(`off`)},{id:`plugins.mode.on`,title:`开启插件模式`,section:`插件`,icon:ui,keywords:[`plugin`,`plugins`,`mode`,`on`,`插件模式`],run:()=>e.switchPluginMode(`on`)},{id:`plugins.mode.shadow`,title:`切换到插件影子模式`,section:`插件`,icon:_i,keywords:[`plugin`,`plugins`,`mode`,`shadow`,`插件模式`,`影子模式`],run:()=>e.switchPluginMode(`shadow`)},{id:`plugins.generate`,title:`AI 生成插件`,section:`插件`,icon:Mr,keywords:[`plugin`,`plugins`,`generate`,`AI`,`插件生成`],closeOnRun:!1,run:()=>t.openPanel({id:`plugin.generate`,title:`AI 插件生成器`,size:`xl`})},{id:`plugins.reload`,title:`热加载插件`,section:`插件`,icon:pi,keywords:[`plugin`,`plugins`,`reload`,`hot reload`,`热加载`],run:async()=>{await fetch(`/api/plugins/reload`,{method:`POST`}),await e.fetchPlugins()}},...e.plugins.map(t=>({id:`plugins.runtime.${t.state===`running`?`stop`:`start`}.${t.id}`,title:`${t.state===`running`?`停止`:`启动`}插件:${t.name}`,description:`${t.version} · ${t.hooks.join(`, `)||`无 hooks`}`,section:`插件`,icon:t.state===`running`?vi:li,keywords:[`插件`,t.name,t.id,...t.hooks],run:async()=>{t.state===`running`?await e.stopPlugin(t.id):await e.startPlugin(t.id),await e.fetchPlugins()}})),...e.plugins.filter(e=>Hd(e)&&!!Ud(e)).map(e=>{let n=Ud(e);return{id:`plugins.edit.${e.id}`,title:`编辑插件代码:${e.name}`,description:n,section:`插件`,icon:zr,keywords:[`插件`,`代码`,e.name,e.id,n],closeOnRun:!1,run:()=>t.openPanel({id:`plugin.code`,title:`编辑插件代码:${n}`,size:`xl`,params:{filename:n}})}}),...e.plugins.filter(e=>Hd(e)&&!!Ud(e)).map(e=>({id:`plugins.test.${e.id}`,title:`测试插件:${e.name}`,description:e.hooks.join(`, `)||`无 hooks`,section:`插件`,icon:xi,keywords:[`插件`,`测试`,e.name,e.id,...e.hooks],closeOnRun:!1,run:()=>t.openPanel({id:`plugin.test`,title:`测试插件:${e.name}`,size:`xl`,params:{pluginId:e.id,pluginName:e.name,hooks:e.hooks,filename:Ud(e)}})})),...e.plugins.map(t=>({id:`plugins.toggle.${t.id}`,title:`${t.state===`disabled`?`启用`:`禁用`}插件:${t.name}`,description:t.id,section:`插件`,icon:di,keywords:[`插件`,t.name,t.id,`启用`,`禁用`],run:async()=>{await e.togglePlugin(t.id,t.state===`disabled`),await e.fetchPlugins()}})),{id:`plugins.third-party.load`,title:`加载第三方插件`,section:`插件`,icon:Ci,keywords:[`plugin`,`plugins`,`third party`,`load`,`第三方插件`],run:async()=>{let t=window.prompt(`请输入第三方插件路径`);t?.trim()&&(await e.loadThirdPartyPlugin(t.trim()),await e.fetchThirdPartyPlugins())}},...e.thirdPartyPlugins.map(t=>({id:`plugins.third-party.unload.${t.id}`,title:`卸载第三方插件:${t.name}`,description:t.id,section:`插件`,icon:S,danger:!0,confirm:`确定要卸载第三方插件「${t.name}」吗?`,keywords:[`第三方插件`,t.name,t.id,`卸载`],run:async()=>{await e.unloadThirdPartyPlugin(t.id),await e.fetchThirdPartyPlugins()}})),{id:`settings.theme`,title:`主题与缩放设置`,section:`设置`,icon:Pr,keywords:[`settings`,`theme`,`zoom`,`主题`,`缩放`],closeOnRun:!1,run:()=>{n(`/settings`)}}],[p,x,n,d,s,e]),re=(0,k.useCallback)((t,r)=>{switch(t.id){case`settings`:return(0,N.jsx)(Jd,{embedded:!0});case`mobile-proxy`:return(0,N.jsx)(nf,{});case`request.detail`:return(0,N.jsx)(qd,{embedded:!0,detail:e.recordDetail,loading:e.detailLoading,error:e.detailError,selectedRecord:e.records.find(t=>t.id===e.selectedRecordId),onCreateMock:b,onReplay:x,onJumpToRule:y});case`plugin.generate`:return(0,N.jsx)(Yd,{embedded:!0,onOpenChange:e=>{e||r.close()},onPluginSaved:async()=>{await e.fetchPlugins()}});case`mock.create`:return(0,N.jsx)($d,{initialData:t.params?.initialData,createMock:e.createMock,updateMock:e.updateMock,onSaved:()=>{e.fetchMocks(),r.close()}});case`mock.edit`:{let n=Number(t.params?.id),i=e.mockRules.find(e=>e.id===n);return i?(0,N.jsx)($d,{rule:i,createMock:e.createMock,updateMock:e.updateMock,onSaved:()=>{e.fetchMocks(),r.close()}}):(0,N.jsx)(`div`,{className:`flex h-full items-center justify-center p-6 text-sm text-muted-foreground`,children:`没有找到这条 Mock 规则`})}case`plugin.code`:return(0,N.jsx)(Xd,{embedded:!0,filename:String(t.params?.filename||``),onOpenChange:e=>{e||r.close()},onSaved:e.fetchPlugins});case`plugin.test`:return(0,N.jsx)(Zd,{embedded:!0,pluginId:String(t.params?.pluginId||``),pluginName:String(t.params?.pluginName||``),hooks:Array.isArray(t.params?.hooks)?t.params.hooks:[],filename:typeof t.params?.filename==`string`?t.params.filename:void 0,onOpenChange:e=>{e||r.close()},onPluginFixed:e.fetchPlugins});case`rules.ai`:return(0,N.jsx)(Qd,{rules:e.rules,setRules:e.setRules,ruleFiles:e.ruleFiles,activeFileName:e.activeFileName,fetchRuleFileRawContent:e.fetchRuleFileRawContent});case`rules.preview`:return(0,N.jsx)(ef,{embedded:!0,rules:e.rules,activeFileName:e.activeFileName,onRevealRule:e=>{r.close(),n(`/config`),window.setTimeout(()=>{window.dispatchEvent(new CustomEvent(`route-rule:highlight`,{detail:{pattern:e.pattern,target:e.target}}))},120)}});case`rules.overview`:return(0,N.jsx)(tf,{rules:e.rules,activeFileName:e.activeFileName,onLocateRule:(t,i,a)=>{r.close(),n(`/config`),e.fetchFileContent(t).then(()=>{window.setTimeout(()=>{window.dispatchEvent(new CustomEvent(`route-rule:highlight`,{detail:{pattern:i,target:a}}))},120)})},onSelectFile:t=>{r.close(),n(`/config`),e.fetchFileContent(t)}});default:return(0,N.jsx)(`div`,{className:`flex h-full items-center justify-center p-6 text-sm text-muted-foreground`,children:`未找到这个面板`})}},[b,y,x,n,e]),w=u;return(0,k.useEffect)(()=>{t()},[t]),(0,N.jsx)(zd,{commands:ne,renderPanel:(e,t)=>(0,N.jsx)(k.Suspense,{fallback:(0,N.jsx)(af,{}),children:re(e,t)}),children:(0,N.jsxs)(`div`,{className:`flex h-dvh flex-col overflow-hidden bg-muted/20`,children:[(0,N.jsx)(Ou,{onCommandClick:C}),(0,N.jsx)(Lu,{}),(0,N.jsxs)(`main`,{className:`app-shell-main`,children:[(0,N.jsx)(Du,{activeTab:h,onTabChange:v,mockEnabledCount:e.mockRules.filter(e=>e.enabled).length}),g===`work`?(0,N.jsx)(`div`,{"data-testid":`shell-work`,"data-shell-mode":`work`,className:`mt-[var(--ui-section-gap)] flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden`,children:(0,N.jsx)(wi,{"data-testid":`log-panel-card`,className:`flex h-full min-h-0 flex-1 flex-col gap-0 overflow-hidden py-0 shadow-none`,children:(0,N.jsx)(xl,{detailOpen:e.selectedRecordId!=null,master:(0,N.jsxs)(`div`,{className:`app-page-pad flex min-h-0 flex-1 flex-col overflow-hidden`,children:[(0,N.jsxs)(`div`,{className:`shrink-0 border-b pb-[var(--ui-section-gap)]`,children:[(0,N.jsx)(`span`,{className:`sr-only`,children:`请求日志`}),(0,N.jsx)(Ec,{filterText:i,setFilterText:a,resourceTypeFilter:o,setResourceTypeFilter:s,clientSourceFilter:c,setClientSourceFilter:l,totalCount:e.records.length,filteredCount:u.length,onClear:e.clearRecords,recording:d,onToggleRecording:()=>f(e=>!e)})]}),(0,N.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-hidden`,children:(0,N.jsx)(ml,{records:w,selectedRecordId:e.selectedRecordId,onSelect:te,autoScroll:p})})]}),detail:(0,N.jsx)(k.Suspense,{fallback:(0,N.jsx)(af,{}),children:(0,N.jsx)(qd,{embedded:!0,onClose:e.closeDetail,detail:e.recordDetail,loading:e.detailLoading,error:e.detailError,selectedRecord:e.records.find(t=>t.id===e.selectedRecordId),onCreateMock:b,onReplay:x,onJumpToRule:y})})})})}):(0,N.jsx)(`div`,{"data-testid":`shell-config`,"data-shell-mode":`config`,className:`mt-[var(--ui-section-gap)] flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden`,children:(0,N.jsxs)(wi,{className:`h-full min-h-0 w-full flex-1 gap-0 overflow-hidden rounded-b-none py-0`,children:[h===`config`&&(0,N.jsx)(`div`,{"data-testid":`config-page-rules`,className:`mt-0 flex min-h-0 flex-1 flex-col overflow-hidden`,children:(0,N.jsx)(k.Suspense,{fallback:(0,N.jsx)(af,{}),children:(0,N.jsx)(Wd,{rules:e.rules,setRules:e.setRules,ruleFiles:e.ruleFiles,activeFileName:e.activeFileName,fetchRuleFiles:e.fetchRuleFiles,fetchFileContent:e.fetchFileContent,fetchRuleFileRawContent:e.fetchRuleFileRawContent,saveRuleFileRawContent:e.saveRuleFileRawContent,saveFileContent:e.saveFileContent,createRuleFile:e.createRuleFile,toggleRuleFile:e.toggleRuleFile,renameRuleFile:e.renameRuleFile,deleteRuleFile:e.deleteRuleFile,reorderRuleFiles:e.reorderRuleFiles,setRuleFileReadonly:e.setRuleFileReadonly})})}),h===`mock`&&(0,N.jsx)(`div`,{"data-testid":`config-page-mock`,className:`mt-0 flex min-h-0 flex-1 flex-col overflow-hidden`,children:(0,N.jsx)(k.Suspense,{fallback:(0,N.jsx)(af,{}),children:(0,N.jsx)(Gd,{mockRules:e.mockRules,fetchMocks:e.fetchMocks,createMock:e.createMock,updateMock:e.updateMock,deleteMock:e.deleteMock})})}),h===`plugins`&&(0,N.jsx)(`div`,{"data-testid":`config-page-plugins`,className:`mt-0 flex min-h-0 flex-1 flex-col overflow-hidden`,children:(0,N.jsx)(k.Suspense,{fallback:(0,N.jsx)(af,{}),children:(0,N.jsx)(Kd,{plugins:e.plugins,pluginMode:e.pluginMode,switchPluginMode:e.switchPluginMode,fetchPlugins:e.fetchPlugins,startPlugin:e.startPlugin,stopPlugin:e.stopPlugin,togglePlugin:e.togglePlugin,thirdPartyPlugins:e.thirdPartyPlugins,thirdPartySecurity:e.thirdPartySecurity,fetchThirdPartyPlugins:e.fetchThirdPartyPlugins,loadThirdPartyPlugin:e.loadThirdPartyPlugin,unloadThirdPartyPlugin:e.unloadThirdPartyPlugin})})}),h===`health`&&(0,N.jsx)(`div`,{"data-testid":`config-page-health`,className:`meddle-thin-scroll mt-0 min-h-0 flex-1 overflow-y-auto`,children:(0,N.jsx)(k.Suspense,{fallback:(0,N.jsx)(af,{}),children:(0,N.jsx)(rf,{})})}),h===`settings`&&(0,N.jsx)(`div`,{"data-testid":`config-page-settings`,className:`meddle-thin-scroll mt-0 flex min-h-0 flex-1 flex-col overflow-hidden`,children:(0,N.jsx)(k.Suspense,{fallback:(0,N.jsx)(af,{}),children:(0,N.jsx)(Jd,{embedded:!0})})}),h===`mobile`&&(0,N.jsx)(`div`,{"data-testid":`config-page-mobile`,className:`meddle-thin-scroll mt-0 min-h-0 flex-1 overflow-y-auto`,children:(0,N.jsx)(k.Suspense,{fallback:(0,N.jsx)(af,{}),children:(0,N.jsx)(nf,{})})})]})})]})]})})}function sf({position:e=`bottom-right`,duration:t=ke,...n}){let{resolvedTheme:r}=mu();return(0,N.jsx)(Oe,{theme:r,position:e,duration:t,expand:!0,closeButton:!0,gap:10,visibleToasts:4,offset:16,mobileOffset:12,swipeDirections:[`right`],className:`toaster group`,icons:{success:(0,N.jsx)(Ir,{className:`size-4`}),info:(0,N.jsx)(Xr,{className:`size-4`}),warning:(0,N.jsx)(Si,{className:`size-4`}),error:(0,N.jsx)(ni,{className:`size-4`}),loading:(0,N.jsx)($r,{className:`size-4 animate-spin`}),close:(0,N.jsx)(ae,{className:`size-3`})},toastOptions:{unstyled:!0,closeButtonAriaLabel:`关闭通知`,style:{"--system-toast-duration":`${ke}ms`},classNames:{toast:`system-toast`,content:`system-toast-content`,title:`system-toast-title`,description:`system-toast-description`,icon:`system-toast-icon`,closeButton:`system-toast-close`,actionButton:`system-toast-action`,cancelButton:`system-toast-cancel`,success:`system-toast-success`,info:`system-toast-info`,warning:`system-toast-warning`,error:`system-toast-error`,loading:`system-toast-loading`,default:`system-toast-default`}},...n})}function cf({children:e}){let t=(0,k.useRef)(new Map),n=(0,k.useRef)(0),r=(0,k.useCallback)(e=>{t.current.set(e,{order:n.current++})},[]),i=(0,k.useCallback)((e,i)=>{t.current.get(e)||r(e);let a=t.current.get(e);a&&(!a.registration?.active&&i.active&&(a.order=n.current++),a.registration=i)},[r]),a=(0,k.useCallback)(e=>{t.current.delete(e)},[]);(0,k.useEffect)(()=>{let e=e=>{if(e.isComposing||e.repeat||!(e.metaKey||e.ctrlKey)||e.key.toLowerCase()!==`s`)return;let n=[...t.current.values()].filter(e=>!!e.registration?.active).sort((e,t)=>t.registration.priority-e.registration.priority||t.order-e.order)[0];n&&(e.preventDefault(),e.stopPropagation(),n.registration.enabled&&n.registration.onSave())};return window.addEventListener(`keydown`,e,{capture:!0}),()=>window.removeEventListener(`keydown`,e,{capture:!0})},[]);let o=(0,k.useMemo)(()=>({register:r,update:i,unregister:a}),[r,a,i]);return(0,N.jsx)(eu.Provider,{value:o,children:e})}(0,Pe.createRoot)(document.getElementById(`root`)).render((0,N.jsx)(k.StrictMode,{children:(0,N.jsxs)(pu,{defaultTheme:`light`,storageKey:`theme`,children:[(0,N.jsx)(cf,{children:(0,N.jsx)(sr,{children:(0,N.jsx)(of,{})})}),(0,N.jsx)(sf,{})]})}));export{Ai as $,El as A,Mr as At,Kc as B,Y as C,Zr as Ct,Al as D,Hr as Dt,Ol as E,Wr as Et,tl as F,vc as G,Yc as H,Qc as I,yc as J,Sc as K,Gc as L,Tl as M,Or as Mt,bl as N,ze as Nt,kl as O,zr as Ot,nl as P,ji as Q,Zc as R,ql as S,Qr as St,J as T,Kr as Tt,_c as U,Jc as V,xc as W,gc as X,hc as Y,fc as Z,$l as _,di as _t,vd as a,Ei as at,Hl as b,ei as bt,Zu as c,bi as ct,mu as d,_i as dt,wi as et,su as f,gi as ft,tu as g,fi as gt,nu as h,pi as ht,Pd as i,Ti as it,wl as j,Ar as jt,Sl as k,Ir as kt,Qu as l,yi as lt,cu as m,mi as mt,Vd as n,ki as nt,Xu as o,Si as ot,au as p,hi as pt,bc as q,Fd as r,Di as rt,Yu as s,xi as st,Ud as t,Oi as tt,sd as u,vi as ut,Xl as v,li as vt,Kl as w,qr as wt,Gl as x,$r as xt,Jl as y,ti as yt,Xc as z};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as e,d as t,f as n,p as r,t as i,u as a}from"./button-BFNlGZ5p.js";import"./dist-CFZ4xMSF.js";import{t as o}from"./check-BkfHQ6re.js";import{t as s}from"./copy-BRnscYy1.js";import{t as c}from"./refresh-cw-BfLoHqg5.js";import{t as l}from"./shield-check-hQXjdfZ7.js";import{t as u}from"./smartphone-D4Q7cQfm.js";import{t as d}from"./wifi-Cjj_Br1u.js";import{n as f}from"./toast-9yeTf7d9.js";import{$ as p,Dt as m,Q as h,X as g,Y as _,Z as v,at as y,et as b,gt as x,it as S,nt as C,rt as w,tt as ee,wt as T,xt as E}from"./index-
|
|
1
|
+
import{c as e,d as t,f as n,p as r,t as i,u as a}from"./button-BFNlGZ5p.js";import"./dist-CFZ4xMSF.js";import{t as o}from"./check-BkfHQ6re.js";import{t as s}from"./copy-BRnscYy1.js";import{t as c}from"./refresh-cw-BfLoHqg5.js";import{t as l}from"./shield-check-hQXjdfZ7.js";import{t as u}from"./smartphone-D4Q7cQfm.js";import{t as d}from"./wifi-Cjj_Br1u.js";import{n as f}from"./toast-9yeTf7d9.js";import{$ as p,Dt as m,Q as h,X as g,Y as _,Z as v,at as y,et as b,gt as x,it as S,nt as C,rt as w,tt as ee,wt as T,xt as E}from"./index-CSXxaYkG.js";import{t as D}from"./clipboard-Bt1qY01V.js";import{n as O,r as k,t as A}from"./alert-B514Frte.js";var j=a(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]),M=a(`shield-off`,[[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M5 5a1 1 0 0 0-1 1v7c0 5 3.5 7.5 7.67 8.94a1 1 0 0 0 .67.01c2.35-.82 4.48-1.97 5.9-3.71`,key:`1jlk70`}],[`path`,{d:`M9.309 3.652A12.252 12.252 0 0 0 11.24 2.28a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1v7a9.784 9.784 0 0 1-.08 1.264`,key:`18rp1v`}]]),N=n(((e,t)=>{t.exports=function(){return typeof Promise==`function`&&Promise.prototype&&Promise.prototype.then}})),P=n((e=>{var t,n=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];e.getSymbolSize=function(e){if(!e)throw Error(`"version" cannot be null or undefined`);if(e<1||e>40)throw Error(`"version" should be in range from 1 to 40`);return e*4+17},e.getSymbolTotalCodewords=function(e){return n[e]},e.getBCHDigit=function(e){let t=0;for(;e!==0;)t++,e>>>=1;return t},e.setToSJISFunction=function(e){if(typeof e!=`function`)throw Error(`"toSJISFunc" is not a valid function.`);t=e},e.isKanjiModeEnabled=function(){return t!==void 0},e.toSJIS=function(e){return t(e)}})),F=n((e=>{e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function t(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`l`:case`low`:return e.L;case`m`:case`medium`:return e.M;case`q`:case`quartile`:return e.Q;case`h`:case`high`:return e.H;default:throw Error(`Unknown EC Level: `+t)}}e.isValid=function(e){return e&&e.bit!==void 0&&e.bit>=0&&e.bit<4},e.from=function(n,r){if(e.isValid(n))return n;try{return t(n)}catch{return r}}})),I=n(((e,t)=>{function n(){this.buffer=[],this.length=0}n.prototype={get:function(e){let t=Math.floor(e/8);return(this.buffer[t]>>>7-e%8&1)==1},put:function(e,t){for(let n=0;n<t;n++)this.putBit((e>>>t-n-1&1)==1)},getLengthInBits:function(){return this.length},putBit:function(e){let t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}},t.exports=n})),L=n(((e,t)=>{function n(e){if(!e||e<1)throw Error(`BitMatrix size must be defined and greater than 0`);this.size=e,this.data=new Uint8Array(e*e),this.reservedBit=new Uint8Array(e*e)}n.prototype.set=function(e,t,n,r){let i=e*this.size+t;this.data[i]=n,r&&(this.reservedBit[i]=!0)},n.prototype.get=function(e,t){return this.data[e*this.size+t]},n.prototype.xor=function(e,t,n){this.data[e*this.size+t]^=n},n.prototype.isReserved=function(e,t){return this.reservedBit[e*this.size+t]},t.exports=n})),R=n((e=>{var t=P().getSymbolSize;e.getRowColCoords=function(e){if(e===1)return[];let n=Math.floor(e/7)+2,r=t(e),i=r===145?26:Math.ceil((r-13)/(2*n-2))*2,a=[r-7];for(let e=1;e<n-1;e++)a[e]=a[e-1]-i;return a.push(6),a.reverse()},e.getPositions=function(t){let n=[],r=e.getRowColCoords(t),i=r.length;for(let e=0;e<i;e++)for(let t=0;t<i;t++)e===0&&t===0||e===0&&t===i-1||e===i-1&&t===0||n.push([r[e],r[t]]);return n}})),z=n((e=>{var t=P().getSymbolSize,n=7;e.getPositions=function(e){let r=t(e);return[[0,0],[r-n,0],[0,r-n]]}})),B=n((e=>{e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var t={N1:3,N2:3,N3:40,N4:10};e.isValid=function(e){return e!=null&&e!==``&&!isNaN(e)&&e>=0&&e<=7},e.from=function(t){return e.isValid(t)?parseInt(t,10):void 0},e.getPenaltyN1=function(e){let n=e.size,r=0,i=0,a=0,o=null,s=null;for(let c=0;c<n;c++){i=a=0,o=s=null;for(let l=0;l<n;l++){let n=e.get(c,l);n===o?i++:(i>=5&&(r+=t.N1+(i-5)),o=n,i=1),n=e.get(l,c),n===s?a++:(a>=5&&(r+=t.N1+(a-5)),s=n,a=1)}i>=5&&(r+=t.N1+(i-5)),a>=5&&(r+=t.N1+(a-5))}return r},e.getPenaltyN2=function(e){let n=e.size,r=0;for(let t=0;t<n-1;t++)for(let i=0;i<n-1;i++){let n=e.get(t,i)+e.get(t,i+1)+e.get(t+1,i)+e.get(t+1,i+1);(n===4||n===0)&&r++}return r*t.N2},e.getPenaltyN3=function(e){let n=e.size,r=0,i=0,a=0;for(let t=0;t<n;t++){i=a=0;for(let o=0;o<n;o++)i=i<<1&2047|e.get(t,o),o>=10&&(i===1488||i===93)&&r++,a=a<<1&2047|e.get(o,t),o>=10&&(a===1488||a===93)&&r++}return r*t.N3},e.getPenaltyN4=function(e){let n=0,r=e.data.length;for(let t=0;t<r;t++)n+=e.data[t];return Math.abs(Math.ceil(n*100/r/5)-10)*t.N4};function n(t,n,r){switch(t){case e.Patterns.PATTERN000:return(n+r)%2==0;case e.Patterns.PATTERN001:return n%2==0;case e.Patterns.PATTERN010:return r%3==0;case e.Patterns.PATTERN011:return(n+r)%3==0;case e.Patterns.PATTERN100:return(Math.floor(n/2)+Math.floor(r/3))%2==0;case e.Patterns.PATTERN101:return n*r%2+n*r%3==0;case e.Patterns.PATTERN110:return(n*r%2+n*r%3)%2==0;case e.Patterns.PATTERN111:return(n*r%3+(n+r)%2)%2==0;default:throw Error(`bad maskPattern:`+t)}}e.applyMask=function(e,t){let r=t.size;for(let i=0;i<r;i++)for(let a=0;a<r;a++)t.isReserved(a,i)||t.xor(a,i,n(e,a,i))},e.getBestMask=function(t,n){let r=Object.keys(e.Patterns).length,i=0,a=1/0;for(let o=0;o<r;o++){n(o),e.applyMask(o,t);let r=e.getPenaltyN1(t)+e.getPenaltyN2(t)+e.getPenaltyN3(t)+e.getPenaltyN4(t);e.applyMask(o,t),r<a&&(a=r,i=o)}return i}})),V=n((e=>{var t=F(),n=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],r=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];e.getBlocksCount=function(e,r){switch(r){case t.L:return n[(e-1)*4+0];case t.M:return n[(e-1)*4+1];case t.Q:return n[(e-1)*4+2];case t.H:return n[(e-1)*4+3];default:return}},e.getTotalCodewordsCount=function(e,n){switch(n){case t.L:return r[(e-1)*4+0];case t.M:return r[(e-1)*4+1];case t.Q:return r[(e-1)*4+2];case t.H:return r[(e-1)*4+3];default:return}}})),H=n((e=>{var t=new Uint8Array(512),n=new Uint8Array(256);(function(){let e=1;for(let r=0;r<255;r++)t[r]=e,n[e]=r,e<<=1,e&256&&(e^=285);for(let e=255;e<512;e++)t[e]=t[e-255]})(),e.log=function(e){if(e<1)throw Error(`log(`+e+`)`);return n[e]},e.exp=function(e){return t[e]},e.mul=function(e,r){return e===0||r===0?0:t[n[e]+n[r]]}})),U=n((e=>{var t=H();e.mul=function(e,n){let r=new Uint8Array(e.length+n.length-1);for(let i=0;i<e.length;i++)for(let a=0;a<n.length;a++)r[i+a]^=t.mul(e[i],n[a]);return r},e.mod=function(e,n){let r=new Uint8Array(e);for(;r.length-n.length>=0;){let e=r[0];for(let i=0;i<n.length;i++)r[i]^=t.mul(n[i],e);let i=0;for(;i<r.length&&r[i]===0;)i++;r=r.slice(i)}return r},e.generateECPolynomial=function(n){let r=new Uint8Array([1]);for(let i=0;i<n;i++)r=e.mul(r,new Uint8Array([1,t.exp(i)]));return r}})),W=n(((e,t)=>{var n=U();function r(e){this.genPoly=void 0,this.degree=e,this.degree&&this.initialize(this.degree)}r.prototype.initialize=function(e){this.degree=e,this.genPoly=n.generateECPolynomial(this.degree)},r.prototype.encode=function(e){if(!this.genPoly)throw Error(`Encoder not initialized`);let t=new Uint8Array(e.length+this.degree);t.set(e);let r=n.mod(t,this.genPoly),i=this.degree-r.length;if(i>0){let e=new Uint8Array(this.degree);return e.set(r,i),e}return r},t.exports=r})),G=n((e=>{e.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}})),K=n((e=>{var t=`[0-9]+`,n=`[A-Z $%*+\\-./:]+`,r=`(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+`;r=r.replace(/u/g,`\\u`);var i=`(?:(?![A-Z0-9 $%*+\\-./:]|`+r+`)(?:.|[\r
|
|
2
2
|
]))+`;e.KANJI=new RegExp(r,`g`),e.BYTE_KANJI=RegExp(`[^A-Z0-9 $%*+\\-./:]+`,`g`),e.BYTE=new RegExp(i,`g`),e.NUMERIC=new RegExp(t,`g`),e.ALPHANUMERIC=new RegExp(n,`g`);var a=RegExp(`^`+r+`$`),o=RegExp(`^`+t+`$`),s=RegExp(`^[A-Z0-9 $%*+\\-./:]+$`);e.testKanji=function(e){return a.test(e)},e.testNumeric=function(e){return o.test(e)},e.testAlphanumeric=function(e){return s.test(e)}})),q=n((e=>{var t=G(),n=K();e.NUMERIC={id:`Numeric`,bit:1,ccBits:[10,12,14]},e.ALPHANUMERIC={id:`Alphanumeric`,bit:2,ccBits:[9,11,13]},e.BYTE={id:`Byte`,bit:4,ccBits:[8,16,16]},e.KANJI={id:`Kanji`,bit:8,ccBits:[8,10,12]},e.MIXED={bit:-1},e.getCharCountIndicator=function(e,n){if(!e.ccBits)throw Error(`Invalid mode: `+e);if(!t.isValid(n))throw Error(`Invalid version: `+n);return n>=1&&n<10?e.ccBits[0]:n<27?e.ccBits[1]:e.ccBits[2]},e.getBestModeForData=function(t){return n.testNumeric(t)?e.NUMERIC:n.testAlphanumeric(t)?e.ALPHANUMERIC:n.testKanji(t)?e.KANJI:e.BYTE},e.toString=function(e){if(e&&e.id)return e.id;throw Error(`Invalid mode`)},e.isValid=function(e){return e&&e.bit&&e.ccBits};function r(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`numeric`:return e.NUMERIC;case`alphanumeric`:return e.ALPHANUMERIC;case`kanji`:return e.KANJI;case`byte`:return e.BYTE;default:throw Error(`Unknown mode: `+t)}}e.from=function(t,n){if(e.isValid(t))return t;try{return r(t)}catch{return n}}})),J=n((e=>{var t=P(),n=V(),r=F(),i=q(),a=G(),o=7973,s=t.getBCHDigit(o);function c(t,n,r){for(let i=1;i<=40;i++)if(n<=e.getCapacity(i,r,t))return i}function l(e,t){return i.getCharCountIndicator(e,t)+4}function u(e,t){let n=0;return e.forEach(function(e){let r=l(e.mode,t);n+=r+e.getBitsLength()}),n}function d(t,n){for(let r=1;r<=40;r++)if(u(t,r)<=e.getCapacity(r,n,i.MIXED))return r}e.from=function(e,t){return a.isValid(e)?parseInt(e,10):t},e.getCapacity=function(e,r,o){if(!a.isValid(e))throw Error(`Invalid QR Code version`);o===void 0&&(o=i.BYTE);let s=(t.getSymbolTotalCodewords(e)-n.getTotalCodewordsCount(e,r))*8;if(o===i.MIXED)return s;let c=s-l(o,e);switch(o){case i.NUMERIC:return Math.floor(c/10*3);case i.ALPHANUMERIC:return Math.floor(c/11*2);case i.KANJI:return Math.floor(c/13);case i.BYTE:default:return Math.floor(c/8)}},e.getBestVersionForData=function(e,t){let n,i=r.from(t,r.M);if(Array.isArray(e)){if(e.length>1)return d(e,i);if(e.length===0)return 1;n=e[0]}else n=e;return c(n.mode,n.getLength(),i)},e.getEncodedBits=function(e){if(!a.isValid(e)||e<7)throw Error(`Invalid QR Code version`);let n=e<<12;for(;t.getBCHDigit(n)-s>=0;)n^=o<<t.getBCHDigit(n)-s;return e<<12|n}})),te=n((e=>{var t=P(),n=1335,r=21522,i=t.getBCHDigit(n);e.getEncodedBits=function(e,a){let o=e.bit<<3|a,s=o<<10;for(;t.getBCHDigit(s)-i>=0;)s^=n<<t.getBCHDigit(s)-i;return(o<<10|s)^r}})),ne=n(((e,t)=>{var n=q();function r(e){this.mode=n.NUMERIC,this.data=e.toString()}r.getBitsLength=function(e){return 10*Math.floor(e/3)+(e%3?e%3*3+1:0)},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(e){let t,n,r;for(t=0;t+3<=this.data.length;t+=3)n=this.data.substr(t,3),r=parseInt(n,10),e.put(r,10);let i=this.data.length-t;i>0&&(n=this.data.substr(t),r=parseInt(n,10),e.put(r,i*3+1))},t.exports=r})),re=n(((e,t)=>{var n=q(),r=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:`.split(``);function i(e){this.mode=n.ALPHANUMERIC,this.data=e}i.getBitsLength=function(e){return 11*Math.floor(e/2)+e%2*6},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(e){let t;for(t=0;t+2<=this.data.length;t+=2){let n=r.indexOf(this.data[t])*45;n+=r.indexOf(this.data[t+1]),e.put(n,11)}this.data.length%2&&e.put(r.indexOf(this.data[t]),6)},t.exports=i})),ie=n(((e,t)=>{var n=q();function r(e){this.mode=n.BYTE,typeof e==`string`?this.data=new TextEncoder().encode(e):this.data=new Uint8Array(e)}r.getBitsLength=function(e){return e*8},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(e){for(let t=0,n=this.data.length;t<n;t++)e.put(this.data[t],8)},t.exports=r})),ae=n(((e,t)=>{var n=q(),r=P();function i(e){this.mode=n.KANJI,this.data=e}i.getBitsLength=function(e){return e*13},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(e){let t;for(t=0;t<this.data.length;t++){let n=r.toSJIS(this.data[t]);if(n>=33088&&n<=40956)n-=33088;else if(n>=57408&&n<=60351)n-=49472;else throw Error(`Invalid SJIS character: `+this.data[t]+`
|
|
3
3
|
Make sure your charset is UTF-8`);n=(n>>>8&255)*192+(n&255),e.put(n,13)}},t.exports=i})),oe=n(((e,t)=>{var n={single_source_shortest_paths:function(e,t,r){var i={},a={};a[t]=0;var o=n.PriorityQueue.make();o.push(t,0);for(var s,c,l,u,d,f,p,m,h;!o.empty();)for(l in s=o.pop(),c=s.value,u=s.cost,d=e[c]||{},d)d.hasOwnProperty(l)&&(f=d[l],p=u+f,m=a[l],h=a[l]===void 0,(h||m>p)&&(a[l]=p,o.push(l,p),i[l]=c));if(r!==void 0&&a[r]===void 0){var g=[`Could not find a path from `,t,` to `,r,`.`].join(``);throw Error(g)}return i},extract_shortest_path_from_predecessor_list:function(e,t){for(var n=[],r=t;r;)n.push(r),e[r],r=e[r];return n.reverse(),n},find_path:function(e,t,r){var i=n.single_source_shortest_paths(e,t,r);return n.extract_shortest_path_from_predecessor_list(i,r)},PriorityQueue:{make:function(e){var t=n.PriorityQueue,r={},i;for(i in e||={},t)t.hasOwnProperty(i)&&(r[i]=t[i]);return r.queue=[],r.sorter=e.sorter||t.default_sorter,r},default_sorter:function(e,t){return e.cost-t.cost},push:function(e,t){var n={value:e,cost:t};this.queue.push(n),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};t!==void 0&&(t.exports=n)})),se=n((e=>{var t=q(),n=ne(),r=re(),i=ie(),a=ae(),o=K(),s=P(),c=oe();function l(e){return unescape(encodeURIComponent(e)).length}function u(e,t,n){let r=[],i;for(;(i=e.exec(n))!==null;)r.push({data:i[0],index:i.index,mode:t,length:i[0].length});return r}function d(e){let n=u(o.NUMERIC,t.NUMERIC,e),r=u(o.ALPHANUMERIC,t.ALPHANUMERIC,e),i,a;return s.isKanjiModeEnabled()?(i=u(o.BYTE,t.BYTE,e),a=u(o.KANJI,t.KANJI,e)):(i=u(o.BYTE_KANJI,t.BYTE,e),a=[]),n.concat(r,i,a).sort(function(e,t){return e.index-t.index}).map(function(e){return{data:e.data,mode:e.mode,length:e.length}})}function f(e,o){switch(o){case t.NUMERIC:return n.getBitsLength(e);case t.ALPHANUMERIC:return r.getBitsLength(e);case t.KANJI:return a.getBitsLength(e);case t.BYTE:return i.getBitsLength(e)}}function p(e){return e.reduce(function(e,t){let n=e.length-1>=0?e[e.length-1]:null;return n&&n.mode===t.mode?(e[e.length-1].data+=t.data,e):(e.push(t),e)},[])}function m(e){let n=[];for(let r=0;r<e.length;r++){let i=e[r];switch(i.mode){case t.NUMERIC:n.push([i,{data:i.data,mode:t.ALPHANUMERIC,length:i.length},{data:i.data,mode:t.BYTE,length:i.length}]);break;case t.ALPHANUMERIC:n.push([i,{data:i.data,mode:t.BYTE,length:i.length}]);break;case t.KANJI:n.push([i,{data:i.data,mode:t.BYTE,length:l(i.data)}]);break;case t.BYTE:n.push([{data:i.data,mode:t.BYTE,length:l(i.data)}])}}return n}function h(e,n){let r={},i={start:{}},a=[`start`];for(let o=0;o<e.length;o++){let s=e[o],c=[];for(let e=0;e<s.length;e++){let l=s[e],u=``+o+e;c.push(u),r[u]={node:l,lastCount:0},i[u]={};for(let e=0;e<a.length;e++){let o=a[e];r[o]&&r[o].node.mode===l.mode?(i[o][u]=f(r[o].lastCount+l.length,l.mode)-f(r[o].lastCount,l.mode),r[o].lastCount+=l.length):(r[o]&&(r[o].lastCount=l.length),i[o][u]=f(l.length,l.mode)+4+t.getCharCountIndicator(l.mode,n))}}a=c}for(let e=0;e<a.length;e++)i[a[e]].end=0;return{map:i,table:r}}function g(e,o){let c,l=t.getBestModeForData(e);if(c=t.from(o,l),c!==t.BYTE&&c.bit<l.bit)throw Error(`"`+e+`" cannot be encoded with mode `+t.toString(c)+`.
|
|
4
4
|
Suggested mode is: `+t.toString(l));switch(c===t.KANJI&&!s.isKanjiModeEnabled()&&(c=t.BYTE),c){case t.NUMERIC:return new n(e);case t.ALPHANUMERIC:return new r(e);case t.KANJI:return new a(e);case t.BYTE:return new i(e)}}e.fromArray=function(e){return e.reduce(function(e,t){return typeof t==`string`?e.push(g(t,null)):t.data&&e.push(g(t.data,t.mode)),e},[])},e.fromString=function(t,n){let r=h(m(d(t,s.isKanjiModeEnabled())),n),i=c.find_path(r.map,`start`,`end`),a=[];for(let e=1;e<i.length-1;e++)a.push(r.table[i[e]].node);return e.fromArray(p(a))},e.rawSplit=function(t){return e.fromArray(d(t,s.isKanjiModeEnabled()))}})),ce=n((e=>{var t=P(),n=F(),r=I(),i=L(),a=R(),o=z(),s=B(),c=V(),l=W(),u=J(),d=te(),f=q(),p=se();function m(e,t){let n=e.size,r=o.getPositions(t);for(let t=0;t<r.length;t++){let i=r[t][0],a=r[t][1];for(let t=-1;t<=7;t++)if(!(i+t<=-1||n<=i+t))for(let r=-1;r<=7;r++)a+r<=-1||n<=a+r||(t>=0&&t<=6&&(r===0||r===6)||r>=0&&r<=6&&(t===0||t===6)||t>=2&&t<=4&&r>=2&&r<=4?e.set(i+t,a+r,!0,!0):e.set(i+t,a+r,!1,!0))}}function h(e){let t=e.size;for(let n=8;n<t-8;n++){let t=n%2==0;e.set(n,6,t,!0),e.set(6,n,t,!0)}}function g(e,t){let n=a.getPositions(t);for(let t=0;t<n.length;t++){let r=n[t][0],i=n[t][1];for(let t=-2;t<=2;t++)for(let n=-2;n<=2;n++)t===-2||t===2||n===-2||n===2||t===0&&n===0?e.set(r+t,i+n,!0,!0):e.set(r+t,i+n,!1,!0)}}function _(e,t){let n=e.size,r=u.getEncodedBits(t),i,a,o;for(let t=0;t<18;t++)i=Math.floor(t/3),a=t%3+n-8-3,o=(r>>t&1)==1,e.set(i,a,o,!0),e.set(a,i,o,!0)}function v(e,t,n){let r=e.size,i=d.getEncodedBits(t,n),a,o;for(a=0;a<15;a++)o=(i>>a&1)==1,a<6?e.set(a,8,o,!0):a<8?e.set(a+1,8,o,!0):e.set(r-15+a,8,o,!0),a<8?e.set(8,r-a-1,o,!0):a<9?e.set(8,15-a-1+1,o,!0):e.set(8,15-a-1,o,!0);e.set(r-8,8,1,!0)}function y(e,t){let n=e.size,r=-1,i=n-1,a=7,o=0;for(let s=n-1;s>0;s-=2)for(s===6&&s--;;){for(let n=0;n<2;n++)if(!e.isReserved(i,s-n)){let r=!1;o<t.length&&(r=(t[o]>>>a&1)==1),e.set(i,s-n,r),a--,a===-1&&(o++,a=7)}if(i+=r,i<0||n<=i){i-=r,r=-r;break}}}function b(e,n,i){let a=new r;i.forEach(function(t){a.put(t.mode.bit,4),a.put(t.getLength(),f.getCharCountIndicator(t.mode,e)),t.write(a)});let o=(t.getSymbolTotalCodewords(e)-c.getTotalCodewordsCount(e,n))*8;for(a.getLengthInBits()+4<=o&&a.put(0,4);a.getLengthInBits()%8!=0;)a.putBit(0);let s=(o-a.getLengthInBits())/8;for(let e=0;e<s;e++)a.put(e%2?17:236,8);return x(a,e,n)}function x(e,n,r){let i=t.getSymbolTotalCodewords(n),a=i-c.getTotalCodewordsCount(n,r),o=c.getBlocksCount(n,r),s=o-i%o,u=Math.floor(i/o),d=Math.floor(a/o),f=d+1,p=u-d,m=new l(p),h=0,g=Array(o),_=Array(o),v=0,y=new Uint8Array(e.buffer);for(let e=0;e<o;e++){let t=e<s?d:f;g[e]=y.slice(h,h+t),_[e]=m.encode(g[e]),h+=t,v=Math.max(v,t)}let b=new Uint8Array(i),x=0,S,C;for(S=0;S<v;S++)for(C=0;C<o;C++)S<g[C].length&&(b[x++]=g[C][S]);for(S=0;S<p;S++)for(C=0;C<o;C++)b[x++]=_[C][S];return b}function S(e,n,r,a){let o;if(Array.isArray(e))o=p.fromArray(e);else if(typeof e==`string`){let t=n;if(!t){let n=p.rawSplit(e);t=u.getBestVersionForData(n,r)}o=p.fromString(e,t||40)}else throw Error(`Invalid data`);let c=u.getBestVersionForData(o,r);if(!c)throw Error(`The amount of data is too big to be stored in a QR Code`);if(!n)n=c;else if(n<c)throw Error(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as e,d as t,p as n,t as r}from"./button-BFNlGZ5p.js";import"./dist-CFZ4xMSF.js";import{t as ee}from"./code-DD-AYxxu.js";import{t as te}from"./checkbox-CQyFsZzS.js";import{t as i}from"./plus-ixZQRprm.js";import{c as ne}from"./dist-BQN0rzUS.js";import"./es2015-DPJTBYa9.js";import{n as a}from"./toast-9yeTf7d9.js";import{a as o,n as s,o as c,r as l,t as u}from"./use-mocks-file-status-BUIUJ4oQ.js";import{D as d,E as f,Et as re,O as ie,Z as p,i as m}from"./index-
|
|
1
|
+
import{c as e,d as t,p as n,t as r}from"./button-BFNlGZ5p.js";import"./dist-CFZ4xMSF.js";import{t as ee}from"./code-DD-AYxxu.js";import{t as te}from"./checkbox-CQyFsZzS.js";import{t as i}from"./plus-ixZQRprm.js";import{c as ne}from"./dist-BQN0rzUS.js";import"./es2015-DPJTBYa9.js";import{n as a}from"./toast-9yeTf7d9.js";import{a as o,n as s,o as c,r as l,t as u}from"./use-mocks-file-status-BUIUJ4oQ.js";import{D as d,E as f,Et as re,O as ie,Z as p,i as m}from"./index-CSXxaYkG.js";import"./syntax-highlight-BFgN_C0Y.js";import{a as ae,i as h,n as g,o as _,r as v,t as oe}from"./table-DaXD6jJv.js";import"./monaco-editor-GpPLOKA5.js";import{n as y}from"./editor-pane-actions-_ckwcCII.js";import{a as b,i as x,r as S}from"./pane-bar-zJmE3xI5.js";import{MockEditorPanel as C}from"./mock-editor-panel-t4TDXeaR.js";import{n as w,r as T,t as E}from"./pane-split-CJ1VXJDy.js";import{a as se,n as ce}from"./mocks-file-missing-note-Ddy1TdMX.js";var D=n(t(),1),O=E({storageKey:`meddle-mock-list-width`,defaultPx:480,minPx:320,maxPx:640,editorMinPx:360});O.storageKey,O.defaultPx,O.minPx,O.maxPx,O.editorMinPx,O.clamp,O.load,O.save,O.widthFromPointer;var k=e(),A=`Mock 文件格式错误,修复后才能新增`;function j({mockRules:e,fetchMocks:t,createMock:n,updateMock:E,deleteMock:j,initialEditData:M,onInitialEditConsumed:N}){let[P,F]=(0,D.useState)({kind:`idle`}),[I,L]=(0,D.useState)(null),{status:R}=c(e.length);(0,D.useEffect)(()=>{t()},[t]);let z=l(R),B=(0,D.useRef)(z);(0,D.useEffect)(()=>{B.current=z},[z]);let V=l(R)?s(R.parseError):null,H=(0,D.useCallback)(e=>{if(B.current){a.error(A);return}F({kind:`create`,initialData:e,nonce:Date.now()})},[]),U=(0,D.useCallback)(e=>{F({kind:`edit`,ruleId:e.id})},[]),W=(0,D.useCallback)(()=>{F({kind:`idle`})},[]);(0,D.useEffect)(()=>{let e=e=>{let t=e.detail;H(t?.initialData)};return window.addEventListener(m,e),()=>window.removeEventListener(m,e)},[H]),(0,D.useEffect)(()=>{M&&(H(M),N?.())},[M,N,H]);let[G,K]=(0,D.useState)(void 0),q=(0,D.useMemo)(()=>{if(P.kind===`edit`)return e.find(e=>e.id===P.ruleId)},[P,e]);(0,D.useEffect)(()=>{q&&K(q)},[q]);let J=P.kind===`edit`&&!q,Y=(0,D.useRef)(null);(0,D.useEffect)(()=>{if(!J){Y.current=null;return}Y.current={status:R},window.dispatchEvent(new CustomEvent(u))},[J]);let X=q??(P.kind===`edit`&&G?.id===P.ruleId?G:void 0);(0,D.useEffect)(()=>{if(!J)return;let e=Y.current;(!G||G.id!==(P.kind===`edit`?P.ruleId:-1)||e!==null&&R!==e.status&&!z)&&F({kind:`idle`})},[J,P,G,R,z]);let le=(0,D.useCallback)(async(e,t)=>{await E(e.id,{enabled:t})},[E]),ue=(0,D.useCallback)(async e=>{window.confirm(`确定删除这条 Mock 规则?`)&&(await j(e)?(a.success(`已删除 Mock 规则`),P.kind===`edit`&&P.ruleId===e&&W()):a.error(`删除失败`))},[W,j,P]),Z=(0,D.useCallback)(()=>{t(),W()},[W,t]),Q=P.kind===`create`?`create-${P.nonce}`:P.kind===`edit`?`edit-${P.ruleId}`:`idle`,$=w(Q);return(0,k.jsxs)(T,{testId:`mock-config-layout`,layout:`list-edit`,widthAttr:`mock-list-width`,split:O,listTestId:`mock-config-list`,panelTestId:`mock-config-edit`,separatorTestId:`mock-panel-separator`,separatorLabel:`调整 Mock 列表宽度`,list:(0,k.jsxs)(k.Fragment,{children:[(0,k.jsxs)(x,{children:[(0,k.jsx)(b,{children:`Mock 规则`}),z?(0,k.jsxs)(f,{children:[(0,k.jsx)(ie,{asChild:!0,children:(0,k.jsx)(`span`,{tabIndex:0,"data-testid":`mock-config-create-wrapper`,"aria-label":A,children:(0,k.jsxs)(r,{variant:`outline`,size:`sm`,disabled:!0,"data-testid":`mock-config-create`,className:`pointer-events-none`,children:[(0,k.jsx)(i,{"data-icon":`inline-start`}),`新增规则`]})})}),(0,k.jsx)(d,{"data-testid":`mock-config-create-tooltip`,children:A})]}):(0,k.jsxs)(r,{variant:`outline`,size:`sm`,onClick:()=>H(),"data-testid":`mock-config-create`,children:[(0,k.jsx)(i,{"data-icon":`inline-start`}),`新增规则`]})]}),(0,k.jsx)(`div`,{className:`meddle-thin-scroll min-h-0 flex-1 overflow-x-hidden overflow-y-auto`,children:(0,k.jsxs)(oe,{children:[(0,k.jsx)(ae,{children:(0,k.jsxs)(_,{children:[(0,k.jsx)(h,{className:`w-12`,children:`启用`}),(0,k.jsx)(h,{className:`w-16`,children:`方法`}),(0,k.jsx)(h,{children:`名称 / 匹配`}),(0,k.jsx)(h,{className:`w-14`,children:`状态`}),(0,k.jsx)(h,{className:`w-14`,children:`延迟`}),(0,k.jsx)(h,{className:`w-12`})]})}),(0,k.jsx)(g,{children:e.length===0?(0,k.jsx)(_,{"data-testid":`mock-config-empty-row`,className:`hover:bg-transparent hover:text-inherit`,children:(0,k.jsx)(v,{colSpan:6,className:`py-8 text-center text-muted-foreground whitespace-normal`,children:l(R)?(0,k.jsx)(ce,{path:R.path,location:s(R.parseError)}):o(R)?(0,k.jsx)(se,{path:R.path,children:`暂无 Mock 规则,点击「新增规则」或从流量详情一键创建`}):`暂无 Mock 规则,点击「新增规则」或从流量详情一键创建`})}):e.map(e=>{let t=P.kind===`edit`&&P.ruleId===e.id;return(0,k.jsxs)(_,{"data-testid":`mock-config-row-${e.id}`,"data-state":t?`selected`:void 0,className:`cursor-pointer`,onClick:()=>U(e),children:[(0,k.jsx)(v,{onClick:e=>e.stopPropagation(),children:(0,k.jsx)(te,{checked:e.enabled,onCheckedChange:t=>le(e,t===!0),"aria-label":`启用 ${e.name||e.urlPattern}`})}),(0,k.jsx)(v,{children:(0,k.jsx)(p,{variant:`outline`,className:`text-xs`,children:e.method||`*`})}),(0,k.jsxs)(v,{className:`max-w-[220px]`,children:[(0,k.jsx)(`div`,{className:`truncate text-sm font-medium`,children:e.name||(0,k.jsx)(`span`,{className:`italic text-muted-foreground`,children:`未命名`})}),(0,k.jsx)(`div`,{className:`truncate font-mono text-xs text-muted-foreground`,title:e.urlPattern,children:e.urlPattern})]}),(0,k.jsx)(v,{children:(0,k.jsx)(p,{variant:e.statusCode>=400?`destructive`:e.statusCode>=300?`secondary`:`default`,children:e.statusCode})}),(0,k.jsx)(v,{className:`font-mono text-xs text-muted-foreground`,children:e.delay?`${e.delay}ms`:`0ms`}),(0,k.jsx)(v,{onClick:e=>e.stopPropagation(),children:(0,k.jsxs)(`div`,{className:`flex items-center gap-0.5`,children:[e.bodyType===`file`?(0,k.jsx)(re,{className:`size-3.5 text-muted-foreground`,"aria-hidden":!0}):(0,k.jsx)(ee,{className:`size-3.5 text-muted-foreground`,"aria-hidden":!0}),(0,k.jsx)(r,{variant:`ghost`,size:`icon-sm`,onClick:()=>void ue(e.id),className:`text-muted-foreground hover:text-destructive`,"aria-label":`删除 Mock 规则`,children:(0,k.jsx)(ne,{})})]})})]},e.id)})})]})})]}),children:[(0,k.jsx)(S,{"data-testid":`mock-editor-title-bar`,scrolled:$.scrolled,title:P.kind===`create`?`编辑 Mock · 新建`:P.kind===`edit`?`编辑 Mock · ${X?.name||X?.urlPattern||P.ruleId}`:`编辑 Mock`,actions:(0,k.jsxs)(k.Fragment,{children:[P.kind===`idle`?null:(0,k.jsx)(r,{variant:`ghost`,size:`sm`,onClick:W,children:`取消`}),(0,k.jsx)(`div`,{ref:L,"data-testid":`editor-pane-actions`,className:`contents`})]})}),(0,k.jsx)(y,{host:I,children:(0,k.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:P.kind===`idle`?(0,k.jsxs)(`div`,{className:`flex h-full min-h-[240px] flex-col items-center justify-center gap-2 p-6 text-center text-sm text-muted-foreground`,children:[(0,k.jsx)(`p`,{children:`选择左侧规则进行编辑,或点击「新增规则」`}),(0,k.jsx)(`p`,{className:`text-xs`,children:`从流量详情「创建 Mock」会打开本编辑器并预填 URL / 方法 / Body`})]}):P.kind===`create`?(0,k.jsx)(C,{onBodyScroll:$.onScroll,initialData:P.initialData,createMock:n,updateMock:E,onSaved:Z,fileInvalidLocation:V},Q):X?(0,k.jsx)(C,{onBodyScroll:$.onScroll,rule:X,createMock:n,updateMock:E,onSaved:Z,fileInvalidLocation:V},Q):null})})]})}export{j as MockConfig};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as e,d as t,l as n,p as r,t as i}from"./button-BFNlGZ5p.js";import"./dist-CFZ4xMSF.js";import{t as a}from"./code-DD-AYxxu.js";import{n as o,t as s}from"./checkbox-CQyFsZzS.js";import{t as c}from"./plus-ixZQRprm.js";import{c as l}from"./dist-BQN0rzUS.js";import{t as u}from"./wand-sparkles-Bmt4dDOf.js";import"./es2015-DPJTBYa9.js";import{i as d,o as f,r as p}from"./ai-config-store-C8D_PUGV.js";import{n as m}from"./toast-9yeTf7d9.js";import"./use-mocks-file-status-BUIUJ4oQ.js";import{D as h,E as g,G as _,J as v,K as ee,M as y,Nt as b,O as te,Q as x,T as S,U as ne,W as re,_ as ie,a as C,g as ae,h as oe,j as w,k as T,mt as se,ot as ce,q as le,xt as E,y as ue}from"./index-
|
|
1
|
+
import{c as e,d as t,l as n,p as r,t as i}from"./button-BFNlGZ5p.js";import"./dist-CFZ4xMSF.js";import{t as a}from"./code-DD-AYxxu.js";import{n as o,t as s}from"./checkbox-CQyFsZzS.js";import{t as c}from"./plus-ixZQRprm.js";import{c as l}from"./dist-BQN0rzUS.js";import{t as u}from"./wand-sparkles-Bmt4dDOf.js";import"./es2015-DPJTBYa9.js";import{i as d,o as f,r as p}from"./ai-config-store-C8D_PUGV.js";import{n as m}from"./toast-9yeTf7d9.js";import"./use-mocks-file-status-BUIUJ4oQ.js";import{D as h,E as g,G as _,J as v,K as ee,M as y,Nt as b,O as te,Q as x,T as S,U as ne,W as re,_ as ie,a as C,g as ae,h as oe,j as w,k as T,mt as se,ot as ce,q as le,xt as E,y as ue}from"./index-CSXxaYkG.js";import{i as D}from"./syntax-highlight-BFgN_C0Y.js";import{n as O}from"./monaco-editor-GpPLOKA5.js";import{i as de,t as fe}from"./editor-pane-actions-_ckwcCII.js";import{n as pe}from"./pane-bar-zJmE3xI5.js";var k=r(t(),1);function A(e,t){let n=e;switch(t){case`json`:n=j(n),n=M(n);break;case`javascript`:n=N(n),n=P(n);break;case`html`:n=F(n);break;case`css`:n=I(n);break}return n}function j(e){let t=e.replace(/'/g,`"`);return t=t.replace(/([{,]\s*)([a-zA-Z_$][a-zA-Z0-9_$]*)\s*:/g,`$1"$2":`),t}function M(e){return e.replace(/,(\s*[}\]])/g,`$1`)}function N(e){let t={"{":`}`,"[":`]`,"(":`)`},n=[],r=!1,i=``;for(let a=0;a<e.length;a++){let o=e[a],s=a>0?e[a-1]:``;if((o===`"`||o===`'`||o==="`")&&s!==`\\`&&(r?o===i&&(r=!1):(r=!0,i=o)),!r){if(o in t)n.push(o);else if(Object.values(t).includes(o)){let e=Object.keys(t).find(e=>t[e]===o);n.length>0&&n[n.length-1]===e&&n.pop()}}}let a=e;for(;n.length>0;){let e=t[n.pop()];a+=e}return a}function P(e){let t=e,n={'"':0,"'":0,"`":0};for(let t of e)(t===`"`||t===`'`||t==="`")&&n[t]++;return n[`"`]%2!=0&&(t+=`"`),n[`'`]%2!=0&&(t+=`'`),n["`"]%2!=0&&(t+="`"),t}function F(e){let t=[],n=[`br`,`hr`,`img`,`input`,`link`,`meta`,`area`,`base`,`col`,`embed`,`param`,`source`,`track`,`wbr`],r=/<\/?([a-z][\w-]*)\b[^>]*>/gi,i;for(;(i=r.exec(e))!==null;){let e=i[0],r=i[1].toLowerCase(),a=e.endsWith(`/>`)||n.includes(r);e.startsWith(`</`)?t.length>0&&t[t.length-1]===r&&t.pop():a||t.push(r)}let a=e;for(;t.length>0;){let e=t.pop();a+=`</${e}>`}return a}function I(e){let t=0,n=!1,r=``;for(let i=0;i<e.length;i++){let a=e[i],o=i>0?e[i-1]:``;(a===`"`||a===`'`)&&o!==`\\`&&(n?a===r&&(n=!1):(n=!0,r=a)),n||(a===`{`?t++:a===`}`&&t--)}let i=e;for(;t>0;)i+=`
|
|
2
2
|
}`,t--;return i}async function me(e,t=!1){if(!e.trim())return{fixed:e,method:`none`,success:!0};let n=D(e);if(!t&&n.valid)return{fixed:e,method:`none`,success:!0};let r=n.type?.toLowerCase();(!r||r===`text`)&&(r=L(e)),(!r||r===`text`)&&(r=`json`);let i=r,a=p();if(f(a))try{let t=d(a),n=await V(e,i,t?{provider:t.provider,apiKey:t.apiKey,baseUrl:t.baseUrl,model:t.model}:{provider:a.provider,apiKey:a.apiKey,baseUrl:a.baseUrl,model:a.model}),r=D(n);return r.valid?{fixed:n,method:`ai`,success:!0}:{fixed:n,method:`ai`,success:r.valid}}catch(e){console.warn(`AI修复失败:`,e)}let o=A(e,i);return{fixed:o,method:`rules`,success:D(o).valid}}function L(e){let t=e.trim();return t.startsWith(`{`)&&t.endsWith(`}`)||t.startsWith(`[`)&&t.endsWith(`]`)?`json`:t.startsWith(`<`)&&t.includes(`>`)?`html`:t.includes(`{`)&&t.includes(`}`)&&t.includes(`:`)?`css`:`text`}async function R(e,t,n){let r=`You are a code fixing assistant. Fix syntax errors in ${t.toUpperCase()} code. Return only the fixed code without explanations or markdown formatting.`,i=`Please fix the syntax errors in the following ${t.toUpperCase()} code. Return ONLY the fixed code without any explanations:
|
|
3
3
|
|
|
4
4
|
${e}`,a=await fetch(n.baseUrl,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${n.apiKey}`},body:JSON.stringify({model:n.model,messages:[{role:`system`,content:r},{role:`user`,content:i}],temperature:.3,max_tokens:2e3})});if(!a.ok){let e=await a.text();throw Error(`OpenAI API错误 (${a.status}): ${e}`)}let o=(await a.json()).choices?.[0]?.message?.content?.trim();if(!o)throw Error(`OpenAI返回了空结果`);return B(o)}async function z(e,t,n){let r=`You are a code fixing assistant. Fix syntax errors in ${t.toUpperCase()} code. Return only the fixed code without explanations or markdown formatting.`,i=`Please fix the syntax errors in the following ${t.toUpperCase()} code. Return ONLY the fixed code without any explanations:
|
package/web/dist/assets/{mocks-file-missing-note-C-QJ8Bpm.js → mocks-file-missing-note-Ddy1TdMX.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as e,d as t,l as n,p as r}from"./button-BFNlGZ5p.js";import{ot as i}from"./index-
|
|
1
|
+
import{c as e,d as t,l as n,p as r}from"./button-BFNlGZ5p.js";import{ot as i}from"./index-CSXxaYkG.js";var a=r(t(),1),o=e();function s({path:e}){let t=e.split(`/`);return(0,o.jsx)(o.Fragment,{children:t.map((e,n)=>(0,o.jsxs)(a.Fragment,{children:[e,n<t.length-1?(0,o.jsxs)(o.Fragment,{children:[`/`,(0,o.jsx)(`wbr`,{})]}):null]},n))})}function c({path:e,children:t}){return(0,o.jsxs)(`div`,{className:`mx-auto flex max-w-[360px] flex-col items-center text-center text-muted-foreground`,children:[(0,o.jsxs)(`div`,{"data-testid":`mock-config-file-missing`,role:`status`,className:`flex flex-col items-center gap-0.5 text-xs`,children:[(0,o.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,o.jsx)(i,{"aria-hidden":`true`,className:`size-3.5 shrink-0`}),`文件不存在`]}),(0,o.jsx)(`span`,{"data-testid":`mock-config-file-missing-path`,className:`font-mono wrap-anywhere`,children:(0,o.jsx)(s,{path:e})}),(0,o.jsx)(`span`,{children:`保存第一条规则时会创建`})]}),t?(0,o.jsx)(`div`,{className:`mt-2`,children:t}):null]})}function l({className:e,testId:t=`mocks-file-missing-note`}){return(0,o.jsxs)(`p`,{"data-testid":t,role:`status`,className:n(`flex items-start gap-1 text-xs text-muted-foreground`,e),children:[(0,o.jsx)(i,{"aria-hidden":`true`,className:`mt-px size-3.5 shrink-0`}),(0,o.jsx)(`span`,{className:`min-w-0`,children:`文件不存在,保存第一条规则时会创建`})]})}function u({path:e,location:t}){return(0,o.jsx)(`div`,{className:`mx-auto flex max-w-[360px] flex-col items-center text-center`,children:(0,o.jsxs)(`div`,{"data-testid":`mock-config-file-invalid`,role:`alert`,className:`flex flex-col items-center gap-0.5 text-xs`,children:[(0,o.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-destructive`,children:[(0,o.jsx)(i,{"aria-hidden":`true`,className:`size-3.5 shrink-0`}),`文件格式错误`]}),(0,o.jsx)(`span`,{"data-testid":`mock-config-file-invalid-path`,className:`font-mono wrap-anywhere text-foreground`,children:(0,o.jsx)(s,{path:e})}),(0,o.jsx)(`span`,{"data-testid":`mock-config-file-invalid-location`,className:`font-mono wrap-anywhere text-muted-foreground`,children:t})]})})}function d({location:e,className:t,testId:r=`mocks-file-invalid-note`}){return(0,o.jsxs)(`p`,{"data-testid":r,role:`alert`,className:n(`flex items-start gap-1 text-xs text-destructive`,t),children:[(0,o.jsx)(i,{"aria-hidden":`true`,className:`mt-px size-3.5 shrink-0`}),(0,o.jsxs)(`span`,{className:`min-w-0`,children:[`文件格式错误,修复前不会写入:`,(0,o.jsx)(`span`,{className:`font-mono`,children:e})]})]})}function f({oldPath:e,newPath:t,visible:r,onUseOldPath:a}){return(0,o.jsx)(`div`,{"data-testid":`settings-mocks-file-legacy-wrap`,"data-visible":r?`true`:`false`,"aria-hidden":!r,className:n(`-mt-[var(--ui-field-gap)] grid transition-[grid-template-rows,opacity] duration-150 ease-out motion-reduce:transition-none`,r?`grid-rows-[1fr] opacity-100`:`grid-rows-[0fr] opacity-0`),children:(0,o.jsx)(`div`,{className:`min-h-0 overflow-hidden`,inert:!r||void 0,children:(0,o.jsx)(`div`,{"data-testid":`settings-mocks-file-legacy-gap`,className:`pt-[var(--ui-field-gap)]`,children:(0,o.jsxs)(`div`,{"data-testid":`settings-mocks-file-legacy`,role:r?`status`:void 0,className:`flex items-start gap-1.5 border-l-2 border-amber-500 py-0.5 pl-2 text-xs dark:border-amber-400`,children:[(0,o.jsx)(i,{"aria-hidden":`true`,className:`mt-px size-3.5 shrink-0 text-amber-600 dark:text-amber-400`}),(0,o.jsxs)(`div`,{className:`min-w-0 space-y-1`,children:[(0,o.jsx)(`p`,{className:`text-foreground`,children:`相对路径的解析规则已变更,当前可能读不到原来的 Mock 文件`}),(0,o.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-0.5`,children:[(0,o.jsxs)(`span`,{"data-testid":`settings-mocks-file-legacy-old`,className:`min-w-0 font-mono wrap-anywhere text-muted-foreground`,children:[`原来读取:`,(0,o.jsx)(s,{path:e})]}),(0,o.jsx)(`button`,{type:`button`,"data-testid":`settings-mocks-file-legacy-use`,onClick:a,className:`shrink-0 rounded-sm text-foreground underline underline-offset-2 hover:text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,children:`改用此路径`})]}),(0,o.jsxs)(`p`,{"data-testid":`settings-mocks-file-legacy-new`,className:`font-mono wrap-anywhere text-muted-foreground`,children:[`现在读取:`,(0,o.jsx)(s,{path:t}),`(文件不存在)`]})]})]})})})})}export{c as a,f as i,u as n,l as o,d as r,s as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as e,d as t,p as n}from"./button-BFNlGZ5p.js";import{d as r}from"./index-
|
|
1
|
+
import{c as e,d as t,p as n}from"./button-BFNlGZ5p.js";import{d as r}from"./index-CSXxaYkG.js";function i(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function a(e){if(Array.isArray(e))return e}function o(e,t,n){return(t=h(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t!==0)for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function c(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
2
2
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function u(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?l(Object(n),!0).forEach(function(t){o(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function d(e,t){if(e==null)return{};var n,r,i=f(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function f(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function p(e,t){return a(e)||s(e,t)||g(e,t)||c()}function m(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function h(e){var t=m(e,`string`);return typeof t==`symbol`?t:t+``}function g(e,t){if(e){if(typeof e==`string`)return i(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(e,t):void 0}}function _(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function v(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function y(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?v(Object(n),!0).forEach(function(t){_(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):v(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function b(){var e=[...arguments];return function(t){return e.reduceRight(function(e,t){return t(e)},t)}}function x(e){return function t(){var n=this,r=[...arguments];return r.length>=e.length?e.apply(this,r):function(){var e=[...arguments];return t.apply(n,[].concat(r,e))}}}function S(e){return{}.toString.call(e).includes(`Object`)}function C(e){return!Object.keys(e).length}function w(e){return typeof e==`function`}function T(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function E(e,t){return S(t)||j(`changeType`),Object.keys(t).some(function(t){return!T(e,t)})&&j(`changeField`),t}function D(e){w(e)||j(`selectorType`)}function O(e){w(e)||S(e)||j(`handlerType`),S(e)&&Object.values(e).some(function(e){return!w(e)})&&j(`handlersType`)}function k(e){e||j(`initialIsRequired`),S(e)||j(`initialType`),C(e)&&j(`initialContent`)}function A(e,t){throw Error(e[t]||e.default)}var j=x(A)({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"}),M={changes:E,selector:D,handler:O,initial:k};function N(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};M.initial(e),M.handler(t);var n={current:e},r=x(ee)(n,t),i=x(F)(n),a=x(M.changes)(e),o=x(P)(n);function s(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:function(e){return e};return M.selector(e),e(n.current)}function c(e){b(r,i,a,o)(e)}return[s,c]}function P(e,t){return w(t)?t(e.current):t}function F(e,t){return e.current=y(y({},e.current),t),t}function ee(e,t,n){return w(t)?t(e.current):Object.keys(n).forEach(function(n){return t[n]?.call(t,e.current[n])}),n}var te={create:N},ne={paths:{vs:`https://cdn.jsdelivr.net/npm/monaco-editor@0.55.1/min/vs`}};function re(e){return function t(){var n=this,r=[...arguments];return r.length>=e.length?e.apply(this,r):function(){var e=[...arguments];return t.apply(n,[].concat(r,e))}}}function ie(e){return{}.toString.call(e).includes(`Object`)}function ae(e){return e||le(`configIsRequired`),ie(e)||le(`configType`),e.urls?(oe(),{paths:{vs:e.urls.monacoBase}}):e}function oe(){console.warn(ce.deprecation)}function se(e,t){throw Error(e[t]||e.default)}var ce={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!
|
|
3
3
|
You are using deprecated way of configuration.
|
|
4
4
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as e,l as t}from"./button-BFNlGZ5p.js";import{_ as n,mt as r}from"./index-
|
|
1
|
+
import{c as e,l as t}from"./button-BFNlGZ5p.js";import{_ as n,mt as r}from"./index-CSXxaYkG.js";var i=e();function a({className:e,...n}){return(0,i.jsx)(`div`,{"data-slot":`pane-bar`,className:t(`app-pane-bar relative z-10 flex min-h-[50px] shrink-0 items-center justify-between gap-2 border-b bg-card`,e),...n})}function o({className:e,...n}){return(0,i.jsx)(`h2`,{"data-slot":`pane-title`,className:t(`m-0 min-w-0 truncate text-xs font-medium text-muted-foreground`,e),...n})}function s({title:e,actions:n,scrolled:r=!1,className:s,...c}){return(0,i.jsxs)(a,{"data-slot":`editor-title-bar`,"data-scrolled":r?`true`:`false`,className:t(`flex-wrap gap-x-3 gap-y-2 transition-[box-shadow,border-color] duration-150 ease-out motion-reduce:transition-none`,`data-[scrolled=true]:shadow-[0_1px_3px_rgb(0_0_0/0.06)] dark:data-[scrolled=true]:border-black dark:data-[scrolled=true]:shadow-none`,s),...c,children:[(0,i.jsx)(o,{children:e}),(0,i.jsx)(`div`,{className:`ml-auto flex min-w-0 max-w-full flex-wrap items-center justify-end gap-2`,children:n})]})}function c({saving:e=!1,label:t=`保存`,savingLabel:a=`保存中…`,disabled:o,...s}){return(0,i.jsxs)(n,{size:`sm`,...s,disabled:o||e,"aria-busy":e||void 0,"data-slot":`editor-save`,children:[(0,i.jsx)(r,{"data-icon":`inline-start`}),(0,i.jsxs)(`span`,{"data-slot":`editor-save-label`,className:`inline-grid`,children:[(0,i.jsx)(`span`,{className:`[grid-area:1/1]`,children:e?a:t}),(0,i.jsx)(`span`,{"data-slot":`editor-save-sizer`,"aria-hidden":`true`,className:`invisible [grid-area:1/1]`,children:e?t:a})]})]})}function l({title:e,hint:n,className:r,...a}){return(0,i.jsxs)(`div`,{"data-slot":`editor-empty-state`,className:t(`flex h-full min-h-[240px] flex-col items-center justify-center gap-2 p-6 text-center text-sm text-muted-foreground`,r),...a,children:[(0,i.jsx)(`p`,{children:e}),n?(0,i.jsx)(`p`,{className:`text-xs`,children:n}):null]})}export{o as a,a as i,c as n,s as r,l as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as e,d as t,l as n,p as r}from"./button-BFNlGZ5p.js";import{N as i}from"./index-
|
|
1
|
+
import{c as e,d as t,l as n,p as r}from"./button-BFNlGZ5p.js";import{N as i}from"./index-CSXxaYkG.js";var a=r(t(),1),o=`(min-width: 768px)`;function s({load:e,save:t,clamp:n,widthFromPointer:r}){let s=(0,a.useRef)(null),c=(0,a.useRef)(!1),[l,u]=(0,a.useState)(e),[d,f]=(0,a.useState)(!1),p=i(o);return c.current=d,(0,a.useEffect)(()=>{let e=s.current;if(!e||!p)return;let t=()=>{if(c.current)return;let t=e.getBoundingClientRect().width;t<=0||u(e=>n(e,t))};t();let r=new ResizeObserver(t);return r.observe(e),()=>r.disconnect()},[n,p]),(0,a.useEffect)(()=>{if(!d)return;let e=e=>{let t=s.current;if(!t)return;let n=t.getBoundingClientRect();u(r(e.clientX,n.left,n.width))},n=()=>{f(!1),u(e=>t(e)),document.body.style.cursor=``,document.body.style.userSelect=``};return document.addEventListener(`mousemove`,e),document.addEventListener(`mouseup`,n),document.body.style.cursor=`col-resize`,document.body.style.userSelect=`none`,()=>{document.removeEventListener(`mousemove`,e),document.removeEventListener(`mouseup`,n),document.body.style.cursor=``,document.body.style.userSelect=``}},[d,t,r]),{layoutRef:s,paneWidth:l,resizing:d,isWide:p,onResizeStart:(0,a.useCallback)(e=>{e.preventDefault(),f(!0)},[])}}var c=e();function l({testId:e,layout:t,widthAttr:r,split:i,listTestId:a,listSlot:o,panelTestId:l,panelSlot:u,separatorTestId:d,separatorLabel:f,list:p,children:m}){let{layoutRef:h,paneWidth:g,resizing:_,isWide:v,onResizeStart:y}=s({load:i.load,save:i.save,clamp:i.clamp,widthFromPointer:i.widthFromPointer});return(0,c.jsxs)(`div`,{ref:h,className:`app-page-stack flex min-h-0 flex-1 flex-col gap-0 overflow-hidden md:flex-row`,"data-testid":e,"data-layout":t,[`data-${r}`]:g,children:[(0,c.jsx)(`aside`,{"data-testid":a,"data-slot":o,className:`flex max-h-[46%] min-h-0 w-full shrink-0 flex-col md:max-h-none`,style:v?{width:g,flex:`0 0 ${g}px`}:void 0,children:p}),(0,c.jsx)(`div`,{role:`separator`,"aria-orientation":`horizontal`,className:`relative h-px w-full shrink-0 bg-border md:hidden`}),(0,c.jsxs)(`div`,{role:`separator`,"aria-orientation":`vertical`,"aria-valuenow":g,"aria-valuemin":i.minPx,"aria-valuemax":i.maxPx,"aria-label":f,"data-testid":d,"data-resizing":_?`true`:`false`,className:`group relative z-10 hidden w-px shrink-0 cursor-col-resize self-stretch md:block`,onMouseDown:y,children:[(0,c.jsx)(`div`,{"aria-hidden":!0,className:n(`pointer-events-none absolute inset-0 bg-border transition-colors`,_?`bg-primary`:`group-hover:bg-transparent`)}),(0,c.jsx)(`div`,{"aria-hidden":!0,className:n(`pointer-events-none absolute inset-y-0 left-1/2 w-1 -translate-x-1/2 opacity-0 transition-opacity`,_?`bg-primary opacity-100`:`bg-primary/60 group-hover:opacity-100`)}),(0,c.jsx)(`div`,{className:`absolute inset-y-0 -left-1.5 -right-1.5`})]}),(0,c.jsx)(`div`,{"data-testid":l,"data-slot":u,className:`flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden bg-card`,children:m})]})}function u(e){let[t,n]=(0,a.useState)(!1),[r,i]=(0,a.useState)(e);return Object.is(r,e)||(i(e),n(!1)),{scrolled:t,onScroll:(0,a.useCallback)(e=>{e.target===e.currentTarget&&n(e.currentTarget.scrollTop>4)},[])}}function d(e){let{storageKey:t,defaultPx:n,minPx:r,maxPx:i,editorMinPx:a}=e,o=(e,t)=>{if(!Number.isFinite(e))return n;let o=i;if(t!=null&&t>0){let e=t-a;o=Math.min(i,Math.max(r,e))}return Math.round(Math.max(r,Math.min(o,e)))},s=()=>{if(typeof window>`u`)return n;try{let e=localStorage.getItem(t);return e==null?n:o(parseFloat(e))}catch{return n}},c=e=>{let n=o(e);try{localStorage.setItem(t,String(n))}catch{}return n},l=(e,t,r)=>r<=0?n:o(e-t,r);return{...e,clamp:o,load:s,save:c,widthFromPointer:l}}export{u as n,l as r,d as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as e}from"./button-BFNlGZ5p.js";import{C as t,S as n,w as r}from"./index-
|
|
1
|
+
import{c as e}from"./button-BFNlGZ5p.js";import{C as t,S as n,w as r}from"./index-CSXxaYkG.js";var i=e();function a({plain:e=!1,className:a,title:o,description:s}){return e?(0,i.jsxs)(`div`,{className:a,children:[(0,i.jsx)(`h2`,{className:`flex items-center gap-2 text-base font-semibold leading-none`,children:o}),s?(0,i.jsx)(`p`,{className:`mt-1.5 text-sm text-muted-foreground`,children:s}):null]}):(0,i.jsxs)(t,{className:a,children:[(0,i.jsx)(r,{className:`flex items-center gap-2`,children:o}),s?(0,i.jsx)(n,{children:s}):null]})}export{a as t};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as e,d as t,p as n,t as r}from"./button-BFNlGZ5p.js";import"./dist-CFZ4xMSF.js";import{t as i}from"./pencil-line-CEZ7D-de.js";import{t as a}from"./rotate-ccw-CRguJya4.js";import{t as o}from"./zap-BuOtogAv.js";import"./es2015-DPJTBYa9.js";import{i as ee,o as te,r as ne}from"./ai-config-store-C8D_PUGV.js";import{n as s}from"./toast-9yeTf7d9.js";import{Ot as re,T as ie,Z as c,b as l,g as u,h as d,x as f,xt as p,y as m}from"./index-
|
|
1
|
+
import{c as e,d as t,p as n,t as r}from"./button-BFNlGZ5p.js";import"./dist-CFZ4xMSF.js";import{t as i}from"./pencil-line-CEZ7D-de.js";import{t as a}from"./rotate-ccw-CRguJya4.js";import{t as o}from"./zap-BuOtogAv.js";import"./es2015-DPJTBYa9.js";import{i as ee,o as te,r as ne}from"./ai-config-store-C8D_PUGV.js";import{n as s}from"./toast-9yeTf7d9.js";import{Ot as re,T as ie,Z as c,b as l,g as u,h as d,x as f,xt as p,y as m}from"./index-CSXxaYkG.js";import{n as h}from"./monaco-editor-GpPLOKA5.js";import{i as ae,r as g,t as _}from"./editor-pane-actions-_ckwcCII.js";import{n as v}from"./pane-bar-zJmE3xI5.js";import{t as y}from"./panel-heading-DlFWoYAR.js";import{t as oe}from"./textarea-9wB8Hsz-.js";var b=n(t(),1),x=e();function S({open:e=!1,onOpenChange:t,embedded:n=!1,plainHeading:S=!1,filename:C,onSaved:w}){let[T,E]=(0,b.useState)(``),[D,O]=(0,b.useState)(``),[k,A]=(0,b.useState)(!1),[j,M]=(0,b.useState)(!1),[N,P]=(0,b.useState)(!1),[F,I]=(0,b.useState)(!1),[L,R]=(0,b.useState)(null),[z,B]=(0,b.useState)(``),[V,H]=(0,b.useState)(null),[U,W]=(0,b.useState)(!1),G=T!==D,K=ne(),q=ee(K),se=q?{provider:q.provider,apiKey:q.apiKey,baseUrl:q.baseUrl,model:q.model}:{provider:K.provider,apiKey:K.apiKey,baseUrl:K.baseUrl,model:K.model},J=te(K),Y=(0,b.useCallback)(async()=>{if(C){A(!0),R(null);try{let e=await fetch(`/api/plugins/custom/${encodeURIComponent(C)}/code`);if(!e.ok){let t=await e.json();throw Error(t.error||`读取插件代码失败`)}let t=await e.json();E(t.code),O(t.code)}catch(e){R(e instanceof Error?e.message:`读取失败`)}finally{A(!1)}}},[C]);(0,b.useEffect)(()=>{(e||n)&&C&&Y()},[e,n,C,Y]);let X=async()=>{M(!0),R(null);try{let e=await fetch(`/api/plugins/custom/${encodeURIComponent(C)}/code`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({code:T})});if(!e.ok){let t=await e.json();throw Error(t.error||`保存失败`)}O(T),window.dispatchEvent(new CustomEvent(`plugins-custom-updated`)),w?.(),s.success(`插件代码保存成功`)}catch(e){let t=e instanceof Error?e.message:`保存失败`;R(t),s.error(t)}finally{M(!1)}},ce=async()=>{M(!0),P(!0),R(null);try{let e=await fetch(`/api/plugins/custom/${encodeURIComponent(C)}/code`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({code:T})});if(!e.ok){let t=await e.json();throw Error(t.error||`保存失败`)}if(O(T),!(await fetch(`/api/plugins/reload`,{method:`POST`})).ok)throw Error(`热加载失败`);w?.(),window.dispatchEvent(new CustomEvent(`plugins-custom-updated`)),s.success(`插件代码已保存并完成热加载`)}catch(e){let t=e instanceof Error?e.message:`操作失败`;R(t),s.error(t)}finally{M(!1),P(!1)}};d({active:e||n,enabled:G&&!j&&!F,priority:u.panel,onSave:X});let le=()=>{E(D)},Z=()=>{G&&!confirm(`有未保存的修改,确定要关闭吗?`)||(W(!1),t?.(!1))},Q=ae();g(Z);let ue=async()=>{if(!z.trim()||!J)return;let e=T;W(!0),I(!0),R(null),H(`AI 正在根据补充需求更新代码…`);try{let e=await fetch(`/api/plugins/revise-stream`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({originalCode:T,instruction:z.trim(),requirement:{name:C.replace(/\.js$/i,``),description:`根据补充要求更新插件 ${C},保持 Meddle 插件结构和现有核心能力正确。`},aiConfig:se})});if(!e.ok){let t=await e.json();throw Error(t.error||`AI 更新代码失败`)}let t=e.body?.getReader(),n=new TextDecoder;if(!t)throw Error(`无法读取 AI 更新流`);let r=``,i=``;for(;;){let{done:e,value:a}=await t.read();if(e)break;i+=n.decode(a,{stream:!0});let o=i.split(`
|
|
2
2
|
`);i=o.pop()||``;for(let e of o){if(!e.startsWith(`data:`))continue;let t=e.slice(5).trim();if(t)try{let e=JSON.parse(t);if(e.status===`generating`)H(`AI 正在根据补充需求更新代码…`);else if(e.chunk)r=e.accumulated||`${r}${e.chunk}`,E(r),H(`生成中… ${r.length} 字符`);else if(e.status===`success`)r=e.revisedCode||r,E(r),H(`AI 已完成代码更新,请检查后保存。`);else if(e.error)throw Error(e.error)}catch(e){if(e instanceof Error&&e.message!==`Unexpected end of JSON input`)throw e}}}if(!r.trim())throw Error(`AI 未返回有效代码`)}catch(t){let n=t instanceof Error?t.message:`AI 更新代码失败`;E(e),R(n),H(`更新失败,已恢复原代码:${n}`)}finally{I(!1)}},$=(0,x.jsxs)(x.Fragment,{children:[S?null:(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(y,{className:`px-6 pt-6 pb-3`,title:(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(re,{className:`h-5 w-5`}),C,G&&(0,x.jsx)(c,{variant:`outline`,className:`text-orange-600 border-orange-300`,children:`未保存`})]}),description:`查看和编辑插件源码,保存后需热加载才能生效`}),(0,x.jsx)(m,{})]}),(0,x.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-hidden px-4 py-3`,children:k?(0,x.jsxs)(`div`,{className:`flex flex-1 items-center justify-center gap-2 text-muted-foreground`,children:[(0,x.jsx)(p,{className:`h-5 w-5 animate-spin`}),(0,x.jsx)(`span`,{children:`加载中…`})]}):L&&!T?(0,x.jsx)(`div`,{className:`flex flex-1 items-center justify-center text-destructive`,children:L}):(0,x.jsx)(`div`,{className:`min-h-0 flex-1`,children:(0,x.jsx)(`div`,{className:`relative h-full min-h-[320px]`,children:(0,x.jsx)(h,{value:T,onChange:E,language:`javascript`,height:`flex`})})})}),(0,x.jsx)(`div`,{"aria-hidden":!U,className:[`overflow-hidden transition-[max-height,opacity] duration-200 ease-out`,U?`max-h-[260px] border-t opacity-100`:`max-h-0 border-t-0 opacity-0 pointer-events-none`].join(` `),children:(0,x.jsxs)(`div`,{className:`space-y-3 px-6 py-4`,children:[(0,x.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,x.jsxs)(`div`,{className:`min-w-0`,children:[(0,x.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium`,children:[(0,x.jsx)(i,{className:`h-4 w-4`}),`AI 更新代码`]}),(0,x.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`输入补充需求后,AI 会直接把结果写回当前编辑器。`})]}),(0,x.jsx)(r,{variant:`ghost`,size:`xs`,onClick:()=>W(!1),disabled:!U||F,children:`收起`})]}),(0,x.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-[minmax(0,1fr)_auto] md:items-end`,children:[(0,x.jsxs)(`div`,{className:`app-field-group`,children:[(0,x.jsx)(ie,{htmlFor:`plugin-editor-extra-instruction`,children:`补充需求信息`}),(0,x.jsx)(oe,{id:`plugin-editor-extra-instruction`,value:z,onChange:e=>B(e.target.value),placeholder:`例如:补充 onBeforeResponse 对空 referer 的处理;保留现有 manifest 和 hook,不要改插件 id。`,className:`min-h-[88px] resize-none`,disabled:!U||F||j})]}),(0,x.jsx)(r,{size:`sm`,onClick:ue,disabled:!U||!z.trim()||!J||F||j,title:J?`根据补充需求更新当前代码`:`AI 未配置或未启用`,children:F?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(p,{className:`h-4 w-4 mr-1 animate-spin`}),`更新中…`]}):(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(i,{className:`h-4 w-4 mr-1`}),`更新代码`]})})]}),(0,x.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:V||(J?`生成结果会写回上方编辑器,请检查后再保存或热加载。`:`AI 未配置或未启用,请先在设置中配置 AI 服务。`)})]})}),L&&T&&(0,x.jsx)(`div`,{className:`px-6 py-2 text-sm text-destructive bg-destructive/10`,children:L}),Q?null:(0,x.jsx)(m,{}),(0,x.jsxs)(_,{className:`px-6 py-3 flex justify-between items-center gap-2`,children:[(0,x.jsxs)(`div`,{className:Q?`contents`:`flex items-center gap-2`,children:[S&&G?(0,x.jsx)(c,{variant:`outline`,className:`text-orange-600 border-orange-300`,children:`未保存`}):null,(0,x.jsxs)(r,{variant:`ghost`,size:`sm`,onClick:le,disabled:!G||j||F,title:`撤销修改`,children:[(0,x.jsx)(a,{className:`h-4 w-4 mr-1`}),`还原`]}),(0,x.jsxs)(r,{variant:`outline`,size:`sm`,onClick:()=>W(e=>!e),disabled:!T||j||F,title:J?`使用 AI 根据补充需求更新代码`:`AI 未配置或未启用`,children:[(0,x.jsx)(i,{className:`h-4 w-4 mr-1`}),`AI 更新代码`]})]}),(0,x.jsxs)(`div`,{className:Q?`contents`:`flex gap-2`,children:[Q?null:(0,x.jsx)(r,{variant:`outline`,size:`sm`,onClick:Z,disabled:j||F,children:`关闭`}),(0,x.jsxs)(r,{variant:`outline`,size:`sm`,onClick:ce,disabled:!G||j||F,children:[N?(0,x.jsx)(p,{className:`h-4 w-4 mr-1 animate-spin`}):(0,x.jsx)(o,{className:`h-4 w-4 mr-1`}),`保存并热加载`]}),(0,x.jsx)(v,{onClick:X,saving:j&&!N,disabled:!G||j||F})]})]})]});return n?(0,x.jsx)(`div`,{className:`flex h-full min-h-0 flex-col`,children:$}):(0,x.jsx)(l,{open:e,onOpenChange:e=>{!e&&G&&!confirm(`有未保存的修改,确定要关闭吗?`)||(e||W(!1),t?.(e))},children:(0,x.jsx)(f,{className:`p-0 flex flex-col`,resizable:!0,defaultWidth:900,storageKey:`plugin-code-editor`,children:$})})}export{S as PluginCodeEditor};
|