{"version":3,"sources":["../bin/cli.ts"],"sourcesContent":["import { exec } from \"child_process\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { Command } from \"commander\";\n\nconst program = new Command();\n\ntype ConfigFileType = \"js\" | \"ts\" | \"json\";\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 process.cwd();\n}\n\nfunction generateConfigContent(type: ConfigFileType): string {\n\tconst configObjectTs = {\n\t\tpathPattern: \"src/modules/**/handler.ts\",\n\t\tprojectRoot: \"example\",\n\t\tgeneratedFileName: \"serverless-routes\",\n\t\tgeneratedFileExtension: type === \"json\" ? \"ts\" : type,\n\t};\n\n\tconst configObjectJs = {\n\t\tpathPattern: \"src/modules/**/handler.js\",\n\t\tprojectRoot: \"example\",\n\t\tgeneratedFileName: \"serverless-routes\",\n\t\tgeneratedFileExtension: type,\n\t};\n\n\tswitch (type) {\n\t\tcase \"js\":\n\t\t\treturn `module.exports = ${JSON.stringify(configObjectJs, null, 2)};`;\n\t\tcase \"ts\":\n\t\t\treturn `import { GeneratorConfigFileData } from '@renanlido/serverless-routes-generator';\n\\n\\nexport const config: GeneratorConfigFileData = ${JSON.stringify(configObjectTs, null, 2)};`;\n\t\tcase \"json\":\n\t\t\treturn JSON.stringify(configObjectTs, null, 2);\n\t\tdefault:\n\t\t\tthrow new Error(`Tipo de arquivo não suportado: ${type}`);\n\t}\n}\n\nfunction getConfigFilename(type: ConfigFileType): string {\n\treturn `serverless-route.config.${type}`;\n}\n\nprogram\n\t.name(\"serverless-routes-generator\")\n\t.description(\"Simplify route creation for Serverless applications\")\n\t.version(\"1.0.1\");\n\nprogram\n\t.command(\"generate\")\n\t.description(\"Generate serverless routes\")\n\t.action(() => {\n\t\tconst scriptPath = path.resolve(__dirname, \"./index.js\");\n\n\t\texec(`npx tsx ${scriptPath}`, (error, stdout, stderr) => {\n\t\t\tif (error) {\n\t\t\t\tconsole.error(`Error on execute command: ${error.message}`);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\tif (stderr) {\n\t\t\t\tconsole.error(`Stderr: ${stderr}`);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\tconsole.log(stdout);\n\t\t});\n\t});\n\nprogram\n\t.command(\"init\")\n\t.description(\"Create an initial configuration file on the project root\")\n\t.option(\n\t\t\"-t, --type <type>\",\n\t\t\"Tipo do arquivo de configuração (js, ts, ou json)\",\n\t\t\"ts\",\n\t)\n\t.action((options) => {\n\t\tconst fileType = options.type.toLowerCase() as ConfigFileType;\n\n\t\tif (![\"js\", \"ts\", \"json\"].includes(fileType)) {\n\t\t\tconsole.error(\"Invalid file type. Use js, ts, or json\");\n\t\t\tprocess.exit(1);\n\t\t}\n\n\t\tconst projectRoot = findProjectRoot(process.cwd());\n\t\tconst filename = getConfigFilename(fileType);\n\t\tconst configPath = path.join(projectRoot, filename);\n\n\t\tconst existingConfigs = [\"js\", \"ts\", \"json\"].map((ext) =>\n\t\t\tpath.join(projectRoot, `serverless-route.config.${ext}`),\n\t\t);\n\n\t\tif (existingConfigs.some((file) => fs.existsSync(file))) {\n\t\t\tconst existingFiles = existingConfigs\n\t\t\t\t.filter((file) => fs.existsSync(file))\n\t\t\t\t.map((file) => path.basename(file))\n\t\t\t\t.join(\", \");\n\n\t\t\tconsole.error(`Already existing configuration files: ${existingFiles}`);\n\t\t\tprocess.exit(1);\n\t\t}\n\n\t\ttry {\n\t\t\tconst configContent = generateConfigContent(fileType);\n\n\t\t\tfs.writeFileSync(configPath, configContent, \"utf8\");\n\n\t\t\tconsole.log(\n\t\t\t\t`✅ Configuration file \"${filename}\" success created:\\n${configPath}`,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tconsole.error(\n\t\t\t\t\"Error on create configuration file:\",\n\t\t\t\terror instanceof Error ? error.message : error,\n\t\t\t);\n\t\t\tprocess.exit(1);\n\t\t}\n\t});\n\nprogram.parse(process.argv);\n\nif (!process.argv.slice(2).length) {\n\tprogram.outputHelp();\n}\n"],"mappings":"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","names":["exec","fs","path","Command","program","Command","findProjectRoot","startPath","rootIndicators","currentPath","path","parse","root","some","indicator","fs","existsSync","join","dirname","process","cwd","generateConfigContent","type","configObjectTs","pathPattern","projectRoot","generatedFileName","generatedFileExtension","configObjectJs","JSON","stringify","Error","getConfigFilename","name","description","version","command","action","scriptPath","resolve","__dirname","exec","error","stdout","stderr","console","message","exit","log","option","options","fileType","toLowerCase","includes","filename","configPath","existingConfigs","map","ext","file","existingFiles","filter","basename","configContent","writeFileSync","argv","slice","length","outputHelp"]}