@tobylai/qmcli 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/qmcli.cjs +2 -2
  2. package/package.json +1 -1
package/dist/qmcli.cjs CHANGED
@@ -121,7 +121,7 @@ Reset: remove the entries you want to reset
121
121
  <AppenderRef ref="File"/>
122
122
  </Root>
123
123
  </Loggers>
124
- </Configuration>`;var lf=require("node:crypto");function uf(e){let t=H.get("users");t.push(e),H.set("users",t)}function ff(e){let t=H.get("users"),r=t.findIndex(n=>n.uuid===e.uuid);r!==-1&&(t.splice(r,1),H.set("users",t))}function Gn(){return H.get("users")}function xf(e){let t=(0,lf.createHash)("md5").update(`OfflinePlayer:${e}`,"utf8").digest();return t[6]=t[6]&15|48,t[8]=t[8]&63|128,t.subarray(0,4).toString("hex")+"-"+t.subarray(4,6).toString("hex")+"-"+t.subarray(6,8).toString("hex")+"-"+t.subarray(8,10).toString("hex")+"-"+t.subarray(10,16).toString("hex")}function df(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)}var Wn={name:"@tobylai/qmcli",version:"0.2.1",description:"A quick minecraft launcher command-line interface",type:"module",bin:{qmcli:"dist/qmcli.cjs"},scripts:{},keywords:["minecraft","cli"],author:"tobylai-toby",license:"MIT",dependencies:{},devDependencies:{},publishConfig:{registry:"https://registry.npmjs.org/",access:"public"}};var J0=R(require("node:path")),Rr=R(require("node:fs"));var dt={defaultMerge:Symbol("deepmerge-ts: default merge"),skip:Symbol("deepmerge-ts: skip")},yD={defaultMerge:dt.defaultMerge};function Dm(e,t){return t}function bm(e,t){return e.filter(r=>r!==void 0)}var hf;(function(e){e[e.NOT=0]="NOT",e[e.RECORD=1]="RECORD",e[e.ARRAY=2]="ARRAY",e[e.SET=3]="SET",e[e.MAP=4]="MAP",e[e.OTHER=5]="OTHER"})(hf||(hf={}));function pf(e){return typeof e!="object"||e===null?0:Array.isArray(e)?2:Em(e)?1:e instanceof Set?3:e instanceof Map?4:5}function ym(e){let t=new Set;for(let r of e)for(let n of[...Object.keys(r),...Object.getOwnPropertySymbols(r)])t.add(n);return t}function vm(e,t){return typeof e=="object"&&Object.prototype.propertyIsEnumerable.call(e,t)}function gf(e){let t=0,r=e[0]?.[Symbol.iterator]();return{[Symbol.iterator](){return{next(){do{if(r===void 0)return{done:!0,value:void 0};let n=r.next();if(n.done===!0){t+=1,r=e[t]?.[Symbol.iterator]();continue}return{done:!1,value:n.value}}while(!0)}}}}}var mf=["[object Object]","[object Module]"];function Em(e){if(!mf.includes(Object.prototype.toString.call(e)))return!1;let{constructor:t}=e;if(t===void 0)return!0;let r=t.prototype;return!(r===null||typeof r!="object"||!mf.includes(Object.prototype.toString.call(r))||!r.hasOwnProperty("isPrototypeOf"))}function Cm(e,t,r){let n={};for(let i of ym(e)){let s=[];for(let c of e)vm(c,i)&&s.push(c[i]);if(s.length===0)continue;let o=t.metaDataUpdater(r,{key:i,parents:e}),a=_f(s,t,o);a!==dt.skip&&(i==="__proto__"?Object.defineProperty(n,i,{value:a,configurable:!0,enumerable:!0,writable:!0}):n[i]=a)}return n}function wm(e){return e.flat()}function Fm(e){return new Set(gf(e))}function Sm(e){return new Map(gf(e))}function Am(e){return e.at(-1)}var zn={mergeRecords:Cm,mergeArrays:wm,mergeSets:Fm,mergeMaps:Sm,mergeOthers:Am};function kt(...e){return Om({})(...e)}function Om(e,t){let r=Bm(e,n);function n(...i){return _f(i,r,t)}return n}function Bm(e,t){return{defaultMergeFunctions:zn,mergeFunctions:{...zn,...Object.fromEntries(Object.entries(e).filter(([r,n])=>Object.hasOwn(zn,r)).map(([r,n])=>n===!1?[r,zn.mergeOthers]:[r,n]))},metaDataUpdater:e.metaDataUpdater??Dm,deepmerge:t,useImplicitDefaultMerging:e.enableImplicitDefaultMerging??!1,filterValues:e.filterValues===!1?void 0:e.filterValues??bm,actions:dt}}function _f(e,t,r){let n=t.filterValues?.(e,r)??e;if(n.length===0)return;if(n.length===1)return Z0(n,t,r);let i=pf(n[0]);if(i!==0&&i!==5){for(let s=1;s<n.length;s++)if(pf(n[s])!==i)return Z0(n,t,r)}switch(i){case 1:return Im(n,t,r);case 2:return Tm(n,t,r);case 3:return Lm(n,t,r);case 4:return Nm(n,t,r);default:return Z0(n,t,r)}}function Im(e,t,r){let n=t.mergeFunctions.mergeRecords(e,t,r);return n===dt.defaultMerge||t.useImplicitDefaultMerging&&n===void 0&&t.mergeFunctions.mergeRecords!==t.defaultMergeFunctions.mergeRecords?t.defaultMergeFunctions.mergeRecords(e,t,r):n}function Tm(e,t,r){let n=t.mergeFunctions.mergeArrays(e,t,r);return n===dt.defaultMerge||t.useImplicitDefaultMerging&&n===void 0&&t.mergeFunctions.mergeArrays!==t.defaultMergeFunctions.mergeArrays?t.defaultMergeFunctions.mergeArrays(e):n}function Lm(e,t,r){let n=t.mergeFunctions.mergeSets(e,t,r);return n===dt.defaultMerge||t.useImplicitDefaultMerging&&n===void 0&&t.mergeFunctions.mergeSets!==t.defaultMergeFunctions.mergeSets?t.defaultMergeFunctions.mergeSets(e):n}function Nm(e,t,r){let n=t.mergeFunctions.mergeMaps(e,t,r);return n===dt.defaultMerge||t.useImplicitDefaultMerging&&n===void 0&&t.mergeFunctions.mergeMaps!==t.defaultMergeFunctions.mergeMaps?t.defaultMergeFunctions.mergeMaps(e):n}function Z0(e,t,r){let n=t.mergeFunctions.mergeOthers(e,t,r);return n===dt.defaultMerge||t.useImplicitDefaultMerging&&n===void 0&&t.mergeFunctions.mergeOthers!==t.defaultMergeFunctions.mergeOthers?t.defaultMergeFunctions.mergeOthers(e):n}var X0=`# QMCLI launcher
124
+ </Configuration>`;var lf=require("node:crypto");function uf(e){let t=H.get("users");t.push(e),H.set("users",t)}function ff(e){let t=H.get("users"),r=t.findIndex(n=>n.uuid===e.uuid);r!==-1&&(t.splice(r,1),H.set("users",t))}function Gn(){return H.get("users")}function xf(e){let t=(0,lf.createHash)("md5").update(`OfflinePlayer:${e}`,"utf8").digest();return t[6]=t[6]&15|48,t[8]=t[8]&63|128,t.subarray(0,4).toString("hex")+"-"+t.subarray(4,6).toString("hex")+"-"+t.subarray(6,8).toString("hex")+"-"+t.subarray(8,10).toString("hex")+"-"+t.subarray(10,16).toString("hex")}function df(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)}var Wn={name:"@tobylai/qmcli",version:"0.2.2",description:"A quick minecraft launcher command-line interface",type:"module",bin:{qmcli:"dist/qmcli.cjs"},scripts:{},keywords:["minecraft","cli"],author:"tobylai-toby",license:"MIT",dependencies:{},devDependencies:{},publishConfig:{registry:"https://registry.npmjs.org/",access:"public"}};var J0=R(require("node:path")),Rr=R(require("node:fs"));var dt={defaultMerge:Symbol("deepmerge-ts: default merge"),skip:Symbol("deepmerge-ts: skip")},yD={defaultMerge:dt.defaultMerge};function Dm(e,t){return t}function bm(e,t){return e.filter(r=>r!==void 0)}var hf;(function(e){e[e.NOT=0]="NOT",e[e.RECORD=1]="RECORD",e[e.ARRAY=2]="ARRAY",e[e.SET=3]="SET",e[e.MAP=4]="MAP",e[e.OTHER=5]="OTHER"})(hf||(hf={}));function pf(e){return typeof e!="object"||e===null?0:Array.isArray(e)?2:Em(e)?1:e instanceof Set?3:e instanceof Map?4:5}function ym(e){let t=new Set;for(let r of e)for(let n of[...Object.keys(r),...Object.getOwnPropertySymbols(r)])t.add(n);return t}function vm(e,t){return typeof e=="object"&&Object.prototype.propertyIsEnumerable.call(e,t)}function gf(e){let t=0,r=e[0]?.[Symbol.iterator]();return{[Symbol.iterator](){return{next(){do{if(r===void 0)return{done:!0,value:void 0};let n=r.next();if(n.done===!0){t+=1,r=e[t]?.[Symbol.iterator]();continue}return{done:!1,value:n.value}}while(!0)}}}}}var mf=["[object Object]","[object Module]"];function Em(e){if(!mf.includes(Object.prototype.toString.call(e)))return!1;let{constructor:t}=e;if(t===void 0)return!0;let r=t.prototype;return!(r===null||typeof r!="object"||!mf.includes(Object.prototype.toString.call(r))||!r.hasOwnProperty("isPrototypeOf"))}function Cm(e,t,r){let n={};for(let i of ym(e)){let s=[];for(let c of e)vm(c,i)&&s.push(c[i]);if(s.length===0)continue;let o=t.metaDataUpdater(r,{key:i,parents:e}),a=_f(s,t,o);a!==dt.skip&&(i==="__proto__"?Object.defineProperty(n,i,{value:a,configurable:!0,enumerable:!0,writable:!0}):n[i]=a)}return n}function wm(e){return e.flat()}function Fm(e){return new Set(gf(e))}function Sm(e){return new Map(gf(e))}function Am(e){return e.at(-1)}var zn={mergeRecords:Cm,mergeArrays:wm,mergeSets:Fm,mergeMaps:Sm,mergeOthers:Am};function kt(...e){return Om({})(...e)}function Om(e,t){let r=Bm(e,n);function n(...i){return _f(i,r,t)}return n}function Bm(e,t){return{defaultMergeFunctions:zn,mergeFunctions:{...zn,...Object.fromEntries(Object.entries(e).filter(([r,n])=>Object.hasOwn(zn,r)).map(([r,n])=>n===!1?[r,zn.mergeOthers]:[r,n]))},metaDataUpdater:e.metaDataUpdater??Dm,deepmerge:t,useImplicitDefaultMerging:e.enableImplicitDefaultMerging??!1,filterValues:e.filterValues===!1?void 0:e.filterValues??bm,actions:dt}}function _f(e,t,r){let n=t.filterValues?.(e,r)??e;if(n.length===0)return;if(n.length===1)return Z0(n,t,r);let i=pf(n[0]);if(i!==0&&i!==5){for(let s=1;s<n.length;s++)if(pf(n[s])!==i)return Z0(n,t,r)}switch(i){case 1:return Im(n,t,r);case 2:return Tm(n,t,r);case 3:return Lm(n,t,r);case 4:return Nm(n,t,r);default:return Z0(n,t,r)}}function Im(e,t,r){let n=t.mergeFunctions.mergeRecords(e,t,r);return n===dt.defaultMerge||t.useImplicitDefaultMerging&&n===void 0&&t.mergeFunctions.mergeRecords!==t.defaultMergeFunctions.mergeRecords?t.defaultMergeFunctions.mergeRecords(e,t,r):n}function Tm(e,t,r){let n=t.mergeFunctions.mergeArrays(e,t,r);return n===dt.defaultMerge||t.useImplicitDefaultMerging&&n===void 0&&t.mergeFunctions.mergeArrays!==t.defaultMergeFunctions.mergeArrays?t.defaultMergeFunctions.mergeArrays(e):n}function Lm(e,t,r){let n=t.mergeFunctions.mergeSets(e,t,r);return n===dt.defaultMerge||t.useImplicitDefaultMerging&&n===void 0&&t.mergeFunctions.mergeSets!==t.defaultMergeFunctions.mergeSets?t.defaultMergeFunctions.mergeSets(e):n}function Nm(e,t,r){let n=t.mergeFunctions.mergeMaps(e,t,r);return n===dt.defaultMerge||t.useImplicitDefaultMerging&&n===void 0&&t.mergeFunctions.mergeMaps!==t.defaultMergeFunctions.mergeMaps?t.defaultMergeFunctions.mergeMaps(e):n}function Z0(e,t,r){let n=t.mergeFunctions.mergeOthers(e,t,r);return n===dt.defaultMerge||t.useImplicitDefaultMerging&&n===void 0&&t.mergeFunctions.mergeOthers!==t.defaultMergeFunctions.mergeOthers?t.defaultMergeFunctions.mergeOthers(e):n}var X0=`# QMCLI launcher
125
125
  isolated: false
