Files
oops-plugin-framework/dist/tools/VSCodeRelatedPefab.js
dgflash d2c68fbab5 fix(gui): 修复 onBeforeRemove 回调不触发的问题
问题原因:
在 LayerUI.remove() 方法中,state.valid 被提前设置为 false,
导致 LayerUIElement.remove() 中判断 state.valid 时条件不成立,
从而跳过了 onBeforeRemove 回调的触发。

修复方案:
将 state.valid = false 的赋值操作移动到 LayerUIElement.remove()
调用之后执行,确保回调能正常触发。

影响范围:
- 修复通过 oops.gui.remove() 关闭界面时 onBeforeRemove 回调不执行的问题
- 不影响界面缓存和异步加载的僵尸节点防护逻辑
2026-04-01 22:38:10 +08:00

2 lines
8.5 KiB
JavaScript

"use strict";var tt=Object.create;var A=Object.defineProperty;var et=Object.getOwnPropertyDescriptor;var st=Object.getOwnPropertyNames;var rt=Object.getPrototypeOf,ot=Object.prototype.hasOwnProperty;var nt=(r,e)=>{for(var t in e)A(r,t,{get:e[t],enumerable:!0})},w=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of st(e))!ot.call(r,o)&&o!==t&&A(r,o,{get:()=>e[o],enumerable:!(s=et(e,o))||s.enumerable});return r};var E=(r,e,t)=>(t=r!=null?tt(rt(r)):{},w(e||!r||!r.__esModule?A(t,"default",{value:r,enumerable:!0}):t,r)),it=r=>w(A({},"__esModule",{value:!0}),r);var It={};nt(It,{load:()=>vt,messages:()=>yt,methods:()=>Et,unload:()=>At});module.exports=it(It);var p=E(require("fs")),S=E(require("path"));var M=E(require("http")),y=class{constructor(e){this.server=null;this.host=e.host||"127.0.0.1",this.defaultPort=e.defaultPort||8456,this.port=this.defaultPort,this.requestHandler=e.requestHandler,this.logger=e.logger||console.log,this.onPortInUse=e.onPortInUse,this.onStart=e.onStart,this.onError=e.onError}getState(){return{running:this.isRunning(),port:this.port,host:this.host}}getPort(){return this.port}isRunning(){return!!this.server}start(e){this.stop();let t=e||this.defaultPort;this.createServer(t)}stop(){this.server&&(this.server.close(),this.server=null,this.logger("[HttpServer] \u670D\u52A1\u5668\u5DF2\u505C\u6B62"))}createServer(e){this.server=M.createServer((t,s)=>{this.handleRequest(t,s)}),this.server.once("error",t=>{if((t==null?void 0:t.code)==="EADDRINUSE"&&e<65535){this.logger(`[HttpServer] \u7AEF\u53E3 ${e} \u88AB\u5360\u7528\uFF0C\u5C1D\u8BD5 ${e+1}`),this.onPortInUse&&this.onPortInUse(e,e+1),this.createServer(e+1);return}this.logger(`[HttpServer] \u542F\u52A8\u5931\u8D25: ${(t==null?void 0:t.message)||t}`),this.onError&&this.onError(t)}),this.server.listen(e,this.host,()=>{var s;let t=(s=this.server)==null?void 0:s.address();t&&typeof t=="object"?this.port=Number(t.port||e):this.port=e,this.logger(`[HttpServer] \u76D1\u542C ${this.host}:${this.port}`),this.onStart&&this.onStart(this.port)})}handleRequest(e,t){Promise.resolve(this.requestHandler(e,t)).catch(s=>{this.logger(`[HttpServer] \u8BF7\u6C42\u5904\u7406\u9519\u8BEF: ${(s==null?void 0:s.message)||s}`),t.headersSent||(t.statusCode=500,t.setHeader("Content-Type","application/json; charset=utf-8"),t.end(JSON.stringify({ok:!1,message:(s==null?void 0:s.message)||"internal error"})))})}};function D(r){return new Promise((e,t)=>{let s="",o=!1;r.on("data",n=>{o||(s+=n.toString())}),r.on("end",()=>{o||e(s)}),r.on("error",n=>{o||(o=!0,t(n))})})}function u(r,e,t){r.statusCode=e,r.setHeader("Content-Type","application/json; charset=utf-8"),r.end(JSON.stringify(t))}function $(r){return(r||"").split("?")[0]}function L(r){return(r.method||"").toUpperCase()}var j="oops",N="vscode-creator-bridge.json",B="local",W="/state",F="/open-asset",J="x-cocos-project-id",c="asset-db",Y="query-uuid-by-url",G="query-url-by-uuid",Q="query-asset-info",z="query-asset-meta",k="open-asset",I="db://",R="assets";var d=class{constructor(){this.projectId="";this.projectPath=""}setProjectPath(e){this.projectPath=e}getProjectPath(){return this.projectPath}setProjectId(e){this.projectId=e}getProjectId(){return this.projectId}validateProjectId(e){return e===this.projectId}getRequestMethod(e){return e.method||"GET"}checkRequest(e,t){let s=this.getMethodName(e),o=this.getApiPath();return s==="GET"&&o===e.url?(this.handleRequest(e,t),!0):!1}getMethodName(e){return(e.method||"GET").toUpperCase()}};var b=class extends d{constructor(){super(...arguments);this.port=8456;this.running=!1}setPort(t){this.port=t}getPort(){return this.port}setRunning(t){this.running=t}isRunning(){return this.running}getState(){return{projectId:this.projectId,projectPath:this.projectPath,port:this.port,running:this.running}}async handleRequest(t,s){let o={ok:!0,state:this.getState()};u(s,200,o)}getApiPath(){return"/api/state"}},q=null;function g(){return q||(q=new b),q}var O=E(require("path"));var _=class extends d{constructor(){super(...arguments);this.logCallback=null;this.focusWindowCallback=null;this.editorRequestCallback=null}setLogCallback(t){this.logCallback=t}setFocusWindowCallback(t){this.focusWindowCallback=t}setEditorRequestCallback(t){this.editorRequestCallback=t}log(t){this.logCallback&&this.logCallback(t)}focusWindow(){return this.focusWindowCallback?this.focusWindowCallback():!1}async requestEditor(t,s,...o){if(this.editorRequestCallback)return await this.editorRequestCallback(t,s,...o)}normalizeAssetUrl(t){if(!t)return null;let s=t.replace(/\\/g,"/").trim();if(!s)return null;if(s.startsWith(I))return s;if(s.startsWith(`${R}/`))return`${I}${s}`;let o=O.isAbsolute(s)?s.replace(/\\/g,"/"):O.join(this.projectPath,s).replace(/\\/g,"/"),n=`${this.projectPath.replace(/\\/g,"/")}/${R}/`,i=o.toLowerCase(),a=n.toLowerCase();return i.startsWith(a)?`${I}${R}/${o.slice(n.length)}`:null}async getAssetUrlByUuid(t){let s=await this.requestEditor(c,G,t);return typeof s=="string"?s:s&&typeof s.url=="string"?s.url:""}async resolveUuid(t,s){if(t.uuid)return t.uuid;if(!s)return null;let o=await this.requestEditor(c,Y,s);if(typeof o=="string"&&o)return o;if(o&&typeof o.uuid=="string")return o.uuid;let n=await this.requestEditor(c,Q,s);if(n&&typeof n.uuid=="string")return n.uuid;let i=await this.requestEditor(c,z,s);return i&&typeof i.uuid=="string"?i.uuid:null}async tryOpenByRequest(t,...s){try{return await this.requestEditor(c,t,...s),!0}catch(o){return!1}}async openAsset(t,s,o){let n=t?await this.getAssetUrlByUuid(t):s||"",i=!1,a="";return t&&await this.tryOpenByRequest(k,t)&&(i=!0,a="opened by uuid"),!i&&n&&await this.tryOpenByRequest(k,n)&&(i=!0,a="opened by asset url"),i||(a=`failed to open asset. uuid=${t||"<none>"} assetUrl=${n||"<none>"}`),this.log(`openAsset uuid=${t||"<none>"} focused=${o} opened=${i} url=${n||"<empty>"}`),{ok:i,focused:o,opened:i,assetUrl:n,message:a}}async handleRequest(t,s){try{let o=await D(t),n=o?JSON.parse(o):{},i=String(t.headers[J]||"").trim(),a=String(n.projectId||i).trim();if(!a){u(s,400,{ok:!1,message:"missing projectId"});return}if(!this.validateProjectId(a)){let Z={ok:!1,message:"projectId mismatch",projectId:this.projectId};u(s,409,Z);return}let f=this.normalizeAssetUrl(n.assetPath),U=await this.resolveUuid(n,f||null);if(!U&&!f){u(s,400,{ok:!1,message:"invalid assetPath/uuid"});return}let X=this.focusWindow(),l=await this.openAsset(U,f||null,X),V={ok:l.ok,uuid:U,focused:l.focused,opened:l.opened,assetUrl:l.assetUrl,message:l.message};u(s,l.ok?200:500,V)}catch(o){u(s,500,{ok:!1,message:(o==null?void 0:o.message)||"open failed"})}}getApiPath(){return"/api/open-asset"}},H=null;function T(){return H||(H=new _),H}var P=null,h="",v="";function x(){return global.Editor}function C(r){let e=x();if(e&&typeof e.log=="function"){e.log(`[${j}] ${r}`);return}console.log(`[${j}] ${r}`)}function K(){let r=S.join(h,B);return p.existsSync(r)||p.mkdirSync(r,{recursive:!0}),S.join(r,N)}function ut(r){return S.resolve(r).replace(/\\/g,"/").toLowerCase()}function lt(r){let e=ut(r),t=2166136261;for(let s=0;s<e.length;s++)t^=e.charCodeAt(s),t+=(t<<1)+(t<<4)+(t<<7)+(t<<8)+(t<<24);return`${"p_"}${(t>>>0).toString(16)}`}function ct(){try{let r=K();if(!p.existsSync(r))return 8456;let e=p.readFileSync(r,"utf8"),t=JSON.parse(e),s=Number(t.port);return!Number.isInteger(s)||s<1||s>65535?8456:s}catch(r){return 8456}}function dt(r){let e=K();p.writeFileSync(e,JSON.stringify({port:r,projectId:v,projectPath:h,updatedAt:Date.now()},null,2),"utf8")}function gt(){let r=x();if(r&&r.Window&&typeof r.Window.focus=="function")try{return r.Window.focus(),!0}catch(e){return!1}return!1}async function ht(r,e,...t){let s=x();if(!(!s||!s.Message||typeof s.Message.request!="function"))try{return await s.Message.request(r,e,...t)}catch(o){return}}function ft(){let r=g(),e=T();r.setProjectPath(h),r.setProjectId(v),e.setProjectPath(h),e.setProjectId(v),e.setLogCallback(C),e.setFocusWindowCallback(gt),e.setEditorRequestCallback(ht)}async function mt(r,e){let t=L(r),s=$(r.url),o=g(),n=T();if(t==="GET"&&s===W){o.handleRequest(e);return}if(t==="POST"&&s===F){await n.handleRequest(r,e);return}e.statusCode=404,e.setHeader("Content-Type","application/json; charset=utf-8"),e.end(JSON.stringify({ok:!1,message:"not found"}))}function Pt(r){let e=g();P=new y({defaultPort:r,logger:C,requestHandler:mt,onPortInUse:(t,s)=>{C(`port ${t} in use, retry ${s}`)},onStart:t=>{dt(t),e.setPort(t),e.setRunning(!0),C(`listening on 127.0.0.1:${t} projectId=${v}`)}}),P.start(r)}function St(){let r=g();P&&(P.stop(),r.setRunning(!1),P=null)}function vt(){h=x().Project.path,v=lt(h),ft();let e=ct();Pt(e)}function At(){St()}var Et={},yt={};0&&(module.exports={load,messages,methods,unload});