From da020de1ffcf22257286230ef77e248e4737fd27 Mon Sep 17 00:00:00 2001 From: dgflash Date: Sat, 4 Apr 2026 22:37:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A1=86=E6=9E=B6=E5=B7=A5=E5=85=B7=E6=8E=A7?= =?UTF-8?q?=E5=88=B6Cocos=20Creator=20=E8=87=AA=E5=8A=A8=E6=89=93=E5=BC=80?= =?UTF-8?q?=E9=A2=84=E5=88=B6=E7=BB=91=E5=AE=9A=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/Config.js | 2 +- dist/api/index.js | 1 - dist/api/open-asset.js | 1 - dist/api/state.js | 1 - dist/bridge/HttpServer.js | 1 + dist/bridge/api/OpenAssetAPI.js | 1 + dist/bridge/api/StateAPI.js | 1 + dist/common/HttpServer.js | 1 - dist/common/Scene.js | 1 + dist/main.js | 2 +- dist/tools/VSCodeRelatedPefab.js | 2 +- package.json | 3 +++ 12 files changed, 10 insertions(+), 7 deletions(-) delete mode 100644 dist/api/index.js delete mode 100644 dist/api/open-asset.js delete mode 100644 dist/api/state.js create mode 100644 dist/bridge/HttpServer.js create mode 100644 dist/bridge/api/OpenAssetAPI.js create mode 100644 dist/bridge/api/StateAPI.js delete mode 100644 dist/common/HttpServer.js create mode 100644 dist/common/Scene.js diff --git a/dist/Config.js b/dist/Config.js index 489a186..9c06b71 100644 --- a/dist/Config.js +++ b/dist/Config.js @@ -1 +1 @@ -"use strict";var _=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var p=(t,o)=>{for(var s in o)_(t,s,{get:o[s],enumerable:!0})},n=(t,o,s,E)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of c(o))!T.call(t,e)&&e!==s&&_(t,e,{get:()=>o[e],enumerable:!(E=r(o,e))||E.enumerable});return t};var S=t=>n(_({},"__esModule",{value:!0}),t);var b={};p(b,{API_OPEN_ASSET:()=>U,API_STATE:()=>D,ASSETS_DIR:()=>y,ASSET_PROTOCOL:()=>M,CHANNEL_ASSET_DB:()=>u,DEFAULT_PORT:()=>x,HASH_INITIAL:()=>C,HEADER_PROJECT_ID:()=>a,LOCAL_DIR:()=>I,METHOD_OPEN_ASSET:()=>d,METHOD_QUERY_ASSET_INFO:()=>L,METHOD_QUERY_ASSET_META:()=>N,METHOD_QUERY_URL_BY_UUID:()=>P,METHOD_QUERY_UUID_BY_URL:()=>H,PACKAGE_NAME:()=>O,PROJECT_ID_PREFIX:()=>Y,SERVER_HOST:()=>A,SETTINGS_FILE:()=>R});module.exports=S(b);var A="127.0.0.1",x=8456,O="oops",R="vscode-creator-bridge.json",I="local",D="/state",U="/open-asset",a="x-cocos-project-id",u="asset-db",H="query-uuid-by-url",P="query-url-by-uuid",L="query-asset-info",N="query-asset-meta",d="open-asset",M="db://",y="assets",C=2166136261,Y="p_";0&&(module.exports={API_OPEN_ASSET,API_STATE,ASSETS_DIR,ASSET_PROTOCOL,CHANNEL_ASSET_DB,DEFAULT_PORT,HASH_INITIAL,HEADER_PROJECT_ID,LOCAL_DIR,METHOD_OPEN_ASSET,METHOD_QUERY_ASSET_INFO,METHOD_QUERY_ASSET_META,METHOD_QUERY_URL_BY_UUID,METHOD_QUERY_UUID_BY_URL,PACKAGE_NAME,PROJECT_ID_PREFIX,SERVER_HOST,SETTINGS_FILE}); +"use strict";var _=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var n=(t,o)=>{for(var s in o)_(t,s,{get:o[s],enumerable:!0})},S=(t,o,s,E)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of p(o))!T.call(t,e)&&e!==s&&_(t,e,{get:()=>o[e],enumerable:!(E=r(o,e))||E.enumerable});return t};var c=t=>S(_({},"__esModule",{value:!0}),t);var C={};n(C,{ASSETS_DIR:()=>P,ASSET_PROTOCOL:()=>N,CHANNEL_ASSET_DB:()=>U,DEFAULT_PORT:()=>A,HASH_INITIAL:()=>d,HEADER_PROJECT_ID:()=>I,LOCAL_DIR:()=>D,METHOD_OPEN_ASSET:()=>M,METHOD_QUERY_ASSET_INFO:()=>L,METHOD_QUERY_ASSET_META:()=>a,METHOD_QUERY_URL_BY_UUID:()=>H,METHOD_QUERY_UUID_BY_URL:()=>u,PACKAGE_NAME:()=>O,PROJECT_ID_PREFIX:()=>y,SERVER_HOST:()=>x,SETTINGS_FILE:()=>R});module.exports=c(C);var x="127.0.0.1",A=56688,O="\u3010Oops Framework\u3011",R="bridge.json",D=".oops",I="oops-framework-project-id",U="asset-db",u="query-uuid-by-url",H="query-url-by-uuid",L="query-asset-info",a="query-asset-meta",M="open-asset",N="db://",P="assets",d=2166136261,y="p_";0&&(module.exports={ASSETS_DIR,ASSET_PROTOCOL,CHANNEL_ASSET_DB,DEFAULT_PORT,HASH_INITIAL,HEADER_PROJECT_ID,LOCAL_DIR,METHOD_OPEN_ASSET,METHOD_QUERY_ASSET_INFO,METHOD_QUERY_ASSET_META,METHOD_QUERY_URL_BY_UUID,METHOD_QUERY_UUID_BY_URL,PACKAGE_NAME,PROJECT_ID_PREFIX,SERVER_HOST,SETTINGS_FILE}); diff --git a/dist/api/index.js b/dist/api/index.js deleted file mode 100644 index 88f6c91..0000000 --- a/dist/api/index.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";var D=Object.create;var f=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var L=Object.getPrototypeOf,$=Object.prototype.hasOwnProperty;var N=(o,r)=>{for(var t in r)f(o,t,{get:r[t],enumerable:!0})},E=(o,r,t,e)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of B(r))!$.call(o,s)&&s!==t&&f(o,s,{get:()=>r[s],enumerable:!(e=M(r,s))||e.enumerable});return o};var W=(o,r,t)=>(t=o!=null?D(L(o)):{},E(r||!o||!o.__esModule?f(t,"default",{value:o,enumerable:!0}):t,o)),Y=o=>E(f({},"__esModule",{value:!0}),o);var J={};N(J,{OpenAssetAPI:()=>h,StateAPI:()=>g,getOpenAssetAPI:()=>k,getStateAPI:()=>T,resetOpenAssetAPI:()=>q,resetStateAPI:()=>C});module.exports=Y(J);function I(o){return new Promise((r,t)=>{let e="",s=!1;o.on("data",n=>{s||(e+=n.toString())}),o.on("end",()=>{s||r(e)}),o.on("error",n=>{s||(s=!0,t(n))})})}function p(o,r,t){o.statusCode=r,o.setHeader("Content-Type","application/json; charset=utf-8"),o.end(JSON.stringify(t))}var y="x-cocos-project-id",u="asset-db",_="query-uuid-by-url",O="query-url-by-uuid",U="query-asset-info",x="query-asset-meta",A="open-asset",m="db://",v="assets";var c=class{constructor(){this.projectId="";this.projectPath=""}setProjectPath(r){this.projectPath=r}getProjectPath(){return this.projectPath}setProjectId(r){this.projectId=r}getProjectId(){return this.projectId}validateProjectId(r){return r===this.projectId}getRequestMethod(r){return r.method||"GET"}checkRequest(r,t){let e=this.getMethodName(r),s=this.getApiPath();return e==="GET"&&s===r.url?(this.handleRequest(r,t),!0):!1}getMethodName(r){return(r.method||"GET").toUpperCase()}};var g=class extends c{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,e){let s={ok:!0,state:this.getState()};p(e,200,s)}getApiPath(){return"/api/state"}},P=null;function T(){return P||(P=new g),P}function C(){P=null}var R=W(require("path"));var h=class extends c{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,e,...s){if(this.editorRequestCallback)return await this.editorRequestCallback(t,e,...s)}normalizeAssetUrl(t){if(!t)return null;let e=t.replace(/\\/g,"/").trim();if(!e)return null;if(e.startsWith(m))return e;if(e.startsWith(`${v}/`))return`${m}${e}`;let s=R.isAbsolute(e)?e.replace(/\\/g,"/"):R.join(this.projectPath,e).replace(/\\/g,"/"),n=`${this.projectPath.replace(/\\/g,"/")}/${v}/`,i=s.toLowerCase(),a=n.toLowerCase();return i.startsWith(a)?`${m}${v}/${s.slice(n.length)}`:null}async getAssetUrlByUuid(t){let e=await this.requestEditor(u,O,t);return typeof e=="string"?e:e&&typeof e.url=="string"?e.url:""}async resolveUuid(t,e){if(t.uuid)return t.uuid;if(!e)return null;let s=await this.requestEditor(u,_,e);if(typeof s=="string"&&s)return s;if(s&&typeof s.uuid=="string")return s.uuid;let n=await this.requestEditor(u,U,e);if(n&&typeof n.uuid=="string")return n.uuid;let i=await this.requestEditor(u,x,e);return i&&typeof i.uuid=="string"?i.uuid:null}async tryOpenByRequest(t,...e){try{return await this.requestEditor(u,t,...e),!0}catch(s){return!1}}async openAsset(t,e,s){let n=t?await this.getAssetUrlByUuid(t):e||"",i=!1,a="";return t&&await this.tryOpenByRequest(A,t)&&(i=!0,a="opened by uuid"),!i&&n&&await this.tryOpenByRequest(A,n)&&(i=!0,a="opened by asset url"),i||(a=`failed to open asset. uuid=${t||""} assetUrl=${n||""}`),this.log(`openAsset uuid=${t||""} focused=${s} opened=${i} url=${n||""}`),{ok:i,focused:s,opened:i,assetUrl:n,message:a}}async handleRequest(t,e){try{let s=await I(t),n=s?JSON.parse(s):{},i=String(t.headers[y]||"").trim(),a=String(n.projectId||i).trim();if(!a){p(e,400,{ok:!1,message:"missing projectId"});return}if(!this.validateProjectId(a)){let w={ok:!1,message:"projectId mismatch",projectId:this.projectId};p(e,409,w);return}let d=this.normalizeAssetUrl(n.assetPath),b=await this.resolveUuid(n,d||null);if(!b&&!d){p(e,400,{ok:!1,message:"invalid assetPath/uuid"});return}let H=this.focusWindow(),l=await this.openAsset(b,d||null,H),j={ok:l.ok,uuid:b,focused:l.focused,opened:l.opened,assetUrl:l.assetUrl,message:l.message};p(e,l.ok?200:500,j)}catch(s){p(e,500,{ok:!1,message:(s==null?void 0:s.message)||"open failed"})}}getApiPath(){return"/api/open-asset"}},S=null;function k(){return S||(S=new h),S}function q(){S=null}0&&(module.exports={OpenAssetAPI,StateAPI,getOpenAssetAPI,getStateAPI,resetOpenAssetAPI,resetStateAPI}); diff --git a/dist/api/open-asset.js b/dist/api/open-asset.js deleted file mode 100644 index b36a875..0000000 --- a/dist/api/open-asset.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";var x=Object.create;var d=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var k=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var w=(o,r)=>{for(var t in r)d(o,t,{get:r[t],enumerable:!0})},b=(o,r,t,e)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of H(r))!j.call(o,s)&&s!==t&&d(o,s,{get:()=>r[s],enumerable:!(e=q(r,s))||e.enumerable});return o};var D=(o,r,t)=>(t=o!=null?x(k(o)):{},b(r||!o||!o.__esModule?d(t,"default",{value:o,enumerable:!0}):t,o)),M=o=>b(d({},"__esModule",{value:!0}),o);var L={};w(L,{OpenAssetAPI:()=>v,getOpenAssetAPI:()=>$,resetOpenAssetAPI:()=>B});module.exports=M(L);var E=D(require("path"));function P(o){return new Promise((r,t)=>{let e="",s=!1;o.on("data",n=>{s||(e+=n.toString())}),o.on("end",()=>{s||r(e)}),o.on("error",n=>{s||(s=!0,t(n))})})}function l(o,r,t){o.statusCode=r,o.setHeader("Content-Type","application/json; charset=utf-8"),o.end(JSON.stringify(t))}var y="x-cocos-project-id",u="asset-db",A="query-uuid-by-url",I="query-url-by-uuid",_="query-asset-info",U="query-asset-meta",S="open-asset",h="db://",g="assets";var f=class{constructor(){this.projectId="";this.projectPath=""}setProjectPath(r){this.projectPath=r}getProjectPath(){return this.projectPath}setProjectId(r){this.projectId=r}getProjectId(){return this.projectId}validateProjectId(r){return r===this.projectId}getRequestMethod(r){return r.method||"GET"}checkRequest(r,t){let e=this.getMethodName(r),s=this.getApiPath();return e==="GET"&&s===r.url?(this.handleRequest(r,t),!0):!1}getMethodName(r){return(r.method||"GET").toUpperCase()}};var v=class extends f{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,e,...s){if(this.editorRequestCallback)return await this.editorRequestCallback(t,e,...s)}normalizeAssetUrl(t){if(!t)return null;let e=t.replace(/\\/g,"/").trim();if(!e)return null;if(e.startsWith(h))return e;if(e.startsWith(`${g}/`))return`${h}${e}`;let s=E.isAbsolute(e)?e.replace(/\\/g,"/"):E.join(this.projectPath,e).replace(/\\/g,"/"),n=`${this.projectPath.replace(/\\/g,"/")}/${g}/`,i=s.toLowerCase(),a=n.toLowerCase();return i.startsWith(a)?`${h}${g}/${s.slice(n.length)}`:null}async getAssetUrlByUuid(t){let e=await this.requestEditor(u,I,t);return typeof e=="string"?e:e&&typeof e.url=="string"?e.url:""}async resolveUuid(t,e){if(t.uuid)return t.uuid;if(!e)return null;let s=await this.requestEditor(u,A,e);if(typeof s=="string"&&s)return s;if(s&&typeof s.uuid=="string")return s.uuid;let n=await this.requestEditor(u,_,e);if(n&&typeof n.uuid=="string")return n.uuid;let i=await this.requestEditor(u,U,e);return i&&typeof i.uuid=="string"?i.uuid:null}async tryOpenByRequest(t,...e){try{return await this.requestEditor(u,t,...e),!0}catch(s){return!1}}async openAsset(t,e,s){let n=t?await this.getAssetUrlByUuid(t):e||"",i=!1,a="";return t&&await this.tryOpenByRequest(S,t)&&(i=!0,a="opened by uuid"),!i&&n&&await this.tryOpenByRequest(S,n)&&(i=!0,a="opened by asset url"),i||(a=`failed to open asset. uuid=${t||""} assetUrl=${n||""}`),this.log(`openAsset uuid=${t||""} focused=${s} opened=${i} url=${n||""}`),{ok:i,focused:s,opened:i,assetUrl:n,message:a}}async handleRequest(t,e){try{let s=await P(t),n=s?JSON.parse(s):{},i=String(t.headers[y]||"").trim(),a=String(n.projectId||i).trim();if(!a){l(e,400,{ok:!1,message:"missing projectId"});return}if(!this.validateProjectId(a)){let C={ok:!1,message:"projectId mismatch",projectId:this.projectId};l(e,409,C);return}let c=this.normalizeAssetUrl(n.assetPath),R=await this.resolveUuid(n,c||null);if(!R&&!c){l(e,400,{ok:!1,message:"invalid assetPath/uuid"});return}let O=this.focusWindow(),p=await this.openAsset(R,c||null,O),T={ok:p.ok,uuid:R,focused:p.focused,opened:p.opened,assetUrl:p.assetUrl,message:p.message};l(e,p.ok?200:500,T)}catch(s){l(e,500,{ok:!1,message:(s==null?void 0:s.message)||"open failed"})}}getApiPath(){return"/api/open-asset"}},m=null;function $(){return m||(m=new v),m}function B(){m=null}0&&(module.exports={OpenAssetAPI,getOpenAssetAPI,resetOpenAssetAPI}); diff --git a/dist/api/state.js b/dist/api/state.js deleted file mode 100644 index dde83b6..0000000 --- a/dist/api/state.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";var p=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var c=(e,t)=>{for(var r in t)p(e,r,{get:t[r],enumerable:!0})},l=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of d(t))!g.call(e,s)&&s!==r&&p(e,s,{get:()=>t[s],enumerable:!(o=u(t,s))||o.enumerable});return e};var v=e=>l(p({},"__esModule",{value:!0}),e);var E={};c(E,{StateAPI:()=>a,getStateAPI:()=>m,resetStateAPI:()=>P});module.exports=v(E);function h(e,t,r){e.statusCode=t,e.setHeader("Content-Type","application/json; charset=utf-8"),e.end(JSON.stringify(r))}var n=class{constructor(){this.projectId="";this.projectPath=""}setProjectPath(t){this.projectPath=t}getProjectPath(){return this.projectPath}setProjectId(t){this.projectId=t}getProjectId(){return this.projectId}validateProjectId(t){return t===this.projectId}getRequestMethod(t){return t.method||"GET"}checkRequest(t,r){let o=this.getMethodName(t),s=this.getApiPath();return o==="GET"&&s===t.url?(this.handleRequest(t,r),!0):!1}getMethodName(t){return(t.method||"GET").toUpperCase()}};var a=class extends n{constructor(){super(...arguments);this.port=8456;this.running=!1}setPort(r){this.port=r}getPort(){return this.port}setRunning(r){this.running=r}isRunning(){return this.running}getState(){return{projectId:this.projectId,projectPath:this.projectPath,port:this.port,running:this.running}}async handleRequest(r,o){let s={ok:!0,state:this.getState()};h(o,200,s)}getApiPath(){return"/api/state"}},i=null;function m(){return i||(i=new a),i}function P(){i=null}0&&(module.exports={StateAPI,getStateAPI,resetStateAPI}); diff --git a/dist/bridge/HttpServer.js b/dist/bridge/HttpServer.js new file mode 100644 index 0000000..f5a55cc --- /dev/null +++ b/dist/bridge/HttpServer.js @@ -0,0 +1 @@ +"use strict";var p=Object.create;var o=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var l=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty;var m=(r,t)=>{for(var e in t)o(r,e,{get:t[e],enumerable:!0})},h=(r,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of v(t))!g.call(r,n)&&n!==e&&o(r,n,{get:()=>t[n],enumerable:!(s=d(t,n))||s.enumerable});return r};var c=(r,t,e)=>(e=r!=null?p(l(r)):{},h(t||!r||!r.__esModule?o(e,"default",{value:r,enumerable:!0}):e,r)),f=r=>h(o({},"__esModule",{value:!0}),r);var R={};m(R,{HttpServer:()=>a,getRequestMethod:()=>H,parseUrlPath:()=>b,readRequestBody:()=>S,sendJsonResponse:()=>P});module.exports=f(R);var u=c(require("http")),a=class{constructor(t){this.server=null;this.host=t.host,this.defaultPort=t.defaultPort,this.port=this.defaultPort,this.requestHandler=t.requestHandler,this.logger=t.logger||console.log,this.onPortInUse=t.onPortInUse,this.onStart=t.onStart,this.onError=t.onError}getState(){return{running:this.isRunning(),port:this.port,host:this.host}}getPort(){return this.port}isRunning(){return!!this.server}start(t){this.stop();let e=t||this.defaultPort;this.createServer(e)}stop(){this.server&&(this.server.close(),this.server=null)}createServer(t){this.server=u.createServer((e,s)=>{this.handleRequest(e,s)}),this.server.once("error",e=>{if((e==null?void 0:e.code)==="EADDRINUSE"&&t<65535){this.onPortInUse&&this.onPortInUse(t,t+1),this.createServer(t+1);return}this.onError&&this.onError(e)}),this.server.listen(t,this.host,()=>{var s;let e=(s=this.server)==null?void 0:s.address();e&&typeof e=="object"?this.port=Number(e.port||t):this.port=t,this.onStart&&this.onStart(this.port)})}handleRequest(t,e){Promise.resolve(this.requestHandler(t,e)).catch(s=>{e.headersSent||(e.statusCode=500,e.setHeader("Content-Type","application/json; charset=utf-8"),e.end(JSON.stringify({ok:!1,message:(s==null?void 0:s.message)||"internal error"})))})}};function S(r){return new Promise((t,e)=>{let s="",n=!1;r.on("data",i=>{n||(s+=i.toString())}),r.on("end",()=>{n||t(s)}),r.on("error",i=>{n||(n=!0,e(i))})})}function P(r,t,e){r.statusCode=t,r.setHeader("Content-Type","application/json; charset=utf-8"),r.end(JSON.stringify(e))}function b(r){return(r||"").split("?")[0]}function H(r){return(r.method||"").toUpperCase()}0&&(module.exports={HttpServer,getRequestMethod,parseUrlPath,readRequestBody,sendJsonResponse}); diff --git a/dist/bridge/api/OpenAssetAPI.js b/dist/bridge/api/OpenAssetAPI.js new file mode 100644 index 0000000..55f55bb --- /dev/null +++ b/dist/bridge/api/OpenAssetAPI.js @@ -0,0 +1 @@ +"use strict";var k=Object.create;var d=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var H=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var w=(o,s)=>{for(var t in s)d(o,t,{get:s[t],enumerable:!0})},P=(o,s,t,e)=>{if(s&&typeof s=="object"||typeof s=="function")for(let r of x(s))!j.call(o,r)&&r!==t&&d(o,r,{get:()=>s[r],enumerable:!(e=q(s,r))||e.enumerable});return o};var D=(o,s,t)=>(t=o!=null?k(H(o)):{},P(s||!o||!o.__esModule?d(t,"default",{value:o,enumerable:!0}):t,o)),M=o=>P(d({},"__esModule",{value:!0}),o);var N={};w(N,{OpenAssetAPI:()=>v,getOpenAssetAPI:()=>L,resetOpenAssetAPI:()=>B});module.exports=M(N);var E=D(require("path"));function S(o){return new Promise((s,t)=>{let e="",r=!1;o.on("data",n=>{r||(e+=n.toString())}),o.on("end",()=>{r||s(e)}),o.on("error",n=>{r||(r=!0,t(n))})})}function u(o,s,t){o.statusCode=s,o.setHeader("Content-Type","application/json; charset=utf-8"),o.end(JSON.stringify(t))}var y="oops-framework-project-id",l="asset-db",A="query-uuid-by-url",I="query-url-by-uuid",U="query-asset-info",_="query-asset-meta",b="open-asset",h="db://",g="assets";var f=class{constructor(){this.projectId="";this.projectPath=""}setProjectPath(s){this.projectPath=s}getProjectPath(){return this.projectPath}setProjectId(s){this.projectId=s}getProjectId(){return this.projectId}validateProjectId(s){return s===this.projectId}getRequestMethod(s){return s.method||"GET"}checkRequest(s,t){let e=this.getMethodName(s),r=this.getApiPath();return e==="GET"&&r===s.url?(this.handleRequest(s,t),!0):!1}getMethodName(s){return(s.method||"GET").toUpperCase()}};var v=class extends f{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,e,...r){if(this.editorRequestCallback)return await this.editorRequestCallback(t,e,...r)}normalizeAssetUrl(t){if(!t)return null;let e=t.replace(/\\/g,"/").trim();if(!e)return null;if(e.startsWith(h))return e;if(e.startsWith(`${g}/`))return`${h}${e}`;let r=E.isAbsolute(e)?e.replace(/\\/g,"/"):E.join(this.projectPath,e).replace(/\\/g,"/"),n=`${this.projectPath.replace(/\\/g,"/")}/${g}/`,i=r.toLowerCase(),a=n.toLowerCase();return i.startsWith(a)?`${h}${g}/${r.slice(n.length)}`:null}async getAssetUrlByUuid(t){let e=await this.requestEditor(l,I,t);return typeof e=="string"?e:e&&typeof e.url=="string"?e.url:""}async resolveUuid(t,e){if(t.uuid)return t.uuid;if(!e)return null;let r=await this.requestEditor(l,A,e);if(typeof r=="string"&&r)return r;if(r&&typeof r.uuid=="string")return r.uuid;let n=await this.requestEditor(l,U,e);if(n&&typeof n.uuid=="string")return n.uuid;let i=await this.requestEditor(l,_,e);return i&&typeof i.uuid=="string"?i.uuid:null}async tryOpenByRequest(t,...e){try{return await this.requestEditor(l,t,...e),!0}catch(r){return!1}}async openAsset(t,e,r){let n=t?await this.getAssetUrlByUuid(t):e||"",i=!1,a="";return t&&await this.tryOpenByRequest(b,t)&&(i=!0,a="\u901A\u8FC7 UUID \u6253\u5F00"),!i&&n&&await this.tryOpenByRequest(b,n)&&(i=!0,a="\u901A\u8FC7\u8D44\u6E90 URL \u6253\u5F00"),i||(a=`\u6253\u5F00\u8D44\u6E90\u5931\u8D25 uuid=${t||"<\u65E0>"} assetUrl=${n||"<\u65E0>"}`),{ok:i,focused:r,opened:i,assetUrl:n,message:a}}async handleRequest(t,e){try{let r=await S(t),n=r?JSON.parse(r):{},i=String(t.headers[y]||"").trim(),a=String(n.projectId||i).trim();if(!a){u(e,400,{ok:!1,message:"\u7F3A\u5C11\u9879\u76EE\u7F16\u53F7"});return}if(!this.validateProjectId(a)){let T={ok:!1,message:"\u9879\u76EE\u7F16\u53F7\u4E0D\u5339\u914D",projectId:this.projectId};u(e,409,T);return}let c=this.normalizeAssetUrl(n.assetPath),R=await this.resolveUuid(n,c||null);if(!R&&!c){u(e,400,{ok:!1,message:"\u65E0\u6548\u7684\u8D44\u6E90\u8DEF\u5F84\u6216 UUID"});return}let O=this.focusWindow(),p=await this.openAsset(R,c||null,O),C={ok:p.ok,uuid:R,focused:p.focused,opened:p.opened,assetUrl:p.assetUrl,message:p.message};u(e,p.ok?200:500,C)}catch(r){u(e,500,{ok:!1,message:(r==null?void 0:r.message)||"\u6253\u5F00\u5931\u8D25"})}}getApiPath(){return"/api/OpenAsset"}getMethod(){return"POST"}},m=null;function L(){return m||(m=new v),m}function B(){m=null}0&&(module.exports={OpenAssetAPI,getOpenAssetAPI,resetOpenAssetAPI}); diff --git a/dist/bridge/api/StateAPI.js b/dist/bridge/api/StateAPI.js new file mode 100644 index 0000000..7b4d518 --- /dev/null +++ b/dist/bridge/api/StateAPI.js @@ -0,0 +1 @@ +"use strict";var p=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var g=(e,t)=>{for(var r in t)p(e,r,{get:t[r],enumerable:!0})},l=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of d(t))!c.call(e,o)&&o!==r&&p(e,o,{get:()=>t[o],enumerable:!(s=u(t,o))||s.enumerable});return e};var m=e=>l(p({},"__esModule",{value:!0}),e);var f={};g(f,{StateAPI:()=>a,getStateAPI:()=>S,resetStateAPI:()=>P});module.exports=m(f);function h(e,t,r){e.statusCode=t,e.setHeader("Content-Type","application/json; charset=utf-8"),e.end(JSON.stringify(r))}var n=class{constructor(){this.projectId="";this.projectPath=""}setProjectPath(t){this.projectPath=t}getProjectPath(){return this.projectPath}setProjectId(t){this.projectId=t}getProjectId(){return this.projectId}validateProjectId(t){return t===this.projectId}getRequestMethod(t){return t.method||"GET"}checkRequest(t,r){let s=this.getMethodName(t),o=this.getApiPath();return s==="GET"&&o===t.url?(this.handleRequest(t,r),!0):!1}getMethodName(t){return(t.method||"GET").toUpperCase()}};var a=class extends n{constructor(){super(...arguments);this.port=56688;this.running=!1}setPort(r){this.port=r}getPort(){return this.port}setRunning(r){this.running=r}isRunning(){return this.running}getState(){return{projectId:this.projectId,projectPath:this.projectPath,port:this.port,running:this.running}}async handleRequest(r,s){let o={ok:!0,state:this.getState()};h(s,200,o)}getApiPath(){return"/api/State"}getMethod(){return"GET"}},i=null;function S(){return i||(i=new a),i}function P(){i=null}0&&(module.exports={StateAPI,getStateAPI,resetStateAPI}); diff --git a/dist/common/HttpServer.js b/dist/common/HttpServer.js deleted file mode 100644 index 37a91c1..0000000 --- a/dist/common/HttpServer.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";var u=Object.create;var o=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var v=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty;var m=(r,t)=>{for(var e in t)o(r,e,{get:t[e],enumerable:!0})},h=(r,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of g(t))!l.call(r,n)&&n!==e&&o(r,n,{get:()=>t[n],enumerable:!(s=d(t,n))||s.enumerable});return r};var S=(r,t,e)=>(e=r!=null?u(v(r)):{},h(t||!r||!r.__esModule?o(e,"default",{value:r,enumerable:!0}):e,r)),c=r=>h(o({},"__esModule",{value:!0}),r);var R={};m(R,{HttpServer:()=>a,getRequestMethod:()=>b,parseUrlPath:()=>P,readRequestBody:()=>f,sendJsonResponse:()=>H});module.exports=c(R);var p=S(require("http")),a=class{constructor(t){this.server=null;this.host=t.host||"127.0.0.1",this.defaultPort=t.defaultPort||8456,this.port=this.defaultPort,this.requestHandler=t.requestHandler,this.logger=t.logger||console.log,this.onPortInUse=t.onPortInUse,this.onStart=t.onStart,this.onError=t.onError}getState(){return{running:this.isRunning(),port:this.port,host:this.host}}getPort(){return this.port}isRunning(){return!!this.server}start(t){this.stop();let e=t||this.defaultPort;this.createServer(e)}stop(){this.server&&(this.server.close(),this.server=null,this.logger("[HttpServer] \u670D\u52A1\u5668\u5DF2\u505C\u6B62"))}createServer(t){this.server=p.createServer((e,s)=>{this.handleRequest(e,s)}),this.server.once("error",e=>{if((e==null?void 0:e.code)==="EADDRINUSE"&&t<65535){this.logger(`[HttpServer] \u7AEF\u53E3 ${t} \u88AB\u5360\u7528\uFF0C\u5C1D\u8BD5 ${t+1}`),this.onPortInUse&&this.onPortInUse(t,t+1),this.createServer(t+1);return}this.logger(`[HttpServer] \u542F\u52A8\u5931\u8D25: ${(e==null?void 0:e.message)||e}`),this.onError&&this.onError(e)}),this.server.listen(t,this.host,()=>{var s;let e=(s=this.server)==null?void 0:s.address();e&&typeof e=="object"?this.port=Number(e.port||t):this.port=t,this.logger(`[HttpServer] \u76D1\u542C ${this.host}:${this.port}`),this.onStart&&this.onStart(this.port)})}handleRequest(t,e){Promise.resolve(this.requestHandler(t,e)).catch(s=>{this.logger(`[HttpServer] \u8BF7\u6C42\u5904\u7406\u9519\u8BEF: ${(s==null?void 0:s.message)||s}`),e.headersSent||(e.statusCode=500,e.setHeader("Content-Type","application/json; charset=utf-8"),e.end(JSON.stringify({ok:!1,message:(s==null?void 0:s.message)||"internal error"})))})}};function f(r){return new Promise((t,e)=>{let s="",n=!1;r.on("data",i=>{n||(s+=i.toString())}),r.on("end",()=>{n||t(s)}),r.on("error",i=>{n||(n=!0,e(i))})})}function H(r,t,e){r.statusCode=t,r.setHeader("Content-Type","application/json; charset=utf-8"),r.end(JSON.stringify(e))}function P(r){return(r||"").split("?")[0]}function b(r){return(r.method||"").toUpperCase()}0&&(module.exports={HttpServer,getRequestMethod,parseUrlPath,readRequestBody,sendJsonResponse}); diff --git a/dist/common/Scene.js b/dist/common/Scene.js new file mode 100644 index 0000000..69faa1b --- /dev/null +++ b/dist/common/Scene.js @@ -0,0 +1 @@ +"use strict";var i=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var w=Object.prototype.hasOwnProperty;var q=(t,e)=>{for(var a in e)i(t,a,{get:e[a],enumerable:!0})},C=(t,e,a,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of p(e))!w.call(t,s)&&s!==a&&i(t,s,{get:()=>e[s],enumerable:!(r=b(e,s))||r.enumerable});return t};var I=t=>C(i({},"__esModule",{value:!0}),t);var D={};q(D,{load:()=>k,methods:()=>x,unload:()=>E});module.exports=I(D);function k(){}function E(){}var l=t=>new Promise(e=>setTimeout(e,t));async function M(t){var r;let e=global.Editor;if(!((r=e==null?void 0:e.Message)!=null&&r.request))return{ok:!1,message:"Editor.Message \u4E0D\u53EF\u7528"};let a=!1;for(let s=0;s<40;s++){try{if(await e.Message.request("asset-db","query-asset-info",t)){a=!0;break}}catch(n){}try{await e.Message.request("asset-db","refresh-asset",t)}catch(n){}await l(250)}return a?{ok:!0}:{ok:!1,message:`\u811A\u672C\u8D44\u6E90\u672A\u5BFC\u5165: ${t}`}}async function $(t){let{js:e}=require("cc");for(let a=0;a<120;a++){let r=e.getClassByName(t);if(r)return r;await l(250)}return null}var x={async createPrefab(t,e,a,r){let s=null;try{let n=global.Editor,{Node:g,Layers:m,UITransform:d}=require("cc"),c=await M(r);if(!c.ok)return{success:!1,message:c.message||"\u811A\u672C\u8D44\u6E90\u5BFC\u5165\u5931\u8D25"};let u=await $(e);if(!u)return{success:!1,message:`\u7C7B ${e} \u52A0\u8F7D\u8D85\u65F6\uFF0C\u8BF7\u786E\u4FDD\u811A\u672C\u5DF2\u4FDD\u5B58\u3001\u6210\u529F\u5BFC\u5165\u5E76\u5B8C\u6210\u7F16\u8BD1\u3002\u811A\u672C\u8DEF\u5F84: ${r}`};let y=t.replace(".prefab","");s=new g(y),s.layer=m.Enum.UI_2D,s.addComponent(d);let o=s.addComponent(u);if(!o)return{success:!1,message:`\u7EC4\u4EF6 ${e} \u6302\u8F7D\u5931\u8D25`};typeof o.resetInEditor=="function"&&o.resetInEditor();let f=global.cce.Prefab.generatePrefabDataFromNode(s);return await n.Message.request("asset-db","create-asset",a,f.prefabData||f),{success:!0,url:a,message:"\u521B\u5EFA\u6210\u529F"}}catch(n){return{success:!1,message:n.message||"\u521B\u5EFA\u5931\u8D25"}}finally{s!=null&&s.isValid&&s.destroy()}}};0&&(module.exports={load,methods,unload}); diff --git a/dist/main.js b/dist/main.js index d6b45f9..942dc51 100644 --- a/dist/main.js +++ b/dist/main.js @@ -1 +1 @@ -"use strict";var p=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var m=(o,t)=>{for(var s in t)p(o,s,{get:t[s],enumerable:!0})},h=(o,t,s,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of l(t))!g.call(o,a)&&a!==s&&p(o,a,{get:()=>t[a],enumerable:!(i=c(t,a))||i.enumerable});return o};var d=o=>h(p({},"__esModule",{value:!0}),o);var E={};m(E,{config:()=>f,load:()=>k,methods:()=>y,unload:()=>x});module.exports=d(E);var e=require("electron");var{shell:u}=require("electron"),r=null,n=class{static loadPackageJson(){if(r)return r;let pkg=eval("require")("../package.json");return r=pkg,r}static get package_name(){return this.loadPackageJson().name}static get version(){return this.loadPackageJson().version}static get repository(){return this.loadPackageJson().repository}static openRepository(){let o=this.repository;u.openExternal(o)}};function k(){console.log("\u3010Oops Framework\u3011\u5F53\u524D\u7248\u672C\uFF1A",n.version)}function x(){}var f,y={document(){e.shell.openExternal("https://gitee.com/dgflash/oops-framework/wikis/pages")},documentApi(){e.shell.openExternal("https://oops-1255342636.cos.ap-shanghai.myqcloud.com/doc/oops-framework/index.html")},log(){e.shell.openExternal("https://gitee.com/dgflash/oops-framework/wikis/pages?sort_id=12101082&doc_id=2873565")},solution(){e.shell.openExternal("https://store.cocos.com/app/search?name=oops")},tutorial(){e.shell.openExternal("https://store.cocos.com/app/detail/6647")},gitee(){e.shell.openExternal("https://gitee.com/dgflash/oops-framework")},github(){e.shell.openExternal("https://github.com/dgflash/oops-framework")},animator_editor(){e.shell.openExternal("https://oops-1255342636.cos.ap-shanghai.myqcloud.com/tools/animator-editor/index.html")}};0&&(module.exports={config,load,methods,unload}); +"use strict";var rt=Object.create;var y=Object.defineProperty;var st=Object.getOwnPropertyDescriptor;var ot=Object.getOwnPropertyNames;var nt=Object.getPrototypeOf,at=Object.prototype.hasOwnProperty;var it=(o,e)=>{for(var t in e)y(o,t,{get:e[t],enumerable:!0})},J=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of ot(e))!at.call(o,s)&&s!==t&&y(o,s,{get:()=>e[s],enumerable:!(r=st(e,s))||r.enumerable});return o};var I=(o,e,t)=>(t=o!=null?rt(nt(o)):{},J(e||!o||!o.__esModule?y(t,"default",{value:o,enumerable:!0}):t,o)),pt=o=>J(y({},"__esModule",{value:!0}),o);var mt={};it(mt,{config:()=>dt,load:()=>gt,methods:()=>ft,unload:()=>ht});module.exports=pt(mt);var h=require("electron");var P=I(require("fs")),b=I(require("path"));var W="127.0.0.1";var q="\u3010Oops Framework\u3011",F="bridge.json",Y=".oops",G="oops-framework-project-id",m="asset-db",Q="query-uuid-by-url",z="query-url-by-uuid",K="query-asset-info",V="query-asset-meta",w="open-asset",S="db://",A="assets";var X=I(require("http")),E=class{constructor(e){this.server=null;this.host=e.host,this.defaultPort=e.defaultPort,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)}createServer(e){this.server=X.createServer((t,r)=>{this.handleRequest(t,r)}),this.server.once("error",t=>{if((t==null?void 0:t.code)==="EADDRINUSE"&&e<65535){this.onPortInUse&&this.onPortInUse(e,e+1),this.createServer(e+1);return}this.onError&&this.onError(t)}),this.server.listen(e,this.host,()=>{var r;let t=(r=this.server)==null?void 0:r.address();t&&typeof t=="object"?this.port=Number(t.port||e):this.port=e,this.onStart&&this.onStart(this.port)})}handleRequest(e,t){Promise.resolve(this.requestHandler(e,t)).catch(r=>{t.headersSent||(t.statusCode=500,t.setHeader("Content-Type","application/json; charset=utf-8"),t.end(JSON.stringify({ok:!1,message:(r==null?void 0:r.message)||"internal error"})))})}};function R(o){return new Promise((e,t)=>{let r="",s=!1;o.on("data",n=>{s||(r+=n.toString())}),o.on("end",()=>{s||e(r)}),o.on("error",n=>{s||(s=!0,t(n))})})}function l(o,e,t){o.statusCode=e,o.setHeader("Content-Type","application/json; charset=utf-8"),o.end(JSON.stringify(t))}function Z(o){return(o||"").split("?")[0]}function tt(o){return(o.method||"").toUpperCase()}var f=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 r=this.getMethodName(e),s=this.getApiPath();return r==="GET"&&s===e.url?(this.handleRequest(e,t),!0):!1}getMethodName(e){return(e.method||"GET").toUpperCase()}};var k=class extends f{constructor(){super(...arguments);this.port=56688;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,r){let s={ok:!0,state:this.getState()};l(r,200,s)}getApiPath(){return"/api/State"}getMethod(){return"GET"}},T=null;function v(){return T||(T=new k),T}var x=I(require("path"));var C=class extends f{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,r,...s){if(this.editorRequestCallback)return await this.editorRequestCallback(t,r,...s)}normalizeAssetUrl(t){if(!t)return null;let r=t.replace(/\\/g,"/").trim();if(!r)return null;if(r.startsWith(S))return r;if(r.startsWith(`${A}/`))return`${S}${r}`;let s=x.isAbsolute(r)?r.replace(/\\/g,"/"):x.join(this.projectPath,r).replace(/\\/g,"/"),n=`${this.projectPath.replace(/\\/g,"/")}/${A}/`,a=s.toLowerCase(),i=n.toLowerCase();return a.startsWith(i)?`${S}${A}/${s.slice(n.length)}`:null}async getAssetUrlByUuid(t){let r=await this.requestEditor(m,z,t);return typeof r=="string"?r:r&&typeof r.url=="string"?r.url:""}async resolveUuid(t,r){if(t.uuid)return t.uuid;if(!r)return null;let s=await this.requestEditor(m,Q,r);if(typeof s=="string"&&s)return s;if(s&&typeof s.uuid=="string")return s.uuid;let n=await this.requestEditor(m,K,r);if(n&&typeof n.uuid=="string")return n.uuid;let a=await this.requestEditor(m,V,r);return a&&typeof a.uuid=="string"?a.uuid:null}async tryOpenByRequest(t,...r){try{return await this.requestEditor(m,t,...r),!0}catch(s){return!1}}async openAsset(t,r,s){let n=t?await this.getAssetUrlByUuid(t):r||"",a=!1,i="";return t&&await this.tryOpenByRequest(w,t)&&(a=!0,i="\u901A\u8FC7 UUID \u6253\u5F00"),!a&&n&&await this.tryOpenByRequest(w,n)&&(a=!0,i="\u901A\u8FC7\u8D44\u6E90 URL \u6253\u5F00"),a||(i=`\u6253\u5F00\u8D44\u6E90\u5931\u8D25 uuid=${t||"<\u65E0>"} assetUrl=${n||"<\u65E0>"}`),{ok:a,focused:s,opened:a,assetUrl:n,message:i}}async handleRequest(t,r){try{let s=await R(t),n=s?JSON.parse(s):{},a=String(t.headers[G]||"").trim(),i=String(n.projectId||a).trim();if(!i){l(r,400,{ok:!1,message:"\u7F3A\u5C11\u9879\u76EE\u7F16\u53F7"});return}if(!this.validateProjectId(i)){let d={ok:!1,message:"\u9879\u76EE\u7F16\u53F7\u4E0D\u5339\u914D",projectId:this.projectId};l(r,409,d);return}let u=this.normalizeAssetUrl(n.assetPath),p=await this.resolveUuid(n,u||null);if(!p&&!u){l(r,400,{ok:!1,message:"\u65E0\u6548\u7684\u8D44\u6E90\u8DEF\u5F84\u6216 UUID"});return}let g=this.focusWindow(),c=await this.openAsset(p,u||null,g),U={ok:c.ok,uuid:p,focused:c.focused,opened:c.opened,assetUrl:c.assetUrl,message:c.message};l(r,c.ok?200:500,U)}catch(s){l(r,500,{ok:!1,message:(s==null?void 0:s.message)||"\u6253\u5F00\u5931\u8D25"})}}getApiPath(){return"/api/OpenAsset"}getMethod(){return"POST"}},M=null;function D(){return M||(M=new C),M}var j=class extends f{constructor(){super(...arguments);this.logCallback=null}setLogCallback(t){this.logCallback=t}log(t){this.logCallback&&this.logCallback(t)}getEditor(){return global.Editor}async createPrefab(t,r,s,n,a){try{let i=this.getEditor();if(!i)return{success:!1,url:"",message:"Cocos Creator \u7F16\u8F91\u5668\u672A\u5C31\u7EEA"};let u={name:"oops-framework",method:"createPrefab",args:[r,a,t,s]},p=await i.Message.request("scene","execute-scene-script",u);if(p&&p.success){let g=p.url||t;try{await i.Message.request("asset-db","open-asset",g),this.log(`\u5DF2\u81EA\u52A8\u6253\u5F00\u9884\u5236: ${g}`)}catch(c){this.log(`\u6253\u5F00\u9884\u5236\u5931\u8D25: ${c}`)}return{success:!0,url:g,message:p.message||"\u521B\u5EFA\u6210\u529F"}}else return{success:!1,url:"",message:(p==null?void 0:p.message)||"\u521B\u5EFA\u5931\u8D25"}}catch(i){return{success:!1,url:"",message:(i==null?void 0:i.message)||"\u521B\u5EFA\u5931\u8D25"}}}async handleRequest(t,r){try{let s=await R(t),n=s?JSON.parse(s):{},{prefabPath:a,prefabName:i,scriptPath:u,scriptName:p,className:g}=n;if(!a||!i||!u||!p||!g){let d=[];a||d.push("prefabPath"),i||d.push("prefabName"),u||d.push("scriptPath"),p||d.push("scriptName"),g||d.push("className"),l(r,400,{ok:!1,message:`\u7F3A\u5C11\u5FC5\u8981\u53C2\u6570: ${d.join(", ")}`});return}let c=await this.createPrefab(a,i,u,p,g),U={ok:c.success,message:c.message,prefabUrl:c.url};l(r,c.success?200:500,U)}catch(s){l(r,500,{ok:!1,message:(s==null?void 0:s.message)||"\u521B\u5EFA\u9884\u5236\u5931\u8D25"})}}getApiPath(){return"/api/CreatePrefab"}getMethod(){return"POST"}},N=null;function L(){return N||(N=new j),N}var B=class{constructor(){this.httpServer=null;this.currentProjectPath="";this.currentProjectId="";this.apiRegistry=new Map}start(){var t;let e=this.getEditor();if(this.currentProjectPath=((t=e==null?void 0:e.Project)==null?void 0:t.path)||"",!this.currentProjectPath){this.log("\u9879\u76EE\u8DEF\u5F84\u7F3A\u5931\uFF0C\u8DF3\u8FC7\u6865\u63A5\u670D\u52A1\u542F\u52A8");return}this.currentProjectId=this.createProjectId(this.currentProjectPath),this.initApiModules(),this.createHttpServer(56688)}stop(){v().setRunning(!1),this.httpServer&&(this.httpServer.stop(),this.httpServer=null)}getEditor(){return global.Editor}log(e){let t=this.getEditor();if(t&&typeof t.log=="function"){t.log(`${q} ${e}`);return}console.log(`${q} ${e}`)}getSettingsPath(){let e=b.join(this.currentProjectPath,Y);return P.existsSync(e)||P.mkdirSync(e,{recursive:!0}),b.join(e,F)}normalizeProjectPath(e){return b.resolve(e).replace(/\\/g,"/").toLowerCase()}createProjectId(e){let t=this.normalizeProjectPath(e),r=2166136261;for(let s=0;s>>0).toString(16)}`}saveBridgeSettings(e){let t=this.getSettingsPath(),r={port:e,projectId:this.currentProjectId,projectPath:this.currentProjectPath,lastUpdatedTime:Date.now()};P.writeFileSync(t,JSON.stringify(r,null,2),"utf8")}focusCreatorWindow(){let e=this.getEditor();if(e&&e.Window&&typeof e.Window.focus=="function")try{return e.Window.focus(),!0}catch(t){return!1}return!1}async requestEditor(e,t,...r){let s=this.getEditor();if(!(!s||!s.Message||typeof s.Message.request!="function"))try{return await s.Message.request(e,t,...r)}catch(n){return}}registerAPI(e){let t=`${e.getMethod()}:${e.getApiPath()}`;this.apiRegistry.set(t,(r,s)=>e.handleRequest(r,s))}initApiModules(){let e=v(),t=D(),r=L();e.setProjectPath(this.currentProjectPath),e.setProjectId(this.currentProjectId),t.setProjectPath(this.currentProjectPath),t.setProjectId(this.currentProjectId),t.setLogCallback(s=>this.log(s)),t.setFocusWindowCallback(()=>this.focusCreatorWindow()),t.setEditorRequestCallback((s,n,...a)=>this.requestEditor(s,n,...a)),r.setProjectPath(this.currentProjectPath),r.setProjectId(this.currentProjectId),r.setLogCallback(s=>this.log(s)),this.registerAPI(e),this.registerAPI(t),this.registerAPI(r)}async handleRequest(e,t){let r=tt(e),s=Z(e.url),n=`${r}:${s}`,a=this.apiRegistry.get(n);if(a){await a(e,t);return}t.statusCode=404,t.setHeader("Content-Type","application/json; charset=utf-8"),t.end(JSON.stringify({ok:!1,message:"\u672A\u627E\u5230"}))}createHttpServer(e){let t=v();this.httpServer=new E({host:W,defaultPort:e,logger:r=>this.log(r),requestHandler:(r,s)=>this.handleRequest(r,s),onPortInUse:(r,s)=>{this.log(`\u7AEF\u53E3\u51B2\u7A81: ${r} \u2192 ${s}`)},onStart:r=>{this.saveBridgeSettings(r),t.setPort(r),t.setRunning(!0)},onError:r=>{t.setRunning(!1),this.log(`HTTP \u670D\u52A1\u5668\u9519\u8BEF: ${r.message}`)}}),this.httpServer.start(e)}},$=new B;var{shell:ut}=require("electron"),_=null,O=class{static loadPackageJson(){if(_)return _;let pkg=eval("require")("../package.json");return _=pkg,_}static get package_name(){return this.loadPackageJson().name}static get version(){return this.loadPackageJson().version}static get repository(){return this.loadPackageJson().repository}static openRepository(){let o=this.repository;ut.openExternal(o)}};function gt(){$.start(),console.log("\u3010Oops Framework\u3011\u5F53\u524D\u7248\u672C\uFF1A",O.version)}function ht(){$.stop()}var dt,ft={document(){h.shell.openExternal("https://gitee.com/dgflash/oops-framework/wikis/pages")},documentApi(){h.shell.openExternal("https://oops-1255342636.cos.ap-shanghai.myqcloud.com/doc/oops-framework/index.html")},log(){h.shell.openExternal("https://gitee.com/dgflash/oops-framework/wikis/pages?sort_id=12101082&doc_id=2873565")},solution(){h.shell.openExternal("https://store.cocos.com/app/search?name=oops")},tutorial(){h.shell.openExternal("https://store.cocos.com/app/detail/6647")},gitee(){h.shell.openExternal("https://gitee.com/dgflash/oops-framework")},github(){h.shell.openExternal("https://github.com/dgflash/oops-framework")},animator_editor(){h.shell.openExternal("https://oops-1255342636.cos.ap-shanghai.myqcloud.com/tools/animator-editor/index.html")}};0&&(module.exports={config,load,methods,unload}); diff --git a/dist/tools/VSCodeRelatedPefab.js b/dist/tools/VSCodeRelatedPefab.js index e3956d4..08eae9c 100644 --- a/dist/tools/VSCodeRelatedPefab.js +++ b/dist/tools/VSCodeRelatedPefab.js @@ -1 +1 @@ -"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||""} assetUrl=${n||""}`),this.log(`openAsset uuid=${t||""} focused=${o} opened=${i} url=${n||""}`),{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>>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}); +"use strict";var Q=Object.create;var m=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var K=Object.getOwnPropertyNames;var X=Object.getPrototypeOf,V=Object.prototype.hasOwnProperty;var Z=(o,e)=>{for(var t in e)m(o,t,{get:e[t],enumerable:!0})},T=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of K(e))!V.call(o,s)&&s!==t&&m(o,s,{get:()=>e[s],enumerable:!(r=z(e,s))||r.enumerable});return o};var v=(o,e,t)=>(t=o!=null?Q(X(o)):{},T(e||!o||!o.__esModule?m(t,"default",{value:o,enumerable:!0}):t,o)),tt=o=>T(m({},"__esModule",{value:!0}),o);var ot={};Z(ot,{VSCodeRelatedPefab:()=>C,vscodeRelatedPefab:()=>st});module.exports=tt(ot);var u=v(require("fs")),P=v(require("path"));var w=v(require("http")),b=class{constructor(e){this.server=null;this.host=e.host,this.defaultPort=e.defaultPort,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)}createServer(e){this.server=w.createServer((t,r)=>{this.handleRequest(t,r)}),this.server.once("error",t=>{if((t==null?void 0:t.code)==="EADDRINUSE"&&e<65535){this.onPortInUse&&this.onPortInUse(e,e+1),this.createServer(e+1);return}this.onError&&this.onError(t)}),this.server.listen(e,this.host,()=>{var r;let t=(r=this.server)==null?void 0:r.address();t&&typeof t=="object"?this.port=Number(t.port||e):this.port=e,this.onStart&&this.onStart(this.port)})}handleRequest(e,t){Promise.resolve(this.requestHandler(e,t)).catch(r=>{t.headersSent||(t.statusCode=500,t.setHeader("Content-Type","application/json; charset=utf-8"),t.end(JSON.stringify({ok:!1,message:(r==null?void 0:r.message)||"internal error"})))})}};function j(o){return new Promise((e,t)=>{let r="",s=!1;o.on("data",n=>{s||(r+=n.toString())}),o.on("end",()=>{s||e(r)}),o.on("error",n=>{s||(s=!0,t(n))})})}function p(o,e,t){o.statusCode=e,o.setHeader("Content-Type","application/json; charset=utf-8"),o.end(JSON.stringify(t))}function H(o){return(o||"").split("?")[0]}function M(o){return(o.method||"").toUpperCase()}var _="\u3010Oops Framework\u3011",L="bridge.json",N=".oops",D="oops-framework-project-id",d="asset-db",B="query-uuid-by-url",$="query-url-by-uuid",W="query-asset-info",F="query-asset-meta",k="open-asset",S="db://",A="assets";var c=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 r=this.getMethodName(e),s=this.getApiPath();return r==="GET"&&s===e.url?(this.handleRequest(e,t),!0):!1}getMethodName(e){return(e.method||"GET").toUpperCase()}};var I=class extends c{constructor(){super(...arguments);this.port=56688;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,r){let s={ok:!0,state:this.getState()};p(r,200,s)}getApiPath(){return"/api/State"}getMethod(){return"GET"}},U=null;function g(){return U||(U=new I),U}var y=v(require("path"));var E=class extends c{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,r,...s){if(this.editorRequestCallback)return await this.editorRequestCallback(t,r,...s)}normalizeAssetUrl(t){if(!t)return null;let r=t.replace(/\\/g,"/").trim();if(!r)return null;if(r.startsWith(S))return r;if(r.startsWith(`${A}/`))return`${S}${r}`;let s=y.isAbsolute(r)?r.replace(/\\/g,"/"):y.join(this.projectPath,r).replace(/\\/g,"/"),n=`${this.projectPath.replace(/\\/g,"/")}/${A}/`,i=s.toLowerCase(),a=n.toLowerCase();return i.startsWith(a)?`${S}${A}/${s.slice(n.length)}`:null}async getAssetUrlByUuid(t){let r=await this.requestEditor(d,$,t);return typeof r=="string"?r:r&&typeof r.url=="string"?r.url:""}async resolveUuid(t,r){if(t.uuid)return t.uuid;if(!r)return null;let s=await this.requestEditor(d,B,r);if(typeof s=="string"&&s)return s;if(s&&typeof s.uuid=="string")return s.uuid;let n=await this.requestEditor(d,W,r);if(n&&typeof n.uuid=="string")return n.uuid;let i=await this.requestEditor(d,F,r);return i&&typeof i.uuid=="string"?i.uuid:null}async tryOpenByRequest(t,...r){try{return await this.requestEditor(d,t,...r),!0}catch(s){return!1}}async openAsset(t,r,s){let n=t?await this.getAssetUrlByUuid(t):r||"",i=!1,a="";return t&&await this.tryOpenByRequest(k,t)&&(i=!0,a="\u901A\u8FC7 UUID \u6253\u5F00"),!i&&n&&await this.tryOpenByRequest(k,n)&&(i=!0,a="\u901A\u8FC7\u8D44\u6E90 URL \u6253\u5F00"),i||(a=`\u6253\u5F00\u8D44\u6E90\u5931\u8D25 uuid=${t||"<\u65E0>"} assetUrl=${n||"<\u65E0>"}`),{ok:i,focused:s,opened:i,assetUrl:n,message:a}}async handleRequest(t,r){try{let s=await j(t),n=s?JSON.parse(s):{},i=String(t.headers[D]||"").trim(),a=String(n.projectId||i).trim();if(!a){p(r,400,{ok:!1,message:"\u7F3A\u5C11\u9879\u76EE\u7F16\u53F7"});return}if(!this.validateProjectId(a)){let G={ok:!1,message:"\u9879\u76EE\u7F16\u53F7\u4E0D\u5339\u914D",projectId:this.projectId};p(r,409,G);return}let h=this.normalizeAssetUrl(n.assetPath),O=await this.resolveUuid(n,h||null);if(!O&&!h){p(r,400,{ok:!1,message:"\u65E0\u6548\u7684\u8D44\u6E90\u8DEF\u5F84\u6216 UUID"});return}let J=this.focusWindow(),l=await this.openAsset(O,h||null,J),Y={ok:l.ok,uuid:O,focused:l.focused,opened:l.opened,assetUrl:l.assetUrl,message:l.message};p(r,l.ok?200:500,Y)}catch(s){p(r,500,{ok:!1,message:(s==null?void 0:s.message)||"\u6253\u5F00\u5931\u8D25"})}}getApiPath(){return"/api/OpenAsset"}getMethod(){return"POST"}},q=null;function R(){return q||(q=new E),q}var C=class{constructor(){this.httpServer=null;this.currentProjectPath="";this.currentProjectId=""}getEditor(){return global.Editor}bridgeLog(e){let t=this.getEditor();if(t&&typeof t.log=="function"){t.log(`${_} ${e}`);return}console.log(`${_} ${e}`)}getSettingsPath(){let e=P.join(this.currentProjectPath,N);return u.existsSync(e)||u.mkdirSync(e,{recursive:!0}),P.join(e,L)}normalizeProjectPath(e){return P.resolve(e).replace(/\\/g,"/").toLowerCase()}createProjectId(e){let t=this.normalizeProjectPath(e),r=2166136261;for(let s=0;s>>0).toString(16)}`}readSavedPort(){try{let e=this.getSettingsPath();if(!u.existsSync(e))return 56688;let t=u.readFileSync(e,"utf8"),r=JSON.parse(t),s=Number(r.port);return!Number.isInteger(s)||s<1||s>65535?56688:s}catch(e){return 56688}}savePort(e){let t=this.getSettingsPath();u.writeFileSync(t,JSON.stringify({port:e,projectId:this.currentProjectId,projectPath:this.currentProjectPath,updatedAt:Date.now()},null,2),"utf8")}focusCreatorWindow(){let e=this.getEditor();if(e&&e.Window&&typeof e.Window.focus=="function")try{return e.Window.focus(),!0}catch(t){return!1}return!1}async requestEditor(e,t,...r){let s=this.getEditor();if(!(!s||!s.Message||typeof s.Message.request!="function"))try{return await s.Message.request(e,t,...r)}catch(n){return}}initApiModules(){let e=g(),t=R();e.setProjectPath(this.currentProjectPath),e.setProjectId(this.currentProjectId),t.setProjectPath(this.currentProjectPath),t.setProjectId(this.currentProjectId),t.setLogCallback(r=>this.bridgeLog(r)),t.setFocusWindowCallback(()=>this.focusCreatorWindow()),t.setEditorRequestCallback((r,s,...n)=>this.requestEditor(r,s,...n))}async handleRequest(e,t){let r=M(e),s=H(e.url),n=g(),i=R();if(r==="GET"&&s==="/api/State"){await n.handleRequest(e,t);return}if(r==="POST"&&s==="/api/OpenAsset"){await i.handleRequest(e,t);return}t.statusCode=404,t.setHeader("Content-Type","application/json; charset=utf-8"),t.end(JSON.stringify({ok:!1,message:"not found"}))}createHttpServer(e){let t=g();this.httpServer=new b({defaultPort:e,logger:r=>this.bridgeLog(r),requestHandler:(r,s)=>this.handleRequest(r,s),onPortInUse:(r,s)=>{this.bridgeLog(`port ${r} in use, retry ${s}`)},onStart:r=>{this.savePort(r),t.setPort(r),t.setRunning(!0),this.bridgeLog(`listening on 127.0.0.1:${r} projectId=${this.currentProjectId}`)}}),this.httpServer.start(e)}stopHttpServer(){let e=g();this.httpServer&&(this.httpServer.stop(),e.setRunning(!1),this.httpServer=null)}load(){let e=this.getEditor();this.currentProjectPath=e.Project.path,this.currentProjectId=this.createProjectId(this.currentProjectPath),this.initApiModules();let t=this.readSavedPort();this.createHttpServer(t)}unload(){this.stopHttpServer()}},st=new C;0&&(module.exports={VSCodeRelatedPefab,vscodeRelatedPefab}); diff --git a/package.json b/package.json index f56e1a3..f36aae0 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,9 @@ "readonly": false } }, + "scene": { + "script": "./dist/common/Scene.js" + }, "menu": [ {