88
99import fs from "fs" ;
1010import path , { resolve } from "path" ;
11- import { env } from "process" ;
1211import Juke from "juke-build" ;
1312import { DownloadCF , GetModInfo } from "./lib/curseforge.js" ;
1413import { CodegenAllTarget } from "./codegen/target-all.js" ;
14+ import { z } from "zod" ;
15+ import { progressNumber } from "./lib/log.js"
1516
1617Juke . chdir ( "../.." , import . meta. url ) ;
1718Juke . setup ( { file : import . meta. url } ) . then ( ( code ) => {
@@ -113,27 +114,23 @@ export const ModeParameter = new Juke.Parameter({
113114 type : "string"
114115} )
115116
116- // for windows users, go do -> --key=curseforgekey
117- // not recommended, go use env vars!!
118- export const KeyParameter = new Juke . Parameter ( {
119- type : "string"
120- } )
121-
122117export const BuildModlistTarget = new Juke . Target ( {
123- parameters : [ KeyParameter ] ,
124118 inputs : [ "manifest.json" ] ,
125119 outputs : [ "dist/modlist.html" ] ,
126- executes : async ( { get } ) => {
127- if ( ! env . CFCORE_API_TOKEN && ! get ( KeyParameter ) ) {
128- Juke . logger . error ( "CFCORE_API_TOKEN env var is required for downloading mods." ) ;
129- throw new Juke . ExitCode ( 1 ) ;
130- }
120+ executes : async ( ) => {
131121 fs . mkdirSync ( "dist" , { recursive : true } )
132- const jsonData = JSON . parse ( fs . readFileSync ( "manifest.json" , "utf-8" ) ) ;
122+ const { files} = z . object ( {
123+ files : z . object ( {
124+ projectID : z . number ( )
125+ } ) . array ( )
126+ } ) . parse (
127+ JSON . parse ( fs . readFileSync ( "manifest.json" , "utf-8" ) )
128+ ) ;
129+ const total = progressNumber ( files . length )
133130 let html = "<ul>\n"
134- for ( const key in jsonData . files ) {
135- const file = jsonData . files [ key ] ;
136- const modInfo = await GetModInfo ( env . CFCORE_API_TOKEN ?? get ( KeyParameter ) , file . projectID ) ;
131+ for ( const [ i , { projectID } ] of files . entries ( ) ) {
132+ const modInfo = await GetModInfo ( projectID ) ;
133+ Juke . logger . info ( `Downloaded: ( ${ total ( i ) } ) Mod info " ${ modInfo . name } "` )
137134 html += `<li><a href=${ modInfo . links . websiteUrl } >${ modInfo . name } (by ${ modInfo . authors [ 0 ] . name } )</a></li>\n` ;
138135 }
139136 html += "</ul>"
@@ -144,11 +141,7 @@ export const BuildModlistTarget = new Juke.Target({
144141export const DownloadModsTarget = new Juke . Target ( {
145142 inputs : [ "manifest.json" ] ,
146143 outputs : ( ) => [ ] , // always run, we have internal logic to check mods now
147- executes : async ( { get } ) => {
148- if ( ! env . CFCORE_API_TOKEN && ! get ( KeyParameter ) ) {
149- Juke . logger . error ( "CFCORE_API_TOKEN env var is required for downloading mods." ) ;
150- throw new Juke . ExitCode ( 1 ) ;
151- }
144+ executes : async ( ) => {
152145 const manifest = JSON . parse ( fs . readFileSync ( "manifest.json" , "utf-8" ) ) ;
153146
154147 fs . mkdirSync ( "dist/modcache" , { recursive : true } )
@@ -217,7 +210,7 @@ export const DownloadModsTarget = new Juke.Target({
217210
218211 for ( const modID of mIdToDownload ) {
219212 const file = dataKeys [ modID ] ;
220- const res = await DownloadCF ( env . CFCORE_API_TOKEN ?? get ( KeyParameter ) , {
213+ const res = await DownloadCF ( {
221214 modID,
222215 modFileID : file . fileID
223216 } , "dist/modcache/" ) ;
@@ -338,16 +331,12 @@ export const BuildAllTarget = new Juke.Target({
338331
339332export const UploadTarget = new Juke . Target ( {
340333 dependsOn : [ BuildAllTarget ] ,
341- parameters : [ ModeParameter , KeyParameter ] ,
334+ parameters : [ ModeParameter ] ,
342335 inputs : [
343336 "dist/client.zip" ,
344337 "dist/server.zip" ,
345338 ] ,
346339 executes : async ( { get } ) => {
347- if ( ! env . CFCORE_API_TOKEN && ! get ( KeyParameter ) ) {
348- Juke . logger . error ( "CFCORE_API_TOKEN env var is required for downloading mods." ) ;
349- throw new Juke . ExitCode ( 1 ) ;
350- }
351340 get ( ModeParameter ) ;
352341 } ,
353342} )
0 commit comments