Files
oops-plugin-framework/dist/bridge/api/OpenAssetAPI.js

2 lines
4.4 KiB
JavaScript

"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});