UNPKG

code-genius

Version:
4 lines (3 loc) 9.98 kB
import C from"node:fs";import a from"node:path";import h from"node:process";import{pathToFileURL as N}from"node:url";import T from"execa";import{blue as D,yellow as A,green as j,red as x}from"kolorist";import g from"enquirer";import R from"simple-update-notifier";import H from"ajv";import d from"fs-extra";const b=["./src"],c=process.env.CG_DEBUG==="activation",B=[{emoji:"\u{1F389}",code:"feat",description:"\u589E\u52A0\u65B0\u529F\u80FD/\u7279\u6027"},{emoji:"\u{1F41B}",code:"fix",description:"\u4FEE\u590Dbug"},{emoji:"\u{1F4DA}",code:"docs",description:"\u66F4\u65B0\u6587\u6863"},{emoji:"\u{1F680}",code:"perf",description:"\u6027\u80FD\u4F18\u5316"},{emoji:"\u2728",code:"refactor",description:"\u91CD\u6784\u4EE3\u7801"},{emoji:"\u{1F3A8}",code:"style",description:"\u8C03\u6574\u4EE3\u7801\u683C\u5F0F/\u6837\u5F0F"},{emoji:"\u{1F6A7}",code:"build",description:"\u6784\u5EFA\u76F8\u5173\u7684\u4FEE\u6539"},{emoji:"\u{1F527}",code:"chore",description:"\u6742\u9879/\u7410\u788E\u4EFB\u52A1\u7684\u4FEE\u6539"},{emoji:"\u{1F485}",code:"ci",description:"\u6301\u7EED\u96C6\u6210\u76F8\u5173\u7684\u4FEE\u6539"},{emoji:"\u2705",code:"test",description:"\u6DFB\u52A0/\u4FEE\u6539\u6D4B\u8BD5"}],w=[{name:"app",description:"\u5E94\u7528\u6574\u4F53"},{name:"core",description:"\u6838\u5FC3\u6A21\u5757"},{name:"feature",description:"\u5177\u4F53\u529F\u80FD\u6A21\u5757"},{name:"docs",description:"\u6587\u6863"},{name:"test",description:"\u6D4B\u8BD5\u76F8\u5173"},{name:"config",description:"\u914D\u7F6E\u6587\u4EF6"},{name:"build",description:"\u6784\u5EFA\u8FC7\u7A0B"},{name:"ui",description:"\u7528\u6237\u754C\u9762"}],G=[{display:"version",command:"--version",description:"\u67E5\u770B\u7248\u672C\u53F7"},{display:"help",command:"--help",description:"\u67E5\u770B\u5E2E\u52A9\u4FE1\u606F"}],S=["codeg.config.js","codeg.config.mjs"],E=e=>{c&&console.log(D("[CODEG INFO HINT]:"),e)},q=e=>{c&&console.log(A("[CODEG WARRING HINT]:"),e)},J=e=>{c&&console.log(j("[CODEG SUCCESS HINT]:"),e)},$=e=>{c&&console.log(x("[CODEG ERROR HINT]:"),e)},F=e=>{console.log(D("[CODEG INFO HINT]:"),e)},U=e=>{console.log(A("[CODEG WARRING HINT]:"),e)},W=e=>{console.log(j("[CODEG SUCCESS HINT]:"),e)},y=e=>{console.log(x("[CODEG ERROR HINT]:"),e)},L="code-genius",_="0.4.36",M="CodeGenius's command line tools",z={name:"OSpoon",email:"zxin088@gmail.com",url:"https://github.com/OSpoon"},V="MIT",K="https://github.com/FE-CodeGenius/CodeGenius#readme",P={type:"git",url:"git+https://github.com/FE-CodeGenius/CodeGenius.git"},Q={url:"https://github.com/FE-CodeGenius/CodeGenius/issues"},X={registry:"https://registry.npmjs.org"},Y={".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.cjs"}},Z="dist/index.cjs",ee="dist/index.mjs",se="dist/index.d.ts",ie={cg:"./bin/codeGenius.mjs",codeg:"./bin/codeGenius.mjs","code-genius":"./bin/codeGenius.mjs"},ue=["bin","dist"],te={node:">=14.17"},oe={prepare:"npx codeg hooks",build:"unbuild",stub:"unbuild --stub",release:"dotenv release-it --ci"},ne=["CodeGenius","codeGenius","Genius","genius","CLI","cli"],ce={"@release-it/conventional-changelog":"^7.0.1","@types/eslint":"^8.44.3","@types/execa":"^2.0.0","@types/fs-extra":"^11.0.2","@types/node":"^20.6.2","@types/rimraf":"^4.0.5","@typescript-eslint/eslint-plugin":"^5.62.0","@typescript-eslint/parser":"^5.62.0","code-genius":".","cross-env":"^7.0.3","dotenv-cli":"^7.3.0","eslint-plugin-simple-import-sort":"^10.0.0",esno:"^0.17.0","release-it":"^16.1.5","simple-git-hooks":"^2.9.0",typescript:"^5.1.6",unbuild:"^2.0.0-rc.0"},re={"@codegenius/clear-plugin":"^0.0.7","@codegenius/create-plugin":"^0.0.3","@codegenius/depcheck-plugin":"^0.0.3","@codegenius/format-plugin":"^0.0.4","@codegenius/git-user-plugin":"^0.0.3","@codegenius/hooks-plugin":"^0.1.1","@codegenius/impsort-plugin":"^0.0.4","@codegenius/lighthouse-plugin":"^0.0.2","@codegenius/quantity-plugin":"^0.0.2","@codegenius/registry-plugin":"^0.0.3","@codegenius/template-plugin":"^0.0.3","@codegenius/verify-plugin":"^0.0.2",ajv:"^8.12.0",cac:"^6.7.14",enquirer:"^2.4.1",eslint:"^8.50.0",execa:"^5.1.1","fs-extra":"^11.1.1",kolorist:"^1.8.0","simple-update-notifier":"^2.0.0"},I={name:L,version:_,description:M,author:z,license:V,homepage:K,repository:P,bugs:Q,publishConfig:X,exports:Y,main:Z,module:ee,types:se,bin:ie,files:ue,engines:te,scripts:oe,keywords:ne,devDependencies:ce,dependencies:re,"simple-git-hooks":{"pre-commit":"npx esno scripts/lint-script.ts","commit-msg":"npx codeg verify"}},pe=async e=>{R({pkg:I});const s=e.map(({display:u,command:t,description:o})=>{const n=`${u||t}`.padEnd(15);return{name:t,message:`${n}${o}`}}),i=await g.prompt([{name:"command",type:"select",message:"\u8BF7\u9009\u62E9\u5F85\u6267\u884C\u7684 CodeG \u547D\u4EE4",choices:s}]);await r("codeg",i.command.split(" "),{stdio:"inherit"})};function ae(e){return{name:"rootInstaller",setup:s=>{s.command("[root]","\u542F\u52A8 CodeGenius \u547D\u4EE4\u884C\u9009\u9879\u6A21\u5F0F ").alias("start").alias("dev").action(async()=>{await pe(e)})}}}const r=async(e,s,i)=>(await T(e,s,i))?.stdout?.trim()||"";function de(e){e&&y(e.message),h.exit(1)}const me=e=>e;async function O(){let e;for(const s of S){const i=a.resolve(h.cwd(),s);if(C.existsSync(i)){e=i;break}}return e?(await import(N(e).href)).default:void 0}async function le(e,s){const i=await O(),u=[],t=s.map(o=>o(i?.commands));for(const o of t.concat(i?.plugins||[]))o.command&&o.describe&&u.push({display:o.name||o.command,command:o.command,description:o.describe}),o.setup(e);ae(u.concat(G)).setup(e)}const k=async e=>{c&&E(`eslintFix \u53C2\u6570\u4FE1\u606F: ${e}`);try{await r("npx",["eslint","--fix",...e],{stdio:"inherit"}),F("\u4EE3\u7801\u5DF2\u901A\u8FC7 eslint \u6821\u9A8C")}catch(s){y("\u4EE3\u7801\u672A\u901A\u8FC7 eslint \u6821\u9A8C"),$(s),process.exit(1)}};function ge(e){const{fix:s}=e||{};return{name:"fix",describe:"\u8FD0\u884C eslint \u9759\u6001\u626B\u63CF\u548C\u4FEE\u590D\u4EE3\u7801\u4E2D\u5B58\u5728\u7684\u95EE\u9898",command:"fix",setup:i=>{i.command("fix","\u8FD0\u884C eslint \u9759\u6001\u626B\u63CF\u548C\u4FEE\u590D\u4EE3\u7801\u4E2D\u5B58\u5728\u7684\u95EE\u9898").option("-p, --pattern <pattern>","\u8BBE\u7F6E\u5339\u914D\u89C4\u5219").action(async u=>{let t=s?.paths||b;const{pattern:o}=u;o&&(t=typeof o=="string"?[o]:o),await k(t)})}}}const Ee={type:"object",properties:{type:{type:"string"},scope:{type:"string"},description:{type:"string"}},required:["type","scope","description"]},Fe=async(e,s)=>{const i=e.map(({emoji:o,code:n,description:p})=>{const m=`${n}:`.padEnd(20);return{name:`${o} ${n}`,message:`${o}${m}${p}`}}),u=s.map(({name:o,description:n})=>{const p=`${o}:`.padEnd(20);return{name:o,message:`${p.padEnd(20)} ${n}`}}),t=await g.prompt([{name:"type",type:"select",message:"\u8BF7\u9009\u62E9\u63D0\u4EA4\u7C7B\u578B",choices:i},{name:"scope",type:"select",message:"\u8BF7\u9009\u62E9\u63D0\u4EA4\u8303\u56F4",choices:u},{name:"description",type:"text",message:"\u8BF7\u8F93\u5165\u63D0\u4EA4\u63CF\u8FF0",required:!0},{name:"emoji",type:"confirm",message:"\u8981\u5728\u63D0\u4EA4\u4FE1\u606F\u4E2D\u663E\u793A\u5185\u7F6E\u7684 emoji \u8868\u60C5\u5417?"}]);return{type:t.emoji?t.type:t.type.split(" ")[1],scope:t.scope,description:t.description}},f=async(e,s,i)=>{c&&E(`gitCommit \u53C2\u6570\u4FE1\u606F: ${JSON.stringify({type:e,scope:s,description:i})}`);const u=new H().compile(Ee);if(!u({type:e,scope:s,description:i})&&u.errors&&u.errors?.length>0)throw new Error(u.errors[0].message);await r("git",["commit","-m",`${e}(${s}): ${i}`],{stdio:"inherit"})};function ye(e){const{commit:s}=e||{};return{name:"commit",describe:"\u751F\u6210 angualr \u89C4\u8303\u7684\u63D0\u4EA4\u4FE1\u606F",command:"commit --ask",setup:i=>{i.command("commit","\u751F\u6210 angualr \u89C4\u8303\u7684\u63D0\u4EA4\u4FE1\u606F").option("-t, --type <type>","\u6DFB\u52A0\u4FEE\u6539\u7C7B\u578B").option("-s, --scope <scope>","\u586B\u5199\u4FEE\u6539\u8303\u56F4").option("-d, --description <description>","\u586B\u5199\u4FEE\u6539\u63CF\u8FF0").option("-a, --ask","\u542F\u7528\u8BE2\u95EE\u6A21\u5F0F").action(async u=>{const{type:t,scope:o,description:n,ask:p}=u,m=s?.gitCommitTypes||B,v=s?.gitCommitScopes||w;if(p){const l=await Fe(m,v);await f(l.type,l.scope,l.description)}else await f(t,o,n)})}}}function fe(e){return Object.keys(e).map(s=>({command:e[s],display:s,description:"description the function of this cmd command"}))}function Ce(e,s){const i=[...s];for(const u of e){const t=i.find(o=>o.command===u.command);t?t.display!==u.display&&(t.display=u.display):i.push(u)}return i.filter(u=>e.find(t=>t.command===u.command))}const he=async()=>{const e=await d.readJSONSync(a.join(process.cwd(),"package.json"));let s=fe(e.scripts);const i=a.join(process.cwd(),"scripts.config.json");if(C.existsSync(i)){const{scripts:u}=await d.readJSONSync(i);s=Ce(s,u)}await d.outputFileSync(i,JSON.stringify({scripts:s},null,2)),F("\u4EE3\u7406\u811A\u672C scripts.config.json \u5DF2\u5B8C\u6210\u540C\u6B65")};async function De(){const{scripts:e}=d.readJsonSync(a.join(process.cwd(),"scripts.config.json")),s=e.map(u=>{const t=`${u.display}`.padEnd(15);return{name:u.command,message:`${t} ${u.description}`}}),i=await g.prompt([{name:"script",type:"select",message:"\u8BF7\u9009\u62E9\u9879\u76EE\u8FD0\u884C\u811A\u672C",choices:s}]);if(i.script){const u=i.script.split("&&").map(t=>t.trim());for(const t of u)if(t.startsWith("npx")){const o=t.split(" ")[0],n=t.split(" ").slice(1);await r(o,n,{stdio:"inherit"})}else await r("npx",t.split(" "),{stdio:"inherit"})}}function Ae(){return{name:"script",describe:"\u4EE3\u7406\u8FD0\u884C package.scripts \u811A\u672C",command:"script",setup:e=>{e.command("script","\u4EE3\u7406\u8FD0\u884C package.scripts \u811A\u672C").action(async()=>{await he(),await De()})}}}const je=[ye,ge,Ae];export{c as A,S as D,b as a,B as b,I as c,w as d,k as e,G as f,f as g,de as h,r as i,me as j,E as k,O as l,q as m,J as n,$ as o,je as p,F as q,U as r,le as s,W as t,y as u};