resedit-cli
Version:
Command-line tool for editing Windows Resource data in executable binaries
45 lines (44 loc) • 1.85 kB
JavaScript
import * as ResEdit from 'resedit';
import * as log from '../log.js';
export default async function emitVersion(res, lang, isExe, version) {
if (!version) {
return false;
}
log.info('[version] Emit version.');
const oldVers = ResEdit.Resource.VersionInfo.fromEntries(res.entries);
if (oldVers.length > 0) {
log.debug(`[version] Existing version resources will be dropped. (count = ${oldVers.length})`);
}
res.entries = res.entries.filter((e) => e.type !== 16);
const outVersion = ResEdit.Resource.VersionInfo.create({
lang,
fixedInfo: version.fixedInfo,
strings: version.strings.map((s) => {
const actualLanguage = typeof s.lang === 'number' ? s.lang : lang;
log.debug(`[version] Output version string values (lang = ${actualLanguage})`);
return {
lang: actualLanguage,
codepage: 1200,
values: s.values,
};
}),
});
if (oldVers.length) {
log.debug('[version] Use FIXEDINFO from (first) existing version resource.');
Object.assign(outVersion.fixedInfo, oldVers[0].fixedInfo, version.fixedInfo);
}
else {
log.debug(`[version] Make default FIXEDINFO data (isExe = ${isExe ? 'true' : 'false'}).`);
outVersion.fixedInfo.fileFlagsMask = 0x17;
outVersion.fixedInfo.fileFlags = 0;
outVersion.fixedInfo.fileOS =
ResEdit.Resource.VersionFileOS.NT_Windows32;
outVersion.fixedInfo.fileType = isExe
? ResEdit.Resource.VersionFileType.App
: ResEdit.Resource.VersionFileType.DLL;
outVersion.fixedInfo.fileSubtype = 0;
}
outVersion.outputToResourceEntries(res.entries);
log.info('[version] Done.');
return true;
}