268 lines
6.5 KiB
JavaScript
268 lines
6.5 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.addLicenseToDmg = addLicenseToDmg;
|
|
|
|
function _builderUtil() {
|
|
const data = require("builder-util");
|
|
|
|
_builderUtil = function () {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _license() {
|
|
const data = require("app-builder-lib/out/util/license");
|
|
|
|
_license = function () {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _fsExtra() {
|
|
const data = require("fs-extra");
|
|
|
|
_fsExtra = function () {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _dmgUtil() {
|
|
const data = require("./dmgUtil");
|
|
|
|
_dmgUtil = function () {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _licenseButtons() {
|
|
const data = require("./licenseButtons");
|
|
|
|
_licenseButtons = function () {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
// DropDMG/dmgbuild a in any case (even if no english, but only ru/de) set to 0 (en_US), well, without docs, just believe that's correct
|
|
const DEFAULT_REGION_CODE = 0;
|
|
|
|
async function addLicenseToDmg(packager, dmgPath) {
|
|
// http://www.owsiak.org/?p=700
|
|
const licenseFiles = await (0, _license().getLicenseFiles)(packager);
|
|
|
|
if (licenseFiles.length === 0) {
|
|
return null;
|
|
}
|
|
|
|
const licenseButtonFiles = await (0, _licenseButtons().getLicenseButtonsFile)(packager);
|
|
packager.debugLogger.add("dmg.licenseFiles", licenseFiles);
|
|
packager.debugLogger.add("dmg.licenseButtons", licenseButtonFiles);
|
|
const style = [];
|
|
const rtfs = [];
|
|
const defaultButtons = [];
|
|
let counter = 5000;
|
|
const addedRegionCodes = [];
|
|
|
|
for (const item of licenseFiles) {
|
|
_builderUtil().log.info({
|
|
lang: item.langName
|
|
}, "adding license"); // value from DropDMG, data the same for any language
|
|
// noinspection SpellCheckingInspection
|
|
|
|
|
|
style.push(`data 'styl' (${counter}, "${item.langName}") {
|
|
$"0001 0000 0000 000E 0011 0015 0000 000C"
|
|
$"0000 0000 0000"
|
|
};`);
|
|
let data = `data 'RTF ' (${counter}, "${item.langName}") {\n`;
|
|
const fileData = await (0, _fsExtra().readFile)(item.file, "utf-8");
|
|
const isRtf = item.file.endsWith(".rtf") || item.file.endsWith(".RTF");
|
|
data += isRtf ? (0, _dmgUtil().serializeString)(Buffer.from(fileData).toString("hex")) : wrapInRtf((await (0, _fsExtra().readFile)(item.file, "utf-8")));
|
|
data += "\n};";
|
|
rtfs.push(data);
|
|
defaultButtons.push((await (0, _licenseButtons().getLicenseButtons)(licenseButtonFiles, item.langWithRegion, counter, item.langName)));
|
|
addedRegionCodes.push(getRegionCode(item.langWithRegion));
|
|
counter++;
|
|
}
|
|
|
|
const buffer = Buffer.allocUnsafe((2 + 3 * addedRegionCodes.length) * 2);
|
|
let offset = 0;
|
|
buffer.writeUInt16BE(DEFAULT_REGION_CODE, offset);
|
|
offset += 2;
|
|
buffer.writeUInt16BE(addedRegionCodes.length, offset);
|
|
offset += 2;
|
|
|
|
for (let i = 0; i < addedRegionCodes.length; i++) {
|
|
const regionCode = addedRegionCodes[i];
|
|
buffer.writeUInt16BE(regionCode, offset);
|
|
offset += 2;
|
|
buffer.writeUInt16BE(i, offset);
|
|
offset += 2;
|
|
buffer.writeUInt16BE(
|
|
/* is two byte */
|
|
[14, 51, 52, 53].includes(regionCode) ? 1 : 0, offset);
|
|
offset += 2;
|
|
}
|
|
|
|
const lPic = `data 'LPic' (5000) {\n${(0, _dmgUtil().serializeString)(buffer.toString("hex"))}\n};`;
|
|
const data = style.concat(rtfs).concat(lPic).concat(defaultButtons).join("\n\n");
|
|
packager.debugLogger.add("dmg.licenseResource", data);
|
|
const tempFile = await packager.getTempFile(".r");
|
|
await (0, _fsExtra().outputFile)(tempFile, data);
|
|
await (0, _builderUtil().exec)("hdiutil", ["unflatten", dmgPath]);
|
|
await (0, _builderUtil().exec)("Rez", ["-a", tempFile, "-o", dmgPath]);
|
|
await (0, _builderUtil().exec)("hdiutil", ["flatten", dmgPath]);
|
|
return data;
|
|
}
|
|
|
|
function getRtfUnicodeEscapedString(text) {
|
|
let result = "";
|
|
|
|
for (let i = 0; i < text.length; i++) {
|
|
if (text[i] === "\\" || text[i] === "{" || text[i] === "}" || text[i] === "\n") {
|
|
result += `\\${text[i]}`;
|
|
} else if (text[i] === "\r") {// ignore
|
|
} else if (text.charCodeAt(i) <= 0x7f) {
|
|
result += text[i];
|
|
} else {
|
|
result += `\\u${text.codePointAt(i)}`;
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
function wrapInRtf(text) {
|
|
return ` $"7B5C 7274 6631 5C61 6E73 695C 616E 7369"
|
|
$"6370 6731 3235 325C 636F 636F 6172 7466"
|
|
$"3135 3034 5C63 6F63 6F61 7375 6272 7466"
|
|
$"3833 300A 7B5C 666F 6E74 7462 6C5C 6630"
|
|
$"5C66 7377 6973 735C 6663 6861 7273 6574"
|
|
$"3020 4865 6C76 6574 6963 613B 7D0A 7B5C"
|
|
$"636F 6C6F 7274 626C 3B5C 7265 6432 3535"
|
|
$"5C67 7265 656E 3235 355C 626C 7565 3235"
|
|
$"353B 7D0A 7B5C 2A5C 6578 7061 6E64 6564"
|
|
$"636F 6C6F 7274 626C 3B3B 7D0A 5C70 6172"
|
|
$"645C 7478 3536 305C 7478 3131 3230 5C74"
|
|
$"7831 3638 305C 7478 3232 3430 5C74 7832"
|
|
$"3830 305C 7478 3333 3630 5C74 7833 3932"
|
|
$"305C 7478 3434 3830 5C74 7835 3034 305C"
|
|
$"7478 3536 3030 5C74 7836 3136 305C 7478"
|
|
$"3637 3230 5C70 6172 6469 726E 6174 7572"
|
|
$"616C 5C70 6172 7469 6768 7465 6E66 6163"
|
|
$"746F 7230 0A0A 5C66 305C 6673 3234 205C"
|
|
${(0, _dmgUtil().serializeString)("63663020" + Buffer.from(getRtfUnicodeEscapedString(text)).toString("hex").toUpperCase() + "7D")}`; // ^ to produce correctly splitted output, this two leading chunks from default wrapper appended here
|
|
}
|
|
|
|
function getRegionCode(langWithRegion) {
|
|
const result = regionCodes[langWithRegion];
|
|
|
|
if (result == null) {
|
|
throw new Error(`Cannot determine region code for ${langWithRegion}`);
|
|
}
|
|
|
|
return result;
|
|
} // noinspection SpellCheckingInspection
|
|
|
|
|
|
const regionCodes = {
|
|
en_US: 0,
|
|
fr_FR: 1,
|
|
en_GB: 2,
|
|
de_DE: 3,
|
|
it_IT: 4,
|
|
nl_NL: 5,
|
|
nl_BE: 6,
|
|
sv_SE: 7,
|
|
es_ES: 8,
|
|
da_DK: 9,
|
|
pt_PT: 10,
|
|
fr_CA: 11,
|
|
nb_NO: 12,
|
|
he_IL: 13,
|
|
ja_JP: 14,
|
|
en_AU: 15,
|
|
ar: 16,
|
|
fi_FI: 17,
|
|
fr_CH: 18,
|
|
de_CH: 19,
|
|
el_GR: 20,
|
|
is_IS: 21,
|
|
mt_MT: 22,
|
|
el_CY: 23,
|
|
tr_TR: 24,
|
|
hi_IN: 33,
|
|
ur_PK: 34,
|
|
it_CH: 36,
|
|
ro_RO: 39,
|
|
grc: 40,
|
|
lt_LT: 41,
|
|
pl_PL: 42,
|
|
hu_HU: 43,
|
|
et_EE: 44,
|
|
lv_LV: 45,
|
|
se: 46,
|
|
fo_FO: 47,
|
|
fa_IR: 48,
|
|
ru_RU: 49,
|
|
ga_IE: 50,
|
|
ko_KR: 51,
|
|
zh_CN: 52,
|
|
zh_TW: 53,
|
|
th_TH: 54,
|
|
cs_CZ: 56,
|
|
sk_SK: 57,
|
|
bn: 60,
|
|
be_BY: 61,
|
|
uk_UA: 62,
|
|
sr_RS: 65,
|
|
sl_SI: 66,
|
|
mk_MK: 67,
|
|
hr_HR: 68,
|
|
pt_BR: 71,
|
|
bg_BG: 72,
|
|
ca_ES: 73,
|
|
gd: 75,
|
|
gv: 76,
|
|
br: 77,
|
|
iu_CA: 78,
|
|
cy: 79,
|
|
"ga-Latg_IE": 81,
|
|
en_CA: 82,
|
|
dz_BT: 83,
|
|
hy_AM: 84,
|
|
ka_GE: 85,
|
|
es_419: 86,
|
|
to_TO: 88,
|
|
fr_001: 91,
|
|
de_AT: 92,
|
|
gu_IN: 94,
|
|
pa: 95,
|
|
ur_IN: 96,
|
|
vi_VN: 97,
|
|
fr_BE: 98,
|
|
uz_UZ: 99,
|
|
en_SG: 100,
|
|
nn_NO: 101,
|
|
af_ZA: 102,
|
|
eo: 103,
|
|
mr_IN: 104,
|
|
bo: 105,
|
|
ne_NP: 106,
|
|
kl: 107,
|
|
en_IE: 108
|
|
};
|
|
// __ts-babel@6.0.4
|
|
//# sourceMappingURL=dmgLicense.js.map
|