mirror of
https://gitee.com/dgflash/oops-plugin-framework.git
synced 2026-05-08 11:25:52 +08:00
2 lines
12 KiB
JavaScript
2 lines
12 KiB
JavaScript
"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<t.length;s++)r^=t.charCodeAt(s),r+=(r<<1)+(r<<4)+(r<<7)+(r<<8)+(r<<24);return`${"p_"}${(r>>>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});
|