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
JavaScript
;
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