UNPKG

@lobehub/label-cli

Version:
3 lines (2 loc) 4.59 kB
#!/usr/bin/env node var T=Object.defineProperty;var n=(e,o)=>T(e,"name",{value:o,configurable:!0});import{jsx as u}from"react/jsx-runtime";import{TextInput as N,ConfigPanel as L,render as D}from"@lobehub/cli-ui";import{Command as R,Option as b}from"commander";import{consola as a}from"consola";import j from"update-notifier";import{memo as x,useState as $,useMemo as E}from"react";import S from"conf";import{Octokit as V}from"@octokit/rest";var A="@lobehub/label-cli",I="1.5.0",M="Automatically copy issues labels from template repo",W=["create","delete","labels"],F="https://github.comlobehub/lobe-cli-toolbox/tree/master/packages/lobe-label",G={url:"https://github.com/lobehub/lobe-cli-toolbox/issues/new"},P={type:"git",url:"https://github.com/lobehub/lobe-cli-toolbox.git"},_="MIT",q="LobeHub <i@lobehub.com>",H=!1,J="module",z={"@":"./src"},B={"lobe-label":"dist/cli.js"},K=["dist"],Q={build:"npm run type-check && pkgroll --minify -p tsconfig.prod.json --env.NODE_ENV=production && npm run shebang",dev:"pkgroll -p tsconfig.prod.json --env.NODE_ENV=development --watch",link:"npm run build && npm link -f",prepack:"clean-package",postpack:"clean-package restore",shebang:"lobe-shebang -t ./dist/cli.js",start:"node ./dist/cli.js",test:"vitest --passWithNoTests","test:coverage":"vitest run --coverage --passWithNoTests","type-check":"tsc --noEmit"},U={"@lobehub/cli-ui":"1.12.0","@octokit/rest":"^21.0.2",commander:"^13.0.0",conf:"^13.1.0",consola:"^3.3.3",ink:"^6.0.0","lodash-es":"^4.17.21",react:"^19.0.0","update-notifier":"^7.3.1"},X={"clean-package":"^2.2.0"},Y="pnpm@10.10.0",Z={node:">=18"},ee={access:"public",registry:"https://registry.npmjs.org/"},f={name:A,version:I,description:M,keywords:W,homepage:F,bugs:G,repository:P,license:_,author:q,sideEffects:H,type:J,imports:z,bin:B,files:K,scripts:Q,dependencies:U,devDependencies:X,packageManager:Y,engines:Z,publishConfig:ee};const k={githubToken:{default:"",type:"string"}},d=new S({projectName:"lobe-i18n",schema:k}),v=n(e=>d.get(e),"getConfig"),te=n(e=>k[e].default,"getDefulatConfig"),oe=n((e,o)=>d.set(e,o),"setConfig"),re=n(()=>{const e=d.store;return{get:v,getDefault:te,set:oe,store:e}},"useConfStore"),se=x(()=>{const[e,o]=$(),{store:t,set:s,getDefault:r}=re(),c=n((l,g)=>{s(l,g),o("")},"setConfig"),i=E(()=>[{children:u(N,{defaultValue:t.githubToken,onSubmit:n(l=>c("githubToken",l),"onSubmit"),placeholder:"Input Github token..."}),defaultValue:r("githubToken"),key:"githubToken",label:"Github token",showValue:!1,value:t.githubToken}],[t]);return u(L,{active:e,items:i,logo:"\u{1F92F}",setActive:o,title:"Lobe Label Config"})}),y=n((e,o)=>{const t=e.split("/"),s=o.split("/");t.length!==2&&(a.error("Wrong target repo, should be owner/repo"),process.exit(1)),s.length!==2&&(a.error("Wrong source repo, should be owner/repo"),process.exit(1));const[r,c]=s,[i,l]=t;return{getOwner:r,getRepo:c,targetOwner:i,targetRepo:l}},"formatRepoProps"),m=n(()=>{const e=v("githubToken");return e||(a.error("Need token!"),process.exit(1)),new V({auth:`token ${e}`})},"octokitClient"),h=n(async(e,o,t=1)=>{const s=m();let{data:r}=await s.issues.listLabelsForRepo({owner:e,page:t,per_page:100,repo:o});return r.length>=100&&(r=r.concat(await h(e,o,t+1))),r},"queryLabels"),ne=n(async(e,o,t,s,r)=>{const c=m();try{await c.issues.createLabel({color:s,description:r,name:t,owner:e,repo:o}),a.success(`[${t}] created!`)}catch(i){a.error(`[${t}] error:`,i)}},"createLabel"),ae=n(async(e,o,t)=>{await m().issues.deleteLabel({name:t,owner:e,repo:o}),a.success(`[${t}] deleted!`)},"deleteLabel"),ie=n(async(e,o)=>{const{targetOwner:t,targetRepo:s}=y(e,o);try{const r=await h(t,s);if(r?.length>0){for await(let{name:c}of r)await ae(t,s,c);a.info(`Delete ${r.length} labels success`)}}catch(r){a.error(r)}},"Delete"),ce=n(async(e,o)=>{await ie(e,o);const{getOwner:t,getRepo:s,targetOwner:r,targetRepo:c}=y(e,o);try{const i=await h(t,s);if(i?.length>0)for(const l of i){const{name:g,color:C,description:O}=l;await ne(r,c,g,C,O)}else a.warn(`${t}/${s} labels is empty`);a.info(`Copy ${i.length} labels success`)}catch(i){a.error(i)}},"Copy"),le=j({pkg:f,shouldNotifyInNpmScript:!0});le.notify({isGlobal:!0});const w=new R;w.name("lobe-label").description(f.description).version(f.version).addOption(new b("-o, --config","Setup lobe-label preferences")).addOption(new b("-t, --target <repo>","Target repo")).addOption(new b("-s, --source <repo>","Source repo").default("canisminor1990/canisminor-template")).parse();const p=w.opts();p.config?D(u(se,{})):p.target?ce(p.target,p.source):a.error("Please input target repo with -t owner/repo");