UNPKG

@shockpkg/ria-packager

Version:

Package for creating Adobe AIR packages

1 lines 35.3 kB
{"version":3,"sources":["packager/bundle/windows.ts"],"names":["join","pathJoin","fse","signatureSet","resedit","rgbaImageCreateImage","rgbaImagePng","rgbaImageLanczos","PathType","IconIco","pathRelativeBaseMatch","pathRelativeBase","bufferToArrayBuffer","PackagerBundle","ResEditNtExecutable","NtExecutable","default","ResEditNtExecutableResource","NtExecutableResource","ResEditResource","Resource","ResEditData","Data","createImage","fromPng","toPng","lanczos","resizeLanczos","img","w","h","r","width","height","PackagerBundleWindows","constructor","path","getAppBinaryPath","_getFilename","getAppFrameworkPath","getSdkBinaryPath","framework","getSdkFrameworkPath","win","_getArchitecture","getVersionStrings","fileVersion","productVersion","versionStrings","values","FileVersion","ProductVersion","_getFileMode","executable","_open","applicationData","frameworkCleanHelpers","appBinaryPath","appFrameworkPath","sdkBinaryPath","sdkFrameworkPath","appBinaryPathFull","appFrameworkPathFull","extractedBinary","extractedFramework","binaryInFrameworkPath","sdk","_openSdk","read","entry","type","RESOURCE_FORK","volumePath","sdkBinaryPathRel","frameworkPathRel","dest","extract","length","copy","preserveTimestamps","Error","_close","_updateResources","_writeResource","destination","data","options","mode","_getResourcePath","outputFile","preserveResourceMtime","mtime","utimes","parts","architecture","_applicationInfoArchitecture","applicationIcon","_encodeApplicationIcon","fileTypeIcons","_encodeFileTypeIcons","icons","exe","from","readFile","res","IconGroupEntry","fromEntries","entries","VersionInfo","lang","codepage","resIdsNext","iconData","ico","IconFile","iconGroupId","replaceIconsForResource","map","icon","entriesById","Map","resource","index","id","entryInfo","get","iconGroup","iconInfo","iconID","generateEntry","versionInfo","createEmpty","setStringValues","uints","_peVersionInts","ms","ls","fixedInfo","fileVersionMS","fileVersionLS","productVersionMS","productVersionLS","outputToResourceEntries","outputResource","writeFile","Buffer","generate","version","split","numbers","part","n","test","NaN","push","_uidIcon","paths","image16x16","image32x32","image48x48","image128x128","has","p","s","_getIcon","modern","applicationIconModern","_encodeIconModern","_encodeIconReference","fileIcons","_getFileTypes","fileTypeIconModern","did","Set","uid","add","addFromPng","encode","icon256","_getIcon256x256Data","image512x512","image1024x1024","d"],"mappings":"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","sourcesContent":["import {\n\tjoin as pathJoin\n} from 'path';\n\nimport fse from 'fs-extra';\nimport {signatureSet} from 'portable-executable-signature';\nimport * as resedit from 'resedit';\nimport * as rgbaImageCreateImage from '@rgba-image/create-image';\nimport * as rgbaImagePng from '@rgba-image/png';\nimport * as rgbaImageLanczos from '@rgba-image/lanczos';\nimport {\n\tPathType\n} from '@shockpkg/archive-files';\nimport {\n\tIconIco\n} from '@shockpkg/icon-encoder';\n\nimport {\n\tpathRelativeBaseMatch,\n\tpathRelativeBase,\n\tbufferToArrayBuffer\n} from '../../util';\nimport {IPackagerResourceOptions} from '../../packager';\nimport {\n\tIIcon,\n\tPackagerBundle\n} from '../bundle';\n\nconst ResEditNtExecutable =\n\tresedit.NtExecutable ||\n\t(resedit as any).default.NtExecutable;\n\nconst ResEditNtExecutableResource =\n\tresedit.NtExecutableResource ||\n\t(resedit as any).default.NtExecutableResource;\n\nconst ResEditResource =\n\tresedit.Resource ||\n\t(resedit as any).default.Resource;\n\nconst ResEditData =\n\tresedit.Data ||\n\t(resedit as any).default.Data;\n\nconst createImage =\n\trgbaImageCreateImage.createImage ||\n\t(rgbaImageCreateImage as any).default.createImage;\n\nconst fromPng =\n\trgbaImagePng.fromPng ||\n\t(rgbaImagePng as any).default.fromPng;\n\nconst toPng =\n\trgbaImagePng.toPng ||\n\t(rgbaImagePng as any).default.toPng;\n\nconst lanczos =\n\trgbaImageLanczos.lanczos ||\n\t(rgbaImageLanczos as any).default.lanczos;\n\n/**\n * Helper function to resize images using lanczos algorithm.\n *\n * @param img Image object.\n * @param w Resized width.\n * @param h Resized height.\n * @returns Resized image.\n */\nfunction resizeLanczos(\n\timg: Readonly<ReturnType<typeof createImage>>,\n\tw: number,\n\th: number\n) {\n\tconst r = createImage(w, h);\n\tlanczos(img, r, 0, 0, img.width, img.height, 0, 0, w, h);\n\treturn r;\n}\n\n/**\n * PackagerBundleWindows constructor.\n *\n * @param path Output path.\n */\nexport class PackagerBundleWindows extends PackagerBundle {\n\t/**\n\t * Create modern application icon resource.\n\t * Enables higher resolution 256x256 icon with PNG compression.\n\t * Higher resolutions resized with lanczos from 512x512 or 1024x1024.\n\t * Default false uses the legacy formats of the official packager.\n\t */\n\tpublic applicationIconModern = false;\n\n\t/**\n\t * Create modern document type icon resource.\n\t * Enables higher resolution 256x256 icon with PNG compression.\n\t * Higher resolutions resized with lanczos from 512x512 or 1024x1024.\n\t * Default false uses the legacy formats of the official packager.\n\t */\n\tpublic fileTypeIconModern = false;\n\n\t/**\n\t * Remove unnecessary helper files from framework.\n\t * The official packages will include these.\n\t */\n\tpublic frameworkCleanHelpers = false;\n\n\t/**\n\t * Optionally preserve resource mtime.\n\t * The official packager does not preserve resource mtimes.\n\t */\n\tpublic preserveResourceMtime = false;\n\n\t/**\n\t * Optionally use specific architecture.\n\t */\n\tpublic architecture: 'x86' | 'x64' | null = null;\n\n\t/**\n\t * Version strings.\n\t *\n\t * @default null\n\t */\n\tpublic fileVersion: string | null = null;\n\n\t/**\n\t * Product version.\n\t *\n\t * @default null\n\t */\n\tpublic productVersion: string | null = null;\n\n\t/**\n\t * Version strings.\n\t *\n\t * @default null\n\t */\n\tpublic versionStrings: {[key: string]: string} | null = null;\n\n\tconstructor(path: string) {\n\t\tsuper(path);\n\t}\n\n\t/**\n\t * Get app binary path.\n\t *\n\t * @returns Binary path.\n\t */\n\tpublic getAppBinaryPath() {\n\t\treturn `${this._getFilename()}.exe`;\n\t}\n\n\t/**\n\t * Get app framework path.\n\t *\n\t * @returns Framework path.\n\t */\n\tpublic getAppFrameworkPath() {\n\t\treturn 'Adobe AIR';\n\t}\n\n\t/**\n\t * Get SDK binary path.\n\t *\n\t * @returns Binary path.\n\t */\n\tpublic getSdkBinaryPath() {\n\t\tconst framework = this.getSdkFrameworkPath();\n\t\treturn `${framework}/Versions/1.0/Resources/CaptiveAppEntry.exe`;\n\t}\n\n\t/**\n\t * Get SDK framework path.\n\t *\n\t * @returns Framework path.\n\t */\n\tpublic getSdkFrameworkPath() {\n\t\tconst win = this._getArchitecture() === 'x64' ? 'win64' : 'win';\n\t\treturn `runtimes/air-captive/${win}/Adobe AIR`;\n\t}\n\n\t/**\n\t * Get all version strings, if any.\n\t *\n\t * @returns Verion strings.\n\t */\n\tpublic getVersionStrings() {\n\t\tconst {fileVersion, productVersion, versionStrings} = this;\n\t\tif (\n\t\t\tfileVersion === null &&\n\t\t\tproductVersion === null &&\n\t\t\tversionStrings === null\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\t\tconst values = {...(versionStrings || {})};\n\t\tif (fileVersion !== null) {\n\t\t\tvalues.FileVersion = fileVersion;\n\t\t}\n\t\tif (productVersion !== null) {\n\t\t\tvalues.ProductVersion = productVersion;\n\t\t}\n\t\treturn values;\n\t}\n\n\t/**\n\t * Get file mode value.\n\t *\n\t * @param executable Is the entry executable.\n\t * @returns File mode.\n\t */\n\tprotected _getFileMode(executable: boolean) {\n\t\treturn executable ? 0b111100100 : 0b110100100;\n\t}\n\n\t/**\n\t * Open implementation.\n\t *\n\t * @param applicationData The application descriptor data.\n\t */\n\tprotected async _open(applicationData: Readonly<Buffer>) {\n\t\tconst {frameworkCleanHelpers} = this;\n\n\t\tconst appBinaryPath = this.getAppBinaryPath();\n\t\tconst appFrameworkPath = this.getAppFrameworkPath();\n\n\t\tconst sdkBinaryPath = this.getSdkBinaryPath();\n\t\tconst sdkFrameworkPath = this.getSdkFrameworkPath();\n\n\t\tconst appBinaryPathFull = pathJoin(this.path, appBinaryPath);\n\t\tconst appFrameworkPathFull = pathJoin(this.path, appFrameworkPath);\n\n\t\tlet extractedBinary = false;\n\t\tlet extractedFramework = false;\n\n\t\tlet binaryInFrameworkPath = '';\n\n\t\t// Extract everything needed from the SDK.\n\t\tconst sdk = await this._openSdk();\n\t\tawait sdk.read(async entry => {\n\t\t\t// Ignore any resource forks.\n\t\t\tif (entry.type === PathType.RESOURCE_FORK) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tconst path = entry.volumePath;\n\n\t\t\tconst sdkBinaryPathRel =\n\t\t\t\tpathRelativeBase(path, sdkBinaryPath, true);\n\t\t\tconst frameworkPathRel =\n\t\t\t\tpathRelativeBase(path, sdkFrameworkPath, true);\n\n\t\t\t// Extract if the framework.\n\t\t\tif (frameworkPathRel !== null) {\n\t\t\t\tconst dest = pathJoin(appFrameworkPathFull, frameworkPathRel);\n\t\t\t\textractedFramework = true;\n\n\t\t\t\t// If also the binary, remember it for later.\n\t\t\t\tif (sdkBinaryPathRel === null) {\n\t\t\t\t\tawait entry.extract(dest);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// If not removing framework binary, copy into framework.\n\t\t\t\t// Remember where to copy again after.\n\t\t\t\t// Otherwise let it be extracted to destination below.\n\t\t\t\tif (!frameworkCleanHelpers) {\n\t\t\t\t\t// Remember the shortest path, not empty.\n\t\t\t\t\tbinaryInFrameworkPath = binaryInFrameworkPath || dest;\n\t\t\t\t\tif (dest.length < binaryInFrameworkPath.length) {\n\t\t\t\t\t\tbinaryInFrameworkPath = dest;\n\t\t\t\t\t}\n\t\t\t\t\tawait entry.extract(dest);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy binary from framework if there.\n\t\t\tif (sdkBinaryPathRel !== null) {\n\t\t\t\tconst dest = pathJoin(appBinaryPathFull, sdkBinaryPathRel);\n\t\t\t\tawait entry.extract(dest);\n\t\t\t\textractedBinary = true;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Optimization to avoid walking unrelated directories if possible.\n\t\t\treturn (\n\t\t\t\tpathRelativeBaseMatch(sdkFrameworkPath, path, true) ||\n\t\t\t\tpathRelativeBaseMatch(sdkBinaryPath, path, true)\n\t\t\t) ? true : null;\n\t\t});\n\n\t\t// If the binary is in framework, copy it.\n\t\tif (binaryInFrameworkPath) {\n\t\t\tawait fse.copy(binaryInFrameworkPath, appBinaryPathFull, {\n\t\t\t\tpreserveTimestamps: true\n\t\t\t});\n\t\t\textractedBinary = true;\n\t\t}\n\n\t\t// Check that required components were extracted.\n\t\tif (!extractedBinary) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to locate binary in SDK: ${sdkBinaryPath}`\n\t\t\t);\n\t\t}\n\t\tif (!extractedFramework) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to locate framework in SDK: ${sdkFrameworkPath}`\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Close implementation.\n\t */\n\tprotected async _close() {\n\t\tawait this._updateResources();\n\t}\n\n\t/**\n\t * Write resource with data implementation.\n\t *\n\t * @param destination Packaged file relative destination.\n\t * @param data Resource data.\n\t * @param options Resource options.\n\t */\n\tprotected async _writeResource(\n\t\tdestination: string,\n\t\tdata: Readonly<Buffer>,\n\t\toptions: Readonly<IPackagerResourceOptions>\n\t) {\n\t\t// Write resource to file.\n\t\tconst mode = this._getFileMode(options.executable || false);\n\t\tconst dest = this._getResourcePath(destination);\n\t\tawait fse.outputFile(dest, data, {\n\t\t\tmode\n\t\t});\n\n\t\t// Optionally preserve mtime information.\n\t\tif (this.preserveResourceMtime) {\n\t\t\tconst {mtime} = options;\n\t\t\tif (mtime) {\n\t\t\t\tawait fse.utimes(dest, mtime, mtime);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Get path to a resource file.\n\t *\n\t * @param parts Path parts.\n\t * @returns Full path.\n\t */\n\tprotected _getResourcePath(...parts: string[]) {\n\t\treturn pathJoin(this.path, ...parts);\n\t}\n\n\t/**\n\t * Get the configured architecture.\n\t * Prefers the architecture option, descriptor file, then default of x86.\n\t *\n\t * @returns Architecture string.\n\t */\n\tprotected _getArchitecture() {\n\t\treturn this.architecture || (\n\t\t\tthis._applicationInfoArchitecture === '64' ? 'x64' : 'x86'\n\t\t);\n\t}\n\n\t/**\n\t * Update main executable resources.\n\t */\n\tprotected async _updateResources() {\n\t\t// Get any version strings.\n\t\tconst versionStrings = this.getVersionStrings();\n\n\t\t// Get all the icons.\n\t\tconst applicationIcon = await this._encodeApplicationIcon();\n\t\tconst fileTypeIcons = await this._encodeFileTypeIcons();\n\n\t\t// Assemble the icons into a list.\n\t\tconst icons = [\n\t\t\t...(applicationIcon ? [applicationIcon] : []),\n\t\t\t...(fileTypeIcons || [])\n\t\t];\n\n\t\t// Skip if nothing to be changed.\n\t\tif (!versionStrings && !icons.length) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Read EXE file and parse resources.\n\t\tconst appBinaryPath = this.getAppBinaryPath();\n\t\tconst appBinaryPathFull = pathJoin(this.path, appBinaryPath);\n\t\tconst exe = ResEditNtExecutable.from(signatureSet(\n\t\t\tbufferToArrayBuffer(await fse.readFile(appBinaryPathFull)),\n\t\t\tnull,\n\t\t\ttrue,\n\t\t\ttrue\n\t\t));\n\t\tconst res = ResEditNtExecutableResource.from(exe);\n\n\t\t// Check that icons and version info not present.\n\t\tif (ResEditResource.IconGroupEntry.fromEntries(res.entries).length) {\n\t\t\tthrow new Error('Executable resources contains unexpected icons');\n\t\t}\n\t\tif (ResEditResource.VersionInfo.fromEntries(res.entries).length) {\n\t\t\tthrow new Error(\n\t\t\t\t'Executable resources contains unexpected version info'\n\t\t\t);\n\t\t}\n\n\t\t// The lang and codepage resource values.\n\t\tconst lang = 1033;\n\t\tconst codepage = 1252;\n\n\t\t// Add icons, resource ID 100 plus.\n\t\tlet resIdsNext = 100;\n\t\tfor (const iconData of icons) {\n\t\t\t// Parse ico.\n\t\t\tconst ico = ResEditData.IconFile.from(\n\t\t\t\tbufferToArrayBuffer(iconData)\n\t\t\t);\n\n\t\t\t// Get the next icon group ID.\n\t\t\tconst iconGroupId = resIdsNext++;\n\n\t\t\t// Add this group to the list.\n\t\t\tResEditResource.IconGroupEntry.replaceIconsForResource(\n\t\t\t\tres.entries,\n\t\t\t\ticonGroupId,\n\t\t\t\t0,\n\t\t\t\tico.icons.map(icon => icon.data)\n\t\t\t);\n\n\t\t\t// List all the resources now in the list.\n\t\t\tconst entriesById = new Map(res.entries.map((resource, index) => [\n\t\t\t\tresource.id,\n\t\t\t\t{index, resource}\n\t\t\t]));\n\n\t\t\t// Get icon group info.\n\t\t\tconst entryInfo = entriesById.get(iconGroupId);\n\t\t\tif (!entryInfo) {\n\t\t\t\tthrow new Error('Internal error');\n\t\t\t}\n\n\t\t\t// Read icon group entry.\n\t\t\tconst [iconGroup] = ResEditResource.IconGroupEntry.fromEntries([\n\t\t\t\tentryInfo.resource\n\t\t\t]);\n\n\t\t\t// Change individual icon resource id values.\n\t\t\tfor (const icon of iconGroup.icons) {\n\t\t\t\tconst iconInfo = entriesById.get(icon.iconID);\n\t\t\t\tif (!iconInfo) {\n\t\t\t\t\tthrow new Error('Internal error');\n\t\t\t\t}\n\n\t\t\t\ticon.iconID = iconInfo.resource.id = resIdsNext++;\n\t\t\t}\n\n\t\t\t// Update the group entry.\n\t\t\tres.entries[entryInfo.index] = iconGroup.generateEntry();\n\t\t}\n\n\t\t// Add the version info if any.\n\t\tif (versionStrings) {\n\t\t\tconst versionInfo = ResEditResource.VersionInfo.createEmpty();\n\t\t\tversionInfo.setStringValues({\n\t\t\t\tlang,\n\t\t\t\tcodepage\n\t\t\t}, versionStrings);\n\n\t\t\t// Update integer values from parsed strings if possible.\n\t\t\tconst {FileVersion, ProductVersion} = versionStrings;\n\t\t\tif (FileVersion) {\n\t\t\t\tconst uints = this._peVersionInts(FileVersion);\n\t\t\t\tif (uints) {\n\t\t\t\t\tconst [ms, ls] = uints;\n\t\t\t\t\tversionInfo.fixedInfo.fileVersionMS = ms;\n\t\t\t\t\tversionInfo.fixedInfo.fileVersionLS = ls;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (ProductVersion) {\n\t\t\t\tconst uints = this._peVersionInts(ProductVersion);\n\t\t\t\tif (uints) {\n\t\t\t\t\tconst [ms, ls] = uints;\n\t\t\t\t\tversionInfo.fixedInfo.productVersionMS = ms;\n\t\t\t\t\tversionInfo.fixedInfo.productVersionLS = ls;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tversionInfo.outputToResourceEntries(res.entries);\n\t\t}\n\n\t\t// Update the codepage on all resources, matches the official packager.\n\t\tfor (const entry of res.entries) {\n\t\t\tentry.codepage = codepage;\n\t\t}\n\n\t\t// Update resources and write EXE file.\n\t\tres.outputResource(exe);\n\t\tawait fse.writeFile(appBinaryPathFull, Buffer.from(exe.generate()));\n\t}\n\n\t/**\n\t * Parse PE version string to integers (MS then LS bits) or null.\n\t *\n\t * @param version Version string.\n\t * @returns Version integers ([MS, LS]) or null.\n\t */\n\tprotected _peVersionInts(version: string): [number, number] | null {\n\t\tconst parts = version.split(/[.,]/);\n\t\tconst numbers = [];\n\t\tfor (const part of parts) {\n\t\t\tconst n = /^\\d+$/.test(part) ? +part : NaN;\n\t\t\tif (!(n >= 0 && n <= 0xFFFF)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tnumbers.push(n);\n\t\t}\n\t\treturn numbers.length ? [\n\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t(((numbers[0] || 0) << 16) | (numbers[1] || 0)) >>> 0,\n\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t(((numbers[2] || 0) << 16) | (numbers[3] || 0)) >>> 0\n\t\t] : null;\n\t}\n\n\t/**\n\t * Calculate UID for icon, or null if none of required icons set.\n\t *\n\t * @param icon Icon info.\n\t * @returns UID string or null.\n\t */\n\tprotected _uidIcon(icon: Readonly<IIcon>) {\n\t\tconst paths = [\n\t\t\ticon.image16x16,\n\t\t\ticon.image32x32,\n\t\t\ticon.image48x48,\n\t\t\ticon.image128x128\n\t\t];\n\n\t\t// If none set, skip.\n\t\tlet has = false;\n\t\tfor (const p of paths) {\n\t\t\tif (p) {\n\t\t\t\thas = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Compute a unique identifier for the used icon set paths.\n\t\treturn has ?\n\t\t\tpaths.map(s => `${s ? s.length : 0}:${s || ''}`).join('|') :\n\t\t\tnull;\n\t}\n\n\t/**\n\t * Encode the application icon if specified.\n\t *\n\t * @returns Encoded icon.\n\t */\n\tprotected async _encodeApplicationIcon() {\n\t\tconst icon = this._getIcon();\n\t\tif (!icon || !this._uidIcon(icon)) {\n\t\t\treturn null;\n\t\t}\n\t\tconst modern = this.applicationIconModern;\n\n\t\t// Encode either a modern or a reference icon.\n\t\treturn modern ?\n\t\t\tthis._encodeIconModern(icon) :\n\t\t\tthis._encodeIconReference(icon);\n\t}\n\n\t/**\n\t * Encode file type icons.\n\t * Avoids writting duplicate icons where the file/data is the same.\n\t *\n\t * @returns Encoded icons.\n\t */\n\tprotected async _encodeFileTypeIcons() {\n\t\tconst fileIcons = this._getFileTypes();\n\t\tif (!fileIcons) {\n\t\t\treturn null;\n\t\t}\n\t\tconst modern = this.fileTypeIconModern;\n\n\t\tconst r = [];\n\t\tconst did = new Set<string>();\n\t\tfor (const [, {icon}] of fileIcons) {\n\t\t\tif (!icon) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Compute a unique identifier for the used icon set paths.\n\t\t\tconst uid = this._uidIcon(icon);\n\t\t\tif (!uid) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Check if file was already generated for this icon set.\n\t\t\tif (did.has(uid)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tdid.add(uid);\n\n\t\t\t// Write either a modern or a reference icon.\n\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\tr.push(await (modern ?\n\t\t\t\tthis._encodeIconModern(icon) :\n\t\t\t\tthis._encodeIconReference(icon)\n\t\t\t));\n\t\t}\n\t\treturn r;\n\t}\n\n\t/**\n\t * Encode icon matching official format.\n\t *\n\t * @param icon Icon info.\n\t * @returns Encoded icon.\n\t */\n\tprotected async _encodeIconReference(icon: Readonly<IIcon>) {\n\t\t// Add icons in the same order official packager would use.\n\t\tconst ico = new IconIco();\n\t\tfor (const path of [\n\t\t\ticon.image16x16,\n\t\t\ticon.image48x48,\n\t\t\ticon.image128x128,\n\t\t\ticon.image32x32\n\t\t]) {\n\t\t\tif (!path) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\tconst data = await fse.readFile(this._getResourcePath(path));\n\t\t\tico.addFromPng(data, false);\n\t\t}\n\t\treturn ico.encode();\n\t}\n\n\t/**\n\t * Encode icon using modern format.\n\t *\n\t * @param icon Icon info.\n\t * @returns Encoded icon.\n\t */\n\tprotected async _encodeIconModern(icon: Readonly<IIcon>) {\n\t\t// Add icons in the same order official packager would use, plus extra.\n\t\tconst ico = new IconIco();\n\t\tfor (const path of [\n\t\t\ticon.image16x16,\n\t\t\ticon.image48x48,\n\t\t\ticon.image128x128,\n\t\t\ticon.image32x32\n\t\t]) {\n\t\t\tif (!path) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\tconst data = await fse.readFile(this._getResourcePath(path));\n\t\t\tico.addFromPng(data, false);\n\t\t}\n\n\t\t// Add a 256x256 icon if possible.\n\t\tconst icon256 = await this._getIcon256x256Data(icon);\n\t\tif (icon256) {\n\t\t\tico.addFromPng(icon256, true);\n\t\t}\n\t\treturn ico.encode();\n\t}\n\n\t/**\n\t * Get 256x256 icon data from icon set.\n\t * Unfortuantely the icon set does not support this icon size.\n\t * This functions will resize a larger icon instead.\n\t * Uses the lanczos algorithm to resize icon down.\n\t *\n\t * @param icon Icon info.\n\t * @returns Encoded icon.\n\t */\n\tprotected async _getIcon256x256Data(icon: Readonly<IIcon>) {\n\t\tconst {image512x512, image1024x1024} = icon;\n\n\t\t// Resize 512x512 icon down if available.\n\t\tif (image512x512) {\n\t\t\tconst d = await fse.readFile(this._getResourcePath(image512x512));\n\t\t\treturn Buffer.from(toPng(\n\t\t\t\tresizeLanczos(fromPng(d), 256, 256)\n\t\t\t));\n\t\t}\n\n\t\t// Resize 1024x1024 icon down if available.\n\t\t// Do this in two half-res steps to minorly improve quality.\n\t\tif (image1024x1024) {\n\t\t\tconst d = await fse.readFile(this._getResourcePath(image1024x1024));\n\t\t\treturn Buffer.from(toPng(\n\t\t\t\tresizeLanczos(resizeLanczos(fromPng(d), 512, 512), 256, 256)\n\t\t\t));\n\t\t}\n\n\t\t// Otherwise no icon to resize down.\n\t\treturn null;\n\t}\n}\n"],"file":"windows.mjs","sourceRoot":"../../../src"}