serverless-aws-lambda
Version:
AWS Application Load Balancer and API Gateway - Lambda dev tool for Serverless. Allows Express synthax in handlers. Supports packaging, local invoking and offline ALB, APG, S3, SNS, SQS, DynamoDB Stream server mocking.
20 lines (19 loc) • 11.6 kB
JavaScript
;var me=Object.create;var D=Object.defineProperty,ue=Object.defineProperties,pe=Object.getOwnPropertyDescriptor,fe=Object.getOwnPropertyDescriptors,be=Object.getOwnPropertyNames,J=Object.getOwnPropertySymbols,ye=Object.getPrototypeOf,K=Object.prototype.hasOwnProperty,ge=Object.prototype.propertyIsEnumerable;var z=t=>{throw TypeError(t)};var B=(t,o,e)=>o in t?D(t,o,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[o]=e,A=(t,o)=>{for(var e in o||(o={}))K.call(o,e)&&B(t,e,o[e]);if(J)for(var e of J(o))ge.call(o,e)&&B(t,e,o[e]);return t},Y=(t,o)=>ue(t,fe(o));var he=(t,o,e,n)=>{if(o&&typeof o=="object"||typeof o=="function")for(let s of be(o))!K.call(t,s)&&s!==e&&D(t,s,{get:()=>o[s],enumerable:!(n=pe(o,s))||n.enumerable});return t};var we=(t,o,e)=>(e=t!=null?me(ye(t)):{},he(o||!t||!t.__esModule?D(e,"default",{value:t,enumerable:!0}):e,t));var m=(t,o,e)=>B(t,typeof o!="symbol"?o+"":o,e),X=(t,o,e)=>o.has(t)||z("Cannot "+e);var k=(t,o,e)=>(X(t,o,"read from private field"),e?e.call(t):o.get(t)),C=(t,o,e)=>o.has(t)?z("Cannot add the same private member more than once"):o instanceof WeakSet?o.add(t):o.set(t,e),_=(t,o,e,n)=>(X(t,o,"write to private field"),n?n.call(t,e):o.set(t,e),e);var Z=(t,o,e)=>new Promise((n,s)=>{var r=a=>{try{d(e.next(a))}catch(l){s(l)}},c=a=>{try{d(e.throw(a))}catch(l){s(l)}},d=a=>a.done?n(a.value):Promise.resolve(a.value).then(r,c);d((e=e.apply(t,o)).next())});var u=require("worker_threads");var Q=require("stream");var T,L,N,$,R=class extends Q.Writable{constructor(e){super({highWaterMark:e.highWaterMark,write:e.write});C(this,T,!1);C(this,L);C(this,N,new TypeError('Invalid value "undefined" for header "Content-Type"'));m(this,"_onBeforeFirstWrite");C(this,$,e=>(typeof e!="string"&&!Buffer.isBuffer(e)&&(e==null?void 0:e.constructor)!==Uint8Array&&(e=JSON.stringify(e)),e));m(this,"setContentType",e=>{if(!e)throw k(this,N);this.emit("ct",e)});_(this,L,this.write.bind(this)),this.write=(s,r,c)=>{s=k(this,$).call(this,s),!k(this,T)&&typeof this._onBeforeFirstWrite=="function"&&this._onBeforeFirstWrite(a=>k(this,L).call(this,a));let d=k(this,L).call(this,s,r,c);return k(this,T)||_(this,T,!0),d};let n=this.end.bind(this);this.end=(...s)=>{if(s.length){let[r]=s;r&&typeof r!="function"?(this.write(r),n()):n(...s)}else n(...s)}}};T=new WeakMap,L=new WeakMap,N=new WeakMap,$=new WeakMap;var te=require("async_hooks"),U=require("util"),oe=we(require("path"));var ne=process.cwd(),Ee=`${ne}/`,re="/dist/lambda/router.",ee=ne.split(oe.default.sep).filter(Boolean)[0],H=new RegExp(`\\((/${ee}|${ee}).*(\\d+):(\\d+)`),xe=clearTimeout.bind(clearTimeout),{AWS_LAMBDA_FUNCTION_NAME:se}=process.env,ke=t=>{let o=t.match(/{[\w\W]*}/);if(o)return`${t.slice(0,o.index+1)}
\x1B[33m try {\x1B[0m
${t.slice(o.index+1,-1).trim()}
\x1B[33m } catch (error) {\x1B[0m
\x1B[35m // handle the error\x1B[0m
\x1B[33m }\x1B[0m
}`},q=t=>{let o={errorType:"string",errorMessage:"",trace:[]};if(t instanceof Error)o.errorType=t.name,o.errorMessage=t.message,typeof t.stack=="string"&&(o.trace=t.stack.split(`
`));else{o.errorType=typeof t;try{o.errorMessage=t.toString()}catch(e){}}return o},We=t=>{var e;let o="";try{let n=(e=H.exec(t.stack.split("at")[2]))==null?void 0:e[0];typeof n=="string"&&(o=n.slice(1))}catch(n){}return o},ie=()=>{let t={assert:console.assert.bind(console.assert),clear:console.clear.bind(console.clear),count:console.count.bind(console.count),countReset:console.countReset.bind(console.countReset),debug:console.debug.bind(console.debug),dir:console.dir.bind(console.dir),dirxml:console.dirxml.bind(console.dirxml),error:console.error.bind(console.error),group:console.group.bind(console.group),groupCollapsed:console.groupCollapsed.bind(console.groupCollapsed),groupEnd:console.groupEnd.bind(console.groupEnd),info:console.info.bind(console.info),log:console.log.bind(console.log),table:console.table.bind(console.table),time:console.time.bind(console.time),timeEnd:console.timeEnd.bind(console.timeEnd),timeLog:console.timeLog.bind(console.timeLog),timeStamp:console.timeStamp.bind(console.timeStamp),trace:console.trace.bind(console.trace),warn:console.warn.bind(console.warn)};console=new Proxy(console,{get(o,e){return typeof o[e]=="function"?(...n)=>{let s={};Error.captureStackTrace(s);let r=We(s);process.stdout.write(`\x1B[90m${new Date().toISOString()} ${e.toUpperCase()} ${se} ${r==null?void 0:r.replace(Ee,"")}\x1B[0m
`),e=="log"?t.log(...n.map(c=>(0,U.inspect)(c,{colors:!0}))):t[e](...n)}:t[e]}})},ae=t=>{let o="",e=0;return t.slice().reverse().filter(n=>n&&!n.includes(__dirname)&&!n.includes(re)).forEach(n=>{var r;let s=(r=H.exec(n))==null?void 0:r[0];s&&(o+=`${s}
`.slice(1),e++,o+=" ".repeat(e))}),o},f=class f extends Map{constructor(e){super();m(this,"onEmpty");m(this,"requestId");m(this,"callbackWaitsForEmptyEventLoop",!0);m(this,"async",!1);m(this,"hook");m(this,"storeContextTimers",()=>{[...this.entries()].forEach(([e,n])=>{if(n.type!="Timeout")return;let{_idleTimeout:s,_idleStart:r,_onTimeout:c,_repeat:d,_destroyed:a}=n.resource,l=s-r;!a&&(l>-1||d)&&f.context[this.requestId].timers.set(e,{timerValue:l,_onTimeout:c,interval:d}),clearTimeout(n.resource)})});m(this,"isEmpty",()=>!([...this.values()].filter(n=>!(typeof n.resource.hasRef=="function"&&!n.resource.hasRef())).length>0));m(this,"add",(e,n,s,r)=>{let c={};Error.captureStackTrace(c);let d=c.stack.split(`
`).slice(7);if(n=="PROMISE"&&f.context[this.requestId].promises.set(e,{stack:d,start:Date.now()}),f.IGNORE.includes(n))return this;if(n=="Timeout"){let a=r._repeat?"setInterval":"setTimeout",l=r._onTimeout.toString(),F=r._onTimeout.bind(r._onTimeout);r._onTimeout=()=>{try{F()}catch(h){let O=q(h),E=ke(l);f.parentPort.postMessage({channel:"uncaught",type:a,data:{error:O,solution:E}})}}}return this.set(e,{resource:r,triggerAsyncId:s,type:n,stack:d})});m(this,"destroy",e=>{this.delete(e)&&this.isEmpty()&&this.onEmpty&&this.onEmpty()});m(this,"resolve",e=>{let n=f.context[this.requestId];if(n){let s=n.promises.get(e);s!=null&&s.start&&(s.took=(Date.now()-s.start)/1e3)}});m(this,"enable",()=>{f.restoreContext();let e=this,n=function(r){xe(r),e.destroy(Number(r))};global.clearTimeout=n,global.clearInterval=n,this.hook=(0,te.createHook)({init:this.add,destroy:this.destroy,promiseResolve:this.resolve}).enable()});m(this,"disable",()=>{var e;(e=this.hook)==null||e.disable(),delete this.hook});this.requestId=e,f.context[e]={timers:new Map,promises:new Map}}};m(f,"IGNORE",["PROMISE","RANDOMBYTESREQUEST","PerformanceObserver","TIMERWRAP"]),m(f,"context",{}),m(f,"parentPort"),m(f,"logTimeoutPossibleCause",e=>{let n=f.context[e];if(!n.timeout)return;let s=[...n.promises.values()].reduce((r,c)=>(c.took&&(c.stack=c.stack.reverse().map(d=>{var l;let a=(l=H.exec(d))==null?void 0:l[0];if(a)return a.slice(1)}).filter(d=>d&&!d.includes(__dirname)&&!d.includes(re)),c.stack.length&&(delete c.start,r.push(c))),r),[]);if(s=s.filter((r,c)=>{if(r.took>.01)return!r.stack.every(d=>s.find((a,l)=>c!=l&&(a.took>r.took||r.stack.length<a.stack.length)&&a.stack.includes(d)))}),s.length){let r=(0,U.inspect)(s,{colors:!0});process.stdout.write(`'${se}' Timeout possible cause:
${r}
`)}}),m(f,"restoreContext",()=>{Object.values(f.context).forEach(({timers:e})=>{let n=[...e.entries()];n.length&&process.stdout.write(`\x1B[31mWarning! Restoring context from previous invokation...
This may lead to data leak.\x1B[0m
`),n.forEach(([s,r])=>{r.interval?setInterval(r._onTimeout,r.interval):setTimeout(r._onTimeout,r.timerValue),e.delete(s)})})});var W=f;var V=require("util");var w={RED:t=>{},BLUE:t=>{},PINK:t=>{}},v,ve=new Error("Invalid response payload");u.workerData.debug&&(w.RED=t=>{process.stdout.write(`\x1B[31m${t}\x1B[0m
`)},w.BLUE=t=>{process.stdout.write(`\x1B[34m${t}\x1B[0m
`)},w.PINK=t=>{process.stdout.write(`\x1B[95m${t}\x1B[0m
`)},ie());W.parentPort=u.parentPort;var x=(t,o)=>{let e=q(o);u.parentPort.postMessage({channel:"fail",data:e,awsRequestId:t})},P=(t,o,e)=>{try{JSON.stringify(e),u.parentPort.postMessage({channel:t,data:e,awsRequestId:o})}catch(n){x(o,ve)}};process.exit=t=>{process.stdout.write(`\x1B[31musage of process.exit() will throw Runtime error in AWS Lambda\x1B[0m
`)};process.on("unhandledRejection",t=>{process.stdout.write((0,V.inspect)(t))});process.on("uncaughtException",t=>{process.stdout.write((0,V.inspect)(t))});var Te=t=>Z(exports,null,function*(){var s,r,c,d,a;let{channel:o,data:e,awsRequestId:n}=t;if(o=="import"){let l=yield import(`file://${u.workerData.esOutputPath}?version=${Date.now()}`);if(u.workerData.handlerName=="default"&&typeof l.default=="object"&&typeof l.default.default=="function"?v=l.default.default:v=l[u.workerData.handlerName],typeof v!="function")throw new Error(`${u.workerData.name} > ${u.workerData.handlerName} is not a function`);u.parentPort.postMessage({channel:"import"})}else if(o=="complete"){let l=W.context[n];typeof t.timeout=="boolean"&&(l.timeout=!0)}else if(o=="exec"){let{event:l,clientContext:F}=e,h=!1,O=u.workerData.timeout*1e3,E,y=()=>{h=!0},le=Date.now(),ce=()=>Math.max(O-(Date.now()-le),0),p=new W(n),j={functionVersion:"$LATEST",functionName:u.workerData.name,memoryLimitInMB:u.workerData.memorySize,logGroupName:`/aws/lambda/${u.workerData.name}`,logStreamName:`${new Date().toLocaleDateString()}[$LATEST]${n.replace(/-/g,"")}`,clientContext:F,identity:void 0,invokedFunctionArn:`arn:aws:lambda:eu-west-1:00000000000:function:${u.workerData.name}`,awsRequestId:n,getRemainingTimeInMillis:ce};if(typeof v.stream=="boolean"){let M=(i,b,I)=>{u.parentPort.postMessage({channel:"stream",data:i,awsRequestId:n,type:"write",encoding:b}),I()};E=new R({highWaterMark:(s=v.streamOpt)==null?void 0:s.highWaterMark,write:M}),E.on("close",()=>{h||(y(),u.parentPort.postMessage({channel:"stream",awsRequestId:n,type:"end"}))}),E.on("error",i=>{h||(y(),w.RED(i),x(n,i))}),E.on("ct",i=>u.parentPort.postMessage({channel:"stream",data:i,awsRequestId:n,type:"ct"}));let g=A({get callbackWaitsForEmptyEventLoop(){return p.callbackWaitsForEmptyEventLoop},set callbackWaitsForEmptyEventLoop(i){p.callbackWaitsForEmptyEventLoop=i}},j),S=(c=(r=v(l,E,g))==null?void 0:r.catch)==null?void 0:c.call(r,i=>{E.destroy(),y(),w.RED(i),x(n,i)});typeof(S==null?void 0:S.then)!="function"&&(y(),E.destroy(),x(n,new Error("Streaming does not support non-async handlers.")))}else{let M=Y(A({get callbackWaitsForEmptyEventLoop(){return p.callbackWaitsForEmptyEventLoop},set callbackWaitsForEmptyEventLoop(i){p.callbackWaitsForEmptyEventLoop=i}},j),{succeed:i=>{h||(y(),P("succeed",n,i))},fail:i=>{h||(y(),x(n,i))},done:function(i,b){h||(y(),i?x(n,i):P("done",n,b))}}),g,S=(i,b)=>{g?w.RED("Invocation has already been reported as done. Cannot call complete more than once per invocation."):g={error:i,res:b}};try{p.enable();let i=v(l,M,S);if((a=(d=i==null?void 0:i.then)==null?void 0:d.call(i,b=>{p.storeContextTimers(),W.logTimeoutPossibleCause(n),!(g||h)&&(y(),P("return",n,b),p.disable())}))==null||a.catch(b=>{y(),x(n,b),p.disable()}),p.async=typeof(i==null?void 0:i.then)=="function",!p.async&&i&&w.RED("Synchronous handler 'return' value is ignored. Consider marking your handler as 'async' or use callback(error, returnValue)"),!h&&(!p.async||g)){let b=()=>{p.storeContextTimers(),p.disable(),g?M.done(g.error,g.res):(y(),P("return",n,null))};if(p.isEmpty())b();else if(!g||p.callbackWaitsForEmptyEventLoop){if(g&&p.callbackWaitsForEmptyEventLoop){w.BLUE("callbackWaitsForEmptyEventLoop...");let I=[...p.values()],de=I[I.length-1],G=ae(de.stack);G&&(w.RED("Blocked by:"),w.PINK(G))}p.onEmpty=()=>{b()}}else b()}}catch(i){y(),x(n,i),p.disable()}}}});u.parentPort.on("message",Te);