"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.MakerBase = void 0; const path_1 = __importDefault(require("path")); const fs_extra_1 = __importDefault(require("fs-extra")); const which_1 = __importDefault(require("which")); class Maker { /** * @param configOrConfigFetcher - Either a configuration object for this maker or a simple method that returns such a configuration for a given target architecture * @param platformsToMakeOn - If you want this maker to run on platforms different from `defaultPlatforms` you can provide those platforms here */ constructor(configOrConfigFetcher = {}, platformsToMakeOn) { this.configOrConfigFetcher = configOrConfigFetcher; this.platformsToMakeOn = platformsToMakeOn; this.requiredExternalBinaries = []; Object.defineProperty(this, '__isElectronForgeMaker', { value: true, enumerable: false, configurable: false, }); } get platforms() { if (this.platformsToMakeOn) return this.platformsToMakeOn; return this.defaultPlatforms; } // TODO: Remove this, it is an eye-sore and is a nasty hack to provide forge // v5 style functionality in the new API async prepareConfig(targetArch) { if (typeof this.configOrConfigFetcher === 'function') { this.config = await Promise.resolve(this.configOrConfigFetcher(targetArch)); } else { this.config = this.configOrConfigFetcher; } } /** * Makers must implement this method and return true or false indicating whether * this maker can be run on the current platform. Normally this is just a process.platform * check but it can be a deeper check for dependencies like fake-root or other * required external build tools. * * If the issue is a missing dependency you should log out a HELPFUL error message * telling the developer exactly what is missing and if possible how to get it. */ isSupportedOnCurrentPlatform() { if (this.isSupportedOnCurrentPlatform === Maker.prototype.isSupportedOnCurrentPlatform) { throw new Error(`Maker ${this.name} did not implement the isSupportedOnCurrentPlatform method`); } return true; } /** * Makers must implement this method and return an array of absolute paths * to the artifacts generated by your maker */ // eslint-disable-next-line @typescript-eslint/no-unused-vars async make(opts) { if (this.make === Maker.prototype.make) { throw new Error(`Maker ${this.name} did not implement the make method`); } return []; } /** * Helpers */ /** * Ensures the directory exists and is forced to be empty. * * I.e. If the directory already exists it is deleted and recreated, this * is a destructive operation */ async ensureDirectory(dir) { if (await fs_extra_1.default.pathExists(dir)) { await fs_extra_1.default.remove(dir); } return fs_extra_1.default.mkdirs(dir); } /** * Ensures the path to the file exists and the file does not exist * * I.e. If the file already exists it is deleted and the path created */ async ensureFile(file) { if (await fs_extra_1.default.pathExists(file)) { await fs_extra_1.default.remove(file); } await fs_extra_1.default.mkdirs(path_1.default.dirname(file)); } /** * Checks if the specified binaries exist, which are required for the maker to be used. */ externalBinariesExist() { return this.requiredExternalBinaries.every((binary) => which_1.default.sync(binary, { nothrow: true }) !== null); } /** * Throws an error if any of the binaries don't exist. */ ensureExternalBinariesExist() { if (!this.externalBinariesExist()) { throw new Error(`Cannot make for ${this.name}, the following external binaries need to be installed: ${this.requiredExternalBinaries.join(', ')}`); } } /** * Checks if the given module is installed, used for testing if optional dependencies * are installed or not */ isInstalled(module) { try { require(module); return true; } catch (e) { // Package doesn't exist -- must not be installable on this platform return false; } } /** * Normalize the given semver-formatted version to a 4-part dot delimited version number without * prerelease information for use in Windows apps. */ normalizeWindowsVersion(version) { const noPrerelease = version.replace(/-.*/, ''); return `${noPrerelease}.0`; } } exports.default = Maker; exports.MakerBase = Maker; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvTWFrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0RBQXdCO0FBR3hCLHdEQUEwQjtBQUMxQixrREFBMEI7QUFvQzFCLE1BQThCLEtBQUs7SUFZakM7OztPQUdHO0lBQ0gsWUFBb0Isd0JBQXNELEVBQU8sRUFBWSxpQkFBbUM7UUFBNUcsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF3QztRQUFZLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFUekgsNkJBQXdCLEdBQWEsRUFBRSxDQUFDO1FBVTdDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLHdCQUF3QixFQUFFO1lBQ3BELEtBQUssRUFBRSxJQUFJO1lBQ1gsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLEtBQUs7U0FDcEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLElBQUksSUFBSSxDQUFDLGlCQUFpQjtZQUFFLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQzFELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsOENBQThDO0lBQzlDLEtBQUssQ0FBQyxhQUFhLENBQUMsVUFBcUI7UUFDdkMsSUFBSSxPQUFPLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxVQUFVLEVBQUU7WUFDcEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxPQUFPLENBQUUsSUFBSSxDQUFDLHFCQUFnRCxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDekc7YUFBTTtZQUNMLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUEwQixDQUFDO1NBQy9DO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsNEJBQTRCO1FBQzFCLElBQUksSUFBSSxDQUFDLDRCQUE0QixLQUFLLEtBQUssQ0FBQyxT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