edgeone 1.1.11 → 1.1.13

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.
@@ -784,7 +784,7 @@ function createEdgeoneCompatibleRequest(originalReq, isFramework = false) {
784
784
  // \u4E3A\u975E\u6846\u67B6\u51FD\u6570\u6DFB\u52A0 body getter
785
785
  return addEdgeoneRequestGetters(originalReq);
786
786
  }
787
- `}var x$=qt(()=>{});function T$(t){let e=qs.default.extname(t);return kJe.includes(e)}async function E$(){let t=qs.default.resolve(process.cwd(),"node-functions"),e=qs.default.resolve(process.cwd(),".edgeone/node-functions/public");if(!Yi.default.existsSync(t))return;let n=Yi.default.readdirSync(t).filter(o=>Yi.default.statSync(qs.default.join(t,o)).isDirectory());for(let o of n){let u=qs.default.join(t,o,"public");Yi.default.existsSync(u)&&Yi.default.statSync(u).isDirectory()&&D$(u,e)}}function D$(t,e){Yi.default.existsSync(e)||Yi.default.mkdirSync(e,{recursive:!0});for(let n of Yi.default.readdirSync(t)){let o=qs.default.join(t,n),u=qs.default.join(e,n);Yi.default.statSync(o).isDirectory()?D$(o,u):Yi.default.copyFileSync(o,u)}}function IJe(t,e){try{let n=NS(t,e);return(0,b$.default)(n,{ExpressionStatement(o){let u=o.node.expression;B1.isCallExpression(u)&&B1.isMemberExpression(u.callee)&&B1.isIdentifier(u.callee.object,{name:"app"})&&B1.isIdentifier(u.callee.property,{name:"listen"})&&o.remove()}}),(0,w$.default)(n,{}).code}catch(n){throw n.message.includes("Unexpected token")||n.message.includes("SyntaxError")?new Error(`Failed to parse ast:::Syntax error in function file: ${n.message}`):n}}function pw(t){return t.charAt(0).toUpperCase()+t.slice(1)}function _$(t){if(!Yi.default.existsSync(t))throw new Error(`File not found: ${t}`);let e=Yi.default.readFileSync(t,"utf-8");try{return e=IJe(e,t),e}catch(n){throw n.message.includes("Syntax error in function file")?new Error(`Syntax error in ${t}: ${n.message.replace("Syntax error in function file: ","")}`):n}}var b$,w$,B1,Yi,qs,dw,S$,kJe,R2,C$,e0,OJe,hw,A$=qt(()=>{K4();Gg();zp();G4();Rj();jj();m$();b$=En(g2()),w$=En(XO()),B1=En(Gn()),Yi=En(require("fs")),qs=En(require("path")),dw=En(require("esbuild"));g$();R_();x$();CN();S$=!0,kJe=[".js",".ts",".cjs",".jsx",".tsx"];R2={FUNCTION:"./node-functions",OUTPUT:"./.edgeone/node-functions/index.js",OUTPUT_META:"./.edgeone/node-functions/meta.json"},C$=(h=>(h.NO_FUNCTIONS="NO_FUNCTIONS",h.SCAN_ERROR="SCAN_ERROR",h.BUILD_ERROR="BUILD_ERROR",h.OUTPUT_DIR_ERROR="OUTPUT_DIR_ERROR",h.ENV_LOAD_ERROR="ENV_LOAD_ERROR",h.FRAMEWORK_DETECTION_ERROR="FRAMEWORK_DETECTION_ERROR",h.FILE_PROCESSING_ERROR="FILE_PROCESSING_ERROR",h))(C$||{}),e0=class extends Error{constructor(n,o){super(n);this.code=o;this.name="CloudFunctionError"}},OJe=[{method:"GET",funcName:"onRequestGet"},{method:"POST",funcName:"onRequestPost"},{method:"PUT",funcName:"onRequestPut"},{method:"DELETE",funcName:"onRequestDelete"},{method:"PATCH",funcName:"onRequestPatch"},{method:"HEAD",funcName:"onRequestHead"},{method:"OPTIONS",funcName:"onRequestOptions"},{method:"*",funcName:"onRequest"}],hw=class{mode;env;logicText;bundleText;cssText;functionList;functionIndex;silent;static async decide(){try{return Yi.default.readdirSync(R2.FUNCTION).length>0}catch{return!1}}constructor(e){this.mode=e.mode||"prod",this.env=e.env||{},this.logicText="",this.bundleText="",this.cssText="",this.functionList=[],this.functionIndex=0,this.silent=e.silent||!1,this.initializeEnvironment(e)}initializeEnvironment(e){if(!e.env)try{let n=Sl("./.env");Yi.default.existsSync(n)||(n=Sl("./.env.local"));let o=F_(n);delete o.TENCENT_SECRET_ID,delete o.TENCENT_SECRET_KEY,this.env=o}catch{this.env={}}}removeDuplicateRoutes(e){let n=new Map,o=[];for(let u of e){let r=u.route;n.has(r)||(n.set(r,u),o.push(u))}return o}generateRoutes(){return this.functionList.map(e=>({route:e.route,filePath:qs.default.relative(R2.FUNCTION,e.filePath),isDynamic:e.isDynamic,isMultiLevel:e.isMultiLevel,left:e.left,routePattern:e.routePattern,dynamicSegments:e.dynamicSegments,hasDefaultHandler:e.hasDefaultHandler,methods:e.methods,isFramework:e.isFramework,framework:e.framework,frameworkPrefix:e.frameworkPrefix}))}generateRouteMetadata(e,n){let o=n.route.replace(/\/\[\[([^/]+)\]\]$/,"/:$1*").replace(/\/\[([^/]+)\]/g,"/:$1");o.startsWith("/")||(o="/"+o),o=o.replace(/[^\w/:*\-]/g,"");let u=o.replace(/^\//,"").replace(/\//g,"/"),f=u.split("/").slice(0,-1).join("/"),h=`${e}:onRequest`;return{routePath:"/"+u,mountPath:f||u,method:n.methods,module:[h],isFramework:n.isFramework}}async saveRouteMetadata(e){try{let n={routes:e.map(r=>this.generateRouteMetadata(r.filePath,r))},o=qs.default.dirname(R2.OUTPUT),u=R2.OUTPUT_META;await Yi.default.promises.mkdir(o,{recursive:!0}),await Yi.default.promises.writeFile(u,JSON.stringify(n,null,2),"utf-8")}catch(n){throw new e0(`Failed to save route metadata: ${n.message}`,C$.METADATA_SAVE_ERROR)}}isCloudFunction(e){return e.indexOf("onRequest")>-1||e.indexOf("export default app;")>-1||e.indexOf("export default app")>-1||e.indexOf("export app")>-1}async detectFramework(e,n){return await h$(e,n)}detectHttpMethods(e){let n=[],o=!1;return/export\s+(?:default\s+)?(?:const|function|async\s+function)?\s*onRequest\s*[=\(]/.test(e)?(o=!0,{methods:G0,hasDefaultHandler:!0}):(OJe.forEach(({method:r,funcName:f})=>{r!=="*"&&e.includes("export")&&e.includes(f)&&n.push(r)}),{methods:n.length>0?n:["GET"],hasDefaultHandler:!1})}matchPath(e){let n=e.match(/:([^/*]+)\*$/);if(n){let f=n[1],h=e.lastIndexOf(`:${f}*`),S=e.substring(0,h);return{id:f,mode:2,left:S||"/",pattern:null,isMultiLevel:!0}}let o=/:([^/*]+)(?![^*]*\*)/g,u=e.match(o),r=u?u.map(f=>f.slice(1)):[];if(r.length>0){let f=e.indexOf(":"),h=e.substring(0,f),S=e;return r==null||r.forEach(v=>{S=S.replace(`:${v}`,"([^/]+)")}),S=S+"$",{id:r,mode:1,left:h||"/",pattern:S.replace(/\//g,"\\/"),isMultiLevel:!1}}return{id:"",mode:0,left:"",pattern:e.replace(/\//g,"\\/"),isMultiLevel:!1}}async processRoutePath(e){try{let n=_$(e),u=qs.default.relative(R2.FUNCTION,e).replace(/\\/g,"/").replace(/\.(js|ts|cjs|jsx|tsx)$/,"").replace(/\/index$/,"");u==="index"&&(u="");let r="/"+u;r=r.replace(/\/\[\[([^/]+)\]\]/g,"/:$1*").replace(/\/\[([^/]+)\]/g,"/:$1"),r.startsWith("/")||(r="/"+r),r=r.replace(/[^\w/:*\-]/g,"");let f=qs.default.basename(e).replace(/\.(js|ts|cjs|jsx|tsx)$/,""),h={route:r,filePath:e,fileName:f,methods:[],isDynamic:!1,hasDefaultHandler:!1},{isFramework:S,framework:v,prefix:b}=await this.detectFramework(n,e).catch(g=>(console.error("[builder] Error detecting framework",g),{isFramework:!1,framework:null,prefix:"/"}));if(S){let g=[],G=qs.default.basename(e,qs.default.extname(e));if(G.startsWith("[[")&&G.endsWith("]]")){g.push({...h,route:r,isFramework:S,framework:v,frameworkPrefix:b,methods:G0,hasDefaultHandler:!0,isDynamic:!0,isMultiLevel:!0});let Y=r.split("/").filter(Boolean);if(Y.length>1){let pe="/"+Y.slice(0,-1).join("/");g.push({...h,route:pe,isFramework:S,framework:v,frameworkPrefix:b,methods:G0,hasDefaultHandler:!0,isDynamic:!0,isMultiLevel:!0})}}else if(G.startsWith("[")&&G.endsWith("]"))g.push({...h,route:r,isFramework:S,framework:v,frameworkPrefix:b,methods:G0,hasDefaultHandler:!0,isDynamic:!0,isMultiLevel:!1});else{let Y=b==="/"?"/:routes*":`${b}/:routes*`;g.push({...h,route:Y,isFramework:S,framework:v,frameworkPrefix:b,methods:G0,hasDefaultHandler:!0,isDynamic:!0,isMultiLevel:!0})}return b!=="/"&&g.push({...h,route:b,isFramework:S,framework:v,frameworkPrefix:b,methods:G0,hasDefaultHandler:!0,isDynamic:!1,isMultiLevel:!1}),g}let P=this.matchPath(r),{methods:F,hasDefaultHandler:W}=this.detectHttpMethods(n);return[{...h,methods:F,hasDefaultHandler:W,isDynamic:P.mode>0,isMultiLevel:P.isMultiLevel,dynamicSegments:Array.isArray(P.id)?P.id:[P.id],routePattern:P.pattern,left:P.left}]}catch(n){console.error("[builder] Error processing route path",n)}}generateRouteMatchingLogic(e,n){if(e.isFramework&&e.isDynamic)return`
787
+ `}var x$=qt(()=>{});function T$(t){let e=qs.default.extname(t);return kJe.includes(e)}async function E$(){let t=qs.default.resolve(process.cwd(),"node-functions"),e=qs.default.resolve(process.cwd(),".edgeone/node-functions/public");if(!Yi.default.existsSync(t))return;let n=Yi.default.readdirSync(t).filter(o=>Yi.default.statSync(qs.default.join(t,o)).isDirectory());for(let o of n){let u=qs.default.join(t,o,"public");Yi.default.existsSync(u)&&Yi.default.statSync(u).isDirectory()&&D$(u,e)}}function D$(t,e){Yi.default.existsSync(e)||Yi.default.mkdirSync(e,{recursive:!0});for(let n of Yi.default.readdirSync(t)){let o=qs.default.join(t,n),u=qs.default.join(e,n);Yi.default.statSync(o).isDirectory()?D$(o,u):Yi.default.copyFileSync(o,u)}}function IJe(t,e){try{let n=NS(t,e);return(0,b$.default)(n,{ExpressionStatement(o){let u=o.node.expression;B1.isCallExpression(u)&&B1.isMemberExpression(u.callee)&&B1.isIdentifier(u.callee.object,{name:"app"})&&B1.isIdentifier(u.callee.property,{name:"listen"})&&o.remove()}}),(0,w$.default)(n,{}).code}catch(n){throw n.message.includes("Unexpected token")||n.message.includes("SyntaxError")?new Error(`Failed to parse ast:::Syntax error in function file: ${n.message}`):n}}function pw(t){return t.charAt(0).toUpperCase()+t.slice(1)}function _$(t){if(!Yi.default.existsSync(t))throw new Error(`File not found: ${t}`);let e=Yi.default.readFileSync(t,"utf-8");try{return e=IJe(e,t),e}catch(n){throw n.message.includes("Syntax error in function file")?new Error(`Syntax error in ${t}: ${n.message.replace("Syntax error in function file: ","")}`):n}}var b$,w$,B1,Yi,qs,dw,S$,kJe,R2,C$,e0,OJe,hw,A$=qt(()=>{K4();Gg();zp();G4();Rj();jj();m$();b$=En(g2()),w$=En(XO()),B1=En(Gn()),Yi=En(require("fs")),qs=En(require("path")),dw=En(require("esbuild"));g$();R_();x$();CN();S$=!0,kJe=[".js",".ts",".cjs",".jsx",".tsx"];R2={FUNCTION:"./node-functions",OUTPUT:"./.edgeone/node-functions/index.js",OUTPUT_META:"./.edgeone/node-functions/meta.json"},C$=(h=>(h.NO_FUNCTIONS="NO_FUNCTIONS",h.SCAN_ERROR="SCAN_ERROR",h.BUILD_ERROR="BUILD_ERROR",h.OUTPUT_DIR_ERROR="OUTPUT_DIR_ERROR",h.ENV_LOAD_ERROR="ENV_LOAD_ERROR",h.FRAMEWORK_DETECTION_ERROR="FRAMEWORK_DETECTION_ERROR",h.FILE_PROCESSING_ERROR="FILE_PROCESSING_ERROR",h))(C$||{}),e0=class extends Error{constructor(n,o){super(n);this.code=o;this.name="CloudFunctionError"}},OJe=[{method:"GET",funcName:"onRequestGet"},{method:"POST",funcName:"onRequestPost"},{method:"PUT",funcName:"onRequestPut"},{method:"DELETE",funcName:"onRequestDelete"},{method:"PATCH",funcName:"onRequestPatch"},{method:"HEAD",funcName:"onRequestHead"},{method:"OPTIONS",funcName:"onRequestOptions"},{method:"*",funcName:"onRequest"}],hw=class{mode;env;logicText;bundleText;cssText;functionList;functionIndex;silent;static async decide(){try{return Yi.default.readdirSync(R2.FUNCTION).length>0}catch{return!1}}constructor(e){this.mode=e.mode||"prod",this.env=e.env||{},this.logicText="",this.bundleText="",this.cssText="",this.functionList=[],this.functionIndex=0,this.silent=e.silent||!1,this.initializeEnvironment(e)}initializeEnvironment(e){if(!e.env)try{let n=Sl("./.env");Yi.default.existsSync(n)||(n=Sl("./.env.local"));let o=F_(n);delete o.TENCENT_SECRET_ID,delete o.TENCENT_SECRET_KEY,this.env=o}catch{this.env={}}}removeDuplicateRoutes(e){let n=new Map,o=[];for(let u of e){let r=u.route;n.has(r)||(n.set(r,u),o.push(u))}return o}generateRoutes(){return this.functionList.map(e=>({route:e.route,filePath:qs.default.relative(R2.FUNCTION,e.filePath),isDynamic:e.isDynamic,isMultiLevel:e.isMultiLevel,left:e.left,routePattern:e.routePattern,dynamicSegments:e.dynamicSegments,hasDefaultHandler:e.hasDefaultHandler,methods:e.methods,isFramework:e.isFramework,framework:e.framework,frameworkPrefix:e.frameworkPrefix}))}generateRouteMetadata(e,n){let o=n.route.replace(/\/\[\[([^/]+)\]\]$/,"/:$1*").replace(/\/\[([^/]+)\]/g,"/:$1");o.startsWith("/")||(o="/"+o),o=o.replace(/[^\w/:*\-]/g,"");let u=o.replace(/^\//,"").replace(/\//g,"/"),f=u.split("/").slice(0,-1).join("/"),h=`${e}:onRequest`;return{routePath:"/"+u,mountPath:f||u,method:n.methods,module:[h],isFramework:n.isFramework}}async saveRouteMetadata(e){try{let n={routes:e.map(r=>this.generateRouteMetadata(r.filePath,r))},o=qs.default.dirname(R2.OUTPUT),u=R2.OUTPUT_META;await Yi.default.promises.mkdir(o,{recursive:!0}),await Yi.default.promises.writeFile(u,JSON.stringify(n,null,2),"utf-8")}catch(n){throw new e0(`Failed to save route metadata: ${n.message}`,C$.METADATA_SAVE_ERROR)}}isCloudFunction(e){return e.indexOf("onRequest")>-1||e.indexOf("export default app;")>-1||e.indexOf("export default app")>-1||e.indexOf("export app")>-1}async detectFramework(e,n){return await h$(e,n)}detectHttpMethods(e){let n=[],o=!1;return/export\s+(?:default\s+)?(?:const|function|async\s+function)?\s*onRequest\s*[=\(]/.test(e)?(o=!0,{methods:G0,hasDefaultHandler:!0}):(OJe.forEach(({method:r,funcName:f})=>{r!=="*"&&e.includes("export")&&e.includes(f)&&n.push(r)}),{methods:n.length>0?n:["GET"],hasDefaultHandler:!1})}matchPath(e){let n=e.match(/:([^/*]+)\*$/);if(n){let f=n[1],h=e.lastIndexOf(`:${f}*`),S=e.substring(0,h);return{id:f,mode:2,left:S||"/",pattern:null,isMultiLevel:!0}}let o=/:([^/*]+)(?![^*]*\*)/g,u=e.match(o),r=u?u.map(f=>f.slice(1)):[];if(r.length>0){let f=e.indexOf(":"),h=e.substring(0,f),S=e;return r==null||r.forEach(v=>{S=S.replace(`:${v}`,"([^/]+)")}),S=S+"$",{id:r,mode:1,left:h||"/",pattern:S.replace(/\//g,"\\/"),isMultiLevel:!1}}return{id:"",mode:0,left:"",pattern:e.replace(/\//g,"\\/"),isMultiLevel:!1}}async processRoutePath(e){try{let n=_$(e),u=qs.default.relative(R2.FUNCTION,e).replace(/\\/g,"/").replace(/\.(js|ts|cjs|jsx|tsx)$/,"").replace(/\/index$/,"");u==="index"&&(u="");let r="/"+u;r=r.replace(/\/\[\[([^/]+)\]\]/g,"/:$1*").replace(/\/\[([^/]+)\]/g,"/:$1"),r.startsWith("/")||(r="/"+r),r=r.replace(/[^\w/:*\-]/g,"");let f=qs.default.basename(e).replace(/\.(js|ts|cjs|jsx|tsx)$/,""),h={route:r,filePath:e,fileName:f,methods:[],isDynamic:!1,hasDefaultHandler:!1},{isFramework:S,framework:v,prefix:b}=await this.detectFramework(n,e).catch(g=>(console.error("[builder] Error detecting framework",g),{isFramework:!1,framework:null,prefix:"/"}));if(S){let g=[],G=qs.default.basename(e,qs.default.extname(e));if(G.startsWith("[[")&&G.endsWith("]]")){g.push({...h,route:r,isFramework:S,framework:v,frameworkPrefix:b,methods:G0,hasDefaultHandler:!0,isDynamic:!0,isMultiLevel:!0});let Y=r.split("/").filter(Boolean);if(Y.length>1){let pe="/"+Y.slice(0,-1).join("/");g.push({...h,route:pe,isFramework:S,framework:v,frameworkPrefix:b,methods:G0,hasDefaultHandler:!0,isDynamic:!0,isMultiLevel:!0})}}else if(G.startsWith("[")&&G.endsWith("]"))g.push({...h,route:r,isFramework:S,framework:v,frameworkPrefix:b,methods:G0,hasDefaultHandler:!0,isDynamic:!0,isMultiLevel:!1});else{let Y=b==="/"?"/:routes*":`${b}/:routes*`;g.push({...h,route:Y,isFramework:S,framework:v,frameworkPrefix:b,methods:G0,hasDefaultHandler:!0,isDynamic:!0,isMultiLevel:!0})}return b!=="/"&&g.push({...h,route:b,isFramework:S,framework:v,frameworkPrefix:b,methods:G0,hasDefaultHandler:!0,isDynamic:!1,isMultiLevel:!1}),g}let P=this.matchPath(r),{methods:F,hasDefaultHandler:W}=this.detectHttpMethods(n);return[{...h,methods:F,hasDefaultHandler:W,isDynamic:P.mode>0,isMultiLevel:P.isMultiLevel,dynamicSegments:Array.isArray(P.id)?P.id:[P.id],routePattern:P.pattern,left:P.left}]}catch(n){console.error("[builder] Error processing route path",n)}}generateRouteMatchingLogic(e,n,o){if(e.isFramework&&e.isDynamic)return`
788
788
 
