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.
- package/edgeone-dist/cli.js +306 -279
- package/edgeone-dist/pages/dev/runner-worker.js +35 -8
- package/package.json +1 -1
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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:
|
|
1269
|
-
|
|
1293
|
+
error: 'Internal Server Error',
|
|
1294
|
+
code: 'FUNCTION_INVOCATION_FAILED',
|
|
1295
|
+
message: error.message,
|
|
1296
|
+
trace: error.stack
|
|
1270
1297
|
}));
|
|
1271
1298
|
}
|
|
1272
1299
|
});
|