UNPKG

electron-builder

Version:

A complete solution to package and build a ready for distribution Electron app for MacOS, Windows and Linux with “auto update” support out of the box

134 lines (108 loc) 6.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _bluebirdLstC; function _load_bluebirdLstC() { return _bluebirdLstC = require("bluebird-lst-c"); } var _bluebirdLstC2; function _load_bluebirdLstC2() { return _bluebirdLstC2 = _interopRequireDefault(require("bluebird-lst-c")); } var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); var _platformPackager; function _load_platformPackager() { return _platformPackager = require("../platformPackager"); } var _metadata; function _load_metadata() { return _metadata = require("../metadata"); } var _path; function _load_path() { return _path = _interopRequireWildcard(require("path")); } var _util; function _load_util() { return _util = require("../util/util"); } var _fsExtraP; function _load_fsExtraP() { return _fsExtraP = require("fs-extra-p"); } var _binDownload; function _load_binDownload() { return _binDownload = require("../util/binDownload"); } var _uuid; function _load_uuid() { return _uuid = require("uuid-1345"); } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const appImageVersion = process.platform === "darwin" ? "AppImage-09-07-16-mac" : "AppImage-09-07-16-linux"; //noinspection SpellCheckingInspection const appImageSha256 = process.platform === "darwin" ? "5d4a954876654403698a01ef5bd7f218f18826261332e7d31d93ab4432fa0312" : "ac324e90b502f4e995f6a169451dbfc911bb55c0077e897d746838e720ae0221"; //noinspection SpellCheckingInspection const appImagePathPromise = (0, (_binDownload || _load_binDownload()).getBin)("AppImage", appImageVersion, `https://dl.bintray.com/electron-userland/bin/${ appImageVersion }.7z`, appImageSha256); class AppImageTarget extends (_platformPackager || _load_platformPackager()).TargetEx { constructor(packager, helper, outDir) { super("appImage"); this.packager = packager; this.helper = helper; this.outDir = outDir; this.options = Object.assign({}, this.packager.platformSpecificBuildOptions, this.packager.devMetadata.build[this.name]); // we add X-AppImage-BuildId to ensure that new desktop file will be installed this.desktopEntry = (_bluebirdLstC2 || _load_bluebirdLstC2()).default.promisify((_uuid || _load_uuid()).v1)({ mac: false }).then(uuid => helper.computeDesktopEntry(this.options, "AppRun", { "X-AppImage-Version": `${ packager.appInfo.buildVersion }`, "X-AppImage-BuildId": uuid })); } build(appOutDir, arch) { var _this = this; return (0, (_bluebirdLstC || _load_bluebirdLstC()).coroutine)(function* () { const packager = _this.packager; // avoid spaces in the file name const image = (_path || _load_path()).join(_this.outDir, packager.generateName("AppImage", arch, true)); yield (0, (_util || _load_util()).unlinkIfExists)(image); const appImagePath = yield appImagePathPromise; const args = ["-joliet", "on", "-volid", "AppImage", "-dev", image, "-padding", "0", "-map", appOutDir, "/usr/bin", "-map", (_path || _load_path()).join(__dirname, "..", "..", "templates", "linux", "AppRun.sh"), "/AppRun", // we get executable name in the AppRun by desktop file name, so, must be named as executable "-map", yield _this.desktopEntry, `/${ _this.packager.executableName }.desktop`]; for (let _ref of yield _this.helper.icons) { var _ref2 = _slicedToArray(_ref, 2); let from = _ref2[0]; let to = _ref2[1]; args.push("-map", from, `/usr/share/icons/default/${ to }`); } // must be after this.helper.icons call if (_this.helper.maxIconPath == null) { throw new Error("Icon is not provided"); } args.push("-map", _this.helper.maxIconPath, "/.DirIcon"); args.push("-chown_r", "0", "/", "--"); args.push("-zisofs", `level=${ packager.devMetadata.build.compression === "store" ? "0" : "9" }:block_size=128k:by_magic=off`); args.push("set_filter_r", "--zisofs", "/"); yield (0, (_util || _load_util()).exec)(process.env.USE_SYSTEM_FPM === "true" || process.arch !== "x64" ? "xorriso" : (_path || _load_path()).join(appImagePath, "xorriso"), args); yield new (_bluebirdLstC2 || _load_bluebirdLstC2()).default(function (resolve, reject) { const rd = (0, (_fsExtraP || _load_fsExtraP()).createReadStream)((_path || _load_path()).join(appImagePath, arch === (_metadata || _load_metadata()).Arch.ia32 ? "32" : "64", "runtime")); rd.on("error", reject); const wr = (0, (_fsExtraP || _load_fsExtraP()).createWriteStream)(image, { flags: "r+" }); wr.on("error", reject); wr.on("finish", resolve); rd.pipe(wr); }); const fd = yield (0, (_fsExtraP || _load_fsExtraP()).open)(image, "r+"); try { const magicData = new Buffer([0x41, 0x49, 0x01]); yield (0, (_fsExtraP || _load_fsExtraP()).write)(fd, magicData, 0, magicData.length, 8); } finally { yield (0, (_fsExtraP || _load_fsExtraP()).close)(fd); } yield (0, (_fsExtraP || _load_fsExtraP()).chmod)(image, "0755"); packager.dispatchArtifactCreated(image, packager.generateName("AppImage", arch, true)); })(); } } exports.default = AppImageTarget; //# sourceMappingURL=appImage.js.map