isaacscript
Version:
A command line tool for managing Isaac mods written in TypeScript.
44 lines • 2.26 kB
JavaScript
import { Command } from "@commander-js/extra-typings";
import { copyFileOrDirectory, deleteFileOrDirectory, getPackageManagerExecCommand, } from "complete-node";
import path from "node:path";
import { getConfigFromFile } from "../../configFile.js";
import { MOD_SOURCE_PATH } from "../../constants.js";
import { prepareCustomStages } from "../../customStage.js";
import { execShellString } from "../../exec.js";
import { getPackageManagerUsedForExistingProject } from "../../packageManager.js";
import { getModTargetDirectoryName } from "../../utils.js";
export const copyCommand = new Command()
.command("copy")
.description("Only compile & copy the mod.")
.allowExcessArguments(false) // By default, Commander.js will allow extra positional arguments.
.helpOption("-h, --help", "Display the list of options for this command.")
.option("-v, --verbose", "Enable verbose output.", false)
.action(async (options) => {
await copy(options);
});
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const copyOptions = copyCommand.opts();
async function copy(options) {
const { verbose } = options;
const packageManager = await getPackageManagerUsedForExistingProject();
const config = await getConfigFromFile();
const modTargetDirectoryName = getModTargetDirectoryName(config);
const modTargetPath = path.join(config.modsDirectory, modTargetDirectoryName);
await compileAndCopy(MOD_SOURCE_PATH, modTargetPath, packageManager, config.isaacScriptCommonDev, verbose);
}
export async function compileAndCopy(modSourcePath, modTargetPath, packageManager, isaacScriptCommonDev, verbose) {
await prepareCustomStages(packageManager, isaacScriptCommonDev, verbose);
compile(packageManager, verbose);
await copyMod(modSourcePath, modTargetPath);
}
function compile(packageManager, verbose) {
const command = getPackageManagerExecCommand(packageManager);
execShellString(`${command} tstl`, verbose);
console.log("Mod compiled successfully.");
}
async function copyMod(modSourcePath, modTargetPath) {
await deleteFileOrDirectory(modTargetPath);
await copyFileOrDirectory(modSourcePath, modTargetPath);
console.log("Mod copied successfully.");
}
//# sourceMappingURL=copy.js.map