126
126
 
127
127
  ram:
@@ -140,7 +140,7 @@ java: ${x}
140
140
  main: ${pt}
141
141
  cp: ${so}
142
142
  args: ${io.join(" ")}
143
- `;z.default.appendFileSync(v,Bf);let oo=z.default.openSync(v,"a"),ao=z.default.openSync(v,"a"),If=(0,Cf.spawnSync)(x,["-cp",so,pt,...io],{stdio:["ignore",oo,ao]});if(z.default.closeSync(oo),z.default.closeSync(ao),If.status!==0)throw console.log(O.red(`Forge processor failed: ${Y}`)),console.log(O.red(`Details logged to: ${v}`)),new Error(`Forge processor failed: ${Y}`);console.log(O.green(y("forge_processor_done",Y)));for(let[Ke,ri]of Object.entries(k)){let jt=this.resolveDataValue(String(Ke),t,r,s,o,n,i,b),fr=this.resolveDataValue(String(ri),t,r,s,o,n,i,b);if(fr&&z.default.existsSync(jt)){let ni=new Uint8Array(z.default.readFileSync(jt));if(await Lt(ni)!==fr)throw new Error(`Forge processor checksum mismatch: ${jt}`)}}}return l}static async install(t,r,n){console.log(O.green(y("forge_installing")));let i=t.mcversion==="1.7.10-pre4"?"1.7.10_pre4":t.mcversion,s=t.mcversion==="1.7.10-pre4"?"prerelease":t.branch??"",o=s?`-${s}`:"",c=`forge-${`${i}-${t.version}${o}`}-installer.jar`,l=pe.default.join(r,"cache");z.default.mkdirSync(l,{recursive:!0});let u=pe.default.join(l,c);(!z.default.existsSync(u)||z.default.statSync(u).size===0)&&await this.downloadInstaller(t,u);let f;try{f=new Xn.default(u)}catch{z.default.unlinkSync(u),await this.downloadInstaller(t,u),f=new Xn.default(u)}let D=this.readZipText(f,"install_profile.json");if(!D)throw new Error("Invalid Forge installer: missing install_profile.json");let d=JSON.parse(D),h;if(d.install&&d.versionInfo)h=this.installOldFormat(d,f,r);else if(d.spec!=null)h=await this.installNewFormat(d,f,r,n,l,u);else throw new Error("Unrecognized Forge installer format");if(h.libraries){let _=J(`${this.mavenRoot}/`);for(let x of h.libraries)if(!x.downloads?.artifact){let v=Ye(x.name);x.downloads={artifact:{path:v,url:(x.url||_)+v}}}}let m=pe.default.join(r,"versions",n,`${n}.json`),p=JSON.parse(z.default.readFileSync(m,"utf-8")),g=Ur(p,h,{id:this.loader,priority:3e4,version:t.version});z.default.writeFileSync(m,JSON.stringify(g,null,4),"utf-8"),console.log(O.green(y("forge_install_complete")))}};var Jn=class extends lr{static loader="neoforged";static apiRoot="https://bmclapi2.bangbang93.com/neoforge/list";static mavenRoot="https://maven.neoforged.net/releases";static mavenBackupRoot="https://maven.neoforged.net/releases";static getInstallerCandidates(t,r,n){let i=r,s=`neoforge-${i}-installer.jar`;return[J(`${this.mavenRoot}/net/neoforged/neoforge/${i}/${s}`),J(`${this.mavenBackupRoot}/net/neoforged/neoforge/${i}/${s}`)]}static async getInstallersFromMcVersion(t){let r=J(`${this.apiRoot}/${t}`),n=await fetch(r,{headers:this.headers});if(!n.ok)return null;let i=await n.json();return!Array.isArray(i)||i.length===0?null:i.map(s=>({version:s.version,mcversion:s.mcversion||t}))}};var Qn=class extends cr{static loader="quilt";static fabricapi="https://meta.quiltmc.org/v3"};function Pr(e){let t=(o,a)=>{if(!o||!a)return!1;for(let c=0;c<o.length-1;c++){let l=o[c],u=o[c+1];if(l==="--launchTarget"&&u===a)return!0}return!1},r=(e.libraries??[]).some(o=>o.name?.startsWith("net.minecraftforge:forge:")),n=(e.libraries??[]).some(o=>o.name?.startsWith("net.neoforged:"));for(let o of e.patches||[]){if(o.mainClass?.includes("fabricmc"))return"fabric";if(o.mainClass?.includes("quiltmc"))return"quilt";if(o.mainClass?.includes("ForgeBootstrap")||t(o.arguments?.game,"forge_client")||t(o.arguments?.game,"forgeclient")||r)return"forge";if(o.mainClass?.includes("neoforge")||t(o.arguments?.game,"neoforgeclient")||n)return"neoforged"}let i=e.mainClass??"",s=e.arguments;return i.includes("fabricmc")?"fabric":i.includes("quiltmc")?"quilt":i.includes("ForgeBootstrap")||t(s?.game,"forge_client")||t(s?.game,"forgeclient")||r?"forge":i.includes("neoforge")||t(s?.game,"neoforgeclient")||n?"neoforged":!1}var Hm={fabric:cr,forge:lr,quilt:Qn,neoforged:Jn};async function Ff(e,t,r){let n=ei.default.join(e,"versions",t),i=JSON.parse(ro.default.readFileSync(ei.default.join(n,t+".json"),{encoding:"utf-8"})),s=Pr(i),o=await he({message:y("auto_install_prompt_select_mod_loader"),choices:[{name:`${s=="fabric"?"\u2705 ":""}Fabric`,value:"fabric",disabled:s!==!1&&s!="fabric"},{name:`${s=="quilt"?"\u2705 ":""}Quilt`,value:"quilt",disabled:s!==!1&&s!="quilt"},{name:`${s=="forge"?"\u2705 ":""}Forge`,value:"forge",disabled:s!==!1&&s!="forge"},{name:`${s=="neoforged"?"\u2705 ":""}NeoForge`,value:"neoforged",disabled:s!==!1&&s!="neoforged"}]}),a=Hm[o];if(s){let c=await he({message:y("auto_install_select_action_prompt"),choices:[{name:y("auto_install_select_action_info"),value:"info",description:y("auto_install_select_action_info_desc")},{name:y("auto_install_select_action_delete"),value:"delete",description:y("auto_install_select_action_delete_desc")}]});if(c=="info")if(console.log(O.green(y("auto_install_info_loader",s))),!i.patches)console.log(O.yellow(y("auto_install_info_err_no_patches")));else{let l=i.patches?.find(u=>u.id==s);if(!l){console.log(O.yellow(y("auto_install_info_err_no_patches_named",s)));return}console.log(O.green(y("auto_install_version_loader",l.version)))}else if(c=="delete"&&await tt({message:y("auto_install_confirm_delete"),default:!1})){let u=i.patches?.findIndex(f=>f.id==s)??-1;if(u==-1){console.log(O.red(y("auto_install_info_err_no_patches_named",s))),console.log(O.red(y("err_failed")));return}i=eo(i,i.patches[u]),ro.default.writeFileSync(ei.default.join(n,t+".json"),JSON.stringify(i,null,4)),console.log(O.green(y("operation_completed")))}}else{let c=await a.getInstallersFromMcVersion(r);if(!c){console.log(O.red(y("auto_install_prompt_no_loaders_found")));return}c.sort((u,f)=>{let D=u.version.split(".")[0]!==void 0?u.version.replace(/-.*$/,"").split(".").map(Number):[0],d=f.version.split(".")[0]!==void 0?f.version.replace(/-.*$/,"").split(".").map(Number):[0];for(let h=0;h<Math.max(D.length,d.length);h++){let m=D[h]??0,p=d[h]??0;if(m!==p)return p-m}return 0});let l=await he({message:y("auto_install_prompt_select_loader_version"),choices:c.map(u=>({name:u.version,value:u}))});console.log(O.green(y("operation_starting"))),await a.install(l,e,t),console.log(O.green(y("operation_completed")))}}var Gm=jn[H.get("lang")];Fu(Gm);var ht=new dr;ht.name("qmcli").description(y("app_desc")).version(Wn.version);async function Sf(){return await he({message:y("select_mc_path_prompt"),choices:H.get("paths").map(e=>({value:e,name:e,description:y("select_mc_path_desc"),short:e}))})}var qr=new dr;qr.name("versions");qr.description(y("cmd_versions_desc"));qr.command("add").description(y("cmd_versions_add_desc")).action(async()=>{let e=await tt({message:y("cmd_versions_add_confirm_show_snapshots")});console.log(O.green(y("cmd_versions_fetching_versions")));let r=(await Su()).filter(a=>e?!0:!(a.type==="snapshot"||a.type==="old_beta"||a.type==="old_alpha")).map(a=>({value:a,name:`${a.id} (${y("mctype."+a.type)})`,description:y("cmd_versions_list_version_desc",a.id,y("mctype."+a.type),a.releaseTime,a.time),short:a.id})),n=await f0({message:y("cmd_versions_add_select_version_prompt"),source(a){return a?r.filter(c=>c.name?.toLowerCase().includes(a.toLowerCase())):r}}),i=await Sf(),s=await Ft({message:y("cmd_versions_enter_game_name_prompt"),default:n.id,validate(a){return a?yu(a)?it.existsSync(no.default.join(De(i),"versions",a))?y("error_game_name_exists",a):!0:y("error_game_name_invalid"):y("error_game_name_required")}});console.log(O.green(y("summary_info"))),console.log(O.green(y("summary_game_name",s))),console.log(O.green(y("summary_version",n.id)));try{let c=await(await fetch(J(n.url))).json();c.javaVersion?.majorVersion&&console.log(O.green(y("summary_java_version",c.javaVersion.majorVersion)))}catch{}if(console.log(O.green(y("summary_minecraft_path",i))),console.log(O.green(y("cmd_versions_add_tips_autoinstall"))),!await tt({message:y("confirm_continue")})){console.log(O.red(y("operation_canceled")));return}console.log(O.green(y("operation_starting"))),await Au(n.url,De(i),s),console.log(O.green(y("operation_completed")))});qr.command("list").description(y("cmd_versions_list_desc")).action(async()=>{let e=await Sf(),t=await Q0(De(e));if(t.length===0){console.log(O.red(y("error_no_game_installed")));return}let r=await he({message:y("cmd_versions_list_select_game_prompt"),choices:t.map(i=>{let s=JSON.parse(it.readFileSync(`${De(e)}/versions/${i}/${i}.json`,"utf-8")),o=Pr(s),a=s.javaVersion?.majorVersion,c=a?` | ${y("summary_java_version",a)}`:"";return{value:i,name:i+(o?` | (\u2705 ${o})`:"")+c,description:y("cmd_versions_list_game_desc",i,Zn(s))+(o?` (\u2705 ${o})`:"")+c,short:i}})}),n=await he({message:y("cmd_versions_list_select_action_prompt"),choices:[{value:"launch",name:y("cmd_versions_action_launch"),description:y("cmd_versions_action_launch_desc")},{value:"edit",name:y("cmd_versions_action_edit"),description:y("cmd_versions_action_edit_desc")},{value:"autoinstall",name:y("cmd_versions_action_autoinstall"),description:y("cmd_versions_action_autoinstall_desc")},{value:"delete",name:y("cmd_versions_action_delete"),description:y("cmd_versions_action_delete_desc")}]});if(n==="launch")console.log(O.green(y("operation_starting"))),await Ef(De(e),r);else if(n==="edit"){let i=Yn(De(e),r),s=ft.dump(i),o=await c0({message:y("cmd_versions_action_edit_prompt"),default:s,postfix:".yml"});Df(De(e),r,ft.load(o)),console.log(O.green(y("cmd_versions_action_edit_saved")))}else if(n==="autoinstall"){let i=JSON.parse(it.readFileSync(`${De(e)}/versions/${r}/${r}.json`,"utf-8"));await Ff(De(e),r,Zn(i)??r)}else n==="delete"&&(await tt({message:y("cmd_versions_action_delete_confirm",r),default:!1})?(console.log(O.green(y("operation_starting"))),vf(De(e),r),console.log(O.green(y("operation_completed")))):console.log(O.red(y("operation_canceled"))))});ht.addCommand(qr);var ur=new dr;ur.name("settings").description(y("cmd_settings_desc"));ur.command("mirror").description(y("cmd_settings_mirror_desc")).action(async()=>{let e=await he({message:y("cmd_settings_mirror_select_prompt",H.get("mirror")),default:H.get("mirror"),choices:[{value:"official",name:y("cmd_settings_mirror_option_official"),description:y("cmd_settings_mirror_option_official_desc")},{value:"bmclapi",name:y("cmd_settings_mirror_option_bmclapi"),description:y("cmd_settings_mirror_option_bmclapi_desc")}]});H.set("mirror",e),console.log(O.green(y("cmd_settings_mirror_set_success",e)))});var Af=ur.command("paths").description(y("cmd_settings_paths_desc"));Af.command("add").description(y("cmd_settings_paths_add_desc")).action(async()=>{let e=H.get("paths"),t=await Ft({message:y("cmd_settings_paths_add_prompt"),validate(n){return n?it.existsSync(De(n))?it.statSync(De(n)).isDirectory()?e.includes(n)||e.includes(De(n))?y("error_path_already_added"):!0:y("error_path_not_directory"):y("error_path_not_exist"):y("error_path_required")}}),r=no.default.resolve(De(t));e.push(r),H.set("paths",e),console.log(O.green(y("cmd_settings_paths_add_success",r)))});Af.command("list").description(y("cmd_settings_paths_list_desc")).action(async()=>{let e=H.get("paths");if(e.length===0){console.log(O.red(y("error_no_path_added")));return}let t=await he({message:y("cmd_settings_paths_list_select_prompt"),choices:e.map(n=>({value:n,name:n,description:y("cmd_settings_paths_list_select_desc"),short:n}))}),r=await he({message:y("cmd_settings_paths_list_select_action_prompt"),choices:[{value:"info",name:y("cmd_settings_paths_list_action_info"),description:y("cmd_settings_paths_list_action_info_desc")},{value:"remove",name:y("cmd_settings_paths_list_action_remove"),description:y("cmd_settings_paths_list_action_remove_desc")}]});if(r==="info"){console.log(O.blue(y("cmd_settings_paths_list_info_path",t)));let n=await Q0(De(t));if(n.length===0){console.log(O.red(y("error_no_game_installed")));return}console.log(O.blue(y("cmd_settings_paths_list_info_games")));for(let i of n){let s=JSON.parse(it.readFileSync(`${De(t)}/versions/${i}/${i}.json`,"utf-8"));console.log(O.blue(y("cmd_settings_paths_list_info_game_entry",i,Zn(s))))}}else r==="remove"&&(await tt({message:y("cmd_settings_paths_list_action_remove_confirm",t),default:!1})?(console.log(O.green(y("operation_starting"))),H.set("paths",e.filter(i=>i!==t)),console.log(O.green(y("operation_completed")))):console.log(O.red(y("operation_canceled"))))});ur.command("lang").description(y("cmd_settings_lang_desc")).action(async()=>{let e=await he({message:y("cmd_settings_lang_select_prompt",H.get("lang")),default:H.get("lang"),choices:Object.keys(jn).map(t=>({value:t,name:`${jn[t].lang_name} (${t})`,short:t}))});H.set("lang",e),console.log(O.green(y("cmd_settings_lang_set_success",e)))});ur.command("java").description(y("cmd_settings_java_desc")).action(async()=>{let e=await Ft({message:y("cmd_settings_java_prompt",H.get("java")),default:H.get("java"),validate(t){return t?!0:y("error_java_required")}});H.set("java",e),console.log(O.green(y("cmd_settings_java_set_success",e)))});ht.addCommand(ur);var ti=new dr;ti.name("users").description(y("cmd_users_desc"));ti.command("add").description(y("cmd_users_add_desc")).action(async()=>{if(await he({message:y("cmd_users_add_select_type_prompt"),choices:[{value:"offline",name:y("cmd_users_add_type_offline"),description:y("cmd_users_add_type_offline_desc")},{value:"microsoft",name:y("cmd_users_add_type_microsoft"),description:y("cmd_users_add_type_microsoft_desc")}]})==="offline"){let t=await Ft({message:y("cmd_users_add_name_prompt"),validate(i){return i?/^[a-zA-Z0-9_]{3,16}$/.test(i)?!0:y("error_name_invalid"):y("error_name_required")}}),r=await Ft({message:y("cmd_users_add_uuid_prompt"),default:xf(t),validate(i){return df(i)?!0:y("error_uuid_invalid")}});uf({name:t,uuid:r,type:"offline"}),console.log(O.green(y("cmd_users_add_success",t)))}});ti.command("list").description(y("cmd_users_list_desc")).action(async()=>{let e=Gn();if(e.length===0){console.log(O.red(y("error_no_users")));return}let t=await he({message:y("cmd_users_list_select_user_prompt"),choices:e.map(n=>({value:n,name:`${n.name} (${n.type})`,description:y("cmd_users_list_user_desc",n.name,n.uuid,n.type),short:n.name}))}),r=await he({message:y("cmd_users_list_select_action_prompt"),choices:[{value:"info",name:y("cmd_users_list_action_info"),description:y("cmd_users_list_action_info_desc")},{value:"delete",name:y("cmd_users_list_action_delete"),description:y("cmd_users_list_action_delete_desc")}]});r==="info"?(console.log(O.green(y("cmd_users_list_info_name",t.name))),console.log(O.green(y("cmd_users_list_info_uuid",t.uuid))),console.log(O.green(y("cmd_users_list_info_type",t.type)))):r==="delete"&&(await tt({message:y("cmd_users_list_action_delete_confirm",t.name),default:!1})?(ff(t),console.log(O.green(y("cmd_users_list_action_delete_success")))):console.log(O.red(y("cmd_users_list_action_delete_cancel"))))});ht.addCommand(ti);ht.args.length===0&&ht.commands.length===0&&ht.help();ht.parse();
143
+ `;z.default.appendFileSync(v,Bf);let oo=z.default.openSync(v,"a"),ao=z.default.openSync(v,"a"),If=(0,Cf.spawnSync)(x,["-cp",so,pt,...io],{stdio:["ignore",oo,ao]});if(z.default.closeSync(oo),z.default.closeSync(ao),If.status!==0)throw console.log(O.red(`Forge processor failed: ${Y}`)),console.log(O.red(`Details logged to: ${v}`)),new Error(`Forge processor failed: ${Y}`);console.log(O.green(y("forge_processor_done",Y)));for(let[Ke,ri]of Object.entries(k)){let jt=this.resolveDataValue(String(Ke),t,r,s,o,n,i,b),fr=this.resolveDataValue(String(ri),t,r,s,o,n,i,b);if(fr&&z.default.existsSync(jt)){let ni=new Uint8Array(z.default.readFileSync(jt));if(await Lt(ni)!==fr)throw new Error(`Forge processor checksum mismatch: ${jt}`)}}}return l}static async install(t,r,n){console.log(O.green(y("forge_installing")));let i=t.mcversion==="1.7.10-pre4"?"1.7.10_pre4":t.mcversion,s=t.mcversion==="1.7.10-pre4"?"prerelease":t.branch??"",o=s?`-${s}`:"",c=`forge-${`${i}-${t.version}${o}`}-installer.jar`,l=pe.default.join(r,"cache");z.default.mkdirSync(l,{recursive:!0});let u=pe.default.join(l,c);(!z.default.existsSync(u)||z.default.statSync(u).size===0)&&await this.downloadInstaller(t,u);let f;try{f=new Xn.default(u)}catch{z.default.unlinkSync(u),await this.downloadInstaller(t,u),f=new Xn.default(u)}let D=this.readZipText(f,"install_profile.json");if(!D)throw new Error("Invalid Forge installer: missing install_profile.json");let d=JSON.parse(D),h;if(d.install&&d.versionInfo)h=this.installOldFormat(d,f,r);else if(d.spec!=null)h=await this.installNewFormat(d,f,r,n,l,u);else throw new Error("Unrecognized Forge installer format");if(h.libraries){let _=J(`${this.mavenRoot}/`);for(let x of h.libraries)if(!x.downloads?.artifact){let v=Ye(x.name);x.downloads={artifact:{path:v,url:(x.url||_)+v}}}}let m=pe.default.join(r,"versions",n,`${n}.json`),p=JSON.parse(z.default.readFileSync(m,"utf-8")),g=Ur(p,h,{id:this.loader,priority:3e4,version:t.version});z.default.writeFileSync(m,JSON.stringify(g,null,4),"utf-8"),console.log(O.green(y("forge_install_complete")))}};var Jn=class extends lr{static loader="neoforged";static apiRoot="https://bmclapi2.bangbang93.com/neoforge/list";static mavenRoot="https://maven.neoforged.net/releases";static mavenBackupRoot="https://maven.neoforged.net/releases";static getInstallerCandidates(t,r,n){let i=r,s=`neoforge-${i}-installer.jar`;return[J(`${this.mavenRoot}/net/neoforged/neoforge/${i}/${s}`),J(`${this.mavenBackupRoot}/net/neoforged/neoforge/${i}/${s}`)]}static async getInstallersFromMcVersion(t){let r=J(`${this.apiRoot}/${t}`),n=await fetch(r,{headers:this.headers});if(!n.ok)return null;let i=await n.json();return!Array.isArray(i)||i.length===0?null:i.map(s=>({version:s.version,mcversion:s.mcversion||t}))}};var Qn=class extends cr{static loader="quilt";static fabricapi="https://meta.quiltmc.org/v3"};function Pr(e){let t=(r,n)=>{if(!r||!n)return!1;for(let i=0;i<r.length-1;i++){let s=r[i],o=r[i+1];if(s==="--launchTarget"&&o===n)return!0}return!1};for(let r of e.patches||[]){if(r.mainClass?.includes("fabricmc"))return"fabric";if(r.mainClass?.includes("quiltmc"))return"quilt";if(r.mainClass?.includes("ForgeBootstrap")||t(r.arguments?.game,"forge_client")||t(r.arguments?.game,"forgeclient"))return"forge";if(r.mainClass?.includes("neoforge")||t(r.arguments?.game,"neoforgeclient"))return"neoforged"}return!1}var Hm={fabric:cr,forge:lr,quilt:Qn,neoforged:Jn};async function Ff(e,t,r){let n=ei.default.join(e,"versions",t),i=JSON.parse(ro.default.readFileSync(ei.default.join(n,t+".json"),{encoding:"utf-8"})),s=Pr(i),o=await he({message:y("auto_install_prompt_select_mod_loader"),choices:[{name:`${s=="fabric"?"\u2705 ":""}Fabric`,value:"fabric",disabled:s!==!1&&s!="fabric"},{name:`${s=="quilt"?"\u2705 ":""}Quilt`,value:"quilt",disabled:s!==!1&&s!="quilt"},{name:`${s=="forge"?"\u2705 ":""}Forge`,value:"forge",disabled:s!==!1&&s!="forge"},{name:`${s=="neoforged"?"\u2705 ":""}NeoForge`,value:"neoforged",disabled:s!==!1&&s!="neoforged"}]}),a=Hm[o];if(s){let c=await he({message:y("auto_install_select_action_prompt"),choices:[{name:y("auto_install_select_action_info"),value:"info",description:y("auto_install_select_action_info_desc")},{name:y("auto_install_select_action_delete"),value:"delete",description:y("auto_install_select_action_delete_desc")}]});if(c=="info")if(console.log(O.green(y("auto_install_info_loader",s))),!i.patches)console.log(O.yellow(y("auto_install_info_err_no_patches")));else{let l=i.patches?.find(u=>u.id==s);if(!l){console.log(O.yellow(y("auto_install_info_err_no_patches_named",s)));return}console.log(O.green(y("auto_install_version_loader",l.version)))}else if(c=="delete"&&await tt({message:y("auto_install_confirm_delete"),default:!1})){let u=i.patches?.findIndex(f=>f.id==s)??-1;if(u==-1){console.log(O.red(y("auto_install_info_err_no_patches_named",s))),console.log(O.red(y("err_failed")));return}i=eo(i,i.patches[u]),ro.default.writeFileSync(ei.default.join(n,t+".json"),JSON.stringify(i,null,4)),console.log(O.green(y("operation_completed")))}}else{let c=await a.getInstallersFromMcVersion(r);if(!c){console.log(O.red(y("auto_install_prompt_no_loaders_found")));return}c.sort((u,f)=>{let D=u.version.split(".")[0]!==void 0?u.version.replace(/-.*$/,"").split(".").map(Number):[0],d=f.version.split(".")[0]!==void 0?f.version.replace(/-.*$/,"").split(".").map(Number):[0];for(let h=0;h<Math.max(D.length,d.length);h++){let m=D[h]??0,p=d[h]??0;if(m!==p)return p-m}return 0});let l=await he({message:y("auto_install_prompt_select_loader_version"),choices:c.map(u=>({name:u.version,value:u}))});console.log(O.green(y("operation_starting"))),await a.install(l,e,t),console.log(O.green(y("operation_completed")))}}var Gm=jn[H.get("lang")];Fu(Gm);var ht=new dr;ht.name("qmcli").description(y("app_desc")).version(Wn.version);async function Sf(){return await he({message:y("select_mc_path_prompt"),choices:H.get("paths").map(e=>({value:e,name:e,description:y("select_mc_path_desc"),short:e}))})}var qr=new dr;qr.name("versions");qr.description(y("cmd_versions_desc"));qr.command("add").description(y("cmd_versions_add_desc")).action(async()=>{let e=await tt({message:y("cmd_versions_add_confirm_show_snapshots")});console.log(O.green(y("cmd_versions_fetching_versions")));let r=(await Su()).filter(a=>e?!0:!(a.type==="snapshot"||a.type==="old_beta"||a.type==="old_alpha")).map(a=>({value:a,name:`${a.id} (${y("mctype."+a.type)})`,description:y("cmd_versions_list_version_desc",a.id,y("mctype."+a.type),a.releaseTime,a.time),short:a.id})),n=await f0({message:y("cmd_versions_add_select_version_prompt"),source(a){return a?r.filter(c=>c.name?.toLowerCase().includes(a.toLowerCase())):r}}),i=await Sf(),s=await Ft({message:y("cmd_versions_enter_game_name_prompt"),default:n.id,validate(a){return a?yu(a)?it.existsSync(no.default.join(De(i),"versions",a))?y("error_game_name_exists",a):!0:y("error_game_name_invalid"):y("error_game_name_required")}});console.log(O.green(y("summary_info"))),console.log(O.green(y("summary_game_name",s))),console.log(O.green(y("summary_version",n.id)));try{let c=await(await fetch(J(n.url))).json();c.javaVersion?.majorVersion&&console.log(O.green(y("summary_java_version",c.javaVersion.majorVersion)))}catch{}if(console.log(O.green(y("summary_minecraft_path",i))),console.log(O.green(y("cmd_versions_add_tips_autoinstall"))),!await tt({message:y("confirm_continue")})){console.log(O.red(y("operation_canceled")));return}console.log(O.green(y("operation_starting"))),await Au(n.url,De(i),s),console.log(O.green(y("operation_completed")))});qr.command("list").description(y("cmd_versions_list_desc")).action(async()=>{let e=await Sf(),t=await Q0(De(e));if(t.length===0){console.log(O.red(y("error_no_game_installed")));return}let r=await he({message:y("cmd_versions_list_select_game_prompt"),choices:t.map(i=>{let s=JSON.parse(it.readFileSync(`${De(e)}/versions/${i}/${i}.json`,"utf-8")),o=Pr(s),a=s.javaVersion?.majorVersion,c=a?` | ${y("summary_java_version",a)}`:"";return{value:i,name:i+(o?` | (\u2705 ${o})`:"")+c,description:y("cmd_versions_list_game_desc",i,Zn(s))+(o?` (\u2705 ${o})`:"")+c,short:i}})}),n=await he({message:y("cmd_versions_list_select_action_prompt"),choices:[{value:"launch",name:y("cmd_versions_action_launch"),description:y("cmd_versions_action_launch_desc")},{value:"edit",name:y("cmd_versions_action_edit"),description:y("cmd_versions_action_edit_desc")},{value:"autoinstall",name:y("cmd_versions_action_autoinstall"),description:y("cmd_versions_action_autoinstall_desc")},{value:"delete",name:y("cmd_versions_action_delete"),description:y("cmd_versions_action_delete_desc")}]});if(n==="launch")console.log(O.green(y("operation_starting"))),await Ef(De(e),r);else if(n==="edit"){let i=Yn(De(e),r),s=ft.dump(i),o=await c0({message:y("cmd_versions_action_edit_prompt"),default:s,postfix:".yml"});Df(De(e),r,ft.load(o)),console.log(O.green(y("cmd_versions_action_edit_saved")))}else if(n==="autoinstall"){let i=JSON.parse(it.readFileSync(`${De(e)}/versions/${r}/${r}.json`,"utf-8"));await Ff(De(e),r,Zn(i)??r)}else n==="delete"&&(await tt({message:y("cmd_versions_action_delete_confirm",r),default:!1})?(console.log(O.green(y("operation_starting"))),vf(De(e),r),console.log(O.green(y("operation_completed")))):console.log(O.red(y("operation_canceled"))))});ht.addCommand(qr);var ur=new dr;ur.name("settings").description(y("cmd_settings_desc"));ur.command("mirror").description(y("cmd_settings_mirror_desc")).action(async()=>{let e=await he({message:y("cmd_settings_mirror_select_prompt",H.get("mirror")),default:H.get("mirror"),choices:[{value:"official",name:y("cmd_settings_mirror_option_official"),description:y("cmd_settings_mirror_option_official_desc")},{value:"bmclapi",name:y("cmd_settings_mirror_option_bmclapi"),description:y("cmd_settings_mirror_option_bmclapi_desc")}]});H.set("mirror",e),console.log(O.green(y("cmd_settings_mirror_set_success",e)))});var Af=ur.command("paths").description(y("cmd_settings_paths_desc"));Af.command("add").description(y("cmd_settings_paths_add_desc")).action(async()=>{let e=H.get("paths"),t=await Ft({message:y("cmd_settings_paths_add_prompt"),validate(n){return n?it.existsSync(De(n))?it.statSync(De(n)).isDirectory()?e.includes(n)||e.includes(De(n))?y("error_path_already_added"):!0:y("error_path_not_directory"):y("error_path_not_exist"):y("error_path_required")}}),r=no.default.resolve(De(t));e.push(r),H.set("paths",e),console.log(O.green(y("cmd_settings_paths_add_success",r)))});Af.command("list").description(y("cmd_settings_paths_list_desc")).action(async()=>{let e=H.get("paths");if(e.length===0){console.log(O.red(y("error_no_path_added")));return}let t=await he({message:y("cmd_settings_paths_list_select_prompt"),choices:e.map(n=>({value:n,name:n,description:y("cmd_settings_paths_list_select_desc"),short:n}))}),r=await he({message:y("cmd_settings_paths_list_select_action_prompt"),choices:[{value:"info",name:y("cmd_settings_paths_list_action_info"),description:y("cmd_settings_paths_list_action_info_desc")},{value:"remove",name:y("cmd_settings_paths_list_action_remove"),description:y("cmd_settings_paths_list_action_remove_desc")}]});if(r==="info"){console.log(O.blue(y("cmd_settings_paths_list_info_path",t)));let n=await Q0(De(t));if(n.length===0){console.log(O.red(y("error_no_game_installed")));return}console.log(O.blue(y("cmd_settings_paths_list_info_games")));for(let i of n){let s=JSON.parse(it.readFileSync(`${De(t)}/versions/${i}/${i}.json`,"utf-8"));console.log(O.blue(y("cmd_settings_paths_list_info_game_entry",i,Zn(s))))}}else r==="remove"&&(await tt({message:y("cmd_settings_paths_list_action_remove_confirm",t),default:!1})?(console.log(O.green(y("operation_starting"))),H.set("paths",e.filter(i=>i!==t)),console.log(O.green(y("operation_completed")))):console.log(O.red(y("operation_canceled"))))});ur.command("lang").description(y("cmd_settings_lang_desc")).action(async()=>{let e=await he({message:y("cmd_settings_lang_select_prompt",H.get("lang")),default:H.get("lang"),choices:Object.keys(jn).map(t=>({value:t,name:`${jn[t].lang_name} (${t})`,short:t}))});H.set("lang",e),console.log(O.green(y("cmd_settings_lang_set_success",e)))});ur.command("java").description(y("cmd_settings_java_desc")).action(async()=>{let e=await Ft({message:y("cmd_settings_java_prompt",H.get("java")),default:H.get("java"),validate(t){return t?!0:y("error_java_required")}});H.set("java",e),console.log(O.green(y("cmd_settings_java_set_success",e)))});ht.addCommand(ur);var ti=new dr;ti.name("users").description(y("cmd_users_desc"));ti.command("add").description(y("cmd_users_add_desc")).action(async()=>{if(await he({message:y("cmd_users_add_select_type_prompt"),choices:[{value:"offline",name:y("cmd_users_add_type_offline"),description:y("cmd_users_add_type_offline_desc")},{value:"microsoft",name:y("cmd_users_add_type_microsoft"),description:y("cmd_users_add_type_microsoft_desc")}]})==="offline"){let t=await Ft({message:y("cmd_users_add_name_prompt"),validate(i){return i?/^[a-zA-Z0-9_]{3,16}$/.test(i)?!0:y("error_name_invalid"):y("error_name_required")}}),r=await Ft({message:y("cmd_users_add_uuid_prompt"),default:xf(t),validate(i){return df(i)?!0:y("error_uuid_invalid")}});uf({name:t,uuid:r,type:"offline"}),console.log(O.green(y("cmd_users_add_success",t)))}});ti.command("list").description(y("cmd_users_list_desc")).action(async()=>{let e=Gn();if(e.length===0){console.log(O.red(y("error_no_users")));return}let t=await he({message:y("cmd_users_list_select_user_prompt"),choices:e.map(n=>({value:n,name:`${n.name} (${n.type})`,description:y("cmd_users_list_user_desc",n.name,n.uuid,n.type),short:n.name}))}),r=await he({message:y("cmd_users_list_select_action_prompt"),choices:[{value:"info",name:y("cmd_users_list_action_info"),description:y("cmd_users_list_action_info_desc")},{value:"delete",name:y("cmd_users_list_action_delete"),description:y("cmd_users_list_action_delete_desc")}]});r==="info"?(console.log(O.green(y("cmd_users_list_info_name",t.name))),console.log(O.green(y("cmd_users_list_info_uuid",t.uuid))),console.log(O.green(y("cmd_users_list_info_type",t.type)))):r==="delete"&&(await tt({message:y("cmd_users_list_action_delete_confirm",t.name),default:!1})?(ff(t),console.log(O.green(y("cmd_users_list_action_delete_success")))):console.log(O.red(y("cmd_users_list_action_delete_cancel"))))});ht.addCommand(ti);ht.args.length===0&&ht.commands.length===0&&ht.help();ht.parse();
144
144
  /*! Bundled license information:
145
145
 
146
146
  js-yaml/dist/js-yaml.mjs:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tobylai/qmcli",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "A quick minecraft launcher command-line interface",
5
5
  "type": "module",
6
6
  "bin": {