{"version":3,"sources":["../src/import-config-file.ts","../src/route-importer.ts","../src/route-generator.ts","../src/route-decorator.ts","../src/utils/lambda-is-running.ts","../src/index.ts"],"sourcesContent":["import fs from \"fs\";\nimport * as path from \"path\";\n\nexport type GeneratorConfigFileData = {\n\tpathPattern: string;\n\tprojectRoot: string;\n\tgeneratedFileName?: string;\n\tgeneratedFileExtension?: string;\n};\n\nfunction findProjectRoot(startPath: string): string {\n\tconst rootIndicators = [\"package.json\", \"tsconfig.json\", \".git\"];\n\tlet currentPath = startPath;\n\n\twhile (currentPath !== path.parse(currentPath).root) {\n\t\tif (\n\t\t\trootIndicators.some((indicator) =>\n\t\t\t\tfs.existsSync(path.join(currentPath, indicator)),\n\t\t\t)\n\t\t) {\n\t\t\treturn currentPath;\n\t\t}\n\t\tcurrentPath = path.dirname(currentPath);\n\t}\n\n\treturn startPath;\n}\n\nfunction parseTypeScriptConfig(content: string): GeneratorConfigFileData {\n\ttry {\n\t\tconst objectMatch = content.match(/config[^{]*=\\s*({[\\s\\S]*?})/);\n\n\t\tif (!objectMatch || !objectMatch[1]) {\n\t\t\tthrow new Error(\"Configuration object not found in file\");\n\t\t}\n\n\t\tconst configString = objectMatch[1];\n\n\t\ttry {\n\t\t\t// Convert the matched string to an object\n\t\t\tconst parseConfig = new Function(`return ${configString}`)();\n\n\t\t\t// Validate required fields\n\t\t\tif (\n\t\t\t\t!parseConfig.pathPattern ||\n\t\t\t\ttypeof parseConfig.pathPattern !== \"string\"\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Invalid configuration: pathPattern is required and must be a string\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!parseConfig.projectRoot ||\n\t\t\t\ttypeof parseConfig.projectRoot !== \"string\"\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Invalid configuration: projectRoot is required and must be a string\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn parseConfig as GeneratorConfigFileData;\n\t\t} catch (evalError) {\n\t\t\tconsole.error(\"Debug - Extracted config string:\", configString);\n\t\t\tthrow new Error(`Error parsing configuration object: ${evalError}`);\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(\"Debug - Original file content:\", content);\n\t\tthrow error;\n\t}\n}\n\nexport async function importConfigFile() {\n\ttry {\n\t\tconst filename = \"serverless-route.config\";\n\t\tconst startPath = process.cwd();\n\t\tconst projectRoot = findProjectRoot(startPath);\n\n\t\tconsole.log(\"Debug - Current working directory:\", startPath);\n\t\tconsole.log(\"Debug - Detected project root:\", projectRoot);\n\n\t\tconst configFiles = {\n\t\t\tjson: path.join(projectRoot, `${filename}.json`),\n\t\t\tjs: path.join(projectRoot, `${filename}.js`),\n\t\t\tts: path.join(projectRoot, `${filename}.ts`),\n\t\t};\n\n\t\tconsole.log(\"Looking for configuration files in:\");\n\t\tObject.entries(configFiles).forEach(([type, filePath]) => {\n\t\t\tconsole.log(\n\t\t\t\t`- [${type.toUpperCase()}] ${filePath} (${fs.existsSync(filePath) ? \"EXISTS\" : \"NOT FOUND\"})`,\n\t\t\t);\n\t\t});\n\n\t\tif (fs.existsSync(configFiles.json)) {\n\t\t\tconsole.log(\"Using JSON configuration file\");\n\t\t\tconst data = fs.readFileSync(configFiles.json, \"utf-8\");\n\t\t\treturn JSON.parse(data) as GeneratorConfigFileData;\n\t\t}\n\n\t\tif (fs.existsSync(configFiles.js)) {\n\t\t\tconsole.log(\"Using JavaScript configuration file\");\n\t\t\tconst data = await import(configFiles.js);\n\t\t\treturn data.default as GeneratorConfigFileData;\n\t\t}\n\n\t\tif (fs.existsSync(configFiles.ts)) {\n\t\t\tconsole.log(\"Using TypeScript configuration file\");\n\t\t\tconst content = fs.readFileSync(configFiles.ts, \"utf-8\");\n\t\t\treturn parseTypeScriptConfig(content);\n\t\t}\n\n\t\tthrow new Error(\n\t\t\t`Configuration file not found. Searched in:\\n${Object.entries(configFiles)\n\t\t\t\t.map(([_, path]) => `- ${path}`)\n\t\t\t\t.join(\"\\n\")}`,\n\t\t);\n\t} catch (error) {\n\t\tif (error instanceof Error) {\n\t\t\tconsole.error(\"Error details:\", error.message);\n\t\t\tconsole.error(\"Stack trace:\", error.stack);\n\t\t\tthrow error;\n\t\t}\n\t\tthrow new Error(\"Unknown error while importing configuration file\");\n\t}\n}\n","import * as path from \"path\";\nimport url from \"url\";\n\nimport { globSync } from \"glob\";\n\nimport { GeneratorConfigFileData } from \"./import-config-file\";\nimport { ServerlessGenerator } from \"./route-generator\";\nimport { lambdaIsRunning } from \"./utils/lambda-is-running\";\n\nasync function importAllHandlers(data: GeneratorConfigFileData) {\n\ttry {\n\t\tconsole.log(\"Importing all handlers...\");\n\n\t\tif (!data || !data.projectRoot || !data.pathPattern) {\n\t\t\tthrow new Error(\"Missing projectRoot or pathPattern in config file\");\n\t\t}\n\n\t\tconst projectRoot = path.join(process.cwd(), data.projectRoot);\n\n\t\tif (!projectRoot) {\n\t\t\tthrow new Error(\"Could not find project root\");\n\t\t}\n\n\t\tconsole.log(\"Project root: \", projectRoot);\n\n\t\tconst handlersPath = path.join(\n\t\t\tdata.projectRoot.concat(\"/\").concat(data.pathPattern),\n\t\t);\n\n\t\tconst handlers = globSync(handlersPath);\n\n\t\tfor (const handler of handlers) {\n\t\t\tconst handlerUrl = url.pathToFileURL(handler).href;\n\t\t\tawait import(handlerUrl);\n\t\t}\n\t} catch (error) {\n\t\tconsole.log(\"Error importing all handlers: \", error);\n\t\tthrow new Error(error);\n\t}\n}\n\nexport async function generate(configFile: GeneratorConfigFileData) {\n\ttry {\n\t\tif (lambdaIsRunning()) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait importAllHandlers(configFile);\n\n\t\tconst fileName = configFile?.generatedFileName ?? \"serverless-routes\";\n\n\t\tconst projectRoot = process.cwd();\n\t\tconst srcPath = path.join(projectRoot, configFile.projectRoot);\n\t\tconst serverlessPath = path.join(\n\t\t\tprojectRoot,\n\t\t\t`${fileName}.${configFile?.generatedFileExtension ?? \"js\"}`,\n\t\t);\n\n\t\tconst generator = new ServerlessGenerator(\n\t\t\tsrcPath,\n\t\t\tserverlessPath,\n\t\t\tconfigFile,\n\t\t);\n\n\t\tgenerator.generate();\n\n\t\tconsole.log(\"Route generation completed successfully!\");\n\t\tprocess.exit(0);\n\t} catch (error) {\n\t\tconst err = error as Error;\n\n\t\tconsole.error(\"Error generating routes: \", err.message);\n\t\tconsole.error(err.stack);\n\t\tconsole.error(JSON.stringify(err, null, 2));\n\t\tconsole.error(\"Route generation failed!\");\n\n\t\tthrow err;\n\t}\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\n\nimport { GeneratorConfigFileData } from \"./import-config-file\";\nimport { getRouteConfigs } from \"./route-decorator\";\n\nexport class ServerlessGenerator {\n\tconstructor(\n\t\tprivate readonly basePath: string,\n\t\tprivate readonly outputPath: string,\n\t\tprivate readonly config: GeneratorConfigFileData,\n\t) {}\n\n\tprivate generateFunctionConfig(): Record<string, unknown> {\n\t\tconst routes = getRouteConfigs();\n\n\t\tconst functions: Record<string, unknown> = {};\n\n\t\troutes.forEach((route) => {\n\t\t\tconst { name, events, context, handlerRoutePath, ...rest } = route;\n\n\t\t\tconst routeContext = route.context.indexOf(this.config.projectRoot);\n\n\t\t\tlet relativePath: string;\n\n\t\t\tif (routeContext !== -1) {\n\t\t\t\trelativePath = context.substring(routeContext);\n\t\t\t}\n\n\t\t\tif (!relativePath) {\n\t\t\t\tthrow new Error(\"Could not find relative path for route\");\n\t\t\t}\n\n\t\t\tconst handlerPath = path.relative(\n\t\t\t\tthis.basePath,\n\t\t\t\tpath.join(this.basePath, relativePath, handlerRoutePath),\n\t\t\t);\n\n\t\t\tfunctions[name] = {\n\t\t\t\thandler: handlerPath,\n\t\t\t\tevents: events,\n\t\t\t\t...rest,\n\t\t\t};\n\t\t});\n\n\t\treturn functions;\n\t}\n\n\tprivate generateFunctionConfigJS(): string {\n\t\tconst functions = this.generateFunctionConfig();\n\n\t\treturn `\n    module.exports = {\n      functions: ${JSON.stringify(functions, null, 2)}\n    };`;\n\t}\n\n\tprivate generateFunctionConfigTS(): string {\n\t\tconst functions = this.generateFunctionConfig();\n\n\t\treturn `export const functions = ${JSON.stringify(functions, null, 2)};`;\n\t}\n\n\tpublic generate(): void {\n\t\tlet config: string;\n\n\t\tif (this.config.generatedFileExtension === \"ts\") {\n\t\t\tconfig = this.generateFunctionConfigTS();\n\t\t} else {\n\t\t\tconfig = this.generateFunctionConfigJS();\n\t\t}\n\n\t\tfs.writeFileSync(this.outputPath, config);\n\t\tconsole.log(`Serverless config generated at ${this.outputPath}`);\n\t}\n}\n","import path from \"path\";\nimport { HttpRouteConfig } from \"./types/function\";\nimport { lambdaIsRunning } from \"./utils/lambda-is-running\";\n\ntype RouteConfig = HttpRouteConfig;\n\nconst routeConfigs = new Map<string, RouteConfig & { context: string }>();\n\nfunction getContext(match: RegExpMatchArray) {\n\tif (match && match[1]) {\n\t\tconst fullPath = match[1];\n\n\t\tconst directory = path.dirname(fullPath);\n\t\treturn directory;\n\t}\n\n\treturn null;\n}\n\nconst defineConfig = (\n\tconfig: RouteConfig & {\n\t\tcontext: string;\n\t},\n) => {\n\tlet functionName: string | undefined;\n\n\tif (config.name) {\n\t\tfunctionName = config.name;\n\t}\n\n\tif (!functionName && config.events.find((event) => \"http\" in event)) {\n\t\tconst path = (\n\t\t\tconfig.events.find((event) => \"http\" in event) as {\n\t\t\t\thttp: { path: string };\n\t\t\t}\n\t\t).http.path;\n\n\t\t// functionName = path.replace(/\\//g, \"-\");\n\t\tfunctionName = path.split(\"/\")[path.split(\"/\").length - 1];\n\t}\n\n\tif (!functionName) {\n\t\tthrow new Error(\"Could not find function name for route\");\n\t}\n\n\treturn {\n\t\t...config,\n\t\tname: functionName,\n\t};\n};\n\nexport const createHandler = (\n\tconfig: RouteConfig,\n\thandler: (...args: any[]) => any,\n) => {\n\tif (lambdaIsRunning()) {\n\t\treturn handler;\n\t}\n\n\t// Registra a configuração usando o nome do arquivo + nome da função como chave\n\tconst matchPath = new Error()\n\t\t.stack!.split(\"\\n\")[2]\n\t\t.match(/\\(([^:]+):\\d+:\\d+\\)/);\n\n\tif (!matchPath) {\n\t\tthrow new Error(\"Could not find handler path\");\n\t}\n\n\tconst context = getContext(matchPath);\n\n\tif (!context) {\n\t\tthrow new Error(\"Could not find handler context\");\n\t}\n\n\tconst fileName =\n\t\tnew Error().stack!.split(\"\\n\")[2].match(/[/\\\\]([\\w\\-. ]+)\\.[jt]s/)?.[1] ||\n\t\t\"unknown\";\n\n\tconst key = `${fileName}.${defineConfig({ ...config, context }).name}`;\n\n\trouteConfigs.set(key, { ...config, context });\n\n\treturn handler;\n};\n\nexport const getRouteConfigs = () => {\n\treturn Array.from(routeConfigs.entries()).map(\n\t\t([handlerRoutePath, config]) => ({\n\t\t\thandlerRoutePath,\n\t\t\t...defineConfig(config),\n\t\t}),\n\t);\n};\n","export enum LAMBDA_NAMES {\n\tAWS = \"AWS_LAMBDA_FUNCTION_NAME\",\n\tAZURE = \"AZURE_FUNCTIONS_ENVIRONMENT\",\n\tGOOGLE = \"GOOGLE_CLOUD_FUNCTION_NAME\",\n}\n\nexport const lambdaIsRunning = () => {\n\tif (\n\t\tprocess.env[LAMBDA_NAMES.AWS] ||\n\t\tprocess.env[LAMBDA_NAMES.AZURE] ||\n\t\tprocess.env[LAMBDA_NAMES.GOOGLE]\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n","import { importConfigFile } from \"./import-config-file\";\nimport { generate } from \"./route-importer\";\nimport { lambdaIsRunning } from \"./utils/lambda-is-running\";\n\nexport { createHandler } from \"./route-decorator\";\n\nexport { type GeneratorConfigFileData } from \"./import-config-file\";\n\nexport const execute = async () => {\n\tif (lambdaIsRunning()) {\n\t\treturn;\n\t}\n\n\tconst data = await importConfigFile();\n\n\tawait generate(data);\n};\n\nexecute();\n"],"mappings":"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","names":["fs","path","findProjectRoot","startPath","rootIndicators","currentPath","parse","root","some","indicator","fs","existsSync","join","dirname","parseTypeScriptConfig","content","objectMatch","match","Error","configString","parseConfig","Function","pathPattern","projectRoot","evalError","console","error","importConfigFile","filename","process","cwd","log","configFiles","json","js","ts","Object","entries","forEach","type","filePath","toUpperCase","data","readFileSync","JSON","default","map","_","path","message","stack","path","url","globSync","fs","path","path","lambdaIsRunning","process","env","routeConfigs","Map","getContext","match","fullPath","directory","path","dirname","defineConfig","config","functionName","name","events","find","event","http","split","length","Error","createHandler","handler","lambdaIsRunning","matchPath","stack","context","fileName","key","set","getRouteConfigs","Array","from","entries","map","handlerRoutePath","ServerlessGenerator","constructor","basePath","outputPath","config","generateFunctionConfig","routes","getRouteConfigs","functions","forEach","route","name","events","context","handlerRoutePath","rest","routeContext","indexOf","projectRoot","relativePath","substring","Error","handlerPath","relative","join","handler","generateFunctionConfigJS","JSON","stringify","generateFunctionConfigTS","generate","generatedFileExtension","fs","writeFileSync","console","log","importAllHandlers","data","console","log","projectRoot","pathPattern","Error","join","process","cwd","handlersPath","concat","handlers","globSync","handler","handlerUrl","url","pathToFileURL","href","error","generate","configFile","lambdaIsRunning","fileName","generatedFileName","srcPath","serverlessPath","generatedFileExtension","generator","ServerlessGenerator","exit","err","message","stack","JSON","stringify","execute","lambdaIsRunning","data","importConfigFile","generate"]}