ms-vite-plugin 1.5.1 → 1.5.3

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.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.addVararg=r;function c(t){t.vararg=!0,s(t.body.body)}function a(t){switch(t.type){case"FuncExpr":c(t);break;case"UnaryExpr":a(t.arg);break;case"BinaryExpr":a(t.left),a(t.right);break;case"TableExpr":for(const e of t.fields)e.kind==="index"&&a(e.key),a(e.value);break;case"IndexExpr":a(t.object),a(t.index);break;case"MemberExpr":a(t.object);break;case"CallExpr":a(t.callee);for(const e of t.args)a(e);break;case"MethodCallExpr":a(t.object);for(const e of t.args)a(e);break;case"ParenExpr":a(t.exp);break;default:break}}function s(t){for(const e of t)switch(e.type){case"DoStat":case"WhileStat":case"RepeatStat":case"ForNumStat":case"ForInStat":if(e.type==="WhileStat"&&a(e.cond),e.type==="RepeatStat"&&a(e.cond),e.type==="ForNumStat"&&(a(e.start),a(e.end),e.step&&a(e.step)),e.type==="ForInStat")for(const o of e.exps)a(o);s(e.body.body);break;case"IfStat":for(const o of e.clauses)a(o.cond),s(o.body.body);e.elseBody&&s(e.elseBody.body);break;case"FuncStat":case"LocalFuncStat":c(e.func);break;case"LocalStat":if(e.exps)for(const o of e.exps)a(o);break;case"AssignStat":for(const o of e.vars)a(o);for(const o of e.exps)a(o);break;case"CallStat":a(e.exp);break;case"ReturnStat":for(const o of e.exps)a(o);break;default:break}}function r(t){s(t.body)}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.addVararg=o;function c(t){t.vararg=!0,s(t.body.body)}function a(t){switch(t.type){case"FuncExpr":c(t);break;case"UnaryExpr":a(t.arg);break;case"BinaryExpr":a(t.left),a(t.right);break;case"TableExpr":for(const e of t.fields)e.kind==="index"&&a(e.key),a(e.value);break;case"IndexExpr":a(t.object),a(t.index);break;case"MemberExpr":a(t.object);break;case"CallExpr":a(t.callee);for(const e of t.args)a(e);break;case"MethodCallExpr":a(t.object);for(const e of t.args)a(e);break;case"ParenExpr":a(t.exp);break;default:break}}function s(t){for(const e of t)switch(e.type){case"DoStat":case"WhileStat":case"RepeatStat":case"ForNumStat":case"ForInStat":if(e.type==="WhileStat"&&a(e.cond),e.type==="RepeatStat"&&a(e.cond),e.type==="ForNumStat"&&(a(e.start),a(e.end),e.step&&a(e.step)),e.type==="ForInStat")for(const r of e.exps)a(r);s(e.body.body);break;case"IfStat":for(const r of e.clauses)a(r.cond),s(r.body.body);e.elseBody&&s(e.elseBody.body);break;case"FuncStat":case"LocalFuncStat":c(e.func);break;case"LocalStat":if(e.exps)for(const r of e.exps)a(r);break;case"AssignStat":for(const r of e.vars)a(r);for(const r of e.exps)a(r);break;case"CallStat":a(e.exp);break;case"ReturnStat":for(const r of e.exps)a(r);break;default:break}}function o(t){s(t.body)}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.flattenControlFlow=C;function m(e){return{type:"NumberLiteral",raw:String(e),value:e}}function y(e){return{type:"NameExpr",name:e}}function b(e,t){return{type:"AssignStat",vars:e.map(a=>y(a)),exps:t}}function u(e,t){return b([e.stateName],[typeof t=="number"?m(t):t])}function k(e,t,a){return{type:"BinaryExpr",op:"or",left:{type:"BinaryExpr",op:"and",left:y(e),right:m(t)},right:m(a)}}function E(e,t,a){return{type:"BinaryExpr",op:e,left:t,right:a}}function S(e){const t=`__t${e.nextTemp}`;return e.nextTemp+=1,e.temps.push(t),t}function x(e){const t=e.nextState;return e.nextState+=1,e.states.set(t,[]),t}function r(e,t,a){e.states.get(t).push(a)}function L(e,t){for(const a of e)if(a.type==="LocalStat")for(const s of a.names)t.push(s.name);else if(a.type==="LocalFuncStat")t.push(a.name);else if(a.type==="ForNumStat")t.push(a.name),L(a.body.body,t);else if(a.type==="ForInStat")t.push(...a.names),L(a.body.body,t);else if(a.type==="DoStat"||a.type==="WhileStat"||a.type==="RepeatStat")L(a.body.body,t);else if(a.type==="IfStat"){for(const s of a.clauses)L(s.body.body,t);a.elseBody&&L(a.elseBody.body,t)}}function h(e,t,a,s){if(e.length===0)return t;const p=e.map(()=>x(a));for(let o=0;o<e.length;o+=1){const c=e[o];c.type==="LabelStat"&&a.userLabels.set(c.name,p[o])}for(let o=0;o<e.length;o+=1){const c=o+1<e.length?p[o+1]:t;I(a,p[o],e[o],c,s)}return p[0]}function I(e,t,a,s,p){switch(a.type){case"EmptyStat":case"LabelStat":r(e,t,u(e,s));return;case"AssignStat":case"CallStat":case"FuncStat":r(e,t,a),r(e,t,u(e,s));return;case"LocalStat":a.exps&&a.exps.length>0&&r(e,t,b(a.names.map(o=>o.name),a.exps)),r(e,t,u(e,s));return;case"LocalFuncStat":r(e,t,b([a.name],[a.func])),r(e,t,u(e,s));return;case"ReturnStat":r(e,t,a);return;case"BreakStat":r(e,t,u(e,p));return;case"GotoStat":{const o=e.userLabels.get(a.name);if(o===void 0)throw new Error(`goto \u672A\u5B9A\u4E49\u6807\u7B7E ::${a.name}::`);r(e,t,u(e,o));return}case"DoStat":r(e,t,u(e,h(a.body.body,s,e,p)));return;case"IfStat":{const o=S(e);let c=t;for(let l=0;l<a.clauses.length;l+=1){const f=l===a.clauses.length-1,d=h(a.clauses[l].body.body,s,e,p);let i=s;f?a.elseBody&&(i=h(a.elseBody.body,s,e,p)):i=x(e),r(e,c,b([o],[a.clauses[l].cond])),r(e,c,u(e,k(o,d,i))),f||(c=i)}a.clauses.length===0&&r(e,t,u(e,s));return}case"WhileStat":{const o=S(e),c=h(a.body.body,t,e,s);r(e,t,b([o],[a.cond])),r(e,t,u(e,k(o,c,s)));return}case"RepeatStat":{const o=S(e),c=x(e),l=h(a.body.body,c,e,s);r(e,t,u(e,l)),r(e,c,b([o],[a.cond])),r(e,c,u(e,k(o,s,l)));return}case"ForNumStat":{const o=a.name,c=S(e),l=S(e),f=S(e),d=x(e),i=x(e),F=x(e),g=x(e),N=h(a.body.body,g,e,s);r(e,t,b([o],[a.start])),r(e,t,b([c],[a.end])),r(e,t,b([l],[a.step??m(1)])),r(e,t,u(e,d)),r(e,d,b([f],[E(">=",y(l),m(0))])),r(e,d,u(e,k(f,i,F))),r(e,i,b([f],[E("<=",y(o),y(c))])),r(e,i,u(e,k(f,N,s))),r(e,F,b([f],[E(">=",y(o),y(c))])),r(e,F,u(e,k(f,N,s))),r(e,g,b([o],[E("+",y(o),y(l))])),r(e,g,u(e,d));return}case"ForInStat":{const o=S(e),c=S(e),l=S(e),f=S(e),d=x(e),i=[b([l],[y(a.names[0])]),...a.body.body],F=h(i,d,e,s),g=a.exps.slice();for(;g.length<3;)g.push({type:"NilLiteral"});r(e,t,b([o,c,l],g.slice(0,3))),r(e,t,u(e,d)),r(e,d,{type:"AssignStat",vars:a.names.map(N=>y(N)),exps:[{type:"CallExpr",callee:y(o),args:[y(c),y(l)]}]}),r(e,d,b([f],[E("~=",y(a.names[0]),{type:"NilLiteral"})])),r(e,d,u(e,k(f,F,s)));return}default:r(e,t,u(e,s))}}function v(e,t){const a=e.slice();let s=t>>>0||1;for(let p=a.length-1;p>0;p-=1){s=Math.imul(s,1664525)+1013904223>>>0;const o=s%(p+1),c=a[p];a[p]=a[o],a[o]=c}return a}function w(e,t){if(e.length===0)return e;const a={states:new Map,temps:[],nextState:1,nextTemp:1,stateName:"__s",userLabels:new Map},s=[];L(e,s);const p=h(e,0,a,0),o=[...new Set([...s,...a.temps,a.stateName])],c=v([...a.states.keys()],t).map(l=>({cond:E("==",y(a.stateName),m(l)),body:{type:"Block",body:a.states.get(l)}}));return[{type:"LocalStat",names:o.map(l=>({name:l}))},b([a.stateName],[m(p)]),{type:"WhileStat",cond:E("~=",y(a.stateName),m(0)),body:{type:"Block",body:[{type:"IfStat",clauses:c}]}}]}function n(e,t){switch(e.type){case"FuncExpr":B(e.body.body,t),e.body.body=w(e.body.body,t);break;case"UnaryExpr":n(e.arg,t);break;case"BinaryExpr":n(e.left,t),n(e.right,t);break;case"TableExpr":for(const a of e.fields)a.kind==="index"&&n(a.key,t),n(a.value,t);break;case"IndexExpr":n(e.object,t),n(e.index,t);break;case"MemberExpr":n(e.object,t);break;case"CallExpr":n(e.callee,t);for(const a of e.args)n(a,t);break;case"MethodCallExpr":n(e.object,t);for(const a of e.args)n(a,t);break;case"ParenExpr":n(e.exp,t);break;default:break}}function B(e,t){for(const a of e)switch(a.type){case"DoStat":case"WhileStat":case"RepeatStat":case"ForNumStat":case"ForInStat":if((a.type==="WhileStat"||a.type==="RepeatStat")&&n(a.cond,t),a.type==="ForNumStat"&&(n(a.start,t),n(a.end,t),a.step&&n(a.step,t)),a.type==="ForInStat")for(const s of a.exps)n(s,t);B(a.body.body,t);break;case"IfStat":for(const s of a.clauses)n(s.cond,t),B(s.body.body,t);a.elseBody&&B(a.elseBody.body,t);break;case"FuncStat":case"LocalFuncStat":B(a.func.body.body,t),a.func.body.body=w(a.func.body.body,t);break;case"LocalStat":if(a.exps)for(const s of a.exps)n(s,t);break;case"AssignStat":for(const s of a.vars)n(s,t);for(const s of a.exps)n(s,t);break;case"CallStat":n(a.exp,t);break;case"ReturnStat":for(const s of a.exps)n(s,t);break;default:break}}function C(e,t){B(e.body,t),e.body=w(e.body,t)}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.flattenControlFlow=C;function m(e){return{type:"NumberLiteral",raw:String(e),value:e}}function y(e){return{type:"NameExpr",name:e}}function b(e,t){return{type:"AssignStat",vars:e.map(a=>y(a)),exps:t}}function u(e,t){return b([e.stateName],[typeof t=="number"?m(t):t])}function k(e,t,a){return{type:"BinaryExpr",op:"or",left:{type:"BinaryExpr",op:"and",left:y(e),right:m(t)},right:m(a)}}function E(e,t,a){return{type:"BinaryExpr",op:e,left:t,right:a}}function S(e){const t=`__t${e.nextTemp}`;return e.nextTemp+=1,e.temps.push(t),t}function x(e){const t=e.nextState;return e.nextState+=1,e.states.set(t,[]),t}function r(e,t,a){e.states.get(t).push(a)}function L(e,t){for(const a of e)if(a.type==="LocalStat")for(const o of a.names)t.push(o.name);else if(a.type==="LocalFuncStat")t.push(a.name);else if(a.type==="ForNumStat")t.push(a.name),L(a.body.body,t);else if(a.type==="ForInStat")t.push(...a.names),L(a.body.body,t);else if(a.type==="DoStat"||a.type==="WhileStat"||a.type==="RepeatStat")L(a.body.body,t);else if(a.type==="IfStat"){for(const o of a.clauses)L(o.body.body,t);a.elseBody&&L(a.elseBody.body,t)}}function h(e,t,a,o){if(e.length===0)return t;const p=e.map(()=>x(a));for(let n=0;n<e.length;n+=1){const c=e[n];c.type==="LabelStat"&&a.userLabels.set(c.name,p[n])}for(let n=0;n<e.length;n+=1){const c=n+1<e.length?p[n+1]:t;I(a,p[n],e[n],c,o)}return p[0]}function I(e,t,a,o,p){switch(a.type){case"EmptyStat":case"LabelStat":r(e,t,u(e,o));return;case"AssignStat":case"CallStat":case"FuncStat":r(e,t,a),r(e,t,u(e,o));return;case"LocalStat":a.exps&&a.exps.length>0&&r(e,t,b(a.names.map(n=>n.name),a.exps)),r(e,t,u(e,o));return;case"LocalFuncStat":r(e,t,b([a.name],[a.func])),r(e,t,u(e,o));return;case"ReturnStat":r(e,t,a);return;case"BreakStat":r(e,t,u(e,p));return;case"GotoStat":{const n=e.userLabels.get(a.name);if(n===void 0)throw new Error(`goto \u672A\u5B9A\u4E49\u6807\u7B7E ::${a.name}::`);r(e,t,u(e,n));return}case"DoStat":r(e,t,u(e,h(a.body.body,o,e,p)));return;case"IfStat":{const n=S(e);let c=t;for(let l=0;l<a.clauses.length;l+=1){const f=l===a.clauses.length-1,d=h(a.clauses[l].body.body,o,e,p);let i=o;f?a.elseBody&&(i=h(a.elseBody.body,o,e,p)):i=x(e),r(e,c,b([n],[a.clauses[l].cond])),r(e,c,u(e,k(n,d,i))),f||(c=i)}a.clauses.length===0&&r(e,t,u(e,o));return}case"WhileStat":{const n=S(e),c=h(a.body.body,t,e,o);r(e,t,b([n],[a.cond])),r(e,t,u(e,k(n,c,o)));return}case"RepeatStat":{const n=S(e),c=x(e),l=h(a.body.body,c,e,o);r(e,t,u(e,l)),r(e,c,b([n],[a.cond])),r(e,c,u(e,k(n,o,l)));return}case"ForNumStat":{const n=a.name,c=S(e),l=S(e),f=S(e),d=x(e),i=x(e),F=x(e),g=x(e),N=h(a.body.body,g,e,o);r(e,t,b([n],[a.start])),r(e,t,b([c],[a.end])),r(e,t,b([l],[a.step??m(1)])),r(e,t,u(e,d)),r(e,d,b([f],[E(">=",y(l),m(0))])),r(e,d,u(e,k(f,i,F))),r(e,i,b([f],[E("<=",y(n),y(c))])),r(e,i,u(e,k(f,N,o))),r(e,F,b([f],[E(">=",y(n),y(c))])),r(e,F,u(e,k(f,N,o))),r(e,g,b([n],[E("+",y(n),y(l))])),r(e,g,u(e,d));return}case"ForInStat":{const n=S(e),c=S(e),l=S(e),f=S(e),d=x(e),i=[b([l],[y(a.names[0])]),...a.body.body],F=h(i,d,e,o),g=a.exps.slice();for(;g.length<3;)g.push({type:"NilLiteral"});r(e,t,b([n,c,l],g.slice(0,3))),r(e,t,u(e,d)),r(e,d,{type:"AssignStat",vars:a.names.map(N=>y(N)),exps:[{type:"CallExpr",callee:y(n),args:[y(c),y(l)]}]}),r(e,d,b([f],[E("~=",y(a.names[0]),{type:"NilLiteral"})])),r(e,d,u(e,k(f,F,o)));return}default:r(e,t,u(e,o))}}function v(e,t){const a=e.slice();let o=t>>>0||1;for(let p=a.length-1;p>0;p-=1){o=Math.imul(o,1664525)+1013904223>>>0;const n=o%(p+1),c=a[p];a[p]=a[n],a[n]=c}return a}function w(e,t){if(e.length===0)return e;const a={states:new Map,temps:[],nextState:1,nextTemp:1,stateName:"__s",userLabels:new Map},o=[];L(e,o);const p=h(e,0,a,0),n=[...new Set([...o,...a.temps,a.stateName])],c=v([...a.states.keys()],t).map(l=>({cond:E("==",y(a.stateName),m(l)),body:{type:"Block",body:a.states.get(l)}}));return[{type:"LocalStat",names:n.map(l=>({name:l}))},b([a.stateName],[m(p)]),{type:"WhileStat",cond:E("~=",y(a.stateName),m(0)),body:{type:"Block",body:[{type:"IfStat",clauses:c}]}}]}function s(e,t){switch(e.type){case"FuncExpr":B(e.body.body,t),e.body.body=w(e.body.body,t);break;case"UnaryExpr":s(e.arg,t);break;case"BinaryExpr":s(e.left,t),s(e.right,t);break;case"TableExpr":for(const a of e.fields)a.kind==="index"&&s(a.key,t),s(a.value,t);break;case"IndexExpr":s(e.object,t),s(e.index,t);break;case"MemberExpr":s(e.object,t);break;case"CallExpr":s(e.callee,t);for(const a of e.args)s(a,t);break;case"MethodCallExpr":s(e.object,t);for(const a of e.args)s(a,t);break;case"ParenExpr":s(e.exp,t);break;default:break}}function B(e,t){for(const a of e)switch(a.type){case"DoStat":case"WhileStat":case"RepeatStat":case"ForNumStat":case"ForInStat":if((a.type==="WhileStat"||a.type==="RepeatStat")&&s(a.cond,t),a.type==="ForNumStat"&&(s(a.start,t),s(a.end,t),a.step&&s(a.step,t)),a.type==="ForInStat")for(const o of a.exps)s(o,t);B(a.body.body,t);break;case"IfStat":for(const o of a.clauses)s(o.cond,t),B(o.body.body,t);a.elseBody&&B(a.elseBody.body,t);break;case"FuncStat":case"LocalFuncStat":B(a.func.body.body,t),a.func.body.body=w(a.func.body.body,t);break;case"LocalStat":if(a.exps)for(const o of a.exps)s(o,t);break;case"AssignStat":for(const o of a.vars)s(o,t);for(const o of a.exps)s(o,t);break;case"CallStat":s(a.exp,t);break;case"ReturnStat":for(const o of a.exps)s(o,t);break;default:break}}function C(e,t){B(e.body,t),e.body=w(e.body,t)}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.shortName=o,exports.renameLocals=c;const u=require("./reserved"),d=require("./scope"),l="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";function o(a){let e=a,t="";do t=l[e%l.length]+t,e=Math.floor(e/l.length)-1;while(e>=0);return u.luaKeywords.has(t)?`_${t}`:t}function c(a){let e=0;const t=new Set;(0,d.collectAndRename)(a,(r,s)=>{if(r.newName!==r.original)return;let n=o(e);for(e+=1;s.has(n)||t.has(n)||u.luaKeywords.has(n);)n=o(e),e+=1;r.newName=n,t.add(n),s.add(n)})}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.shortName=o,exports.renameLocals=c;const u=require("./reserved"),d=require("./scope"),l="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";function o(r){let e=r,t="";do t=l[e%l.length]+t,e=Math.floor(e/l.length)-1;while(e>=0);return u.luaKeywords.has(t)?`_${t}`:t}function c(r){let e=0;const t=new Set;(0,d.collectAndRename)(r,(a,s)=>{if(a.newName!==a.original)return;let n=o(e);for(e+=1;s.has(n)||t.has(n)||u.luaKeywords.has(n);)n=o(e),e+=1;a.newName=n,t.add(n),s.add(n)})}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.resolveLocal=i,exports.collectAndRename=x;function i(e,s){let n=e;for(;n;){const a=n.locals.get(s);if(a)return a;n=n.parent}}function c(e){return{parent:e,locals:new Map}}function f(e,s){const n=e.locals.get(s);if(n)return n;const a={original:s,newName:s};return e.locals.set(s,a),a}function x(e,s){const n=new Set,a={locals:new Map};d(e.body,a,n,s)}function u(e,s,n,a){d(e.body,s,n,a)}function d(e,s,n,a){for(const o of e)b(o,s,n,a)}function m(e,s,n,a){const o=c(s),r=e.params.slice();for(let l=0;l<r.length;l+=1){const p=f(o,r[l]);a(p,n),e.params[l]=p.newName}u(e.body,o,n,a)}function b(e,s,n,a){switch(e.type){case"EmptyStat":case"BreakStat":case"GotoStat":case"LabelStat":return;case"DoStat":u(e.body,c(s),n,a);return;case"WhileStat":t(e.cond,s,n,a),u(e.body,c(s),n,a);return;case"RepeatStat":{const o=c(s);u(e.body,o,n,a),t(e.cond,o,n,a);return}case"IfStat":for(const o of e.clauses)t(o.cond,s,n,a),u(o.body,c(s),n,a);e.elseBody&&u(e.elseBody,c(s),n,a);return;case"ForNumStat":{t(e.start,s,n,a),t(e.end,s,n,a),e.step&&t(e.step,s,n,a);const o=c(s),r=f(o,e.name);a(r,n),e.name=r.newName,u(e.body,o,n,a);return}case"ForInStat":{for(const r of e.exps)t(r,s,n,a);const o=c(s);for(let r=0;r<e.names.length;r+=1){const l=f(o,e.names[r]);a(l,n),e.names[r]=l.newName}u(e.body,o,n,a);return}case"FuncStat":{const o=i(s,e.name.base);o&&(e.name.base=o.newName),m(e.func,s,n,a);return}case"LocalFuncStat":{const o=f(s,e.name);a(o,n),e.name=o.newName,m(e.func,s,n,a);return}case"LocalStat":if(e.exps)for(const o of e.exps)t(o,s,n,a);for(let o=0;o<e.names.length;o+=1){const r=f(s,e.names[o].name);a(r,n),e.names[o].name=r.newName}return;case"AssignStat":for(const o of e.vars)t(o,s,n,a);for(const o of e.exps)t(o,s,n,a);return;case"CallStat":t(e.exp,s,n,a);return;case"ReturnStat":for(const o of e.exps)t(o,s,n,a);return}}function t(e,s,n,a){switch(e.type){case"NilLiteral":case"BoolLiteral":case"NumberLiteral":case"StringLiteral":case"VarargExpr":return;case"NameExpr":{const o=i(s,e.name);o&&(e.name=o.newName);return}case"UnaryExpr":t(e.arg,s,n,a);return;case"BinaryExpr":t(e.left,s,n,a),t(e.right,s,n,a);return;case"FuncExpr":m(e,s,n,a);return;case"TableExpr":for(const o of e.fields)o.kind==="index"&&t(o.key,s,n,a),t(o.value,s,n,a);return;case"IndexExpr":t(e.object,s,n,a),t(e.index,s,n,a);return;case"MemberExpr":t(e.object,s,n,a);return;case"CallExpr":t(e.callee,s,n,a);for(const o of e.args)t(o,s,n,a);return;case"MethodCallExpr":t(e.object,s,n,a);for(const o of e.args)t(o,s,n,a);return;case"ParenExpr":t(e.exp,s,n,a);return}}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.resolveLocal=i,exports.collectAndRename=x;function i(e,o){let n=e;for(;n;){const a=n.locals.get(o);if(a)return a;n=n.parent}}function s(e){return{parent:e,locals:new Map}}function f(e,o){const n=e.locals.get(o);if(n)return n;const a={original:o,newName:o};return e.locals.set(o,a),a}function x(e,o){const n=new Set,a={locals:new Map};d(e.body,a,n,o)}function u(e,o,n,a){d(e.body,o,n,a)}function d(e,o,n,a){for(const c of e)b(c,o,n,a)}function m(e,o,n,a){const c=s(o),r=e.params.slice();for(let l=0;l<r.length;l+=1){const p=f(c,r[l]);a(p,n),e.params[l]=p.newName}u(e.body,c,n,a)}function b(e,o,n,a){switch(e.type){case"EmptyStat":case"BreakStat":case"GotoStat":case"LabelStat":return;case"DoStat":u(e.body,s(o),n,a);return;case"WhileStat":t(e.cond,o,n,a),u(e.body,s(o),n,a);return;case"RepeatStat":{const c=s(o);u(e.body,c,n,a),t(e.cond,c,n,a);return}case"IfStat":for(const c of e.clauses)t(c.cond,o,n,a),u(c.body,s(o),n,a);e.elseBody&&u(e.elseBody,s(o),n,a);return;case"ForNumStat":{t(e.start,o,n,a),t(e.end,o,n,a),e.step&&t(e.step,o,n,a);const c=s(o),r=f(c,e.name);a(r,n),e.name=r.newName,u(e.body,c,n,a);return}case"ForInStat":{for(const r of e.exps)t(r,o,n,a);const c=s(o);for(let r=0;r<e.names.length;r+=1){const l=f(c,e.names[r]);a(l,n),e.names[r]=l.newName}u(e.body,c,n,a);return}case"FuncStat":{const c=i(o,e.name.base);c&&(e.name.base=c.newName),m(e.func,o,n,a);return}case"LocalFuncStat":{const c=f(o,e.name);a(c,n),e.name=c.newName,m(e.func,o,n,a);return}case"LocalStat":if(e.exps)for(const c of e.exps)t(c,o,n,a);for(let c=0;c<e.names.length;c+=1){const r=f(o,e.names[c].name);a(r,n),e.names[c].name=r.newName}return;case"AssignStat":for(const c of e.vars)t(c,o,n,a);for(const c of e.exps)t(c,o,n,a);return;case"CallStat":t(e.exp,o,n,a);return;case"ReturnStat":for(const c of e.exps)t(c,o,n,a);return}}function t(e,o,n,a){switch(e.type){case"NilLiteral":case"BoolLiteral":case"NumberLiteral":case"StringLiteral":case"VarargExpr":return;case"NameExpr":{const c=i(o,e.name);c&&(e.name=c.newName);return}case"UnaryExpr":t(e.arg,o,n,a);return;case"BinaryExpr":t(e.left,o,n,a),t(e.right,o,n,a);return;case"FuncExpr":m(e,o,n,a);return;case"TableExpr":for(const c of e.fields)c.kind==="index"&&t(c.key,o,n,a),t(c.value,o,n,a);return;case"IndexExpr":t(e.object,o,n,a),t(e.index,o,n,a);return;case"MemberExpr":t(e.object,o,n,a);return;case"CallExpr":t(e.callee,o,n,a);for(const c of e.args)t(c,o,n,a);return;case"MethodCallExpr":t(e.object,o,n,a);for(const c of e.args)t(c,o,n,a);return;case"ParenExpr":t(e.exp,o,n,a);return}}
@@ -1,11 +1,14 @@
1
- "use strict";var _=exports&&exports.__createBinding||(Object.create?(function(r,t,o,n){n===void 0&&(n=o);var e=Object.getOwnPropertyDescriptor(t,o);(!e||("get"in e?!t.__esModule:e.writable||e.configurable))&&(e={enumerable:!0,get:function(){return t[o]}}),Object.defineProperty(r,n,e)}):(function(r,t,o,n){n===void 0&&(n=o),r[n]=t[o]})),R=exports&&exports.__setModuleDefault||(Object.create?(function(r,t){Object.defineProperty(r,"default",{enumerable:!0,value:t})}):function(r,t){r.default=t}),d=exports&&exports.__importStar||(function(){var r=function(t){return r=Object.getOwnPropertyNames||function(o){var n=[];for(var e in o)Object.prototype.hasOwnProperty.call(o,e)&&(n[n.length]=e);return n},r(t)};return function(t){if(t&&t.__esModule)return t;var o={};if(t!=null)for(var n=r(t),e=0;e<n.length;e++)n[e]!=="default"&&_(o,t,n[e]);return R(o,t),o}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.registerRuntimeTools=$;const T=d(require("fs-extra")),P=d(require("os")),g=d(require("path")),s=d(require("zod/v4")),v=require("../packager"),u=require("../project"),b=require("./device-config"),O=require("./device-log"),S=require("./project"),i=require("./tool-utils");function h(r,t,o){return r&&r.trim()?g.resolve(r.trim()):g.join(P.tmpdir(),`${t}-${Date.now()}-${Math.random().toString(36).slice(2,8)}.${o}`)}function $(r){let t;function o(e){if(e&&e.trim())return t=g.resolve(e.trim()),t;if(t)return t;throw new Error("\u672A\u8BBE\u7F6E\u5DE5\u4F5C\u76EE\u5F55\uFF1A\u8BF7\u5148\u8C03\u7528 set_workspace\uFF0C\u6216\u5728\u672C\u6B21\u5DE5\u5177\u8C03\u7528\u65F6\u4F20 workspacePath\u3002")}async function n(e){const a=o(e);return await(0,S.ensureValidKuaiJSProject)(a),a}r.registerTool("set_workspace",{title:"Set Workspace",description:"\u8BBE\u7F6E\u5F53\u524D MCP \u8FDB\u7A0B\u5185\u7684\u9ED8\u8BA4\u5DE5\u4F5C\u76EE\u5F55\u3002\u540E\u7EED build/run/package \u4F18\u5148\u4F7F\u7528\u8BE5\u76EE\u5F55\u3002",inputSchema:{workspacePath:s.string().min(1).describe("\u5FEB\u70B9JS \u9879\u76EE\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84\uFF08\u9700\u5305\u542B package.json \u4E0E scripts\uFF09")}},async({workspacePath:e})=>{const a=await n(e);return(0,i.createTextToolResult)(`\u9ED8\u8BA4\u5DE5\u4F5C\u76EE\u5F55\u5DF2\u8BBE\u7F6E\u4E3A: ${a}`)}),r.registerTool("get_workspace",{title:"Get Workspace",description:"\u67E5\u770B\u5F53\u524D MCP \u8FDB\u7A0B\u5185\u8BB0\u5FC6\u7684\u5DE5\u4F5C\u76EE\u5F55\u3002",inputSchema:{}},async()=>t?(0,i.createTextToolResult)(`\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55: ${t}`):(0,i.createTextToolResult)("\u5F53\u524D\u672A\u8BBE\u7F6E\u5DE5\u4F5C\u76EE\u5F55\uFF0C\u8BF7\u5148\u8C03\u7528 set_workspace\u3002")),r.registerTool("set_device",{title:"Set Device",description:"\u8BBE\u7F6E\u5F53\u524D\u552F\u4E00\u8BBE\u5907\u8FDE\u63A5\u4FE1\u606F\u3002\u8BBE\u7F6E\u540E\u5176\u4F59\u8BBE\u5907\u5DE5\u5177\u5747\u590D\u7528\u8BE5\u8BBE\u5907\u3002",inputSchema:{ip:s.string().min(1).describe("\u8BBE\u5907 IP \u5730\u5740\uFF0C\u4F8B\u5982 192.168.1.100"),port:s.number().int().min(1).max(65535).optional().describe("\u8BBE\u5907\u7AEF\u53E3\uFF0C\u9ED8\u8BA4 9800")}},async({ip:e,port:a})=>{const c=await(0,b.setDeviceConfig)(e,a);return(0,i.createTextToolResult)(`\u9ED8\u8BA4\u8BBE\u5907\u5DF2\u8BBE\u7F6E\u4E3A ${c.ip}:${c.port}`)}),r.registerTool("get_device",{title:"Get Device",description:"\u67E5\u770B\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907\u914D\u7F6E\u3002",inputSchema:{}},async()=>{const e=await(0,b.readDeviceConfig)();return e?(0,i.createTextToolResult)(`\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907: ${e.ip}:${e.port}`):(0,i.createTextToolResult)("\u5F53\u524D\u672A\u8BBE\u7F6E\u9ED8\u8BA4\u8BBE\u5907\uFF0C\u8BF7\u5148\u8C03\u7528 set_device\u3002")}),r.registerTool("take_screenshot",{title:"Take Screenshot",description:"\u83B7\u53D6\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907\u622A\u56FE\u3002\u53EF\u8FD4\u56DE base64\uFF0C\u6216\u843D\u5730\u5230\u6587\u4EF6\u540E\u8FD4\u56DE\u6587\u4EF6\u8DEF\u5F84\uFF08\u9ED8\u8BA4\u5199\u5165\u7CFB\u7EDF\u4E34\u65F6\u76EE\u5F55\uFF09\u3002",inputSchema:{format:s.enum(["file","base64"]).optional().default("file").describe("\u622A\u56FE\u8FD4\u56DE\u683C\u5F0F\uFF1Afile=\u6587\u4EF6\u8DEF\u5F84\uFF0Cbase64=\u56FE\u7247 base64"),outputPath:s.string().min(1).optional().describe("\u5F53 format=file \u65F6\u53EF\u6307\u5B9A\u8F93\u51FA\u8DEF\u5F84\uFF0C\u4E0D\u4F20\u5219\u5199\u5165\u7CFB\u7EDF\u4E34\u65F6\u76EE\u5F55")}},async({format:e,outputPath:a})=>{const c=await(0,i.resolveRuntimeHttpTarget)(),m=(0,i.createRuntimeHttpRequestOptions)(c);if(e==="base64"){const f=await(0,u.getScreenshotBase64OnDevice)(m);return(0,i.createTextToolResult)(`\u622A\u56FE\u6210\u529F: ${c.label}
1
+ "use strict";var $=exports&&exports.__createBinding||(Object.create?(function(t,r,s,o){o===void 0&&(o=s);var c=Object.getOwnPropertyDescriptor(r,s);(!c||("get"in c?!r.__esModule:c.writable||c.configurable))&&(c={enumerable:!0,get:function(){return r[s]}}),Object.defineProperty(t,o,c)}):(function(t,r,s,o){o===void 0&&(o=s),t[o]=r[s]})),R=exports&&exports.__setModuleDefault||(Object.create?(function(t,r){Object.defineProperty(t,"default",{enumerable:!0,value:r})}):function(t,r){t.default=r}),w=exports&&exports.__importStar||(function(){var t=function(r){return t=Object.getOwnPropertyNames||function(s){var o=[];for(var c in s)Object.prototype.hasOwnProperty.call(s,c)&&(o[o.length]=c);return o},t(r)};return function(r){if(r&&r.__esModule)return r;var s={};if(r!=null)for(var o=t(r),c=0;c<o.length;c++)o[c]!=="default"&&$(s,r,o[c]);return R(s,r),s}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.registerRuntimeTools=O;const b=w(require("fs-extra")),v=w(require("os")),T=w(require("path")),u=w(require("zod/v4")),P=require("../packager"),m=require("../project"),h=require("./device-config"),D=require("./device-log"),y=require("./project"),i=require("./tool-utils"),_=require("../usb-forward");function S(t,r,s){return t&&t.trim()?T.resolve(t.trim()):T.join(v.tmpdir(),`${r}-${Date.now()}-${Math.random().toString(36).slice(2,8)}.${s}`)}function O(t){let r;function s(e){if(e&&e.trim())return r=T.resolve(e.trim()),r;if(r)return r;throw new Error("\u672A\u8BBE\u7F6E\u5DE5\u4F5C\u76EE\u5F55\uFF1A\u8BF7\u5148\u8C03\u7528 set_workspace\uFF0C\u6216\u5728\u672C\u6B21\u5DE5\u5177\u8C03\u7528\u65F6\u4F20 workspacePath\u3002")}async function o(e){const n=s(e);return await(0,y.ensureValidKuaiJSProject)(n),n}t.registerTool("set_workspace",{title:"Set Workspace",description:"\u8BBE\u7F6E\u5F53\u524D MCP \u8FDB\u7A0B\u5185\u7684\u9ED8\u8BA4\u5DE5\u4F5C\u76EE\u5F55\u3002\u540E\u7EED build/run/package \u4F18\u5148\u4F7F\u7528\u8BE5\u76EE\u5F55\u3002",inputSchema:{workspacePath:u.string().min(1).describe("\u5FEB\u70B9JS \u9879\u76EE\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84\uFF08\u9700\u5305\u542B package.json \u4E0E scripts\uFF09")}},async({workspacePath:e})=>{const n=await o(e);return(0,i.createTextToolResult)(`\u9ED8\u8BA4\u5DE5\u4F5C\u76EE\u5F55\u5DF2\u8BBE\u7F6E\u4E3A: ${n}`)}),t.registerTool("get_workspace",{title:"Get Workspace",description:"\u67E5\u770B\u5F53\u524D MCP \u8FDB\u7A0B\u5185\u8BB0\u5FC6\u7684\u5DE5\u4F5C\u76EE\u5F55\u3002",inputSchema:{}},async()=>r?(0,i.createTextToolResult)(`\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55: ${r}`):(0,i.createTextToolResult)("\u5F53\u524D\u672A\u8BBE\u7F6E\u5DE5\u4F5C\u76EE\u5F55\uFF0C\u8BF7\u5148\u8C03\u7528 set_workspace\u3002"));function c(e){return e.length===0?"\u5F53\u524D\u65E0 USB \u8BBE\u5907":e.map((n,a)=>`[${a+1}] ${n.name} udid=${n.udid} ${n.ip}:${n.port}`).join(`
2
+ `)}t.registerTool("list_usb_devices",{title:"List USB Devices",description:"\u5217\u51FA\u5F53\u524D USB \u8F6C\u53D1\u8BBE\u5907\u3002",inputSchema:{}},async()=>{const e=(0,_.getSharedUsbDevices)();return(0,i.createTextToolResult)(`USB \u8BBE\u5907 (${e.length}):
3
+ ${c(e)}`)}),t.registerTool("set_device",{title:"Set Device",description:"\u8BBE\u7F6E\u9ED8\u8BA4\u8BBE\u5907\u3002\u7F51\u7EDC\u8BBE\u5907\u4F20 ip/port\uFF0CUSB \u8BBE\u5907\u4F20 udid\u3002",inputSchema:{ip:u.string().min(1).optional().describe("\u8BBE\u5907 IP\uFF0C\u4F8B\u5982 192.168.1.100"),port:u.number().int().min(1).max(65535).optional().describe("\u8BBE\u5907\u7AEF\u53E3\uFF0C\u9ED8\u8BA4 9800"),udid:u.string().min(1).optional().describe("USB \u8BBE\u5907 UDID")}},async({ip:e,port:n,udid:a})=>{if(a?.trim()){const p=a.trim(),l=(0,_.getSharedUsbDevices)().find(f=>f.udid===p);if(!l)throw new Error(`\u672A\u627E\u5230 USB \u8BBE\u5907 udid=${p}
4
+ ${c((0,_.getSharedUsbDevices)())}`);const d=await(0,h.setDeviceConfig)(l.ip,l.port);return(0,i.createTextToolResult)(`\u9ED8\u8BA4\u8BBE\u5907\u5DF2\u8BBE\u7F6E\u4E3A USB ${l.name} (${d.ip}:${d.port})`)}if(!e?.trim())throw new Error("\u8BF7\u63D0\u4F9B ip\uFF0C\u6216\u63D0\u4F9B USB udid\u3002");const g=await(0,h.setDeviceConfig)(e,n);return(0,i.createTextToolResult)(`\u9ED8\u8BA4\u8BBE\u5907\u5DF2\u8BBE\u7F6E\u4E3A ${g.ip}:${g.port}`)}),t.registerTool("get_device",{title:"Get Device",description:"\u67E5\u770B\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907\u914D\u7F6E\u3002",inputSchema:{}},async()=>{const e=await(0,h.readDeviceConfig)();return e?(0,i.createTextToolResult)(`\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907: ${e.ip}:${e.port}`):(0,i.createTextToolResult)("\u5F53\u524D\u672A\u8BBE\u7F6E\u9ED8\u8BA4\u8BBE\u5907\uFF0C\u8BF7\u5148\u8C03\u7528 set_device\u3002")}),t.registerTool("take_screenshot",{title:"Take Screenshot",description:"\u83B7\u53D6\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907\u622A\u56FE\u3002\u53EF\u8FD4\u56DE base64\uFF0C\u6216\u843D\u5730\u5230\u6587\u4EF6\u540E\u8FD4\u56DE\u6587\u4EF6\u8DEF\u5F84\uFF08\u9ED8\u8BA4\u5199\u5165\u7CFB\u7EDF\u4E34\u65F6\u76EE\u5F55\uFF09\u3002",inputSchema:{format:u.enum(["file","base64"]).optional().default("file").describe("\u622A\u56FE\u8FD4\u56DE\u683C\u5F0F\uFF1Afile=\u6587\u4EF6\u8DEF\u5F84\uFF0Cbase64=\u56FE\u7247 base64"),outputPath:u.string().min(1).optional().describe("\u5F53 format=file \u65F6\u53EF\u6307\u5B9A\u8F93\u51FA\u8DEF\u5F84\uFF0C\u4E0D\u4F20\u5219\u5199\u5165\u7CFB\u7EDF\u4E34\u65F6\u76EE\u5F55")}},async({format:e,outputPath:n})=>{const a=await(0,i.resolveRuntimeHttpTarget)(),g=(0,i.createRuntimeHttpRequestOptions)(a);if(e==="base64"){const d=await(0,m.getScreenshotBase64OnDevice)(g);return(0,i.createTextToolResult)(`\u622A\u56FE\u6210\u529F: ${a.label}
2
5
  format: base64
3
- ${f}`)}const l=await(0,u.getScreenshotOnDevice)(m),p=h(a,"ms-mcp-screenshot","jpg");return await T.ensureDir(g.dirname(p)),await T.writeFile(p,l),(0,i.createTextToolResult)(`\u622A\u56FE\u6210\u529F: ${c.label}
6
+ ${d}`)}const p=await(0,m.getScreenshotOnDevice)(g),l=S(n,"ms-mcp-screenshot","jpg");return await b.ensureDir(T.dirname(l)),await b.writeFile(l,p),(0,i.createTextToolResult)(`\u622A\u56FE\u6210\u529F: ${a.label}
4
7
  format: file
5
- path: ${p}
6
- size: ${l.length} bytes`)}),r.registerTool("get_node_source",{title:"Get Node Source",description:"\u83B7\u53D6\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907\u9875\u9762\u8282\u70B9 XML\uFF0C\u5199\u5165\u6587\u4EF6\u540E\u8FD4\u56DE\u8DEF\u5F84\uFF0C\u907F\u514D\u957F\u6587\u672C\u54CD\u5E94\u88AB\u622A\u65AD\u3002",inputSchema:{maxDepth:s.number().int().min(1).max(200).optional().default(50).describe("\u8282\u70B9\u6811\u6700\u5927\u6DF1\u5EA6\uFF0C\u9ED8\u8BA4 50"),timeout:s.number().int().min(1).max(600).optional().default(120).describe("\u8BBE\u5907\u7AEF\u8282\u70B9\u6293\u53D6\u8D85\u65F6\u79D2\u6570\uFF0C\u9ED8\u8BA4 120"),mode:s.number().int().min(1).max(3).optional().default(1).describe("\u8282\u70B9\u6293\u53D6\u6A21\u5F0F\uFF1A1\u30012\u30013\uFF0C\u9ED8\u8BA4 1"),outputPath:s.string().min(1).optional().describe("\u53EF\u9009\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84\uFF0C\u4E0D\u4F20\u5219\u5199\u5165\u7CFB\u7EDF\u4E34\u65F6\u76EE\u5F55")}},async({maxDepth:e,timeout:a,mode:c,outputPath:m})=>{const l=await(0,i.resolveRuntimeHttpTarget)(),p=(0,i.createRuntimeHttpRequestOptions)(l),f=await(0,u.getSourceOnDevice)(p,e,a,c),w=h(m,"ms-mcp-node-source","xml");return await T.ensureDir(g.dirname(w)),await T.writeFile(w,f,"utf8"),(0,i.createTextToolResult)(`\u8282\u70B9\u83B7\u53D6\u6210\u529F: ${l.label}
8
+ path: ${l}
9
+ size: ${p.length} bytes`)}),t.registerTool("get_node_source",{title:"Get Node Source",description:"\u83B7\u53D6\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907\u9875\u9762\u8282\u70B9 XML\uFF0C\u5199\u5165\u6587\u4EF6\u540E\u8FD4\u56DE\u8DEF\u5F84\uFF0C\u907F\u514D\u957F\u6587\u672C\u54CD\u5E94\u88AB\u622A\u65AD\u3002",inputSchema:{maxDepth:u.number().int().min(1).max(200).optional().default(50).describe("\u8282\u70B9\u6811\u6700\u5927\u6DF1\u5EA6\uFF0C\u9ED8\u8BA4 50"),timeout:u.number().int().min(1).max(600).optional().default(120).describe("\u8BBE\u5907\u7AEF\u8282\u70B9\u6293\u53D6\u8D85\u65F6\u79D2\u6570\uFF0C\u9ED8\u8BA4 120"),mode:u.number().int().min(1).max(3).optional().default(1).describe("\u8282\u70B9\u6293\u53D6\u6A21\u5F0F\uFF1A1\u30012\u30013\uFF0C\u9ED8\u8BA4 1"),outputPath:u.string().min(1).optional().describe("\u53EF\u9009\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84\uFF0C\u4E0D\u4F20\u5219\u5199\u5165\u7CFB\u7EDF\u4E34\u65F6\u76EE\u5F55")}},async({maxDepth:e,timeout:n,mode:a,outputPath:g})=>{const p=await(0,i.resolveRuntimeHttpTarget)(),l=(0,i.createRuntimeHttpRequestOptions)(p),d=await(0,m.getSourceOnDevice)(l,e,n,a),f=S(g,"ms-mcp-node-source","xml");return await b.ensureDir(T.dirname(f)),await b.writeFile(f,d,"utf8"),(0,i.createTextToolResult)(`\u8282\u70B9\u83B7\u53D6\u6210\u529F: ${p.label}
7
10
  maxDepth: ${e}
8
- timeout: ${a}
9
- mode: ${c}
10
- path: ${w}
11
- size: ${Buffer.byteLength(f,"utf8")} bytes`)}),r.registerTool("get_logs",{title:"Get Device Logs",description:"\u83B7\u53D6\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907\u7684\u6700\u65B0\u65E5\u5FD7\u884C\u3002",inputSchema:{limit:s.number().int().min(1).max(5e3).optional().default(200).describe("\u8FD4\u56DE\u6700\u8FD1\u65E5\u5FD7\u6761\u6570\uFF0C\u9ED8\u8BA4 200\uFF0C\u6700\u5927 5000")}},async({limit:e})=>{const a=await(0,i.resolveRuntimeHttpTarget)();return(0,i.createTextToolResult)(await(0,O.buildDeviceLogSnapshotText)(a,e))}),r.registerTool("package_project",{title:"Package Project",description:"\u6267\u884C\u751F\u4EA7\u6784\u5EFA\u5E76\u52A0\u5BC6\uFF0C\u8FD4\u56DE enc.msbundle \u8DEF\u5F84\u3002",inputSchema:{workspacePath:s.string().min(1).optional().describe("\u53EF\u9009\u5DE5\u4F5C\u76EE\u5F55\uFF1B\u4E0D\u4F20\u65F6\u4F7F\u7528 set_workspace \u8BB0\u5FC6\u503C")}},async({workspacePath:e})=>{const a=await n(e),c=await(0,v.packageProject)(a);return(0,i.createTextToolResult)(`\u6253\u5305\u5B8C\u6210: ${c}`)}),r.registerTool("run_project",{title:"Run Project",description:"\u6784\u5EFA\u5E76\u540C\u6B65\u5230\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907\u540E\u8FD0\u884C\u9879\u76EE\uFF0C\u4EC5\u4F7F\u7528 HTTP \u8BBE\u5907\u8FDE\u63A5\u3002",inputSchema:{workspacePath:s.string().min(1).optional().describe("\u53EF\u9009\u5DE5\u4F5C\u76EE\u5F55\uFF1B\u4E0D\u4F20\u65F6\u4F7F\u7528 set_workspace \u8BB0\u5FC6\u503C")}},async({workspacePath:e})=>{const a=await n(e),c=await(0,i.resolveRuntimeHttpTarget)();return await(0,u.runOnDevice)({...(0,i.createRuntimeHttpRequestOptions)(c),workspacePath:a}),(0,i.createTextToolResult)(`\u8FD0\u884C\u8BF7\u6C42\u5DF2\u53D1\u9001\u5230 ${c.label}`)}),r.registerTool("run_ui_project",{title:"Run UI Project",description:"\u6784\u5EFA\u5E76\u540C\u6B65\u5230\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907\u540E\u9884\u89C8 UI\uFF0C\u4EC5\u4F7F\u7528 HTTP \u8BBE\u5907\u8FDE\u63A5\u3002",inputSchema:{workspacePath:s.string().min(1).optional().describe("\u53EF\u9009\u5DE5\u4F5C\u76EE\u5F55\uFF1B\u4E0D\u4F20\u65F6\u4F7F\u7528 set_workspace \u8BB0\u5FC6\u503C")}},async({workspacePath:e})=>{const a=await n(e),c=await(0,i.resolveRuntimeHttpTarget)();return await(0,u.runUIOnDevice)({...(0,i.createRuntimeHttpRequestOptions)(c),workspacePath:a}),(0,i.createTextToolResult)(`UI \u9884\u89C8\u8BF7\u6C42\u5DF2\u53D1\u9001\u5230 ${c.label}`)}),r.registerTool("stop_project",{title:"Stop Project",description:"\u505C\u6B62\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907\u4E0A\u7684\u9879\u76EE\uFF0C\u4EC5\u4F7F\u7528 HTTP \u8BBE\u5907\u8FDE\u63A5\u3002",inputSchema:{}},async()=>{const e=await(0,i.resolveRuntimeHttpTarget)();return await(0,u.stopOnDevice)((0,i.createRuntimeHttpRequestOptions)(e)),(0,i.createTextToolResult)(`\u505C\u6B62\u8BF7\u6C42\u5DF2\u53D1\u9001\u5230 ${e.label}`)})}
11
+ timeout: ${n}
12
+ mode: ${a}
13
+ path: ${f}
14
+ size: ${Buffer.byteLength(d,"utf8")} bytes`)}),t.registerTool("get_logs",{title:"Get Device Logs",description:"\u83B7\u53D6\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907\u7684\u6700\u65B0\u65E5\u5FD7\u884C\u3002",inputSchema:{limit:u.number().int().min(1).max(5e3).optional().default(200).describe("\u8FD4\u56DE\u6700\u8FD1\u65E5\u5FD7\u6761\u6570\uFF0C\u9ED8\u8BA4 200\uFF0C\u6700\u5927 5000")}},async({limit:e})=>{const n=await(0,i.resolveRuntimeHttpTarget)();return(0,i.createTextToolResult)(await(0,D.buildDeviceLogSnapshotText)(n,e))}),t.registerTool("package_project",{title:"Package Project",description:"\u6267\u884C\u751F\u4EA7\u6784\u5EFA\u5E76\u52A0\u5BC6\uFF0C\u8FD4\u56DE enc.msbundle \u8DEF\u5F84\u3002",inputSchema:{workspacePath:u.string().min(1).optional().describe("\u53EF\u9009\u5DE5\u4F5C\u76EE\u5F55\uFF1B\u4E0D\u4F20\u65F6\u4F7F\u7528 set_workspace \u8BB0\u5FC6\u503C")}},async({workspacePath:e})=>{const n=await o(e),a=await(0,P.packageProject)(n);return(0,i.createTextToolResult)(`\u6253\u5305\u5B8C\u6210: ${a}`)}),t.registerTool("run_project",{title:"Run Project",description:"\u6784\u5EFA\u5E76\u540C\u6B65\u5230\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907\u540E\u8FD0\u884C\u9879\u76EE\uFF0C\u4EC5\u4F7F\u7528 HTTP \u8BBE\u5907\u8FDE\u63A5\u3002",inputSchema:{workspacePath:u.string().min(1).optional().describe("\u53EF\u9009\u5DE5\u4F5C\u76EE\u5F55\uFF1B\u4E0D\u4F20\u65F6\u4F7F\u7528 set_workspace \u8BB0\u5FC6\u503C")}},async({workspacePath:e})=>{const n=await o(e),a=await(0,i.resolveRuntimeHttpTarget)();return await(0,m.runOnDevice)({...(0,i.createRuntimeHttpRequestOptions)(a),workspacePath:n}),(0,i.createTextToolResult)(`\u8FD0\u884C\u8BF7\u6C42\u5DF2\u53D1\u9001\u5230 ${a.label}`)}),t.registerTool("run_ui_project",{title:"Run UI Project",description:"\u6784\u5EFA\u5E76\u540C\u6B65\u5230\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907\u540E\u9884\u89C8 UI\uFF0C\u4EC5\u4F7F\u7528 HTTP \u8BBE\u5907\u8FDE\u63A5\u3002",inputSchema:{workspacePath:u.string().min(1).optional().describe("\u53EF\u9009\u5DE5\u4F5C\u76EE\u5F55\uFF1B\u4E0D\u4F20\u65F6\u4F7F\u7528 set_workspace \u8BB0\u5FC6\u503C")}},async({workspacePath:e})=>{const n=await o(e),a=await(0,i.resolveRuntimeHttpTarget)();return await(0,m.runUIOnDevice)({...(0,i.createRuntimeHttpRequestOptions)(a),workspacePath:n}),(0,i.createTextToolResult)(`UI \u9884\u89C8\u8BF7\u6C42\u5DF2\u53D1\u9001\u5230 ${a.label}`)}),t.registerTool("stop_project",{title:"Stop Project",description:"\u505C\u6B62\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907\u4E0A\u7684\u9879\u76EE\uFF0C\u4EC5\u4F7F\u7528 HTTP \u8BBE\u5907\u8FDE\u63A5\u3002",inputSchema:{}},async()=>{const e=await(0,i.resolveRuntimeHttpTarget)();return await(0,m.stopOnDevice)((0,i.createRuntimeHttpRequestOptions)(e)),(0,i.createTextToolResult)(`\u505C\u6B62\u8BF7\u6C42\u5DF2\u53D1\u9001\u5230 ${e.label}`)})}
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var o=exports&&exports.__createBinding||(Object.create?(function(t,e,n,r){r===void 0&&(r=n);var c=Object.getOwnPropertyDescriptor(e,n);(!c||("get"in c?!e.__esModule:c.writable||c.configurable))&&(c={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,c)}):(function(t,e,n,r){r===void 0&&(r=n),t[r]=e[n]})),s=exports&&exports.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),u=exports&&exports.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(n){var r=[];for(var c in n)Object.prototype.hasOwnProperty.call(n,c)&&(r[r.length]=c);return r},t(e)};return function(e){if(e&&e.__esModule)return e;var n={};if(e!=null)for(var r=t(e),c=0;c<r.length;c++)r[c]!=="default"&&o(n,e,r[c]);return s(n,e),n}})();Object.defineProperty(exports,"__esModule",{value:!0});const i=u(require("fs-extra")),f=require("@modelcontextprotocol/sdk/server/stdio.js"),l=require("./mcp/tools"),a=require("./mcp/device-config");async function _(){const t=(0,l.createMcpServer)(),e=new f.StdioServerTransport,n=async()=>{try{await i.remove(a.DEVICE_CONFIG_FILE)}catch{}};process.once("SIGINT",()=>{n().catch(()=>{}).finally(()=>process.exit(0))}),process.once("SIGTERM",()=>{n().catch(()=>{}).finally(()=>process.exit(0))}),process.once("exit",()=>{try{i.removeSync(a.DEVICE_CONFIG_FILE)}catch{}}),await t.connect(e)}_().catch(t=>{const e=t instanceof Error?t.message:String(t);console.error(`MCP \u670D\u52A1\u542F\u52A8\u5931\u8D25: ${e}`),process.exit(1)});
2
+ "use strict";var o=exports&&exports.__createBinding||(Object.create?(function(r,e,n,t){t===void 0&&(t=n);var c=Object.getOwnPropertyDescriptor(e,n);(!c||("get"in c?!e.__esModule:c.writable||c.configurable))&&(c={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(r,t,c)}):(function(r,e,n,t){t===void 0&&(t=n),r[t]=e[n]})),s=exports&&exports.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),u=exports&&exports.__importStar||(function(){var r=function(e){return r=Object.getOwnPropertyNames||function(n){var t=[];for(var c in n)Object.prototype.hasOwnProperty.call(n,c)&&(t[t.length]=c);return t},r(e)};return function(e){if(e&&e.__esModule)return e;var n={};if(e!=null)for(var t=r(e),c=0;c<t.length;c++)t[c]!=="default"&&o(n,e,t[c]);return s(n,e),n}})();Object.defineProperty(exports,"__esModule",{value:!0});const i=u(require("fs-extra")),f=require("@modelcontextprotocol/sdk/server/stdio.js"),l=require("./mcp/tools"),a=require("./mcp/device-config"),_=require("./usb-forward");async function d(){const r=(0,l.createMcpServer)(),e=new f.StdioServerTransport,n=async()=>{try{await i.remove(a.DEVICE_CONFIG_FILE)}catch{}};process.once("SIGINT",()=>{n().catch(()=>{}).finally(()=>process.exit(0))}),process.once("SIGTERM",()=>{n().catch(()=>{}).finally(()=>process.exit(0))}),process.once("exit",()=>{try{i.removeSync(a.DEVICE_CONFIG_FILE)}catch{}});try{await(0,_.attachUsbForward)()}catch(t){const c=t instanceof Error?t.message:String(t);console.error(`USB \u8F6C\u53D1\u63A5\u5165\u5931\u8D25: ${c}`)}await r.connect(e)}d().catch(r=>{const e=r instanceof Error?r.message:String(r);console.error(`MCP \u670D\u52A1\u542F\u52A8\u5931\u8D25: ${e}`),process.exit(1)});
@@ -0,0 +1,4 @@
1
+ import { type UsbForwardDevice } from "kuaijs-forward-service/daemon.js";
2
+ export type UsbDevice = UsbForwardDevice;
3
+ export declare function attachUsbForward(onChange?: (devices: UsbDevice[]) => void): Promise<void>;
4
+ export declare function getSharedUsbDevices(): UsbDevice[];
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.attachUsbForward=a,exports.getSharedUsbDevices=n;const s=require("kuaijs-forward-service/daemon.js");let r=[];function a(t){return(0,s.openClient)(e=>{r=e,t?.(e)},{name:"ms"}).ready}function n(){return r}
package/docs/api/hid.md CHANGED
@@ -189,7 +189,7 @@ logi(version);
189
189
 
190
190
  ### resetPosition - 复位坐标
191
191
 
192
- 将鼠标坐标复位到左上角(仅相对鼠标模式需要)。
192
+ 将鼠标坐标复位到左下角(仅相对鼠标模式需要)。
193
193
 
194
194
  ```typescript
195
195
  function resetPosition(): boolean;
@@ -203,7 +203,7 @@ function resetPosition(): boolean;
203
203
  **示例:**
204
204
 
205
205
  ```javascript
206
- // 复位坐标到左上角
206
+ // 复位坐标到左下角
207
207
  const ok = hid.resetPosition();
208
208
  logi(ok); // 输出: true 或 false
209
209
  ```
@@ -18,8 +18,6 @@
18
18
 
19
19
  ### 运行模式
20
20
 
21
- ### 运行模式
22
-
23
21
  #### **$运行模式**
24
22
 
25
23
  用户设置选择的运行模式,"agent" 或 "hid"。
package/docs/apicn/hid.md CHANGED
@@ -189,7 +189,7 @@ $打印信息日志(version);
189
189
 
190
190
  ### 复位坐标
191
191
 
192
- 将鼠标坐标复位到左上角(仅相对鼠标模式需要)。
192
+ 将鼠标坐标复位到左下角(仅相对鼠标模式需要)。
193
193
 
194
194
  ```typescript
195
195
  function 复位坐标(): 布尔值;
@@ -203,7 +203,7 @@ function 复位坐标(): 布尔值;
203
203
  **示例:**
204
204
 
205
205
  ```javascript
206
- // 复位坐标到左上角
206
+ // 复位坐标到左下角
207
207
  const 是否成功 = $HID.复位坐标();
208
208
  $打印信息日志(是否成功); // 输出: true 或 false
209
209
  ```
@@ -160,7 +160,7 @@ print(hid.getDeviceVersion())
160
160
 
161
161
  ### resetPosition - 复位坐标
162
162
 
163
- 将鼠标坐标复位到左上角(仅相对鼠标模式需要)。
163
+ 将鼠标坐标复位到左下角(仅相对鼠标模式需要)。
164
164
 
165
165
  ```lua
166
166
  ---@return boolean
@@ -175,7 +175,7 @@ function resetPosition() end
175
175
  **示例:**
176
176
 
177
177
  ```lua
178
- -- 复位坐标到左上角
178
+ -- 复位坐标到左下角
179
179
  local ok = hid.resetPosition()
180
180
  print(ok) -- 输出: true 或 false
181
181
  ```
package/docs/apilua/ui.md CHANGED
@@ -85,18 +85,6 @@ function show() end
85
85
  ui.show()
86
86
  ```
87
87
 
88
- ### hide - 隐藏 WebView。
89
-
90
- ```lua
91
- function hide() end
92
- ```
93
-
94
- **示例:**
95
-
96
- ```lua
97
- ui.hide()
98
- ```
99
-
100
88
  ### eval - 在 WebView 中执行 JavaScript 代码。
101
89
 
102
90
  ```lua
@@ -193,7 +193,7 @@ print(version)
193
193
 
194
194
  ### resetPosition - 复位坐标
195
195
 
196
- 将鼠标坐标复位到左上角(仅相对鼠标模式需要)。
196
+ 将鼠标坐标复位到左下角(仅相对鼠标模式需要)。
197
197
 
198
198
  ```python
199
199
  def resetPosition() -> bool:
@@ -208,7 +208,7 @@ def resetPosition() -> bool:
208
208
 
209
209
  ```python
210
210
  from kuaijs import hid
211
- # 复位坐标到左上角
211
+ # 复位坐标到左下角
212
212
  ok = hid.resetPosition()
213
213
  print(ok) # 输出: True 或 False
214
214
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ms-vite-plugin",
3
- "version": "1.5.1",
3
+ "version": "1.5.3",
4
4
  "type": "commonjs",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -17,7 +17,10 @@
17
17
  "ms-mcp": "dist/mcp-server.js"
18
18
  },
19
19
  "scripts": {
20
+ "sync-docs": "node scripts/sync-docs.js",
20
21
  "build": "tsc && node scripts/minify-dist.js",
22
+ "prepack": "npm run sync-docs",
23
+ "postpack": "node scripts/sync-docs.js --clean",
21
24
  "prepublishOnly": "npm run build"
22
25
  },
23
26
  "dependencies": {
@@ -29,6 +32,7 @@
29
32
  "crc": "^4.3.2",
30
33
  "fs-extra": "^11.3.5",
31
34
  "jpeg-js": "^0.4.4",
35
+ "kuaijs-forward-service": "^0.1.1",
32
36
  "magic-string": "^0.30.21",
33
37
  "pngjs": "^7.0.0",
34
38
  "uuid": "^14.0.0",
@@ -1,77 +0,0 @@
1
- # 创建项目
2
-
3
- **前置条件**
4
-
5
- - 已安装 Visual Studio Code 和 快点 JS 开发工具插件
6
- - 快点 JS 开发工具插件需要登录`快点JS 开发者账号`,才能创建项目,请点击顶部菜单`开发者后台`注册账号
7
- - 快点 JS APP 需要从`快点JS APP` 上<span style="color: red;">注册账号</span>,注册完成后,需要登录`快点JS APP`,才能使用
8
-
9
- ## 创建项目
10
-
11
- - 快点 JS 使用 `javascript`/`python`/`lua` 编写脚本,入口文件为 `main.js` 或 `main.py` 或 `main.lua`
12
-
13
- - 在创建`快点JS`项目之前,请确保你拥有 js 基础,了解 js 的语法,才能正常使用`快点JS`
14
- - 可以查找`快点JS`的文档,了解`快点JS`的语法,如[点此进入 JS 基础教程](../js-tutorial/introduction.md)
15
- - 点击`创建快点JS项目`,如没有安装`快点JS开发工具插件`,是不会有这个按钮的
16
- - 选择一个文件目录,输入项目名称,回车创建项目
17
- - 快点 JS-JS 引擎使用 `ES6` 语法,支持 import 别的 js 文件
18
- - 快点 JS-Python 引擎使用 `Python3.14`, 打包需要安装 `Python3.14`
19
- - 快点 JS-Lua 引擎入口为 `scripts/main.lua`,宿主模块是内置全局表(如 `device`),不要 `require`;全局函数如 `Sleep` 可直接调用
20
- - 项目创建完成后,会自动打开项目,项目结构如下:
21
-
22
- ### 项目结构
23
-
24
- ```
25
- 项目名称/
26
- ├─ scripts/ ← 脚本存放目录
27
- │ └─ main.js ← JS引擎程序入口(文件名不可改变,仅js项目)
28
- | └─ main.py ← Python程序入口(文件名不可改变,仅python项目)
29
- | └─ main.lua ← Lua程序入口(文件名不可改变,仅lua项目)
30
- ├─ res/ ← 资源存放目录
31
- ├─ ui/ ← UI 界面存放目录
32
- │ ├─ fonts/
33
- │ ├─ htmljs/
34
- │ └─ index.html
35
- ├─ .gitignore ← Git 忽略文件
36
- ├─ .npmrc ← npm 配置文件
37
- ├─ .prettierignore ← 代码格式化忽略文件(仅js项目)
38
- ├─ .prettierrc.yaml ← 代码格式化配置(需安装 Prettier 插件,仅js项目)
39
- ├─ obfuscator.json ← 代码混淆配置(JS:javascript-obfuscator;Lua:Prometheus + 单文件合并,可开关和选档位)
40
- ├─ package.json ← 项目依赖配置文件
41
- └─ tsconfig.json ← TypeScript 配置文件(用于js提示和网页提示)
42
- ```
43
-
44
- ### 创建项目
45
-
46
- <img src="/img/Project/createProject.jpg" width="800" alt="创建项目">
47
-
48
- ### 项目类型
49
-
50
- <img src="/img/Project/项目类型.jpg" width="800" alt="创建项目">
51
-
52
- ## 运行项目
53
-
54
- **使用说明**
55
-
56
- - 点击运行项目,会执行编译同步到设备上运行,同时运行会变成停止按钮
57
- - 点击停止项目,会停止设备上运行的项目,如果项目没有写死循环,会自动退出
58
- - 点击运行 UI,设备会打开项目的 UI 界面,打开配置的 html
59
- - 点击图色按钮,会打开图色工具
60
- - 点击节点查找按钮,会打开节点查找工具
61
- - 点击实时画面,会打开手机实时画面
62
- - 点击打包,会打包项目为msbundle脚本包,打包完成后,会在项目目录下生成msbundle文件
63
-
64
- **注意事项**
65
-
66
- - 当你的 VisualStudioCode 安装其他的插件时,编辑器右侧顶部工具栏,可能图标不显示,因为被其他插件占用了
67
- - 你可以通过编辑器右键菜单->`快点JS`->的下级菜单,来使用所有功能
68
-
69
- <img src="/img/Project/devloper.png" width="800" alt="运行项目">
70
-
71
- ## 常见问题
72
-
73
- ### 无法显示`debug`或`warn`级别的日志
74
-
75
- - VisualStudioCode 日志控制台默认是信息也就是 INFO 请设置为跟踪,并点击设置为默认值,否则可能看不到 `debug` 或 `warn` 级别的日志
76
-
77
- <img src="/img/Project/log.png" width="800" alt="日志控制台">
@@ -1,20 +0,0 @@
1
- # 打包脚本包
2
-
3
- **前置条件**
4
-
5
- - 需要在项目配置 `AppId` 字段
6
- - `AppId` 从开发者后台->网络验证管理->软件列表 中获取
7
-
8
- **操作步骤**
9
-
10
- - 打开主脚本 `main.js | main.py | main.lua`,右键编辑器,选择 `快点JS` -> `打包应用`
11
- - 输入在开发者后台->网络验证管理->软件列表 中获取的 `AppId` 字段
12
- - JS / Lua 项目可编辑根目录 `obfuscator.json` 决定打包行为;Python 打包编译为 `.pyc`,没有该配置
13
- - JS:Vite 把入口打成单文件后再按 `enabled` 混淆
14
- - Lua:Release 默认把 `scripts` 下用户模块合并为单个 `scripts/main.lua`(`bundle`,缺省 `true`),再按 `enabled` / `preset` 用 Prometheus 混淆该文件。`enabled: false` 时仍可合并。宿主全局模块(如 `device`)不受影响。不要用 `dofile` / `loadfile` 去读会被删掉的其它 `.lua`
15
- - 注意:上传到快点JS热更新服务后,可通过开发者后台->网络验证管理->软件列表的软件编号进行分发
16
- - 注意:快点JS上可通过软件面板,输入软件编号进行搜索加载应用
17
-
18
- <img src="/img/PackProject/打包菜单.png" width="800" alt="打包菜单">
19
-
20
- <img src="/img/PackProject/packageIPA.png" width="800" alt="打包IPA">