newexpand-autopr
Version:
GitHub PR Automation CLI Tool with AI
1 lines • 7.24 kB
JavaScript
import {homedir}from'os';import {dirname,join}from'path';import {readFile,writeFile,mkdir}from'fs/promises';import {existsSync,renameSync,readFileSync,readdirSync,statSync}from'fs';import s from'winston';import z from'dotenv';import m from'i18next';import {fileURLToPath}from'url';import {z as z$1}from'zod';var $=Object.defineProperty;var t=(e,r)=>$(e,"name",{value:r,configurable:true});z.config();var B={error:0,warn:1,info:2,debug:3,verbose:4,section:5,step:6},S={error:{color:"red",symbol:"\u2716"},warn:{color:"yellow",symbol:"\u26A0"},info:{color:"cyan",symbol:"\u2139"},debug:{color:"gray",symbol:"\u{1F50D}"},verbose:{color:"white",symbol:"\u{1F4DD}"},section:{color:"magenta",symbol:"==="},step:{color:"green",symbol:"\u2192"}};s.addColors(Object.entries(S).reduce((e,[r,n])=>(e[r]=n.color,e),{}));var H=t(e=>{var r;return ((r=S[e])==null?void 0:r.symbol)||"\u2022"},"getLogSymbol"),U=process.env.LOG_LEVEL==="debug"||process.env.DEBUG==="1"||process.env.DEBUG==="true",V=s.format(e=>e.level==="debug"&&!U?false:e),c=s.createLogger({levels:B,level:"step",format:s.format.combine(V(),s.format.timestamp({format:"HH:mm:ss"}),s.format.printf(e=>{let r=H(e.level);return e.level==="section"||e.level==="step"?`${r} ${e.message}`:`${r} ${e.timestamp} ${e.level}: ${e.message}`}),s.format.colorize({all:true})),transports:[new s.transports.Console]}),v={error:t((e,...r)=>c.error(e,...r),"error"),warn:t((e,...r)=>c.warn(e,...r),"warn"),info:t((e,...r)=>c.info(e,...r),"info"),debug:t((e,...r)=>c.debug(e,...r),"debug"),verbose:t((e,...r)=>c.verbose(e,...r),"verbose"),section:t((e,...r)=>c.log("section",e),"section"),step:t((e,...r)=>c.log("step",e),"step")};var j=dirname(fileURLToPath(import.meta.url)),L={common:{cli:{description:"GitHub PR Automation CLI with AI features"}}},E={common:{cli:{description:"AI \uAE30\uB2A5\uC744 \uAC16\uCD98 GitHub PR \uC790\uB3D9\uD654 CLI"}}};function O(e){try{if(existsSync(e)){let r=readFileSync(e,"utf8");return JSON.parse(r)}return console.warn(`Warning: JSON file not found: ${e}`),{}}catch(r){return console.error(`Error loading JSON file ${e}:`,r),{}}}t(O,"loadJsonFile");function X(){let e=join(j,"locales");if(existsSync(e))return e;let r=join(j,"i18n","locales");return existsSync(r)?r:(console.warn("Warning: Could not find locales directory."),null)}t(X,"findLocalesPath");function _(e){let r=X();if(!r)return e==="ko"?E:L;try{let n=join(r,e,"common.json"),a=O(n),i=join(r,e,"core"),P=existsSync(i)?C(i):{},u=join(r,e,"commands"),D=existsSync(u)?C(u):{};return {common:a,core:P,commands:D}}catch(n){return console.error(`Error loading translations for ${e}:`,n),e==="ko"?E:L}}t(_,"loadTranslations");function C(e){if(!existsSync(e))return {};let r={};try{let n=readdirSync(e);for(let a of n){let i=join(e,a);if(statSync(i).isDirectory())r[a]=C(i);else if(a.endsWith(".json")){let u=a.replace(".json","").replace(/-/g,"_");r[u]=O(i);}}}catch(n){console.error(`Error loading files from directory ${e}:`,n);}return r}t(C,"loadJsonFiles");var Ce=t(async(e="en")=>{let r=_("en"),n=_("ko");return await m.init({lng:e,fallbackLng:"en",resources:{en:{translation:r},ko:{translation:n}},interpolation:{escapeValue:false},debug:process.env.NODE_ENV==="development"}),m},"initializeI18n"),he=t(async e=>{await m.changeLanguage(e);},"setLanguage"),g=t((...e)=>m.t(...e),"t"),N=["en","ko"];var d=z$1.object({name:z$1.string(),members:z$1.array(z$1.string()),rotationStrategy:z$1.enum(["round-robin","random","least-busy"]).default("round-robin")});z$1.object({pattern:z$1.string(),reviewers:z$1.array(z$1.string())});var Y=z$1.object({pattern:z$1.string(),type:z$1.enum(["feat","fix","refactor","docs","chore","test"]),draft:z$1.boolean().default(true),labels:z$1.array(z$1.string()).default([]),template:z$1.string().optional(),autoAssignReviewers:z$1.boolean().default(true),reviewers:z$1.array(z$1.string()).default([]),reviewerGroups:z$1.array(z$1.string()).default([])}),Z=z$1.object({appId:z$1.string(),clientId:z$1.string(),installationId:z$1.number(),clientSecret:z$1.string().optional(),webhookSecret:z$1.string().optional()}),b=z$1.object({githubToken:z$1.string().optional(),language:z$1.enum(N).default("en")}),y=z$1.object({owner:z$1.string().optional(),repo:z$1.string().optional(),githubApp:Z,defaultReviewers:z$1.array(z$1.string()).default([]),reviewerGroups:z$1.array(d).default([]),branchPatterns:z$1.array(Y).default([])}),R=b.merge(y);var I=join(homedir(),".autopr"),F=join(I,"config.json"),p=".autopr.json",ne={githubToken:"",language:"en"},h={githubApp:{appId:"",clientId:"",installationId:0},defaultReviewers:[],reviewerGroups:[],branchPatterns:[{pattern:"feat/*",type:"feat",draft:true,labels:["feature"],template:"feature",autoAssignReviewers:true,reviewers:[],reviewerGroups:[]},{pattern:"fix/*",type:"fix",draft:true,labels:["bug"],template:"bugfix",autoAssignReviewers:true,reviewers:[],reviewerGroups:[]},{pattern:"refactor/*",type:"refactor",draft:true,labels:["refactor"],template:"refactor",autoAssignReviewers:true,reviewers:[],reviewerGroups:[]},{pattern:"docs/*",type:"docs",draft:false,labels:["documentation"],template:"docs",autoAssignReviewers:false,reviewers:[],reviewerGroups:[]},{pattern:"chore/*",type:"chore",draft:false,labels:["chore"],template:"chore",autoAssignReviewers:false,reviewers:[],reviewerGroups:[]},{pattern:"test/*",type:"test",draft:true,labels:["test"],template:"test",autoAssignReviewers:true,reviewers:[],reviewerGroups:[]}]};async function T(){try{let e=await readFile(F,"utf-8"),r=JSON.parse(e);return b.parse(r)}catch(e){if(e.code==="ENOENT")return ne;v.error(g("core.config.global_invalid_notice")),process.exit(1);}}t(T,"loadGlobalConfig");async function J(){try{let e=await readFile(p,"utf-8"),r=JSON.parse(e);return r.reviewerGroups&&(r.reviewerGroups=r.reviewerGroups.map(n=>d.parse(n))),y.parse(r)}catch(e){if(e.code==="ENOENT")return h;if(existsSync(p)){let r=p+".bak";return renameSync(p,r),await writeFile(p,JSON.stringify(h,null,2)),v.info(g("core.config.auto_override_notice")),h}throw new Error(g("core.config.error.load_project_failed",{error:String(e)}))}}t(J,"loadProjectConfig");async function ae(){let[e,r]=await Promise.all([T(),J()]);return R.parse({...e,...r})}t(ae,"loadConfig");async function ie(e){try{await mkdir(I,{recursive:true}),await writeFile(F,JSON.stringify(e,null,2));}catch(r){throw new Error(g("core.config.error.save_global_failed",{error:String(r)}))}}t(ie,"saveGlobalConfig");async function se(e){try{await writeFile(p,JSON.stringify(e,null,2));}catch(r){throw new Error(g("core.config.error.save_project_failed",{error:String(r)}))}}t(se,"saveProjectConfig");async function ce(e){let n={...await T(),...e},a=b.parse(n);return await ie(a),a}t(ce,"updateGlobalConfig");async function le(e){let n={...await J(),...e};e.reviewerGroups&&(n.reviewerGroups=e.reviewerGroups.map(i=>d.parse(i)));let a=y.parse(n);return await se(a),a}t(le,"updateProjectConfig");async function $e(e){let{githubToken:r,language:n,...a}=e,i={...r&&{githubToken:r},...n&&{language:n}};return Object.keys(i).length>0&&await ce(i),Object.keys(a).length>0&&await le(a),ae()}t($e,"updateConfig");export{t as a,Ce as b,he as c,g as d,N as e,v as f,d as g,h,T as i,J as j,ae as k,ie as l,se as m,ce as n,le as o,$e as p};