789
789
 
790
790
  // \u52A8\u6001\u8DEF\u7531\u5339\u914D: ${e.route}
@@ -792,6 +792,7 @@ function createEdgeoneCompatibleRequest(originalReq, isFramework = false) {
792
792
 
793
793
  const routePattern = new RegExp('^${e.route.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/:[^/]+\*/g,".*").replace(/:[^/]+/g,"[^/]+")}$');
794
794
  if (routePattern.test(pathname)) {
795
+ ${o}
795
796
  // \u6784\u9020 context \u5BF9\u8C61
796
797
  context = {
797
798
  env, // \u4F7F\u7528\u6CE8\u5165\u7684\u73AF\u5883\u53D8\u91CF
@@ -979,6 +980,7 @@ function createEdgeoneCompatibleRequest(originalReq, isFramework = false) {
979
980
  const params = {};
980
981
  params['${e.dynamicSegments[0]}'] = cleanPath.split('/');
981
982
  context.params = params;
983
+ ${o}
982
984
  ${this.generateMethodHandlerCode(n)}
983
985
  const requestEndTime = Date.now();
984
986
  console.log(\`Request processing time: \${requestEndTime - requestStartTime}ms\`);
@@ -987,7 +989,7 @@ function createEdgeoneCompatibleRequest(originalReq, isFramework = false) {
987
989
  'functions-request-id': context.server.requestId
988
990
  });
989
991
  return;
990
- }`;{let u=e.route.split("/").filter(Boolean).filter(r=>r.startsWith(":")&&!r.endsWith("*")).map(r=>r.slice(1));return`
992
+ }`;{let r=e.route.split("/").filter(Boolean).filter(f=>f.startsWith(":")&&!f.endsWith("*")).map(f=>f.slice(1));return`
991
993
 
992
994
  // \u5904\u7406\u5355\u7EA7\u52A8\u6001\u8DEF\u7531: ${e.route}
993
995
  {
@@ -1052,6 +1054,7 @@ function createEdgeoneCompatibleRequest(originalReq, isFramework = false) {
1052
1054
  }
1053
1055
  }
1054
1056
  context.params = params;
1057
+ ${o}
1055
1058
  ${this.generateMethodHandlerCode(n)}
1056
1059
  const requestEndTime = Date.now();
1057
1060
  console.log(\`Request processing time: \${requestEndTime - requestStartTime}ms\`);
@@ -1067,6 +1070,7 @@ function createEdgeoneCompatibleRequest(originalReq, isFramework = false) {
1067
1070
 
1068
1071
  // \u5904\u7406\u9759\u6001\u8DEF\u7531: ${e.route}
1069
1072
  if (pathname === '${e.route}') {
1073
+ ${o}
1070
1074
  // \u6DFB\u52A0 Vercel \u517C\u5BB9\u7684 body \u5904\u7406
1071
1075
  enhancedRequest = createEdgeoneCompatibleRequest(req, false);
1072
1076
 
@@ -1155,7 +1159,7 @@ exports.startServer = async () => {
1155
1159
  }
1156
1160
  };`}async handleEBADFError(){try{ms("\u{1F527} Attempting to resolve EBADF error...");let e=[".esbuild",".temp",".cache"];for(let n of e)Yi.default.existsSync(n)&&(Yi.default.rmSync(n,{recursive:!0,force:!0}),ms(` \u2705 Cleaned ${n} directory`));await new Promise(n=>setTimeout(n,1e3));try{let{execSync:n}=require("child_process"),o=n("ulimit -n",{encoding:"utf8"}).trim();ms(` \u{1F4CA} File descriptor limit: ${o}`)}catch(n){ms(` \u26A0\uFE0F Could not check file descriptor limit: ${n.message}`)}ms(" \u{1F504} EBADF error handling completed")}catch(e){ms(` \u274C EBADF error handling failed: ${e.message}`)}}async compressIndexFile(){try{let e=qs.default.join(".edgeone/node-functions","index.mjs");if(!Yi.default.existsSync(e)){ms("index.mjs not found, skipping compression");return}let n=Yi.default.readFileSync(e,"utf-8"),o=Buffer.byteLength(n,"utf8");try{let u=await dw.default.transform(n,{minify:!0,minifyIdentifiers:!0,minifySyntax:!0,minifyWhitespace:!0,format:"esm",target:"node14",platform:"node",sourcemap:!1,legalComments:"none"});if(u.code){Yi.default.writeFileSync(e,u.code);let r=Buffer.byteLength(u.code,"utf8"),f=((o-r)/o*100).toFixed(1);ms(`\u{1F4E6} Compressed index.mjs: ${(o/1024).toFixed(1)}KB \u2192 ${(r/1024).toFixed(1)}KB (${f}% reduction)`)}}catch(u){ms(`\u26A0\uFE0F esbuild compression failed: ${u.message}`),u.message.includes("EBADF")&&(ms(" \u{1F527} EBADF error detected - this may be a file descriptor issue"),ms(" \u{1F4A1} Attempting to resolve EBADF error..."),await this.handleEBADFError()),ms(" Continuing with uncompressed file...")}}catch(e){ms(`\u26A0\uFE0F Failed to compress index.mjs: ${e.message}`),ms(" Continuing with uncompressed file...")}}async buildCloudFunctions(e){let n="",o="",u=[...this.functionList].sort((S,v)=>!S.isDynamic&&!v.isDynamic?0:S.isDynamic&&v.isDynamic?S.isMultiLevel&&!v.isMultiLevel?1:!S.isMultiLevel&&v.isMultiLevel?-1:0:S.isDynamic?1:-1);for(let[S,v]of u.entries()){let b=`func${S}`;if(!Yi.default.existsSync(v.filePath)){console.warn(`Skipping non-existent file: ${v.filePath}`);continue}let P=_$(v.filePath),F=await L_(v.filePath),{code:W,moduleId:g}=await Lj(P,F,v.filePath,{isFramework:v.isFramework,framework:v.framework});n+=`
1157
1161
  // Function from: ${v.filePath}
1158
- `,n+=W,o+=this.generateRouteMatchingLogic(v,g)}let r=`
1162
+ `,n+=W,o+=this.generateRouteMatchingLogic(v,g,n),n=""}let r=`
1159
1163
  import http from 'http';
1160
1164
  // \u6CE8\u5165\u73AF\u5883\u53D8\u91CF
1161
1165
  const env = ${JSON.stringify(this.env,null,2)};
@@ -1164,7 +1168,24 @@ Object.assign(env, process.env || {});
1164
1168
  delete env.TENCENTCLOUD_UIN;
1165
1169
  delete env.TENCENTCLOUD_APPID;
1166
1170
 
1167
- ${n}
1171
+
1172
+ try {
1173
+
1174
+ // \u79FB\u9664\u5DF2\u6709\u7684\u76D1\u542C\u5668\uFF08\u5982\u679C\u6709\uFF09
1175
+ process.removeAllListeners('uncaughtException');
1176
+ process.removeAllListeners('unhandledRejection');
1177
+
1178
+ process.on('uncaughtException', (error) => {
1179
+ console.error('Uncaught Exception:', error);
1180
+ });
1181
+
1182
+ process.on('unhandledRejection', (reason, promise) => {
1183
+ console.error('Unhandled Rejection:', reason);
1184
+ });
1185
+
1186
+ } catch (error) {
1187
+ console.error('Uncaught Exception:', error);
1188
+ }
1168
1189
 
1169
1190
  const port = ${this.wrapPort};
1170
1191
 
@@ -1186,7 +1207,7 @@ const server = http.createServer(async (req, res) => {
1186
1207
  });
1187
1208
  return result;
1188
1209
  })() : {};
1189
- // \u4FEE\u6539 req.headers \u4E2D\u7684 eo-connecting-geo \u4E3A geo
1210
+ // \u4FEE\u6539 req.headers \u4E2D\u7684 eo-connecting-geo \u4E3A geo
1190
1211
  const newGeo = {
1191
1212
  asn: geo.asn,
1192
1213
  countryName: geo.nation_name,
@@ -1263,10 +1284,16 @@ const server = http.createServer(async (req, res) => {
1263
1284
 
1264
1285
  } catch (error) {
1265
1286
  console.error('server error', error);
1266
- res.writeHead(500);
1287
+ res.writeHead(502, {
1288
+ "Content-Type": "application/json",
1289
+ "Eo-Pages-Inner-Scf-Status": "502",
1290
+ "Functions-Request-Id": req.headers['x-scf-request-id'] || ''
1291
+ });
1267
1292
  res.end(JSON.stringify({
1268
- error: "Internal Server Error",
1269
- message: error.message
1293
+ error: 'Internal Server Error',
1294
+ code: 'FUNCTION_INVOCATION_FAILED',
1295
+ message: error.message,
1296
+ trace: error.stack
1270
1297
  }));
1271
1298
  }
1272
1299
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "edgeone",
3
- "version": "1.1.11",
3
+ "version": "1.1.13",
4
4
  "description": "Command-line interface for TencentCloud Pages Functions",
5
5
  "bin": {
6
6
  "edgeone": "./edgeone-bin/edgeone.js"