{"version":3,"file":"rsrc.mjs","names":["Resource","Data","peVersionInts","version","parts","split","numbers","part","n","test","push","length","rsrcPatchIcon","rsrc","iconData","ico","IconFile","from","buffer","slice","byteOffset","byteLength","iconGroup","IconGroupEntry","fromEntries","entries","replaceIconsForResource","id","lang","icons","map","icon","data","rsrcPatchVersion","versionStrings","versionInfo","VersionInfo","languages","getAllLanguagesForStringValues","language","setStringValues","FileVersion","ProductVersion","uints","ms","ls","fixedInfo","fileVersionMS","fileVersionLS","productVersionMS","productVersionLS","outputToResourceEntries"],"sources":["../../../../src/util/internal/windows/rsrc.ts"],"sourcesContent":["import {NtExecutableResource, Resource, Data} from '@shockpkg/resedit';\n\n/**\n * Parse PE version string to integers (MS then LS bits) or null.\n *\n * @param version Version string.\n * @returns Version integers ([MS, LS]) or null.\n */\nfunction peVersionInts(version: string): [number, number] | null {\n\tconst parts = version.split(/[,.]/);\n\tconst numbers = [];\n\tfor (const part of parts) {\n\t\tconst n = /^\\d+$/.test(part) ? +part : -1;\n\t\tif (n < 0 || n > 0xffff) {\n\t\t\treturn null;\n\t\t}\n\t\tnumbers.push(n);\n\t}\n\treturn numbers.length\n\t\t? [\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\t(((numbers[0] || 0) << 16) | (numbers[1] || 0)) >>> 0,\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\t(((numbers[2] || 0) << 16) | (numbers[3] || 0)) >>> 0\n\t\t\t]\n\t\t: null;\n}\n\n/**\n * Replace all the icons in all icon groups.\n *\n * @param rsrc NtExecutableResource instance.\n * @param iconData Icon data.\n */\nexport function rsrcPatchIcon(\n\trsrc: NtExecutableResource,\n\ticonData: Readonly<Uint8Array>\n) {\n\tconst ico = Data.IconFile.from(\n\t\ticonData.buffer.slice(iconData.byteOffset, iconData.byteLength)\n\t);\n\tfor (const iconGroup of Resource.IconGroupEntry.fromEntries(rsrc.entries)) {\n\t\tResource.IconGroupEntry.replaceIconsForResource(\n\t\t\trsrc.entries,\n\t\t\ticonGroup.id,\n\t\t\ticonGroup.lang,\n\t\t\tico.icons.map(icon => icon.data)\n\t\t);\n\t}\n}\n\n/**\n * Update strings if present for all the languages.\n *\n * @param rsrc NtExecutableResource instance.\n * @param versionStrings Version strings.\n */\nexport function rsrcPatchVersion(\n\trsrc: NtExecutableResource,\n\tversionStrings: Readonly<{[key: string]: string}>\n) {\n\tfor (const versionInfo of Resource.VersionInfo.fromEntries(rsrc.entries)) {\n\t\t// Get all the languages, not just available languages.\n\t\tconst languages = versionInfo.getAllLanguagesForStringValues();\n\t\tfor (const language of languages) {\n\t\t\tversionInfo.setStringValues(language, versionStrings);\n\t\t}\n\n\t\t// Update integer values from parsed strings if possible.\n\t\tconst {FileVersion, ProductVersion} = versionStrings;\n\t\tif (FileVersion) {\n\t\t\tconst uints = peVersionInts(FileVersion);\n\t\t\tif (uints) {\n\t\t\t\tconst [ms, ls] = uints;\n\t\t\t\tversionInfo.fixedInfo.fileVersionMS = ms;\n\t\t\t\tversionInfo.fixedInfo.fileVersionLS = ls;\n\t\t\t}\n\t\t}\n\t\tif (ProductVersion) {\n\t\t\tconst uints = peVersionInts(ProductVersion);\n\t\t\tif (uints) {\n\t\t\t\tconst [ms, ls] = uints;\n\t\t\t\tversionInfo.fixedInfo.productVersionMS = ms;\n\t\t\t\tversionInfo.fixedInfo.productVersionLS = ls;\n\t\t\t}\n\t\t}\n\n\t\tversionInfo.outputToResourceEntries(rsrc.entries);\n\t}\n}\n"],"mappings":"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","ignoreList":[]}