exlo 0.0.24 → 0.0.25

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.
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{readFile as I}from"node:fs/promises";import p from"node:path";import{pathToFileURL as O}from"node:url";import{parseArgs as Y}from"node:util";var j="exlo",b="0.0.24";var g=!1,R=e=>{g=e},A=()=>g,l=(e,t)=>{g&&console.log(`\x1B[${e}m${t}\x1B[0m`)},$=e=>console.log(`\x1B[31m${e}\x1B[0m`),C=e=>l("32",e),q=e=>l("33",e),L=e=>l("36",e),S=e=>l("90",e),F=e=>l("94",e),_=e=>l("95",e),D=e=>g?console.log(e):void 0,n={GREEN:C,YELLOW:q,CYAN:L,BR_BLUE:F,RED:$,GREY:S,PINK:_,setDebug:R,getDebug:A,info:D};var y={config:{type:"string",short:"c",default:"exlo.config.ts",description:"Path to exlo 'defineConfig' file."},debug:{type:"boolean",default:!1,description:"Enable debug mode. When enabled exlo will print usefull informations."},create:{type:"boolean",default:!1,description:"Create exlo 'defineConfig' file based on passed options."},runtime:{type:"string",short:"r",description:"Lambda default runtime (ex: nodejs22.x, python3.7, ruby2.7 etc.)."},timeout:{type:"string",short:"t",default:"3",description:"Lambda default timeout."},port:{type:"string",short:"p",default:"0",description:"Lambda server port."},definitions:{type:"string",short:"d",description:"Path to .json, .mjs, .cjs file with Lambda function definitions."},functions:{type:"string",short:"f",multiple:!0,description:"Glob pattern to automatically find and define Lambda handlers."},exclude:{type:"string",short:"X",multiple:!0,default:[".(test|spec)."],description:"RegExp string to exclude found enteries from --functions."},"handler-name":{type:"string",default:"handler",description:"Handler function name. To be used with --functions."},env:{type:"string",short:"e",multiple:!0,default:[],description:"Environment variables to be injected into Lambdas. All existing AWS_* are automatically injected.",example:"-e API_KEY=supersecret -e API_URL=https://website.com"},"optimize-build":{type:"boolean",default:!1,description:"externalize dependencies and other stuff"},"shim-require":{type:"boolean",default:!1,description:"shim 'require()', '__dirname' and '__filename' when bundeling Lambdas with ESM format"},help:{type:"boolean",short:"h",skipFullPrint:!0},version:{type:"boolean",short:"v",skipFullPrint:!0},"esbuild-external":{type:"string",multiple:!0,skip:!0},"esbuild-resolveExtensions":{type:"string",multiple:!0,skip:!0},"esbuild-mainFields":{type:"string",multiple:!0,skip:!0},"esbuild-conditions":{type:"string",multiple:!0,skip:!0},"esbuild-entryPoints":{type:"string",multiple:!0,skip:!0},"esbuild-inject":{type:"string",multiple:!0,skip:!0},"esbuild-nodePaths":{type:"string",multiple:!0,skip:!0}};function M(){n.setDebug(!0),n.GREY("Usage examples:"),console.log("exlo -c exlo.config.ts"),console.log(`exlo -p 3000 --debug --functions "src/lambdas/**/*.ts"
2
+ import{readFile as I}from"node:fs/promises";import p from"node:path";import{pathToFileURL as O}from"node:url";import{parseArgs as Y}from"node:util";var j="exlo",b="0.0.25";var g=!1,R=e=>{g=e},A=()=>g,l=(e,t)=>{g&&console.log(`\x1B[${e}m${t}\x1B[0m`)},$=e=>console.log(`\x1B[31m${e}\x1B[0m`),C=e=>l("32",e),q=e=>l("33",e),L=e=>l("36",e),S=e=>l("90",e),F=e=>l("94",e),_=e=>l("95",e),D=e=>g?console.log(e):void 0,n={GREEN:C,YELLOW:q,CYAN:L,BR_BLUE:F,RED:$,GREY:S,PINK:_,setDebug:R,getDebug:A,info:D};var y={config:{type:"string",short:"c",default:"exlo.config.ts",description:"Path to exlo 'defineConfig' file."},debug:{type:"boolean",default:!1,description:"Enable debug mode. When enabled exlo will print usefull informations."},create:{type:"boolean",default:!1,description:"Create exlo 'defineConfig' file based on passed options."},runtime:{type:"string",short:"r",description:"Lambda default runtime (ex: nodejs22.x, python3.7, ruby2.7 etc.)."},timeout:{type:"string",short:"t",default:"3",description:"Lambda default timeout."},port:{type:"string",short:"p",default:"0",description:"Lambda server port."},definitions:{type:"string",short:"d",description:"Path to .json, .mjs, .cjs file with Lambda function definitions."},functions:{type:"string",short:"f",multiple:!0,description:"Glob pattern to automatically find and define Lambda handlers."},exclude:{type:"string",short:"X",multiple:!0,default:[".(test|spec)."],description:"RegExp string to exclude found enteries from --functions."},"handler-name":{type:"string",default:"handler",description:"Handler function name. To be used with --functions."},env:{type:"string",short:"e",multiple:!0,default:[],description:"Environment variables to be injected into Lambdas. All existing AWS_* are automatically injected.",example:"-e API_KEY=supersecret -e API_URL=https://website.com"},"optimize-build":{type:"boolean",default:!1,description:"externalize dependencies and other stuff"},"shim-require":{type:"boolean",default:!1,description:"shim 'require()', '__dirname' and '__filename' when bundeling Lambdas with ESM format"},help:{type:"boolean",short:"h",skipFullPrint:!0},version:{type:"boolean",short:"v",skipFullPrint:!0},"esbuild-external":{type:"string",multiple:!0,skip:!0},"esbuild-resolveExtensions":{type:"string",multiple:!0,skip:!0},"esbuild-mainFields":{type:"string",multiple:!0,skip:!0},"esbuild-conditions":{type:"string",multiple:!0,skip:!0},"esbuild-entryPoints":{type:"string",multiple:!0,skip:!0},"esbuild-inject":{type:"string",multiple:!0,skip:!0},"esbuild-nodePaths":{type:"string",multiple:!0,skip:!0}};function M(){n.setDebug(!0),n.GREY("Usage examples:"),console.log("exlo -c exlo.config.ts"),console.log(`exlo -p 3000 --debug --functions "src/lambdas/**/*.ts"
3
3
  `),n.BR_BLUE("Options:");for(let[e,t]of Object.entries(y)){let i=e;if(t.skip)continue;if(t.short&&(i+=`, -${t.short}`),t.skipFullPrint){n.CYAN(` --${i}
4
4
  `);continue}let s=` type: ${t.type}`;t.description&&(s+=`
5
5
  description: ${t.description}`),"default"in t&&(s+=`
@@ -1 +1 @@
1
- var h="0.0.24";function k(e){let c=new Set;e.plugins&&(e.plugins=e.plugins.filter((i,a)=>typeof i!="object"||!i||!("name"in i)?!1:((!i.name||!i.name.length||typeof i.name!="string")&&(i.name=`plugin-${a}`,console.warn(`No Plugin name provided at index ${a}`)),c.has(i.name)?i.name=i.name+a:c.add(i.name),!0)));async function f({stop:i,lambdas:a,region:p,esbuild:y,getServices:v,setService:d,addLambda:g,log:l,setEndpoint:b,getEndpoint:x,getAwsProviderDefaults:C,setAwsProviderDefaults:S}){let r={build:{esbuild:e?.build?.esbuild??{},shimRequire:e?.build?.shimRequire,optimizeBuild:e?.build?.optimizeBuild},server:{port:e.server?.port,setEndpointEnvVar:e.server?.setEndpointEnvVar},onKill:[],llrt:e.llrt};if(e.defaults&&typeof e.defaults=="object"&&!Array.isArray(e.defaults)&&S(e.defaults),e.functions&&typeof e.functions=="object"&&!Array.isArray(e.functions))for(let[m,s]of Object.entries(e.functions))g(m,s);e.services&&(e.services.sqs&&d("sqs",e.services.sqs),e.services.sns&&d("sns",e.services.sns),e.services.dynamodb&&d("dynamodb",e.services.dynamodb));let o={stop:i,lambdas:a,region:p,esbuild:y,options:e,config:r,getServices:v,setService:d,addLambda:g,log:l,setEndpoint:b,getEndpoint:x,getAwsProviderDefaults:C};if(e.plugins){r.server.onReady=async(s,n)=>{for(let t of e.plugins)if(t.server?.onReady)try{await t.server.onReady.call(o,s,n)}catch(u){l.RED(t.name),console.error(u)}},r.buildCallback=async(s,n)=>{for(let t of e.plugins)if(t.buildCallback)try{await t.buildCallback.call(o,s,n)}catch(u){l.RED(t.name),console.error(u),n||process.exit(1)}};let m=e.plugins.reduce((s,n)=>(n.server?.request?.length&&s.push(...n.server.request),s),[]);m?.length&&(r.server.request=m.map(s=>(s.callback=s.callback.bind(o),s)));for(let s of e.plugins)if(s.onKill&&r.onKill.push(s.onKill.bind(o)),s.onInit)try{await s.onInit.call(o)}catch(n){throw l.RED(s.name),n}}return r}return f.plugins=e.plugins??[],f}export{k as defineConfig,h as exloVersion};
1
+ var h="0.0.25";function k(e){let c=new Set;e.plugins&&(e.plugins=e.plugins.filter((i,a)=>typeof i!="object"||!i||!("name"in i)?!1:((!i.name||!i.name.length||typeof i.name!="string")&&(i.name=`plugin-${a}`,console.warn(`No Plugin name provided at index ${a}`)),c.has(i.name)?i.name=i.name+a:c.add(i.name),!0)));async function f({stop:i,lambdas:a,region:p,esbuild:y,getServices:v,setService:d,addLambda:g,log:l,setEndpoint:b,getEndpoint:x,getAwsProviderDefaults:C,setAwsProviderDefaults:S}){let r={build:{esbuild:e?.build?.esbuild??{},shimRequire:e?.build?.shimRequire,optimizeBuild:e?.build?.optimizeBuild},server:{port:e.server?.port,setEndpointEnvVar:e.server?.setEndpointEnvVar},onKill:[],llrt:e.llrt};if(e.defaults&&typeof e.defaults=="object"&&!Array.isArray(e.defaults)&&S(e.defaults),e.functions&&typeof e.functions=="object"&&!Array.isArray(e.functions))for(let[m,s]of Object.entries(e.functions))g(m,s);e.services&&(e.services.sqs&&d("sqs",e.services.sqs),e.services.sns&&d("sns",e.services.sns),e.services.dynamodb&&d("dynamodb",e.services.dynamodb));let o={stop:i,lambdas:a,region:p,esbuild:y,options:e,config:r,getServices:v,setService:d,addLambda:g,log:l,setEndpoint:b,getEndpoint:x,getAwsProviderDefaults:C};if(e.plugins){r.server.onReady=async(s,n)=>{for(let t of e.plugins)if(t.server?.onReady)try{await t.server.onReady.call(o,s,n)}catch(u){l.RED(t.name),console.error(u)}},r.buildCallback=async(s,n)=>{for(let t of e.plugins)if(t.buildCallback)try{await t.buildCallback.call(o,s,n)}catch(u){l.RED(t.name),console.error(u),n||process.exit(1)}};let m=e.plugins.reduce((s,n)=>(n.server?.request?.length&&s.push(...n.server.request),s),[]);m?.length&&(r.server.request=m.map(s=>(s.callback=s.callback.bind(o),s)));for(let s of e.plugins)if(s.onKill&&r.onKill.push(s.onKill.bind(o)),s.onInit)try{await s.onInit.call(o)}catch(n){throw l.RED(s.name),n}}return r}return f.plugins=e.plugins??[],f}export{k as defineConfig,h as exloVersion};
@@ -94,4 +94,4 @@ export declare class LambdaMock implements ILambdaMock {
94
94
  clear: () => void;
95
95
  shutdown(): Promise<void>;
96
96
  }
97
- export type { ISqs, IDdbEvent, IDestination, LambdaEndpoint };
97
+ export type { IDdbEvent, IDestination, ISqs, LambdaEndpoint };
@@ -27,6 +27,7 @@ export declare class CustomRunner implements Runner {
27
27
  invocations: {
28
28
  id: string;
29
29
  event: any;
30
+ clientContext?: string;
30
31
  inFlight: boolean;
31
32
  resolve: (value: unknown) => void;
32
33
  reject: (reason?: any) => void;
@@ -35,6 +36,7 @@ export declare class CustomRunner implements Runner {
35
36
  getWaitingInvocation(): {
36
37
  id: string;
37
38
  event: any;
39
+ clientContext?: string;
38
40
  inFlight: boolean;
39
41
  resolve: (value: unknown) => void;
40
42
  reject: (reason?: any) => void;
@@ -1,13 +1,13 @@
1
- "use strict";var Wt=Object.create;var z=Object.defineProperty;var $t=Object.getOwnPropertyDescriptor;var Ut=Object.getOwnPropertyNames;var zt=Object.getPrototypeOf,Vt=Object.prototype.hasOwnProperty;var Bt=(t,e)=>{for(var n in e)z(t,n,{get:e[n],enumerable:!0})},Pe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Ut(e))!Vt.call(t,s)&&s!==n&&z(t,s,{get:()=>e[s],enumerable:!(r=$t(e,s))||r.enumerable});return t};var A=(t,e,n)=>(n=t!=null?Wt(zt(t)):{},Pe(e||!t||!t.__esModule?z(n,"default",{value:t,enumerable:!0}):n,t)),Jt=t=>Pe(z({},"__esModule",{value:!0}),t);var Qn={};Bt(Qn,{createAppRunner:()=>_t,exloVersion:()=>St,run:()=>Jn});module.exports=Jt(Qn);var L=A(require("node:path")),Ie=A(require("esbuild")),Ht=require("exlo/internal/esm");var fe=A(require("node:path")),ke=require("node:module"),Qt={},W=require,V={};function j(t){if(V[t])return V[t];if(typeof W=="function"&&typeof W.resolve=="function"){let n=fe.default.resolve(W.resolve(t),"../../");return V[t]=n,n}W=(0,ke.createRequire)(new URL(".",Qt.url));let e=fe.default.resolve(W.resolve(t),"../../");return V[t]=e,e}var Le=["aws-sdk","@aws-sdk/*","@angular/core","@angular/platform-browser","@aws-sdk/*","@elastic/elasticsearch","@hapi/joi","@opensearch-project/opensearch","@smithy/*","axios","axios-retry","axios-cache-interceptor","aws-serverless-express","aws-sdk","body-parser","classnames","clsx","cookie-parser","cors","core-js","date-fns","dayjs","express","helmet","joi","koa","leaflet","lodash","mysql","mysql2","mongodb","mongoose","moment","http-proxy","http-proxy-middleware","react","react/*","react-dom","react-dom/*","react-hook-form","react-infinite-scroll-component","react-modal","react-rangeslider","react-responsive","react-select","react-scroll","react-slick","react-lazy-load","react-lazyload","react-redux","react-router","react-router-dom","redux","redux-persist","regenerator-runtime","serve-static","express-session","exlo/*","serverless-http","sequelize","svelte","svelte/*","typeorm","pg","pg-hstore","prop-types","underscore","uuid","vue","xmlbuilder","yup","zod","sharp"];var Kt=t=>`import { createRequire as __crE_ } from "${t}module";import { fileURLToPath as __futP_ } from "${t}url";import { dirname as __dN_ } from "${t}path";global.__filename = __futP_(import.meta.url);global.__dirname = __dN_(__filename);global.require = __crE_(__filename);
2
- `,Oe=({nodeVersion:t,shimRequire:e,optimizeBuild:n,buildCallback:r,getSockets:s})=>({name:"build-optimizer-plugin",setup(i){let o=!1;if(i.onEnd(async a=>{if(!o&&a?.errors?.length&&process.exit(1),o)for(let c of s())c.writable&&c.destroy();try{await r(a,o,i.initialOptions.format,i.initialOptions.outdir)}catch(c){console.log(c)}o=!0}),n&&(i.initialOptions.external.push(...Le),i.initialOptions.format=="esm"&&(i.initialOptions.mainFields?i.initialOptions.mainFields.includes("module")||(i.initialOptions.mainFields.includes("main")?i.initialOptions.mainFields.unshift("module"):i.initialOptions.mainFields.unshift("module","main")):i.initialOptions.mainFields=["module","main"])),i.initialOptions.format=="esm"&&e){let a=Kt(t<18?"":"node:");i.initialOptions.banner?i.initialOptions.banner.js?i.initialOptions.banner.js=`${a}${i.initialOptions.banner.js}`:i.initialOptions.banner.js=a:i.initialOptions.banner={js:a}}}});var Ne=(t,e)=>(Array.isArray(e.plugins)&&t.plugins.unshift(...e.plugins),Array.isArray(e.external)&&t.external.push(...e.external),Array.isArray(e.entryPoints)&&t.entryPoints.push(...e.entryPoints),"sourcemap"in e&&(t.sourcemap=e.sourcemap),typeof e.sourceRoot=="string"&&(t.sourceRoot=e.sourceRoot),typeof e.format=="string"&&(t.format=e.format),e.outExtension&&typeof e.outExtension=="object"&&!Array.isArray(e.outExtension)&&(t.outExtension=e.outExtension),"sourcesContent"in e&&(t.sourcesContent=e.sourcesContent),typeof e.minify=="boolean"&&(t.minify=e.minify),typeof e.minifyWhitespace=="boolean"&&(t.minifyWhitespace=e.minifyWhitespace),typeof e.minifyIdentifiers=="boolean"&&(t.minifyIdentifiers=e.minifyIdentifiers),typeof e.minifySyntax=="boolean"&&(t.minifySyntax=e.minifySyntax),typeof e.jsx=="string"&&(t.jsx=e.jsx),typeof e.jsxFactory=="string"&&(t.jsxFactory=e.jsxFactory),typeof e.jsxFragment=="string"&&(t.jsxFragment=e.jsxFragment),typeof e.jsxImportSource=="string"&&(t.jsxImportSource=e.jsxImportSource),"jsxDev"in e&&(t.jsxDev=e.jsxDev),"jsxSideEffects"in e&&(t.jsxSideEffects=e.jsxSideEffects),typeof e.outdir=="string"&&(t.outdir=e.outdir),typeof e.outbase=="string"&&(t.outbase=e.outbase),(typeof e.target=="string"||Array.isArray(e.target))&&(t.target=e.target),typeof e.tsconfig=="string"&&(t.tsconfig=e.tsconfig),e.tsconfigRaw&&["string","object"].includes(typeof e.tsconfigRaw)&&(t.tsconfigRaw=e.tsconfigRaw),typeof e.legalComments=="string"&&(t.legalComments=e.legalComments),Array.isArray(e.pure)&&(t.pure=e.pure),Array.isArray(e.drop)&&(t.drop=e.drop),Array.isArray(e.dropLabels)&&t.dropLabels.push(...e.dropLabels),Array.isArray(e.resolveExtensions)&&(t.resolveExtensions=e.resolveExtensions),Array.isArray(e.mainFields)&&(t.mainFields=e.mainFields),Array.isArray(e.nodePaths)&&(t.nodePaths=e.nodePaths),typeof e.ignoreAnnotations=="boolean"&&(t.ignoreAnnotations=e.ignoreAnnotations),typeof e.treeShaking=="boolean"&&(t.treeShaking=e.treeShaking),e.define&&typeof e.define=="object"&&(t.define?t.define={...t.define,...e.define}:t.define=e.define),e.banner&&typeof e.banner=="object"&&(t.banner=e.banner),e.footer&&typeof e.footer=="object"&&(t.footer=e.footer),e.loader&&typeof e.loader=="object"&&(t.loader=e.loader),e.alias&&typeof e.alias=="object"&&(t.alias=e.alias),typeof e.assetNames=="string"&&(t.assetNames=e.assetNames),typeof e.entryNames=="string"&&(t.entryNames=e.entryNames),typeof e.publicPath=="string"&&(t.publicPath=e.publicPath),Array.isArray(e.inject)&&(t.inject=e.inject),typeof e.splitting=="boolean"&&(t.splitting=e.splitting),typeof e.preserveSymlinks=="boolean"&&(t.preserveSymlinks=e.preserveSymlinks),typeof e.keepNames=="boolean"&&(t.keepNames=e.keepNames),e.supported&&typeof e.supported=="object"&&(t.supported=e.supported),Array.isArray(e.conditions)&&(t.conditions=e.conditions),typeof e.absWorkingDir=="string"&&(t.absWorkingDir=e.absWorkingDir),e.mangleProps instanceof RegExp&&(t.mangleProps=e.mangleProps),e.reserveProps instanceof RegExp&&(t.reserveProps=e.reserveProps),typeof e.mangleQuoted=="boolean"&&(t.mangleQuoted=e.mangleQuoted),e.mangleCache&&typeof e.mangleCache=="object"&&(t.mangleCache=e.mangleCache),typeof e.packages=="string"&&(t.packages=e.packages),typeof e.logLevel=="string"&&(t.logLevel=e.logLevel),typeof e.logLimit=="number"&&(t.logLimit=e.logLimit),e.logOverride&&typeof e.logOverride=="object"&&(t.logOverride?t.logOverride={...t.logOverride,...e.logOverride}:t.logOverride=e.logOverride),t);var De=t=>{let e={};return Array.isArray(t.plugins)&&(e.plugins=t.plugins),Array.isArray(t.external)&&(e.external=t.external),"sourcemap"in t&&(e.sourcemap=t.sourcemap),typeof t.sourceRoot=="string"&&(e.sourceRoot=t.sourceRoot),typeof t.format=="string"&&(e.format=t.format),t.outExtension&&typeof t.outExtension=="object"&&!Array.isArray(t.outExtension)&&(e.outExtension=t.outExtension),"sourcesContent"in t&&(e.sourcesContent=t.sourcesContent),typeof t.minify=="boolean"&&(e.minify=t.minify),typeof t.minifyWhitespace=="boolean"&&(e.minifyWhitespace=t.minifyWhitespace),typeof t.minifyIdentifiers=="boolean"&&(e.minifyIdentifiers=t.minifyIdentifiers),typeof t.minifySyntax=="boolean"&&(e.minifySyntax=t.minifySyntax),typeof t.jsx=="string"&&(e.jsx=t.jsx),typeof t.jsxFactory=="string"&&(e.jsxFactory=t.jsxFactory),typeof t.jsxFragment=="string"&&(e.jsxFragment=t.jsxFragment),typeof t.jsxImportSource=="string"&&(e.jsxImportSource=t.jsxImportSource),"jsxDev"in t&&(e.jsxDev=t.jsxDev),"jsxSideEffects"in t&&(e.jsxSideEffects=t.jsxSideEffects),typeof t.outdir=="string"&&(e.outdir=t.outdir),typeof t.outbase=="string"&&(e.outbase=t.outbase),(typeof t.target=="string"||Array.isArray(t.target))&&(e.target=t.target),typeof t.tsconfig=="string"&&(e.tsconfig=t.tsconfig),t.tsconfigRaw&&["string","object"].includes(typeof t.tsconfigRaw)&&(e.tsconfigRaw=t.tsconfigRaw),typeof t.legalComments=="string"&&(e.legalComments=t.legalComments),Array.isArray(t.pure)&&(e.pure=t.pure),Array.isArray(t.drop)&&(e.drop=t.drop),Array.isArray(t.dropLabels)&&(e.dropLabels=t.dropLabels),Array.isArray(t.resolveExtensions)&&(e.resolveExtensions=t.resolveExtensions),Array.isArray(t.mainFields)&&(e.mainFields=t.mainFields),Array.isArray(t.nodePaths)&&(e.nodePaths=t.nodePaths),typeof t.ignoreAnnotations=="boolean"&&(e.ignoreAnnotations=t.ignoreAnnotations),typeof t.treeShaking=="boolean"&&(e.treeShaking=t.treeShaking),t.define&&typeof t.define=="object"&&(e.define=t.define),t.banner&&typeof t.banner=="object"&&(e.banner=t.banner),t.footer&&typeof t.footer=="object"&&(e.footer=t.footer),t.loader&&typeof t.loader=="object"&&(e.loader=t.loader),t.alias&&typeof t.alias=="object"&&(e.alias=t.alias),typeof t.assetNames=="string"&&(e.assetNames=t.assetNames),typeof t.entryNames=="string"&&(e.entryNames=t.entryNames),typeof t.publicPath=="string"&&(e.publicPath=t.publicPath),typeof t.splitting=="boolean"&&(e.splitting=t.splitting),typeof t.preserveSymlinks=="boolean"&&(e.preserveSymlinks=t.preserveSymlinks),Array.isArray(t.inject)&&(e.inject=t.inject),typeof t.keepNames=="boolean"&&(e.keepNames=t.keepNames),t.supported&&typeof t.supported=="object"&&(e.supported=t.supported),Array.isArray(t.entryPoints)&&(e.entryPoints=t.entryPoints),Array.isArray(t.conditions)&&(e.conditions=t.conditions),typeof t.absWorkingDir=="string"&&(e.absWorkingDir=t.absWorkingDir),t.mangleProps instanceof RegExp&&(e.mangleProps=t.mangleProps),t.reserveProps instanceof RegExp&&(e.reserveProps=t.reserveProps),typeof t.mangleQuoted=="boolean"&&(e.mangleQuoted=t.mangleQuoted),t.mangleCache&&typeof t.mangleCache=="object"&&(e.mangleCache=t.mangleCache),typeof t.packages=="string"&&(e.packages=t.packages),t.logOverride&&typeof t.logOverride=="object"&&(e.logOverride=t.logOverride),typeof t.logLevel=="string"&&(e.logLevel=t.logLevel),typeof t.logLimit=="number"&&(e.logLimit=t.logLimit),e};var Te=t=>{if(!t.url)return;let e=t.url.cors;return{kind:"url",proxy:"url",version:2,methods:["ANY"],paths:["/*"],pathsRegex:[],stream:typeof t.url=="object"&&t.url.invokeMode=="RESPONSE_STREAM",cors:e}};var Gt=t=>{if(typeof t=="string"){let e=t.split(":")?.[2],n=t.split("/")?.[1];if(e==="dynamodb"&&n)return n}},Me=t=>{let e={},n=Gt(t.arn);if(n&&(e.TableName=n),!!e.TableName){if(typeof t.batchSize=="number"&&t.batchSize>0&&t.batchSize<=1e4?e.batchSize=t.batchSize:e.batchSize=100,typeof t.enabled=="boolean"?e.enabled=t.enabled:e.enabled=!0,t.startingPosition&&(e.startingPosition=t.startingPosition),typeof t.maximumBatchingWindow=="number"&&t.maximumBatchingWindow>0&&t.maximumBatchingWindow<=300&&(e.maximumBatchingWindow=t.maximumBatchingWindow),typeof t.maximumRecordAgeInSeconds=="number"&&t.maximumRecordAgeInSeconds>=60&&t.maximumRecordAgeInSeconds<=604800&&(e.maximumRecordAgeInSeconds=t.maximumRecordAgeInSeconds),t.maximumRetryAttempts&&t.maximumRetryAttempts>0&&t.maximumRetryAttempts<=1e4&&(e.maximumRetryAttempts=t.maximumRetryAttempts),"bisectBatchOnFunctionError"in t&&(e.bisectBatchOnFunctionError=t.bisectBatchOnFunctionError),t.functionResponseType&&(e.functionResponseType=t.functionResponseType),t.filterPatterns&&(e.filterPatterns=t.filterPatterns),typeof t.tumblingWindowInSeconds=="number"&&(e.tumblingWindowInSeconds=t.tumblingWindowInSeconds),t.onFailureDestination){let r=t.onFailureDestination;if(!r.startsWith("arn:aws"))throw new Error(`Invalid onFailureDestination ARN: ${r}`);e.onFailureDestination=r}return e}};var qe=t=>{let e={},{arn:n,filterPatterns:r,batchSize:s,maximumBatchingWindow:i,functionResponseType:o,enabled:a}=t;if(typeof n=="string"){let c=n.split(":");c.length&&(e.name=c[c.length-1],e.arn=n)}if(r&&(e.filterPatterns=r),s&&(e.batchSize=s),i&&(e.maximumBatchingWindow=i),(o=="ReportBatchItemFailures"||Array.isArray(o)&&o[0]=="ReportBatchItemFailures")&&(e.functionResponseType=["ReportBatchItemFailures"]),typeof a=="boolean"?e.enabled=a:e.enabled=!0,e.name)return e};var B=["lambda","sns","sqs"],je=({triggers:t})=>{let e=[],n=[],r=[],s=[],i=[];for(let o of t)switch(o.source){case"sqs":{let a=qe(o);a&&r.push(a)}continue;case"dynamodb":{let a=Me(o);a&&s.push(a)}continue;default:break}return{ddb:s,endpoints:e,s3:i,sns:n,sqs:r}},J=t=>{if(!(!t||t.type&&!B.includes(t.type)))if(typeof t=="string")if(t.startsWith("arn:")){let[,,e,n,r,s,i]=t.split(":");if(B.includes(e))return{kind:e,name:s=="function"?i:s}}else return{kind:"lambda",name:t};else{let e={};if(typeof t.arn=="string"){let[,,n,r,s,i,o]=t.arn.split(":");e.name=i,B.includes(n)&&(e.kind=n)}else if(B.includes(t.type)&&t.arn){e.kind=t.type;let[n,r]=Object.entries(t.arn)?.[0];if(!n||!r)return}if(e.kind&&e.name)return e}};var he=A(require("node:path"));var Fe=require("node:child_process"),He=require("node:fs"),_e=require("node:http"),Ce=A(require("node:path")),Yt=new URLPattern({pathname:"/2018-06-01/runtime/invocation/:awsRequestId/:returnType"}),F=class t{constructor({name:e,timeout:n,memorySize:r,environment:s,handlerPath:i,handlerName:o,runtime:a},c,l){this.cwd=l;this.name=e,this.timeout=n,this.memorySize=r,this.environment=s,this.handlerName=o,this.runtime=a,this.emitRebuild=c,this.bin=Ce.default.resolve(i),this.mount=async()=>{await this.createOwnedServer(),await this.load()},this.unmount=d=>{this.runner?.kill(),this.runner=void 0,this.isMounted=!1,this.server?.close(),this.server?.closeAllConnections(),this.watcher?.close()},this.invoke=async({event:d,info:m,clientContext:h,awsRequestId:p})=>{this.isMounted||await this.load();let g,y,f=new Promise((u,v)=>{g=u,y=v}),b={id:p,event:d,resolve:g,inFlight:!1,reject:y};return this.invocations.push(b),this.handleInvoke(),f}}static async collectBody(e){let n=Buffer.alloc(0);return e.on("data",r=>{n=Buffer.concat([n,r])}),new Promise(r=>{e.on("end",async()=>{r(n?n.toString("utf-8"):void 0)})})}invoke;mount;unmount;name;timeout;memorySize;environment;handlerName;runtime;bin;runner;isMounted=!1;watchers=[];filesTime=new Map;port;watcher;emitRebuild;invocations=[];queue=[];getWaitingInvocation(){return this.invocations.find(e=>!e.inFlight)}server=void 0;async createOwnedServer(){let e=(0,_e.createServer)(async(n,r)=>{let{method:s,url:i,headers:o}=n;if(s=="POST"){let a=Yt.exec(i,"http://localhost:3000"),c=a?.pathname.groups.awsRequestId,l=a?.pathname.groups.returnType;if(!(c&&(l=="response"||l=="error"))){r.statusCode=400,r.end();return}let d=this.invocations.findIndex(p=>p.id==c);if(d==-1){r.statusCode=400,r.end();return}let m=await t.collectBody(n),h=this.invocations[d];this.invocations.splice(d,1),await new Promise(p=>{r.statusCode=202,r.end(()=>{l=="response"?h.resolve(m):h.reject(m),p(void 0)})});return}if(s=="GET"&&i=="/2018-06-01/runtime/invocation/next"){let a=this.getWaitingInvocation();if(!a){this.queue.push(r);return}a.inFlight=!0,r.setHeader("Lambda-Runtime-Aws-Request-Id",a.id),r.end(JSON.stringify(a.event));return}r.statusCode=400,r.end()});e.keepAliveTimeout=0,await new Promise(n=>{e.listen(n)}),e.unref(),this.port=e.address().port,this.server=e}load=()=>(this.watcher||(this.watcher=(0,He.watch)(this.bin,(e,n)=>{this.emitRebuild()}),this.watcher.unref()),this.runner=(0,Fe.spawn)(this.bin,{env:{...this.environment,AWS_LAMBDA_RUNTIME_API:`127.0.0.1:${this.port}`},stdio:"inherit",cwd:this.cwd}),this.runner.on("error",e=>{console.error("Failed to run custome runtime.",e)}),this.runner.pid||(console.error(`Can not find custome runtime ${this.bin}`),process.exit(1)),new Promise(e=>{this.runner.once("spawn",()=>{this.isMounted=!0,e(void 0)})}));onComplete=e=>{let n=this.invocations.findIndex(r=>r.id==e);n!=-1&&this.invocations.splice(n,1)};handleInvoke(){try{let e=this.getWaitingInvocation();if(!e||!this.queue.length)return;let n=this.queue[0];n||console.error("This is a bug in exlo, please report!"),n.setHeader("Lambda-Runtime-Aws-Request-Id",e.id),this.queue.splice(this.queue.findIndex(r=>r==n),1),n.end(JSON.stringify(e.event))}catch(e){console.error(e)}}};var N=class t extends F{static llrtEnvs={};static llrtBoostrapPath="bootstrap";constructor(e,n){let r=he.default.basename(e.handlerPath);e.handlerPath=t.llrtBoostrapPath;let s=he.default.dirname(e.esOutputPath);super({...e,environment:{...t.llrtEnvs,...e.environment,LAMBDA_HANDLER:r}},n,s)}};var gt=require("node:crypto"),bt=A(require("node:http")),vt=A(require("node:inspector")),ve=require("node:os");var ze=require("node:crypto");var Q=!1,Xt=t=>{Q=t},Zt=()=>Q,H=(t,e)=>{Q&&console.log(`\x1B[${t}m${e}\x1B[0m`)},en=t=>console.log(`\x1B[31m${t}\x1B[0m`),tn=t=>H("32",t),nn=t=>H("33",t),rn=t=>H("36",t),sn=t=>H("90",t),on=t=>H("94",t),an=t=>H("95",t),ln=t=>Q?console.log(t):void 0,S={GREEN:tn,YELLOW:nn,CYAN:rn,BR_BLUE:on,RED:en,GREY:sn,PINK:an,setDebug:Xt,getDebug:Zt,info:ln};var We="application/vnd.awslambda.http-integration-response",P=class t{buffer;_isHttpIntegrationResponse;_metaDelimiter;_endDelimiter;_ct;_isStreamResponse=!0;#e;static codec=new TextDecoder;static splitMessage=(e,n)=>{if(!e)return;let r=Array.from(e.values()),s=null;if(n)s=n;else for(let i=0;i<r.length;i++)if(r[i]===0&&[r[i+1],r[i+2],r[i+3],r[i+4],r[i+5],r[i+6],r[i+7]].every(c=>c===0)){s=i;break}if(s)return new Uint8Array(r.slice(0,s))};constructor(e){this._isHttpIntegrationResponse=!1,this._metaDelimiter=0,this._endDelimiter=0,this.#e=e}setHeader(e,n){this._isHttpIntegrationResponse=!this.buffer&&n==We&&(!this._ct||this._ct==We),this._ct=n}write(e,n){!this._isHttpIntegrationResponse&&!this._metaDelimiter&&(this._metaDelimiter=e.byteLength),this.#t(e)}end(e){this.buffer&&(this._endDelimiter=this.buffer.byteLength),e&&this.#t(e)}destroy(){}#t(e){this.buffer=typeof this.buffer>"u"?e:Buffer.concat([this.buffer,e])}getParsedResponse(){if(!this.#e)return;let e=this.#e.kind;if(e=="alb")return this.#n();if(e=="url")return this.#i();if(e=="apg")return this.#r()}#n(){let e=this._isHttpIntegrationResponse?t.splitMessage(this.buffer):this.buffer,n;return e&&(n=this.#s(e)),n}#r(){if(this._isHttpIntegrationResponse)return S.RED("awslambda.HttpResponseStream.from() is not supported with API Gateway"),{statusCode:500,headers:{"Content-Type":x.contentType.json},body:x.httpErrMsg};if(this.buffer)return this.#s(this.buffer)}#i(){let e=t.splitMessage(this.buffer,this._isHttpIntegrationResponse?void 0:this._metaDelimiter),n;return e&&(n=this.#s(e)),n}#s(e){let n=t.codec.decode(e);if(typeof n=="string")try{n=JSON.parse(n)}catch{}return n}};var $e="<html><head><title>404 Not Found</title></head><body><center><h1>404 Not Found</h1></center></body></html>",Ue="<html><head><title>400 Request Header Or Cookie Too Large</title></head><body><center><h1>400 Bad Request</h1></center><center>Request Header Or Cookie Too Large</center></body></html>";var cn=["GET","HEAD","POST","PUT","DELETE","PATCH","OPTIONS"],dn=JSON.stringify({Message:null}),K=t=>{if(t)try{let e=Buffer.from(t,"base64").toString("utf-8");return JSON.parse(e)}catch{return new Error("InvalidRequestContentException")}},Ve=(t,e)=>{if(!cn.includes(e))return t.statusCode=403,t.setHeader("Content-Type","application/json"),t.end(dn),!0},T=async(t,e)=>{let n=Buffer.alloc(0);return t.on("data",s=>{n=Buffer.concat([n,s])}),await new Promise(s=>{t.on("end",async()=>{s(n?n.toString(e?"base64":"utf-8"):void 0)})})},G=t=>{let e;try{e=JSON.parse(t)}catch(n){e?.length?e=n:e={}}return e},Y=t=>t instanceof P,Be=t=>{let e,n=Buffer.from(t).toString();try{e=JSON.parse(n)}catch{e=n}return e},_=t=>{let e=(0,ze.randomUUID)();return t.setHeader("x-amzn-RequestId",e),e},X=t=>JSON.stringify({Type:"User",message:`Could not parse request body into json: Could not parse payload into json: ${t}: was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')`}),Z=JSON.stringify({Type:null,message:"Client context must be a valid Base64-encoded JSON object."}),ee=(t,e,n)=>JSON.stringify({Type:"User",message:`Function not found: arn:aws:lambda:${e}:${n}:function:${t}`}),te=(t,e)=>{if(!t.writableFinished){if(t.statusCode=502,!t.headersSent&&(t.setHeader("Content-Type","application/json"),e))for(let[n,r]of Object.entries(e))t.setHeader(n,r);t.end("Internal Server Error")}},Je=t=>t.byteLength==8&&Array.from(t.values()).every(e=>e===0);var xr=new Error(Ue);var Qe=t=>t.charAt(0).toUpperCase()+t.slice(1);var x=class t{static apiId="";static accountId="";static port=3e3;static serve;static contentType={json:"application/json",text:"text/plain; charset=utf-8",octet:"application/octet-stream"};static keepAlive=["Connection","keep-alive"];static dummyHost="http://localhost:3003";static httpErrMsg='{"message":"Internal Server Error"}';static apigJsonParseErrMsg='{"message":"[Unknown error parsing request body]"}';static apigForbiddenErrMsg='{"message":"Forbidden"}';static amzMsgNull='{"message":null}';static apgTimeoutMsg='{"message": "Endpoint request timed out"}';static unavailable='{"message":"Service Unavailable"}';static timeoutRegex=/after.\d+.*seconds/;static apgRequestTimeout=30;static normalizeHeaderKey=e=>e.toLowerCase().split("-").map(Qe).join("-");static getMultiValueHeaders=e=>{let n={},r=e.filter((i,o)=>o%2==0).map(i=>i.toLowerCase()),s=e.filter((i,o)=>o%2!==0);return r.forEach((i,o)=>{i!="x-mock-type"&&(n[i]?n[i].push(s[o]):n[i]=[s[o]])}),n};static getIsBase64Encoded=e=>{let n=e["content-type"];return e["content-encoding"]||!n?!0:!(n.startsWith("application/json")||n.startsWith("application/xml")||n.startsWith("application/javascript")||n.startsWith("text/"))};static knownHeaders=["accept","accept-encoding","user-agent","host","via","content-length"];static getApiGV1Headers(e,n){let{rawHeaders:r}=e,s,i={"X-Forwarded-For":e.socket.remoteAddress,"X-Forwarded-Proto":"http","X-Forwarded-Port":String(t.port)};for(let l=0;l<r.length;){let d=r[l],m=d.toLowerCase();if(["connection","x-mock-type"].includes(m)){l=l+2;continue}this.knownHeaders.includes(m)&&(d=this.normalizeHeaderKey(m));let h=r[l+1];i[d]=h,m=="x-api-key"&&(s=h),l=l+2}let o={};for(let l of Object.keys(i).sort((d,m)=>d.localeCompare(m)))o[l]=i[l];let a={"X-Forwarded-For":[e.socket.remoteAddress],"X-Forwarded-Proto":["http"],"X-Forwarded-Port":[String(t.port)]};for(let l=0;l<r.length;){let d=r[l],m=d.toLowerCase();if(["connection","x-mock-type"].includes(m)){l=l+2;continue}this.knownHeaders.includes(m)&&(d=this.normalizeHeaderKey(m));let h=r[l+1];a[d]?a[d].push(h):a[d]=[h],l=l+2}let c={};for(let l of Object.keys(a).sort((d,m)=>d.localeCompare(m)))c[l]=a[l];return{headers:o,multiValueHeaders:c,apiKey:s}}static getCustomHeaders(e,n){let{headers:r}=e;return delete r["x-mock-type"],delete r.connection,{"X-Forwarded-For":e.socket.remoteAddress,"X-Forwarded-Proto":"http","X-Forwarded-Port":String(t.port),...r}}static getPathParameters(e,n){let r=e.paths[0].split("/"),s=n.pathname.split("/"),i={};return r.forEach((o,a)=>{o.startsWith("{")&&o.endsWith("}")&&!o.endsWith("+}")&&(i[o.slice(1,-1)]=s[a])}),i}static normalizeSearchParams=(e,n)=>{let r={};Array.from(e.keys()).forEach(o=>{let a=e.getAll(o).map(l=>l.toLowerCase()),c=o.toLowerCase();a?r[c]?r[c].push(...a):r[c]=a:r[c]||(r[c]=void 0)});let s="",i=n.indexOf("?");return i!=-1&&(s=n.slice(i+1)),r.toString=()=>s,r};static getMultiValueQueryStringParameters=e=>{let n={};e.delete("x_mock_type");for(let r of Array.from(new Set(e.keys())))n[r]=e.getAll(r).map(encodeURI);return n};static isEndpointTimeoutError=e=>{if(!e)return;let n=e.match(this.timeoutRegex)?.[0];if(n){let r=n.split(" ")[1];if(!isNaN(r))return Number(r)>=t.apgRequestTimeout}}};var tt=require("exlo/internal/esm");var Ge=require("exlo/internal/esm");var ne=class{constructor(e,n,r,s,i){this.MaximumBatchingWindowInSeconds=e;this.BatchSize=n;this.lambdaName=r;this.handlers=s;this.onInvokeFinished=i}available=!0;#e=[];#t=!1;get messages(){return this.#e}#n(){setTimeout(async()=>{this.available=!1,this.#t||await this.#r()},this.MaximumBatchingWindowInSeconds*1e3)}async setRecord(e){this.#e.length||this.#n(),this.#e.push(e),(this.#e.length==this.BatchSize||!this.available)&&(this.available=!1,await this.#r())}async#r(){this.#t=!0;let e=this.#e,n=this.handlers.find(r=>r.name==this.lambdaName);try{let r=await n.invoke({Records:this.#e});await this.onInvokeFinished(e,r)}catch{}}};var Ye=10,Xe=0,pn=(t,e,n)=>t.receiveMessage({QueueUrl:e,AttributeNames:["All"],MessageAttributeNames:["All"],MaxNumberOfMessages:n}),mn=(t,e)=>t.getQueueAttributes({QueueUrl:e,AttributeNames:["All"]}),Ke=async(t,e,n)=>{for(let r of et(n,10)){if(!r.length)continue;let s=r.map((i,o)=>({Id:`id-${o+1}`,ReceiptHandle:i}));try{await t.deleteMessageBatch({QueueUrl:e,Entries:s})}catch{}}},un=t=>{if(!t)return{};let e={};for(let[n,r]of Object.entries(t)){e[n]={};let{StringValue:s,BinaryValue:i,DataType:o}=r;o.startsWith("B")?e[n].binaryValue=i:e[n].stringValue=s,e[n].stringListValues=[],e[n].binaryListValues=[],e[n].dataType=o}return e},fn=(t,e)=>{let{MessageId:n,Body:r,MD5OfBody:s,ReceiptHandle:i,Attributes:o,MessageAttributes:a,MD5OfMessageAttributes:c}=t,l={messageId:n,receiptHandle:i,body:r,attributes:o,messageAttributes:un(a)};return c&&(l.md5OfMessageAttributes=c),l.md5OfBody=s,l.eventSource="aws:sqs",l.eventSourceARN=e,l.awsRegion=e.split(":")[3],l},hn=(t,e)=>t.map(n=>fn(n,e)),re=class extends Ge.EventSourceMapping{constructor(n,r,s){super(n);this.config=n;this.handlers=r;this.sqsClient=s;let i=this.config.EventSourceArn.split(":");this.QueueName=i[i.length-1],this.#n=this.config.FunctionResponseTypes?.[0]=="ReportBatchItemFailures"}#e=[];QueueName="";QueueUrl="";#t;#n;async onInvokeFinished(n,r){let s=n.map(i=>i.receiptHandle);this.#n&&(s=Ze(n,r)),await Ke(this.sqsClient,this.QueueUrl,s)}#r(){let n=this.#e.find(s=>s.available);if(n)return n;let r=new ne(this.config.MaximumBatchingWindowInSeconds,this.config.BatchSize,this.config.FunctionName,this.handlers,this.onInvokeFinished.bind(this));return this.#e.push(r),r}async#i(n){for(let r of n)await this.#r().setRecord(r)}async init(){if(!this.sqsClient)return;let{QueueUrl:n}=await this.sqsClient.getQueueUrl({QueueName:this.QueueName});this.QueueUrl=n,await this.enable()}#s=1500;cleanBatchs(){for(let n=0;n<this.#e.length;n++)this.#e[n].available||this.#e.splice(n,1)}async#l(){let n=0,r=2e3,s=async()=>{try{let{Attributes:i}=await mn(this.sqsClient,this.QueueUrl);if(!Number(i.ApproximateNumberOfMessages))n++,this.#s<=2e4&&(this.#s+=200),n==5&&(r=2e3);else{n=0,r=400;let a=this.#s;this.#s=350,a>=1600&&await this.#a(!0)}}catch{r=2e3}this.cleanBatchs(),this.#t=setTimeout(s,r)};await s()}#o;async#a(n){n&&clearTimeout(this.#o);let r=async()=>{if(!this.config.Enabled){this.State=="Disabling"&&(this.State="Disabled");return}try{let{Messages:s}=await pn(this.sqsClient,this.QueueUrl,this.config.BatchSize<=10?this.config.BatchSize:10);if(s){let i=hn(s,this.config.EventSourceArn),o=await this.#c(i);await this.#i(o)}}catch{}this.#o=setTimeout(r,this.#s)};await r()}async enable(){this.State="Enabling";try{await this.#l(),this.config.Enabled=!0,this.State="Enabled",await this.#a()}catch(n){console.error(n)}}disable(){this.config.Enabled=!1,clearTimeout(this.#t),this.State="Disabling"}async#c(n){let r=n.map(a=>{let c={...a};try{c.body=JSON.parse(c.body)}catch{}return c}),[s,i]=this.filterRecords(r);await Ke(this.sqsClient,this.QueueUrl,i.map(a=>a.receiptHandle));let o=[];for(let a of s)o.push(...n.filter(c=>c.messageId==a.messageId));return o}};var nt=async(t,e)=>{let{accountId:n,region:r,services:s}=e;for(let i of t)for(let o of i.sqs){if(typeof o.arn!="string")throw new Error("SQS Event Source Mapping must have arn string");let a=o.arn;a.startsWith("arn:aws:sqs:")||(a=`arn:aws:sqs:${r}:${n}:${o.name}`);let c;if(Array.isArray(o.filterPatterns)){c=[];for(let d of o.filterPatterns)c.push({Pattern:JSON.stringify(d)});c.length||(c=void 0)}let l=new re({BatchSize:typeof o.batchSize=="number"?o.batchSize:Ye,Enabled:o.enabled,EventSourceArn:a,FunctionName:i.name,FunctionResponseTypes:o.functionResponseType,FilterCriteria:c?{Filters:c}:void 0,MaximumBatchingWindowInSeconds:typeof o.maximumBatchingWindow=="number"?o.maximumBatchingWindow:Xe},t,s.sqs);if(tt.EventSourceMapping.SOURCES.push(l),l.config.Enabled)try{await l.init()}catch(d){S.RED(`Failed to start EventSourceMapping ${l.config.EventSourceArn}
3
- Please verify provided SQS Client validity.`),console.error(d)}}},yn=/(-|\w+)/g,gn=t=>t.length<81&&t.replace(yn,"")=="",Ze=(t,e)=>{if(typeof e>"u"||e===null||typeof e=="object"&&(e.batchItemFailures===null||Array.isArray(e.batchItemFailures)&&!e.batchItemFailures.length))return t.map(r=>r.receiptHandle);let n=[];if(typeof e=="object"&&Array.isArray(e.batchItemFailures)){if(e.batchItemFailures.some(r=>!r.itemIdentifier||!gn(r.itemIdentifier)||!t.find(s=>s.messageId==r.itemIdentifier)))throw new Error("ReportBatchItemFailures: complete failure.");return t.forEach(r=>{e.batchItemFailures.find(i=>i.itemIdentifier==r.messageId)||n.push(r.receiptHandle)}),n}},et=(t,e)=>{let n=[];for(let r=0;r<t.length;r+=e){let s=t.slice(r,r+e);n.push(s)}return n};var ct=require("node:crypto");var rt=A(require("node:http")),bn=t=>{switch(t.kind){case"sns":return"@sns/parsed/";case"sqs":return"@sqs";case"lambda":return`@invoke/${t.name}/`;default:break}},st=(t,e)=>{let n=bn(e);if(!n)return;let r={"Content-Type":e.kind=="sqs"?"application/x-www-form-urlencoded":"application/json"};return rt.default.request(`http://localhost:${t}/${n}`,{method:"POST",headers:r})},it=({event:t,payload:e,requestId:n,lambdaName:r,success:s})=>{let i={version:"1.0",timestamp:"2023-02-25T13:25:04.688Z",requestContext:{requestId:n,functionArn:`arn:aws:lambda:eu-west-3:000000000000:function:${r}:$LATEST`,condition:s?"Success":"RetriesExhausted",approximateInvokeCount:1},requestPayload:t,responseContext:{statusCode:200,executedVersion:"$LATEST"},responsePayload:e};return s||(i.responseContext.functionError="Unhandled"),JSON.stringify(i)},vn=({topicName:t,event:e,payload:n,requestId:r,success:s,lambdaName:i})=>{let o="";if(s)o=it({event:e,payload:n,requestId:r,success:s,lambdaName:i});else if(typeof e=="string")o=e;else try{o=JSON.stringify(e)}catch(c){console.log(c)}let a={TopicArn:`arn:aws:sns:eu-west-3:000000000000:${t}`,Message:o,Action:"Publish",Version:"2010-03-31",MessageAttributes:{}};return s||(a.MessageAttributes={RequestID:{Type:"String",Value:r},ErrorCode:{Type:"String",Value:"200"},ErrorMessage:{Type:"String",Value:n.errorMessage}}),JSON.stringify(a)},Sn=({destination:t,event:e,payload:n,requestId:r,lambdaName:s,success:i})=>{let o=new URLSearchParams;o.append("QueueUrl",t.name),o.append("Action","SendMessage");let a=e;try{a=JSON.stringify(a)}catch{}return o.append("MessageBody",a),i||(o.append("MessageAttribute.1.Name","RequestID"),o.append("MessageAttribute.1.Value.StringValue",r),o.append("MessageAttribute.1.Value.DataType","String"),o.append("MessageAttribute.1.Name","ErrorCode"),o.append("MessageAttribute.1.Value.StringValue","200"),o.append("MessageAttribute.1.Value.DataType","Number"),o.append("MessageAttribute.1.Name","ErrorMessage"),o.append("MessageAttribute.1.Value.StringValue",n.errorMessage),o.append("MessageAttribute.1.Value.DataType","String")),o.toString()},ot=({destination:t,event:e,payload:n,requestId:r,lambdaName:s,success:i})=>{switch(t.kind){case"sns":return vn({topicName:t.name,event:e,payload:n,requestId:r,success:i,lambdaName:s});case"lambda":return it({event:e,payload:n,requestId:r,lambdaName:s,success:i});case"sqs":return Sn({destination:t,event:e,payload:n,requestId:r,lambdaName:s,success:i});default:return""}},ye=({destination:t,LOCAL_PORT:e,event:n,payload:r,requestId:s,lambdaName:i})=>{try{let o=st(e,t);if(!o)return;o.end(ot({destination:t,event:n,payload:r,requestId:s,lambdaName:i,success:!1}))}catch{}},at=({destination:t,LOCAL_PORT:e,event:n,payload:r,requestId:s,lambdaName:i})=>{try{let o=st(e,t);if(!o)return;o.end(ot({destination:t,event:n,payload:r,requestId:s,lambdaName:i,success:!0}))}catch{}};var xn=1080*1e3,wn=new Set(["async","ddb","kinesis","s3","sns","sqs"]),lt=t=>typeof t?.kind=="string"?wn.has(t.kind)||t.async:!1,$=class t{name;runtime;sqs;ddb;url;timeout;memorySize;environment;handlerPath;handlerName;esEntryPoint;esOutputPath;entryPoint;onError;onSuccess;onFailure;invokeSub;invokeSuccessSub;invokeErrorSub;#e;runner;static ENABLE_TIMEOUT=!0;constructor({name:e,runtime:n,timeout:r,memorySize:s,environment:i,handlerPath:o,handlerName:a,esEntryPoint:c,esOutputPath:l,entryPoint:d,sqs:m,ddb:h,url:p,invokeSub:g,invokeSuccessSub:y,invokeErrorSub:f,onError:b,onSuccess:u,onFailure:v,runner:w}){this.name=e,this.runtime=n,this.sqs=m,this.ddb=h,this.url=p,this.timeout=r,this.memorySize=s,this.environment=i,this.handlerPath=o,this.handlerName=a,this.esEntryPoint=c,this.esOutputPath=l,this.entryPoint=d,this.invokeSub=g,this.invokeSuccessSub=y,this.invokeErrorSub=f,this.onError=b,this.onSuccess=u,this.onFailure=v,this.runner=w}handleErrorDestination(e,n,r,s){if(this.runner.onComplete(s),this.invokeErrorSub.forEach(async i=>{try{await i(e,r,n)}catch{}}),lt(n)){let i={LOCAL_PORT:this.environment.LOCAL_PORT,event:e,payload:r,requestId:s,lambdaName:this.name};this.onError&&ye({...i,destination:this.onError}),this.onFailure&&ye({...i,destination:this.onFailure})}}handleSuccessDestination(e,n,r,s){this.runner.onComplete(s),this.onSuccess&&lt(n)&&at({destination:this.onSuccess,LOCAL_PORT:this.environment.LOCAL_PORT,event:e,payload:r,requestId:s,lambdaName:this.name}),this.invokeSuccessSub.forEach(async i=>{try{await i(e,r,n)}catch{}})}async invoke(e,n,r,s){let i=(0,ct.randomUUID)();this.runner.isMounted||(S.BR_BLUE(`\u2744\uFE0F Cold start \u03BB '${this.name}'`),await this.runner.mount());for(let a of this.invokeSub)try{let c=await a(e,n);typeof c!="function"&&(e=c)}catch{}let o=this.#n(i,e,n);try{let a=await new Promise(async(c,l)=>{let d;t.ENABLE_TIMEOUT&&(d=setTimeout(()=>{s?.destroy(),this.runner.onComplete(i,!0),S.RED(`'${this.name}' | ${i}: Request failed`),l({errorType:"Unhandled",errorMessage:`${new Date().toISOString()} ${i} Task timed out after ${this.timeout} seconds`})},this.timeout*1e3));try{let m=await this.runner.invoke({event:e,awsRequestId:i,info:n,clientContext:r,response:s});clearTimeout(d),c(m)}catch(m){clearTimeout(d),l(m)}});return this.#t(),t.#r(o,this.name),this.handleSuccessDestination(e,n,a,i),a}catch(a){throw this.handleErrorDestination(e,n,a,i),this.runner.unmount(!0),this.#t(),a}}clear=()=>{clearTimeout(this.#e),this.runner.unmount()};async shutdown(){clearTimeout(this.#e),await this.runner.unmount(!0)}#t=()=>{clearTimeout(this.#e),this.#e=setTimeout(()=>{this.runner.unmount(!0)},xn)};#n=(e,n,r)=>{let s=n?.httpMethod??n?.method??"",i=n?.path??n?.rawPath??"";i&&(i=decodeURI(i));let o=`${s} ${i}`,a=new Date;S.CYAN(`${a.toLocaleDateString()} ${a.toLocaleTimeString()} requestId: ${e} | '${this.name}' ${o}`),S.GREY(this.entryPoint);let c="";return typeof r?.kind=="string"&&(c=` (${r.kind.toUpperCase()})`),S.YELLOW(`\u03BB payload${c}:`),S.info(n),process.hrtime()};static#r=(e,n)=>{let r=process.hrtime(e),s=`${r[0]},${r[1]}s`,i=`\u231B\uFE0F \u03BB '${n}' execution time: ${s}`;setTimeout(()=>{S.YELLOW(i)},400)}};var se=class{err;constructor(e){this.err=new Error(`Local invoke of ${e} runtime is currently not supported by exlo.`)}isMounted=!0;mount=()=>{};unmount=()=>{};invoke=async()=>{throw this.err};onComplete=()=>{}};var dt=require("node:events"),pt=A(require("node:path")),mt=require("node:worker_threads");var Rn=pt.default.resolve(j("exlo"),"./dist/lib/runtime/runners/node/index.js"),ie=class extends dt.EventEmitter{_worker;isMounted=!1;_isLoading=!1;invoke;mount;unmount;name;timeout;memorySize;environment;handlerPath;handlerName;esOutputPath;hasFatalError;constructor({name:e,timeout:n,memorySize:r,environment:s,handlerPath:i,handlerName:o,esOutputPath:a}){super(),this.name=e,this.timeout=n,this.memorySize=r,this.environment=s,this.handlerPath=i,this.handlerName=o,this.esOutputPath=a,this.mount=async()=>{this._isLoading?(this.setMaxListeners(0),await new Promise((c,l)=>{this.once("loaded",d=>{d?c(void 0):l()})})):this.isMounted||(this._isLoading=!0,await this.importHandler(),this._worker.on("message",c=>{let{channel:l,data:d,awsRequestId:m,type:h,encoding:p}=c;l=="uncaught"?(this._worker.terminate(),this.isMounted=!1,this._isLoading=!1,S.RED(`${h} Uncaught exceptions`),console.error(d.error),d.solution&&(S.BR_BLUE("Solution:"),console.log(d.solution))):l=="fail"?(this.emit(m,l,d,h,p),this.unmount()):this.emit(m,l,d,h,p)}))},this.unmount=()=>{this._worker?.terminate(),this.isMounted=!1,this._isLoading=!1},this.invoke=async({event:c,info:l,clientContext:d,response:m,awsRequestId:h})=>new Promise((p,g)=>{this._worker.postMessage({channel:"exec",data:{event:c,clientContext:d},awsRequestId:h});let y=m??new P(l);function f(b,u,v,w){switch(b){case"return":case"succeed":case"done":this.removeListener(h,f),p(u);break;case"fail":this.removeListener(h,f),g(u);break;case"stream":v=="write"?y.write(u,w):v=="ct"?y.setHeader("Content-Type",u):v=="timeout"?(this.removeListener(h,f),y.destroy(),g(u)):(this.removeListener(h,f),y.end(u),p(y instanceof P?y:void 0));break;default:this.removeListener(h,f),g(new Error("Unknown error"));break}}this.on(h,f)})}async importHandler(){await new Promise((e,n)=>{let r={name:this.name,env:this.environment,execArgv:["--enable-source-maps"],workerData:{name:this.name,timeout:this.timeout,memorySize:this.memorySize,esOutputPath:this.esOutputPath,handlerPath:this.handlerPath,handlerName:this.handlerName,debug:S.getDebug()}};this._worker=new mt.Worker(Rn,r),this._worker.setMaxListeners(0),this._worker.once("message",s=>{let{channel:i,data:o}=s;i=="import"?(this._worker.setMaxListeners(55),this.setMaxListeners(10),this.isMounted=!0,this._isLoading=!1,this.emit("loaded",!0),e(void 0)):i=="fatal"&&n(o)}),this._worker.postMessage({channel:"import"})})}onComplete=(e,n)=>{this._worker?.postMessage({channel:"complete",awsRequestId:e,timeout:n})}};var ae=require("node:child_process"),ft=require("node:fs"),ge=require("node:fs/promises"),C=A(require("node:path"));var In=process.cwd();function ut(t){let e="";try{e=(0,ae.execSync)(t,{encoding:"utf-8"})}catch{}return e}var oe=class t{invoke;mount;unmount;name;timeout;memorySize;environment;handlerPath;pyModulePath;handlerDir;handlerName;handlerFileAbsolutePath;runtime;bin;python;isMounted=!1;watchers=[];filesTime=new Map;watcherListener;emitRebuild;static wrapper=C.default.resolve(j("exlo"),"./src/lib/runtime/runners/python/index.py");static DELIMITER="__|response|__";static DELIMITEREND="__|responseEnd|__";static ERR_RESPONSE="__|error|__";static WATCH="__|watch|__";static WATCHEND="__|watchEnd|__";constructor({name:e,timeout:n,memorySize:r,environment:s,handlerPath:i,handlerName:o,runtime:a},c){this.name=e,this.timeout=n,this.memorySize=r,this.environment=s,this.handlerName=o,this.runtime=a,this.emitRebuild=c;let l=C.default.resolve(i);this.handlerDir=C.default.dirname(l),this.handlerPath=C.default.basename(l,`.${this.handlerName}`),this.pyModulePath=`${this.handlerDir}/${this.handlerPath}`.replace(In,"").replace(/\/|\\/g,".").slice(1),this.handlerFileAbsolutePath=l.replace(`.${this.handlerName}`,".py"),this.mount=async()=>{if(this.python)return;let d=`${this.handlerDir}/${this.handlerPath}.py`;try{await(0,ge.access)(d),this.load()}catch{console.error(`Can not find ${this.name}'s handler at: "${d}"`),process.exit(1)}},this.unmount=d=>{d&&(this.python?.kill(),this.python=void 0,this.isMounted=!1)},this.invoke=async({event:d,info:m,clientContext:h,awsRequestId:p})=>new Promise((g,y)=>{let f=JSON.stringify({event:d,awsRequestId:p,context:h??""}),b="",u=w=>{let R=null,I=w.toString();try{let O=I.includes(t.WATCH);if(O&&this.setWatchFiles(I),I.startsWith(t.DELIMITER)&&I.includes(t.DELIMITEREND)){let E=I.split(t.DELIMITER),M=E[E.length-1].split(t.DELIMITEREND)[0];if(E.length>1){let q;O?q=E[0].split(t.WATCHEND)[1]:q=E.slice(0,-1).join(`
4
- `),q.trim()&&console.log(q)}M&&(R=JSON.parse(M)),this.python.stdout.removeListener("data",u),this.python.stderr.removeListener("data",v),g(R)}else if(I.startsWith(t.DELIMITER))b=I.slice(t.DELIMITER.length);else if(I.includes(t.DELIMITEREND)){let E=I.slice(0,I.indexOf(t.DELIMITEREND)),M=JSON.parse(`${b}${E}`);this.python.stdout.removeListener("data",u),this.python.stderr.removeListener("data",v),g(M)}else if(b)b+=I;else if(!b&&I.trim()){let E;if(O){let M=I.split(`
5
- `),q=M.findIndex(Ct=>Ct.startsWith(t.WATCH));E=M.slice(0,q).join(`
6
- `)}else E=I;E.trim()&&console.log(E)}}catch(O){console.log("err",O),y(O)}};this.python.stdout.on("data",u);let v=w=>{let R=w.toString();if(R.includes(t.ERR_RESPONSE))try{R=JSON.parse(R.split(t.ERR_RESPONSE)[1]),R.requestId=p}catch{}finally{this.python.stdout.removeListener("data",u),this.python.stderr.removeListener("data",v),y(R)}else console.log(R)};this.python.stderr.on("data",v),this.python.stdin.write(`${f}
7
- `)}),this.watcherListener=()=>{this.isMounted&&(this.unmount(!0),this.watchers.forEach(d=>d.close()),this.watchers=[],this.emitRebuild())}}setWatchFiles=async e=>{try{let n=e.split(t.WATCH),s=n[n.length-1].split(t.WATCHEND)[0],i=JSON.parse(s).map(o=>`${o.replace(/\./g,C.default.sep)}.py`);for(let o of i)try{await(0,ge.access)(o),this.watchers.push((0,ft.watch)(o,{persistent:!1},this.watcherListener))}catch{}}catch(n){console.log(n)}};findPython(){let[e]=this.runtime.split("."),n=e.split("python")[1];if(ut(`${e} --version`))return e;let r=ut("python --version");if(!r)throw new Error("Can not find python on your OS. Make sure it is installed.");if(n){let s=r.split(" ")[1]?.split(".")[0];s&&s!=n&&S.YELLOW("found python binary but with different version")}return"python"}load=()=>{this.bin||(this.bin=this.findPython()),this.python=(0,ae.spawn)(this.bin,["-u",t.wrapper,this.handlerFileAbsolutePath,this.pyModulePath,this.handlerName,String(this.timeout)],{env:this.environment}),this.python.pid||(console.error(`Can not find ${this.bin} in your PATH`),process.exit(1)),this.isMounted=!0};onComplete=e=>{}};var ht=require("node:child_process"),yt=require("node:fs"),be=require("node:fs/promises"),U=A(require("node:path"));var le=class t{invoke;mount;unmount;name;timeout;memorySize;environment;handlerPath;modulePath;handlerDir;handlerName;runtime;bin;ruby;isMounted=!1;emitRebuild;watcherListener;watchers=[];static wrapper=U.default.resolve(j("exlo"),"./src/lib/runtime/runners/ruby/index.rb");static DELIMITER="__|response|__";static ERR_RESPONSE="__|error|__";static WATCH="__|watch|__";constructor({name:e,timeout:n,memorySize:r,environment:s,handlerPath:i,handlerName:o,runtime:a},c){this.name=e,this.timeout=n,this.memorySize=r,this.environment=s,this.handlerName=o,this.runtime=a,this.emitRebuild=c;let l=U.default.resolve(i);this.handlerDir=U.default.dirname(l),this.handlerPath=U.default.basename(l,`.${this.handlerName}`),this.modulePath=`${this.handlerDir}/${this.handlerPath}.rb`,this.mount=async()=>{if(!this.ruby)try{await(0,be.access)(this.modulePath),this.load()}catch{console.error(`Can not find ${this.name}'s handler at: "${this.modulePath}"`),process.exit(1)}},this.unmount=d=>{d&&(this.ruby?.kill(),this.ruby=void 0,this.isMounted=!1)},this.invoke=async({event:d,info:m,clientContext:h,awsRequestId:p})=>new Promise((g,y)=>{let f=JSON.stringify({event:d,awsRequestId:p,context:h??""}),b=v=>{let w=null,R=v.toString();try{if(R.includes(t.WATCH))this.setWatchFiles(R);else if(R.includes(t.DELIMITER)){let I=R.split(t.DELIMITER),O=I[I.length-1];if(I.length>1){let E=I.slice(0,-1).join(`
8
- `);E.trim()&&console.log(E)}O&&(w=JSON.parse(O)),this.ruby.stdout.removeListener("data",b),this.ruby.stderr.removeListener("data",u),g(w)}else R.trim()&&console.log(R)}catch(I){y(I)}};this.ruby.stdout.on("data",b);let u=v=>{let w=v.toString();if(w.includes(t.ERR_RESPONSE))try{w=JSON.parse(w.split(t.ERR_RESPONSE)[1]),w.requestId=p}catch{}finally{this.ruby.stdout.removeListener("data",b),this.ruby.stderr.removeListener("data",u),y(w)}else console.log(w)};this.ruby.stderr.on("data",u),this.ruby.stdin.write(`${f}
9
- `)}),this.watcherListener=()=>{this.isMounted&&(this.unmount(!0),this.watchers.forEach(d=>d.close()),this.watchers=[],this.emitRebuild())}}setWatchFiles=async e=>{try{let n=e.split(t.WATCH),r=n[n.length-1],s=JSON.parse(r);s.push(this.modulePath);for(let i of s)try{await(0,be.access)(i),this.watchers.push((0,yt.watch)(i,{persistent:!1},this.watcherListener))}catch{}}catch(n){console.log(n)}};load=()=>{this.bin||(this.bin=process.platform==="win32"?"ruby.exe":"ruby"),this.ruby=(0,ht.spawn)(this.bin,[t.wrapper,this.modulePath,this.handlerName,this.name,String(this.timeout)],{env:this.environment,shell:!0}),this.ruby.pid||(console.error(`Can not find ${this.bin} in your PATH`),process.exit(1)),this.isMounted=!0};onComplete=e=>{}};var En=["@invoke","@url"],k=class t{handlers=[];static ip="127.0.0.1";debug=!1;port=0;constructor(e){this.debug=e.debug}static parseNameFromUrl(e){let n=e.split("/"),r=En.includes(n[1])?n[2]:n[3];if(r=decodeURIComponent(r),r.includes(":function:")){let s=r.split(":function:");r=s[s.length-1]}if(r.includes(":")){let s=r.split(":");s.length==2&&(r=s[0])}return r}getHandlerByName(e){if(!e)return;let n=t.parseNameFromUrl(e);return this.handlers.find(r=>r.name==n)}addHandler(e){let n=this.handlers.findIndex(r=>r.name==e.name&&r.esOutputPath==e.esOutputPath);n==-1?(this.handlers.push(e),this.#e("POST",`/2015-03-31/functions/${e.name}/invocations`),e.url&&this.#e("ANY",`/@url/${e.name}`,"34")):this.handlers[n].runtime.startsWith("n")&&(this.handlers[n].clear(),this.handlers[n]=e)}#e(e,n,r="90"){let s=`${e} http://localhost:${this.port}${n}`;console.log(`\x1B[${r}m${s}\x1B[0m`)}};var ce;ve.networkInterfaces&&(ce=Object.values((0,ve.networkInterfaces)()).reduce((t,e)=>(t.push(...e),t),[])?.filter(t=>!t.internal&&t.family==="IPv4").find(Boolean)?.address);var An=vt.default?.url()!=null;An&&(console.warn("Lambdas timeout are disabled when a Debugger is attached"),$.ENABLE_TIMEOUT=!1);var Pn={errors:[],warnings:[],outputFiles:[],metafile:{inputs:{},outputs:{}},mangleCache:{}},de=class extends k{#e;runtimeConfig={};#t;sco=[];aws;llrt;customOfflineRequests=[];customBuildCallback;onReady;stop(e){this.#e.close(e)}constructor(e,n={debug:!1}){super(n),S.setDebug(n.debug),this.aws=e.aws,this.llrt=e.llrt,e.llrt&&(N.llrtBoostrapPath=e.llrt.boostrapPath,e.llrt.environment&&(N.llrtEnvs=e.llrt.environment)),this.sco=[],this.#e=bt.default.createServer({maxHeaderSize:105536},this.#r.bind(this)),this.#e.on("connection",s=>{s.on("close",()=>{let i=this.sco.findIndex(o=>o==s);i!=-1&&this.sco.splice(i,1)}),this.sco.push(s)});let r=(0,gt.randomUUID)();x.accountId=Buffer.from(r).toString("hex").slice(0,16),x.apiId=Buffer.from(r).toString("ascii").slice(0,10),x.port=this.port}setPort(e){this.port=e,x.port=e}listen(e=0,n){if(isNaN(e))throw Error("port should be a number");this.#e.once("error",async r=>{r.code==="EADDRINUSE"?(S.RED(r.message),process.exit(1)):console.log(r)}),this.#e.listen(e,async()=>{let{port:r,address:s}=this.#e.address();this.setPort(r),ce&&(k.ip=ce),typeof n=="function"&&await n(r,ce);try{await this.onReady?.(r,k.ip),await nt(this.handlers,this.aws)}catch(i){console.error(i)}})}#n(e,n){n=n.endsWith("/")?n:`${n}/`;let r=this.customOfflineRequests.find(s=>{let i=!1,o=!0;return typeof s.filter=="string"?(s.filter.endsWith("/")||(s.filter+="/"),i=s.filter==n):s.filter instanceof RegExp&&(i=s.filter.test(n)),typeof s.method=="string"&&s.method.toUpperCase()!="ANY"?o=s.method.toUpperCase()==e:Array.isArray(s.method)&&(s.method.findIndex(c=>c.toUpperCase()=="ANY")!==-1||(o=s.method.findIndex(c=>c.toUpperCase()==e)!==-1)),i&&o});if(r)return r.callback}async#r(e,n){let{url:r,method:s}=e,i=new URL(r,x.dummyHost),o=this.#n(s,i.pathname);if(o)try{await o(e,n)}catch{n.writableFinished||n.end("Internal Server Error")}else{e.on("error",c=>{console.error(c.stack)});let a=()=>{n.setHeader("Content-Type","text/html"),n.statusCode=404,n.end($e)};this.#t?this.#t(e,n,a):a()}}fakeRebuildEmitter=async()=>{if(this.customBuildCallback)try{await this.customBuildCallback(Pn,!0)}catch(e){console.log(e)}console.log(`\x1B[32m${new Date().toLocaleString()} \u{1F504}\u2705 Rebuild\x1B[0m`)};async load(e){for(let n of e){switch(n.runtime.charAt(0)){case"n":n.runner=new ie(n);break;case"p":n.runner=new oe(n,this.fakeRebuildEmitter);break;case"r":n.runner=new le(n,this.fakeRebuildEmitter);break;case"l":n.runner=new N(n,this.fakeRebuildEmitter);break;case"c":n.runner=new F(n,this.fakeRebuildEmitter);break;default:n.runner=new se(n.runtime);break}let s=new $(n);this.addHandler(s)}}};var wt=require("node:fs/promises"),D=A(require("node:path")),Rt=require("node:url"),It=A(require("esbuild"));var St="0.0.24";function xt(t){let e=new Set;t.plugins&&(t.plugins=t.plugins.filter((r,s)=>typeof r!="object"||!r||!("name"in r)?!1:((!r.name||!r.name.length||typeof r.name!="string")&&(r.name=`plugin-${s}`,console.warn(`No Plugin name provided at index ${s}`)),e.has(r.name)?r.name=r.name+s:e.add(r.name),!0)));async function n({stop:r,lambdas:s,region:i,esbuild:o,getServices:a,setService:c,addLambda:l,log:d,setEndpoint:m,getEndpoint:h,getAwsProviderDefaults:p,setAwsProviderDefaults:g}){let y={build:{esbuild:t?.build?.esbuild??{},shimRequire:t?.build?.shimRequire,optimizeBuild:t?.build?.optimizeBuild},server:{port:t.server?.port,setEndpointEnvVar:t.server?.setEndpointEnvVar},onKill:[],llrt:t.llrt};if(t.defaults&&typeof t.defaults=="object"&&!Array.isArray(t.defaults)&&g(t.defaults),t.functions&&typeof t.functions=="object"&&!Array.isArray(t.functions))for(let[b,u]of Object.entries(t.functions))l(b,u);t.services&&(t.services.sqs&&c("sqs",t.services.sqs),t.services.sns&&c("sns",t.services.sns),t.services.dynamodb&&c("dynamodb",t.services.dynamodb));let f={stop:r,lambdas:s,region:i,esbuild:o,options:t,config:y,getServices:a,setService:c,addLambda:l,log:d,setEndpoint:m,getEndpoint:h,getAwsProviderDefaults:p};if(t.plugins){y.server.onReady=async(u,v)=>{for(let w of t.plugins)if(w.server?.onReady)try{await w.server.onReady.call(f,u,v)}catch(R){d.RED(w.name),console.error(R)}},y.buildCallback=async(u,v)=>{for(let w of t.plugins)if(w.buildCallback)try{await w.buildCallback.call(f,u,v)}catch(R){d.RED(w.name),console.error(R),v||process.exit(1)}};let b=t.plugins.reduce((u,v)=>(v.server?.request?.length&&u.push(...v.server.request),u),[]);b?.length&&(y.server.request=b.map(u=>(u.callback=u.callback.bind(f),u)));for(let u of t.plugins)if(u.onKill&&y.onKill.push(u.onKill.bind(f)),u.onInit)try{await u.onInit.call(f)}catch(v){throw d.RED(u.name),v}}return y}return n.plugins=t.plugins??[],n}var Ln=["js","mjs","cjs","ts","cts","mts"],On=async t=>{let e=D.default.dirname(D.default.toNamespacedPath(t)),n=D.default.basename(t,D.default.extname(t)),r=D.default.join(e,`__${n}.mjs`);await It.default.build({outfile:r,entryPoints:[t],bundle:!0,packages:"external",platform:"node",format:"esm",target:`node${process.versions.node.split(".")[0]}`,minify:!0,sourcemap:"inline",sourcesContent:!0});try{return await import((0,Rt.pathToFileURL)(r).href)}catch(s){throw s}finally{await(0,wt.rm)(r)}},Et=async t=>{if(t){if(typeof t=="string"){let e=D.default.posix.parse(t),n=D.default.posix.join(e.dir,e.name),r=e.ext.slice(1),s=D.default.posix.resolve(n);Ln.includes(r)&&(s+=`.${r}`);let i;try{i=await On(s)}catch(o){S.YELLOW(`Can not read 'defineConfig' from ${t}`),console.error(o),process.exit(1)}return{exportedFunc:i,configObjectName:r,configPath:s}}if(typeof t=="object"&&!Array.isArray(t))return{configObjectName:"__inline_config__",configPath:"inline define config",exportedFunc:xt(t)}}};var Nn=t=>{let e=t.split(";");return e.findIndex(r=>r.trim().toLowerCase().startsWith("path="))==-1&&e.push("Path=/"),e.join(";")},Se=(t,e,n)=>{let r={};if(t&&Object.entries(t).forEach(([s,i])=>{r[s.toLowerCase()]=Array.isArray(i)?`[${i.join(", ")}]`:i}),n)for(let[s,i]of Object.entries(n))r[s]=i;if(!Array.isArray(e))return r;if(!e.every(s=>typeof s=="string")){let s=new Error("Wrong 'cookies'. must be string[]",{cause:e}),i={"Content-Type":r["content-type"]??"application/json","x-amzn-ErrorType":"InternalFailure",...n};throw r["set-cookie"]&&(i["set-cookie"]=r["set-cookie"]),s.headers=i,s}return e=e.map(Nn),r["set-cookie"]=r["set-cookie"]?[r["set-cookie"],...e]:e,r};var xe=require("node:crypto");var pe=class t extends x{res;mockEvent;payload;constructor({res:e,req:n,body:r,mockEvent:s,multiValueHeaders:i,isBase64Encoded:o,lambdaName:a,parsedURL:c,requestId:l}){super(),this.res=e,this.mockEvent=s,this.payload=s.version==1?t.createApgV1Event({req:n,mockEvent:s,parsedURL:c,lambdaName:a,multiValueHeaders:i,isBase64Encoded:o,requestId:l,body:r}):t.createApgV2Event({req:n,mockEvent:s,parsedURL:c,requestId:l,isBase64Encoded:o,body:r})}static skipHeaders=["connection","content"];static createApgV2Event=({req:e,mockEvent:n,parsedURL:r,requestId:s,isBase64Encoded:i,body:o})=>{let{method:a,headers:c}=e,l=t.getPathParameters(n,r),d,m=n.methods.find(v=>v==a)??"ANY",h={},p="";for(let v of Array.from(new Set(r.searchParams.keys()))){let w=r.searchParams.getAll(v);p+=`&${w.map(R=>encodeURI(`${v}=${R}`)).join("&")}`,h[v]=w.join(",")}p&&(p=p.slice(1));let g=n.paths[0]=="/*"?"$default":`${m} ${r.pathname}`,y=new Date,f="127.0.0.1",b=c.host?.startsWith("localhost")?f:c.host?c.host.split(":")[0]:f,u={version:"2.0",routeKey:g,rawPath:r.pathname,rawQueryString:p,headers:t.getCustomHeaders(e,n),requestContext:{accountId:String(t.accountId),apiId:t.apiId,domainName:`localhost:${t.port}`,domainPrefix:"localhost",http:{method:a,path:r.pathname,protocol:"HTTP/1.1",sourceIp:b,userAgent:c["user-agent"]??""},requestId:s,routeKey:g,stage:"$default",time:y.toISOString(),timeEpoch:y.getTime()}};return o?(u.body=o,u.isBase64Encoded=i):u.isBase64Encoded=!1,Object.keys(h).length&&(u.queryStringParameters=h),Object.keys(l).length&&(u.pathParameters=l),c.cookie&&(u.cookies=c.cookie.split("; ")),d=u,d.headers["x-mock-type"]&&delete d.headers["x-mock-type"],d};static createApgV1Event=({req:e,mockEvent:n,parsedURL:r,lambdaName:s,isBase64Encoded:i,requestId:o,body:a})=>{let{method:c}=e,l={};n.proxy=="httpApi"&&(l.version="1.0");let d=n.paths[0];l.resource=d,l.path=r.pathname,l.httpMethod=c;let{headers:m,multiValueHeaders:h,apiKey:p}=t.getApiGV1Headers(e,n);l.headers=m,l.multiValueHeaders=h;let g=String(e.socket.remoteAddress),y=Object.fromEntries(r.searchParams);l.queryStringParameters=Object.keys(y).length?y:null;let f=t.getMultiValueQueryStringParameters(r.searchParams);l.multiValueQueryStringParameters=Object.keys(f).length?f:null;let b=new Date,u={accountId:String(t.accountId),apiId:t.apiId,domainName:`localhost:${t.port}`,domainPrefix:"localhost",extendedRequestId:"fake-id",httpMethod:c,identity:{accessKey:null,accountId:null,caller:null,cognitoAuthenticationProvider:null,cognitoAuthenticationType:null,cognitoIdentityId:null,cognitoIdentityPoolId:null,principalOrgId:null,sourceIp:g,user:null,userAgent:e.headers["user-agent"],userArn:null},path:r.pathname,protocol:"HTTP/1.1",requestId:o,requestTime:b.toISOString(),requestTimeEpoch:b.getTime(),resourceId:"exhmtv",resourcePath:d};n.proxy=="httpApi"?(u.identity.cognitoAmr=null,u.stage="$default"):(u.stage="dev",n.private&&(u.identity.apiKey=p,u.identity.apiKeyId="abcdefghjk")),l.requestContext=u;let v=t.getPathParameters(n,r);return l.pathParameters=Object.keys(v).length?v:null,l.stageVariables=null,l.body=a??null,l.isBase64Encoded=a?i:!1,l};returnError=e=>{if(this.res.writableFinished)return!0;let n=500,r=t.httpErrMsg;e&&t.isEndpointTimeoutError(e.errorMessage)&&(this.mockEvent.proxy=="httpApi"?(n=503,r=t.unavailable):(n=504,r=t.apgTimeoutMsg));let s=[["Date",new Date().toUTCString()],["Content-Type",t.contentType.json],["Content-Length",String(r.length)],t.keepAlive,["Apigw-Requestid","ETuSEj-PiGYEJdQ="]];return this.res.shouldKeepAlive=!1,this.res.writeHead(n,s),this.res.end(r)};#e=e=>{let n="",r=typeof e;if(r=="string"||r=="number"||r=="boolean")n=String(e);else if(e===null)n="";else throw new Error("");return n};sendV1Response=e=>{let n=[["Date",new Date().toUTCString()],["Apigw-Requestid",Buffer.from((0,xe.randomUUID)()).toString("base64").slice(0,16)],t.keepAlive],r=200;if(!e||isNaN(e.statusCode))throw S.RED(`Valid 'http' response payload must be an object which includes a valid 'statusCode'.
10
- Received:`),console.log(e),new Error;r=e.statusCode,e.headers&&typeof e.headers=="object"&&!Array.isArray(e.headers)&&Object.entries(e.headers).forEach(([l,d])=>{let m=t.normalizeHeaderKey(l),h=this.#e(d);n.push([m,h])}),e.multiValueHeaders&&typeof e.multiValueHeaders=="object"&&!Array.isArray(e.multiValueHeaders)&&Object.entries(e.multiValueHeaders).forEach(([l,d])=>{let m=t.normalizeHeaderKey(l);if(!Array.isArray(d))throw new Error;d.map(p=>this.#e(p)).forEach(p=>{n.push([m,p])})});let s=e.body;if(e.isBase64Encoded&&s){if(typeof s!="string")throw new Error;let l=Buffer.from(s,"base64").toString();if(Buffer.from(l).toString("base64")!=s)throw S.RED("response body is not properly base64 encoded"),new Error;s=l}n.findIndex(l=>l[0].toLowerCase()=="content-type")==-1&&n.push(["Content-Type",t.contentType.json]);let o=n.findIndex(l=>l[0].toLowerCase()=="content-length");o!=-1&&n.splice(o,1);let a=typeof s;a=="number"||a=="boolean"?s=String(s):s&&a!="string"&&S.YELLOW("API Gateway payload v1 return body must be typeof string, number or boolean ");let c=r==204?"0":s?String(Buffer.from(s).byteLength):"0";n.push(["Content-Length",c]),this.res.shouldKeepAlive=!1,this.res.writeHead(r,n),this.res.end(s)};sendV2Response=e=>{this.res.setHeader("Apigw-Requestid",Buffer.from((0,xe.randomUUID)()).toString("base64").slice(0,16)),this.res.setHeader("Date",new Date().toUTCString()),e?(typeof e.headers=="object"&&!Array.isArray(e.headers)&&Object.keys(e.headers).filter(s=>s!=="Apigw-Requestid"&&s!=="Date").forEach(s=>{this.res.setHeader(s,e.headers[s])}),e.statusCode?(this.res.statusCode=e.statusCode,e.cookies?.length&&this.res.setHeader("Set-Cookie",e.cookies)):this.res.statusCode=200):this.res.statusCode=200;let n="";if(!e)return this.res.end();if(typeof e=="object"&&typeof e.body=="string"&&(n=e.body,e.isBase64Encoded)){let r=Buffer.from(n,"base64").toString();if(Buffer.from(r).toString("base64")!=n)throw S.RED("response body is not properly base64 encoded"),new Error;n=r}typeof e=="string"?(this.res.setHeader("Content-Type",t.contentType.json),n=e):typeof e=="object"&&!e.statusCode&&(this.res.setHeader("Content-Type",t.contentType.json),n=JSON.stringify(e)),this.res.end(n)};sendResponse=e=>{if(!this.res.writableFinished)return this.mockEvent.version==1?this.sendV1Response(e):this.sendV2Response(e)}};var Dn=(t,e)=>{let n=e.url.stream?t:void 0;if(n){let r=!1,s=t.write.bind(t),i=t.setHeader.bind(t),o,a,c=m=>{a=a?Buffer.concat([a,m]):m},l=()=>{if(a){let m=Be(a),h=m.statusCode??200;try{let p=Se(m.headers,m.cookies);t.writeHead(h,p)}catch(p){t.writeHead(500,p.headers),t.end?.(x.amzMsgNull),delete p.headers}}else t.writeHead(200)};n.setHeader=(m,h)=>{if(m.toLowerCase()=="content-type"){if(h=="application/vnd.awslambda.http-integration-response")return r=!0,i("Content-Type",x.contentType.json);o=h}return i(m,h)};let d=!1;return n.write=(m,h,p)=>{if(n.headersSent)return s(m,h,p);if(d)try{let g=P.codec.decode(m),y=JSON.parse(g);if(Array.isArray(y))throw new Error("Invalid stream response");return y&&typeof y=="object"?(l(),s(m,h,p)):(t.writeHead(200,{"Content-Type":x.contentType.octet}),t.end())}catch(g){let y=new Error(`When using HttpResponseStream first chunk of .write() must be valid JSON and not be Array. Number and null will respones with 200.
11
- '${e.name}'`);return y.cause=g.message,console.error(y),te(t)}else if(r)Je(m)?d=!0:c(m);else{if(o==x.contentType.json)try{let y=P.codec.decode(m),f=JSON.parse(y);if(f===null||typeof f=="number")throw new Error(y)}catch(y){let f=new Error(`When 'Content-Type' is 'application/json' first chunk of .write() must be parsable JSON and not be null or number.
12
- '${e.name}'`);return f.cause=y.message,console.error(f),te(t)}let g={"Content-Type":o??x.contentType.octet};return n.writeHead(200,g),s(m,h,p)}},n}},Tn=(t,e,n,r)=>{let s=Y(t),i=s?t.getParsedResponse():t,o,a=!1;if(i&&typeof i=="object"&&i.statusCode){let c=isNaN(i.statusCode),l=c?500:i.statusCode;if(a=!c&&(i.isBase64Encoded==!0||i.isBase64Encoded=="true"),i.headers||i.cookies)try{let d=Se(i.headers,i.cookies,r);e.writeHead(l,d)}catch(d){return e.writeHead(500,d.headers),delete d.headers,console.error(d),e.end(x.amzMsgNull)}else e.writeHead(l,{"Content-Type":x.contentType.json,...r});n?o=i:(typeof i.body<"u"&&(o=i.body),e.headersSent||e.setHeader("Content-Type",s?x.contentType.octet:x.contentType.json))}else e.writeHead(200,{"Content-Type":x.contentType.json,...r}),o=i;!e.headersSent&&!n&&s&&e.setHeader("Content-Type",x.contentType.octet),n?o instanceof Uint8Array?e.end(o):e.end(JSON.stringify(o)):((typeof o=="number"||typeof o=="boolean"||o==null||o instanceof Object)&&(o=JSON.stringify(o)),o&&a&&(o=Buffer.from(o,"base64")),e.end(o))};function Mn(t,e){let n=t["access-control-request-method"];return e=="OPTIONS"&&t.origin&&n&&["GET","HEAD","POST","PUT","DELETE","PATCH"].includes(n)}function At(t,e){let n=e.origin;return n&&t.allowOrigins.find(s=>s=="*"||s=="http://*"||s=="https://*")?!0:!!t.allowOrigins.find(s=>s==n)}function qn(t,e){if(!t.allowMethods?.length)return!1;if(t.allowMethods.find(s=>s=="*"))return!0;let r=e["access-control-request-method"];return!!t.allowMethods.find(s=>s==r)}function jn(t,e){if(!qn(t,e)||!At(t,e))return!1;let n=e["access-control-request-headers"]?e["access-control-request-headers"].split(",").filter(Boolean):[];return n.length?t.allowHeaders?.length?n.every(r=>t.allowHeaders.find(s=>s.toLowerCase()==r.toLowerCase())):!1:!0}var Pt=t=>({filter:/^\/@url\//,callback:async(e,n)=>{let{url:r,method:s,headers:i}=e;if(Ve(n,s))return;let o=new URL(r,x.dummyHost),a=_(n),c=k.parseNameFromUrl(o.pathname),l=t.handlers.find(f=>f.name==c);if(!l?.url)return n.statusCode=404,n.end("Not Found");let d;if(l.url.cors){if(Mn(i,s)){let b=jn(l.url.cors,i),u={"Content-Type":x.contentType.json};return b&&(u["access-control-allow-origin"]=i.origin,l.url.cors.allowMethods.find(v=>v=="*")?u["access-control-allow-methods"]=i["access-control-request-method"]:u["access-control-allow-methods"]=l.url.cors.allowMethods.join(","),l.url.cors.allowHeaders?.length&&(u["access-control-allow-headers"]=l.url.cors.allowHeaders.join(",")),typeof l.url.cors.maxAge=="number"&&l.url.cors.maxAge>-1&&(u["access-control-max-age"]=`${l.url.cors.maxAge}`),l.url.cors.allowCredentials&&(u["access-control-allow-credentials"]="true")),n.writeHead(200,u),n.end()}At(l.url.cors,i)&&(d={"access-control-allow-origin":i.origin},l.url.cors.exposeHeaders?.length&&(d["access-control-expose-headers"]=l.url.cors.exposeHeaders.join(",")),l.url.cors.allowCredentials&&(d["access-control-allow-credentials"]="true"))}let m=x.getIsBase64Encoded(i),h=await T(e,m),p=pe.createApgV2Event({req:e,mockEvent:l.url,parsedURL:o,requestId:a,body:h,isBase64Encoded:m}),g=`/@url/${l.name}`,y=o.pathname.slice(g.length);y||(y="/"),p.requestContext.accountId="anonymous",p.rawPath=y,p.requestContext.http.path=y;try{let f=Dn(n,l),b=await l.invoke(p,l.url,void 0,f);if(!b)return n.end();Tn(b,n,f,d)}catch(f){console.error(f),te(n,d)}}});var kt=t=>({filter:/(^\/2015-03-31\/functions\/.*\/invocations)|(^\/@invoke\/)/,callback:async(e,n)=>{let{url:r,headers:s}=e,i=new URL(r,"http://localhost:3003"),o=k.parseNameFromUrl(i.pathname),a=t.handlers.find(f=>f.name==o),c=_(n);if(n.setHeader("Content-Type","application/json"),e.on("error",f=>{n.statusCode=502,n.end(JSON.stringify(f))}),!a){let{region:f,accountId:b}=t.aws;return n.statusCode=404,n.setHeader("x-amzn-errortype","ResourceNotFoundException"),n.end(ee(o,f,b))}let l=s["x-amz-invocation-type"],d=K(s["x-amz-client-context"]);if(d instanceof Error)return n.setHeader("x-amzn-errortype","InvalidRequestContentException"),n.statusCode=400,n.end(Z);let m=l=="DryRun"?204:l=="Event"?202:200,h=await T(e),p=G(h);if(n.setHeader("X-Amzn-Trace-Id","root=1-xxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx;sampled=0"),p instanceof Error)return n.statusCode=400,n.setHeader("x-amzn-errortype","InvalidRequestContentException"),n.end(X(p.message));n.setHeader("X-Amz-Executed-Version","$LATEST");let g=new Date,y={};n.statusCode=m,m!==200&&n.end(),m==202&&(y.kind="async");try{let f=await a.invoke(p,y,d);if(m==200){if(typeof f>"u"){n.end();return}let b=Y(f),u=b?f.buffer:f;b?u=P.codec.decode(u):typeof u!="string"&&(u=JSON.stringify(u)),n.end(u)}}catch(f){let b,u=!1;if(typeof f=="string")try{b=JSON.parse(f),u=!0}catch{}else b=f;n.writableFinished||(n.setHeader("X-Amz-Function-Error",b.errorType??b.message??""),n.statusCode=200,n.end(u?f:JSON.stringify(b)))}}});var we=require("node:crypto"),Lt=require("node:timers/promises");var Ot=t=>({filter:"/2015-03-31/functions",method:"POST",async callback(e,n){let r=await T(e),s=JSON.parse(r),{FunctionName:i,Handler:o,Environment:a,Runtime:c,Timeout:l,MemorySize:d}=s;t.addLambda(i,{handler:o,environment:a?.Variables,runtime:c,timeout:l,memorySize:d}),t.isDynamicBuild=!0,t.setEsBuildConfig(),await t.buildContext.dispose(),await t.buildAndWatch(),await(0,Lt.setTimeout)(100),n.statusCode=201,n.end(r)}}),Nt=t=>({filter:/\/2015-03-31\/functions\/*/,method:"GET",async callback(e,n){let{url:r}=e,i=new URL(r,"http://localhost:3003").pathname.slice(22),o=t.getLambdaByName(i);if(!o){n.statusCode=404,n.end();return}let a={Code:{RepositoryType:"S3",Location:"https://s3.com/snapshots/1234543"},Tags:{},Configuration:{Architectures:["arm64"],CodeSha256:"WrLckXVmmfsSPvP/15FqPi9Nt9qQBaspP6RV3T137K4=",SigningJobArn:"",FunctionArn:`arn:aws:lambda:${t.aws.region}:${t.aws.accountId}:function:${i}`,FunctionName:i,Handler:o.handlerPath,Timeout:o.timeout,Runtime:o.runtime,MemorySize:o.memorySize,Environment:{Variables:Dt(o.environment)},State:"Active",LastUpdateStatus:"Successful",LastModified:new Date().toISOString(),Version:"$LATEST",Role:`arn:aws:iam::${t.aws.accountId}:role/fake-role-name`,RevisionId:(0,we.randomUUID)(),PackageType:"Zip",Description:"",EphemeralStorage:{Size:512},TracingConfig:{Mode:"PassThrough"},VpcConfig:{Ipv6AllowedForDualStack:!1,VpcId:"",SecurityGroupIds:[],SubnetIds:[]},CodeSize:5867,SnapStart:{OptimizationStatus:"Off",ApplyOn:"None"},LoggingConfig:{LogFormat:"Text",LogGroup:`/aws/lambda/${i}`}}};n.end(JSON.stringify(a))}}),Hn=["AWS_EXECUTION_ENV","AWS_LAMBDA_FUNCTION_VERSION","AWS_LAMBDA_FUNCTION_NAME","_HANDLER","IS_OFFLINE","IS_LOCAL","AWS_SAM_LOCAL","AWS_LAMBDA_FUNCTION_MEMORY_SIZE"];function Dt(t){let e={};for(let[n,r]of Object.entries(t))Hn.includes(n)||(e[n]=String(r));return e}var Tt=t=>({method:"GET",filter:/\/2015-03-31\/functions\/.*\/versions/,async callback(e,n){let{url:r}=e,i=new URL(r,"http://localhost:3003").pathname.slice(22);i=i.slice(0,i.indexOf("/"));let o=t.getLambdaByName(i);if(!o){n.statusCode=404,n.end();return}let a={Versions:[{Architectures:["arm64"],CodeSha256:"WrLckXVmmfsSPvP/15FqPi9Nt9qQBaspP6RV3T137K4=",SigningJobArn:"",FunctionArn:`arn:aws:lambda:${t.aws.region}:${t.aws.accountId}:function:${i}`,FunctionName:i,Handler:o.handlerPath,Timeout:o.timeout,Runtime:o.runtime,MemorySize:o.memorySize,Environment:{Variables:Dt(o.environment)},State:"Active",LastUpdateStatus:"Successful",LastModified:new Date().toISOString(),Version:"$LATEST",Role:`arn:aws:iam::${t.aws.accountId}:role/fake-role-name`,RevisionId:(0,we.randomUUID)(),PackageType:"Zip",Description:"",EphemeralStorage:{Size:512},TracingConfig:{Mode:"PassThrough"},VpcConfig:{Ipv6AllowedForDualStack:!1,VpcId:"",SecurityGroupIds:[],SubnetIds:[]},CodeSize:5867,SnapStart:{OptimizationStatus:"Off",ApplyOn:"None"},LoggingConfig:{LogFormat:"Text",LogGroup:`/aws/lambda/${i}`}}]};n.end(JSON.stringify(a))}}),Mt=t=>({method:"GET",filter:/\/2020-06-30\/functions\/.*\/code-signing-config/,async callback(e,n){let{url:r}=e,i=new URL(r,"http://localhost:3003").pathname.slice(22);if(i=i.slice(0,i.indexOf("/")),!t.getLambdaByName(i)){n.statusCode=404,n.end();return}let a={CodeSigningConfigArn:"",FunctionName:i};n.end(JSON.stringify(a))}});var qt=require("@smithy/eventstream-codec");var _n=(t,e)=>{let n=Buffer.from(t,e);return new Uint8Array(n.buffer,n.byteOffset,n.byteLength/Uint8Array.BYTES_PER_ELEMENT)},Cn=t=>Buffer.from(t,t.byteOffset,t.byteLength).toString("utf8"),Re=new qt.EventStreamCodec(Cn,_n),me=class t{res;static complete=Buffer.from([0,0,0,102,0,0,0,84,31,86,200,105,11,58,101,118,101,110,116,45,116,121,112,101,7,0,14,73,110,118,111,107,101,67,111,109,112,108,101,116,101,13,58,99,111,110,116,101,110,116,45,116,121,112,101,7,0,16,97,112,112,108,105,99,97,116,105,111,110,47,106,115,111,110,13,58,109,101,115,115,97,103,101,45,116,121,112,101,7,0,5,101,118,101,110,116,123,125,112,6,212,103]);constructor(e){this.res=e}write(e,n,r){this.res.write(Re.encode({headers:this.#e("PayloadChunk",x.contentType.octet),body:e}),n,r)}end(e){e?this.write(e,"utf8",()=>{this.res.end(t.complete)}):this.res.end(t.complete)}setHeader(e,n){e=="Content-Type"&&this.res.setHeader("Content-Type",n)}destroy(){this.res.destroy()}endWithError(e){let n={ErrorCode:e.errorType,ErrorDetails:JSON.stringify(e)},r=Array.from(Buffer.from(JSON.stringify(n)).values());this.res.end(Re.encode({headers:this.#e("InvokeComplete",x.contentType.json),body:new Uint8Array(r)}))}endWithJson(e){let n=Array.from(Buffer.from(JSON.stringify(e)).values());this.res.write(Re.encode({headers:this.#e("PayloadChunk",x.contentType.octet),body:new Uint8Array(n)}),()=>{this.res.end(t.complete)})}#e(e,n,r="event"){return{":event-type":{type:"string",value:e},":content-type":{type:"string",value:n},":message-type":{type:"string",value:r}}}};var jt=t=>({filter:/^\/2021-11-15\/functions\//,callback:async(e,n)=>{let{url:r,headers:s}=e,i=new URL(r,"http://localhost:3003"),o=_(n),a=k.parseNameFromUrl(i.pathname),c=t.handlers.find(p=>p.name==a),l=await T(e),d=G(l);if(n.setHeader("X-Amzn-Trace-Id","root=1-xxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx;sampled=0"),d instanceof Error)return n.statusCode=400,n.setHeader("x-amzn-errortype","InvalidRequestContentException"),n.end(X(d.message));let m=K(s["x-amz-client-context"]);if(m instanceof Error)return n.setHeader("x-amzn-errortype","InvalidRequestContentException"),n.statusCode=400,n.end(Z);let h=new me(n);if(c){let p=c.url?.stream??{};try{let g=await c.invoke(d,p,m,h);g&&h.endWithJson(g)}catch(g){n.writableFinished||h.endWithError(g)}}else{let{region:p,accountId:g}=t.aws;n.statusCode=404,n.end(ee(a,p,g))}}});var Ft=t=>[Ot(t),Tt(t),Mt(t),kt(t),jt(t),Pt(t),Nt(t)];var Ee=process.cwd(),Wn=3,$n=1024,Un={IS_OFFLINE:!0,IS_LOCAL:!0,AWS_SAM_LOCAL:!0},zn=Ee.split(L.default.sep)[0],Vn=new RegExp(`^.*:${zn}`),Bn=t=>Vn.test(t);process.title="node (exlo)";var ue=class extends de{#e;options;config;esBuildConfig;buildContext={};customEsBuildConfig;optimizeBuild=!1;nodeVersion=!1;onKill=[];shimRequire=!1;port=0;onceServerReady=[];isDynamicBuild=!1;endpoints={};setLambdaEndpointEnvVar=!0;constructor(e,n){super(e,{debug:typeof n.debug=="boolean"?n.debug:!1}),this.#e=[],this.options=n,this.options.customEsBuildConfig&&(this.customEsBuildConfig=this.options.customEsBuildConfig),typeof this.options.config?.server?.setEndpointEnvVar=="boolean"&&(this.setLambdaEndpointEnvVar=this.options.config.server.setEndpointEnvVar),this.options.config&&(typeof this.options.config=="string"||typeof this.options.config=="object"&&!Array.isArray(this.options.config))&&(this.config=this.options.config),typeof this.options.optimizeBuild=="boolean"&&(this.optimizeBuild=this.options.optimizeBuild),typeof this.options.shimRequire=="boolean"&&(this.shimRequire=this.options.shimRequire),this.aws.runtime?.startsWith("node")?this.nodeVersion=this.aws.runtime?.replace(/[^0-9]/g,""):this.nodeVersion="20",S.BR_BLUE("Starting exlo...")}async start(){this.#s(),this.#e=this.#r(),await this.#o(),this.setEsBuildConfig(),await this.buildAndWatch()}setEsBuildConfig(){let n={sourcemap:!0,minify:!1,entryPoints:this.#e.filter(r=>r.runtime.startsWith("n")||r.runtime=="llrt").map(r=>r.esEntryPoint),outdir:L.default.join(Ee,".exlo","build"),metafile:!0,bundle:!0,platform:"node",target:"node20",format:"cjs",outbase:"src",plugins:[],external:["esbuild","llrt","llrt:*"],dropLabels:[]};if(typeof process.env.NODE_ENV=="string"&&(n.define={"process.env.NODE_ENV":`"${process.env.NODE_ENV}"`}),typeof this.nodeVersion=="string"&&!isNaN(Number(this.nodeVersion))){Number(process.versions.node.slice(0,2))<Number(this.nodeVersion)&&S.RED(`You are running on NodeJS ${process.version} which is lower than defined '${this.nodeVersion}'.`),n.target=`node${this.nodeVersion}`;let r=()=>this.sco;n.plugins?.push(Oe({nodeVersion:Number(this.nodeVersion),shimRequire:this.shimRequire,optimizeBuild:this.optimizeBuild,buildCallback:this.buildCallback,getSockets:r}))}this.customEsBuildConfig&&(n=Ne(n,this.customEsBuildConfig)),this.esBuildConfig=n}async buildAndWatch(){this.buildContext=await Ie.default.context(this.esBuildConfig),await this.buildContext.watch()}buildCallback=async(e,n)=>{if(n||this.isDynamicBuild)await this.#t(e);else{let{outputs:r}=e.metafile;if(this.#i(r),this.customBuildCallback)try{await this.customBuildCallback(e,!1)}catch(o){console.log(o)}this.#a();let s=this,i=await new Promise(o=>{this.listen(this.port,async(a,c)=>{let l=`http://localhost:${a}`;S.PINK(`Lambda endpoint: ${l}`),this.endpoints.lambda=l,this.setLambdaEndpointEnvVar&&(this.runtimeConfig.environment.AWS_ENDPOINT_URL_LAMBDA=l,this.aws.environment.AWS_ENDPOINT_URL_LAMBDA=l),await s.load(s.#e);for(let d of s.#e)d.setEnv("LOCAL_PORT",a),d.setEnv("AWS_LAMBDA_RUNTIME_API",`127.0.0.1:${a}`),this.setLambdaEndpointEnvVar&&d.setEnv("AWS_ENDPOINT_URL_LAMBDA",l);o({url:l,port:a})})});this.onceServerReady.forEach(o=>{o(i)})}};async#t(e){if(e?.errors?.length)S.RED("Build failed:"),console.error(e.errors);else{this.#i(e.metafile.outputs);try{await this.load(this.#e),this.customBuildCallback&&await this.customBuildCallback(e,!0)}catch(n){console.error(n)}console.log(`\x1B[32m${new Date().toLocaleString()} \u{1F504}\u2705 Rebuild\x1B[0m`)}}#n(e){let n=this.aws,r=n.runtime,s=this.runtimeConfig.environment.AWS_REGION??this.runtimeConfig.environment.REGION,o=n.functions[e],a=o.handler,c=L.default.extname(a),l=c.slice(1),d=L.default.resolve(a.replace(c,"")),m=n.getFunction(e),h=m.runtime??r,p={name:e,runtime:m.runtime??r,handlerPath:a,handlerName:l,esEntryPoint:d,memorySize:o.memorySize??this.runtimeConfig.memorySize??$n,timeout:o.timeout??this.runtimeConfig.timeout??Wn,sqs:[],ddb:[],environment:{AWS_EXECUTION_ENV:`AWS_Lambda_${h}`,AWS_LAMBDA_FUNCTION_VERSION:"$LATEST",AWS_LAMBDA_FUNCTION_NAME:e,_HANDLER:L.default.basename(a),...this.runtimeConfig.environment,...o.environment,...Un},invoke:async(g,y)=>{let f=this.getHandlerByName(`/@invoke/${e}`);if(f)return await f.invoke(g,y);S.RED(`'${e}' is not mounted yet.
13
- Please invoke it after the initial build is completed.`)},invokeSub:[],invokeSuccessSub:[],invokeErrorSub:[],setEnv:(g,y)=>{this.setEnv(e,g,y)},shutdown:async()=>{let g=this.getHandlerByName(`/@invoke/${e}`);g&&await g.shutdown()}};if(p.onError=J(o.onError),p.onError?.kind=="lambda"&&(S.YELLOW("Dead-Letter queue could only be a SNS or SQS service"),delete p.onError),o.destinations&&typeof o.destinations=="object"&&(p.onFailure=J(o.destinations.onFailure),p.onSuccess=J(o.destinations.onSuccess)),p.onInvoke=g=>{p.invokeSub.push(g)},p.onInvokeSuccess=g=>{p.invokeSuccessSub.push(g)},p.onInvokeError=g=>{p.invokeErrorSub.push(g)},process.env.NODE_ENV&&(p.environment.NODE_ENV=process.env.NODE_ENV),s&&(p.environment.AWS_REGION=s,p.environment.AWS_DEFAULT_REGION=s),p.environment.AWS_LAMBDA_FUNCTION_MEMORY_SIZE=p.memorySize,p.url=Te(o),o.triggers?.length){let{sqs:g,ddb:y}=je({triggers:o.triggers});p.sqs=g,p.ddb=y}return p}#r(){let e=this.aws.functions;return Object.keys(e).reduce((s,i)=>{let o=this.#n(i);return s.push(o),s},[])}#i(e){let n=Object.keys(e).filter(r=>!r.endsWith(".map")&&e[r].entryPoint).map(r=>{let i=e[r].entryPoint,o="";Bn(i)&&(i=i.split(":").slice(1).join(":")),L.default.isAbsolute(i)||(i=L.default.resolve(i));let a=i.lastIndexOf(".");return a!=-1&&(o=L.default.extname(i),i=i.slice(0,a)),{esOutputPath:L.default.join(Ee,r),entryPoint:i,ext:o}});for(let r of this.#e){let s=n.find(i=>i?.entryPoint==r.esEntryPoint);s&&(r.esOutputPath=s.esOutputPath,r.entryPoint=`${s.entryPoint}${s.ext}`)}}#s(){let{environment:e,memorySize:n,timeout:r}=this.aws;this.runtimeConfig.memorySize=n,this.runtimeConfig.timeout=r,this.runtimeConfig.environment=e?{...e}:{};let s=Object.keys(process.env).filter(i=>i.startsWith("AWS_"));for(let i of s)this.runtimeConfig.environment[i]=process.env[i];"FORCE_COLOR"in this.runtimeConfig.environment||process.env.FORCE_COLOR?.toLowerCase()==="false"||process.env.FORCE_COLOR?.toLowerCase()==="no"||process.env.FORCE_COLOR==="0"||("COLORTERM"in process.env||process.env.TERM?.includes("256"))&&(this.runtimeConfig.environment.FORCE_COLOR="true")}setEnv(e,n,r){let s=this.#e.findIndex(i=>i.name==e);if(s>-1){this.#e[s].environment[n]=r;let i=this.aws.getFunction(e);i&&(i.environment||(i.environment={}),i.environment[n]=r)}else S.RED(`Can not set env variable '${n}' on '${e}'`)}addLambda(e,n){if(!n.triggers)n.triggers=[];else if(!Array.isArray(n.triggers))throw new Error("Lambda 'triggers' must be an array when defined.");this.#s(),this.aws.functions[e]=n;let r=this.#n(e);this.#e.push(r)}getLambdaByName(e){return this.#e.find(n=>n.name==e)}buildDefineConfigParam(){let e=this;return{stop:async r=>{await this.kill(r)},lambdas:this.#e,addLambda:(r,s)=>{this.addLambda(r,s)},esbuild:Ie.default,getServices(){return{s3:e.aws.services.s3,sqs:e.aws.services.sqs,sns:e.aws.services.sns,dynamodb:e.aws.services.dynamodb}},setService(r,s){switch(r){case"s3":e.aws.services.s3=s;break;case"sns":e.aws.services.sns=s;break;case"sqs":e.aws.services.sqs=s;break;case"dynamodb":e.aws.services.dynamodb=s;break;default:break}},setEndpoint:(r,s,i)=>{if(this.endpoints[r]=s,typeof i=="string"){this.aws.environment[i]=s;for(let o of this.#e)this.setEnv(o.name,i,s)}},getEndpoint:r=>this.endpoints[r],getAwsProviderDefaults:()=>({accountId:e.aws.accountId,region:e.aws.region,runtime:e.aws.runtime,memorySize:e.aws.memorySize,timeout:e.aws.timeout,environment:{...e.aws.environment}}),setAwsProviderDefaults:({accountId:r,environment:s,memorySize:i,region:o,runtime:a,timeout:c})=>{r&&(e.aws.accountId=r),s&&(e.aws.environment=s),i&&(e.aws.memorySize=i),o&&(e.aws.region=o),a&&(e.aws.runtime=a),c&&(e.aws.timeout=c)},log:S}}async resolveConfig(){let e=await Et(this.config);if(e?.exportedFunc){let n,{exportedFunc:r,configObjectName:s,configPath:i}=e;if(typeof r[s]=="function")n=r[s];else if(typeof r=="function")n=r;else if(typeof r.default=="function")n=r.default;else throw new Error(`Can not read exlo config at: ${i}`);return n}}onBeforeApplyConfigCallbacks=[];onBeforeApplyConfig(e){this.onBeforeApplyConfigCallbacks.push(e)}async#l(e){for(let n of this.onBeforeApplyConfigCallbacks)await n(e)}async#o(){let e=this.buildDefineConfigParam(),n=Ft(this).map(a=>(a.callback=a.callback.bind(e),a)),r=await this.resolveConfig(),s={};r&&(await this.#l(r),s=await r(e),Array.isArray(s.onKill)&&this.onKill.push(...s.onKill),s.build&&(typeof s.build.shimRequire=="boolean"&&(this.shimRequire=s.build.shimRequire),typeof s.build.optimizeBuild=="boolean"&&(this.optimizeBuild=s.build.optimizeBuild)),!this.llrt&&s.llrt&&(this.llrt=s.llrt,N.llrtBoostrapPath=this.llrt.boostrapPath,this.llrt.environment&&(N.llrtEnvs=this.llrt.environment)),typeof s.buildCallback=="function"&&(this.customBuildCallback=s.buildCallback),s.server&&typeof s.server=="object"&&(Array.isArray(s.server.request)&&n.unshift(...s.server.request),typeof s.server.port=="number"&&!this.port&&(this.port=s.server.port),typeof s.server.onReady=="function"&&(this.onReady=s.server.onReady),typeof s.server.setEndpointEnvVar=="boolean"&&(this.setLambdaEndpointEnvVar=s.server.setEndpointEnvVar))),this.customOfflineRequests=n;let i=s?.build?.esbuild;if(!i)return;let o=De(i);Object.keys(o).length&&(this.customEsBuildConfig?this.customEsBuildConfig={...this.customEsBuildConfig,...o}:this.customEsBuildConfig=o)}#a=()=>{let e=this.options.port;isNaN(e)||(this.port=e)};async kill(e){this.buildContext.dispose&&await this.buildContext.dispose();for(let n of Ht.EventSourceMapping.SOURCES)try{await n.disable()}catch(r){console.error(r)}for(let n of this.handlers)n.clear?.();this.stop(e);for(let n of this.onKill)try{await n()}catch(r){console.error(r)}}};async function Jn(t){let e=_t(t);return await e.exlo.start(),await e.waitServer,{port:e.listeningPort,url:e.listeningUrl,endpoints:e.exlo.endpoints,async kill(){await e.exlo.kill()},[Symbol.asyncDispose]:async()=>{await e.exlo.kill()}}}var Ae=class{accountId="123456789012";region="us-east-1";timeout=3;memorySize=1024;environment={};services={};functions={};runtime=`node${process.versions.node.split(".")[0]}.x`;getFunction(e){return this.functions[e]}};function _t(t){let e=new Ae,n={};t&&(t.port&&(n.port=t.port),typeof t.debug=="boolean"&&(n.debug=t.debug),t.build&&(typeof t.build.shimRequire=="boolean"&&(n.shimRequire=t.build.shimRequire),typeof t.build.optimizeBuild=="boolean"&&(n.optimizeBuild=t.build.optimizeBuild),t.build.esbuild&&(n.customEsBuildConfig=t.build.esbuild)),t.config&&(n.config=t.config),t.functions&&(e.functions=t.functions),t.defaults&&(t.defaults.environment&&(e.environment=t.defaults.environment),t.defaults.timeout&&(e.timeout=t.defaults.timeout),t.defaults.memorySize&&(e.memorySize=t.defaults.memorySize),t.defaults.runtime&&(e.runtime=t.defaults.runtime),t.defaults.accountId&&(e.accountId=t.defaults.accountId),t.defaults.region&&(e.region=t.defaults.region)));let r;t?.llrt?r=t.llrt:typeof t?.config=="object"&&t.config.llrt&&(r=t.config.llrt);let s=new ue({aws:e,llrt:r},n);typeof t?.onKill=="function"&&s.onKill.push(t.onKill);let i;s.onceServerReady.push(a=>{o.listeningPort=a.port,o.listeningUrl=a.url,i()});let o={listeningPort:0,listeningUrl:"",exlo:s,waitServer:new Promise(a=>{i=a})};return o}0&&(module.exports={createAppRunner,exloVersion,run});
1
+ "use strict";var Ct=Object.create;var z=Object.defineProperty;var Wt=Object.getOwnPropertyDescriptor;var $t=Object.getOwnPropertyNames;var Ut=Object.getPrototypeOf,zt=Object.prototype.hasOwnProperty;var Vt=(t,e)=>{for(var n in e)z(t,n,{get:e[n],enumerable:!0})},Pe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of $t(e))!zt.call(t,s)&&s!==n&&z(t,s,{get:()=>e[s],enumerable:!(r=Wt(e,s))||r.enumerable});return t};var A=(t,e,n)=>(n=t!=null?Ct(Ut(t)):{},Pe(e||!t||!t.__esModule?z(n,"default",{value:t,enumerable:!0}):n,t)),Bt=t=>Pe(z({},"__esModule",{value:!0}),t);var Jn={};Vt(Jn,{createAppRunner:()=>Ht,exloVersion:()=>vt,run:()=>Bn});module.exports=Bt(Jn);var L=A(require("node:path")),Ie=A(require("esbuild")),Ft=require("exlo/internal/esm");var fe=A(require("node:path")),ke=require("node:module"),Jt={},W=require,V={};function j(t){if(V[t])return V[t];if(typeof W=="function"&&typeof W.resolve=="function"){let n=fe.default.resolve(W.resolve(t),"../../");return V[t]=n,n}W=(0,ke.createRequire)(new URL(".",Jt.url));let e=fe.default.resolve(W.resolve(t),"../../");return V[t]=e,e}var Le=["aws-sdk","@aws-sdk/*","@angular/core","@angular/platform-browser","@aws-sdk/*","@elastic/elasticsearch","@hapi/joi","@opensearch-project/opensearch","@smithy/*","axios","axios-retry","axios-cache-interceptor","aws-serverless-express","aws-sdk","body-parser","classnames","clsx","cookie-parser","cors","core-js","date-fns","dayjs","express","helmet","joi","koa","leaflet","lodash","mysql","mysql2","mongodb","mongoose","moment","http-proxy","http-proxy-middleware","react","react/*","react-dom","react-dom/*","react-hook-form","react-infinite-scroll-component","react-modal","react-rangeslider","react-responsive","react-select","react-scroll","react-slick","react-lazy-load","react-lazyload","react-redux","react-router","react-router-dom","redux","redux-persist","regenerator-runtime","serve-static","express-session","exlo/*","serverless-http","sequelize","svelte","svelte/*","typeorm","pg","pg-hstore","prop-types","underscore","uuid","vue","xmlbuilder","yup","zod","sharp"];var Qt=t=>`import { createRequire as __crE_ } from "${t}module";import { fileURLToPath as __futP_ } from "${t}url";import { dirname as __dN_ } from "${t}path";global.__filename = __futP_(import.meta.url);global.__dirname = __dN_(__filename);global.require = __crE_(__filename);
2
+ `,Oe=({nodeVersion:t,shimRequire:e,optimizeBuild:n,buildCallback:r,getSockets:s})=>({name:"build-optimizer-plugin",setup(i){let o=!1;if(i.onEnd(async a=>{if(!o&&a?.errors?.length&&process.exit(1),o)for(let c of s())c.writable&&c.destroy();try{await r(a,o,i.initialOptions.format,i.initialOptions.outdir)}catch(c){console.log(c)}o=!0}),n&&(i.initialOptions.external.push(...Le),i.initialOptions.format=="esm"&&(i.initialOptions.mainFields?i.initialOptions.mainFields.includes("module")||(i.initialOptions.mainFields.includes("main")?i.initialOptions.mainFields.unshift("module"):i.initialOptions.mainFields.unshift("module","main")):i.initialOptions.mainFields=["module","main"])),i.initialOptions.format=="esm"&&e){let a=Qt(t<18?"":"node:");i.initialOptions.banner?i.initialOptions.banner.js?i.initialOptions.banner.js=`${a}${i.initialOptions.banner.js}`:i.initialOptions.banner.js=a:i.initialOptions.banner={js:a}}}});var Ne=(t,e)=>(Array.isArray(e.plugins)&&t.plugins.unshift(...e.plugins),Array.isArray(e.external)&&t.external.push(...e.external),Array.isArray(e.entryPoints)&&t.entryPoints.push(...e.entryPoints),"sourcemap"in e&&(t.sourcemap=e.sourcemap),typeof e.sourceRoot=="string"&&(t.sourceRoot=e.sourceRoot),typeof e.format=="string"&&(t.format=e.format),e.outExtension&&typeof e.outExtension=="object"&&!Array.isArray(e.outExtension)&&(t.outExtension=e.outExtension),"sourcesContent"in e&&(t.sourcesContent=e.sourcesContent),typeof e.minify=="boolean"&&(t.minify=e.minify),typeof e.minifyWhitespace=="boolean"&&(t.minifyWhitespace=e.minifyWhitespace),typeof e.minifyIdentifiers=="boolean"&&(t.minifyIdentifiers=e.minifyIdentifiers),typeof e.minifySyntax=="boolean"&&(t.minifySyntax=e.minifySyntax),typeof e.jsx=="string"&&(t.jsx=e.jsx),typeof e.jsxFactory=="string"&&(t.jsxFactory=e.jsxFactory),typeof e.jsxFragment=="string"&&(t.jsxFragment=e.jsxFragment),typeof e.jsxImportSource=="string"&&(t.jsxImportSource=e.jsxImportSource),"jsxDev"in e&&(t.jsxDev=e.jsxDev),"jsxSideEffects"in e&&(t.jsxSideEffects=e.jsxSideEffects),typeof e.outdir=="string"&&(t.outdir=e.outdir),typeof e.outbase=="string"&&(t.outbase=e.outbase),(typeof e.target=="string"||Array.isArray(e.target))&&(t.target=e.target),typeof e.tsconfig=="string"&&(t.tsconfig=e.tsconfig),e.tsconfigRaw&&["string","object"].includes(typeof e.tsconfigRaw)&&(t.tsconfigRaw=e.tsconfigRaw),typeof e.legalComments=="string"&&(t.legalComments=e.legalComments),Array.isArray(e.pure)&&(t.pure=e.pure),Array.isArray(e.drop)&&(t.drop=e.drop),Array.isArray(e.dropLabels)&&t.dropLabels.push(...e.dropLabels),Array.isArray(e.resolveExtensions)&&(t.resolveExtensions=e.resolveExtensions),Array.isArray(e.mainFields)&&(t.mainFields=e.mainFields),Array.isArray(e.nodePaths)&&(t.nodePaths=e.nodePaths),typeof e.ignoreAnnotations=="boolean"&&(t.ignoreAnnotations=e.ignoreAnnotations),typeof e.treeShaking=="boolean"&&(t.treeShaking=e.treeShaking),e.define&&typeof e.define=="object"&&(t.define?t.define={...t.define,...e.define}:t.define=e.define),e.banner&&typeof e.banner=="object"&&(t.banner=e.banner),e.footer&&typeof e.footer=="object"&&(t.footer=e.footer),e.loader&&typeof e.loader=="object"&&(t.loader=e.loader),e.alias&&typeof e.alias=="object"&&(t.alias=e.alias),typeof e.assetNames=="string"&&(t.assetNames=e.assetNames),typeof e.entryNames=="string"&&(t.entryNames=e.entryNames),typeof e.publicPath=="string"&&(t.publicPath=e.publicPath),Array.isArray(e.inject)&&(t.inject=e.inject),typeof e.splitting=="boolean"&&(t.splitting=e.splitting),typeof e.preserveSymlinks=="boolean"&&(t.preserveSymlinks=e.preserveSymlinks),typeof e.keepNames=="boolean"&&(t.keepNames=e.keepNames),e.supported&&typeof e.supported=="object"&&(t.supported=e.supported),Array.isArray(e.conditions)&&(t.conditions=e.conditions),typeof e.absWorkingDir=="string"&&(t.absWorkingDir=e.absWorkingDir),e.mangleProps instanceof RegExp&&(t.mangleProps=e.mangleProps),e.reserveProps instanceof RegExp&&(t.reserveProps=e.reserveProps),typeof e.mangleQuoted=="boolean"&&(t.mangleQuoted=e.mangleQuoted),e.mangleCache&&typeof e.mangleCache=="object"&&(t.mangleCache=e.mangleCache),typeof e.packages=="string"&&(t.packages=e.packages),typeof e.logLevel=="string"&&(t.logLevel=e.logLevel),typeof e.logLimit=="number"&&(t.logLimit=e.logLimit),e.logOverride&&typeof e.logOverride=="object"&&(t.logOverride?t.logOverride={...t.logOverride,...e.logOverride}:t.logOverride=e.logOverride),t);var De=t=>{let e={};return Array.isArray(t.plugins)&&(e.plugins=t.plugins),Array.isArray(t.external)&&(e.external=t.external),"sourcemap"in t&&(e.sourcemap=t.sourcemap),typeof t.sourceRoot=="string"&&(e.sourceRoot=t.sourceRoot),typeof t.format=="string"&&(e.format=t.format),t.outExtension&&typeof t.outExtension=="object"&&!Array.isArray(t.outExtension)&&(e.outExtension=t.outExtension),"sourcesContent"in t&&(e.sourcesContent=t.sourcesContent),typeof t.minify=="boolean"&&(e.minify=t.minify),typeof t.minifyWhitespace=="boolean"&&(e.minifyWhitespace=t.minifyWhitespace),typeof t.minifyIdentifiers=="boolean"&&(e.minifyIdentifiers=t.minifyIdentifiers),typeof t.minifySyntax=="boolean"&&(e.minifySyntax=t.minifySyntax),typeof t.jsx=="string"&&(e.jsx=t.jsx),typeof t.jsxFactory=="string"&&(e.jsxFactory=t.jsxFactory),typeof t.jsxFragment=="string"&&(e.jsxFragment=t.jsxFragment),typeof t.jsxImportSource=="string"&&(e.jsxImportSource=t.jsxImportSource),"jsxDev"in t&&(e.jsxDev=t.jsxDev),"jsxSideEffects"in t&&(e.jsxSideEffects=t.jsxSideEffects),typeof t.outdir=="string"&&(e.outdir=t.outdir),typeof t.outbase=="string"&&(e.outbase=t.outbase),(typeof t.target=="string"||Array.isArray(t.target))&&(e.target=t.target),typeof t.tsconfig=="string"&&(e.tsconfig=t.tsconfig),t.tsconfigRaw&&["string","object"].includes(typeof t.tsconfigRaw)&&(e.tsconfigRaw=t.tsconfigRaw),typeof t.legalComments=="string"&&(e.legalComments=t.legalComments),Array.isArray(t.pure)&&(e.pure=t.pure),Array.isArray(t.drop)&&(e.drop=t.drop),Array.isArray(t.dropLabels)&&(e.dropLabels=t.dropLabels),Array.isArray(t.resolveExtensions)&&(e.resolveExtensions=t.resolveExtensions),Array.isArray(t.mainFields)&&(e.mainFields=t.mainFields),Array.isArray(t.nodePaths)&&(e.nodePaths=t.nodePaths),typeof t.ignoreAnnotations=="boolean"&&(e.ignoreAnnotations=t.ignoreAnnotations),typeof t.treeShaking=="boolean"&&(e.treeShaking=t.treeShaking),t.define&&typeof t.define=="object"&&(e.define=t.define),t.banner&&typeof t.banner=="object"&&(e.banner=t.banner),t.footer&&typeof t.footer=="object"&&(e.footer=t.footer),t.loader&&typeof t.loader=="object"&&(e.loader=t.loader),t.alias&&typeof t.alias=="object"&&(e.alias=t.alias),typeof t.assetNames=="string"&&(e.assetNames=t.assetNames),typeof t.entryNames=="string"&&(e.entryNames=t.entryNames),typeof t.publicPath=="string"&&(e.publicPath=t.publicPath),typeof t.splitting=="boolean"&&(e.splitting=t.splitting),typeof t.preserveSymlinks=="boolean"&&(e.preserveSymlinks=t.preserveSymlinks),Array.isArray(t.inject)&&(e.inject=t.inject),typeof t.keepNames=="boolean"&&(e.keepNames=t.keepNames),t.supported&&typeof t.supported=="object"&&(e.supported=t.supported),Array.isArray(t.entryPoints)&&(e.entryPoints=t.entryPoints),Array.isArray(t.conditions)&&(e.conditions=t.conditions),typeof t.absWorkingDir=="string"&&(e.absWorkingDir=t.absWorkingDir),t.mangleProps instanceof RegExp&&(e.mangleProps=t.mangleProps),t.reserveProps instanceof RegExp&&(e.reserveProps=t.reserveProps),typeof t.mangleQuoted=="boolean"&&(e.mangleQuoted=t.mangleQuoted),t.mangleCache&&typeof t.mangleCache=="object"&&(e.mangleCache=t.mangleCache),typeof t.packages=="string"&&(e.packages=t.packages),t.logOverride&&typeof t.logOverride=="object"&&(e.logOverride=t.logOverride),typeof t.logLevel=="string"&&(e.logLevel=t.logLevel),typeof t.logLimit=="number"&&(e.logLimit=t.logLimit),e};var Te=t=>{if(!t.url)return;let e=t.url.cors;return{kind:"url",proxy:"url",version:2,methods:["ANY"],paths:["/*"],pathsRegex:[],stream:typeof t.url=="object"&&t.url.invokeMode=="RESPONSE_STREAM",cors:e}};var Kt=t=>{if(typeof t=="string"){let e=t.split(":")?.[2],n=t.split("/")?.[1];if(e==="dynamodb"&&n)return n}},Me=t=>{let e={},n=Kt(t.arn);if(n&&(e.TableName=n),!!e.TableName){if(typeof t.batchSize=="number"&&t.batchSize>0&&t.batchSize<=1e4?e.batchSize=t.batchSize:e.batchSize=100,typeof t.enabled=="boolean"?e.enabled=t.enabled:e.enabled=!0,t.startingPosition&&(e.startingPosition=t.startingPosition),typeof t.maximumBatchingWindow=="number"&&t.maximumBatchingWindow>0&&t.maximumBatchingWindow<=300&&(e.maximumBatchingWindow=t.maximumBatchingWindow),typeof t.maximumRecordAgeInSeconds=="number"&&t.maximumRecordAgeInSeconds>=60&&t.maximumRecordAgeInSeconds<=604800&&(e.maximumRecordAgeInSeconds=t.maximumRecordAgeInSeconds),t.maximumRetryAttempts&&t.maximumRetryAttempts>0&&t.maximumRetryAttempts<=1e4&&(e.maximumRetryAttempts=t.maximumRetryAttempts),"bisectBatchOnFunctionError"in t&&(e.bisectBatchOnFunctionError=t.bisectBatchOnFunctionError),t.functionResponseType&&(e.functionResponseType=t.functionResponseType),t.filterPatterns&&(e.filterPatterns=t.filterPatterns),typeof t.tumblingWindowInSeconds=="number"&&(e.tumblingWindowInSeconds=t.tumblingWindowInSeconds),t.onFailureDestination){let r=t.onFailureDestination;if(!r.startsWith("arn:aws"))throw new Error(`Invalid onFailureDestination ARN: ${r}`);e.onFailureDestination=r}return e}};var qe=t=>{let e={},{arn:n,filterPatterns:r,batchSize:s,maximumBatchingWindow:i,functionResponseType:o,enabled:a}=t;if(typeof n=="string"){let c=n.split(":");c.length&&(e.name=c[c.length-1],e.arn=n)}if(r&&(e.filterPatterns=r),s&&(e.batchSize=s),i&&(e.maximumBatchingWindow=i),(o=="ReportBatchItemFailures"||Array.isArray(o)&&o[0]=="ReportBatchItemFailures")&&(e.functionResponseType=["ReportBatchItemFailures"]),typeof a=="boolean"?e.enabled=a:e.enabled=!0,e.name)return e};var B=["lambda","sns","sqs"],je=({triggers:t})=>{let e=[],n=[],r=[],s=[],i=[];for(let o of t)switch(o.source){case"sqs":{let a=qe(o);a&&r.push(a)}continue;case"dynamodb":{let a=Me(o);a&&s.push(a)}continue;default:break}return{ddb:s,endpoints:e,s3:i,sns:n,sqs:r}},J=t=>{if(!(!t||t.type&&!B.includes(t.type)))if(typeof t=="string")if(t.startsWith("arn:")){let[,,e,n,r,s,i]=t.split(":");if(B.includes(e))return{kind:e,name:s=="function"?i:s}}else return{kind:"lambda",name:t};else{let e={};if(typeof t.arn=="string"){let[,,n,r,s,i,o]=t.arn.split(":");e.name=i,B.includes(n)&&(e.kind=n)}else if(B.includes(t.type)&&t.arn){e.kind=t.type;let[n,r]=Object.entries(t.arn)?.[0];if(!n||!r)return}if(e.kind&&e.name)return e}};var he=A(require("node:path"));var Fe=require("node:child_process");var He=require("node:http"),_e=A(require("node:path")),Gt=new URLPattern({pathname:"/2018-06-01/runtime/invocation/:awsRequestId/:returnType"}),F=class t{constructor({name:e,timeout:n,memorySize:r,environment:s,handlerPath:i,handlerName:o,runtime:a},c,l){this.cwd=l;this.name=e,this.timeout=n,this.memorySize=r,this.environment=s,this.handlerName=o,this.runtime=a,this.emitRebuild=c,this.bin=_e.default.resolve(i),this.mount=async()=>{await this.createOwnedServer(),await this.load()},this.unmount=d=>{this.runner?.kill(),this.runner=void 0,this.isMounted=!1,this.server?.close(),this.server?.closeAllConnections()},this.invoke=async({event:d,info:m,clientContext:f,awsRequestId:p})=>{this.isMounted||await this.load();let g,y,h=new Promise((u,b)=>{g=u,y=b}),S={id:p,event:d,clientContext:f,resolve:g,inFlight:!1,reject:y};return this.invocations.push(S),this.handleInvoke(),h}}static async collectBody(e){let n=Buffer.alloc(0);return e.on("data",r=>{n=Buffer.concat([n,r])}),new Promise(r=>{e.on("end",async()=>{r(n?n.toString("utf-8"):void 0)})})}invoke;mount;unmount;name;timeout;memorySize;environment;handlerName;runtime;bin;runner;isMounted=!1;watchers=[];filesTime=new Map;port;watcher;emitRebuild;invocations=[];queue=[];getWaitingInvocation(){return this.invocations.find(e=>!e.inFlight)}server=void 0;async createOwnedServer(){let e=(0,He.createServer)(async(n,r)=>{let{method:s,url:i,headers:o}=n;if(s=="POST"){let a=Gt.exec(i,"http://localhost:3000"),c=a?.pathname.groups.awsRequestId,l=a?.pathname.groups.returnType;if(!(c&&(l=="response"||l=="error"))){r.statusCode=400,r.end();return}let d=this.invocations.findIndex(p=>p.id==c);if(d==-1){r.statusCode=400,r.end();return}let m=await t.collectBody(n);if(m)try{m=JSON.parse(m)}catch{r.statusCode=500,r.end();return}let f=this.invocations[d];this.invocations.splice(d,1),await new Promise(p=>{r.statusCode=202,r.end(()=>{l=="response"?f.resolve(m):f.reject(m),p(void 0)})});return}if(s=="GET"&&i=="/2018-06-01/runtime/invocation/next"){let a=this.getWaitingInvocation();if(!a){this.queue.push(r);return}a.inFlight=!0,r.setHeader("Lambda-Runtime-Aws-Request-Id",a.id),a.clientContext&&r.setHeader("Lambda-Runtime-Client-Context",JSON.stringify(a.clientContext)),r.end(JSON.stringify(a.event));return}r.statusCode=400,r.end()});e.keepAliveTimeout=0,await new Promise(n=>{e.listen(n)}),e.unref(),this.port=e.address().port,this.server=e}load=()=>(this.runner=(0,Fe.spawn)(this.bin,{env:{...this.environment,AWS_LAMBDA_RUNTIME_API:`127.0.0.1:${this.port}`},stdio:"inherit",cwd:this.cwd}),this.runner.on("error",e=>{console.error("Failed to run custome runtime.",e)}),this.runner.pid||(console.error(`Can not find custome runtime ${this.bin}`),process.exit(1)),new Promise(e=>{this.runner.once("spawn",()=>{this.isMounted=!0,e(void 0)})}));onComplete=e=>{let n=this.invocations.findIndex(r=>r.id==e);n!=-1&&this.invocations.splice(n,1)};handleInvoke(){try{let e=this.getWaitingInvocation();if(!e||!this.queue.length)return;let n=this.queue[0];n||console.error("This is a bug in exlo, please report!"),n.setHeader("Lambda-Runtime-Aws-Request-Id",e.id),this.queue.splice(this.queue.findIndex(r=>r==n),1),n.end(JSON.stringify(e.event))}catch(e){console.error(e)}}};var N=class t extends F{static llrtEnvs={};static llrtBoostrapPath="bootstrap";constructor(e,n){let r=he.default.basename(e.handlerPath);e.handlerPath=t.llrtBoostrapPath;let s=he.default.dirname(e.esOutputPath);super({...e,environment:{...t.llrtEnvs,...e.environment,LAMBDA_HANDLER:r}},n,s)}};var yt=require("node:crypto"),gt=A(require("node:http")),bt=A(require("node:inspector")),ve=require("node:os");var Ue=require("node:crypto");var Q=!1,Yt=t=>{Q=t},Xt=()=>Q,H=(t,e)=>{Q&&console.log(`\x1B[${t}m${e}\x1B[0m`)},Zt=t=>console.log(`\x1B[31m${t}\x1B[0m`),en=t=>H("32",t),tn=t=>H("33",t),nn=t=>H("36",t),rn=t=>H("90",t),sn=t=>H("94",t),on=t=>H("95",t),an=t=>Q?console.log(t):void 0,v={GREEN:en,YELLOW:tn,CYAN:nn,BR_BLUE:sn,RED:Zt,GREY:rn,PINK:on,setDebug:Yt,getDebug:Xt,info:an};var Ce="application/vnd.awslambda.http-integration-response",P=class t{buffer;_isHttpIntegrationResponse;_metaDelimiter;_endDelimiter;_ct;_isStreamResponse=!0;#e;static codec=new TextDecoder;static splitMessage=(e,n)=>{if(!e)return;let r=Array.from(e.values()),s=null;if(n)s=n;else for(let i=0;i<r.length;i++)if(r[i]===0&&[r[i+1],r[i+2],r[i+3],r[i+4],r[i+5],r[i+6],r[i+7]].every(c=>c===0)){s=i;break}if(s)return new Uint8Array(r.slice(0,s))};constructor(e){this._isHttpIntegrationResponse=!1,this._metaDelimiter=0,this._endDelimiter=0,this.#e=e}setHeader(e,n){this._isHttpIntegrationResponse=!this.buffer&&n==Ce&&(!this._ct||this._ct==Ce),this._ct=n}write(e,n){!this._isHttpIntegrationResponse&&!this._metaDelimiter&&(this._metaDelimiter=e.byteLength),this.#t(e)}end(e){this.buffer&&(this._endDelimiter=this.buffer.byteLength),e&&this.#t(e)}destroy(){}#t(e){this.buffer=typeof this.buffer>"u"?e:Buffer.concat([this.buffer,e])}getParsedResponse(){if(!this.#e)return;let e=this.#e.kind;if(e=="alb")return this.#n();if(e=="url")return this.#i();if(e=="apg")return this.#r()}#n(){let e=this._isHttpIntegrationResponse?t.splitMessage(this.buffer):this.buffer,n;return e&&(n=this.#s(e)),n}#r(){if(this._isHttpIntegrationResponse)return v.RED("awslambda.HttpResponseStream.from() is not supported with API Gateway"),{statusCode:500,headers:{"Content-Type":x.contentType.json},body:x.httpErrMsg};if(this.buffer)return this.#s(this.buffer)}#i(){let e=t.splitMessage(this.buffer,this._isHttpIntegrationResponse?void 0:this._metaDelimiter),n;return e&&(n=this.#s(e)),n}#s(e){let n=t.codec.decode(e);if(typeof n=="string")try{n=JSON.parse(n)}catch{}return n}};var We="<html><head><title>404 Not Found</title></head><body><center><h1>404 Not Found</h1></center></body></html>",$e="<html><head><title>400 Request Header Or Cookie Too Large</title></head><body><center><h1>400 Bad Request</h1></center><center>Request Header Or Cookie Too Large</center></body></html>";var ln=["GET","HEAD","POST","PUT","DELETE","PATCH","OPTIONS"],cn=JSON.stringify({Message:null}),K=t=>{if(t)try{let e=Buffer.from(t,"base64").toString("utf-8");return JSON.parse(e)}catch{return new Error("InvalidRequestContentException")}},ze=(t,e)=>{if(!ln.includes(e))return t.statusCode=403,t.setHeader("Content-Type","application/json"),t.end(cn),!0},T=async(t,e)=>{let n=Buffer.alloc(0);return t.on("data",s=>{n=Buffer.concat([n,s])}),await new Promise(s=>{t.on("end",async()=>{s(n?n.toString(e?"base64":"utf-8"):void 0)})})},G=t=>{let e;try{e=JSON.parse(t)}catch(n){e?.length?e=n:e={}}return e},Y=t=>t instanceof P,Ve=t=>{let e,n=Buffer.from(t).toString();try{e=JSON.parse(n)}catch{e=n}return e},_=t=>{let e=(0,Ue.randomUUID)();return t.setHeader("x-amzn-RequestId",e),e},X=t=>JSON.stringify({Type:"User",message:`Could not parse request body into json: Could not parse payload into json: ${t}: was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')`}),Z=JSON.stringify({Type:null,message:"Client context must be a valid Base64-encoded JSON object."}),ee=(t,e,n)=>JSON.stringify({Type:"User",message:`Function not found: arn:aws:lambda:${e}:${n}:function:${t}`}),te=(t,e)=>{if(!t.writableFinished){if(t.statusCode=502,!t.headersSent&&(t.setHeader("Content-Type","application/json"),e))for(let[n,r]of Object.entries(e))t.setHeader(n,r);t.end("Internal Server Error")}},Be=t=>t.byteLength==8&&Array.from(t.values()).every(e=>e===0);var Sr=new Error($e);var Je=t=>t.charAt(0).toUpperCase()+t.slice(1);var x=class t{static apiId="";static accountId="";static port=3e3;static serve;static contentType={json:"application/json",text:"text/plain; charset=utf-8",octet:"application/octet-stream"};static keepAlive=["Connection","keep-alive"];static dummyHost="http://localhost:3003";static httpErrMsg='{"message":"Internal Server Error"}';static apigJsonParseErrMsg='{"message":"[Unknown error parsing request body]"}';static apigForbiddenErrMsg='{"message":"Forbidden"}';static amzMsgNull='{"message":null}';static apgTimeoutMsg='{"message": "Endpoint request timed out"}';static unavailable='{"message":"Service Unavailable"}';static timeoutRegex=/after.\d+.*seconds/;static apgRequestTimeout=30;static normalizeHeaderKey=e=>e.toLowerCase().split("-").map(Je).join("-");static getMultiValueHeaders=e=>{let n={},r=e.filter((i,o)=>o%2==0).map(i=>i.toLowerCase()),s=e.filter((i,o)=>o%2!==0);return r.forEach((i,o)=>{i!="x-mock-type"&&(n[i]?n[i].push(s[o]):n[i]=[s[o]])}),n};static getIsBase64Encoded=e=>{let n=e["content-type"];return e["content-encoding"]||!n?!0:!(n.startsWith("application/json")||n.startsWith("application/xml")||n.startsWith("application/javascript")||n.startsWith("text/"))};static knownHeaders=["accept","accept-encoding","user-agent","host","via","content-length"];static getApiGV1Headers(e,n){let{rawHeaders:r}=e,s,i={"X-Forwarded-For":e.socket.remoteAddress,"X-Forwarded-Proto":"http","X-Forwarded-Port":String(t.port)};for(let l=0;l<r.length;){let d=r[l],m=d.toLowerCase();if(["connection","x-mock-type"].includes(m)){l=l+2;continue}this.knownHeaders.includes(m)&&(d=this.normalizeHeaderKey(m));let f=r[l+1];i[d]=f,m=="x-api-key"&&(s=f),l=l+2}let o={};for(let l of Object.keys(i).sort((d,m)=>d.localeCompare(m)))o[l]=i[l];let a={"X-Forwarded-For":[e.socket.remoteAddress],"X-Forwarded-Proto":["http"],"X-Forwarded-Port":[String(t.port)]};for(let l=0;l<r.length;){let d=r[l],m=d.toLowerCase();if(["connection","x-mock-type"].includes(m)){l=l+2;continue}this.knownHeaders.includes(m)&&(d=this.normalizeHeaderKey(m));let f=r[l+1];a[d]?a[d].push(f):a[d]=[f],l=l+2}let c={};for(let l of Object.keys(a).sort((d,m)=>d.localeCompare(m)))c[l]=a[l];return{headers:o,multiValueHeaders:c,apiKey:s}}static getCustomHeaders(e,n){let{headers:r}=e;return delete r["x-mock-type"],delete r.connection,{"X-Forwarded-For":e.socket.remoteAddress,"X-Forwarded-Proto":"http","X-Forwarded-Port":String(t.port),...r}}static getPathParameters(e,n){let r=e.paths[0].split("/"),s=n.pathname.split("/"),i={};return r.forEach((o,a)=>{o.startsWith("{")&&o.endsWith("}")&&!o.endsWith("+}")&&(i[o.slice(1,-1)]=s[a])}),i}static normalizeSearchParams=(e,n)=>{let r={};Array.from(e.keys()).forEach(o=>{let a=e.getAll(o).map(l=>l.toLowerCase()),c=o.toLowerCase();a?r[c]?r[c].push(...a):r[c]=a:r[c]||(r[c]=void 0)});let s="",i=n.indexOf("?");return i!=-1&&(s=n.slice(i+1)),r.toString=()=>s,r};static getMultiValueQueryStringParameters=e=>{let n={};e.delete("x_mock_type");for(let r of Array.from(new Set(e.keys())))n[r]=e.getAll(r).map(encodeURI);return n};static isEndpointTimeoutError=e=>{if(!e)return;let n=e.match(this.timeoutRegex)?.[0];if(n){let r=n.split(" ")[1];if(!isNaN(r))return Number(r)>=t.apgRequestTimeout}}};var et=require("exlo/internal/esm");var Ke=require("exlo/internal/esm");var ne=class{constructor(e,n,r,s,i){this.MaximumBatchingWindowInSeconds=e;this.BatchSize=n;this.lambdaName=r;this.handlers=s;this.onInvokeFinished=i}available=!0;#e=[];#t=!1;get messages(){return this.#e}#n(){setTimeout(async()=>{this.available=!1,this.#t||await this.#r()},this.MaximumBatchingWindowInSeconds*1e3)}async setRecord(e){this.#e.length||this.#n(),this.#e.push(e),(this.#e.length==this.BatchSize||!this.available)&&(this.available=!1,await this.#r())}async#r(){this.#t=!0;let e=this.#e,n=this.handlers.find(r=>r.name==this.lambdaName);try{let r=await n.invoke({Records:this.#e});await this.onInvokeFinished(e,r)}catch{}}};var Ge=10,Ye=0,dn=(t,e,n)=>t.receiveMessage({QueueUrl:e,AttributeNames:["All"],MessageAttributeNames:["All"],MaxNumberOfMessages:n}),pn=(t,e)=>t.getQueueAttributes({QueueUrl:e,AttributeNames:["All"]}),Qe=async(t,e,n)=>{for(let r of Ze(n,10)){if(!r.length)continue;let s=r.map((i,o)=>({Id:`id-${o+1}`,ReceiptHandle:i}));try{await t.deleteMessageBatch({QueueUrl:e,Entries:s})}catch{}}},mn=t=>{if(!t)return{};let e={};for(let[n,r]of Object.entries(t)){e[n]={};let{StringValue:s,BinaryValue:i,DataType:o}=r;o.startsWith("B")?e[n].binaryValue=i:e[n].stringValue=s,e[n].stringListValues=[],e[n].binaryListValues=[],e[n].dataType=o}return e},un=(t,e)=>{let{MessageId:n,Body:r,MD5OfBody:s,ReceiptHandle:i,Attributes:o,MessageAttributes:a,MD5OfMessageAttributes:c}=t,l={messageId:n,receiptHandle:i,body:r,attributes:o,messageAttributes:mn(a)};return c&&(l.md5OfMessageAttributes=c),l.md5OfBody=s,l.eventSource="aws:sqs",l.eventSourceARN=e,l.awsRegion=e.split(":")[3],l},fn=(t,e)=>t.map(n=>un(n,e)),re=class extends Ke.EventSourceMapping{constructor(n,r,s){super(n);this.config=n;this.handlers=r;this.sqsClient=s;let i=this.config.EventSourceArn.split(":");this.QueueName=i[i.length-1],this.#n=this.config.FunctionResponseTypes?.[0]=="ReportBatchItemFailures"}#e=[];QueueName="";QueueUrl="";#t;#n;async onInvokeFinished(n,r){let s=n.map(i=>i.receiptHandle);this.#n&&(s=Xe(n,r)),await Qe(this.sqsClient,this.QueueUrl,s)}#r(){let n=this.#e.find(s=>s.available);if(n)return n;let r=new ne(this.config.MaximumBatchingWindowInSeconds,this.config.BatchSize,this.config.FunctionName,this.handlers,this.onInvokeFinished.bind(this));return this.#e.push(r),r}async#i(n){for(let r of n)await this.#r().setRecord(r)}async init(){if(!this.sqsClient)return;let{QueueUrl:n}=await this.sqsClient.getQueueUrl({QueueName:this.QueueName});this.QueueUrl=n,await this.enable()}#s=1500;cleanBatchs(){for(let n=0;n<this.#e.length;n++)this.#e[n].available||this.#e.splice(n,1)}async#l(){let n=0,r=2e3,s=async()=>{try{let{Attributes:i}=await pn(this.sqsClient,this.QueueUrl);if(!Number(i.ApproximateNumberOfMessages))n++,this.#s<=2e4&&(this.#s+=200),n==5&&(r=2e3);else{n=0,r=400;let a=this.#s;this.#s=350,a>=1600&&await this.#a(!0)}}catch{r=2e3}this.cleanBatchs(),this.#t=setTimeout(s,r)};await s()}#o;async#a(n){n&&clearTimeout(this.#o);let r=async()=>{if(!this.config.Enabled){this.State=="Disabling"&&(this.State="Disabled");return}try{let{Messages:s}=await dn(this.sqsClient,this.QueueUrl,this.config.BatchSize<=10?this.config.BatchSize:10);if(s){let i=fn(s,this.config.EventSourceArn),o=await this.#c(i);await this.#i(o)}}catch{}this.#o=setTimeout(r,this.#s)};await r()}async enable(){this.State="Enabling";try{await this.#l(),this.config.Enabled=!0,this.State="Enabled",await this.#a()}catch(n){console.error(n)}}disable(){this.config.Enabled=!1,clearTimeout(this.#t),this.State="Disabling"}async#c(n){let r=n.map(a=>{let c={...a};try{c.body=JSON.parse(c.body)}catch{}return c}),[s,i]=this.filterRecords(r);await Qe(this.sqsClient,this.QueueUrl,i.map(a=>a.receiptHandle));let o=[];for(let a of s)o.push(...n.filter(c=>c.messageId==a.messageId));return o}};var tt=async(t,e)=>{let{accountId:n,region:r,services:s}=e;for(let i of t)for(let o of i.sqs){if(typeof o.arn!="string")throw new Error("SQS Event Source Mapping must have arn string");let a=o.arn;a.startsWith("arn:aws:sqs:")||(a=`arn:aws:sqs:${r}:${n}:${o.name}`);let c;if(Array.isArray(o.filterPatterns)){c=[];for(let d of o.filterPatterns)c.push({Pattern:JSON.stringify(d)});c.length||(c=void 0)}let l=new re({BatchSize:typeof o.batchSize=="number"?o.batchSize:Ge,Enabled:o.enabled,EventSourceArn:a,FunctionName:i.name,FunctionResponseTypes:o.functionResponseType,FilterCriteria:c?{Filters:c}:void 0,MaximumBatchingWindowInSeconds:typeof o.maximumBatchingWindow=="number"?o.maximumBatchingWindow:Ye},t,s.sqs);if(et.EventSourceMapping.SOURCES.push(l),l.config.Enabled)try{await l.init()}catch(d){v.RED(`Failed to start EventSourceMapping ${l.config.EventSourceArn}
3
+ Please verify provided SQS Client validity.`),console.error(d)}}},hn=/(-|\w+)/g,yn=t=>t.length<81&&t.replace(hn,"")=="",Xe=(t,e)=>{if(typeof e>"u"||e===null||typeof e=="object"&&(e.batchItemFailures===null||Array.isArray(e.batchItemFailures)&&!e.batchItemFailures.length))return t.map(r=>r.receiptHandle);let n=[];if(typeof e=="object"&&Array.isArray(e.batchItemFailures)){if(e.batchItemFailures.some(r=>!r.itemIdentifier||!yn(r.itemIdentifier)||!t.find(s=>s.messageId==r.itemIdentifier)))throw new Error("ReportBatchItemFailures: complete failure.");return t.forEach(r=>{e.batchItemFailures.find(i=>i.itemIdentifier==r.messageId)||n.push(r.receiptHandle)}),n}},Ze=(t,e)=>{let n=[];for(let r=0;r<t.length;r+=e){let s=t.slice(r,r+e);n.push(s)}return n};var lt=require("node:crypto");var nt=A(require("node:http")),gn=t=>{switch(t.kind){case"sns":return"@sns/parsed/";case"sqs":return"@sqs";case"lambda":return`@invoke/${t.name}/`;default:break}},rt=(t,e)=>{let n=gn(e);if(!n)return;let r={"Content-Type":e.kind=="sqs"?"application/x-www-form-urlencoded":"application/json"};return nt.default.request(`http://localhost:${t}/${n}`,{method:"POST",headers:r})},st=({event:t,payload:e,requestId:n,lambdaName:r,success:s})=>{let i={version:"1.0",timestamp:"2023-02-25T13:25:04.688Z",requestContext:{requestId:n,functionArn:`arn:aws:lambda:eu-west-3:000000000000:function:${r}:$LATEST`,condition:s?"Success":"RetriesExhausted",approximateInvokeCount:1},requestPayload:t,responseContext:{statusCode:200,executedVersion:"$LATEST"},responsePayload:e};return s||(i.responseContext.functionError="Unhandled"),JSON.stringify(i)},bn=({topicName:t,event:e,payload:n,requestId:r,success:s,lambdaName:i})=>{let o="";if(s)o=st({event:e,payload:n,requestId:r,success:s,lambdaName:i});else if(typeof e=="string")o=e;else try{o=JSON.stringify(e)}catch(c){console.log(c)}let a={TopicArn:`arn:aws:sns:eu-west-3:000000000000:${t}`,Message:o,Action:"Publish",Version:"2010-03-31",MessageAttributes:{}};return s||(a.MessageAttributes={RequestID:{Type:"String",Value:r},ErrorCode:{Type:"String",Value:"200"},ErrorMessage:{Type:"String",Value:n.errorMessage}}),JSON.stringify(a)},vn=({destination:t,event:e,payload:n,requestId:r,lambdaName:s,success:i})=>{let o=new URLSearchParams;o.append("QueueUrl",t.name),o.append("Action","SendMessage");let a=e;try{a=JSON.stringify(a)}catch{}return o.append("MessageBody",a),i||(o.append("MessageAttribute.1.Name","RequestID"),o.append("MessageAttribute.1.Value.StringValue",r),o.append("MessageAttribute.1.Value.DataType","String"),o.append("MessageAttribute.1.Name","ErrorCode"),o.append("MessageAttribute.1.Value.StringValue","200"),o.append("MessageAttribute.1.Value.DataType","Number"),o.append("MessageAttribute.1.Name","ErrorMessage"),o.append("MessageAttribute.1.Value.StringValue",n.errorMessage),o.append("MessageAttribute.1.Value.DataType","String")),o.toString()},it=({destination:t,event:e,payload:n,requestId:r,lambdaName:s,success:i})=>{switch(t.kind){case"sns":return bn({topicName:t.name,event:e,payload:n,requestId:r,success:i,lambdaName:s});case"lambda":return st({event:e,payload:n,requestId:r,lambdaName:s,success:i});case"sqs":return vn({destination:t,event:e,payload:n,requestId:r,lambdaName:s,success:i});default:return""}},ye=({destination:t,LOCAL_PORT:e,event:n,payload:r,requestId:s,lambdaName:i})=>{try{let o=rt(e,t);if(!o)return;o.end(it({destination:t,event:n,payload:r,requestId:s,lambdaName:i,success:!1}))}catch{}},ot=({destination:t,LOCAL_PORT:e,event:n,payload:r,requestId:s,lambdaName:i})=>{try{let o=rt(e,t);if(!o)return;o.end(it({destination:t,event:n,payload:r,requestId:s,lambdaName:i,success:!0}))}catch{}};var Sn=1080*1e3,xn=new Set(["async","ddb","kinesis","s3","sns","sqs"]),at=t=>typeof t?.kind=="string"?xn.has(t.kind)||t.async:!1,$=class t{name;runtime;sqs;ddb;url;timeout;memorySize;environment;handlerPath;handlerName;esEntryPoint;esOutputPath;entryPoint;onError;onSuccess;onFailure;invokeSub;invokeSuccessSub;invokeErrorSub;#e;runner;static ENABLE_TIMEOUT=!0;constructor({name:e,runtime:n,timeout:r,memorySize:s,environment:i,handlerPath:o,handlerName:a,esEntryPoint:c,esOutputPath:l,entryPoint:d,sqs:m,ddb:f,url:p,invokeSub:g,invokeSuccessSub:y,invokeErrorSub:h,onError:S,onSuccess:u,onFailure:b,runner:w}){this.name=e,this.runtime=n,this.sqs=m,this.ddb=f,this.url=p,this.timeout=r,this.memorySize=s,this.environment=i,this.handlerPath=o,this.handlerName=a,this.esEntryPoint=c,this.esOutputPath=l,this.entryPoint=d,this.invokeSub=g,this.invokeSuccessSub=y,this.invokeErrorSub=h,this.onError=S,this.onSuccess=u,this.onFailure=b,this.runner=w}handleErrorDestination(e,n,r,s){if(this.runner.onComplete(s),this.invokeErrorSub.forEach(async i=>{try{await i(e,r,n)}catch{}}),at(n)){let i={LOCAL_PORT:this.environment.LOCAL_PORT,event:e,payload:r,requestId:s,lambdaName:this.name};this.onError&&ye({...i,destination:this.onError}),this.onFailure&&ye({...i,destination:this.onFailure})}}handleSuccessDestination(e,n,r,s){this.runner.onComplete(s),this.onSuccess&&at(n)&&ot({destination:this.onSuccess,LOCAL_PORT:this.environment.LOCAL_PORT,event:e,payload:r,requestId:s,lambdaName:this.name}),this.invokeSuccessSub.forEach(async i=>{try{await i(e,r,n)}catch{}})}async invoke(e,n,r,s){let i=(0,lt.randomUUID)();this.runner.isMounted||(v.BR_BLUE(`\u2744\uFE0F Cold start \u03BB '${this.name}'`),await this.runner.mount());for(let a of this.invokeSub)try{let c=await a(e,n);typeof c!="function"&&(e=c)}catch{}let o=this.#n(i,e,n);try{let a=await new Promise(async(c,l)=>{let d;t.ENABLE_TIMEOUT&&(d=setTimeout(()=>{s?.destroy(),this.runner.onComplete(i,!0),v.RED(`'${this.name}' | ${i}: Request failed`),l({errorType:"Unhandled",errorMessage:`${new Date().toISOString()} ${i} Task timed out after ${this.timeout} seconds`})},this.timeout*1e3));try{let m=await this.runner.invoke({event:e,awsRequestId:i,info:n,clientContext:r,response:s});clearTimeout(d),c(m)}catch(m){clearTimeout(d),l(m)}});return this.#t(),t.#r(o,this.name),this.handleSuccessDestination(e,n,a,i),a}catch(a){throw this.handleErrorDestination(e,n,a,i),this.runner.unmount(!0),this.#t(),a}}clear=()=>{clearTimeout(this.#e),this.runner.unmount()};async shutdown(){clearTimeout(this.#e),await this.runner.unmount(!0)}#t=()=>{clearTimeout(this.#e),this.#e=setTimeout(()=>{this.runner.unmount(!0)},Sn)};#n=(e,n,r)=>{let s=n?.httpMethod??n?.method??"",i=n?.path??n?.rawPath??"";i&&(i=decodeURI(i));let o=`${s} ${i}`,a=new Date;v.CYAN(`${a.toLocaleDateString()} ${a.toLocaleTimeString()} requestId: ${e} | '${this.name}' ${o}`),v.GREY(this.entryPoint);let c="";return typeof r?.kind=="string"&&(c=` (${r.kind.toUpperCase()})`),v.YELLOW(`\u03BB payload${c}:`),v.info(n),process.hrtime()};static#r=(e,n)=>{let r=process.hrtime(e),s=`${r[0]},${r[1]}s`,i=`\u231B\uFE0F \u03BB '${n}' execution time: ${s}`;setTimeout(()=>{v.YELLOW(i)},400)}};var se=class{err;constructor(e){this.err=new Error(`Local invoke of ${e} runtime is currently not supported by exlo.`)}isMounted=!0;mount=()=>{};unmount=()=>{};invoke=async()=>{throw this.err};onComplete=()=>{}};var ct=require("node:events"),dt=A(require("node:path")),pt=require("node:worker_threads");var wn=dt.default.resolve(j("exlo"),"./dist/lib/runtime/runners/node/index.js"),ie=class extends ct.EventEmitter{_worker;isMounted=!1;_isLoading=!1;invoke;mount;unmount;name;timeout;memorySize;environment;handlerPath;handlerName;esOutputPath;hasFatalError;constructor({name:e,timeout:n,memorySize:r,environment:s,handlerPath:i,handlerName:o,esOutputPath:a}){super(),this.name=e,this.timeout=n,this.memorySize=r,this.environment=s,this.handlerPath=i,this.handlerName=o,this.esOutputPath=a,this.mount=async()=>{this._isLoading?(this.setMaxListeners(0),await new Promise((c,l)=>{this.once("loaded",d=>{d?c(void 0):l()})})):this.isMounted||(this._isLoading=!0,await this.importHandler(),this._worker.on("message",c=>{let{channel:l,data:d,awsRequestId:m,type:f,encoding:p}=c;l=="uncaught"?(this._worker.terminate(),this.isMounted=!1,this._isLoading=!1,v.RED(`${f} Uncaught exceptions`),console.error(d.error),d.solution&&(v.BR_BLUE("Solution:"),console.log(d.solution))):l=="fail"?(this.emit(m,l,d,f,p),this.unmount()):this.emit(m,l,d,f,p)}))},this.unmount=()=>{this._worker?.terminate(),this.isMounted=!1,this._isLoading=!1},this.invoke=async({event:c,info:l,clientContext:d,response:m,awsRequestId:f})=>new Promise((p,g)=>{this._worker.postMessage({channel:"exec",data:{event:c,clientContext:d},awsRequestId:f});let y=m??new P(l);function h(S,u,b,w){switch(S){case"return":case"succeed":case"done":this.removeListener(f,h),p(u);break;case"fail":this.removeListener(f,h),g(u);break;case"stream":b=="write"?y.write(u,w):b=="ct"?y.setHeader("Content-Type",u):b=="timeout"?(this.removeListener(f,h),y.destroy(),g(u)):(this.removeListener(f,h),y.end(u),p(y instanceof P?y:void 0));break;default:this.removeListener(f,h),g(new Error("Unknown error"));break}}this.on(f,h)})}async importHandler(){await new Promise((e,n)=>{let r={name:this.name,env:this.environment,execArgv:["--enable-source-maps"],workerData:{name:this.name,timeout:this.timeout,memorySize:this.memorySize,esOutputPath:this.esOutputPath,handlerPath:this.handlerPath,handlerName:this.handlerName,debug:v.getDebug()}};this._worker=new pt.Worker(wn,r),this._worker.setMaxListeners(0),this._worker.once("message",s=>{let{channel:i,data:o}=s;i=="import"?(this._worker.setMaxListeners(55),this.setMaxListeners(10),this.isMounted=!0,this._isLoading=!1,this.emit("loaded",!0),e(void 0)):i=="fatal"&&n(o)}),this._worker.postMessage({channel:"import"})})}onComplete=(e,n)=>{this._worker?.postMessage({channel:"complete",awsRequestId:e,timeout:n})}};var ae=require("node:child_process"),ut=require("node:fs"),ge=require("node:fs/promises"),C=A(require("node:path"));var Rn=process.cwd();function mt(t){let e="";try{e=(0,ae.execSync)(t,{encoding:"utf-8"})}catch{}return e}var oe=class t{invoke;mount;unmount;name;timeout;memorySize;environment;handlerPath;pyModulePath;handlerDir;handlerName;handlerFileAbsolutePath;runtime;bin;python;isMounted=!1;watchers=[];filesTime=new Map;watcherListener;emitRebuild;static wrapper=C.default.resolve(j("exlo"),"./src/lib/runtime/runners/python/index.py");static DELIMITER="__|response|__";static DELIMITEREND="__|responseEnd|__";static ERR_RESPONSE="__|error|__";static WATCH="__|watch|__";static WATCHEND="__|watchEnd|__";constructor({name:e,timeout:n,memorySize:r,environment:s,handlerPath:i,handlerName:o,runtime:a},c){this.name=e,this.timeout=n,this.memorySize=r,this.environment=s,this.handlerName=o,this.runtime=a,this.emitRebuild=c;let l=C.default.resolve(i);this.handlerDir=C.default.dirname(l),this.handlerPath=C.default.basename(l,`.${this.handlerName}`),this.pyModulePath=`${this.handlerDir}/${this.handlerPath}`.replace(Rn,"").replace(/\/|\\/g,".").slice(1),this.handlerFileAbsolutePath=l.replace(`.${this.handlerName}`,".py"),this.mount=async()=>{if(this.python)return;let d=`${this.handlerDir}/${this.handlerPath}.py`;try{await(0,ge.access)(d),this.load()}catch{console.error(`Can not find ${this.name}'s handler at: "${d}"`),process.exit(1)}},this.unmount=d=>{d&&(this.python?.kill(),this.python=void 0,this.isMounted=!1)},this.invoke=async({event:d,info:m,clientContext:f,awsRequestId:p})=>new Promise((g,y)=>{let h=JSON.stringify({event:d,awsRequestId:p,context:f??""}),S="",u=w=>{let R=null,I=w.toString();try{let O=I.includes(t.WATCH);if(O&&this.setWatchFiles(I),I.startsWith(t.DELIMITER)&&I.includes(t.DELIMITEREND)){let E=I.split(t.DELIMITER),M=E[E.length-1].split(t.DELIMITEREND)[0];if(E.length>1){let q;O?q=E[0].split(t.WATCHEND)[1]:q=E.slice(0,-1).join(`
4
+ `),q.trim()&&console.log(q)}M&&(R=JSON.parse(M)),this.python.stdout.removeListener("data",u),this.python.stderr.removeListener("data",b),g(R)}else if(I.startsWith(t.DELIMITER))S=I.slice(t.DELIMITER.length);else if(I.includes(t.DELIMITEREND)){let E=I.slice(0,I.indexOf(t.DELIMITEREND)),M=JSON.parse(`${S}${E}`);this.python.stdout.removeListener("data",u),this.python.stderr.removeListener("data",b),g(M)}else if(S)S+=I;else if(!S&&I.trim()){let E;if(O){let M=I.split(`
5
+ `),q=M.findIndex(_t=>_t.startsWith(t.WATCH));E=M.slice(0,q).join(`
6
+ `)}else E=I;E.trim()&&console.log(E)}}catch(O){console.log("err",O),y(O)}};this.python.stdout.on("data",u);let b=w=>{let R=w.toString();if(R.includes(t.ERR_RESPONSE))try{R=JSON.parse(R.split(t.ERR_RESPONSE)[1]),R.requestId=p}catch{}finally{this.python.stdout.removeListener("data",u),this.python.stderr.removeListener("data",b),y(R)}else console.log(R)};this.python.stderr.on("data",b),this.python.stdin.write(`${h}
7
+ `)}),this.watcherListener=()=>{this.isMounted&&(this.unmount(!0),this.watchers.forEach(d=>d.close()),this.watchers=[],this.emitRebuild())}}setWatchFiles=async e=>{try{let n=e.split(t.WATCH),s=n[n.length-1].split(t.WATCHEND)[0],i=JSON.parse(s).map(o=>`${o.replace(/\./g,C.default.sep)}.py`);for(let o of i)try{await(0,ge.access)(o),this.watchers.push((0,ut.watch)(o,{persistent:!1},this.watcherListener))}catch{}}catch(n){console.log(n)}};findPython(){let[e]=this.runtime.split("."),n=e.split("python")[1];if(mt(`${e} --version`))return e;let r=mt("python --version");if(!r)throw new Error("Can not find python on your OS. Make sure it is installed.");if(n){let s=r.split(" ")[1]?.split(".")[0];s&&s!=n&&v.YELLOW("found python binary but with different version")}return"python"}load=()=>{this.bin||(this.bin=this.findPython()),this.python=(0,ae.spawn)(this.bin,["-u",t.wrapper,this.handlerFileAbsolutePath,this.pyModulePath,this.handlerName,String(this.timeout)],{env:this.environment}),this.python.pid||(console.error(`Can not find ${this.bin} in your PATH`),process.exit(1)),this.isMounted=!0};onComplete=e=>{}};var ft=require("node:child_process"),ht=require("node:fs"),be=require("node:fs/promises"),U=A(require("node:path"));var le=class t{invoke;mount;unmount;name;timeout;memorySize;environment;handlerPath;modulePath;handlerDir;handlerName;runtime;bin;ruby;isMounted=!1;emitRebuild;watcherListener;watchers=[];static wrapper=U.default.resolve(j("exlo"),"./src/lib/runtime/runners/ruby/index.rb");static DELIMITER="__|response|__";static ERR_RESPONSE="__|error|__";static WATCH="__|watch|__";constructor({name:e,timeout:n,memorySize:r,environment:s,handlerPath:i,handlerName:o,runtime:a},c){this.name=e,this.timeout=n,this.memorySize=r,this.environment=s,this.handlerName=o,this.runtime=a,this.emitRebuild=c;let l=U.default.resolve(i);this.handlerDir=U.default.dirname(l),this.handlerPath=U.default.basename(l,`.${this.handlerName}`),this.modulePath=`${this.handlerDir}/${this.handlerPath}.rb`,this.mount=async()=>{if(!this.ruby)try{await(0,be.access)(this.modulePath),this.load()}catch{console.error(`Can not find ${this.name}'s handler at: "${this.modulePath}"`),process.exit(1)}},this.unmount=d=>{d&&(this.ruby?.kill(),this.ruby=void 0,this.isMounted=!1)},this.invoke=async({event:d,info:m,clientContext:f,awsRequestId:p})=>new Promise((g,y)=>{let h=JSON.stringify({event:d,awsRequestId:p,context:f??""}),S=b=>{let w=null,R=b.toString();try{if(R.includes(t.WATCH))this.setWatchFiles(R);else if(R.includes(t.DELIMITER)){let I=R.split(t.DELIMITER),O=I[I.length-1];if(I.length>1){let E=I.slice(0,-1).join(`
8
+ `);E.trim()&&console.log(E)}O&&(w=JSON.parse(O)),this.ruby.stdout.removeListener("data",S),this.ruby.stderr.removeListener("data",u),g(w)}else R.trim()&&console.log(R)}catch(I){y(I)}};this.ruby.stdout.on("data",S);let u=b=>{let w=b.toString();if(w.includes(t.ERR_RESPONSE))try{w=JSON.parse(w.split(t.ERR_RESPONSE)[1]),w.requestId=p}catch{}finally{this.ruby.stdout.removeListener("data",S),this.ruby.stderr.removeListener("data",u),y(w)}else console.log(w)};this.ruby.stderr.on("data",u),this.ruby.stdin.write(`${h}
9
+ `)}),this.watcherListener=()=>{this.isMounted&&(this.unmount(!0),this.watchers.forEach(d=>d.close()),this.watchers=[],this.emitRebuild())}}setWatchFiles=async e=>{try{let n=e.split(t.WATCH),r=n[n.length-1],s=JSON.parse(r);s.push(this.modulePath);for(let i of s)try{await(0,be.access)(i),this.watchers.push((0,ht.watch)(i,{persistent:!1},this.watcherListener))}catch{}}catch(n){console.log(n)}};load=()=>{this.bin||(this.bin=process.platform==="win32"?"ruby.exe":"ruby"),this.ruby=(0,ft.spawn)(this.bin,[t.wrapper,this.modulePath,this.handlerName,this.name,String(this.timeout)],{env:this.environment,shell:!0}),this.ruby.pid||(console.error(`Can not find ${this.bin} in your PATH`),process.exit(1)),this.isMounted=!0};onComplete=e=>{}};var In=["@invoke","@url"],k=class t{handlers=[];static ip="127.0.0.1";debug=!1;port=0;constructor(e){this.debug=e.debug}static parseNameFromUrl(e){let n=e.split("/"),r=In.includes(n[1])?n[2]:n[3];if(r=decodeURIComponent(r),r.includes(":function:")){let s=r.split(":function:");r=s[s.length-1]}if(r.includes(":")){let s=r.split(":");s.length==2&&(r=s[0])}return r}getHandlerByName(e){if(!e)return;let n=t.parseNameFromUrl(e);return this.handlers.find(r=>r.name==n)}addHandler(e){let n=this.handlers.findIndex(r=>r.name==e.name&&r.esOutputPath==e.esOutputPath);if(n==-1)this.handlers.push(e),this.#e("POST",`/2015-03-31/functions/${e.name}/invocations`),e.url&&this.#e("ANY",`/@url/${e.name}`,"34");else{let r=this.handlers[n].runtime;r.startsWith("n")?(this.handlers[n].clear(),this.handlers[n]=e):r=="llrt"&&this.handlers[n].clear()}}#e(e,n,r="90"){let s=`${e} http://localhost:${this.port}${n}`;console.log(`\x1B[${r}m${s}\x1B[0m`)}};var ce;ve.networkInterfaces&&(ce=Object.values((0,ve.networkInterfaces)()).reduce((t,e)=>(t.push(...e),t),[])?.filter(t=>!t.internal&&t.family==="IPv4").find(Boolean)?.address);var En=bt.default?.url()!=null;En&&(console.warn("Lambdas timeout are disabled when a Debugger is attached"),$.ENABLE_TIMEOUT=!1);var An={errors:[],warnings:[],outputFiles:[],metafile:{inputs:{},outputs:{}},mangleCache:{}},de=class extends k{#e;runtimeConfig={};#t;sco=[];aws;llrt;customOfflineRequests=[];customBuildCallback;onReady;stop(e){this.#e.close(e)}constructor(e,n={debug:!1}){super(n),v.setDebug(n.debug),this.aws=e.aws,this.llrt=e.llrt,e.llrt&&(N.llrtBoostrapPath=e.llrt.boostrapPath,e.llrt.environment&&(N.llrtEnvs=e.llrt.environment)),this.sco=[],this.#e=gt.default.createServer({maxHeaderSize:105536},this.#r.bind(this)),this.#e.on("connection",s=>{s.on("close",()=>{let i=this.sco.findIndex(o=>o==s);i!=-1&&this.sco.splice(i,1)}),this.sco.push(s)});let r=(0,yt.randomUUID)();x.accountId=Buffer.from(r).toString("hex").slice(0,16),x.apiId=Buffer.from(r).toString("ascii").slice(0,10),x.port=this.port}setPort(e){this.port=e,x.port=e}listen(e=0,n){if(isNaN(e))throw Error("port should be a number");this.#e.once("error",async r=>{r.code==="EADDRINUSE"?(v.RED(r.message),process.exit(1)):console.log(r)}),this.#e.listen(e,async()=>{let{port:r,address:s}=this.#e.address();this.setPort(r),ce&&(k.ip=ce),typeof n=="function"&&await n(r,ce);try{await this.onReady?.(r,k.ip),await tt(this.handlers,this.aws)}catch(i){console.error(i)}})}#n(e,n){n=n.endsWith("/")?n:`${n}/`;let r=this.customOfflineRequests.find(s=>{let i=!1,o=!0;return typeof s.filter=="string"?(s.filter.endsWith("/")||(s.filter+="/"),i=s.filter==n):s.filter instanceof RegExp&&(i=s.filter.test(n)),typeof s.method=="string"&&s.method.toUpperCase()!="ANY"?o=s.method.toUpperCase()==e:Array.isArray(s.method)&&(s.method.findIndex(c=>c.toUpperCase()=="ANY")!==-1||(o=s.method.findIndex(c=>c.toUpperCase()==e)!==-1)),i&&o});if(r)return r.callback}async#r(e,n){let{url:r,method:s}=e,i=new URL(r,x.dummyHost),o=this.#n(s,i.pathname);if(o)try{await o(e,n)}catch{n.writableFinished||n.end("Internal Server Error")}else{e.on("error",c=>{console.error(c.stack)});let a=()=>{n.setHeader("Content-Type","text/html"),n.statusCode=404,n.end(We)};this.#t?this.#t(e,n,a):a()}}fakeRebuildEmitter=async()=>{if(this.customBuildCallback)try{await this.customBuildCallback(An,!0)}catch(e){console.log(e)}console.log(`\x1B[32m${new Date().toLocaleString()} \u{1F504}\u2705 Rebuild\x1B[0m`)};async load(e){for(let n of e){switch(n.runtime.charAt(0)){case"n":n.runner=new ie(n);break;case"p":n.runner=new oe(n,this.fakeRebuildEmitter);break;case"r":n.runner=new le(n,this.fakeRebuildEmitter);break;case"l":n.runner=new N(n,this.fakeRebuildEmitter);break;case"c":n.runner=new F(n,this.fakeRebuildEmitter);break;default:n.runner=new se(n.runtime);break}let s=new $(n);this.addHandler(s)}}};var xt=require("node:fs/promises"),D=A(require("node:path")),wt=require("node:url"),Rt=A(require("esbuild"));var vt="0.0.25";function St(t){let e=new Set;t.plugins&&(t.plugins=t.plugins.filter((r,s)=>typeof r!="object"||!r||!("name"in r)?!1:((!r.name||!r.name.length||typeof r.name!="string")&&(r.name=`plugin-${s}`,console.warn(`No Plugin name provided at index ${s}`)),e.has(r.name)?r.name=r.name+s:e.add(r.name),!0)));async function n({stop:r,lambdas:s,region:i,esbuild:o,getServices:a,setService:c,addLambda:l,log:d,setEndpoint:m,getEndpoint:f,getAwsProviderDefaults:p,setAwsProviderDefaults:g}){let y={build:{esbuild:t?.build?.esbuild??{},shimRequire:t?.build?.shimRequire,optimizeBuild:t?.build?.optimizeBuild},server:{port:t.server?.port,setEndpointEnvVar:t.server?.setEndpointEnvVar},onKill:[],llrt:t.llrt};if(t.defaults&&typeof t.defaults=="object"&&!Array.isArray(t.defaults)&&g(t.defaults),t.functions&&typeof t.functions=="object"&&!Array.isArray(t.functions))for(let[S,u]of Object.entries(t.functions))l(S,u);t.services&&(t.services.sqs&&c("sqs",t.services.sqs),t.services.sns&&c("sns",t.services.sns),t.services.dynamodb&&c("dynamodb",t.services.dynamodb));let h={stop:r,lambdas:s,region:i,esbuild:o,options:t,config:y,getServices:a,setService:c,addLambda:l,log:d,setEndpoint:m,getEndpoint:f,getAwsProviderDefaults:p};if(t.plugins){y.server.onReady=async(u,b)=>{for(let w of t.plugins)if(w.server?.onReady)try{await w.server.onReady.call(h,u,b)}catch(R){d.RED(w.name),console.error(R)}},y.buildCallback=async(u,b)=>{for(let w of t.plugins)if(w.buildCallback)try{await w.buildCallback.call(h,u,b)}catch(R){d.RED(w.name),console.error(R),b||process.exit(1)}};let S=t.plugins.reduce((u,b)=>(b.server?.request?.length&&u.push(...b.server.request),u),[]);S?.length&&(y.server.request=S.map(u=>(u.callback=u.callback.bind(h),u)));for(let u of t.plugins)if(u.onKill&&y.onKill.push(u.onKill.bind(h)),u.onInit)try{await u.onInit.call(h)}catch(b){throw d.RED(u.name),b}}return y}return n.plugins=t.plugins??[],n}var kn=["js","mjs","cjs","ts","cts","mts"],Ln=async t=>{let e=D.default.dirname(D.default.toNamespacedPath(t)),n=D.default.basename(t,D.default.extname(t)),r=D.default.join(e,`__${n}.mjs`);await Rt.default.build({outfile:r,entryPoints:[t],bundle:!0,packages:"external",platform:"node",format:"esm",target:`node${process.versions.node.split(".")[0]}`,minify:!0,sourcemap:"inline",sourcesContent:!0});try{return await import((0,wt.pathToFileURL)(r).href)}catch(s){throw s}finally{await(0,xt.rm)(r)}},It=async t=>{if(t){if(typeof t=="string"){let e=D.default.posix.parse(t),n=D.default.posix.join(e.dir,e.name),r=e.ext.slice(1),s=D.default.posix.resolve(n);kn.includes(r)&&(s+=`.${r}`);let i;try{i=await Ln(s)}catch(o){v.YELLOW(`Can not read 'defineConfig' from ${t}`),console.error(o),process.exit(1)}return{exportedFunc:i,configObjectName:r,configPath:s}}if(typeof t=="object"&&!Array.isArray(t))return{configObjectName:"__inline_config__",configPath:"inline define config",exportedFunc:St(t)}}};var On=t=>{let e=t.split(";");return e.findIndex(r=>r.trim().toLowerCase().startsWith("path="))==-1&&e.push("Path=/"),e.join(";")},Se=(t,e,n)=>{let r={};if(t&&Object.entries(t).forEach(([s,i])=>{r[s.toLowerCase()]=Array.isArray(i)?`[${i.join(", ")}]`:i}),n)for(let[s,i]of Object.entries(n))r[s]=i;if(!Array.isArray(e))return r;if(!e.every(s=>typeof s=="string")){let s=new Error("Wrong 'cookies'. must be string[]",{cause:e}),i={"Content-Type":r["content-type"]??"application/json","x-amzn-ErrorType":"InternalFailure",...n};throw r["set-cookie"]&&(i["set-cookie"]=r["set-cookie"]),s.headers=i,s}return e=e.map(On),r["set-cookie"]=r["set-cookie"]?[r["set-cookie"],...e]:e,r};var xe=require("node:crypto");var pe=class t extends x{res;mockEvent;payload;constructor({res:e,req:n,body:r,mockEvent:s,multiValueHeaders:i,isBase64Encoded:o,lambdaName:a,parsedURL:c,requestId:l}){super(),this.res=e,this.mockEvent=s,this.payload=s.version==1?t.createApgV1Event({req:n,mockEvent:s,parsedURL:c,lambdaName:a,multiValueHeaders:i,isBase64Encoded:o,requestId:l,body:r}):t.createApgV2Event({req:n,mockEvent:s,parsedURL:c,requestId:l,isBase64Encoded:o,body:r})}static skipHeaders=["connection","content"];static createApgV2Event=({req:e,mockEvent:n,parsedURL:r,requestId:s,isBase64Encoded:i,body:o})=>{let{method:a,headers:c}=e,l=t.getPathParameters(n,r),d,m=n.methods.find(b=>b==a)??"ANY",f={},p="";for(let b of Array.from(new Set(r.searchParams.keys()))){let w=r.searchParams.getAll(b);p+=`&${w.map(R=>encodeURI(`${b}=${R}`)).join("&")}`,f[b]=w.join(",")}p&&(p=p.slice(1));let g=n.paths[0]=="/*"?"$default":`${m} ${r.pathname}`,y=new Date,h="127.0.0.1",S=c.host?.startsWith("localhost")?h:c.host?c.host.split(":")[0]:h,u={version:"2.0",routeKey:g,rawPath:r.pathname,rawQueryString:p,headers:t.getCustomHeaders(e,n),requestContext:{accountId:String(t.accountId),apiId:t.apiId,domainName:`localhost:${t.port}`,domainPrefix:"localhost",http:{method:a,path:r.pathname,protocol:"HTTP/1.1",sourceIp:S,userAgent:c["user-agent"]??""},requestId:s,routeKey:g,stage:"$default",time:y.toISOString(),timeEpoch:y.getTime()}};return o?(u.body=o,u.isBase64Encoded=i):u.isBase64Encoded=!1,Object.keys(f).length&&(u.queryStringParameters=f),Object.keys(l).length&&(u.pathParameters=l),c.cookie&&(u.cookies=c.cookie.split("; ")),d=u,d.headers["x-mock-type"]&&delete d.headers["x-mock-type"],d};static createApgV1Event=({req:e,mockEvent:n,parsedURL:r,lambdaName:s,isBase64Encoded:i,requestId:o,body:a})=>{let{method:c}=e,l={};n.proxy=="httpApi"&&(l.version="1.0");let d=n.paths[0];l.resource=d,l.path=r.pathname,l.httpMethod=c;let{headers:m,multiValueHeaders:f,apiKey:p}=t.getApiGV1Headers(e,n);l.headers=m,l.multiValueHeaders=f;let g=String(e.socket.remoteAddress),y=Object.fromEntries(r.searchParams);l.queryStringParameters=Object.keys(y).length?y:null;let h=t.getMultiValueQueryStringParameters(r.searchParams);l.multiValueQueryStringParameters=Object.keys(h).length?h:null;let S=new Date,u={accountId:String(t.accountId),apiId:t.apiId,domainName:`localhost:${t.port}`,domainPrefix:"localhost",extendedRequestId:"fake-id",httpMethod:c,identity:{accessKey:null,accountId:null,caller:null,cognitoAuthenticationProvider:null,cognitoAuthenticationType:null,cognitoIdentityId:null,cognitoIdentityPoolId:null,principalOrgId:null,sourceIp:g,user:null,userAgent:e.headers["user-agent"],userArn:null},path:r.pathname,protocol:"HTTP/1.1",requestId:o,requestTime:S.toISOString(),requestTimeEpoch:S.getTime(),resourceId:"exhmtv",resourcePath:d};n.proxy=="httpApi"?(u.identity.cognitoAmr=null,u.stage="$default"):(u.stage="dev",n.private&&(u.identity.apiKey=p,u.identity.apiKeyId="abcdefghjk")),l.requestContext=u;let b=t.getPathParameters(n,r);return l.pathParameters=Object.keys(b).length?b:null,l.stageVariables=null,l.body=a??null,l.isBase64Encoded=a?i:!1,l};returnError=e=>{if(this.res.writableFinished)return!0;let n=500,r=t.httpErrMsg;e&&t.isEndpointTimeoutError(e.errorMessage)&&(this.mockEvent.proxy=="httpApi"?(n=503,r=t.unavailable):(n=504,r=t.apgTimeoutMsg));let s=[["Date",new Date().toUTCString()],["Content-Type",t.contentType.json],["Content-Length",String(r.length)],t.keepAlive,["Apigw-Requestid","ETuSEj-PiGYEJdQ="]];return this.res.shouldKeepAlive=!1,this.res.writeHead(n,s),this.res.end(r)};#e=e=>{let n="",r=typeof e;if(r=="string"||r=="number"||r=="boolean")n=String(e);else if(e===null)n="";else throw new Error("");return n};sendV1Response=e=>{let n=[["Date",new Date().toUTCString()],["Apigw-Requestid",Buffer.from((0,xe.randomUUID)()).toString("base64").slice(0,16)],t.keepAlive],r=200;if(!e||isNaN(e.statusCode))throw v.RED(`Valid 'http' response payload must be an object which includes a valid 'statusCode'.
10
+ Received:`),console.log(e),new Error;r=e.statusCode,e.headers&&typeof e.headers=="object"&&!Array.isArray(e.headers)&&Object.entries(e.headers).forEach(([l,d])=>{let m=t.normalizeHeaderKey(l),f=this.#e(d);n.push([m,f])}),e.multiValueHeaders&&typeof e.multiValueHeaders=="object"&&!Array.isArray(e.multiValueHeaders)&&Object.entries(e.multiValueHeaders).forEach(([l,d])=>{let m=t.normalizeHeaderKey(l);if(!Array.isArray(d))throw new Error;d.map(p=>this.#e(p)).forEach(p=>{n.push([m,p])})});let s=e.body;if(e.isBase64Encoded&&s){if(typeof s!="string")throw new Error;let l=Buffer.from(s,"base64").toString();if(Buffer.from(l).toString("base64")!=s)throw v.RED("response body is not properly base64 encoded"),new Error;s=l}n.findIndex(l=>l[0].toLowerCase()=="content-type")==-1&&n.push(["Content-Type",t.contentType.json]);let o=n.findIndex(l=>l[0].toLowerCase()=="content-length");o!=-1&&n.splice(o,1);let a=typeof s;a=="number"||a=="boolean"?s=String(s):s&&a!="string"&&v.YELLOW("API Gateway payload v1 return body must be typeof string, number or boolean ");let c=r==204?"0":s?String(Buffer.from(s).byteLength):"0";n.push(["Content-Length",c]),this.res.shouldKeepAlive=!1,this.res.writeHead(r,n),this.res.end(s)};sendV2Response=e=>{this.res.setHeader("Apigw-Requestid",Buffer.from((0,xe.randomUUID)()).toString("base64").slice(0,16)),this.res.setHeader("Date",new Date().toUTCString()),e?(typeof e.headers=="object"&&!Array.isArray(e.headers)&&Object.keys(e.headers).filter(s=>s!=="Apigw-Requestid"&&s!=="Date").forEach(s=>{this.res.setHeader(s,e.headers[s])}),e.statusCode?(this.res.statusCode=e.statusCode,e.cookies?.length&&this.res.setHeader("Set-Cookie",e.cookies)):this.res.statusCode=200):this.res.statusCode=200;let n="";if(!e)return this.res.end();if(typeof e=="object"&&typeof e.body=="string"&&(n=e.body,e.isBase64Encoded)){let r=Buffer.from(n,"base64").toString();if(Buffer.from(r).toString("base64")!=n)throw v.RED("response body is not properly base64 encoded"),new Error;n=r}typeof e=="string"?(this.res.setHeader("Content-Type",t.contentType.json),n=e):typeof e=="object"&&!e.statusCode&&(this.res.setHeader("Content-Type",t.contentType.json),n=JSON.stringify(e)),this.res.end(n)};sendResponse=e=>{if(!this.res.writableFinished)return this.mockEvent.version==1?this.sendV1Response(e):this.sendV2Response(e)}};var Nn=(t,e)=>{let n=e.url.stream?t:void 0;if(n){let r=!1,s=t.write.bind(t),i=t.setHeader.bind(t),o,a,c=m=>{a=a?Buffer.concat([a,m]):m},l=()=>{if(a){let m=Ve(a),f=m.statusCode??200;try{let p=Se(m.headers,m.cookies);t.writeHead(f,p)}catch(p){t.writeHead(500,p.headers),t.end?.(x.amzMsgNull),delete p.headers}}else t.writeHead(200)};n.setHeader=(m,f)=>{if(m.toLowerCase()=="content-type"){if(f=="application/vnd.awslambda.http-integration-response")return r=!0,i("Content-Type",x.contentType.json);o=f}return i(m,f)};let d=!1;return n.write=(m,f,p)=>{if(n.headersSent)return s(m,f,p);if(d)try{let g=P.codec.decode(m),y=JSON.parse(g);if(Array.isArray(y))throw new Error("Invalid stream response");return y&&typeof y=="object"?(l(),s(m,f,p)):(t.writeHead(200,{"Content-Type":x.contentType.octet}),t.end())}catch(g){let y=new Error(`When using HttpResponseStream first chunk of .write() must be valid JSON and not be Array. Number and null will respones with 200.
11
+ '${e.name}'`);return y.cause=g.message,console.error(y),te(t)}else if(r)Be(m)?d=!0:c(m);else{if(o==x.contentType.json)try{let y=P.codec.decode(m),h=JSON.parse(y);if(h===null||typeof h=="number")throw new Error(y)}catch(y){let h=new Error(`When 'Content-Type' is 'application/json' first chunk of .write() must be parsable JSON and not be null or number.
12
+ '${e.name}'`);return h.cause=y.message,console.error(h),te(t)}let g={"Content-Type":o??x.contentType.octet};return n.writeHead(200,g),s(m,f,p)}},n}},Dn=(t,e,n,r)=>{let s=Y(t),i=s?t.getParsedResponse():t,o,a=!1;if(i&&typeof i=="object"&&i.statusCode){let c=isNaN(i.statusCode),l=c?500:i.statusCode;if(a=!c&&(i.isBase64Encoded==!0||i.isBase64Encoded=="true"),i.headers||i.cookies)try{let d=Se(i.headers,i.cookies,r);e.writeHead(l,d)}catch(d){return e.writeHead(500,d.headers),delete d.headers,console.error(d),e.end(x.amzMsgNull)}else e.writeHead(l,{"Content-Type":x.contentType.json,...r});n?o=i:(typeof i.body<"u"&&(o=i.body),e.headersSent||e.setHeader("Content-Type",s?x.contentType.octet:x.contentType.json))}else e.writeHead(200,{"Content-Type":x.contentType.json,...r}),o=i;!e.headersSent&&!n&&s&&e.setHeader("Content-Type",x.contentType.octet),n?o instanceof Uint8Array?e.end(o):e.end(JSON.stringify(o)):((typeof o=="number"||typeof o=="boolean"||o==null||o instanceof Object)&&(o=JSON.stringify(o)),o&&a&&(o=Buffer.from(o,"base64")),e.end(o))};function Tn(t,e){let n=t["access-control-request-method"];return e=="OPTIONS"&&t.origin&&n&&["GET","HEAD","POST","PUT","DELETE","PATCH"].includes(n)}function Et(t,e){let n=e.origin;return n&&t.allowOrigins.find(s=>s=="*"||s=="http://*"||s=="https://*")?!0:!!t.allowOrigins.find(s=>s==n)}function Mn(t,e){if(!t.allowMethods?.length)return!1;if(t.allowMethods.find(s=>s=="*"))return!0;let r=e["access-control-request-method"];return!!t.allowMethods.find(s=>s==r)}function qn(t,e){if(!Mn(t,e)||!Et(t,e))return!1;let n=e["access-control-request-headers"]?e["access-control-request-headers"].split(",").filter(Boolean):[];return n.length?t.allowHeaders?.length?n.every(r=>t.allowHeaders.find(s=>s.toLowerCase()==r.toLowerCase())):!1:!0}var At=t=>({filter:/^\/@url\//,callback:async(e,n)=>{let{url:r,method:s,headers:i}=e;if(ze(n,s))return;let o=new URL(r,x.dummyHost),a=_(n),c=k.parseNameFromUrl(o.pathname),l=t.handlers.find(h=>h.name==c);if(!l?.url)return n.statusCode=404,n.end("Not Found");let d;if(l.url.cors){if(Tn(i,s)){let S=qn(l.url.cors,i),u={"Content-Type":x.contentType.json};return S&&(u["access-control-allow-origin"]=i.origin,l.url.cors.allowMethods.find(b=>b=="*")?u["access-control-allow-methods"]=i["access-control-request-method"]:u["access-control-allow-methods"]=l.url.cors.allowMethods.join(","),l.url.cors.allowHeaders?.length&&(u["access-control-allow-headers"]=l.url.cors.allowHeaders.join(",")),typeof l.url.cors.maxAge=="number"&&l.url.cors.maxAge>-1&&(u["access-control-max-age"]=`${l.url.cors.maxAge}`),l.url.cors.allowCredentials&&(u["access-control-allow-credentials"]="true")),n.writeHead(200,u),n.end()}Et(l.url.cors,i)&&(d={"access-control-allow-origin":i.origin},l.url.cors.exposeHeaders?.length&&(d["access-control-expose-headers"]=l.url.cors.exposeHeaders.join(",")),l.url.cors.allowCredentials&&(d["access-control-allow-credentials"]="true"))}let m=x.getIsBase64Encoded(i),f=await T(e,m),p=pe.createApgV2Event({req:e,mockEvent:l.url,parsedURL:o,requestId:a,body:f,isBase64Encoded:m}),g=`/@url/${l.name}`,y=o.pathname.slice(g.length);y||(y="/"),p.requestContext.accountId="anonymous",p.rawPath=y,p.requestContext.http.path=y;try{let h=Nn(n,l),S=await l.invoke(p,l.url,void 0,h);if(!S)return n.end();Dn(S,n,h,d)}catch(h){console.error(h),te(n,d)}}});var Pt=t=>({filter:/(^\/2015-03-31\/functions\/.*\/invocations)|(^\/@invoke\/)/,callback:async(e,n)=>{let{url:r,headers:s}=e,i=new URL(r,"http://localhost:3003"),o=k.parseNameFromUrl(i.pathname),a=t.handlers.find(h=>h.name==o),c=_(n);if(n.setHeader("Content-Type","application/json"),e.on("error",h=>{n.statusCode=502,n.end(JSON.stringify(h))}),!a){let{region:h,accountId:S}=t.aws;return n.statusCode=404,n.setHeader("x-amzn-errortype","ResourceNotFoundException"),n.end(ee(o,h,S))}let l=s["x-amz-invocation-type"],d=K(s["x-amz-client-context"]);if(d instanceof Error)return n.setHeader("x-amzn-errortype","InvalidRequestContentException"),n.statusCode=400,n.end(Z);let m=l=="DryRun"?204:l=="Event"?202:200,f=await T(e),p=G(f);if(n.setHeader("X-Amzn-Trace-Id","root=1-xxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx;sampled=0"),p instanceof Error)return n.statusCode=400,n.setHeader("x-amzn-errortype","InvalidRequestContentException"),n.end(X(p.message));n.setHeader("X-Amz-Executed-Version","$LATEST");let g=new Date,y={};n.statusCode=m,m!==200&&n.end(),m==202&&(y.kind="async");try{let h=await a.invoke(p,y,d);if(m==200){if(typeof h>"u"){n.end();return}let S=Y(h),u=S?h.buffer:h;S?u=P.codec.decode(u):typeof u!="string"&&(u=JSON.stringify(u)),n.end(u)}}catch(h){n.writableFinished||(n.setHeader("X-Amz-Function-Error",h.errorType??h.message??""),n.statusCode=200,n.end(JSON.stringify(h)))}}});var we=require("node:crypto"),kt=require("node:timers/promises");var Lt=t=>({filter:"/2015-03-31/functions",method:"POST",async callback(e,n){let r=await T(e),s=JSON.parse(r),{FunctionName:i,Handler:o,Environment:a,Runtime:c,Timeout:l,MemorySize:d}=s;t.addLambda(i,{handler:o,environment:a?.Variables,runtime:c,timeout:l,memorySize:d}),t.isDynamicBuild=!0,t.setEsBuildConfig(),await t.buildContext.dispose(),await t.buildAndWatch(),await(0,kt.setTimeout)(100),n.statusCode=201,n.end(r)}}),Ot=t=>({filter:/\/2015-03-31\/functions\/*/,method:"GET",async callback(e,n){let{url:r}=e,i=new URL(r,"http://localhost:3003").pathname.slice(22),o=t.getLambdaByName(i);if(!o){n.statusCode=404,n.end();return}let a={Code:{RepositoryType:"S3",Location:"https://s3.com/snapshots/1234543"},Tags:{},Configuration:{Architectures:["arm64"],CodeSha256:"WrLckXVmmfsSPvP/15FqPi9Nt9qQBaspP6RV3T137K4=",SigningJobArn:"",FunctionArn:`arn:aws:lambda:${t.aws.region}:${t.aws.accountId}:function:${i}`,FunctionName:i,Handler:o.handlerPath,Timeout:o.timeout,Runtime:o.runtime,MemorySize:o.memorySize,Environment:{Variables:Nt(o.environment)},State:"Active",LastUpdateStatus:"Successful",LastModified:new Date().toISOString(),Version:"$LATEST",Role:`arn:aws:iam::${t.aws.accountId}:role/fake-role-name`,RevisionId:(0,we.randomUUID)(),PackageType:"Zip",Description:"",EphemeralStorage:{Size:512},TracingConfig:{Mode:"PassThrough"},VpcConfig:{Ipv6AllowedForDualStack:!1,VpcId:"",SecurityGroupIds:[],SubnetIds:[]},CodeSize:5867,SnapStart:{OptimizationStatus:"Off",ApplyOn:"None"},LoggingConfig:{LogFormat:"Text",LogGroup:`/aws/lambda/${i}`}}};n.end(JSON.stringify(a))}}),Fn=["AWS_EXECUTION_ENV","AWS_LAMBDA_FUNCTION_VERSION","AWS_LAMBDA_FUNCTION_NAME","_HANDLER","IS_OFFLINE","IS_LOCAL","AWS_SAM_LOCAL","AWS_LAMBDA_FUNCTION_MEMORY_SIZE"];function Nt(t){let e={};for(let[n,r]of Object.entries(t))Fn.includes(n)||(e[n]=String(r));return e}var Dt=t=>({method:"GET",filter:/\/2015-03-31\/functions\/.*\/versions/,async callback(e,n){let{url:r}=e,i=new URL(r,"http://localhost:3003").pathname.slice(22);i=i.slice(0,i.indexOf("/"));let o=t.getLambdaByName(i);if(!o){n.statusCode=404,n.end();return}let a={Versions:[{Architectures:["arm64"],CodeSha256:"WrLckXVmmfsSPvP/15FqPi9Nt9qQBaspP6RV3T137K4=",SigningJobArn:"",FunctionArn:`arn:aws:lambda:${t.aws.region}:${t.aws.accountId}:function:${i}`,FunctionName:i,Handler:o.handlerPath,Timeout:o.timeout,Runtime:o.runtime,MemorySize:o.memorySize,Environment:{Variables:Nt(o.environment)},State:"Active",LastUpdateStatus:"Successful",LastModified:new Date().toISOString(),Version:"$LATEST",Role:`arn:aws:iam::${t.aws.accountId}:role/fake-role-name`,RevisionId:(0,we.randomUUID)(),PackageType:"Zip",Description:"",EphemeralStorage:{Size:512},TracingConfig:{Mode:"PassThrough"},VpcConfig:{Ipv6AllowedForDualStack:!1,VpcId:"",SecurityGroupIds:[],SubnetIds:[]},CodeSize:5867,SnapStart:{OptimizationStatus:"Off",ApplyOn:"None"},LoggingConfig:{LogFormat:"Text",LogGroup:`/aws/lambda/${i}`}}]};n.end(JSON.stringify(a))}}),Tt=t=>({method:"GET",filter:/\/2020-06-30\/functions\/.*\/code-signing-config/,async callback(e,n){let{url:r}=e,i=new URL(r,"http://localhost:3003").pathname.slice(22);if(i=i.slice(0,i.indexOf("/")),!t.getLambdaByName(i)){n.statusCode=404,n.end();return}let a={CodeSigningConfigArn:"",FunctionName:i};n.end(JSON.stringify(a))}});var Mt=require("@smithy/eventstream-codec");var Hn=(t,e)=>{let n=Buffer.from(t,e);return new Uint8Array(n.buffer,n.byteOffset,n.byteLength/Uint8Array.BYTES_PER_ELEMENT)},_n=t=>Buffer.from(t,t.byteOffset,t.byteLength).toString("utf8"),Re=new Mt.EventStreamCodec(_n,Hn),me=class t{res;static complete=Buffer.from([0,0,0,102,0,0,0,84,31,86,200,105,11,58,101,118,101,110,116,45,116,121,112,101,7,0,14,73,110,118,111,107,101,67,111,109,112,108,101,116,101,13,58,99,111,110,116,101,110,116,45,116,121,112,101,7,0,16,97,112,112,108,105,99,97,116,105,111,110,47,106,115,111,110,13,58,109,101,115,115,97,103,101,45,116,121,112,101,7,0,5,101,118,101,110,116,123,125,112,6,212,103]);constructor(e){this.res=e}write(e,n,r){this.res.write(Re.encode({headers:this.#e("PayloadChunk",x.contentType.octet),body:e}),n,r)}end(e){e?this.write(e,"utf8",()=>{this.res.end(t.complete)}):this.res.end(t.complete)}setHeader(e,n){e=="Content-Type"&&this.res.setHeader("Content-Type",n)}destroy(){this.res.destroy()}endWithError(e){let n={ErrorCode:e.errorType,ErrorDetails:JSON.stringify(e)},r=Array.from(Buffer.from(JSON.stringify(n)).values());this.res.end(Re.encode({headers:this.#e("InvokeComplete",x.contentType.json),body:new Uint8Array(r)}))}endWithJson(e){let n=Array.from(Buffer.from(JSON.stringify(e)).values());this.res.write(Re.encode({headers:this.#e("PayloadChunk",x.contentType.octet),body:new Uint8Array(n)}),()=>{this.res.end(t.complete)})}#e(e,n,r="event"){return{":event-type":{type:"string",value:e},":content-type":{type:"string",value:n},":message-type":{type:"string",value:r}}}};var qt=t=>({filter:/^\/2021-11-15\/functions\//,callback:async(e,n)=>{let{url:r,headers:s}=e,i=new URL(r,"http://localhost:3003"),o=_(n),a=k.parseNameFromUrl(i.pathname),c=t.handlers.find(p=>p.name==a),l=await T(e),d=G(l);if(n.setHeader("X-Amzn-Trace-Id","root=1-xxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx;sampled=0"),d instanceof Error)return n.statusCode=400,n.setHeader("x-amzn-errortype","InvalidRequestContentException"),n.end(X(d.message));let m=K(s["x-amz-client-context"]);if(m instanceof Error)return n.setHeader("x-amzn-errortype","InvalidRequestContentException"),n.statusCode=400,n.end(Z);let f=new me(n);if(c){let p=c.url?.stream??{};try{let g=await c.invoke(d,p,m,f);g&&f.endWithJson(g)}catch(g){n.writableFinished||f.endWithError(g)}}else{let{region:p,accountId:g}=t.aws;n.statusCode=404,n.end(ee(a,p,g))}}});var jt=t=>[Lt(t),Dt(t),Tt(t),Pt(t),qt(t),At(t),Ot(t)];var Ee=process.cwd(),Cn=3,Wn=1024,$n={IS_OFFLINE:!0,IS_LOCAL:!0,AWS_SAM_LOCAL:!0},Un=Ee.split(L.default.sep)[0],zn=new RegExp(`^.*:${Un}`),Vn=t=>zn.test(t);process.title="node (exlo)";var ue=class extends de{#e;options;config;esBuildConfig;buildContext={};customEsBuildConfig;optimizeBuild=!1;nodeVersion=!1;onKill=[];shimRequire=!1;port=0;onceServerReady=[];isDynamicBuild=!1;endpoints={};setLambdaEndpointEnvVar=!0;constructor(e,n){super(e,{debug:typeof n.debug=="boolean"?n.debug:!1}),this.#e=[],this.options=n,this.options.customEsBuildConfig&&(this.customEsBuildConfig=this.options.customEsBuildConfig),typeof this.options.config?.server?.setEndpointEnvVar=="boolean"&&(this.setLambdaEndpointEnvVar=this.options.config.server.setEndpointEnvVar),this.options.config&&(typeof this.options.config=="string"||typeof this.options.config=="object"&&!Array.isArray(this.options.config))&&(this.config=this.options.config),typeof this.options.optimizeBuild=="boolean"&&(this.optimizeBuild=this.options.optimizeBuild),typeof this.options.shimRequire=="boolean"&&(this.shimRequire=this.options.shimRequire),this.aws.runtime?.startsWith("node")?this.nodeVersion=this.aws.runtime?.replace(/[^0-9]/g,""):this.nodeVersion="20",v.BR_BLUE("Starting exlo...")}async start(){this.#s(),this.#e=this.#r(),await this.#o(),this.setEsBuildConfig(),await this.buildAndWatch()}setEsBuildConfig(){let n={sourcemap:!0,minify:!1,entryPoints:this.#e.filter(r=>r.runtime.startsWith("n")||r.runtime=="llrt").map(r=>r.esEntryPoint),outdir:L.default.join(Ee,".exlo","build"),metafile:!0,bundle:!0,platform:"node",target:"node20",format:"cjs",outbase:"src",plugins:[],external:["esbuild","llrt","llrt:*"],dropLabels:[]};if(typeof process.env.NODE_ENV=="string"&&(n.define={"process.env.NODE_ENV":`"${process.env.NODE_ENV}"`}),typeof this.nodeVersion=="string"&&!isNaN(Number(this.nodeVersion))){Number(process.versions.node.slice(0,2))<Number(this.nodeVersion)&&v.RED(`You are running on NodeJS ${process.version} which is lower than defined '${this.nodeVersion}'.`),n.target=`node${this.nodeVersion}`;let r=()=>this.sco;n.plugins?.push(Oe({nodeVersion:Number(this.nodeVersion),shimRequire:this.shimRequire,optimizeBuild:this.optimizeBuild,buildCallback:this.buildCallback,getSockets:r}))}this.customEsBuildConfig&&(n=Ne(n,this.customEsBuildConfig)),this.esBuildConfig=n}async buildAndWatch(){this.buildContext=await Ie.default.context(this.esBuildConfig),await this.buildContext.watch()}buildCallback=async(e,n)=>{if(n||this.isDynamicBuild)await this.#t(e);else{let{outputs:r}=e.metafile;if(this.#i(r),this.customBuildCallback)try{await this.customBuildCallback(e,!1)}catch(o){console.log(o)}this.#a();let s=this,i=await new Promise(o=>{this.listen(this.port,async(a,c)=>{let l=`http://localhost:${a}`;v.PINK(`Lambda endpoint: ${l}`),this.endpoints.lambda=l,this.setLambdaEndpointEnvVar&&(this.runtimeConfig.environment.AWS_ENDPOINT_URL_LAMBDA=l,this.aws.environment.AWS_ENDPOINT_URL_LAMBDA=l),await s.load(s.#e);for(let d of s.#e)d.setEnv("LOCAL_PORT",a),d.setEnv("AWS_LAMBDA_RUNTIME_API",`127.0.0.1:${a}`),this.setLambdaEndpointEnvVar&&d.setEnv("AWS_ENDPOINT_URL_LAMBDA",l);o({url:l,port:a})})});this.onceServerReady.forEach(o=>{o(i)})}};async#t(e){if(e?.errors?.length)v.RED("Build failed:"),console.error(e.errors);else{this.#i(e.metafile.outputs);try{await this.load(this.#e),this.customBuildCallback&&await this.customBuildCallback(e,!0)}catch(n){console.error(n)}console.log(`\x1B[32m${new Date().toLocaleString()} \u{1F504}\u2705 Rebuild\x1B[0m`)}}#n(e){let n=this.aws,r=n.runtime,s=this.runtimeConfig.environment.AWS_REGION??this.runtimeConfig.environment.REGION,o=n.functions[e],a=o.handler,c=L.default.extname(a),l=c.slice(1),d=L.default.resolve(a.replace(c,"")),m=n.getFunction(e),f=m.runtime??r,p={name:e,runtime:m.runtime??r,handlerPath:a,handlerName:l,esEntryPoint:d,memorySize:o.memorySize??this.runtimeConfig.memorySize??Wn,timeout:o.timeout??this.runtimeConfig.timeout??Cn,sqs:[],ddb:[],environment:{AWS_EXECUTION_ENV:`AWS_Lambda_${f}`,AWS_LAMBDA_FUNCTION_VERSION:"$LATEST",AWS_LAMBDA_FUNCTION_NAME:e,_HANDLER:L.default.basename(a),...this.runtimeConfig.environment,...o.environment,...$n},invoke:async(g,y)=>{let h=this.getHandlerByName(`/@invoke/${e}`);if(h)return await h.invoke(g,y);v.RED(`'${e}' is not mounted yet.
13
+ Please invoke it after the initial build is completed.`)},invokeSub:[],invokeSuccessSub:[],invokeErrorSub:[],setEnv:(g,y)=>{this.setEnv(e,g,y)},shutdown:async()=>{let g=this.getHandlerByName(`/@invoke/${e}`);g&&await g.shutdown()}};if(p.onError=J(o.onError),p.onError?.kind=="lambda"&&(v.YELLOW("Dead-Letter queue could only be a SNS or SQS service"),delete p.onError),o.destinations&&typeof o.destinations=="object"&&(p.onFailure=J(o.destinations.onFailure),p.onSuccess=J(o.destinations.onSuccess)),p.onInvoke=g=>{p.invokeSub.push(g)},p.onInvokeSuccess=g=>{p.invokeSuccessSub.push(g)},p.onInvokeError=g=>{p.invokeErrorSub.push(g)},process.env.NODE_ENV&&(p.environment.NODE_ENV=process.env.NODE_ENV),s&&(p.environment.AWS_REGION=s,p.environment.AWS_DEFAULT_REGION=s),p.environment.AWS_LAMBDA_FUNCTION_MEMORY_SIZE=p.memorySize,p.url=Te(o),o.triggers?.length){let{sqs:g,ddb:y}=je({triggers:o.triggers});p.sqs=g,p.ddb=y}return p}#r(){let e=this.aws.functions;return Object.keys(e).reduce((s,i)=>{let o=this.#n(i);return s.push(o),s},[])}#i(e){let n=Object.keys(e).filter(r=>!r.endsWith(".map")&&e[r].entryPoint).map(r=>{let i=e[r].entryPoint,o="";Vn(i)&&(i=i.split(":").slice(1).join(":")),L.default.isAbsolute(i)||(i=L.default.resolve(i));let a=i.lastIndexOf(".");return a!=-1&&(o=L.default.extname(i),i=i.slice(0,a)),{esOutputPath:L.default.join(Ee,r),entryPoint:i,ext:o}});for(let r of this.#e){let s=n.find(i=>i?.entryPoint==r.esEntryPoint);s&&(r.esOutputPath=s.esOutputPath,r.entryPoint=`${s.entryPoint}${s.ext}`)}}#s(){let{environment:e,memorySize:n,timeout:r}=this.aws;this.runtimeConfig.memorySize=n,this.runtimeConfig.timeout=r,this.runtimeConfig.environment=e?{...e}:{};let s=Object.keys(process.env).filter(i=>i.startsWith("AWS_"));for(let i of s)this.runtimeConfig.environment[i]=process.env[i];"FORCE_COLOR"in this.runtimeConfig.environment||process.env.FORCE_COLOR?.toLowerCase()==="false"||process.env.FORCE_COLOR?.toLowerCase()==="no"||process.env.FORCE_COLOR==="0"||("COLORTERM"in process.env||process.env.TERM?.includes("256"))&&(this.runtimeConfig.environment.FORCE_COLOR="true")}setEnv(e,n,r){let s=this.#e.findIndex(i=>i.name==e);if(s>-1){this.#e[s].environment[n]=r;let i=this.aws.getFunction(e);i&&(i.environment||(i.environment={}),i.environment[n]=r)}else v.RED(`Can not set env variable '${n}' on '${e}'`)}addLambda(e,n){if(!n.triggers)n.triggers=[];else if(!Array.isArray(n.triggers))throw new Error("Lambda 'triggers' must be an array when defined.");this.#s(),this.aws.functions[e]=n;let r=this.#n(e);this.#e.push(r)}getLambdaByName(e){return this.#e.find(n=>n.name==e)}buildDefineConfigParam(){let e=this;return{stop:async r=>{await this.kill(r)},lambdas:this.#e,addLambda:(r,s)=>{this.addLambda(r,s)},esbuild:Ie.default,getServices(){return{s3:e.aws.services.s3,sqs:e.aws.services.sqs,sns:e.aws.services.sns,dynamodb:e.aws.services.dynamodb}},setService(r,s){switch(r){case"s3":e.aws.services.s3=s;break;case"sns":e.aws.services.sns=s;break;case"sqs":e.aws.services.sqs=s;break;case"dynamodb":e.aws.services.dynamodb=s;break;default:break}},setEndpoint:(r,s,i)=>{if(this.endpoints[r]=s,typeof i=="string"){this.aws.environment[i]=s;for(let o of this.#e)this.setEnv(o.name,i,s)}},getEndpoint:r=>this.endpoints[r],getAwsProviderDefaults:()=>({accountId:e.aws.accountId,region:e.aws.region,runtime:e.aws.runtime,memorySize:e.aws.memorySize,timeout:e.aws.timeout,environment:{...e.aws.environment}}),setAwsProviderDefaults:({accountId:r,environment:s,memorySize:i,region:o,runtime:a,timeout:c})=>{r&&(e.aws.accountId=r),s&&(e.aws.environment=s),i&&(e.aws.memorySize=i),o&&(e.aws.region=o),a&&(e.aws.runtime=a),c&&(e.aws.timeout=c)},log:v}}async resolveConfig(){let e=await It(this.config);if(e?.exportedFunc){let n,{exportedFunc:r,configObjectName:s,configPath:i}=e;if(typeof r[s]=="function")n=r[s];else if(typeof r=="function")n=r;else if(typeof r.default=="function")n=r.default;else throw new Error(`Can not read exlo config at: ${i}`);return n}}onBeforeApplyConfigCallbacks=[];onBeforeApplyConfig(e){this.onBeforeApplyConfigCallbacks.push(e)}async#l(e){for(let n of this.onBeforeApplyConfigCallbacks)await n(e)}async#o(){let e=this.buildDefineConfigParam(),n=jt(this).map(a=>(a.callback=a.callback.bind(e),a)),r=await this.resolveConfig(),s={};r&&(await this.#l(r),s=await r(e),Array.isArray(s.onKill)&&this.onKill.push(...s.onKill),s.build&&(typeof s.build.shimRequire=="boolean"&&(this.shimRequire=s.build.shimRequire),typeof s.build.optimizeBuild=="boolean"&&(this.optimizeBuild=s.build.optimizeBuild)),!this.llrt&&s.llrt&&(this.llrt=s.llrt,N.llrtBoostrapPath=this.llrt.boostrapPath,this.llrt.environment&&(N.llrtEnvs=this.llrt.environment)),typeof s.buildCallback=="function"&&(this.customBuildCallback=s.buildCallback),s.server&&typeof s.server=="object"&&(Array.isArray(s.server.request)&&n.unshift(...s.server.request),typeof s.server.port=="number"&&!this.port&&(this.port=s.server.port),typeof s.server.onReady=="function"&&(this.onReady=s.server.onReady),typeof s.server.setEndpointEnvVar=="boolean"&&(this.setLambdaEndpointEnvVar=s.server.setEndpointEnvVar))),this.customOfflineRequests=n;let i=s?.build?.esbuild;if(!i)return;let o=De(i);Object.keys(o).length&&(this.customEsBuildConfig?this.customEsBuildConfig={...this.customEsBuildConfig,...o}:this.customEsBuildConfig=o)}#a=()=>{let e=this.options.port;isNaN(e)||(this.port=e)};async kill(e){this.buildContext.dispose&&await this.buildContext.dispose();for(let n of Ft.EventSourceMapping.SOURCES)try{await n.disable()}catch(r){console.error(r)}for(let n of this.handlers)n.clear?.();this.stop(e);for(let n of this.onKill)try{await n()}catch(r){console.error(r)}}};async function Bn(t){let e=Ht(t);return await e.exlo.start(),await e.waitServer,{port:e.listeningPort,url:e.listeningUrl,endpoints:e.exlo.endpoints,async kill(){await e.exlo.kill()},[Symbol.asyncDispose]:async()=>{await e.exlo.kill()}}}var Ae=class{accountId="123456789012";region="us-east-1";timeout=3;memorySize=1024;environment={};services={};functions={};runtime=`node${process.versions.node.split(".")[0]}.x`;getFunction(e){return this.functions[e]}};function Ht(t){let e=new Ae,n={};t&&(t.port&&(n.port=t.port),typeof t.debug=="boolean"&&(n.debug=t.debug),t.build&&(typeof t.build.shimRequire=="boolean"&&(n.shimRequire=t.build.shimRequire),typeof t.build.optimizeBuild=="boolean"&&(n.optimizeBuild=t.build.optimizeBuild),t.build.esbuild&&(n.customEsBuildConfig=t.build.esbuild)),t.config&&(n.config=t.config),t.functions&&(e.functions=t.functions),t.defaults&&(t.defaults.environment&&(e.environment=t.defaults.environment),t.defaults.timeout&&(e.timeout=t.defaults.timeout),t.defaults.memorySize&&(e.memorySize=t.defaults.memorySize),t.defaults.runtime&&(e.runtime=t.defaults.runtime),t.defaults.accountId&&(e.accountId=t.defaults.accountId),t.defaults.region&&(e.region=t.defaults.region)));let r;t?.llrt?r=t.llrt:typeof t?.config=="object"&&t.config.llrt&&(r=t.config.llrt);let s=new ue({aws:e,llrt:r},n);typeof t?.onKill=="function"&&s.onKill.push(t.onKill);let i;s.onceServerReady.push(a=>{o.listeningPort=a.port,o.listeningUrl=a.url,i()});let o={listeningPort:0,listeningUrl:"",exlo:s,waitServer:new Promise(a=>{i=a})};return o}0&&(module.exports={createAppRunner,exloVersion,run});
@@ -1,13 +1,13 @@
1
- var ye=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});import O from"node:path";import ct from"esbuild";import{EventSourceMapping as On}from"exlo/internal/esm";import ge from"node:path";import{createRequire as pt}from"node:module";var _=ye,$={};function q(t){if($[t])return $[t];if(typeof _=="function"&&typeof _.resolve=="function"){let n=ge.resolve(_.resolve(t),"../../");return $[t]=n,n}_=pt(new URL(".",import.meta.url));let e=ge.resolve(_.resolve(t),"../../");return $[t]=e,e}var be=["aws-sdk","@aws-sdk/*","@angular/core","@angular/platform-browser","@aws-sdk/*","@elastic/elasticsearch","@hapi/joi","@opensearch-project/opensearch","@smithy/*","axios","axios-retry","axios-cache-interceptor","aws-serverless-express","aws-sdk","body-parser","classnames","clsx","cookie-parser","cors","core-js","date-fns","dayjs","express","helmet","joi","koa","leaflet","lodash","mysql","mysql2","mongodb","mongoose","moment","http-proxy","http-proxy-middleware","react","react/*","react-dom","react-dom/*","react-hook-form","react-infinite-scroll-component","react-modal","react-rangeslider","react-responsive","react-select","react-scroll","react-slick","react-lazy-load","react-lazyload","react-redux","react-router","react-router-dom","redux","redux-persist","regenerator-runtime","serve-static","express-session","exlo/*","serverless-http","sequelize","svelte","svelte/*","typeorm","pg","pg-hstore","prop-types","underscore","uuid","vue","xmlbuilder","yup","zod","sharp"];var mt=t=>`import { createRequire as __crE_ } from "${t}module";import { fileURLToPath as __futP_ } from "${t}url";import { dirname as __dN_ } from "${t}path";global.__filename = __futP_(import.meta.url);global.__dirname = __dN_(__filename);global.require = __crE_(__filename);
2
- `,ve=({nodeVersion:t,shimRequire:e,optimizeBuild:n,buildCallback:r,getSockets:s})=>({name:"build-optimizer-plugin",setup(i){let o=!1;if(i.onEnd(async a=>{if(!o&&a?.errors?.length&&process.exit(1),o)for(let c of s())c.writable&&c.destroy();try{await r(a,o,i.initialOptions.format,i.initialOptions.outdir)}catch(c){console.log(c)}o=!0}),n&&(i.initialOptions.external.push(...be),i.initialOptions.format=="esm"&&(i.initialOptions.mainFields?i.initialOptions.mainFields.includes("module")||(i.initialOptions.mainFields.includes("main")?i.initialOptions.mainFields.unshift("module"):i.initialOptions.mainFields.unshift("module","main")):i.initialOptions.mainFields=["module","main"])),i.initialOptions.format=="esm"&&e){let a=mt(t<18?"":"node:");i.initialOptions.banner?i.initialOptions.banner.js?i.initialOptions.banner.js=`${a}${i.initialOptions.banner.js}`:i.initialOptions.banner.js=a:i.initialOptions.banner={js:a}}}});var Se=(t,e)=>(Array.isArray(e.plugins)&&t.plugins.unshift(...e.plugins),Array.isArray(e.external)&&t.external.push(...e.external),Array.isArray(e.entryPoints)&&t.entryPoints.push(...e.entryPoints),"sourcemap"in e&&(t.sourcemap=e.sourcemap),typeof e.sourceRoot=="string"&&(t.sourceRoot=e.sourceRoot),typeof e.format=="string"&&(t.format=e.format),e.outExtension&&typeof e.outExtension=="object"&&!Array.isArray(e.outExtension)&&(t.outExtension=e.outExtension),"sourcesContent"in e&&(t.sourcesContent=e.sourcesContent),typeof e.minify=="boolean"&&(t.minify=e.minify),typeof e.minifyWhitespace=="boolean"&&(t.minifyWhitespace=e.minifyWhitespace),typeof e.minifyIdentifiers=="boolean"&&(t.minifyIdentifiers=e.minifyIdentifiers),typeof e.minifySyntax=="boolean"&&(t.minifySyntax=e.minifySyntax),typeof e.jsx=="string"&&(t.jsx=e.jsx),typeof e.jsxFactory=="string"&&(t.jsxFactory=e.jsxFactory),typeof e.jsxFragment=="string"&&(t.jsxFragment=e.jsxFragment),typeof e.jsxImportSource=="string"&&(t.jsxImportSource=e.jsxImportSource),"jsxDev"in e&&(t.jsxDev=e.jsxDev),"jsxSideEffects"in e&&(t.jsxSideEffects=e.jsxSideEffects),typeof e.outdir=="string"&&(t.outdir=e.outdir),typeof e.outbase=="string"&&(t.outbase=e.outbase),(typeof e.target=="string"||Array.isArray(e.target))&&(t.target=e.target),typeof e.tsconfig=="string"&&(t.tsconfig=e.tsconfig),e.tsconfigRaw&&["string","object"].includes(typeof e.tsconfigRaw)&&(t.tsconfigRaw=e.tsconfigRaw),typeof e.legalComments=="string"&&(t.legalComments=e.legalComments),Array.isArray(e.pure)&&(t.pure=e.pure),Array.isArray(e.drop)&&(t.drop=e.drop),Array.isArray(e.dropLabels)&&t.dropLabels.push(...e.dropLabels),Array.isArray(e.resolveExtensions)&&(t.resolveExtensions=e.resolveExtensions),Array.isArray(e.mainFields)&&(t.mainFields=e.mainFields),Array.isArray(e.nodePaths)&&(t.nodePaths=e.nodePaths),typeof e.ignoreAnnotations=="boolean"&&(t.ignoreAnnotations=e.ignoreAnnotations),typeof e.treeShaking=="boolean"&&(t.treeShaking=e.treeShaking),e.define&&typeof e.define=="object"&&(t.define?t.define={...t.define,...e.define}:t.define=e.define),e.banner&&typeof e.banner=="object"&&(t.banner=e.banner),e.footer&&typeof e.footer=="object"&&(t.footer=e.footer),e.loader&&typeof e.loader=="object"&&(t.loader=e.loader),e.alias&&typeof e.alias=="object"&&(t.alias=e.alias),typeof e.assetNames=="string"&&(t.assetNames=e.assetNames),typeof e.entryNames=="string"&&(t.entryNames=e.entryNames),typeof e.publicPath=="string"&&(t.publicPath=e.publicPath),Array.isArray(e.inject)&&(t.inject=e.inject),typeof e.splitting=="boolean"&&(t.splitting=e.splitting),typeof e.preserveSymlinks=="boolean"&&(t.preserveSymlinks=e.preserveSymlinks),typeof e.keepNames=="boolean"&&(t.keepNames=e.keepNames),e.supported&&typeof e.supported=="object"&&(t.supported=e.supported),Array.isArray(e.conditions)&&(t.conditions=e.conditions),typeof e.absWorkingDir=="string"&&(t.absWorkingDir=e.absWorkingDir),e.mangleProps instanceof RegExp&&(t.mangleProps=e.mangleProps),e.reserveProps instanceof RegExp&&(t.reserveProps=e.reserveProps),typeof e.mangleQuoted=="boolean"&&(t.mangleQuoted=e.mangleQuoted),e.mangleCache&&typeof e.mangleCache=="object"&&(t.mangleCache=e.mangleCache),typeof e.packages=="string"&&(t.packages=e.packages),typeof e.logLevel=="string"&&(t.logLevel=e.logLevel),typeof e.logLimit=="number"&&(t.logLimit=e.logLimit),e.logOverride&&typeof e.logOverride=="object"&&(t.logOverride?t.logOverride={...t.logOverride,...e.logOverride}:t.logOverride=e.logOverride),t);var xe=t=>{let e={};return Array.isArray(t.plugins)&&(e.plugins=t.plugins),Array.isArray(t.external)&&(e.external=t.external),"sourcemap"in t&&(e.sourcemap=t.sourcemap),typeof t.sourceRoot=="string"&&(e.sourceRoot=t.sourceRoot),typeof t.format=="string"&&(e.format=t.format),t.outExtension&&typeof t.outExtension=="object"&&!Array.isArray(t.outExtension)&&(e.outExtension=t.outExtension),"sourcesContent"in t&&(e.sourcesContent=t.sourcesContent),typeof t.minify=="boolean"&&(e.minify=t.minify),typeof t.minifyWhitespace=="boolean"&&(e.minifyWhitespace=t.minifyWhitespace),typeof t.minifyIdentifiers=="boolean"&&(e.minifyIdentifiers=t.minifyIdentifiers),typeof t.minifySyntax=="boolean"&&(e.minifySyntax=t.minifySyntax),typeof t.jsx=="string"&&(e.jsx=t.jsx),typeof t.jsxFactory=="string"&&(e.jsxFactory=t.jsxFactory),typeof t.jsxFragment=="string"&&(e.jsxFragment=t.jsxFragment),typeof t.jsxImportSource=="string"&&(e.jsxImportSource=t.jsxImportSource),"jsxDev"in t&&(e.jsxDev=t.jsxDev),"jsxSideEffects"in t&&(e.jsxSideEffects=t.jsxSideEffects),typeof t.outdir=="string"&&(e.outdir=t.outdir),typeof t.outbase=="string"&&(e.outbase=t.outbase),(typeof t.target=="string"||Array.isArray(t.target))&&(e.target=t.target),typeof t.tsconfig=="string"&&(e.tsconfig=t.tsconfig),t.tsconfigRaw&&["string","object"].includes(typeof t.tsconfigRaw)&&(e.tsconfigRaw=t.tsconfigRaw),typeof t.legalComments=="string"&&(e.legalComments=t.legalComments),Array.isArray(t.pure)&&(e.pure=t.pure),Array.isArray(t.drop)&&(e.drop=t.drop),Array.isArray(t.dropLabels)&&(e.dropLabels=t.dropLabels),Array.isArray(t.resolveExtensions)&&(e.resolveExtensions=t.resolveExtensions),Array.isArray(t.mainFields)&&(e.mainFields=t.mainFields),Array.isArray(t.nodePaths)&&(e.nodePaths=t.nodePaths),typeof t.ignoreAnnotations=="boolean"&&(e.ignoreAnnotations=t.ignoreAnnotations),typeof t.treeShaking=="boolean"&&(e.treeShaking=t.treeShaking),t.define&&typeof t.define=="object"&&(e.define=t.define),t.banner&&typeof t.banner=="object"&&(e.banner=t.banner),t.footer&&typeof t.footer=="object"&&(e.footer=t.footer),t.loader&&typeof t.loader=="object"&&(e.loader=t.loader),t.alias&&typeof t.alias=="object"&&(e.alias=t.alias),typeof t.assetNames=="string"&&(e.assetNames=t.assetNames),typeof t.entryNames=="string"&&(e.entryNames=t.entryNames),typeof t.publicPath=="string"&&(e.publicPath=t.publicPath),typeof t.splitting=="boolean"&&(e.splitting=t.splitting),typeof t.preserveSymlinks=="boolean"&&(e.preserveSymlinks=t.preserveSymlinks),Array.isArray(t.inject)&&(e.inject=t.inject),typeof t.keepNames=="boolean"&&(e.keepNames=t.keepNames),t.supported&&typeof t.supported=="object"&&(e.supported=t.supported),Array.isArray(t.entryPoints)&&(e.entryPoints=t.entryPoints),Array.isArray(t.conditions)&&(e.conditions=t.conditions),typeof t.absWorkingDir=="string"&&(e.absWorkingDir=t.absWorkingDir),t.mangleProps instanceof RegExp&&(e.mangleProps=t.mangleProps),t.reserveProps instanceof RegExp&&(e.reserveProps=t.reserveProps),typeof t.mangleQuoted=="boolean"&&(e.mangleQuoted=t.mangleQuoted),t.mangleCache&&typeof t.mangleCache=="object"&&(e.mangleCache=t.mangleCache),typeof t.packages=="string"&&(e.packages=t.packages),t.logOverride&&typeof t.logOverride=="object"&&(e.logOverride=t.logOverride),typeof t.logLevel=="string"&&(e.logLevel=t.logLevel),typeof t.logLimit=="number"&&(e.logLimit=t.logLimit),e};var we=t=>{if(!t.url)return;let e=t.url.cors;return{kind:"url",proxy:"url",version:2,methods:["ANY"],paths:["/*"],pathsRegex:[],stream:typeof t.url=="object"&&t.url.invokeMode=="RESPONSE_STREAM",cors:e}};var ut=t=>{if(typeof t=="string"){let e=t.split(":")?.[2],n=t.split("/")?.[1];if(e==="dynamodb"&&n)return n}},Re=t=>{let e={},n=ut(t.arn);if(n&&(e.TableName=n),!!e.TableName){if(typeof t.batchSize=="number"&&t.batchSize>0&&t.batchSize<=1e4?e.batchSize=t.batchSize:e.batchSize=100,typeof t.enabled=="boolean"?e.enabled=t.enabled:e.enabled=!0,t.startingPosition&&(e.startingPosition=t.startingPosition),typeof t.maximumBatchingWindow=="number"&&t.maximumBatchingWindow>0&&t.maximumBatchingWindow<=300&&(e.maximumBatchingWindow=t.maximumBatchingWindow),typeof t.maximumRecordAgeInSeconds=="number"&&t.maximumRecordAgeInSeconds>=60&&t.maximumRecordAgeInSeconds<=604800&&(e.maximumRecordAgeInSeconds=t.maximumRecordAgeInSeconds),t.maximumRetryAttempts&&t.maximumRetryAttempts>0&&t.maximumRetryAttempts<=1e4&&(e.maximumRetryAttempts=t.maximumRetryAttempts),"bisectBatchOnFunctionError"in t&&(e.bisectBatchOnFunctionError=t.bisectBatchOnFunctionError),t.functionResponseType&&(e.functionResponseType=t.functionResponseType),t.filterPatterns&&(e.filterPatterns=t.filterPatterns),typeof t.tumblingWindowInSeconds=="number"&&(e.tumblingWindowInSeconds=t.tumblingWindowInSeconds),t.onFailureDestination){let r=t.onFailureDestination;if(!r.startsWith("arn:aws"))throw new Error(`Invalid onFailureDestination ARN: ${r}`);e.onFailureDestination=r}return e}};var Ie=t=>{let e={},{arn:n,filterPatterns:r,batchSize:s,maximumBatchingWindow:i,functionResponseType:o,enabled:a}=t;if(typeof n=="string"){let c=n.split(":");c.length&&(e.name=c[c.length-1],e.arn=n)}if(r&&(e.filterPatterns=r),s&&(e.batchSize=s),i&&(e.maximumBatchingWindow=i),(o=="ReportBatchItemFailures"||Array.isArray(o)&&o[0]=="ReportBatchItemFailures")&&(e.functionResponseType=["ReportBatchItemFailures"]),typeof a=="boolean"?e.enabled=a:e.enabled=!0,e.name)return e};var U=["lambda","sns","sqs"],Ee=({triggers:t})=>{let e=[],n=[],r=[],s=[],i=[];for(let o of t)switch(o.source){case"sqs":{let a=Ie(o);a&&r.push(a)}continue;case"dynamodb":{let a=Re(o);a&&s.push(a)}continue;default:break}return{ddb:s,endpoints:e,s3:i,sns:n,sqs:r}},z=t=>{if(!(!t||t.type&&!U.includes(t.type)))if(typeof t=="string")if(t.startsWith("arn:")){let[,,e,n,r,s,i]=t.split(":");if(U.includes(e))return{kind:e,name:s=="function"?i:s}}else return{kind:"lambda",name:t};else{let e={};if(typeof t.arn=="string"){let[,,n,r,s,i,o]=t.arn.split(":");e.name=i,U.includes(n)&&(e.kind=n)}else if(U.includes(t.type)&&t.arn){e.kind=t.type;let[n,r]=Object.entries(t.arn)?.[0];if(!n||!r)return}if(e.kind&&e.name)return e}};import Ae from"node:path";import{spawn as ft}from"node:child_process";import{watch as ht}from"node:fs";import{createServer as yt}from"node:http";import gt from"node:path";var bt=new URLPattern({pathname:"/2018-06-01/runtime/invocation/:awsRequestId/:returnType"}),j=class t{constructor({name:e,timeout:n,memorySize:r,environment:s,handlerPath:i,handlerName:o,runtime:a},c,l){this.cwd=l;this.name=e,this.timeout=n,this.memorySize=r,this.environment=s,this.handlerName=o,this.runtime=a,this.emitRebuild=c,this.bin=gt.resolve(i),this.mount=async()=>{await this.createOwnedServer(),await this.load()},this.unmount=d=>{this.runner?.kill(),this.runner=void 0,this.isMounted=!1,this.server?.close(),this.server?.closeAllConnections(),this.watcher?.close()},this.invoke=async({event:d,info:m,clientContext:h,awsRequestId:p})=>{this.isMounted||await this.load();let g,y,f=new Promise((u,v)=>{g=u,y=v}),b={id:p,event:d,resolve:g,inFlight:!1,reject:y};return this.invocations.push(b),this.handleInvoke(),f}}static async collectBody(e){let n=Buffer.alloc(0);return e.on("data",r=>{n=Buffer.concat([n,r])}),new Promise(r=>{e.on("end",async()=>{r(n?n.toString("utf-8"):void 0)})})}invoke;mount;unmount;name;timeout;memorySize;environment;handlerName;runtime;bin;runner;isMounted=!1;watchers=[];filesTime=new Map;port;watcher;emitRebuild;invocations=[];queue=[];getWaitingInvocation(){return this.invocations.find(e=>!e.inFlight)}server=void 0;async createOwnedServer(){let e=yt(async(n,r)=>{let{method:s,url:i,headers:o}=n;if(s=="POST"){let a=bt.exec(i,"http://localhost:3000"),c=a?.pathname.groups.awsRequestId,l=a?.pathname.groups.returnType;if(!(c&&(l=="response"||l=="error"))){r.statusCode=400,r.end();return}let d=this.invocations.findIndex(p=>p.id==c);if(d==-1){r.statusCode=400,r.end();return}let m=await t.collectBody(n),h=this.invocations[d];this.invocations.splice(d,1),await new Promise(p=>{r.statusCode=202,r.end(()=>{l=="response"?h.resolve(m):h.reject(m),p(void 0)})});return}if(s=="GET"&&i=="/2018-06-01/runtime/invocation/next"){let a=this.getWaitingInvocation();if(!a){this.queue.push(r);return}a.inFlight=!0,r.setHeader("Lambda-Runtime-Aws-Request-Id",a.id),r.end(JSON.stringify(a.event));return}r.statusCode=400,r.end()});e.keepAliveTimeout=0,await new Promise(n=>{e.listen(n)}),e.unref(),this.port=e.address().port,this.server=e}load=()=>(this.watcher||(this.watcher=ht(this.bin,(e,n)=>{this.emitRebuild()}),this.watcher.unref()),this.runner=ft(this.bin,{env:{...this.environment,AWS_LAMBDA_RUNTIME_API:`127.0.0.1:${this.port}`},stdio:"inherit",cwd:this.cwd}),this.runner.on("error",e=>{console.error("Failed to run custome runtime.",e)}),this.runner.pid||(console.error(`Can not find custome runtime ${this.bin}`),process.exit(1)),new Promise(e=>{this.runner.once("spawn",()=>{this.isMounted=!0,e(void 0)})}));onComplete=e=>{let n=this.invocations.findIndex(r=>r.id==e);n!=-1&&this.invocations.splice(n,1)};handleInvoke(){try{let e=this.getWaitingInvocation();if(!e||!this.queue.length)return;let n=this.queue[0];n||console.error("This is a bug in exlo, please report!"),n.setHeader("Lambda-Runtime-Aws-Request-Id",e.id),this.queue.splice(this.queue.findIndex(r=>r==n),1),n.end(JSON.stringify(e.event))}catch(e){console.error(e)}}};var L=class t extends j{static llrtEnvs={};static llrtBoostrapPath="bootstrap";constructor(e,n){let r=Ae.basename(e.handlerPath);e.handlerPath=t.llrtBoostrapPath;let s=Ae.dirname(e.esOutputPath);super({...e,environment:{...t.llrtEnvs,...e.environment,LAMBDA_HANDLER:r}},n,s)}};import{randomUUID as on}from"node:crypto";import an from"node:http";import ln from"node:inspector";import{networkInterfaces as Qe}from"node:os";import{randomUUID as Lt}from"node:crypto";var V=!1,vt=t=>{V=t},St=()=>V,F=(t,e)=>{V&&console.log(`\x1B[${t}m${e}\x1B[0m`)},xt=t=>console.log(`\x1B[31m${t}\x1B[0m`),wt=t=>F("32",t),Rt=t=>F("33",t),It=t=>F("36",t),Et=t=>F("90",t),At=t=>F("94",t),Pt=t=>F("95",t),kt=t=>V?console.log(t):void 0,S={GREEN:wt,YELLOW:Rt,CYAN:It,BR_BLUE:At,RED:xt,GREY:Et,PINK:Pt,setDebug:vt,getDebug:St,info:kt};var Pe="application/vnd.awslambda.http-integration-response",A=class t{buffer;_isHttpIntegrationResponse;_metaDelimiter;_endDelimiter;_ct;_isStreamResponse=!0;#e;static codec=new TextDecoder;static splitMessage=(e,n)=>{if(!e)return;let r=Array.from(e.values()),s=null;if(n)s=n;else for(let i=0;i<r.length;i++)if(r[i]===0&&[r[i+1],r[i+2],r[i+3],r[i+4],r[i+5],r[i+6],r[i+7]].every(c=>c===0)){s=i;break}if(s)return new Uint8Array(r.slice(0,s))};constructor(e){this._isHttpIntegrationResponse=!1,this._metaDelimiter=0,this._endDelimiter=0,this.#e=e}setHeader(e,n){this._isHttpIntegrationResponse=!this.buffer&&n==Pe&&(!this._ct||this._ct==Pe),this._ct=n}write(e,n){!this._isHttpIntegrationResponse&&!this._metaDelimiter&&(this._metaDelimiter=e.byteLength),this.#t(e)}end(e){this.buffer&&(this._endDelimiter=this.buffer.byteLength),e&&this.#t(e)}destroy(){}#t(e){this.buffer=typeof this.buffer>"u"?e:Buffer.concat([this.buffer,e])}getParsedResponse(){if(!this.#e)return;let e=this.#e.kind;if(e=="alb")return this.#n();if(e=="url")return this.#i();if(e=="apg")return this.#r()}#n(){let e=this._isHttpIntegrationResponse?t.splitMessage(this.buffer):this.buffer,n;return e&&(n=this.#s(e)),n}#r(){if(this._isHttpIntegrationResponse)return S.RED("awslambda.HttpResponseStream.from() is not supported with API Gateway"),{statusCode:500,headers:{"Content-Type":x.contentType.json},body:x.httpErrMsg};if(this.buffer)return this.#s(this.buffer)}#i(){let e=t.splitMessage(this.buffer,this._isHttpIntegrationResponse?void 0:this._metaDelimiter),n;return e&&(n=this.#s(e)),n}#s(e){let n=t.codec.decode(e);if(typeof n=="string")try{n=JSON.parse(n)}catch{}return n}};var ke="<html><head><title>404 Not Found</title></head><body><center><h1>404 Not Found</h1></center></body></html>",Le="<html><head><title>400 Request Header Or Cookie Too Large</title></head><body><center><h1>400 Bad Request</h1></center><center>Request Header Or Cookie Too Large</center></body></html>";var Ot=["GET","HEAD","POST","PUT","DELETE","PATCH","OPTIONS"],Nt=JSON.stringify({Message:null}),B=t=>{if(t)try{let e=Buffer.from(t,"base64").toString("utf-8");return JSON.parse(e)}catch{return new Error("InvalidRequestContentException")}},Oe=(t,e)=>{if(!Ot.includes(e))return t.statusCode=403,t.setHeader("Content-Type","application/json"),t.end(Nt),!0},N=async(t,e)=>{let n=Buffer.alloc(0);return t.on("data",s=>{n=Buffer.concat([n,s])}),await new Promise(s=>{t.on("end",async()=>{s(n?n.toString(e?"base64":"utf-8"):void 0)})})},J=t=>{let e;try{e=JSON.parse(t)}catch(n){e?.length?e=n:e={}}return e},Q=t=>t instanceof A,Ne=t=>{let e,n=Buffer.from(t).toString();try{e=JSON.parse(n)}catch{e=n}return e},H=t=>{let e=Lt();return t.setHeader("x-amzn-RequestId",e),e},K=t=>JSON.stringify({Type:"User",message:`Could not parse request body into json: Could not parse payload into json: ${t}: was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')`}),G=JSON.stringify({Type:null,message:"Client context must be a valid Base64-encoded JSON object."}),Y=(t,e,n)=>JSON.stringify({Type:"User",message:`Function not found: arn:aws:lambda:${e}:${n}:function:${t}`}),X=(t,e)=>{if(!t.writableFinished){if(t.statusCode=502,!t.headersSent&&(t.setHeader("Content-Type","application/json"),e))for(let[n,r]of Object.entries(e))t.setHeader(n,r);t.end("Internal Server Error")}},De=t=>t.byteLength==8&&Array.from(t.values()).every(e=>e===0);var vr=new Error(Le);var Te=t=>t.charAt(0).toUpperCase()+t.slice(1);var x=class t{static apiId="";static accountId="";static port=3e3;static serve;static contentType={json:"application/json",text:"text/plain; charset=utf-8",octet:"application/octet-stream"};static keepAlive=["Connection","keep-alive"];static dummyHost="http://localhost:3003";static httpErrMsg='{"message":"Internal Server Error"}';static apigJsonParseErrMsg='{"message":"[Unknown error parsing request body]"}';static apigForbiddenErrMsg='{"message":"Forbidden"}';static amzMsgNull='{"message":null}';static apgTimeoutMsg='{"message": "Endpoint request timed out"}';static unavailable='{"message":"Service Unavailable"}';static timeoutRegex=/after.\d+.*seconds/;static apgRequestTimeout=30;static normalizeHeaderKey=e=>e.toLowerCase().split("-").map(Te).join("-");static getMultiValueHeaders=e=>{let n={},r=e.filter((i,o)=>o%2==0).map(i=>i.toLowerCase()),s=e.filter((i,o)=>o%2!==0);return r.forEach((i,o)=>{i!="x-mock-type"&&(n[i]?n[i].push(s[o]):n[i]=[s[o]])}),n};static getIsBase64Encoded=e=>{let n=e["content-type"];return e["content-encoding"]||!n?!0:!(n.startsWith("application/json")||n.startsWith("application/xml")||n.startsWith("application/javascript")||n.startsWith("text/"))};static knownHeaders=["accept","accept-encoding","user-agent","host","via","content-length"];static getApiGV1Headers(e,n){let{rawHeaders:r}=e,s,i={"X-Forwarded-For":e.socket.remoteAddress,"X-Forwarded-Proto":"http","X-Forwarded-Port":String(t.port)};for(let l=0;l<r.length;){let d=r[l],m=d.toLowerCase();if(["connection","x-mock-type"].includes(m)){l=l+2;continue}this.knownHeaders.includes(m)&&(d=this.normalizeHeaderKey(m));let h=r[l+1];i[d]=h,m=="x-api-key"&&(s=h),l=l+2}let o={};for(let l of Object.keys(i).sort((d,m)=>d.localeCompare(m)))o[l]=i[l];let a={"X-Forwarded-For":[e.socket.remoteAddress],"X-Forwarded-Proto":["http"],"X-Forwarded-Port":[String(t.port)]};for(let l=0;l<r.length;){let d=r[l],m=d.toLowerCase();if(["connection","x-mock-type"].includes(m)){l=l+2;continue}this.knownHeaders.includes(m)&&(d=this.normalizeHeaderKey(m));let h=r[l+1];a[d]?a[d].push(h):a[d]=[h],l=l+2}let c={};for(let l of Object.keys(a).sort((d,m)=>d.localeCompare(m)))c[l]=a[l];return{headers:o,multiValueHeaders:c,apiKey:s}}static getCustomHeaders(e,n){let{headers:r}=e;return delete r["x-mock-type"],delete r.connection,{"X-Forwarded-For":e.socket.remoteAddress,"X-Forwarded-Proto":"http","X-Forwarded-Port":String(t.port),...r}}static getPathParameters(e,n){let r=e.paths[0].split("/"),s=n.pathname.split("/"),i={};return r.forEach((o,a)=>{o.startsWith("{")&&o.endsWith("}")&&!o.endsWith("+}")&&(i[o.slice(1,-1)]=s[a])}),i}static normalizeSearchParams=(e,n)=>{let r={};Array.from(e.keys()).forEach(o=>{let a=e.getAll(o).map(l=>l.toLowerCase()),c=o.toLowerCase();a?r[c]?r[c].push(...a):r[c]=a:r[c]||(r[c]=void 0)});let s="",i=n.indexOf("?");return i!=-1&&(s=n.slice(i+1)),r.toString=()=>s,r};static getMultiValueQueryStringParameters=e=>{let n={};e.delete("x_mock_type");for(let r of Array.from(new Set(e.keys())))n[r]=e.getAll(r).map(encodeURI);return n};static isEndpointTimeoutError=e=>{if(!e)return;let n=e.match(this.timeoutRegex)?.[0];if(n){let r=n.split(" ")[1];if(!isNaN(r))return Number(r)>=t.apgRequestTimeout}}};import{EventSourceMapping as Ht}from"exlo/internal/esm";import{EventSourceMapping as Dt}from"exlo/internal/esm";var Z=class{constructor(e,n,r,s,i){this.MaximumBatchingWindowInSeconds=e;this.BatchSize=n;this.lambdaName=r;this.handlers=s;this.onInvokeFinished=i}available=!0;#e=[];#t=!1;get messages(){return this.#e}#n(){setTimeout(async()=>{this.available=!1,this.#t||await this.#r()},this.MaximumBatchingWindowInSeconds*1e3)}async setRecord(e){this.#e.length||this.#n(),this.#e.push(e),(this.#e.length==this.BatchSize||!this.available)&&(this.available=!1,await this.#r())}async#r(){this.#t=!0;let e=this.#e,n=this.handlers.find(r=>r.name==this.lambdaName);try{let r=await n.invoke({Records:this.#e});await this.onInvokeFinished(e,r)}catch{}}};var qe=10,je=0,Tt=(t,e,n)=>t.receiveMessage({QueueUrl:e,AttributeNames:["All"],MessageAttributeNames:["All"],MaxNumberOfMessages:n}),Mt=(t,e)=>t.getQueueAttributes({QueueUrl:e,AttributeNames:["All"]}),Me=async(t,e,n)=>{for(let r of He(n,10)){if(!r.length)continue;let s=r.map((i,o)=>({Id:`id-${o+1}`,ReceiptHandle:i}));try{await t.deleteMessageBatch({QueueUrl:e,Entries:s})}catch{}}},qt=t=>{if(!t)return{};let e={};for(let[n,r]of Object.entries(t)){e[n]={};let{StringValue:s,BinaryValue:i,DataType:o}=r;o.startsWith("B")?e[n].binaryValue=i:e[n].stringValue=s,e[n].stringListValues=[],e[n].binaryListValues=[],e[n].dataType=o}return e},jt=(t,e)=>{let{MessageId:n,Body:r,MD5OfBody:s,ReceiptHandle:i,Attributes:o,MessageAttributes:a,MD5OfMessageAttributes:c}=t,l={messageId:n,receiptHandle:i,body:r,attributes:o,messageAttributes:qt(a)};return c&&(l.md5OfMessageAttributes=c),l.md5OfBody=s,l.eventSource="aws:sqs",l.eventSourceARN=e,l.awsRegion=e.split(":")[3],l},Ft=(t,e)=>t.map(n=>jt(n,e)),ee=class extends Dt{constructor(n,r,s){super(n);this.config=n;this.handlers=r;this.sqsClient=s;let i=this.config.EventSourceArn.split(":");this.QueueName=i[i.length-1],this.#n=this.config.FunctionResponseTypes?.[0]=="ReportBatchItemFailures"}#e=[];QueueName="";QueueUrl="";#t;#n;async onInvokeFinished(n,r){let s=n.map(i=>i.receiptHandle);this.#n&&(s=Fe(n,r)),await Me(this.sqsClient,this.QueueUrl,s)}#r(){let n=this.#e.find(s=>s.available);if(n)return n;let r=new Z(this.config.MaximumBatchingWindowInSeconds,this.config.BatchSize,this.config.FunctionName,this.handlers,this.onInvokeFinished.bind(this));return this.#e.push(r),r}async#i(n){for(let r of n)await this.#r().setRecord(r)}async init(){if(!this.sqsClient)return;let{QueueUrl:n}=await this.sqsClient.getQueueUrl({QueueName:this.QueueName});this.QueueUrl=n,await this.enable()}#s=1500;cleanBatchs(){for(let n=0;n<this.#e.length;n++)this.#e[n].available||this.#e.splice(n,1)}async#l(){let n=0,r=2e3,s=async()=>{try{let{Attributes:i}=await Mt(this.sqsClient,this.QueueUrl);if(!Number(i.ApproximateNumberOfMessages))n++,this.#s<=2e4&&(this.#s+=200),n==5&&(r=2e3);else{n=0,r=400;let a=this.#s;this.#s=350,a>=1600&&await this.#a(!0)}}catch{r=2e3}this.cleanBatchs(),this.#t=setTimeout(s,r)};await s()}#o;async#a(n){n&&clearTimeout(this.#o);let r=async()=>{if(!this.config.Enabled){this.State=="Disabling"&&(this.State="Disabled");return}try{let{Messages:s}=await Tt(this.sqsClient,this.QueueUrl,this.config.BatchSize<=10?this.config.BatchSize:10);if(s){let i=Ft(s,this.config.EventSourceArn),o=await this.#c(i);await this.#i(o)}}catch{}this.#o=setTimeout(r,this.#s)};await r()}async enable(){this.State="Enabling";try{await this.#l(),this.config.Enabled=!0,this.State="Enabled",await this.#a()}catch(n){console.error(n)}}disable(){this.config.Enabled=!1,clearTimeout(this.#t),this.State="Disabling"}async#c(n){let r=n.map(a=>{let c={...a};try{c.body=JSON.parse(c.body)}catch{}return c}),[s,i]=this.filterRecords(r);await Me(this.sqsClient,this.QueueUrl,i.map(a=>a.receiptHandle));let o=[];for(let a of s)o.push(...n.filter(c=>c.messageId==a.messageId));return o}};var _e=async(t,e)=>{let{accountId:n,region:r,services:s}=e;for(let i of t)for(let o of i.sqs){if(typeof o.arn!="string")throw new Error("SQS Event Source Mapping must have arn string");let a=o.arn;a.startsWith("arn:aws:sqs:")||(a=`arn:aws:sqs:${r}:${n}:${o.name}`);let c;if(Array.isArray(o.filterPatterns)){c=[];for(let d of o.filterPatterns)c.push({Pattern:JSON.stringify(d)});c.length||(c=void 0)}let l=new ee({BatchSize:typeof o.batchSize=="number"?o.batchSize:qe,Enabled:o.enabled,EventSourceArn:a,FunctionName:i.name,FunctionResponseTypes:o.functionResponseType,FilterCriteria:c?{Filters:c}:void 0,MaximumBatchingWindowInSeconds:typeof o.maximumBatchingWindow=="number"?o.maximumBatchingWindow:je},t,s.sqs);if(Ht.SOURCES.push(l),l.config.Enabled)try{await l.init()}catch(d){S.RED(`Failed to start EventSourceMapping ${l.config.EventSourceArn}
3
- Please verify provided SQS Client validity.`),console.error(d)}}},_t=/(-|\w+)/g,Ct=t=>t.length<81&&t.replace(_t,"")=="",Fe=(t,e)=>{if(typeof e>"u"||e===null||typeof e=="object"&&(e.batchItemFailures===null||Array.isArray(e.batchItemFailures)&&!e.batchItemFailures.length))return t.map(r=>r.receiptHandle);let n=[];if(typeof e=="object"&&Array.isArray(e.batchItemFailures)){if(e.batchItemFailures.some(r=>!r.itemIdentifier||!Ct(r.itemIdentifier)||!t.find(s=>s.messageId==r.itemIdentifier)))throw new Error("ReportBatchItemFailures: complete failure.");return t.forEach(r=>{e.batchItemFailures.find(i=>i.itemIdentifier==r.messageId)||n.push(r.receiptHandle)}),n}},He=(t,e)=>{let n=[];for(let r=0;r<t.length;r+=e){let s=t.slice(r,r+e);n.push(s)}return n};import{randomUUID as Vt}from"node:crypto";import Wt from"node:http";var $t=t=>{switch(t.kind){case"sns":return"@sns/parsed/";case"sqs":return"@sqs";case"lambda":return`@invoke/${t.name}/`;default:break}},Ce=(t,e)=>{let n=$t(e);if(!n)return;let r={"Content-Type":e.kind=="sqs"?"application/x-www-form-urlencoded":"application/json"};return Wt.request(`http://localhost:${t}/${n}`,{method:"POST",headers:r})},We=({event:t,payload:e,requestId:n,lambdaName:r,success:s})=>{let i={version:"1.0",timestamp:"2023-02-25T13:25:04.688Z",requestContext:{requestId:n,functionArn:`arn:aws:lambda:eu-west-3:000000000000:function:${r}:$LATEST`,condition:s?"Success":"RetriesExhausted",approximateInvokeCount:1},requestPayload:t,responseContext:{statusCode:200,executedVersion:"$LATEST"},responsePayload:e};return s||(i.responseContext.functionError="Unhandled"),JSON.stringify(i)},Ut=({topicName:t,event:e,payload:n,requestId:r,success:s,lambdaName:i})=>{let o="";if(s)o=We({event:e,payload:n,requestId:r,success:s,lambdaName:i});else if(typeof e=="string")o=e;else try{o=JSON.stringify(e)}catch(c){console.log(c)}let a={TopicArn:`arn:aws:sns:eu-west-3:000000000000:${t}`,Message:o,Action:"Publish",Version:"2010-03-31",MessageAttributes:{}};return s||(a.MessageAttributes={RequestID:{Type:"String",Value:r},ErrorCode:{Type:"String",Value:"200"},ErrorMessage:{Type:"String",Value:n.errorMessage}}),JSON.stringify(a)},zt=({destination:t,event:e,payload:n,requestId:r,lambdaName:s,success:i})=>{let o=new URLSearchParams;o.append("QueueUrl",t.name),o.append("Action","SendMessage");let a=e;try{a=JSON.stringify(a)}catch{}return o.append("MessageBody",a),i||(o.append("MessageAttribute.1.Name","RequestID"),o.append("MessageAttribute.1.Value.StringValue",r),o.append("MessageAttribute.1.Value.DataType","String"),o.append("MessageAttribute.1.Name","ErrorCode"),o.append("MessageAttribute.1.Value.StringValue","200"),o.append("MessageAttribute.1.Value.DataType","Number"),o.append("MessageAttribute.1.Name","ErrorMessage"),o.append("MessageAttribute.1.Value.StringValue",n.errorMessage),o.append("MessageAttribute.1.Value.DataType","String")),o.toString()},$e=({destination:t,event:e,payload:n,requestId:r,lambdaName:s,success:i})=>{switch(t.kind){case"sns":return Ut({topicName:t.name,event:e,payload:n,requestId:r,success:i,lambdaName:s});case"lambda":return We({event:e,payload:n,requestId:r,lambdaName:s,success:i});case"sqs":return zt({destination:t,event:e,payload:n,requestId:r,lambdaName:s,success:i});default:return""}},pe=({destination:t,LOCAL_PORT:e,event:n,payload:r,requestId:s,lambdaName:i})=>{try{let o=Ce(e,t);if(!o)return;o.end($e({destination:t,event:n,payload:r,requestId:s,lambdaName:i,success:!1}))}catch{}},Ue=({destination:t,LOCAL_PORT:e,event:n,payload:r,requestId:s,lambdaName:i})=>{try{let o=Ce(e,t);if(!o)return;o.end($e({destination:t,event:n,payload:r,requestId:s,lambdaName:i,success:!0}))}catch{}};var Bt=1080*1e3,Jt=new Set(["async","ddb","kinesis","s3","sns","sqs"]),ze=t=>typeof t?.kind=="string"?Jt.has(t.kind)||t.async:!1,C=class t{name;runtime;sqs;ddb;url;timeout;memorySize;environment;handlerPath;handlerName;esEntryPoint;esOutputPath;entryPoint;onError;onSuccess;onFailure;invokeSub;invokeSuccessSub;invokeErrorSub;#e;runner;static ENABLE_TIMEOUT=!0;constructor({name:e,runtime:n,timeout:r,memorySize:s,environment:i,handlerPath:o,handlerName:a,esEntryPoint:c,esOutputPath:l,entryPoint:d,sqs:m,ddb:h,url:p,invokeSub:g,invokeSuccessSub:y,invokeErrorSub:f,onError:b,onSuccess:u,onFailure:v,runner:w}){this.name=e,this.runtime=n,this.sqs=m,this.ddb=h,this.url=p,this.timeout=r,this.memorySize=s,this.environment=i,this.handlerPath=o,this.handlerName=a,this.esEntryPoint=c,this.esOutputPath=l,this.entryPoint=d,this.invokeSub=g,this.invokeSuccessSub=y,this.invokeErrorSub=f,this.onError=b,this.onSuccess=u,this.onFailure=v,this.runner=w}handleErrorDestination(e,n,r,s){if(this.runner.onComplete(s),this.invokeErrorSub.forEach(async i=>{try{await i(e,r,n)}catch{}}),ze(n)){let i={LOCAL_PORT:this.environment.LOCAL_PORT,event:e,payload:r,requestId:s,lambdaName:this.name};this.onError&&pe({...i,destination:this.onError}),this.onFailure&&pe({...i,destination:this.onFailure})}}handleSuccessDestination(e,n,r,s){this.runner.onComplete(s),this.onSuccess&&ze(n)&&Ue({destination:this.onSuccess,LOCAL_PORT:this.environment.LOCAL_PORT,event:e,payload:r,requestId:s,lambdaName:this.name}),this.invokeSuccessSub.forEach(async i=>{try{await i(e,r,n)}catch{}})}async invoke(e,n,r,s){let i=Vt();this.runner.isMounted||(S.BR_BLUE(`\u2744\uFE0F Cold start \u03BB '${this.name}'`),await this.runner.mount());for(let a of this.invokeSub)try{let c=await a(e,n);typeof c!="function"&&(e=c)}catch{}let o=this.#n(i,e,n);try{let a=await new Promise(async(c,l)=>{let d;t.ENABLE_TIMEOUT&&(d=setTimeout(()=>{s?.destroy(),this.runner.onComplete(i,!0),S.RED(`'${this.name}' | ${i}: Request failed`),l({errorType:"Unhandled",errorMessage:`${new Date().toISOString()} ${i} Task timed out after ${this.timeout} seconds`})},this.timeout*1e3));try{let m=await this.runner.invoke({event:e,awsRequestId:i,info:n,clientContext:r,response:s});clearTimeout(d),c(m)}catch(m){clearTimeout(d),l(m)}});return this.#t(),t.#r(o,this.name),this.handleSuccessDestination(e,n,a,i),a}catch(a){throw this.handleErrorDestination(e,n,a,i),this.runner.unmount(!0),this.#t(),a}}clear=()=>{clearTimeout(this.#e),this.runner.unmount()};async shutdown(){clearTimeout(this.#e),await this.runner.unmount(!0)}#t=()=>{clearTimeout(this.#e),this.#e=setTimeout(()=>{this.runner.unmount(!0)},Bt)};#n=(e,n,r)=>{let s=n?.httpMethod??n?.method??"",i=n?.path??n?.rawPath??"";i&&(i=decodeURI(i));let o=`${s} ${i}`,a=new Date;S.CYAN(`${a.toLocaleDateString()} ${a.toLocaleTimeString()} requestId: ${e} | '${this.name}' ${o}`),S.GREY(this.entryPoint);let c="";return typeof r?.kind=="string"&&(c=` (${r.kind.toUpperCase()})`),S.YELLOW(`\u03BB payload${c}:`),S.info(n),process.hrtime()};static#r=(e,n)=>{let r=process.hrtime(e),s=`${r[0]},${r[1]}s`,i=`\u231B\uFE0F \u03BB '${n}' execution time: ${s}`;setTimeout(()=>{S.YELLOW(i)},400)}};var te=class{err;constructor(e){this.err=new Error(`Local invoke of ${e} runtime is currently not supported by exlo.`)}isMounted=!0;mount=()=>{};unmount=()=>{};invoke=async()=>{throw this.err};onComplete=()=>{}};import{EventEmitter as Qt}from"node:events";import Kt from"node:path";import{Worker as Gt}from"node:worker_threads";var Yt=Kt.resolve(q("exlo"),"./dist/lib/runtime/runners/node/index.js"),ne=class extends Qt{_worker;isMounted=!1;_isLoading=!1;invoke;mount;unmount;name;timeout;memorySize;environment;handlerPath;handlerName;esOutputPath;hasFatalError;constructor({name:e,timeout:n,memorySize:r,environment:s,handlerPath:i,handlerName:o,esOutputPath:a}){super(),this.name=e,this.timeout=n,this.memorySize=r,this.environment=s,this.handlerPath=i,this.handlerName=o,this.esOutputPath=a,this.mount=async()=>{this._isLoading?(this.setMaxListeners(0),await new Promise((c,l)=>{this.once("loaded",d=>{d?c(void 0):l()})})):this.isMounted||(this._isLoading=!0,await this.importHandler(),this._worker.on("message",c=>{let{channel:l,data:d,awsRequestId:m,type:h,encoding:p}=c;l=="uncaught"?(this._worker.terminate(),this.isMounted=!1,this._isLoading=!1,S.RED(`${h} Uncaught exceptions`),console.error(d.error),d.solution&&(S.BR_BLUE("Solution:"),console.log(d.solution))):l=="fail"?(this.emit(m,l,d,h,p),this.unmount()):this.emit(m,l,d,h,p)}))},this.unmount=()=>{this._worker?.terminate(),this.isMounted=!1,this._isLoading=!1},this.invoke=async({event:c,info:l,clientContext:d,response:m,awsRequestId:h})=>new Promise((p,g)=>{this._worker.postMessage({channel:"exec",data:{event:c,clientContext:d},awsRequestId:h});let y=m??new A(l);function f(b,u,v,w){switch(b){case"return":case"succeed":case"done":this.removeListener(h,f),p(u);break;case"fail":this.removeListener(h,f),g(u);break;case"stream":v=="write"?y.write(u,w):v=="ct"?y.setHeader("Content-Type",u):v=="timeout"?(this.removeListener(h,f),y.destroy(),g(u)):(this.removeListener(h,f),y.end(u),p(y instanceof A?y:void 0));break;default:this.removeListener(h,f),g(new Error("Unknown error"));break}}this.on(h,f)})}async importHandler(){await new Promise((e,n)=>{let r={name:this.name,env:this.environment,execArgv:["--enable-source-maps"],workerData:{name:this.name,timeout:this.timeout,memorySize:this.memorySize,esOutputPath:this.esOutputPath,handlerPath:this.handlerPath,handlerName:this.handlerName,debug:S.getDebug()}};this._worker=new Gt(Yt,r),this._worker.setMaxListeners(0),this._worker.once("message",s=>{let{channel:i,data:o}=s;i=="import"?(this._worker.setMaxListeners(55),this.setMaxListeners(10),this.isMounted=!0,this._isLoading=!1,this.emit("loaded",!0),e(void 0)):i=="fatal"&&n(o)}),this._worker.postMessage({channel:"import"})})}onComplete=(e,n)=>{this._worker?.postMessage({channel:"complete",awsRequestId:e,timeout:n})}};import{execSync as Xt,spawn as Zt}from"node:child_process";import{watch as en}from"node:fs";import{access as Ve}from"node:fs/promises";import W from"node:path";var tn=process.cwd();function Be(t){let e="";try{e=Xt(t,{encoding:"utf-8"})}catch{}return e}var re=class t{invoke;mount;unmount;name;timeout;memorySize;environment;handlerPath;pyModulePath;handlerDir;handlerName;handlerFileAbsolutePath;runtime;bin;python;isMounted=!1;watchers=[];filesTime=new Map;watcherListener;emitRebuild;static wrapper=W.resolve(q("exlo"),"./src/lib/runtime/runners/python/index.py");static DELIMITER="__|response|__";static DELIMITEREND="__|responseEnd|__";static ERR_RESPONSE="__|error|__";static WATCH="__|watch|__";static WATCHEND="__|watchEnd|__";constructor({name:e,timeout:n,memorySize:r,environment:s,handlerPath:i,handlerName:o,runtime:a},c){this.name=e,this.timeout=n,this.memorySize=r,this.environment=s,this.handlerName=o,this.runtime=a,this.emitRebuild=c;let l=W.resolve(i);this.handlerDir=W.dirname(l),this.handlerPath=W.basename(l,`.${this.handlerName}`),this.pyModulePath=`${this.handlerDir}/${this.handlerPath}`.replace(tn,"").replace(/\/|\\/g,".").slice(1),this.handlerFileAbsolutePath=l.replace(`.${this.handlerName}`,".py"),this.mount=async()=>{if(this.python)return;let d=`${this.handlerDir}/${this.handlerPath}.py`;try{await Ve(d),this.load()}catch{console.error(`Can not find ${this.name}'s handler at: "${d}"`),process.exit(1)}},this.unmount=d=>{d&&(this.python?.kill(),this.python=void 0,this.isMounted=!1)},this.invoke=async({event:d,info:m,clientContext:h,awsRequestId:p})=>new Promise((g,y)=>{let f=JSON.stringify({event:d,awsRequestId:p,context:h??""}),b="",u=w=>{let R=null,I=w.toString();try{let k=I.includes(t.WATCH);if(k&&this.setWatchFiles(I),I.startsWith(t.DELIMITER)&&I.includes(t.DELIMITEREND)){let E=I.split(t.DELIMITER),T=E[E.length-1].split(t.DELIMITEREND)[0];if(E.length>1){let M;k?M=E[0].split(t.WATCHEND)[1]:M=E.slice(0,-1).join(`
4
- `),M.trim()&&console.log(M)}T&&(R=JSON.parse(T)),this.python.stdout.removeListener("data",u),this.python.stderr.removeListener("data",v),g(R)}else if(I.startsWith(t.DELIMITER))b=I.slice(t.DELIMITER.length);else if(I.includes(t.DELIMITEREND)){let E=I.slice(0,I.indexOf(t.DELIMITEREND)),T=JSON.parse(`${b}${E}`);this.python.stdout.removeListener("data",u),this.python.stderr.removeListener("data",v),g(T)}else if(b)b+=I;else if(!b&&I.trim()){let E;if(k){let T=I.split(`
1
+ var ye=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});import O from"node:path";import ct from"esbuild";import{EventSourceMapping as Ln}from"exlo/internal/esm";import ge from"node:path";import{createRequire as pt}from"node:module";var _=ye,$={};function q(t){if($[t])return $[t];if(typeof _=="function"&&typeof _.resolve=="function"){let n=ge.resolve(_.resolve(t),"../../");return $[t]=n,n}_=pt(new URL(".",import.meta.url));let e=ge.resolve(_.resolve(t),"../../");return $[t]=e,e}var be=["aws-sdk","@aws-sdk/*","@angular/core","@angular/platform-browser","@aws-sdk/*","@elastic/elasticsearch","@hapi/joi","@opensearch-project/opensearch","@smithy/*","axios","axios-retry","axios-cache-interceptor","aws-serverless-express","aws-sdk","body-parser","classnames","clsx","cookie-parser","cors","core-js","date-fns","dayjs","express","helmet","joi","koa","leaflet","lodash","mysql","mysql2","mongodb","mongoose","moment","http-proxy","http-proxy-middleware","react","react/*","react-dom","react-dom/*","react-hook-form","react-infinite-scroll-component","react-modal","react-rangeslider","react-responsive","react-select","react-scroll","react-slick","react-lazy-load","react-lazyload","react-redux","react-router","react-router-dom","redux","redux-persist","regenerator-runtime","serve-static","express-session","exlo/*","serverless-http","sequelize","svelte","svelte/*","typeorm","pg","pg-hstore","prop-types","underscore","uuid","vue","xmlbuilder","yup","zod","sharp"];var mt=t=>`import { createRequire as __crE_ } from "${t}module";import { fileURLToPath as __futP_ } from "${t}url";import { dirname as __dN_ } from "${t}path";global.__filename = __futP_(import.meta.url);global.__dirname = __dN_(__filename);global.require = __crE_(__filename);
2
+ `,ve=({nodeVersion:t,shimRequire:e,optimizeBuild:n,buildCallback:r,getSockets:s})=>({name:"build-optimizer-plugin",setup(i){let o=!1;if(i.onEnd(async a=>{if(!o&&a?.errors?.length&&process.exit(1),o)for(let c of s())c.writable&&c.destroy();try{await r(a,o,i.initialOptions.format,i.initialOptions.outdir)}catch(c){console.log(c)}o=!0}),n&&(i.initialOptions.external.push(...be),i.initialOptions.format=="esm"&&(i.initialOptions.mainFields?i.initialOptions.mainFields.includes("module")||(i.initialOptions.mainFields.includes("main")?i.initialOptions.mainFields.unshift("module"):i.initialOptions.mainFields.unshift("module","main")):i.initialOptions.mainFields=["module","main"])),i.initialOptions.format=="esm"&&e){let a=mt(t<18?"":"node:");i.initialOptions.banner?i.initialOptions.banner.js?i.initialOptions.banner.js=`${a}${i.initialOptions.banner.js}`:i.initialOptions.banner.js=a:i.initialOptions.banner={js:a}}}});var Se=(t,e)=>(Array.isArray(e.plugins)&&t.plugins.unshift(...e.plugins),Array.isArray(e.external)&&t.external.push(...e.external),Array.isArray(e.entryPoints)&&t.entryPoints.push(...e.entryPoints),"sourcemap"in e&&(t.sourcemap=e.sourcemap),typeof e.sourceRoot=="string"&&(t.sourceRoot=e.sourceRoot),typeof e.format=="string"&&(t.format=e.format),e.outExtension&&typeof e.outExtension=="object"&&!Array.isArray(e.outExtension)&&(t.outExtension=e.outExtension),"sourcesContent"in e&&(t.sourcesContent=e.sourcesContent),typeof e.minify=="boolean"&&(t.minify=e.minify),typeof e.minifyWhitespace=="boolean"&&(t.minifyWhitespace=e.minifyWhitespace),typeof e.minifyIdentifiers=="boolean"&&(t.minifyIdentifiers=e.minifyIdentifiers),typeof e.minifySyntax=="boolean"&&(t.minifySyntax=e.minifySyntax),typeof e.jsx=="string"&&(t.jsx=e.jsx),typeof e.jsxFactory=="string"&&(t.jsxFactory=e.jsxFactory),typeof e.jsxFragment=="string"&&(t.jsxFragment=e.jsxFragment),typeof e.jsxImportSource=="string"&&(t.jsxImportSource=e.jsxImportSource),"jsxDev"in e&&(t.jsxDev=e.jsxDev),"jsxSideEffects"in e&&(t.jsxSideEffects=e.jsxSideEffects),typeof e.outdir=="string"&&(t.outdir=e.outdir),typeof e.outbase=="string"&&(t.outbase=e.outbase),(typeof e.target=="string"||Array.isArray(e.target))&&(t.target=e.target),typeof e.tsconfig=="string"&&(t.tsconfig=e.tsconfig),e.tsconfigRaw&&["string","object"].includes(typeof e.tsconfigRaw)&&(t.tsconfigRaw=e.tsconfigRaw),typeof e.legalComments=="string"&&(t.legalComments=e.legalComments),Array.isArray(e.pure)&&(t.pure=e.pure),Array.isArray(e.drop)&&(t.drop=e.drop),Array.isArray(e.dropLabels)&&t.dropLabels.push(...e.dropLabels),Array.isArray(e.resolveExtensions)&&(t.resolveExtensions=e.resolveExtensions),Array.isArray(e.mainFields)&&(t.mainFields=e.mainFields),Array.isArray(e.nodePaths)&&(t.nodePaths=e.nodePaths),typeof e.ignoreAnnotations=="boolean"&&(t.ignoreAnnotations=e.ignoreAnnotations),typeof e.treeShaking=="boolean"&&(t.treeShaking=e.treeShaking),e.define&&typeof e.define=="object"&&(t.define?t.define={...t.define,...e.define}:t.define=e.define),e.banner&&typeof e.banner=="object"&&(t.banner=e.banner),e.footer&&typeof e.footer=="object"&&(t.footer=e.footer),e.loader&&typeof e.loader=="object"&&(t.loader=e.loader),e.alias&&typeof e.alias=="object"&&(t.alias=e.alias),typeof e.assetNames=="string"&&(t.assetNames=e.assetNames),typeof e.entryNames=="string"&&(t.entryNames=e.entryNames),typeof e.publicPath=="string"&&(t.publicPath=e.publicPath),Array.isArray(e.inject)&&(t.inject=e.inject),typeof e.splitting=="boolean"&&(t.splitting=e.splitting),typeof e.preserveSymlinks=="boolean"&&(t.preserveSymlinks=e.preserveSymlinks),typeof e.keepNames=="boolean"&&(t.keepNames=e.keepNames),e.supported&&typeof e.supported=="object"&&(t.supported=e.supported),Array.isArray(e.conditions)&&(t.conditions=e.conditions),typeof e.absWorkingDir=="string"&&(t.absWorkingDir=e.absWorkingDir),e.mangleProps instanceof RegExp&&(t.mangleProps=e.mangleProps),e.reserveProps instanceof RegExp&&(t.reserveProps=e.reserveProps),typeof e.mangleQuoted=="boolean"&&(t.mangleQuoted=e.mangleQuoted),e.mangleCache&&typeof e.mangleCache=="object"&&(t.mangleCache=e.mangleCache),typeof e.packages=="string"&&(t.packages=e.packages),typeof e.logLevel=="string"&&(t.logLevel=e.logLevel),typeof e.logLimit=="number"&&(t.logLimit=e.logLimit),e.logOverride&&typeof e.logOverride=="object"&&(t.logOverride?t.logOverride={...t.logOverride,...e.logOverride}:t.logOverride=e.logOverride),t);var xe=t=>{let e={};return Array.isArray(t.plugins)&&(e.plugins=t.plugins),Array.isArray(t.external)&&(e.external=t.external),"sourcemap"in t&&(e.sourcemap=t.sourcemap),typeof t.sourceRoot=="string"&&(e.sourceRoot=t.sourceRoot),typeof t.format=="string"&&(e.format=t.format),t.outExtension&&typeof t.outExtension=="object"&&!Array.isArray(t.outExtension)&&(e.outExtension=t.outExtension),"sourcesContent"in t&&(e.sourcesContent=t.sourcesContent),typeof t.minify=="boolean"&&(e.minify=t.minify),typeof t.minifyWhitespace=="boolean"&&(e.minifyWhitespace=t.minifyWhitespace),typeof t.minifyIdentifiers=="boolean"&&(e.minifyIdentifiers=t.minifyIdentifiers),typeof t.minifySyntax=="boolean"&&(e.minifySyntax=t.minifySyntax),typeof t.jsx=="string"&&(e.jsx=t.jsx),typeof t.jsxFactory=="string"&&(e.jsxFactory=t.jsxFactory),typeof t.jsxFragment=="string"&&(e.jsxFragment=t.jsxFragment),typeof t.jsxImportSource=="string"&&(e.jsxImportSource=t.jsxImportSource),"jsxDev"in t&&(e.jsxDev=t.jsxDev),"jsxSideEffects"in t&&(e.jsxSideEffects=t.jsxSideEffects),typeof t.outdir=="string"&&(e.outdir=t.outdir),typeof t.outbase=="string"&&(e.outbase=t.outbase),(typeof t.target=="string"||Array.isArray(t.target))&&(e.target=t.target),typeof t.tsconfig=="string"&&(e.tsconfig=t.tsconfig),t.tsconfigRaw&&["string","object"].includes(typeof t.tsconfigRaw)&&(e.tsconfigRaw=t.tsconfigRaw),typeof t.legalComments=="string"&&(e.legalComments=t.legalComments),Array.isArray(t.pure)&&(e.pure=t.pure),Array.isArray(t.drop)&&(e.drop=t.drop),Array.isArray(t.dropLabels)&&(e.dropLabels=t.dropLabels),Array.isArray(t.resolveExtensions)&&(e.resolveExtensions=t.resolveExtensions),Array.isArray(t.mainFields)&&(e.mainFields=t.mainFields),Array.isArray(t.nodePaths)&&(e.nodePaths=t.nodePaths),typeof t.ignoreAnnotations=="boolean"&&(e.ignoreAnnotations=t.ignoreAnnotations),typeof t.treeShaking=="boolean"&&(e.treeShaking=t.treeShaking),t.define&&typeof t.define=="object"&&(e.define=t.define),t.banner&&typeof t.banner=="object"&&(e.banner=t.banner),t.footer&&typeof t.footer=="object"&&(e.footer=t.footer),t.loader&&typeof t.loader=="object"&&(e.loader=t.loader),t.alias&&typeof t.alias=="object"&&(e.alias=t.alias),typeof t.assetNames=="string"&&(e.assetNames=t.assetNames),typeof t.entryNames=="string"&&(e.entryNames=t.entryNames),typeof t.publicPath=="string"&&(e.publicPath=t.publicPath),typeof t.splitting=="boolean"&&(e.splitting=t.splitting),typeof t.preserveSymlinks=="boolean"&&(e.preserveSymlinks=t.preserveSymlinks),Array.isArray(t.inject)&&(e.inject=t.inject),typeof t.keepNames=="boolean"&&(e.keepNames=t.keepNames),t.supported&&typeof t.supported=="object"&&(e.supported=t.supported),Array.isArray(t.entryPoints)&&(e.entryPoints=t.entryPoints),Array.isArray(t.conditions)&&(e.conditions=t.conditions),typeof t.absWorkingDir=="string"&&(e.absWorkingDir=t.absWorkingDir),t.mangleProps instanceof RegExp&&(e.mangleProps=t.mangleProps),t.reserveProps instanceof RegExp&&(e.reserveProps=t.reserveProps),typeof t.mangleQuoted=="boolean"&&(e.mangleQuoted=t.mangleQuoted),t.mangleCache&&typeof t.mangleCache=="object"&&(e.mangleCache=t.mangleCache),typeof t.packages=="string"&&(e.packages=t.packages),t.logOverride&&typeof t.logOverride=="object"&&(e.logOverride=t.logOverride),typeof t.logLevel=="string"&&(e.logLevel=t.logLevel),typeof t.logLimit=="number"&&(e.logLimit=t.logLimit),e};var we=t=>{if(!t.url)return;let e=t.url.cors;return{kind:"url",proxy:"url",version:2,methods:["ANY"],paths:["/*"],pathsRegex:[],stream:typeof t.url=="object"&&t.url.invokeMode=="RESPONSE_STREAM",cors:e}};var ut=t=>{if(typeof t=="string"){let e=t.split(":")?.[2],n=t.split("/")?.[1];if(e==="dynamodb"&&n)return n}},Re=t=>{let e={},n=ut(t.arn);if(n&&(e.TableName=n),!!e.TableName){if(typeof t.batchSize=="number"&&t.batchSize>0&&t.batchSize<=1e4?e.batchSize=t.batchSize:e.batchSize=100,typeof t.enabled=="boolean"?e.enabled=t.enabled:e.enabled=!0,t.startingPosition&&(e.startingPosition=t.startingPosition),typeof t.maximumBatchingWindow=="number"&&t.maximumBatchingWindow>0&&t.maximumBatchingWindow<=300&&(e.maximumBatchingWindow=t.maximumBatchingWindow),typeof t.maximumRecordAgeInSeconds=="number"&&t.maximumRecordAgeInSeconds>=60&&t.maximumRecordAgeInSeconds<=604800&&(e.maximumRecordAgeInSeconds=t.maximumRecordAgeInSeconds),t.maximumRetryAttempts&&t.maximumRetryAttempts>0&&t.maximumRetryAttempts<=1e4&&(e.maximumRetryAttempts=t.maximumRetryAttempts),"bisectBatchOnFunctionError"in t&&(e.bisectBatchOnFunctionError=t.bisectBatchOnFunctionError),t.functionResponseType&&(e.functionResponseType=t.functionResponseType),t.filterPatterns&&(e.filterPatterns=t.filterPatterns),typeof t.tumblingWindowInSeconds=="number"&&(e.tumblingWindowInSeconds=t.tumblingWindowInSeconds),t.onFailureDestination){let r=t.onFailureDestination;if(!r.startsWith("arn:aws"))throw new Error(`Invalid onFailureDestination ARN: ${r}`);e.onFailureDestination=r}return e}};var Ie=t=>{let e={},{arn:n,filterPatterns:r,batchSize:s,maximumBatchingWindow:i,functionResponseType:o,enabled:a}=t;if(typeof n=="string"){let c=n.split(":");c.length&&(e.name=c[c.length-1],e.arn=n)}if(r&&(e.filterPatterns=r),s&&(e.batchSize=s),i&&(e.maximumBatchingWindow=i),(o=="ReportBatchItemFailures"||Array.isArray(o)&&o[0]=="ReportBatchItemFailures")&&(e.functionResponseType=["ReportBatchItemFailures"]),typeof a=="boolean"?e.enabled=a:e.enabled=!0,e.name)return e};var U=["lambda","sns","sqs"],Ee=({triggers:t})=>{let e=[],n=[],r=[],s=[],i=[];for(let o of t)switch(o.source){case"sqs":{let a=Ie(o);a&&r.push(a)}continue;case"dynamodb":{let a=Re(o);a&&s.push(a)}continue;default:break}return{ddb:s,endpoints:e,s3:i,sns:n,sqs:r}},z=t=>{if(!(!t||t.type&&!U.includes(t.type)))if(typeof t=="string")if(t.startsWith("arn:")){let[,,e,n,r,s,i]=t.split(":");if(U.includes(e))return{kind:e,name:s=="function"?i:s}}else return{kind:"lambda",name:t};else{let e={};if(typeof t.arn=="string"){let[,,n,r,s,i,o]=t.arn.split(":");e.name=i,U.includes(n)&&(e.kind=n)}else if(U.includes(t.type)&&t.arn){e.kind=t.type;let[n,r]=Object.entries(t.arn)?.[0];if(!n||!r)return}if(e.kind&&e.name)return e}};import Ae from"node:path";import{spawn as ft}from"node:child_process";import{createServer as ht}from"node:http";import yt from"node:path";var gt=new URLPattern({pathname:"/2018-06-01/runtime/invocation/:awsRequestId/:returnType"}),j=class t{constructor({name:e,timeout:n,memorySize:r,environment:s,handlerPath:i,handlerName:o,runtime:a},c,l){this.cwd=l;this.name=e,this.timeout=n,this.memorySize=r,this.environment=s,this.handlerName=o,this.runtime=a,this.emitRebuild=c,this.bin=yt.resolve(i),this.mount=async()=>{await this.createOwnedServer(),await this.load()},this.unmount=d=>{this.runner?.kill(),this.runner=void 0,this.isMounted=!1,this.server?.close(),this.server?.closeAllConnections()},this.invoke=async({event:d,info:m,clientContext:f,awsRequestId:p})=>{this.isMounted||await this.load();let g,y,h=new Promise((u,b)=>{g=u,y=b}),S={id:p,event:d,clientContext:f,resolve:g,inFlight:!1,reject:y};return this.invocations.push(S),this.handleInvoke(),h}}static async collectBody(e){let n=Buffer.alloc(0);return e.on("data",r=>{n=Buffer.concat([n,r])}),new Promise(r=>{e.on("end",async()=>{r(n?n.toString("utf-8"):void 0)})})}invoke;mount;unmount;name;timeout;memorySize;environment;handlerName;runtime;bin;runner;isMounted=!1;watchers=[];filesTime=new Map;port;watcher;emitRebuild;invocations=[];queue=[];getWaitingInvocation(){return this.invocations.find(e=>!e.inFlight)}server=void 0;async createOwnedServer(){let e=ht(async(n,r)=>{let{method:s,url:i,headers:o}=n;if(s=="POST"){let a=gt.exec(i,"http://localhost:3000"),c=a?.pathname.groups.awsRequestId,l=a?.pathname.groups.returnType;if(!(c&&(l=="response"||l=="error"))){r.statusCode=400,r.end();return}let d=this.invocations.findIndex(p=>p.id==c);if(d==-1){r.statusCode=400,r.end();return}let m=await t.collectBody(n);if(m)try{m=JSON.parse(m)}catch{r.statusCode=500,r.end();return}let f=this.invocations[d];this.invocations.splice(d,1),await new Promise(p=>{r.statusCode=202,r.end(()=>{l=="response"?f.resolve(m):f.reject(m),p(void 0)})});return}if(s=="GET"&&i=="/2018-06-01/runtime/invocation/next"){let a=this.getWaitingInvocation();if(!a){this.queue.push(r);return}a.inFlight=!0,r.setHeader("Lambda-Runtime-Aws-Request-Id",a.id),a.clientContext&&r.setHeader("Lambda-Runtime-Client-Context",JSON.stringify(a.clientContext)),r.end(JSON.stringify(a.event));return}r.statusCode=400,r.end()});e.keepAliveTimeout=0,await new Promise(n=>{e.listen(n)}),e.unref(),this.port=e.address().port,this.server=e}load=()=>(this.runner=ft(this.bin,{env:{...this.environment,AWS_LAMBDA_RUNTIME_API:`127.0.0.1:${this.port}`},stdio:"inherit",cwd:this.cwd}),this.runner.on("error",e=>{console.error("Failed to run custome runtime.",e)}),this.runner.pid||(console.error(`Can not find custome runtime ${this.bin}`),process.exit(1)),new Promise(e=>{this.runner.once("spawn",()=>{this.isMounted=!0,e(void 0)})}));onComplete=e=>{let n=this.invocations.findIndex(r=>r.id==e);n!=-1&&this.invocations.splice(n,1)};handleInvoke(){try{let e=this.getWaitingInvocation();if(!e||!this.queue.length)return;let n=this.queue[0];n||console.error("This is a bug in exlo, please report!"),n.setHeader("Lambda-Runtime-Aws-Request-Id",e.id),this.queue.splice(this.queue.findIndex(r=>r==n),1),n.end(JSON.stringify(e.event))}catch(e){console.error(e)}}};var L=class t extends j{static llrtEnvs={};static llrtBoostrapPath="bootstrap";constructor(e,n){let r=Ae.basename(e.handlerPath);e.handlerPath=t.llrtBoostrapPath;let s=Ae.dirname(e.esOutputPath);super({...e,environment:{...t.llrtEnvs,...e.environment,LAMBDA_HANDLER:r}},n,s)}};import{randomUUID as sn}from"node:crypto";import on from"node:http";import an from"node:inspector";import{networkInterfaces as Qe}from"node:os";import{randomUUID as kt}from"node:crypto";var V=!1,bt=t=>{V=t},vt=()=>V,F=(t,e)=>{V&&console.log(`\x1B[${t}m${e}\x1B[0m`)},St=t=>console.log(`\x1B[31m${t}\x1B[0m`),xt=t=>F("32",t),wt=t=>F("33",t),Rt=t=>F("36",t),It=t=>F("90",t),Et=t=>F("94",t),At=t=>F("95",t),Pt=t=>V?console.log(t):void 0,v={GREEN:xt,YELLOW:wt,CYAN:Rt,BR_BLUE:Et,RED:St,GREY:It,PINK:At,setDebug:bt,getDebug:vt,info:Pt};var Pe="application/vnd.awslambda.http-integration-response",A=class t{buffer;_isHttpIntegrationResponse;_metaDelimiter;_endDelimiter;_ct;_isStreamResponse=!0;#e;static codec=new TextDecoder;static splitMessage=(e,n)=>{if(!e)return;let r=Array.from(e.values()),s=null;if(n)s=n;else for(let i=0;i<r.length;i++)if(r[i]===0&&[r[i+1],r[i+2],r[i+3],r[i+4],r[i+5],r[i+6],r[i+7]].every(c=>c===0)){s=i;break}if(s)return new Uint8Array(r.slice(0,s))};constructor(e){this._isHttpIntegrationResponse=!1,this._metaDelimiter=0,this._endDelimiter=0,this.#e=e}setHeader(e,n){this._isHttpIntegrationResponse=!this.buffer&&n==Pe&&(!this._ct||this._ct==Pe),this._ct=n}write(e,n){!this._isHttpIntegrationResponse&&!this._metaDelimiter&&(this._metaDelimiter=e.byteLength),this.#t(e)}end(e){this.buffer&&(this._endDelimiter=this.buffer.byteLength),e&&this.#t(e)}destroy(){}#t(e){this.buffer=typeof this.buffer>"u"?e:Buffer.concat([this.buffer,e])}getParsedResponse(){if(!this.#e)return;let e=this.#e.kind;if(e=="alb")return this.#n();if(e=="url")return this.#i();if(e=="apg")return this.#r()}#n(){let e=this._isHttpIntegrationResponse?t.splitMessage(this.buffer):this.buffer,n;return e&&(n=this.#s(e)),n}#r(){if(this._isHttpIntegrationResponse)return v.RED("awslambda.HttpResponseStream.from() is not supported with API Gateway"),{statusCode:500,headers:{"Content-Type":x.contentType.json},body:x.httpErrMsg};if(this.buffer)return this.#s(this.buffer)}#i(){let e=t.splitMessage(this.buffer,this._isHttpIntegrationResponse?void 0:this._metaDelimiter),n;return e&&(n=this.#s(e)),n}#s(e){let n=t.codec.decode(e);if(typeof n=="string")try{n=JSON.parse(n)}catch{}return n}};var ke="<html><head><title>404 Not Found</title></head><body><center><h1>404 Not Found</h1></center></body></html>",Le="<html><head><title>400 Request Header Or Cookie Too Large</title></head><body><center><h1>400 Bad Request</h1></center><center>Request Header Or Cookie Too Large</center></body></html>";var Lt=["GET","HEAD","POST","PUT","DELETE","PATCH","OPTIONS"],Ot=JSON.stringify({Message:null}),B=t=>{if(t)try{let e=Buffer.from(t,"base64").toString("utf-8");return JSON.parse(e)}catch{return new Error("InvalidRequestContentException")}},Oe=(t,e)=>{if(!Lt.includes(e))return t.statusCode=403,t.setHeader("Content-Type","application/json"),t.end(Ot),!0},N=async(t,e)=>{let n=Buffer.alloc(0);return t.on("data",s=>{n=Buffer.concat([n,s])}),await new Promise(s=>{t.on("end",async()=>{s(n?n.toString(e?"base64":"utf-8"):void 0)})})},J=t=>{let e;try{e=JSON.parse(t)}catch(n){e?.length?e=n:e={}}return e},Q=t=>t instanceof A,Ne=t=>{let e,n=Buffer.from(t).toString();try{e=JSON.parse(n)}catch{e=n}return e},H=t=>{let e=kt();return t.setHeader("x-amzn-RequestId",e),e},K=t=>JSON.stringify({Type:"User",message:`Could not parse request body into json: Could not parse payload into json: ${t}: was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')`}),G=JSON.stringify({Type:null,message:"Client context must be a valid Base64-encoded JSON object."}),Y=(t,e,n)=>JSON.stringify({Type:"User",message:`Function not found: arn:aws:lambda:${e}:${n}:function:${t}`}),X=(t,e)=>{if(!t.writableFinished){if(t.statusCode=502,!t.headersSent&&(t.setHeader("Content-Type","application/json"),e))for(let[n,r]of Object.entries(e))t.setHeader(n,r);t.end("Internal Server Error")}},De=t=>t.byteLength==8&&Array.from(t.values()).every(e=>e===0);var gr=new Error(Le);var Te=t=>t.charAt(0).toUpperCase()+t.slice(1);var x=class t{static apiId="";static accountId="";static port=3e3;static serve;static contentType={json:"application/json",text:"text/plain; charset=utf-8",octet:"application/octet-stream"};static keepAlive=["Connection","keep-alive"];static dummyHost="http://localhost:3003";static httpErrMsg='{"message":"Internal Server Error"}';static apigJsonParseErrMsg='{"message":"[Unknown error parsing request body]"}';static apigForbiddenErrMsg='{"message":"Forbidden"}';static amzMsgNull='{"message":null}';static apgTimeoutMsg='{"message": "Endpoint request timed out"}';static unavailable='{"message":"Service Unavailable"}';static timeoutRegex=/after.\d+.*seconds/;static apgRequestTimeout=30;static normalizeHeaderKey=e=>e.toLowerCase().split("-").map(Te).join("-");static getMultiValueHeaders=e=>{let n={},r=e.filter((i,o)=>o%2==0).map(i=>i.toLowerCase()),s=e.filter((i,o)=>o%2!==0);return r.forEach((i,o)=>{i!="x-mock-type"&&(n[i]?n[i].push(s[o]):n[i]=[s[o]])}),n};static getIsBase64Encoded=e=>{let n=e["content-type"];return e["content-encoding"]||!n?!0:!(n.startsWith("application/json")||n.startsWith("application/xml")||n.startsWith("application/javascript")||n.startsWith("text/"))};static knownHeaders=["accept","accept-encoding","user-agent","host","via","content-length"];static getApiGV1Headers(e,n){let{rawHeaders:r}=e,s,i={"X-Forwarded-For":e.socket.remoteAddress,"X-Forwarded-Proto":"http","X-Forwarded-Port":String(t.port)};for(let l=0;l<r.length;){let d=r[l],m=d.toLowerCase();if(["connection","x-mock-type"].includes(m)){l=l+2;continue}this.knownHeaders.includes(m)&&(d=this.normalizeHeaderKey(m));let f=r[l+1];i[d]=f,m=="x-api-key"&&(s=f),l=l+2}let o={};for(let l of Object.keys(i).sort((d,m)=>d.localeCompare(m)))o[l]=i[l];let a={"X-Forwarded-For":[e.socket.remoteAddress],"X-Forwarded-Proto":["http"],"X-Forwarded-Port":[String(t.port)]};for(let l=0;l<r.length;){let d=r[l],m=d.toLowerCase();if(["connection","x-mock-type"].includes(m)){l=l+2;continue}this.knownHeaders.includes(m)&&(d=this.normalizeHeaderKey(m));let f=r[l+1];a[d]?a[d].push(f):a[d]=[f],l=l+2}let c={};for(let l of Object.keys(a).sort((d,m)=>d.localeCompare(m)))c[l]=a[l];return{headers:o,multiValueHeaders:c,apiKey:s}}static getCustomHeaders(e,n){let{headers:r}=e;return delete r["x-mock-type"],delete r.connection,{"X-Forwarded-For":e.socket.remoteAddress,"X-Forwarded-Proto":"http","X-Forwarded-Port":String(t.port),...r}}static getPathParameters(e,n){let r=e.paths[0].split("/"),s=n.pathname.split("/"),i={};return r.forEach((o,a)=>{o.startsWith("{")&&o.endsWith("}")&&!o.endsWith("+}")&&(i[o.slice(1,-1)]=s[a])}),i}static normalizeSearchParams=(e,n)=>{let r={};Array.from(e.keys()).forEach(o=>{let a=e.getAll(o).map(l=>l.toLowerCase()),c=o.toLowerCase();a?r[c]?r[c].push(...a):r[c]=a:r[c]||(r[c]=void 0)});let s="",i=n.indexOf("?");return i!=-1&&(s=n.slice(i+1)),r.toString=()=>s,r};static getMultiValueQueryStringParameters=e=>{let n={};e.delete("x_mock_type");for(let r of Array.from(new Set(e.keys())))n[r]=e.getAll(r).map(encodeURI);return n};static isEndpointTimeoutError=e=>{if(!e)return;let n=e.match(this.timeoutRegex)?.[0];if(n){let r=n.split(" ")[1];if(!isNaN(r))return Number(r)>=t.apgRequestTimeout}}};import{EventSourceMapping as Ft}from"exlo/internal/esm";import{EventSourceMapping as Nt}from"exlo/internal/esm";var Z=class{constructor(e,n,r,s,i){this.MaximumBatchingWindowInSeconds=e;this.BatchSize=n;this.lambdaName=r;this.handlers=s;this.onInvokeFinished=i}available=!0;#e=[];#t=!1;get messages(){return this.#e}#n(){setTimeout(async()=>{this.available=!1,this.#t||await this.#r()},this.MaximumBatchingWindowInSeconds*1e3)}async setRecord(e){this.#e.length||this.#n(),this.#e.push(e),(this.#e.length==this.BatchSize||!this.available)&&(this.available=!1,await this.#r())}async#r(){this.#t=!0;let e=this.#e,n=this.handlers.find(r=>r.name==this.lambdaName);try{let r=await n.invoke({Records:this.#e});await this.onInvokeFinished(e,r)}catch{}}};var qe=10,je=0,Dt=(t,e,n)=>t.receiveMessage({QueueUrl:e,AttributeNames:["All"],MessageAttributeNames:["All"],MaxNumberOfMessages:n}),Tt=(t,e)=>t.getQueueAttributes({QueueUrl:e,AttributeNames:["All"]}),Me=async(t,e,n)=>{for(let r of He(n,10)){if(!r.length)continue;let s=r.map((i,o)=>({Id:`id-${o+1}`,ReceiptHandle:i}));try{await t.deleteMessageBatch({QueueUrl:e,Entries:s})}catch{}}},Mt=t=>{if(!t)return{};let e={};for(let[n,r]of Object.entries(t)){e[n]={};let{StringValue:s,BinaryValue:i,DataType:o}=r;o.startsWith("B")?e[n].binaryValue=i:e[n].stringValue=s,e[n].stringListValues=[],e[n].binaryListValues=[],e[n].dataType=o}return e},qt=(t,e)=>{let{MessageId:n,Body:r,MD5OfBody:s,ReceiptHandle:i,Attributes:o,MessageAttributes:a,MD5OfMessageAttributes:c}=t,l={messageId:n,receiptHandle:i,body:r,attributes:o,messageAttributes:Mt(a)};return c&&(l.md5OfMessageAttributes=c),l.md5OfBody=s,l.eventSource="aws:sqs",l.eventSourceARN=e,l.awsRegion=e.split(":")[3],l},jt=(t,e)=>t.map(n=>qt(n,e)),ee=class extends Nt{constructor(n,r,s){super(n);this.config=n;this.handlers=r;this.sqsClient=s;let i=this.config.EventSourceArn.split(":");this.QueueName=i[i.length-1],this.#n=this.config.FunctionResponseTypes?.[0]=="ReportBatchItemFailures"}#e=[];QueueName="";QueueUrl="";#t;#n;async onInvokeFinished(n,r){let s=n.map(i=>i.receiptHandle);this.#n&&(s=Fe(n,r)),await Me(this.sqsClient,this.QueueUrl,s)}#r(){let n=this.#e.find(s=>s.available);if(n)return n;let r=new Z(this.config.MaximumBatchingWindowInSeconds,this.config.BatchSize,this.config.FunctionName,this.handlers,this.onInvokeFinished.bind(this));return this.#e.push(r),r}async#i(n){for(let r of n)await this.#r().setRecord(r)}async init(){if(!this.sqsClient)return;let{QueueUrl:n}=await this.sqsClient.getQueueUrl({QueueName:this.QueueName});this.QueueUrl=n,await this.enable()}#s=1500;cleanBatchs(){for(let n=0;n<this.#e.length;n++)this.#e[n].available||this.#e.splice(n,1)}async#l(){let n=0,r=2e3,s=async()=>{try{let{Attributes:i}=await Tt(this.sqsClient,this.QueueUrl);if(!Number(i.ApproximateNumberOfMessages))n++,this.#s<=2e4&&(this.#s+=200),n==5&&(r=2e3);else{n=0,r=400;let a=this.#s;this.#s=350,a>=1600&&await this.#a(!0)}}catch{r=2e3}this.cleanBatchs(),this.#t=setTimeout(s,r)};await s()}#o;async#a(n){n&&clearTimeout(this.#o);let r=async()=>{if(!this.config.Enabled){this.State=="Disabling"&&(this.State="Disabled");return}try{let{Messages:s}=await Dt(this.sqsClient,this.QueueUrl,this.config.BatchSize<=10?this.config.BatchSize:10);if(s){let i=jt(s,this.config.EventSourceArn),o=await this.#c(i);await this.#i(o)}}catch{}this.#o=setTimeout(r,this.#s)};await r()}async enable(){this.State="Enabling";try{await this.#l(),this.config.Enabled=!0,this.State="Enabled",await this.#a()}catch(n){console.error(n)}}disable(){this.config.Enabled=!1,clearTimeout(this.#t),this.State="Disabling"}async#c(n){let r=n.map(a=>{let c={...a};try{c.body=JSON.parse(c.body)}catch{}return c}),[s,i]=this.filterRecords(r);await Me(this.sqsClient,this.QueueUrl,i.map(a=>a.receiptHandle));let o=[];for(let a of s)o.push(...n.filter(c=>c.messageId==a.messageId));return o}};var _e=async(t,e)=>{let{accountId:n,region:r,services:s}=e;for(let i of t)for(let o of i.sqs){if(typeof o.arn!="string")throw new Error("SQS Event Source Mapping must have arn string");let a=o.arn;a.startsWith("arn:aws:sqs:")||(a=`arn:aws:sqs:${r}:${n}:${o.name}`);let c;if(Array.isArray(o.filterPatterns)){c=[];for(let d of o.filterPatterns)c.push({Pattern:JSON.stringify(d)});c.length||(c=void 0)}let l=new ee({BatchSize:typeof o.batchSize=="number"?o.batchSize:qe,Enabled:o.enabled,EventSourceArn:a,FunctionName:i.name,FunctionResponseTypes:o.functionResponseType,FilterCriteria:c?{Filters:c}:void 0,MaximumBatchingWindowInSeconds:typeof o.maximumBatchingWindow=="number"?o.maximumBatchingWindow:je},t,s.sqs);if(Ft.SOURCES.push(l),l.config.Enabled)try{await l.init()}catch(d){v.RED(`Failed to start EventSourceMapping ${l.config.EventSourceArn}
3
+ Please verify provided SQS Client validity.`),console.error(d)}}},Ht=/(-|\w+)/g,_t=t=>t.length<81&&t.replace(Ht,"")=="",Fe=(t,e)=>{if(typeof e>"u"||e===null||typeof e=="object"&&(e.batchItemFailures===null||Array.isArray(e.batchItemFailures)&&!e.batchItemFailures.length))return t.map(r=>r.receiptHandle);let n=[];if(typeof e=="object"&&Array.isArray(e.batchItemFailures)){if(e.batchItemFailures.some(r=>!r.itemIdentifier||!_t(r.itemIdentifier)||!t.find(s=>s.messageId==r.itemIdentifier)))throw new Error("ReportBatchItemFailures: complete failure.");return t.forEach(r=>{e.batchItemFailures.find(i=>i.itemIdentifier==r.messageId)||n.push(r.receiptHandle)}),n}},He=(t,e)=>{let n=[];for(let r=0;r<t.length;r+=e){let s=t.slice(r,r+e);n.push(s)}return n};import{randomUUID as zt}from"node:crypto";import Ct from"node:http";var Wt=t=>{switch(t.kind){case"sns":return"@sns/parsed/";case"sqs":return"@sqs";case"lambda":return`@invoke/${t.name}/`;default:break}},Ce=(t,e)=>{let n=Wt(e);if(!n)return;let r={"Content-Type":e.kind=="sqs"?"application/x-www-form-urlencoded":"application/json"};return Ct.request(`http://localhost:${t}/${n}`,{method:"POST",headers:r})},We=({event:t,payload:e,requestId:n,lambdaName:r,success:s})=>{let i={version:"1.0",timestamp:"2023-02-25T13:25:04.688Z",requestContext:{requestId:n,functionArn:`arn:aws:lambda:eu-west-3:000000000000:function:${r}:$LATEST`,condition:s?"Success":"RetriesExhausted",approximateInvokeCount:1},requestPayload:t,responseContext:{statusCode:200,executedVersion:"$LATEST"},responsePayload:e};return s||(i.responseContext.functionError="Unhandled"),JSON.stringify(i)},$t=({topicName:t,event:e,payload:n,requestId:r,success:s,lambdaName:i})=>{let o="";if(s)o=We({event:e,payload:n,requestId:r,success:s,lambdaName:i});else if(typeof e=="string")o=e;else try{o=JSON.stringify(e)}catch(c){console.log(c)}let a={TopicArn:`arn:aws:sns:eu-west-3:000000000000:${t}`,Message:o,Action:"Publish",Version:"2010-03-31",MessageAttributes:{}};return s||(a.MessageAttributes={RequestID:{Type:"String",Value:r},ErrorCode:{Type:"String",Value:"200"},ErrorMessage:{Type:"String",Value:n.errorMessage}}),JSON.stringify(a)},Ut=({destination:t,event:e,payload:n,requestId:r,lambdaName:s,success:i})=>{let o=new URLSearchParams;o.append("QueueUrl",t.name),o.append("Action","SendMessage");let a=e;try{a=JSON.stringify(a)}catch{}return o.append("MessageBody",a),i||(o.append("MessageAttribute.1.Name","RequestID"),o.append("MessageAttribute.1.Value.StringValue",r),o.append("MessageAttribute.1.Value.DataType","String"),o.append("MessageAttribute.1.Name","ErrorCode"),o.append("MessageAttribute.1.Value.StringValue","200"),o.append("MessageAttribute.1.Value.DataType","Number"),o.append("MessageAttribute.1.Name","ErrorMessage"),o.append("MessageAttribute.1.Value.StringValue",n.errorMessage),o.append("MessageAttribute.1.Value.DataType","String")),o.toString()},$e=({destination:t,event:e,payload:n,requestId:r,lambdaName:s,success:i})=>{switch(t.kind){case"sns":return $t({topicName:t.name,event:e,payload:n,requestId:r,success:i,lambdaName:s});case"lambda":return We({event:e,payload:n,requestId:r,lambdaName:s,success:i});case"sqs":return Ut({destination:t,event:e,payload:n,requestId:r,lambdaName:s,success:i});default:return""}},pe=({destination:t,LOCAL_PORT:e,event:n,payload:r,requestId:s,lambdaName:i})=>{try{let o=Ce(e,t);if(!o)return;o.end($e({destination:t,event:n,payload:r,requestId:s,lambdaName:i,success:!1}))}catch{}},Ue=({destination:t,LOCAL_PORT:e,event:n,payload:r,requestId:s,lambdaName:i})=>{try{let o=Ce(e,t);if(!o)return;o.end($e({destination:t,event:n,payload:r,requestId:s,lambdaName:i,success:!0}))}catch{}};var Vt=1080*1e3,Bt=new Set(["async","ddb","kinesis","s3","sns","sqs"]),ze=t=>typeof t?.kind=="string"?Bt.has(t.kind)||t.async:!1,C=class t{name;runtime;sqs;ddb;url;timeout;memorySize;environment;handlerPath;handlerName;esEntryPoint;esOutputPath;entryPoint;onError;onSuccess;onFailure;invokeSub;invokeSuccessSub;invokeErrorSub;#e;runner;static ENABLE_TIMEOUT=!0;constructor({name:e,runtime:n,timeout:r,memorySize:s,environment:i,handlerPath:o,handlerName:a,esEntryPoint:c,esOutputPath:l,entryPoint:d,sqs:m,ddb:f,url:p,invokeSub:g,invokeSuccessSub:y,invokeErrorSub:h,onError:S,onSuccess:u,onFailure:b,runner:w}){this.name=e,this.runtime=n,this.sqs=m,this.ddb=f,this.url=p,this.timeout=r,this.memorySize=s,this.environment=i,this.handlerPath=o,this.handlerName=a,this.esEntryPoint=c,this.esOutputPath=l,this.entryPoint=d,this.invokeSub=g,this.invokeSuccessSub=y,this.invokeErrorSub=h,this.onError=S,this.onSuccess=u,this.onFailure=b,this.runner=w}handleErrorDestination(e,n,r,s){if(this.runner.onComplete(s),this.invokeErrorSub.forEach(async i=>{try{await i(e,r,n)}catch{}}),ze(n)){let i={LOCAL_PORT:this.environment.LOCAL_PORT,event:e,payload:r,requestId:s,lambdaName:this.name};this.onError&&pe({...i,destination:this.onError}),this.onFailure&&pe({...i,destination:this.onFailure})}}handleSuccessDestination(e,n,r,s){this.runner.onComplete(s),this.onSuccess&&ze(n)&&Ue({destination:this.onSuccess,LOCAL_PORT:this.environment.LOCAL_PORT,event:e,payload:r,requestId:s,lambdaName:this.name}),this.invokeSuccessSub.forEach(async i=>{try{await i(e,r,n)}catch{}})}async invoke(e,n,r,s){let i=zt();this.runner.isMounted||(v.BR_BLUE(`\u2744\uFE0F Cold start \u03BB '${this.name}'`),await this.runner.mount());for(let a of this.invokeSub)try{let c=await a(e,n);typeof c!="function"&&(e=c)}catch{}let o=this.#n(i,e,n);try{let a=await new Promise(async(c,l)=>{let d;t.ENABLE_TIMEOUT&&(d=setTimeout(()=>{s?.destroy(),this.runner.onComplete(i,!0),v.RED(`'${this.name}' | ${i}: Request failed`),l({errorType:"Unhandled",errorMessage:`${new Date().toISOString()} ${i} Task timed out after ${this.timeout} seconds`})},this.timeout*1e3));try{let m=await this.runner.invoke({event:e,awsRequestId:i,info:n,clientContext:r,response:s});clearTimeout(d),c(m)}catch(m){clearTimeout(d),l(m)}});return this.#t(),t.#r(o,this.name),this.handleSuccessDestination(e,n,a,i),a}catch(a){throw this.handleErrorDestination(e,n,a,i),this.runner.unmount(!0),this.#t(),a}}clear=()=>{clearTimeout(this.#e),this.runner.unmount()};async shutdown(){clearTimeout(this.#e),await this.runner.unmount(!0)}#t=()=>{clearTimeout(this.#e),this.#e=setTimeout(()=>{this.runner.unmount(!0)},Vt)};#n=(e,n,r)=>{let s=n?.httpMethod??n?.method??"",i=n?.path??n?.rawPath??"";i&&(i=decodeURI(i));let o=`${s} ${i}`,a=new Date;v.CYAN(`${a.toLocaleDateString()} ${a.toLocaleTimeString()} requestId: ${e} | '${this.name}' ${o}`),v.GREY(this.entryPoint);let c="";return typeof r?.kind=="string"&&(c=` (${r.kind.toUpperCase()})`),v.YELLOW(`\u03BB payload${c}:`),v.info(n),process.hrtime()};static#r=(e,n)=>{let r=process.hrtime(e),s=`${r[0]},${r[1]}s`,i=`\u231B\uFE0F \u03BB '${n}' execution time: ${s}`;setTimeout(()=>{v.YELLOW(i)},400)}};var te=class{err;constructor(e){this.err=new Error(`Local invoke of ${e} runtime is currently not supported by exlo.`)}isMounted=!0;mount=()=>{};unmount=()=>{};invoke=async()=>{throw this.err};onComplete=()=>{}};import{EventEmitter as Jt}from"node:events";import Qt from"node:path";import{Worker as Kt}from"node:worker_threads";var Gt=Qt.resolve(q("exlo"),"./dist/lib/runtime/runners/node/index.js"),ne=class extends Jt{_worker;isMounted=!1;_isLoading=!1;invoke;mount;unmount;name;timeout;memorySize;environment;handlerPath;handlerName;esOutputPath;hasFatalError;constructor({name:e,timeout:n,memorySize:r,environment:s,handlerPath:i,handlerName:o,esOutputPath:a}){super(),this.name=e,this.timeout=n,this.memorySize=r,this.environment=s,this.handlerPath=i,this.handlerName=o,this.esOutputPath=a,this.mount=async()=>{this._isLoading?(this.setMaxListeners(0),await new Promise((c,l)=>{this.once("loaded",d=>{d?c(void 0):l()})})):this.isMounted||(this._isLoading=!0,await this.importHandler(),this._worker.on("message",c=>{let{channel:l,data:d,awsRequestId:m,type:f,encoding:p}=c;l=="uncaught"?(this._worker.terminate(),this.isMounted=!1,this._isLoading=!1,v.RED(`${f} Uncaught exceptions`),console.error(d.error),d.solution&&(v.BR_BLUE("Solution:"),console.log(d.solution))):l=="fail"?(this.emit(m,l,d,f,p),this.unmount()):this.emit(m,l,d,f,p)}))},this.unmount=()=>{this._worker?.terminate(),this.isMounted=!1,this._isLoading=!1},this.invoke=async({event:c,info:l,clientContext:d,response:m,awsRequestId:f})=>new Promise((p,g)=>{this._worker.postMessage({channel:"exec",data:{event:c,clientContext:d},awsRequestId:f});let y=m??new A(l);function h(S,u,b,w){switch(S){case"return":case"succeed":case"done":this.removeListener(f,h),p(u);break;case"fail":this.removeListener(f,h),g(u);break;case"stream":b=="write"?y.write(u,w):b=="ct"?y.setHeader("Content-Type",u):b=="timeout"?(this.removeListener(f,h),y.destroy(),g(u)):(this.removeListener(f,h),y.end(u),p(y instanceof A?y:void 0));break;default:this.removeListener(f,h),g(new Error("Unknown error"));break}}this.on(f,h)})}async importHandler(){await new Promise((e,n)=>{let r={name:this.name,env:this.environment,execArgv:["--enable-source-maps"],workerData:{name:this.name,timeout:this.timeout,memorySize:this.memorySize,esOutputPath:this.esOutputPath,handlerPath:this.handlerPath,handlerName:this.handlerName,debug:v.getDebug()}};this._worker=new Kt(Gt,r),this._worker.setMaxListeners(0),this._worker.once("message",s=>{let{channel:i,data:o}=s;i=="import"?(this._worker.setMaxListeners(55),this.setMaxListeners(10),this.isMounted=!0,this._isLoading=!1,this.emit("loaded",!0),e(void 0)):i=="fatal"&&n(o)}),this._worker.postMessage({channel:"import"})})}onComplete=(e,n)=>{this._worker?.postMessage({channel:"complete",awsRequestId:e,timeout:n})}};import{execSync as Yt,spawn as Xt}from"node:child_process";import{watch as Zt}from"node:fs";import{access as Ve}from"node:fs/promises";import W from"node:path";var en=process.cwd();function Be(t){let e="";try{e=Yt(t,{encoding:"utf-8"})}catch{}return e}var re=class t{invoke;mount;unmount;name;timeout;memorySize;environment;handlerPath;pyModulePath;handlerDir;handlerName;handlerFileAbsolutePath;runtime;bin;python;isMounted=!1;watchers=[];filesTime=new Map;watcherListener;emitRebuild;static wrapper=W.resolve(q("exlo"),"./src/lib/runtime/runners/python/index.py");static DELIMITER="__|response|__";static DELIMITEREND="__|responseEnd|__";static ERR_RESPONSE="__|error|__";static WATCH="__|watch|__";static WATCHEND="__|watchEnd|__";constructor({name:e,timeout:n,memorySize:r,environment:s,handlerPath:i,handlerName:o,runtime:a},c){this.name=e,this.timeout=n,this.memorySize=r,this.environment=s,this.handlerName=o,this.runtime=a,this.emitRebuild=c;let l=W.resolve(i);this.handlerDir=W.dirname(l),this.handlerPath=W.basename(l,`.${this.handlerName}`),this.pyModulePath=`${this.handlerDir}/${this.handlerPath}`.replace(en,"").replace(/\/|\\/g,".").slice(1),this.handlerFileAbsolutePath=l.replace(`.${this.handlerName}`,".py"),this.mount=async()=>{if(this.python)return;let d=`${this.handlerDir}/${this.handlerPath}.py`;try{await Ve(d),this.load()}catch{console.error(`Can not find ${this.name}'s handler at: "${d}"`),process.exit(1)}},this.unmount=d=>{d&&(this.python?.kill(),this.python=void 0,this.isMounted=!1)},this.invoke=async({event:d,info:m,clientContext:f,awsRequestId:p})=>new Promise((g,y)=>{let h=JSON.stringify({event:d,awsRequestId:p,context:f??""}),S="",u=w=>{let R=null,I=w.toString();try{let k=I.includes(t.WATCH);if(k&&this.setWatchFiles(I),I.startsWith(t.DELIMITER)&&I.includes(t.DELIMITEREND)){let E=I.split(t.DELIMITER),T=E[E.length-1].split(t.DELIMITEREND)[0];if(E.length>1){let M;k?M=E[0].split(t.WATCHEND)[1]:M=E.slice(0,-1).join(`
4
+ `),M.trim()&&console.log(M)}T&&(R=JSON.parse(T)),this.python.stdout.removeListener("data",u),this.python.stderr.removeListener("data",b),g(R)}else if(I.startsWith(t.DELIMITER))S=I.slice(t.DELIMITER.length);else if(I.includes(t.DELIMITEREND)){let E=I.slice(0,I.indexOf(t.DELIMITEREND)),T=JSON.parse(`${S}${E}`);this.python.stdout.removeListener("data",u),this.python.stderr.removeListener("data",b),g(T)}else if(S)S+=I;else if(!S&&I.trim()){let E;if(k){let T=I.split(`
5
5
  `),M=T.findIndex(dt=>dt.startsWith(t.WATCH));E=T.slice(0,M).join(`
6
- `)}else E=I;E.trim()&&console.log(E)}}catch(k){console.log("err",k),y(k)}};this.python.stdout.on("data",u);let v=w=>{let R=w.toString();if(R.includes(t.ERR_RESPONSE))try{R=JSON.parse(R.split(t.ERR_RESPONSE)[1]),R.requestId=p}catch{}finally{this.python.stdout.removeListener("data",u),this.python.stderr.removeListener("data",v),y(R)}else console.log(R)};this.python.stderr.on("data",v),this.python.stdin.write(`${f}
7
- `)}),this.watcherListener=()=>{this.isMounted&&(this.unmount(!0),this.watchers.forEach(d=>d.close()),this.watchers=[],this.emitRebuild())}}setWatchFiles=async e=>{try{let n=e.split(t.WATCH),s=n[n.length-1].split(t.WATCHEND)[0],i=JSON.parse(s).map(o=>`${o.replace(/\./g,W.sep)}.py`);for(let o of i)try{await Ve(o),this.watchers.push(en(o,{persistent:!1},this.watcherListener))}catch{}}catch(n){console.log(n)}};findPython(){let[e]=this.runtime.split("."),n=e.split("python")[1];if(Be(`${e} --version`))return e;let r=Be("python --version");if(!r)throw new Error("Can not find python on your OS. Make sure it is installed.");if(n){let s=r.split(" ")[1]?.split(".")[0];s&&s!=n&&S.YELLOW("found python binary but with different version")}return"python"}load=()=>{this.bin||(this.bin=this.findPython()),this.python=Zt(this.bin,["-u",t.wrapper,this.handlerFileAbsolutePath,this.pyModulePath,this.handlerName,String(this.timeout)],{env:this.environment}),this.python.pid||(console.error(`Can not find ${this.bin} in your PATH`),process.exit(1)),this.isMounted=!0};onComplete=e=>{}};import{spawn as nn}from"node:child_process";import{watch as rn}from"node:fs";import{access as Je}from"node:fs/promises";import se from"node:path";var ie=class t{invoke;mount;unmount;name;timeout;memorySize;environment;handlerPath;modulePath;handlerDir;handlerName;runtime;bin;ruby;isMounted=!1;emitRebuild;watcherListener;watchers=[];static wrapper=se.resolve(q("exlo"),"./src/lib/runtime/runners/ruby/index.rb");static DELIMITER="__|response|__";static ERR_RESPONSE="__|error|__";static WATCH="__|watch|__";constructor({name:e,timeout:n,memorySize:r,environment:s,handlerPath:i,handlerName:o,runtime:a},c){this.name=e,this.timeout=n,this.memorySize=r,this.environment=s,this.handlerName=o,this.runtime=a,this.emitRebuild=c;let l=se.resolve(i);this.handlerDir=se.dirname(l),this.handlerPath=se.basename(l,`.${this.handlerName}`),this.modulePath=`${this.handlerDir}/${this.handlerPath}.rb`,this.mount=async()=>{if(!this.ruby)try{await Je(this.modulePath),this.load()}catch{console.error(`Can not find ${this.name}'s handler at: "${this.modulePath}"`),process.exit(1)}},this.unmount=d=>{d&&(this.ruby?.kill(),this.ruby=void 0,this.isMounted=!1)},this.invoke=async({event:d,info:m,clientContext:h,awsRequestId:p})=>new Promise((g,y)=>{let f=JSON.stringify({event:d,awsRequestId:p,context:h??""}),b=v=>{let w=null,R=v.toString();try{if(R.includes(t.WATCH))this.setWatchFiles(R);else if(R.includes(t.DELIMITER)){let I=R.split(t.DELIMITER),k=I[I.length-1];if(I.length>1){let E=I.slice(0,-1).join(`
8
- `);E.trim()&&console.log(E)}k&&(w=JSON.parse(k)),this.ruby.stdout.removeListener("data",b),this.ruby.stderr.removeListener("data",u),g(w)}else R.trim()&&console.log(R)}catch(I){y(I)}};this.ruby.stdout.on("data",b);let u=v=>{let w=v.toString();if(w.includes(t.ERR_RESPONSE))try{w=JSON.parse(w.split(t.ERR_RESPONSE)[1]),w.requestId=p}catch{}finally{this.ruby.stdout.removeListener("data",b),this.ruby.stderr.removeListener("data",u),y(w)}else console.log(w)};this.ruby.stderr.on("data",u),this.ruby.stdin.write(`${f}
9
- `)}),this.watcherListener=()=>{this.isMounted&&(this.unmount(!0),this.watchers.forEach(d=>d.close()),this.watchers=[],this.emitRebuild())}}setWatchFiles=async e=>{try{let n=e.split(t.WATCH),r=n[n.length-1],s=JSON.parse(r);s.push(this.modulePath);for(let i of s)try{await Je(i),this.watchers.push(rn(i,{persistent:!1},this.watcherListener))}catch{}}catch(n){console.log(n)}};load=()=>{this.bin||(this.bin=process.platform==="win32"?"ruby.exe":"ruby"),this.ruby=nn(this.bin,[t.wrapper,this.modulePath,this.handlerName,this.name,String(this.timeout)],{env:this.environment,shell:!0}),this.ruby.pid||(console.error(`Can not find ${this.bin} in your PATH`),process.exit(1)),this.isMounted=!0};onComplete=e=>{}};var sn=["@invoke","@url"],P=class t{handlers=[];static ip="127.0.0.1";debug=!1;port=0;constructor(e){this.debug=e.debug}static parseNameFromUrl(e){let n=e.split("/"),r=sn.includes(n[1])?n[2]:n[3];if(r=decodeURIComponent(r),r.includes(":function:")){let s=r.split(":function:");r=s[s.length-1]}if(r.includes(":")){let s=r.split(":");s.length==2&&(r=s[0])}return r}getHandlerByName(e){if(!e)return;let n=t.parseNameFromUrl(e);return this.handlers.find(r=>r.name==n)}addHandler(e){let n=this.handlers.findIndex(r=>r.name==e.name&&r.esOutputPath==e.esOutputPath);n==-1?(this.handlers.push(e),this.#e("POST",`/2015-03-31/functions/${e.name}/invocations`),e.url&&this.#e("ANY",`/@url/${e.name}`,"34")):this.handlers[n].runtime.startsWith("n")&&(this.handlers[n].clear(),this.handlers[n]=e)}#e(e,n,r="90"){let s=`${e} http://localhost:${this.port}${n}`;console.log(`\x1B[${r}m${s}\x1B[0m`)}};var oe;Qe&&(oe=Object.values(Qe()).reduce((t,e)=>(t.push(...e),t),[])?.filter(t=>!t.internal&&t.family==="IPv4").find(Boolean)?.address);var cn=ln?.url()!=null;cn&&(console.warn("Lambdas timeout are disabled when a Debugger is attached"),C.ENABLE_TIMEOUT=!1);var dn={errors:[],warnings:[],outputFiles:[],metafile:{inputs:{},outputs:{}},mangleCache:{}},ae=class extends P{#e;runtimeConfig={};#t;sco=[];aws;llrt;customOfflineRequests=[];customBuildCallback;onReady;stop(e){this.#e.close(e)}constructor(e,n={debug:!1}){super(n),S.setDebug(n.debug),this.aws=e.aws,this.llrt=e.llrt,e.llrt&&(L.llrtBoostrapPath=e.llrt.boostrapPath,e.llrt.environment&&(L.llrtEnvs=e.llrt.environment)),this.sco=[],this.#e=an.createServer({maxHeaderSize:105536},this.#r.bind(this)),this.#e.on("connection",s=>{s.on("close",()=>{let i=this.sco.findIndex(o=>o==s);i!=-1&&this.sco.splice(i,1)}),this.sco.push(s)});let r=on();x.accountId=Buffer.from(r).toString("hex").slice(0,16),x.apiId=Buffer.from(r).toString("ascii").slice(0,10),x.port=this.port}setPort(e){this.port=e,x.port=e}listen(e=0,n){if(isNaN(e))throw Error("port should be a number");this.#e.once("error",async r=>{r.code==="EADDRINUSE"?(S.RED(r.message),process.exit(1)):console.log(r)}),this.#e.listen(e,async()=>{let{port:r,address:s}=this.#e.address();this.setPort(r),oe&&(P.ip=oe),typeof n=="function"&&await n(r,oe);try{await this.onReady?.(r,P.ip),await _e(this.handlers,this.aws)}catch(i){console.error(i)}})}#n(e,n){n=n.endsWith("/")?n:`${n}/`;let r=this.customOfflineRequests.find(s=>{let i=!1,o=!0;return typeof s.filter=="string"?(s.filter.endsWith("/")||(s.filter+="/"),i=s.filter==n):s.filter instanceof RegExp&&(i=s.filter.test(n)),typeof s.method=="string"&&s.method.toUpperCase()!="ANY"?o=s.method.toUpperCase()==e:Array.isArray(s.method)&&(s.method.findIndex(c=>c.toUpperCase()=="ANY")!==-1||(o=s.method.findIndex(c=>c.toUpperCase()==e)!==-1)),i&&o});if(r)return r.callback}async#r(e,n){let{url:r,method:s}=e,i=new URL(r,x.dummyHost),o=this.#n(s,i.pathname);if(o)try{await o(e,n)}catch{n.writableFinished||n.end("Internal Server Error")}else{e.on("error",c=>{console.error(c.stack)});let a=()=>{n.setHeader("Content-Type","text/html"),n.statusCode=404,n.end(ke)};this.#t?this.#t(e,n,a):a()}}fakeRebuildEmitter=async()=>{if(this.customBuildCallback)try{await this.customBuildCallback(dn,!0)}catch(e){console.log(e)}console.log(`\x1B[32m${new Date().toLocaleString()} \u{1F504}\u2705 Rebuild\x1B[0m`)};async load(e){for(let n of e){switch(n.runtime.charAt(0)){case"n":n.runner=new ne(n);break;case"p":n.runner=new re(n,this.fakeRebuildEmitter);break;case"r":n.runner=new ie(n,this.fakeRebuildEmitter);break;case"l":n.runner=new L(n,this.fakeRebuildEmitter);break;case"c":n.runner=new j(n,this.fakeRebuildEmitter);break;default:n.runner=new te(n.runtime);break}let s=new C(n);this.addHandler(s)}}};import{rm as un}from"node:fs/promises";import D from"node:path";import{pathToFileURL as fn}from"node:url";import hn from"esbuild";var mn="0.0.24";function Ke(t){let e=new Set;t.plugins&&(t.plugins=t.plugins.filter((r,s)=>typeof r!="object"||!r||!("name"in r)?!1:((!r.name||!r.name.length||typeof r.name!="string")&&(r.name=`plugin-${s}`,console.warn(`No Plugin name provided at index ${s}`)),e.has(r.name)?r.name=r.name+s:e.add(r.name),!0)));async function n({stop:r,lambdas:s,region:i,esbuild:o,getServices:a,setService:c,addLambda:l,log:d,setEndpoint:m,getEndpoint:h,getAwsProviderDefaults:p,setAwsProviderDefaults:g}){let y={build:{esbuild:t?.build?.esbuild??{},shimRequire:t?.build?.shimRequire,optimizeBuild:t?.build?.optimizeBuild},server:{port:t.server?.port,setEndpointEnvVar:t.server?.setEndpointEnvVar},onKill:[],llrt:t.llrt};if(t.defaults&&typeof t.defaults=="object"&&!Array.isArray(t.defaults)&&g(t.defaults),t.functions&&typeof t.functions=="object"&&!Array.isArray(t.functions))for(let[b,u]of Object.entries(t.functions))l(b,u);t.services&&(t.services.sqs&&c("sqs",t.services.sqs),t.services.sns&&c("sns",t.services.sns),t.services.dynamodb&&c("dynamodb",t.services.dynamodb));let f={stop:r,lambdas:s,region:i,esbuild:o,options:t,config:y,getServices:a,setService:c,addLambda:l,log:d,setEndpoint:m,getEndpoint:h,getAwsProviderDefaults:p};if(t.plugins){y.server.onReady=async(u,v)=>{for(let w of t.plugins)if(w.server?.onReady)try{await w.server.onReady.call(f,u,v)}catch(R){d.RED(w.name),console.error(R)}},y.buildCallback=async(u,v)=>{for(let w of t.plugins)if(w.buildCallback)try{await w.buildCallback.call(f,u,v)}catch(R){d.RED(w.name),console.error(R),v||process.exit(1)}};let b=t.plugins.reduce((u,v)=>(v.server?.request?.length&&u.push(...v.server.request),u),[]);b?.length&&(y.server.request=b.map(u=>(u.callback=u.callback.bind(f),u)));for(let u of t.plugins)if(u.onKill&&y.onKill.push(u.onKill.bind(f)),u.onInit)try{await u.onInit.call(f)}catch(v){throw d.RED(u.name),v}}return y}return n.plugins=t.plugins??[],n}var yn=["js","mjs","cjs","ts","cts","mts"],gn=async t=>{let e=D.dirname(D.toNamespacedPath(t)),n=D.basename(t,D.extname(t)),r=D.join(e,`__${n}.mjs`);await hn.build({outfile:r,entryPoints:[t],bundle:!0,packages:"external",platform:"node",format:"esm",target:`node${process.versions.node.split(".")[0]}`,minify:!0,sourcemap:"inline",sourcesContent:!0});try{return await import(fn(r).href)}catch(s){throw s}finally{await un(r)}},Ge=async t=>{if(t){if(typeof t=="string"){let e=D.posix.parse(t),n=D.posix.join(e.dir,e.name),r=e.ext.slice(1),s=D.posix.resolve(n);yn.includes(r)&&(s+=`.${r}`);let i;try{i=await gn(s)}catch(o){S.YELLOW(`Can not read 'defineConfig' from ${t}`),console.error(o),process.exit(1)}return{exportedFunc:i,configObjectName:r,configPath:s}}if(typeof t=="object"&&!Array.isArray(t))return{configObjectName:"__inline_config__",configPath:"inline define config",exportedFunc:Ke(t)}}};var bn=t=>{let e=t.split(";");return e.findIndex(r=>r.trim().toLowerCase().startsWith("path="))==-1&&e.push("Path=/"),e.join(";")},me=(t,e,n)=>{let r={};if(t&&Object.entries(t).forEach(([s,i])=>{r[s.toLowerCase()]=Array.isArray(i)?`[${i.join(", ")}]`:i}),n)for(let[s,i]of Object.entries(n))r[s]=i;if(!Array.isArray(e))return r;if(!e.every(s=>typeof s=="string")){let s=new Error("Wrong 'cookies'. must be string[]",{cause:e}),i={"Content-Type":r["content-type"]??"application/json","x-amzn-ErrorType":"InternalFailure",...n};throw r["set-cookie"]&&(i["set-cookie"]=r["set-cookie"]),s.headers=i,s}return e=e.map(bn),r["set-cookie"]=r["set-cookie"]?[r["set-cookie"],...e]:e,r};import{randomUUID as Ye}from"node:crypto";var le=class t extends x{res;mockEvent;payload;constructor({res:e,req:n,body:r,mockEvent:s,multiValueHeaders:i,isBase64Encoded:o,lambdaName:a,parsedURL:c,requestId:l}){super(),this.res=e,this.mockEvent=s,this.payload=s.version==1?t.createApgV1Event({req:n,mockEvent:s,parsedURL:c,lambdaName:a,multiValueHeaders:i,isBase64Encoded:o,requestId:l,body:r}):t.createApgV2Event({req:n,mockEvent:s,parsedURL:c,requestId:l,isBase64Encoded:o,body:r})}static skipHeaders=["connection","content"];static createApgV2Event=({req:e,mockEvent:n,parsedURL:r,requestId:s,isBase64Encoded:i,body:o})=>{let{method:a,headers:c}=e,l=t.getPathParameters(n,r),d,m=n.methods.find(v=>v==a)??"ANY",h={},p="";for(let v of Array.from(new Set(r.searchParams.keys()))){let w=r.searchParams.getAll(v);p+=`&${w.map(R=>encodeURI(`${v}=${R}`)).join("&")}`,h[v]=w.join(",")}p&&(p=p.slice(1));let g=n.paths[0]=="/*"?"$default":`${m} ${r.pathname}`,y=new Date,f="127.0.0.1",b=c.host?.startsWith("localhost")?f:c.host?c.host.split(":")[0]:f,u={version:"2.0",routeKey:g,rawPath:r.pathname,rawQueryString:p,headers:t.getCustomHeaders(e,n),requestContext:{accountId:String(t.accountId),apiId:t.apiId,domainName:`localhost:${t.port}`,domainPrefix:"localhost",http:{method:a,path:r.pathname,protocol:"HTTP/1.1",sourceIp:b,userAgent:c["user-agent"]??""},requestId:s,routeKey:g,stage:"$default",time:y.toISOString(),timeEpoch:y.getTime()}};return o?(u.body=o,u.isBase64Encoded=i):u.isBase64Encoded=!1,Object.keys(h).length&&(u.queryStringParameters=h),Object.keys(l).length&&(u.pathParameters=l),c.cookie&&(u.cookies=c.cookie.split("; ")),d=u,d.headers["x-mock-type"]&&delete d.headers["x-mock-type"],d};static createApgV1Event=({req:e,mockEvent:n,parsedURL:r,lambdaName:s,isBase64Encoded:i,requestId:o,body:a})=>{let{method:c}=e,l={};n.proxy=="httpApi"&&(l.version="1.0");let d=n.paths[0];l.resource=d,l.path=r.pathname,l.httpMethod=c;let{headers:m,multiValueHeaders:h,apiKey:p}=t.getApiGV1Headers(e,n);l.headers=m,l.multiValueHeaders=h;let g=String(e.socket.remoteAddress),y=Object.fromEntries(r.searchParams);l.queryStringParameters=Object.keys(y).length?y:null;let f=t.getMultiValueQueryStringParameters(r.searchParams);l.multiValueQueryStringParameters=Object.keys(f).length?f:null;let b=new Date,u={accountId:String(t.accountId),apiId:t.apiId,domainName:`localhost:${t.port}`,domainPrefix:"localhost",extendedRequestId:"fake-id",httpMethod:c,identity:{accessKey:null,accountId:null,caller:null,cognitoAuthenticationProvider:null,cognitoAuthenticationType:null,cognitoIdentityId:null,cognitoIdentityPoolId:null,principalOrgId:null,sourceIp:g,user:null,userAgent:e.headers["user-agent"],userArn:null},path:r.pathname,protocol:"HTTP/1.1",requestId:o,requestTime:b.toISOString(),requestTimeEpoch:b.getTime(),resourceId:"exhmtv",resourcePath:d};n.proxy=="httpApi"?(u.identity.cognitoAmr=null,u.stage="$default"):(u.stage="dev",n.private&&(u.identity.apiKey=p,u.identity.apiKeyId="abcdefghjk")),l.requestContext=u;let v=t.getPathParameters(n,r);return l.pathParameters=Object.keys(v).length?v:null,l.stageVariables=null,l.body=a??null,l.isBase64Encoded=a?i:!1,l};returnError=e=>{if(this.res.writableFinished)return!0;let n=500,r=t.httpErrMsg;e&&t.isEndpointTimeoutError(e.errorMessage)&&(this.mockEvent.proxy=="httpApi"?(n=503,r=t.unavailable):(n=504,r=t.apgTimeoutMsg));let s=[["Date",new Date().toUTCString()],["Content-Type",t.contentType.json],["Content-Length",String(r.length)],t.keepAlive,["Apigw-Requestid","ETuSEj-PiGYEJdQ="]];return this.res.shouldKeepAlive=!1,this.res.writeHead(n,s),this.res.end(r)};#e=e=>{let n="",r=typeof e;if(r=="string"||r=="number"||r=="boolean")n=String(e);else if(e===null)n="";else throw new Error("");return n};sendV1Response=e=>{let n=[["Date",new Date().toUTCString()],["Apigw-Requestid",Buffer.from(Ye()).toString("base64").slice(0,16)],t.keepAlive],r=200;if(!e||isNaN(e.statusCode))throw S.RED(`Valid 'http' response payload must be an object which includes a valid 'statusCode'.
10
- Received:`),console.log(e),new Error;r=e.statusCode,e.headers&&typeof e.headers=="object"&&!Array.isArray(e.headers)&&Object.entries(e.headers).forEach(([l,d])=>{let m=t.normalizeHeaderKey(l),h=this.#e(d);n.push([m,h])}),e.multiValueHeaders&&typeof e.multiValueHeaders=="object"&&!Array.isArray(e.multiValueHeaders)&&Object.entries(e.multiValueHeaders).forEach(([l,d])=>{let m=t.normalizeHeaderKey(l);if(!Array.isArray(d))throw new Error;d.map(p=>this.#e(p)).forEach(p=>{n.push([m,p])})});let s=e.body;if(e.isBase64Encoded&&s){if(typeof s!="string")throw new Error;let l=Buffer.from(s,"base64").toString();if(Buffer.from(l).toString("base64")!=s)throw S.RED("response body is not properly base64 encoded"),new Error;s=l}n.findIndex(l=>l[0].toLowerCase()=="content-type")==-1&&n.push(["Content-Type",t.contentType.json]);let o=n.findIndex(l=>l[0].toLowerCase()=="content-length");o!=-1&&n.splice(o,1);let a=typeof s;a=="number"||a=="boolean"?s=String(s):s&&a!="string"&&S.YELLOW("API Gateway payload v1 return body must be typeof string, number or boolean ");let c=r==204?"0":s?String(Buffer.from(s).byteLength):"0";n.push(["Content-Length",c]),this.res.shouldKeepAlive=!1,this.res.writeHead(r,n),this.res.end(s)};sendV2Response=e=>{this.res.setHeader("Apigw-Requestid",Buffer.from(Ye()).toString("base64").slice(0,16)),this.res.setHeader("Date",new Date().toUTCString()),e?(typeof e.headers=="object"&&!Array.isArray(e.headers)&&Object.keys(e.headers).filter(s=>s!=="Apigw-Requestid"&&s!=="Date").forEach(s=>{this.res.setHeader(s,e.headers[s])}),e.statusCode?(this.res.statusCode=e.statusCode,e.cookies?.length&&this.res.setHeader("Set-Cookie",e.cookies)):this.res.statusCode=200):this.res.statusCode=200;let n="";if(!e)return this.res.end();if(typeof e=="object"&&typeof e.body=="string"&&(n=e.body,e.isBase64Encoded)){let r=Buffer.from(n,"base64").toString();if(Buffer.from(r).toString("base64")!=n)throw S.RED("response body is not properly base64 encoded"),new Error;n=r}typeof e=="string"?(this.res.setHeader("Content-Type",t.contentType.json),n=e):typeof e=="object"&&!e.statusCode&&(this.res.setHeader("Content-Type",t.contentType.json),n=JSON.stringify(e)),this.res.end(n)};sendResponse=e=>{if(!this.res.writableFinished)return this.mockEvent.version==1?this.sendV1Response(e):this.sendV2Response(e)}};var vn=(t,e)=>{let n=e.url.stream?t:void 0;if(n){let r=!1,s=t.write.bind(t),i=t.setHeader.bind(t),o,a,c=m=>{a=a?Buffer.concat([a,m]):m},l=()=>{if(a){let m=Ne(a),h=m.statusCode??200;try{let p=me(m.headers,m.cookies);t.writeHead(h,p)}catch(p){t.writeHead(500,p.headers),t.end?.(x.amzMsgNull),delete p.headers}}else t.writeHead(200)};n.setHeader=(m,h)=>{if(m.toLowerCase()=="content-type"){if(h=="application/vnd.awslambda.http-integration-response")return r=!0,i("Content-Type",x.contentType.json);o=h}return i(m,h)};let d=!1;return n.write=(m,h,p)=>{if(n.headersSent)return s(m,h,p);if(d)try{let g=A.codec.decode(m),y=JSON.parse(g);if(Array.isArray(y))throw new Error("Invalid stream response");return y&&typeof y=="object"?(l(),s(m,h,p)):(t.writeHead(200,{"Content-Type":x.contentType.octet}),t.end())}catch(g){let y=new Error(`When using HttpResponseStream first chunk of .write() must be valid JSON and not be Array. Number and null will respones with 200.
11
- '${e.name}'`);return y.cause=g.message,console.error(y),X(t)}else if(r)De(m)?d=!0:c(m);else{if(o==x.contentType.json)try{let y=A.codec.decode(m),f=JSON.parse(y);if(f===null||typeof f=="number")throw new Error(y)}catch(y){let f=new Error(`When 'Content-Type' is 'application/json' first chunk of .write() must be parsable JSON and not be null or number.
12
- '${e.name}'`);return f.cause=y.message,console.error(f),X(t)}let g={"Content-Type":o??x.contentType.octet};return n.writeHead(200,g),s(m,h,p)}},n}},Sn=(t,e,n,r)=>{let s=Q(t),i=s?t.getParsedResponse():t,o,a=!1;if(i&&typeof i=="object"&&i.statusCode){let c=isNaN(i.statusCode),l=c?500:i.statusCode;if(a=!c&&(i.isBase64Encoded==!0||i.isBase64Encoded=="true"),i.headers||i.cookies)try{let d=me(i.headers,i.cookies,r);e.writeHead(l,d)}catch(d){return e.writeHead(500,d.headers),delete d.headers,console.error(d),e.end(x.amzMsgNull)}else e.writeHead(l,{"Content-Type":x.contentType.json,...r});n?o=i:(typeof i.body<"u"&&(o=i.body),e.headersSent||e.setHeader("Content-Type",s?x.contentType.octet:x.contentType.json))}else e.writeHead(200,{"Content-Type":x.contentType.json,...r}),o=i;!e.headersSent&&!n&&s&&e.setHeader("Content-Type",x.contentType.octet),n?o instanceof Uint8Array?e.end(o):e.end(JSON.stringify(o)):((typeof o=="number"||typeof o=="boolean"||o==null||o instanceof Object)&&(o=JSON.stringify(o)),o&&a&&(o=Buffer.from(o,"base64")),e.end(o))};function xn(t,e){let n=t["access-control-request-method"];return e=="OPTIONS"&&t.origin&&n&&["GET","HEAD","POST","PUT","DELETE","PATCH"].includes(n)}function Xe(t,e){let n=e.origin;return n&&t.allowOrigins.find(s=>s=="*"||s=="http://*"||s=="https://*")?!0:!!t.allowOrigins.find(s=>s==n)}function wn(t,e){if(!t.allowMethods?.length)return!1;if(t.allowMethods.find(s=>s=="*"))return!0;let r=e["access-control-request-method"];return!!t.allowMethods.find(s=>s==r)}function Rn(t,e){if(!wn(t,e)||!Xe(t,e))return!1;let n=e["access-control-request-headers"]?e["access-control-request-headers"].split(",").filter(Boolean):[];return n.length?t.allowHeaders?.length?n.every(r=>t.allowHeaders.find(s=>s.toLowerCase()==r.toLowerCase())):!1:!0}var Ze=t=>({filter:/^\/@url\//,callback:async(e,n)=>{let{url:r,method:s,headers:i}=e;if(Oe(n,s))return;let o=new URL(r,x.dummyHost),a=H(n),c=P.parseNameFromUrl(o.pathname),l=t.handlers.find(f=>f.name==c);if(!l?.url)return n.statusCode=404,n.end("Not Found");let d;if(l.url.cors){if(xn(i,s)){let b=Rn(l.url.cors,i),u={"Content-Type":x.contentType.json};return b&&(u["access-control-allow-origin"]=i.origin,l.url.cors.allowMethods.find(v=>v=="*")?u["access-control-allow-methods"]=i["access-control-request-method"]:u["access-control-allow-methods"]=l.url.cors.allowMethods.join(","),l.url.cors.allowHeaders?.length&&(u["access-control-allow-headers"]=l.url.cors.allowHeaders.join(",")),typeof l.url.cors.maxAge=="number"&&l.url.cors.maxAge>-1&&(u["access-control-max-age"]=`${l.url.cors.maxAge}`),l.url.cors.allowCredentials&&(u["access-control-allow-credentials"]="true")),n.writeHead(200,u),n.end()}Xe(l.url.cors,i)&&(d={"access-control-allow-origin":i.origin},l.url.cors.exposeHeaders?.length&&(d["access-control-expose-headers"]=l.url.cors.exposeHeaders.join(",")),l.url.cors.allowCredentials&&(d["access-control-allow-credentials"]="true"))}let m=x.getIsBase64Encoded(i),h=await N(e,m),p=le.createApgV2Event({req:e,mockEvent:l.url,parsedURL:o,requestId:a,body:h,isBase64Encoded:m}),g=`/@url/${l.name}`,y=o.pathname.slice(g.length);y||(y="/"),p.requestContext.accountId="anonymous",p.rawPath=y,p.requestContext.http.path=y;try{let f=vn(n,l),b=await l.invoke(p,l.url,void 0,f);if(!b)return n.end();Sn(b,n,f,d)}catch(f){console.error(f),X(n,d)}}});var et=t=>({filter:/(^\/2015-03-31\/functions\/.*\/invocations)|(^\/@invoke\/)/,callback:async(e,n)=>{let{url:r,headers:s}=e,i=new URL(r,"http://localhost:3003"),o=P.parseNameFromUrl(i.pathname),a=t.handlers.find(f=>f.name==o),c=H(n);if(n.setHeader("Content-Type","application/json"),e.on("error",f=>{n.statusCode=502,n.end(JSON.stringify(f))}),!a){let{region:f,accountId:b}=t.aws;return n.statusCode=404,n.setHeader("x-amzn-errortype","ResourceNotFoundException"),n.end(Y(o,f,b))}let l=s["x-amz-invocation-type"],d=B(s["x-amz-client-context"]);if(d instanceof Error)return n.setHeader("x-amzn-errortype","InvalidRequestContentException"),n.statusCode=400,n.end(G);let m=l=="DryRun"?204:l=="Event"?202:200,h=await N(e),p=J(h);if(n.setHeader("X-Amzn-Trace-Id","root=1-xxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx;sampled=0"),p instanceof Error)return n.statusCode=400,n.setHeader("x-amzn-errortype","InvalidRequestContentException"),n.end(K(p.message));n.setHeader("X-Amz-Executed-Version","$LATEST");let g=new Date,y={};n.statusCode=m,m!==200&&n.end(),m==202&&(y.kind="async");try{let f=await a.invoke(p,y,d);if(m==200){if(typeof f>"u"){n.end();return}let b=Q(f),u=b?f.buffer:f;b?u=A.codec.decode(u):typeof u!="string"&&(u=JSON.stringify(u)),n.end(u)}}catch(f){let b,u=!1;if(typeof f=="string")try{b=JSON.parse(f),u=!0}catch{}else b=f;n.writableFinished||(n.setHeader("X-Amz-Function-Error",b.errorType??b.message??""),n.statusCode=200,n.end(u?f:JSON.stringify(b)))}}});import{randomUUID as tt}from"node:crypto";import{setTimeout as En}from"node:timers/promises";var nt=t=>({filter:"/2015-03-31/functions",method:"POST",async callback(e,n){let r=await N(e),s=JSON.parse(r),{FunctionName:i,Handler:o,Environment:a,Runtime:c,Timeout:l,MemorySize:d}=s;t.addLambda(i,{handler:o,environment:a?.Variables,runtime:c,timeout:l,memorySize:d}),t.isDynamicBuild=!0,t.setEsBuildConfig(),await t.buildContext.dispose(),await t.buildAndWatch(),await En(100),n.statusCode=201,n.end(r)}}),rt=t=>({filter:/\/2015-03-31\/functions\/*/,method:"GET",async callback(e,n){let{url:r}=e,i=new URL(r,"http://localhost:3003").pathname.slice(22),o=t.getLambdaByName(i);if(!o){n.statusCode=404,n.end();return}let a={Code:{RepositoryType:"S3",Location:"https://s3.com/snapshots/1234543"},Tags:{},Configuration:{Architectures:["arm64"],CodeSha256:"WrLckXVmmfsSPvP/15FqPi9Nt9qQBaspP6RV3T137K4=",SigningJobArn:"",FunctionArn:`arn:aws:lambda:${t.aws.region}:${t.aws.accountId}:function:${i}`,FunctionName:i,Handler:o.handlerPath,Timeout:o.timeout,Runtime:o.runtime,MemorySize:o.memorySize,Environment:{Variables:st(o.environment)},State:"Active",LastUpdateStatus:"Successful",LastModified:new Date().toISOString(),Version:"$LATEST",Role:`arn:aws:iam::${t.aws.accountId}:role/fake-role-name`,RevisionId:tt(),PackageType:"Zip",Description:"",EphemeralStorage:{Size:512},TracingConfig:{Mode:"PassThrough"},VpcConfig:{Ipv6AllowedForDualStack:!1,VpcId:"",SecurityGroupIds:[],SubnetIds:[]},CodeSize:5867,SnapStart:{OptimizationStatus:"Off",ApplyOn:"None"},LoggingConfig:{LogFormat:"Text",LogGroup:`/aws/lambda/${i}`}}};n.end(JSON.stringify(a))}}),An=["AWS_EXECUTION_ENV","AWS_LAMBDA_FUNCTION_VERSION","AWS_LAMBDA_FUNCTION_NAME","_HANDLER","IS_OFFLINE","IS_LOCAL","AWS_SAM_LOCAL","AWS_LAMBDA_FUNCTION_MEMORY_SIZE"];function st(t){let e={};for(let[n,r]of Object.entries(t))An.includes(n)||(e[n]=String(r));return e}var it=t=>({method:"GET",filter:/\/2015-03-31\/functions\/.*\/versions/,async callback(e,n){let{url:r}=e,i=new URL(r,"http://localhost:3003").pathname.slice(22);i=i.slice(0,i.indexOf("/"));let o=t.getLambdaByName(i);if(!o){n.statusCode=404,n.end();return}let a={Versions:[{Architectures:["arm64"],CodeSha256:"WrLckXVmmfsSPvP/15FqPi9Nt9qQBaspP6RV3T137K4=",SigningJobArn:"",FunctionArn:`arn:aws:lambda:${t.aws.region}:${t.aws.accountId}:function:${i}`,FunctionName:i,Handler:o.handlerPath,Timeout:o.timeout,Runtime:o.runtime,MemorySize:o.memorySize,Environment:{Variables:st(o.environment)},State:"Active",LastUpdateStatus:"Successful",LastModified:new Date().toISOString(),Version:"$LATEST",Role:`arn:aws:iam::${t.aws.accountId}:role/fake-role-name`,RevisionId:tt(),PackageType:"Zip",Description:"",EphemeralStorage:{Size:512},TracingConfig:{Mode:"PassThrough"},VpcConfig:{Ipv6AllowedForDualStack:!1,VpcId:"",SecurityGroupIds:[],SubnetIds:[]},CodeSize:5867,SnapStart:{OptimizationStatus:"Off",ApplyOn:"None"},LoggingConfig:{LogFormat:"Text",LogGroup:`/aws/lambda/${i}`}}]};n.end(JSON.stringify(a))}}),ot=t=>({method:"GET",filter:/\/2020-06-30\/functions\/.*\/code-signing-config/,async callback(e,n){let{url:r}=e,i=new URL(r,"http://localhost:3003").pathname.slice(22);if(i=i.slice(0,i.indexOf("/")),!t.getLambdaByName(i)){n.statusCode=404,n.end();return}let a={CodeSigningConfigArn:"",FunctionName:i};n.end(JSON.stringify(a))}});import{EventStreamCodec as Pn}from"@smithy/eventstream-codec";var kn=(t,e)=>{let n=Buffer.from(t,e);return new Uint8Array(n.buffer,n.byteOffset,n.byteLength/Uint8Array.BYTES_PER_ELEMENT)},Ln=t=>Buffer.from(t,t.byteOffset,t.byteLength).toString("utf8"),ue=new Pn(Ln,kn),ce=class t{res;static complete=Buffer.from([0,0,0,102,0,0,0,84,31,86,200,105,11,58,101,118,101,110,116,45,116,121,112,101,7,0,14,73,110,118,111,107,101,67,111,109,112,108,101,116,101,13,58,99,111,110,116,101,110,116,45,116,121,112,101,7,0,16,97,112,112,108,105,99,97,116,105,111,110,47,106,115,111,110,13,58,109,101,115,115,97,103,101,45,116,121,112,101,7,0,5,101,118,101,110,116,123,125,112,6,212,103]);constructor(e){this.res=e}write(e,n,r){this.res.write(ue.encode({headers:this.#e("PayloadChunk",x.contentType.octet),body:e}),n,r)}end(e){e?this.write(e,"utf8",()=>{this.res.end(t.complete)}):this.res.end(t.complete)}setHeader(e,n){e=="Content-Type"&&this.res.setHeader("Content-Type",n)}destroy(){this.res.destroy()}endWithError(e){let n={ErrorCode:e.errorType,ErrorDetails:JSON.stringify(e)},r=Array.from(Buffer.from(JSON.stringify(n)).values());this.res.end(ue.encode({headers:this.#e("InvokeComplete",x.contentType.json),body:new Uint8Array(r)}))}endWithJson(e){let n=Array.from(Buffer.from(JSON.stringify(e)).values());this.res.write(ue.encode({headers:this.#e("PayloadChunk",x.contentType.octet),body:new Uint8Array(n)}),()=>{this.res.end(t.complete)})}#e(e,n,r="event"){return{":event-type":{type:"string",value:e},":content-type":{type:"string",value:n},":message-type":{type:"string",value:r}}}};var at=t=>({filter:/^\/2021-11-15\/functions\//,callback:async(e,n)=>{let{url:r,headers:s}=e,i=new URL(r,"http://localhost:3003"),o=H(n),a=P.parseNameFromUrl(i.pathname),c=t.handlers.find(p=>p.name==a),l=await N(e),d=J(l);if(n.setHeader("X-Amzn-Trace-Id","root=1-xxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx;sampled=0"),d instanceof Error)return n.statusCode=400,n.setHeader("x-amzn-errortype","InvalidRequestContentException"),n.end(K(d.message));let m=B(s["x-amz-client-context"]);if(m instanceof Error)return n.setHeader("x-amzn-errortype","InvalidRequestContentException"),n.statusCode=400,n.end(G);let h=new ce(n);if(c){let p=c.url?.stream??{};try{let g=await c.invoke(d,p,m,h);g&&h.endWithJson(g)}catch(g){n.writableFinished||h.endWithError(g)}}else{let{region:p,accountId:g}=t.aws;n.statusCode=404,n.end(Y(a,p,g))}}});var lt=t=>[nt(t),it(t),ot(t),et(t),at(t),Ze(t),rt(t)];var fe=process.cwd(),Nn=3,Dn=1024,Tn={IS_OFFLINE:!0,IS_LOCAL:!0,AWS_SAM_LOCAL:!0},Mn=fe.split(O.sep)[0],qn=new RegExp(`^.*:${Mn}`),jn=t=>qn.test(t);process.title="node (exlo)";var de=class extends ae{#e;options;config;esBuildConfig;buildContext={};customEsBuildConfig;optimizeBuild=!1;nodeVersion=!1;onKill=[];shimRequire=!1;port=0;onceServerReady=[];isDynamicBuild=!1;endpoints={};setLambdaEndpointEnvVar=!0;constructor(e,n){super(e,{debug:typeof n.debug=="boolean"?n.debug:!1}),this.#e=[],this.options=n,this.options.customEsBuildConfig&&(this.customEsBuildConfig=this.options.customEsBuildConfig),typeof this.options.config?.server?.setEndpointEnvVar=="boolean"&&(this.setLambdaEndpointEnvVar=this.options.config.server.setEndpointEnvVar),this.options.config&&(typeof this.options.config=="string"||typeof this.options.config=="object"&&!Array.isArray(this.options.config))&&(this.config=this.options.config),typeof this.options.optimizeBuild=="boolean"&&(this.optimizeBuild=this.options.optimizeBuild),typeof this.options.shimRequire=="boolean"&&(this.shimRequire=this.options.shimRequire),this.aws.runtime?.startsWith("node")?this.nodeVersion=this.aws.runtime?.replace(/[^0-9]/g,""):this.nodeVersion="20",S.BR_BLUE("Starting exlo...")}async start(){this.#s(),this.#e=this.#r(),await this.#o(),this.setEsBuildConfig(),await this.buildAndWatch()}setEsBuildConfig(){let n={sourcemap:!0,minify:!1,entryPoints:this.#e.filter(r=>r.runtime.startsWith("n")||r.runtime=="llrt").map(r=>r.esEntryPoint),outdir:O.join(fe,".exlo","build"),metafile:!0,bundle:!0,platform:"node",target:"node20",format:"cjs",outbase:"src",plugins:[],external:["esbuild","llrt","llrt:*"],dropLabels:[]};if(typeof process.env.NODE_ENV=="string"&&(n.define={"process.env.NODE_ENV":`"${process.env.NODE_ENV}"`}),typeof this.nodeVersion=="string"&&!isNaN(Number(this.nodeVersion))){Number(process.versions.node.slice(0,2))<Number(this.nodeVersion)&&S.RED(`You are running on NodeJS ${process.version} which is lower than defined '${this.nodeVersion}'.`),n.target=`node${this.nodeVersion}`;let r=()=>this.sco;n.plugins?.push(ve({nodeVersion:Number(this.nodeVersion),shimRequire:this.shimRequire,optimizeBuild:this.optimizeBuild,buildCallback:this.buildCallback,getSockets:r}))}this.customEsBuildConfig&&(n=Se(n,this.customEsBuildConfig)),this.esBuildConfig=n}async buildAndWatch(){this.buildContext=await ct.context(this.esBuildConfig),await this.buildContext.watch()}buildCallback=async(e,n)=>{if(n||this.isDynamicBuild)await this.#t(e);else{let{outputs:r}=e.metafile;if(this.#i(r),this.customBuildCallback)try{await this.customBuildCallback(e,!1)}catch(o){console.log(o)}this.#a();let s=this,i=await new Promise(o=>{this.listen(this.port,async(a,c)=>{let l=`http://localhost:${a}`;S.PINK(`Lambda endpoint: ${l}`),this.endpoints.lambda=l,this.setLambdaEndpointEnvVar&&(this.runtimeConfig.environment.AWS_ENDPOINT_URL_LAMBDA=l,this.aws.environment.AWS_ENDPOINT_URL_LAMBDA=l),await s.load(s.#e);for(let d of s.#e)d.setEnv("LOCAL_PORT",a),d.setEnv("AWS_LAMBDA_RUNTIME_API",`127.0.0.1:${a}`),this.setLambdaEndpointEnvVar&&d.setEnv("AWS_ENDPOINT_URL_LAMBDA",l);o({url:l,port:a})})});this.onceServerReady.forEach(o=>{o(i)})}};async#t(e){if(e?.errors?.length)S.RED("Build failed:"),console.error(e.errors);else{this.#i(e.metafile.outputs);try{await this.load(this.#e),this.customBuildCallback&&await this.customBuildCallback(e,!0)}catch(n){console.error(n)}console.log(`\x1B[32m${new Date().toLocaleString()} \u{1F504}\u2705 Rebuild\x1B[0m`)}}#n(e){let n=this.aws,r=n.runtime,s=this.runtimeConfig.environment.AWS_REGION??this.runtimeConfig.environment.REGION,o=n.functions[e],a=o.handler,c=O.extname(a),l=c.slice(1),d=O.resolve(a.replace(c,"")),m=n.getFunction(e),h=m.runtime??r,p={name:e,runtime:m.runtime??r,handlerPath:a,handlerName:l,esEntryPoint:d,memorySize:o.memorySize??this.runtimeConfig.memorySize??Dn,timeout:o.timeout??this.runtimeConfig.timeout??Nn,sqs:[],ddb:[],environment:{AWS_EXECUTION_ENV:`AWS_Lambda_${h}`,AWS_LAMBDA_FUNCTION_VERSION:"$LATEST",AWS_LAMBDA_FUNCTION_NAME:e,_HANDLER:O.basename(a),...this.runtimeConfig.environment,...o.environment,...Tn},invoke:async(g,y)=>{let f=this.getHandlerByName(`/@invoke/${e}`);if(f)return await f.invoke(g,y);S.RED(`'${e}' is not mounted yet.
13
- Please invoke it after the initial build is completed.`)},invokeSub:[],invokeSuccessSub:[],invokeErrorSub:[],setEnv:(g,y)=>{this.setEnv(e,g,y)},shutdown:async()=>{let g=this.getHandlerByName(`/@invoke/${e}`);g&&await g.shutdown()}};if(p.onError=z(o.onError),p.onError?.kind=="lambda"&&(S.YELLOW("Dead-Letter queue could only be a SNS or SQS service"),delete p.onError),o.destinations&&typeof o.destinations=="object"&&(p.onFailure=z(o.destinations.onFailure),p.onSuccess=z(o.destinations.onSuccess)),p.onInvoke=g=>{p.invokeSub.push(g)},p.onInvokeSuccess=g=>{p.invokeSuccessSub.push(g)},p.onInvokeError=g=>{p.invokeErrorSub.push(g)},process.env.NODE_ENV&&(p.environment.NODE_ENV=process.env.NODE_ENV),s&&(p.environment.AWS_REGION=s,p.environment.AWS_DEFAULT_REGION=s),p.environment.AWS_LAMBDA_FUNCTION_MEMORY_SIZE=p.memorySize,p.url=we(o),o.triggers?.length){let{sqs:g,ddb:y}=Ee({triggers:o.triggers});p.sqs=g,p.ddb=y}return p}#r(){let e=this.aws.functions;return Object.keys(e).reduce((s,i)=>{let o=this.#n(i);return s.push(o),s},[])}#i(e){let n=Object.keys(e).filter(r=>!r.endsWith(".map")&&e[r].entryPoint).map(r=>{let i=e[r].entryPoint,o="";jn(i)&&(i=i.split(":").slice(1).join(":")),O.isAbsolute(i)||(i=O.resolve(i));let a=i.lastIndexOf(".");return a!=-1&&(o=O.extname(i),i=i.slice(0,a)),{esOutputPath:O.join(fe,r),entryPoint:i,ext:o}});for(let r of this.#e){let s=n.find(i=>i?.entryPoint==r.esEntryPoint);s&&(r.esOutputPath=s.esOutputPath,r.entryPoint=`${s.entryPoint}${s.ext}`)}}#s(){let{environment:e,memorySize:n,timeout:r}=this.aws;this.runtimeConfig.memorySize=n,this.runtimeConfig.timeout=r,this.runtimeConfig.environment=e?{...e}:{};let s=Object.keys(process.env).filter(i=>i.startsWith("AWS_"));for(let i of s)this.runtimeConfig.environment[i]=process.env[i];"FORCE_COLOR"in this.runtimeConfig.environment||process.env.FORCE_COLOR?.toLowerCase()==="false"||process.env.FORCE_COLOR?.toLowerCase()==="no"||process.env.FORCE_COLOR==="0"||("COLORTERM"in process.env||process.env.TERM?.includes("256"))&&(this.runtimeConfig.environment.FORCE_COLOR="true")}setEnv(e,n,r){let s=this.#e.findIndex(i=>i.name==e);if(s>-1){this.#e[s].environment[n]=r;let i=this.aws.getFunction(e);i&&(i.environment||(i.environment={}),i.environment[n]=r)}else S.RED(`Can not set env variable '${n}' on '${e}'`)}addLambda(e,n){if(!n.triggers)n.triggers=[];else if(!Array.isArray(n.triggers))throw new Error("Lambda 'triggers' must be an array when defined.");this.#s(),this.aws.functions[e]=n;let r=this.#n(e);this.#e.push(r)}getLambdaByName(e){return this.#e.find(n=>n.name==e)}buildDefineConfigParam(){let e=this;return{stop:async r=>{await this.kill(r)},lambdas:this.#e,addLambda:(r,s)=>{this.addLambda(r,s)},esbuild:ct,getServices(){return{s3:e.aws.services.s3,sqs:e.aws.services.sqs,sns:e.aws.services.sns,dynamodb:e.aws.services.dynamodb}},setService(r,s){switch(r){case"s3":e.aws.services.s3=s;break;case"sns":e.aws.services.sns=s;break;case"sqs":e.aws.services.sqs=s;break;case"dynamodb":e.aws.services.dynamodb=s;break;default:break}},setEndpoint:(r,s,i)=>{if(this.endpoints[r]=s,typeof i=="string"){this.aws.environment[i]=s;for(let o of this.#e)this.setEnv(o.name,i,s)}},getEndpoint:r=>this.endpoints[r],getAwsProviderDefaults:()=>({accountId:e.aws.accountId,region:e.aws.region,runtime:e.aws.runtime,memorySize:e.aws.memorySize,timeout:e.aws.timeout,environment:{...e.aws.environment}}),setAwsProviderDefaults:({accountId:r,environment:s,memorySize:i,region:o,runtime:a,timeout:c})=>{r&&(e.aws.accountId=r),s&&(e.aws.environment=s),i&&(e.aws.memorySize=i),o&&(e.aws.region=o),a&&(e.aws.runtime=a),c&&(e.aws.timeout=c)},log:S}}async resolveConfig(){let e=await Ge(this.config);if(e?.exportedFunc){let n,{exportedFunc:r,configObjectName:s,configPath:i}=e;if(typeof r[s]=="function")n=r[s];else if(typeof r=="function")n=r;else if(typeof r.default=="function")n=r.default;else throw new Error(`Can not read exlo config at: ${i}`);return n}}onBeforeApplyConfigCallbacks=[];onBeforeApplyConfig(e){this.onBeforeApplyConfigCallbacks.push(e)}async#l(e){for(let n of this.onBeforeApplyConfigCallbacks)await n(e)}async#o(){let e=this.buildDefineConfigParam(),n=lt(this).map(a=>(a.callback=a.callback.bind(e),a)),r=await this.resolveConfig(),s={};r&&(await this.#l(r),s=await r(e),Array.isArray(s.onKill)&&this.onKill.push(...s.onKill),s.build&&(typeof s.build.shimRequire=="boolean"&&(this.shimRequire=s.build.shimRequire),typeof s.build.optimizeBuild=="boolean"&&(this.optimizeBuild=s.build.optimizeBuild)),!this.llrt&&s.llrt&&(this.llrt=s.llrt,L.llrtBoostrapPath=this.llrt.boostrapPath,this.llrt.environment&&(L.llrtEnvs=this.llrt.environment)),typeof s.buildCallback=="function"&&(this.customBuildCallback=s.buildCallback),s.server&&typeof s.server=="object"&&(Array.isArray(s.server.request)&&n.unshift(...s.server.request),typeof s.server.port=="number"&&!this.port&&(this.port=s.server.port),typeof s.server.onReady=="function"&&(this.onReady=s.server.onReady),typeof s.server.setEndpointEnvVar=="boolean"&&(this.setLambdaEndpointEnvVar=s.server.setEndpointEnvVar))),this.customOfflineRequests=n;let i=s?.build?.esbuild;if(!i)return;let o=xe(i);Object.keys(o).length&&(this.customEsBuildConfig?this.customEsBuildConfig={...this.customEsBuildConfig,...o}:this.customEsBuildConfig=o)}#a=()=>{let e=this.options.port;isNaN(e)||(this.port=e)};async kill(e){this.buildContext.dispose&&await this.buildContext.dispose();for(let n of On.SOURCES)try{await n.disable()}catch(r){console.error(r)}for(let n of this.handlers)n.clear?.();this.stop(e);for(let n of this.onKill)try{await n()}catch(r){console.error(r)}}};async function Ai(t){let e=Fn(t);return await e.exlo.start(),await e.waitServer,{port:e.listeningPort,url:e.listeningUrl,endpoints:e.exlo.endpoints,async kill(){await e.exlo.kill()},[Symbol.asyncDispose]:async()=>{await e.exlo.kill()}}}var he=class{accountId="123456789012";region="us-east-1";timeout=3;memorySize=1024;environment={};services={};functions={};runtime=`node${process.versions.node.split(".")[0]}.x`;getFunction(e){return this.functions[e]}};function Fn(t){let e=new he,n={};t&&(t.port&&(n.port=t.port),typeof t.debug=="boolean"&&(n.debug=t.debug),t.build&&(typeof t.build.shimRequire=="boolean"&&(n.shimRequire=t.build.shimRequire),typeof t.build.optimizeBuild=="boolean"&&(n.optimizeBuild=t.build.optimizeBuild),t.build.esbuild&&(n.customEsBuildConfig=t.build.esbuild)),t.config&&(n.config=t.config),t.functions&&(e.functions=t.functions),t.defaults&&(t.defaults.environment&&(e.environment=t.defaults.environment),t.defaults.timeout&&(e.timeout=t.defaults.timeout),t.defaults.memorySize&&(e.memorySize=t.defaults.memorySize),t.defaults.runtime&&(e.runtime=t.defaults.runtime),t.defaults.accountId&&(e.accountId=t.defaults.accountId),t.defaults.region&&(e.region=t.defaults.region)));let r;t?.llrt?r=t.llrt:typeof t?.config=="object"&&t.config.llrt&&(r=t.config.llrt);let s=new de({aws:e,llrt:r},n);typeof t?.onKill=="function"&&s.onKill.push(t.onKill);let i;s.onceServerReady.push(a=>{o.listeningPort=a.port,o.listeningUrl=a.url,i()});let o={listeningPort:0,listeningUrl:"",exlo:s,waitServer:new Promise(a=>{i=a})};return o}export{Fn as createAppRunner,mn as exloVersion,Ai as run};
6
+ `)}else E=I;E.trim()&&console.log(E)}}catch(k){console.log("err",k),y(k)}};this.python.stdout.on("data",u);let b=w=>{let R=w.toString();if(R.includes(t.ERR_RESPONSE))try{R=JSON.parse(R.split(t.ERR_RESPONSE)[1]),R.requestId=p}catch{}finally{this.python.stdout.removeListener("data",u),this.python.stderr.removeListener("data",b),y(R)}else console.log(R)};this.python.stderr.on("data",b),this.python.stdin.write(`${h}
7
+ `)}),this.watcherListener=()=>{this.isMounted&&(this.unmount(!0),this.watchers.forEach(d=>d.close()),this.watchers=[],this.emitRebuild())}}setWatchFiles=async e=>{try{let n=e.split(t.WATCH),s=n[n.length-1].split(t.WATCHEND)[0],i=JSON.parse(s).map(o=>`${o.replace(/\./g,W.sep)}.py`);for(let o of i)try{await Ve(o),this.watchers.push(Zt(o,{persistent:!1},this.watcherListener))}catch{}}catch(n){console.log(n)}};findPython(){let[e]=this.runtime.split("."),n=e.split("python")[1];if(Be(`${e} --version`))return e;let r=Be("python --version");if(!r)throw new Error("Can not find python on your OS. Make sure it is installed.");if(n){let s=r.split(" ")[1]?.split(".")[0];s&&s!=n&&v.YELLOW("found python binary but with different version")}return"python"}load=()=>{this.bin||(this.bin=this.findPython()),this.python=Xt(this.bin,["-u",t.wrapper,this.handlerFileAbsolutePath,this.pyModulePath,this.handlerName,String(this.timeout)],{env:this.environment}),this.python.pid||(console.error(`Can not find ${this.bin} in your PATH`),process.exit(1)),this.isMounted=!0};onComplete=e=>{}};import{spawn as tn}from"node:child_process";import{watch as nn}from"node:fs";import{access as Je}from"node:fs/promises";import se from"node:path";var ie=class t{invoke;mount;unmount;name;timeout;memorySize;environment;handlerPath;modulePath;handlerDir;handlerName;runtime;bin;ruby;isMounted=!1;emitRebuild;watcherListener;watchers=[];static wrapper=se.resolve(q("exlo"),"./src/lib/runtime/runners/ruby/index.rb");static DELIMITER="__|response|__";static ERR_RESPONSE="__|error|__";static WATCH="__|watch|__";constructor({name:e,timeout:n,memorySize:r,environment:s,handlerPath:i,handlerName:o,runtime:a},c){this.name=e,this.timeout=n,this.memorySize=r,this.environment=s,this.handlerName=o,this.runtime=a,this.emitRebuild=c;let l=se.resolve(i);this.handlerDir=se.dirname(l),this.handlerPath=se.basename(l,`.${this.handlerName}`),this.modulePath=`${this.handlerDir}/${this.handlerPath}.rb`,this.mount=async()=>{if(!this.ruby)try{await Je(this.modulePath),this.load()}catch{console.error(`Can not find ${this.name}'s handler at: "${this.modulePath}"`),process.exit(1)}},this.unmount=d=>{d&&(this.ruby?.kill(),this.ruby=void 0,this.isMounted=!1)},this.invoke=async({event:d,info:m,clientContext:f,awsRequestId:p})=>new Promise((g,y)=>{let h=JSON.stringify({event:d,awsRequestId:p,context:f??""}),S=b=>{let w=null,R=b.toString();try{if(R.includes(t.WATCH))this.setWatchFiles(R);else if(R.includes(t.DELIMITER)){let I=R.split(t.DELIMITER),k=I[I.length-1];if(I.length>1){let E=I.slice(0,-1).join(`
8
+ `);E.trim()&&console.log(E)}k&&(w=JSON.parse(k)),this.ruby.stdout.removeListener("data",S),this.ruby.stderr.removeListener("data",u),g(w)}else R.trim()&&console.log(R)}catch(I){y(I)}};this.ruby.stdout.on("data",S);let u=b=>{let w=b.toString();if(w.includes(t.ERR_RESPONSE))try{w=JSON.parse(w.split(t.ERR_RESPONSE)[1]),w.requestId=p}catch{}finally{this.ruby.stdout.removeListener("data",S),this.ruby.stderr.removeListener("data",u),y(w)}else console.log(w)};this.ruby.stderr.on("data",u),this.ruby.stdin.write(`${h}
9
+ `)}),this.watcherListener=()=>{this.isMounted&&(this.unmount(!0),this.watchers.forEach(d=>d.close()),this.watchers=[],this.emitRebuild())}}setWatchFiles=async e=>{try{let n=e.split(t.WATCH),r=n[n.length-1],s=JSON.parse(r);s.push(this.modulePath);for(let i of s)try{await Je(i),this.watchers.push(nn(i,{persistent:!1},this.watcherListener))}catch{}}catch(n){console.log(n)}};load=()=>{this.bin||(this.bin=process.platform==="win32"?"ruby.exe":"ruby"),this.ruby=tn(this.bin,[t.wrapper,this.modulePath,this.handlerName,this.name,String(this.timeout)],{env:this.environment,shell:!0}),this.ruby.pid||(console.error(`Can not find ${this.bin} in your PATH`),process.exit(1)),this.isMounted=!0};onComplete=e=>{}};var rn=["@invoke","@url"],P=class t{handlers=[];static ip="127.0.0.1";debug=!1;port=0;constructor(e){this.debug=e.debug}static parseNameFromUrl(e){let n=e.split("/"),r=rn.includes(n[1])?n[2]:n[3];if(r=decodeURIComponent(r),r.includes(":function:")){let s=r.split(":function:");r=s[s.length-1]}if(r.includes(":")){let s=r.split(":");s.length==2&&(r=s[0])}return r}getHandlerByName(e){if(!e)return;let n=t.parseNameFromUrl(e);return this.handlers.find(r=>r.name==n)}addHandler(e){let n=this.handlers.findIndex(r=>r.name==e.name&&r.esOutputPath==e.esOutputPath);if(n==-1)this.handlers.push(e),this.#e("POST",`/2015-03-31/functions/${e.name}/invocations`),e.url&&this.#e("ANY",`/@url/${e.name}`,"34");else{let r=this.handlers[n].runtime;r.startsWith("n")?(this.handlers[n].clear(),this.handlers[n]=e):r=="llrt"&&this.handlers[n].clear()}}#e(e,n,r="90"){let s=`${e} http://localhost:${this.port}${n}`;console.log(`\x1B[${r}m${s}\x1B[0m`)}};var oe;Qe&&(oe=Object.values(Qe()).reduce((t,e)=>(t.push(...e),t),[])?.filter(t=>!t.internal&&t.family==="IPv4").find(Boolean)?.address);var ln=an?.url()!=null;ln&&(console.warn("Lambdas timeout are disabled when a Debugger is attached"),C.ENABLE_TIMEOUT=!1);var cn={errors:[],warnings:[],outputFiles:[],metafile:{inputs:{},outputs:{}},mangleCache:{}},ae=class extends P{#e;runtimeConfig={};#t;sco=[];aws;llrt;customOfflineRequests=[];customBuildCallback;onReady;stop(e){this.#e.close(e)}constructor(e,n={debug:!1}){super(n),v.setDebug(n.debug),this.aws=e.aws,this.llrt=e.llrt,e.llrt&&(L.llrtBoostrapPath=e.llrt.boostrapPath,e.llrt.environment&&(L.llrtEnvs=e.llrt.environment)),this.sco=[],this.#e=on.createServer({maxHeaderSize:105536},this.#r.bind(this)),this.#e.on("connection",s=>{s.on("close",()=>{let i=this.sco.findIndex(o=>o==s);i!=-1&&this.sco.splice(i,1)}),this.sco.push(s)});let r=sn();x.accountId=Buffer.from(r).toString("hex").slice(0,16),x.apiId=Buffer.from(r).toString("ascii").slice(0,10),x.port=this.port}setPort(e){this.port=e,x.port=e}listen(e=0,n){if(isNaN(e))throw Error("port should be a number");this.#e.once("error",async r=>{r.code==="EADDRINUSE"?(v.RED(r.message),process.exit(1)):console.log(r)}),this.#e.listen(e,async()=>{let{port:r,address:s}=this.#e.address();this.setPort(r),oe&&(P.ip=oe),typeof n=="function"&&await n(r,oe);try{await this.onReady?.(r,P.ip),await _e(this.handlers,this.aws)}catch(i){console.error(i)}})}#n(e,n){n=n.endsWith("/")?n:`${n}/`;let r=this.customOfflineRequests.find(s=>{let i=!1,o=!0;return typeof s.filter=="string"?(s.filter.endsWith("/")||(s.filter+="/"),i=s.filter==n):s.filter instanceof RegExp&&(i=s.filter.test(n)),typeof s.method=="string"&&s.method.toUpperCase()!="ANY"?o=s.method.toUpperCase()==e:Array.isArray(s.method)&&(s.method.findIndex(c=>c.toUpperCase()=="ANY")!==-1||(o=s.method.findIndex(c=>c.toUpperCase()==e)!==-1)),i&&o});if(r)return r.callback}async#r(e,n){let{url:r,method:s}=e,i=new URL(r,x.dummyHost),o=this.#n(s,i.pathname);if(o)try{await o(e,n)}catch{n.writableFinished||n.end("Internal Server Error")}else{e.on("error",c=>{console.error(c.stack)});let a=()=>{n.setHeader("Content-Type","text/html"),n.statusCode=404,n.end(ke)};this.#t?this.#t(e,n,a):a()}}fakeRebuildEmitter=async()=>{if(this.customBuildCallback)try{await this.customBuildCallback(cn,!0)}catch(e){console.log(e)}console.log(`\x1B[32m${new Date().toLocaleString()} \u{1F504}\u2705 Rebuild\x1B[0m`)};async load(e){for(let n of e){switch(n.runtime.charAt(0)){case"n":n.runner=new ne(n);break;case"p":n.runner=new re(n,this.fakeRebuildEmitter);break;case"r":n.runner=new ie(n,this.fakeRebuildEmitter);break;case"l":n.runner=new L(n,this.fakeRebuildEmitter);break;case"c":n.runner=new j(n,this.fakeRebuildEmitter);break;default:n.runner=new te(n.runtime);break}let s=new C(n);this.addHandler(s)}}};import{rm as mn}from"node:fs/promises";import D from"node:path";import{pathToFileURL as un}from"node:url";import fn from"esbuild";var pn="0.0.25";function Ke(t){let e=new Set;t.plugins&&(t.plugins=t.plugins.filter((r,s)=>typeof r!="object"||!r||!("name"in r)?!1:((!r.name||!r.name.length||typeof r.name!="string")&&(r.name=`plugin-${s}`,console.warn(`No Plugin name provided at index ${s}`)),e.has(r.name)?r.name=r.name+s:e.add(r.name),!0)));async function n({stop:r,lambdas:s,region:i,esbuild:o,getServices:a,setService:c,addLambda:l,log:d,setEndpoint:m,getEndpoint:f,getAwsProviderDefaults:p,setAwsProviderDefaults:g}){let y={build:{esbuild:t?.build?.esbuild??{},shimRequire:t?.build?.shimRequire,optimizeBuild:t?.build?.optimizeBuild},server:{port:t.server?.port,setEndpointEnvVar:t.server?.setEndpointEnvVar},onKill:[],llrt:t.llrt};if(t.defaults&&typeof t.defaults=="object"&&!Array.isArray(t.defaults)&&g(t.defaults),t.functions&&typeof t.functions=="object"&&!Array.isArray(t.functions))for(let[S,u]of Object.entries(t.functions))l(S,u);t.services&&(t.services.sqs&&c("sqs",t.services.sqs),t.services.sns&&c("sns",t.services.sns),t.services.dynamodb&&c("dynamodb",t.services.dynamodb));let h={stop:r,lambdas:s,region:i,esbuild:o,options:t,config:y,getServices:a,setService:c,addLambda:l,log:d,setEndpoint:m,getEndpoint:f,getAwsProviderDefaults:p};if(t.plugins){y.server.onReady=async(u,b)=>{for(let w of t.plugins)if(w.server?.onReady)try{await w.server.onReady.call(h,u,b)}catch(R){d.RED(w.name),console.error(R)}},y.buildCallback=async(u,b)=>{for(let w of t.plugins)if(w.buildCallback)try{await w.buildCallback.call(h,u,b)}catch(R){d.RED(w.name),console.error(R),b||process.exit(1)}};let S=t.plugins.reduce((u,b)=>(b.server?.request?.length&&u.push(...b.server.request),u),[]);S?.length&&(y.server.request=S.map(u=>(u.callback=u.callback.bind(h),u)));for(let u of t.plugins)if(u.onKill&&y.onKill.push(u.onKill.bind(h)),u.onInit)try{await u.onInit.call(h)}catch(b){throw d.RED(u.name),b}}return y}return n.plugins=t.plugins??[],n}var hn=["js","mjs","cjs","ts","cts","mts"],yn=async t=>{let e=D.dirname(D.toNamespacedPath(t)),n=D.basename(t,D.extname(t)),r=D.join(e,`__${n}.mjs`);await fn.build({outfile:r,entryPoints:[t],bundle:!0,packages:"external",platform:"node",format:"esm",target:`node${process.versions.node.split(".")[0]}`,minify:!0,sourcemap:"inline",sourcesContent:!0});try{return await import(un(r).href)}catch(s){throw s}finally{await mn(r)}},Ge=async t=>{if(t){if(typeof t=="string"){let e=D.posix.parse(t),n=D.posix.join(e.dir,e.name),r=e.ext.slice(1),s=D.posix.resolve(n);hn.includes(r)&&(s+=`.${r}`);let i;try{i=await yn(s)}catch(o){v.YELLOW(`Can not read 'defineConfig' from ${t}`),console.error(o),process.exit(1)}return{exportedFunc:i,configObjectName:r,configPath:s}}if(typeof t=="object"&&!Array.isArray(t))return{configObjectName:"__inline_config__",configPath:"inline define config",exportedFunc:Ke(t)}}};var gn=t=>{let e=t.split(";");return e.findIndex(r=>r.trim().toLowerCase().startsWith("path="))==-1&&e.push("Path=/"),e.join(";")},me=(t,e,n)=>{let r={};if(t&&Object.entries(t).forEach(([s,i])=>{r[s.toLowerCase()]=Array.isArray(i)?`[${i.join(", ")}]`:i}),n)for(let[s,i]of Object.entries(n))r[s]=i;if(!Array.isArray(e))return r;if(!e.every(s=>typeof s=="string")){let s=new Error("Wrong 'cookies'. must be string[]",{cause:e}),i={"Content-Type":r["content-type"]??"application/json","x-amzn-ErrorType":"InternalFailure",...n};throw r["set-cookie"]&&(i["set-cookie"]=r["set-cookie"]),s.headers=i,s}return e=e.map(gn),r["set-cookie"]=r["set-cookie"]?[r["set-cookie"],...e]:e,r};import{randomUUID as Ye}from"node:crypto";var le=class t extends x{res;mockEvent;payload;constructor({res:e,req:n,body:r,mockEvent:s,multiValueHeaders:i,isBase64Encoded:o,lambdaName:a,parsedURL:c,requestId:l}){super(),this.res=e,this.mockEvent=s,this.payload=s.version==1?t.createApgV1Event({req:n,mockEvent:s,parsedURL:c,lambdaName:a,multiValueHeaders:i,isBase64Encoded:o,requestId:l,body:r}):t.createApgV2Event({req:n,mockEvent:s,parsedURL:c,requestId:l,isBase64Encoded:o,body:r})}static skipHeaders=["connection","content"];static createApgV2Event=({req:e,mockEvent:n,parsedURL:r,requestId:s,isBase64Encoded:i,body:o})=>{let{method:a,headers:c}=e,l=t.getPathParameters(n,r),d,m=n.methods.find(b=>b==a)??"ANY",f={},p="";for(let b of Array.from(new Set(r.searchParams.keys()))){let w=r.searchParams.getAll(b);p+=`&${w.map(R=>encodeURI(`${b}=${R}`)).join("&")}`,f[b]=w.join(",")}p&&(p=p.slice(1));let g=n.paths[0]=="/*"?"$default":`${m} ${r.pathname}`,y=new Date,h="127.0.0.1",S=c.host?.startsWith("localhost")?h:c.host?c.host.split(":")[0]:h,u={version:"2.0",routeKey:g,rawPath:r.pathname,rawQueryString:p,headers:t.getCustomHeaders(e,n),requestContext:{accountId:String(t.accountId),apiId:t.apiId,domainName:`localhost:${t.port}`,domainPrefix:"localhost",http:{method:a,path:r.pathname,protocol:"HTTP/1.1",sourceIp:S,userAgent:c["user-agent"]??""},requestId:s,routeKey:g,stage:"$default",time:y.toISOString(),timeEpoch:y.getTime()}};return o?(u.body=o,u.isBase64Encoded=i):u.isBase64Encoded=!1,Object.keys(f).length&&(u.queryStringParameters=f),Object.keys(l).length&&(u.pathParameters=l),c.cookie&&(u.cookies=c.cookie.split("; ")),d=u,d.headers["x-mock-type"]&&delete d.headers["x-mock-type"],d};static createApgV1Event=({req:e,mockEvent:n,parsedURL:r,lambdaName:s,isBase64Encoded:i,requestId:o,body:a})=>{let{method:c}=e,l={};n.proxy=="httpApi"&&(l.version="1.0");let d=n.paths[0];l.resource=d,l.path=r.pathname,l.httpMethod=c;let{headers:m,multiValueHeaders:f,apiKey:p}=t.getApiGV1Headers(e,n);l.headers=m,l.multiValueHeaders=f;let g=String(e.socket.remoteAddress),y=Object.fromEntries(r.searchParams);l.queryStringParameters=Object.keys(y).length?y:null;let h=t.getMultiValueQueryStringParameters(r.searchParams);l.multiValueQueryStringParameters=Object.keys(h).length?h:null;let S=new Date,u={accountId:String(t.accountId),apiId:t.apiId,domainName:`localhost:${t.port}`,domainPrefix:"localhost",extendedRequestId:"fake-id",httpMethod:c,identity:{accessKey:null,accountId:null,caller:null,cognitoAuthenticationProvider:null,cognitoAuthenticationType:null,cognitoIdentityId:null,cognitoIdentityPoolId:null,principalOrgId:null,sourceIp:g,user:null,userAgent:e.headers["user-agent"],userArn:null},path:r.pathname,protocol:"HTTP/1.1",requestId:o,requestTime:S.toISOString(),requestTimeEpoch:S.getTime(),resourceId:"exhmtv",resourcePath:d};n.proxy=="httpApi"?(u.identity.cognitoAmr=null,u.stage="$default"):(u.stage="dev",n.private&&(u.identity.apiKey=p,u.identity.apiKeyId="abcdefghjk")),l.requestContext=u;let b=t.getPathParameters(n,r);return l.pathParameters=Object.keys(b).length?b:null,l.stageVariables=null,l.body=a??null,l.isBase64Encoded=a?i:!1,l};returnError=e=>{if(this.res.writableFinished)return!0;let n=500,r=t.httpErrMsg;e&&t.isEndpointTimeoutError(e.errorMessage)&&(this.mockEvent.proxy=="httpApi"?(n=503,r=t.unavailable):(n=504,r=t.apgTimeoutMsg));let s=[["Date",new Date().toUTCString()],["Content-Type",t.contentType.json],["Content-Length",String(r.length)],t.keepAlive,["Apigw-Requestid","ETuSEj-PiGYEJdQ="]];return this.res.shouldKeepAlive=!1,this.res.writeHead(n,s),this.res.end(r)};#e=e=>{let n="",r=typeof e;if(r=="string"||r=="number"||r=="boolean")n=String(e);else if(e===null)n="";else throw new Error("");return n};sendV1Response=e=>{let n=[["Date",new Date().toUTCString()],["Apigw-Requestid",Buffer.from(Ye()).toString("base64").slice(0,16)],t.keepAlive],r=200;if(!e||isNaN(e.statusCode))throw v.RED(`Valid 'http' response payload must be an object which includes a valid 'statusCode'.
10
+ Received:`),console.log(e),new Error;r=e.statusCode,e.headers&&typeof e.headers=="object"&&!Array.isArray(e.headers)&&Object.entries(e.headers).forEach(([l,d])=>{let m=t.normalizeHeaderKey(l),f=this.#e(d);n.push([m,f])}),e.multiValueHeaders&&typeof e.multiValueHeaders=="object"&&!Array.isArray(e.multiValueHeaders)&&Object.entries(e.multiValueHeaders).forEach(([l,d])=>{let m=t.normalizeHeaderKey(l);if(!Array.isArray(d))throw new Error;d.map(p=>this.#e(p)).forEach(p=>{n.push([m,p])})});let s=e.body;if(e.isBase64Encoded&&s){if(typeof s!="string")throw new Error;let l=Buffer.from(s,"base64").toString();if(Buffer.from(l).toString("base64")!=s)throw v.RED("response body is not properly base64 encoded"),new Error;s=l}n.findIndex(l=>l[0].toLowerCase()=="content-type")==-1&&n.push(["Content-Type",t.contentType.json]);let o=n.findIndex(l=>l[0].toLowerCase()=="content-length");o!=-1&&n.splice(o,1);let a=typeof s;a=="number"||a=="boolean"?s=String(s):s&&a!="string"&&v.YELLOW("API Gateway payload v1 return body must be typeof string, number or boolean ");let c=r==204?"0":s?String(Buffer.from(s).byteLength):"0";n.push(["Content-Length",c]),this.res.shouldKeepAlive=!1,this.res.writeHead(r,n),this.res.end(s)};sendV2Response=e=>{this.res.setHeader("Apigw-Requestid",Buffer.from(Ye()).toString("base64").slice(0,16)),this.res.setHeader("Date",new Date().toUTCString()),e?(typeof e.headers=="object"&&!Array.isArray(e.headers)&&Object.keys(e.headers).filter(s=>s!=="Apigw-Requestid"&&s!=="Date").forEach(s=>{this.res.setHeader(s,e.headers[s])}),e.statusCode?(this.res.statusCode=e.statusCode,e.cookies?.length&&this.res.setHeader("Set-Cookie",e.cookies)):this.res.statusCode=200):this.res.statusCode=200;let n="";if(!e)return this.res.end();if(typeof e=="object"&&typeof e.body=="string"&&(n=e.body,e.isBase64Encoded)){let r=Buffer.from(n,"base64").toString();if(Buffer.from(r).toString("base64")!=n)throw v.RED("response body is not properly base64 encoded"),new Error;n=r}typeof e=="string"?(this.res.setHeader("Content-Type",t.contentType.json),n=e):typeof e=="object"&&!e.statusCode&&(this.res.setHeader("Content-Type",t.contentType.json),n=JSON.stringify(e)),this.res.end(n)};sendResponse=e=>{if(!this.res.writableFinished)return this.mockEvent.version==1?this.sendV1Response(e):this.sendV2Response(e)}};var bn=(t,e)=>{let n=e.url.stream?t:void 0;if(n){let r=!1,s=t.write.bind(t),i=t.setHeader.bind(t),o,a,c=m=>{a=a?Buffer.concat([a,m]):m},l=()=>{if(a){let m=Ne(a),f=m.statusCode??200;try{let p=me(m.headers,m.cookies);t.writeHead(f,p)}catch(p){t.writeHead(500,p.headers),t.end?.(x.amzMsgNull),delete p.headers}}else t.writeHead(200)};n.setHeader=(m,f)=>{if(m.toLowerCase()=="content-type"){if(f=="application/vnd.awslambda.http-integration-response")return r=!0,i("Content-Type",x.contentType.json);o=f}return i(m,f)};let d=!1;return n.write=(m,f,p)=>{if(n.headersSent)return s(m,f,p);if(d)try{let g=A.codec.decode(m),y=JSON.parse(g);if(Array.isArray(y))throw new Error("Invalid stream response");return y&&typeof y=="object"?(l(),s(m,f,p)):(t.writeHead(200,{"Content-Type":x.contentType.octet}),t.end())}catch(g){let y=new Error(`When using HttpResponseStream first chunk of .write() must be valid JSON and not be Array. Number and null will respones with 200.
11
+ '${e.name}'`);return y.cause=g.message,console.error(y),X(t)}else if(r)De(m)?d=!0:c(m);else{if(o==x.contentType.json)try{let y=A.codec.decode(m),h=JSON.parse(y);if(h===null||typeof h=="number")throw new Error(y)}catch(y){let h=new Error(`When 'Content-Type' is 'application/json' first chunk of .write() must be parsable JSON and not be null or number.
12
+ '${e.name}'`);return h.cause=y.message,console.error(h),X(t)}let g={"Content-Type":o??x.contentType.octet};return n.writeHead(200,g),s(m,f,p)}},n}},vn=(t,e,n,r)=>{let s=Q(t),i=s?t.getParsedResponse():t,o,a=!1;if(i&&typeof i=="object"&&i.statusCode){let c=isNaN(i.statusCode),l=c?500:i.statusCode;if(a=!c&&(i.isBase64Encoded==!0||i.isBase64Encoded=="true"),i.headers||i.cookies)try{let d=me(i.headers,i.cookies,r);e.writeHead(l,d)}catch(d){return e.writeHead(500,d.headers),delete d.headers,console.error(d),e.end(x.amzMsgNull)}else e.writeHead(l,{"Content-Type":x.contentType.json,...r});n?o=i:(typeof i.body<"u"&&(o=i.body),e.headersSent||e.setHeader("Content-Type",s?x.contentType.octet:x.contentType.json))}else e.writeHead(200,{"Content-Type":x.contentType.json,...r}),o=i;!e.headersSent&&!n&&s&&e.setHeader("Content-Type",x.contentType.octet),n?o instanceof Uint8Array?e.end(o):e.end(JSON.stringify(o)):((typeof o=="number"||typeof o=="boolean"||o==null||o instanceof Object)&&(o=JSON.stringify(o)),o&&a&&(o=Buffer.from(o,"base64")),e.end(o))};function Sn(t,e){let n=t["access-control-request-method"];return e=="OPTIONS"&&t.origin&&n&&["GET","HEAD","POST","PUT","DELETE","PATCH"].includes(n)}function Xe(t,e){let n=e.origin;return n&&t.allowOrigins.find(s=>s=="*"||s=="http://*"||s=="https://*")?!0:!!t.allowOrigins.find(s=>s==n)}function xn(t,e){if(!t.allowMethods?.length)return!1;if(t.allowMethods.find(s=>s=="*"))return!0;let r=e["access-control-request-method"];return!!t.allowMethods.find(s=>s==r)}function wn(t,e){if(!xn(t,e)||!Xe(t,e))return!1;let n=e["access-control-request-headers"]?e["access-control-request-headers"].split(",").filter(Boolean):[];return n.length?t.allowHeaders?.length?n.every(r=>t.allowHeaders.find(s=>s.toLowerCase()==r.toLowerCase())):!1:!0}var Ze=t=>({filter:/^\/@url\//,callback:async(e,n)=>{let{url:r,method:s,headers:i}=e;if(Oe(n,s))return;let o=new URL(r,x.dummyHost),a=H(n),c=P.parseNameFromUrl(o.pathname),l=t.handlers.find(h=>h.name==c);if(!l?.url)return n.statusCode=404,n.end("Not Found");let d;if(l.url.cors){if(Sn(i,s)){let S=wn(l.url.cors,i),u={"Content-Type":x.contentType.json};return S&&(u["access-control-allow-origin"]=i.origin,l.url.cors.allowMethods.find(b=>b=="*")?u["access-control-allow-methods"]=i["access-control-request-method"]:u["access-control-allow-methods"]=l.url.cors.allowMethods.join(","),l.url.cors.allowHeaders?.length&&(u["access-control-allow-headers"]=l.url.cors.allowHeaders.join(",")),typeof l.url.cors.maxAge=="number"&&l.url.cors.maxAge>-1&&(u["access-control-max-age"]=`${l.url.cors.maxAge}`),l.url.cors.allowCredentials&&(u["access-control-allow-credentials"]="true")),n.writeHead(200,u),n.end()}Xe(l.url.cors,i)&&(d={"access-control-allow-origin":i.origin},l.url.cors.exposeHeaders?.length&&(d["access-control-expose-headers"]=l.url.cors.exposeHeaders.join(",")),l.url.cors.allowCredentials&&(d["access-control-allow-credentials"]="true"))}let m=x.getIsBase64Encoded(i),f=await N(e,m),p=le.createApgV2Event({req:e,mockEvent:l.url,parsedURL:o,requestId:a,body:f,isBase64Encoded:m}),g=`/@url/${l.name}`,y=o.pathname.slice(g.length);y||(y="/"),p.requestContext.accountId="anonymous",p.rawPath=y,p.requestContext.http.path=y;try{let h=bn(n,l),S=await l.invoke(p,l.url,void 0,h);if(!S)return n.end();vn(S,n,h,d)}catch(h){console.error(h),X(n,d)}}});var et=t=>({filter:/(^\/2015-03-31\/functions\/.*\/invocations)|(^\/@invoke\/)/,callback:async(e,n)=>{let{url:r,headers:s}=e,i=new URL(r,"http://localhost:3003"),o=P.parseNameFromUrl(i.pathname),a=t.handlers.find(h=>h.name==o),c=H(n);if(n.setHeader("Content-Type","application/json"),e.on("error",h=>{n.statusCode=502,n.end(JSON.stringify(h))}),!a){let{region:h,accountId:S}=t.aws;return n.statusCode=404,n.setHeader("x-amzn-errortype","ResourceNotFoundException"),n.end(Y(o,h,S))}let l=s["x-amz-invocation-type"],d=B(s["x-amz-client-context"]);if(d instanceof Error)return n.setHeader("x-amzn-errortype","InvalidRequestContentException"),n.statusCode=400,n.end(G);let m=l=="DryRun"?204:l=="Event"?202:200,f=await N(e),p=J(f);if(n.setHeader("X-Amzn-Trace-Id","root=1-xxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx;sampled=0"),p instanceof Error)return n.statusCode=400,n.setHeader("x-amzn-errortype","InvalidRequestContentException"),n.end(K(p.message));n.setHeader("X-Amz-Executed-Version","$LATEST");let g=new Date,y={};n.statusCode=m,m!==200&&n.end(),m==202&&(y.kind="async");try{let h=await a.invoke(p,y,d);if(m==200){if(typeof h>"u"){n.end();return}let S=Q(h),u=S?h.buffer:h;S?u=A.codec.decode(u):typeof u!="string"&&(u=JSON.stringify(u)),n.end(u)}}catch(h){n.writableFinished||(n.setHeader("X-Amz-Function-Error",h.errorType??h.message??""),n.statusCode=200,n.end(JSON.stringify(h)))}}});import{randomUUID as tt}from"node:crypto";import{setTimeout as In}from"node:timers/promises";var nt=t=>({filter:"/2015-03-31/functions",method:"POST",async callback(e,n){let r=await N(e),s=JSON.parse(r),{FunctionName:i,Handler:o,Environment:a,Runtime:c,Timeout:l,MemorySize:d}=s;t.addLambda(i,{handler:o,environment:a?.Variables,runtime:c,timeout:l,memorySize:d}),t.isDynamicBuild=!0,t.setEsBuildConfig(),await t.buildContext.dispose(),await t.buildAndWatch(),await In(100),n.statusCode=201,n.end(r)}}),rt=t=>({filter:/\/2015-03-31\/functions\/*/,method:"GET",async callback(e,n){let{url:r}=e,i=new URL(r,"http://localhost:3003").pathname.slice(22),o=t.getLambdaByName(i);if(!o){n.statusCode=404,n.end();return}let a={Code:{RepositoryType:"S3",Location:"https://s3.com/snapshots/1234543"},Tags:{},Configuration:{Architectures:["arm64"],CodeSha256:"WrLckXVmmfsSPvP/15FqPi9Nt9qQBaspP6RV3T137K4=",SigningJobArn:"",FunctionArn:`arn:aws:lambda:${t.aws.region}:${t.aws.accountId}:function:${i}`,FunctionName:i,Handler:o.handlerPath,Timeout:o.timeout,Runtime:o.runtime,MemorySize:o.memorySize,Environment:{Variables:st(o.environment)},State:"Active",LastUpdateStatus:"Successful",LastModified:new Date().toISOString(),Version:"$LATEST",Role:`arn:aws:iam::${t.aws.accountId}:role/fake-role-name`,RevisionId:tt(),PackageType:"Zip",Description:"",EphemeralStorage:{Size:512},TracingConfig:{Mode:"PassThrough"},VpcConfig:{Ipv6AllowedForDualStack:!1,VpcId:"",SecurityGroupIds:[],SubnetIds:[]},CodeSize:5867,SnapStart:{OptimizationStatus:"Off",ApplyOn:"None"},LoggingConfig:{LogFormat:"Text",LogGroup:`/aws/lambda/${i}`}}};n.end(JSON.stringify(a))}}),En=["AWS_EXECUTION_ENV","AWS_LAMBDA_FUNCTION_VERSION","AWS_LAMBDA_FUNCTION_NAME","_HANDLER","IS_OFFLINE","IS_LOCAL","AWS_SAM_LOCAL","AWS_LAMBDA_FUNCTION_MEMORY_SIZE"];function st(t){let e={};for(let[n,r]of Object.entries(t))En.includes(n)||(e[n]=String(r));return e}var it=t=>({method:"GET",filter:/\/2015-03-31\/functions\/.*\/versions/,async callback(e,n){let{url:r}=e,i=new URL(r,"http://localhost:3003").pathname.slice(22);i=i.slice(0,i.indexOf("/"));let o=t.getLambdaByName(i);if(!o){n.statusCode=404,n.end();return}let a={Versions:[{Architectures:["arm64"],CodeSha256:"WrLckXVmmfsSPvP/15FqPi9Nt9qQBaspP6RV3T137K4=",SigningJobArn:"",FunctionArn:`arn:aws:lambda:${t.aws.region}:${t.aws.accountId}:function:${i}`,FunctionName:i,Handler:o.handlerPath,Timeout:o.timeout,Runtime:o.runtime,MemorySize:o.memorySize,Environment:{Variables:st(o.environment)},State:"Active",LastUpdateStatus:"Successful",LastModified:new Date().toISOString(),Version:"$LATEST",Role:`arn:aws:iam::${t.aws.accountId}:role/fake-role-name`,RevisionId:tt(),PackageType:"Zip",Description:"",EphemeralStorage:{Size:512},TracingConfig:{Mode:"PassThrough"},VpcConfig:{Ipv6AllowedForDualStack:!1,VpcId:"",SecurityGroupIds:[],SubnetIds:[]},CodeSize:5867,SnapStart:{OptimizationStatus:"Off",ApplyOn:"None"},LoggingConfig:{LogFormat:"Text",LogGroup:`/aws/lambda/${i}`}}]};n.end(JSON.stringify(a))}}),ot=t=>({method:"GET",filter:/\/2020-06-30\/functions\/.*\/code-signing-config/,async callback(e,n){let{url:r}=e,i=new URL(r,"http://localhost:3003").pathname.slice(22);if(i=i.slice(0,i.indexOf("/")),!t.getLambdaByName(i)){n.statusCode=404,n.end();return}let a={CodeSigningConfigArn:"",FunctionName:i};n.end(JSON.stringify(a))}});import{EventStreamCodec as An}from"@smithy/eventstream-codec";var Pn=(t,e)=>{let n=Buffer.from(t,e);return new Uint8Array(n.buffer,n.byteOffset,n.byteLength/Uint8Array.BYTES_PER_ELEMENT)},kn=t=>Buffer.from(t,t.byteOffset,t.byteLength).toString("utf8"),ue=new An(kn,Pn),ce=class t{res;static complete=Buffer.from([0,0,0,102,0,0,0,84,31,86,200,105,11,58,101,118,101,110,116,45,116,121,112,101,7,0,14,73,110,118,111,107,101,67,111,109,112,108,101,116,101,13,58,99,111,110,116,101,110,116,45,116,121,112,101,7,0,16,97,112,112,108,105,99,97,116,105,111,110,47,106,115,111,110,13,58,109,101,115,115,97,103,101,45,116,121,112,101,7,0,5,101,118,101,110,116,123,125,112,6,212,103]);constructor(e){this.res=e}write(e,n,r){this.res.write(ue.encode({headers:this.#e("PayloadChunk",x.contentType.octet),body:e}),n,r)}end(e){e?this.write(e,"utf8",()=>{this.res.end(t.complete)}):this.res.end(t.complete)}setHeader(e,n){e=="Content-Type"&&this.res.setHeader("Content-Type",n)}destroy(){this.res.destroy()}endWithError(e){let n={ErrorCode:e.errorType,ErrorDetails:JSON.stringify(e)},r=Array.from(Buffer.from(JSON.stringify(n)).values());this.res.end(ue.encode({headers:this.#e("InvokeComplete",x.contentType.json),body:new Uint8Array(r)}))}endWithJson(e){let n=Array.from(Buffer.from(JSON.stringify(e)).values());this.res.write(ue.encode({headers:this.#e("PayloadChunk",x.contentType.octet),body:new Uint8Array(n)}),()=>{this.res.end(t.complete)})}#e(e,n,r="event"){return{":event-type":{type:"string",value:e},":content-type":{type:"string",value:n},":message-type":{type:"string",value:r}}}};var at=t=>({filter:/^\/2021-11-15\/functions\//,callback:async(e,n)=>{let{url:r,headers:s}=e,i=new URL(r,"http://localhost:3003"),o=H(n),a=P.parseNameFromUrl(i.pathname),c=t.handlers.find(p=>p.name==a),l=await N(e),d=J(l);if(n.setHeader("X-Amzn-Trace-Id","root=1-xxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx;sampled=0"),d instanceof Error)return n.statusCode=400,n.setHeader("x-amzn-errortype","InvalidRequestContentException"),n.end(K(d.message));let m=B(s["x-amz-client-context"]);if(m instanceof Error)return n.setHeader("x-amzn-errortype","InvalidRequestContentException"),n.statusCode=400,n.end(G);let f=new ce(n);if(c){let p=c.url?.stream??{};try{let g=await c.invoke(d,p,m,f);g&&f.endWithJson(g)}catch(g){n.writableFinished||f.endWithError(g)}}else{let{region:p,accountId:g}=t.aws;n.statusCode=404,n.end(Y(a,p,g))}}});var lt=t=>[nt(t),it(t),ot(t),et(t),at(t),Ze(t),rt(t)];var fe=process.cwd(),On=3,Nn=1024,Dn={IS_OFFLINE:!0,IS_LOCAL:!0,AWS_SAM_LOCAL:!0},Tn=fe.split(O.sep)[0],Mn=new RegExp(`^.*:${Tn}`),qn=t=>Mn.test(t);process.title="node (exlo)";var de=class extends ae{#e;options;config;esBuildConfig;buildContext={};customEsBuildConfig;optimizeBuild=!1;nodeVersion=!1;onKill=[];shimRequire=!1;port=0;onceServerReady=[];isDynamicBuild=!1;endpoints={};setLambdaEndpointEnvVar=!0;constructor(e,n){super(e,{debug:typeof n.debug=="boolean"?n.debug:!1}),this.#e=[],this.options=n,this.options.customEsBuildConfig&&(this.customEsBuildConfig=this.options.customEsBuildConfig),typeof this.options.config?.server?.setEndpointEnvVar=="boolean"&&(this.setLambdaEndpointEnvVar=this.options.config.server.setEndpointEnvVar),this.options.config&&(typeof this.options.config=="string"||typeof this.options.config=="object"&&!Array.isArray(this.options.config))&&(this.config=this.options.config),typeof this.options.optimizeBuild=="boolean"&&(this.optimizeBuild=this.options.optimizeBuild),typeof this.options.shimRequire=="boolean"&&(this.shimRequire=this.options.shimRequire),this.aws.runtime?.startsWith("node")?this.nodeVersion=this.aws.runtime?.replace(/[^0-9]/g,""):this.nodeVersion="20",v.BR_BLUE("Starting exlo...")}async start(){this.#s(),this.#e=this.#r(),await this.#o(),this.setEsBuildConfig(),await this.buildAndWatch()}setEsBuildConfig(){let n={sourcemap:!0,minify:!1,entryPoints:this.#e.filter(r=>r.runtime.startsWith("n")||r.runtime=="llrt").map(r=>r.esEntryPoint),outdir:O.join(fe,".exlo","build"),metafile:!0,bundle:!0,platform:"node",target:"node20",format:"cjs",outbase:"src",plugins:[],external:["esbuild","llrt","llrt:*"],dropLabels:[]};if(typeof process.env.NODE_ENV=="string"&&(n.define={"process.env.NODE_ENV":`"${process.env.NODE_ENV}"`}),typeof this.nodeVersion=="string"&&!isNaN(Number(this.nodeVersion))){Number(process.versions.node.slice(0,2))<Number(this.nodeVersion)&&v.RED(`You are running on NodeJS ${process.version} which is lower than defined '${this.nodeVersion}'.`),n.target=`node${this.nodeVersion}`;let r=()=>this.sco;n.plugins?.push(ve({nodeVersion:Number(this.nodeVersion),shimRequire:this.shimRequire,optimizeBuild:this.optimizeBuild,buildCallback:this.buildCallback,getSockets:r}))}this.customEsBuildConfig&&(n=Se(n,this.customEsBuildConfig)),this.esBuildConfig=n}async buildAndWatch(){this.buildContext=await ct.context(this.esBuildConfig),await this.buildContext.watch()}buildCallback=async(e,n)=>{if(n||this.isDynamicBuild)await this.#t(e);else{let{outputs:r}=e.metafile;if(this.#i(r),this.customBuildCallback)try{await this.customBuildCallback(e,!1)}catch(o){console.log(o)}this.#a();let s=this,i=await new Promise(o=>{this.listen(this.port,async(a,c)=>{let l=`http://localhost:${a}`;v.PINK(`Lambda endpoint: ${l}`),this.endpoints.lambda=l,this.setLambdaEndpointEnvVar&&(this.runtimeConfig.environment.AWS_ENDPOINT_URL_LAMBDA=l,this.aws.environment.AWS_ENDPOINT_URL_LAMBDA=l),await s.load(s.#e);for(let d of s.#e)d.setEnv("LOCAL_PORT",a),d.setEnv("AWS_LAMBDA_RUNTIME_API",`127.0.0.1:${a}`),this.setLambdaEndpointEnvVar&&d.setEnv("AWS_ENDPOINT_URL_LAMBDA",l);o({url:l,port:a})})});this.onceServerReady.forEach(o=>{o(i)})}};async#t(e){if(e?.errors?.length)v.RED("Build failed:"),console.error(e.errors);else{this.#i(e.metafile.outputs);try{await this.load(this.#e),this.customBuildCallback&&await this.customBuildCallback(e,!0)}catch(n){console.error(n)}console.log(`\x1B[32m${new Date().toLocaleString()} \u{1F504}\u2705 Rebuild\x1B[0m`)}}#n(e){let n=this.aws,r=n.runtime,s=this.runtimeConfig.environment.AWS_REGION??this.runtimeConfig.environment.REGION,o=n.functions[e],a=o.handler,c=O.extname(a),l=c.slice(1),d=O.resolve(a.replace(c,"")),m=n.getFunction(e),f=m.runtime??r,p={name:e,runtime:m.runtime??r,handlerPath:a,handlerName:l,esEntryPoint:d,memorySize:o.memorySize??this.runtimeConfig.memorySize??Nn,timeout:o.timeout??this.runtimeConfig.timeout??On,sqs:[],ddb:[],environment:{AWS_EXECUTION_ENV:`AWS_Lambda_${f}`,AWS_LAMBDA_FUNCTION_VERSION:"$LATEST",AWS_LAMBDA_FUNCTION_NAME:e,_HANDLER:O.basename(a),...this.runtimeConfig.environment,...o.environment,...Dn},invoke:async(g,y)=>{let h=this.getHandlerByName(`/@invoke/${e}`);if(h)return await h.invoke(g,y);v.RED(`'${e}' is not mounted yet.
13
+ Please invoke it after the initial build is completed.`)},invokeSub:[],invokeSuccessSub:[],invokeErrorSub:[],setEnv:(g,y)=>{this.setEnv(e,g,y)},shutdown:async()=>{let g=this.getHandlerByName(`/@invoke/${e}`);g&&await g.shutdown()}};if(p.onError=z(o.onError),p.onError?.kind=="lambda"&&(v.YELLOW("Dead-Letter queue could only be a SNS or SQS service"),delete p.onError),o.destinations&&typeof o.destinations=="object"&&(p.onFailure=z(o.destinations.onFailure),p.onSuccess=z(o.destinations.onSuccess)),p.onInvoke=g=>{p.invokeSub.push(g)},p.onInvokeSuccess=g=>{p.invokeSuccessSub.push(g)},p.onInvokeError=g=>{p.invokeErrorSub.push(g)},process.env.NODE_ENV&&(p.environment.NODE_ENV=process.env.NODE_ENV),s&&(p.environment.AWS_REGION=s,p.environment.AWS_DEFAULT_REGION=s),p.environment.AWS_LAMBDA_FUNCTION_MEMORY_SIZE=p.memorySize,p.url=we(o),o.triggers?.length){let{sqs:g,ddb:y}=Ee({triggers:o.triggers});p.sqs=g,p.ddb=y}return p}#r(){let e=this.aws.functions;return Object.keys(e).reduce((s,i)=>{let o=this.#n(i);return s.push(o),s},[])}#i(e){let n=Object.keys(e).filter(r=>!r.endsWith(".map")&&e[r].entryPoint).map(r=>{let i=e[r].entryPoint,o="";qn(i)&&(i=i.split(":").slice(1).join(":")),O.isAbsolute(i)||(i=O.resolve(i));let a=i.lastIndexOf(".");return a!=-1&&(o=O.extname(i),i=i.slice(0,a)),{esOutputPath:O.join(fe,r),entryPoint:i,ext:o}});for(let r of this.#e){let s=n.find(i=>i?.entryPoint==r.esEntryPoint);s&&(r.esOutputPath=s.esOutputPath,r.entryPoint=`${s.entryPoint}${s.ext}`)}}#s(){let{environment:e,memorySize:n,timeout:r}=this.aws;this.runtimeConfig.memorySize=n,this.runtimeConfig.timeout=r,this.runtimeConfig.environment=e?{...e}:{};let s=Object.keys(process.env).filter(i=>i.startsWith("AWS_"));for(let i of s)this.runtimeConfig.environment[i]=process.env[i];"FORCE_COLOR"in this.runtimeConfig.environment||process.env.FORCE_COLOR?.toLowerCase()==="false"||process.env.FORCE_COLOR?.toLowerCase()==="no"||process.env.FORCE_COLOR==="0"||("COLORTERM"in process.env||process.env.TERM?.includes("256"))&&(this.runtimeConfig.environment.FORCE_COLOR="true")}setEnv(e,n,r){let s=this.#e.findIndex(i=>i.name==e);if(s>-1){this.#e[s].environment[n]=r;let i=this.aws.getFunction(e);i&&(i.environment||(i.environment={}),i.environment[n]=r)}else v.RED(`Can not set env variable '${n}' on '${e}'`)}addLambda(e,n){if(!n.triggers)n.triggers=[];else if(!Array.isArray(n.triggers))throw new Error("Lambda 'triggers' must be an array when defined.");this.#s(),this.aws.functions[e]=n;let r=this.#n(e);this.#e.push(r)}getLambdaByName(e){return this.#e.find(n=>n.name==e)}buildDefineConfigParam(){let e=this;return{stop:async r=>{await this.kill(r)},lambdas:this.#e,addLambda:(r,s)=>{this.addLambda(r,s)},esbuild:ct,getServices(){return{s3:e.aws.services.s3,sqs:e.aws.services.sqs,sns:e.aws.services.sns,dynamodb:e.aws.services.dynamodb}},setService(r,s){switch(r){case"s3":e.aws.services.s3=s;break;case"sns":e.aws.services.sns=s;break;case"sqs":e.aws.services.sqs=s;break;case"dynamodb":e.aws.services.dynamodb=s;break;default:break}},setEndpoint:(r,s,i)=>{if(this.endpoints[r]=s,typeof i=="string"){this.aws.environment[i]=s;for(let o of this.#e)this.setEnv(o.name,i,s)}},getEndpoint:r=>this.endpoints[r],getAwsProviderDefaults:()=>({accountId:e.aws.accountId,region:e.aws.region,runtime:e.aws.runtime,memorySize:e.aws.memorySize,timeout:e.aws.timeout,environment:{...e.aws.environment}}),setAwsProviderDefaults:({accountId:r,environment:s,memorySize:i,region:o,runtime:a,timeout:c})=>{r&&(e.aws.accountId=r),s&&(e.aws.environment=s),i&&(e.aws.memorySize=i),o&&(e.aws.region=o),a&&(e.aws.runtime=a),c&&(e.aws.timeout=c)},log:v}}async resolveConfig(){let e=await Ge(this.config);if(e?.exportedFunc){let n,{exportedFunc:r,configObjectName:s,configPath:i}=e;if(typeof r[s]=="function")n=r[s];else if(typeof r=="function")n=r;else if(typeof r.default=="function")n=r.default;else throw new Error(`Can not read exlo config at: ${i}`);return n}}onBeforeApplyConfigCallbacks=[];onBeforeApplyConfig(e){this.onBeforeApplyConfigCallbacks.push(e)}async#l(e){for(let n of this.onBeforeApplyConfigCallbacks)await n(e)}async#o(){let e=this.buildDefineConfigParam(),n=lt(this).map(a=>(a.callback=a.callback.bind(e),a)),r=await this.resolveConfig(),s={};r&&(await this.#l(r),s=await r(e),Array.isArray(s.onKill)&&this.onKill.push(...s.onKill),s.build&&(typeof s.build.shimRequire=="boolean"&&(this.shimRequire=s.build.shimRequire),typeof s.build.optimizeBuild=="boolean"&&(this.optimizeBuild=s.build.optimizeBuild)),!this.llrt&&s.llrt&&(this.llrt=s.llrt,L.llrtBoostrapPath=this.llrt.boostrapPath,this.llrt.environment&&(L.llrtEnvs=this.llrt.environment)),typeof s.buildCallback=="function"&&(this.customBuildCallback=s.buildCallback),s.server&&typeof s.server=="object"&&(Array.isArray(s.server.request)&&n.unshift(...s.server.request),typeof s.server.port=="number"&&!this.port&&(this.port=s.server.port),typeof s.server.onReady=="function"&&(this.onReady=s.server.onReady),typeof s.server.setEndpointEnvVar=="boolean"&&(this.setLambdaEndpointEnvVar=s.server.setEndpointEnvVar))),this.customOfflineRequests=n;let i=s?.build?.esbuild;if(!i)return;let o=xe(i);Object.keys(o).length&&(this.customEsBuildConfig?this.customEsBuildConfig={...this.customEsBuildConfig,...o}:this.customEsBuildConfig=o)}#a=()=>{let e=this.options.port;isNaN(e)||(this.port=e)};async kill(e){this.buildContext.dispose&&await this.buildContext.dispose();for(let n of Ln.SOURCES)try{await n.disable()}catch(r){console.error(r)}for(let n of this.handlers)n.clear?.();this.stop(e);for(let n of this.onKill)try{await n()}catch(r){console.error(r)}}};async function Ii(t){let e=jn(t);return await e.exlo.start(),await e.waitServer,{port:e.listeningPort,url:e.listeningUrl,endpoints:e.exlo.endpoints,async kill(){await e.exlo.kill()},[Symbol.asyncDispose]:async()=>{await e.exlo.kill()}}}var he=class{accountId="123456789012";region="us-east-1";timeout=3;memorySize=1024;environment={};services={};functions={};runtime=`node${process.versions.node.split(".")[0]}.x`;getFunction(e){return this.functions[e]}};function jn(t){let e=new he,n={};t&&(t.port&&(n.port=t.port),typeof t.debug=="boolean"&&(n.debug=t.debug),t.build&&(typeof t.build.shimRequire=="boolean"&&(n.shimRequire=t.build.shimRequire),typeof t.build.optimizeBuild=="boolean"&&(n.optimizeBuild=t.build.optimizeBuild),t.build.esbuild&&(n.customEsBuildConfig=t.build.esbuild)),t.config&&(n.config=t.config),t.functions&&(e.functions=t.functions),t.defaults&&(t.defaults.environment&&(e.environment=t.defaults.environment),t.defaults.timeout&&(e.timeout=t.defaults.timeout),t.defaults.memorySize&&(e.memorySize=t.defaults.memorySize),t.defaults.runtime&&(e.runtime=t.defaults.runtime),t.defaults.accountId&&(e.accountId=t.defaults.accountId),t.defaults.region&&(e.region=t.defaults.region)));let r;t?.llrt?r=t.llrt:typeof t?.config=="object"&&t.config.llrt&&(r=t.config.llrt);let s=new de({aws:e,llrt:r},n);typeof t?.onKill=="function"&&s.onKill.push(t.onKill);let i;s.onceServerReady.push(a=>{o.listeningPort=a.port,o.listeningUrl=a.url,i()});let o={listeningPort:0,listeningUrl:"",exlo:s,waitServer:new Promise(a=>{i=a})};return o}export{jn as createAppRunner,pn as exloVersion,Ii as run};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "exlo",
3
- "version": "0.0.24",
3
+ "version": "0.0.25",
4
4
  "description": "A modular toolkit to emulate cloud services locally using high-quality built-in plugins and custom extensions. Includes support for Lambda, S3, SNS, SQS, Secrets Manager, DynamoDB, REST API Gateway and more.",
5
5
  "author": "Inqnuam",
6
6
  "license": "MIT",