2025-01-11 23:49:06 -05:00
using CliFx ;
2024-06-22 12:12:18 -04:00
using CliFx.Attributes ;
using CliFx.Infrastructure ;
2025-01-11 23:49:06 -05:00
using ReCodeItCLI.Utils ;
2024-12-31 13:46:44 -05:00
using ReCodeItLib.Utils ;
using ReCodeItLib.ReMapper ;
2024-06-22 12:12:18 -04:00
2024-12-22 07:04:20 -05:00
namespace ReCodeItCLI.Commands ;
2024-06-22 12:12:18 -04:00
2024-12-31 14:20:44 -05:00
[Command("ReMap", Description = "Generates a re-mapped dll provided a mapping file and dll. If the dll is obfuscated, it will automatically de-obfuscate.")]
2024-06-22 12:39:10 -04:00
public class ReMap : ICommand
2024-06-22 12:12:18 -04:00
{
2024-12-31 13:47:51 -05:00
private ReMapper _remapper { get ; set ; } = new ( ) ;
2024-06-22 12:12:18 -04:00
[CommandParameter(0, IsRequired = true, Description = "The absolute path to your mapping.json file, supports .json and .jsonc")]
2024-12-30 23:50:31 -05:00
public required string MappingJsonPath { get ; init ; }
2024-06-22 12:12:18 -04:00
2024-12-31 14:20:44 -05:00
[CommandParameter(1, IsRequired = true, Description = "The absolute path to your dll, containing all references that it needs to resolve.")]
2024-12-30 23:50:31 -05:00
public required string AssemblyPath { get ; init ; }
2025-01-02 11:47:51 -05:00
2024-06-22 12:12:18 -04:00
public ValueTask ExecuteAsync ( IConsole console )
{
2025-01-11 23:49:06 -05:00
Debugger . TryWaitForDebuggerAttach ( ) ;
2025-01-10 04:13:56 -05:00
2025-01-08 21:48:48 -05:00
DataProvider . Settings . MappingPath = MappingJsonPath ;
2024-06-22 12:12:18 -04:00
var remaps = DataProvider . LoadMappingFile ( MappingJsonPath ) ;
2024-12-30 23:50:31 -05:00
var outPath = Path . GetDirectoryName ( AssemblyPath ) ;
if ( outPath is null )
{
throw new DirectoryNotFoundException ( "OutPath could not be resolved." ) ;
}
2024-06-28 17:13:47 -04:00
2024-12-30 23:50:31 -05:00
_remapper . InitializeRemap ( remaps , AssemblyPath , outPath ) ;
2024-06-22 12:12:18 -04:00
2024-06-26 14:45:54 -04:00
// Wait for log termination
Logger . Terminate ( ) ;
while ( Logger . IsRunning ( ) ) { }
2024-06-22 12:12:18 -04:00
return default ;
}
}