UNPKG

resedit-cli

Version:

Command-line tool for editing Windows Resource data in executable binaries

57 lines (56 loc) 2.3 kB
import { readFile } from '../fs.js'; import * as log from '../log.js'; function arrayBufferViewToArrayBuffer(view) { return view.buffer.slice(view.byteOffset, view.byteOffset + view.byteLength); } export default async function emitRawResources(res, lang, raw) { var _a; if (!raw || raw.length === 0) { return false; } log.info(`[raw] Emit raw resources. (count = ${raw.length})`); for (let i = 0, len = raw.length; i < len; ++i) { const item = raw[i]; const type = item.type; const id = item.id; const itemLang = typeof item.lang === 'undefined' ? lang : item.lang; let value; if (typeof item.value !== 'undefined') { if (typeof item.value === 'string') { log.debug(`[raw] Use string resource data (type = ${type}, ID = ${id}, lang = ${itemLang})`); value = arrayBufferViewToArrayBuffer(Buffer.from(item.value, 'utf8')); } else if (ArrayBuffer.isView(item.value)) { log.debug(`[raw] Use ArrayBufferView resource data (type = ${type}, ID = ${id}, lang = ${itemLang})`); value = arrayBufferViewToArrayBuffer(item.value); } else { log.debug(`[raw] Use ArrayBuffer resource data (type = ${type}, ID = ${id}, lang = ${itemLang})`); value = item.value; } } else { log.debug(`[raw] Load resource data from file '${(_a = item.file) !== null && _a !== void 0 ? _a : ''}' (type = ${type}, ID = ${id}, lang = ${itemLang})`); value = arrayBufferViewToArrayBuffer(await readFile(item.file)); } const ent = res.entries .filter((e) => e.type === type && e.id === id && e.lang === itemLang) .shift(); if (ent) { log.debug(`[raw] Replace existing resource data.`); ent.bin = value; } else { log.debug(`[raw] Add resource data.`); res.entries.push({ type, id, lang: itemLang, codepage: 1200, bin: value, }); } } log.info(`[raw] Done.`); return true; }