1
0
Fork 0
mirror of https://github.com/ninjamuffin99/Funkin.git synced 2025-08-31 19:04:55 +00:00
Funkin/source/funkin/util/macro/HaxelibVersions.hx
Hyper_ 88ed66affa chore: Add null safety to various utility and plugin classes
And add a bit of error handling to CharSelectGF & CharSelectSubState

Co-Authored-By: Linus Torvalds <torvalds@linux-foundation.org>
2025-06-23 14:13:35 -04:00

58 lines
1.7 KiB
Haxe

package funkin.util.macro;
import haxe.io.Path;
@:nullSafety
class HaxelibVersions
{
public static macro function getLibraryVersions():haxe.macro.Expr.ExprOf<Array<String>>
{
#if !display
return macro $v{formatHmmData()};
#else
// `#if display` is used for code completion. In this case returning an
// empty string is good enough; We don't want to call functions on every hint.
var commitHash:Array<String> = [];
return macro $v{commitHash};
#end
}
#if (macro)
@SuppressWarnings('checkstyle:Dynamic')
static function formatHmmData():Array<String>
{
var result:Array<String> = [];
var hmmData:Dynamic = haxe.Json.parse(sys.io.File.getContent(#if ios '../../../../../' + #end 'hmm.json'));
var dependencies:Array<Dynamic> = cast hmmData.dependencies;
for (library in dependencies)
{
switch (library.type)
{
case 'haxelib':
result.push('${library.name} haxelib(${library.version ?? 'None'})');
case 'git':
result.push('${library.name} git(${library.url}/${library.dir ?? ''}:${library.ref ?? 'None'}');
case 'mercurial':
result.push('${library.name} mercurial(${library.url}/${library.dir ?? ''}:${library.ref ?? 'None'})');
case 'dev':
result.push('${library.name} dev(${library.path})');
case ty:
throw 'Unhandled hmm library type ${ty}';
}
}
return result;
}
static function readLibraryCurrentVersion(libraryName:String):String
{
var path = Path.join([Path.addTrailingSlash(Sys.getCwd()), '.haxelib', libraryName, '.current']);
// This is compile time so we should always have Sys available.
var result = sys.io.File.getContent(path);
return result;
}
#end
}