// SPDX-FileCopyrightText: 2021 Johannes Loher // // SPDX-License-Identifier: MIT import fs from "fs-extra"; import path from "node:path"; import yargs from "yargs"; import { hideBin } from "yargs/helpers"; import { destinationDirectory, distDirectory, foundryconfigFile, name } from "./const.js"; /** * Get the data path of Foundry VTT based on what is configured in the {@link foundryconfigFile}. */ function getDataPath() { const config = fs.readJSONSync(foundryconfigFile); if (config?.dataPath) { if (!fs.existsSync(path.resolve(config.dataPath))) { throw new Error("User data path invalid, no Data directory found"); } return path.resolve(config.dataPath); } else { throw new Error(`No user data path defined in ${foundryconfigFile}`); } } /** * Link the built package to the user data folder. * @param {boolean} clean Whether to remove the link instead of creating it */ async function linkPackage(clean) { if (!fs.existsSync(path.resolve("system.json"))) { throw new Error("Could not find system.json"); } const linkDirectory = path.resolve(getDataPath(), "Data", destinationDirectory, name); if (clean) { console.log(`Removing link to built package at ${linkDirectory}.`); await fs.remove(linkDirectory); } else if (!fs.existsSync(linkDirectory)) { console.log(`Linking built package to ${linkDirectory}.`); await fs.ensureDir(path.resolve(linkDirectory, "..")); await fs.symlink(path.resolve(".", distDirectory), linkDirectory); } } const argv = yargs(hideBin(process.argv)).usage("Usage: $0").option("clean", { alias: "c", type: "boolean", default: false, description: "Remove the link instead of creating it", }).argv; const clean = argv.c; await linkPackage(clean);