{"version":3,"file":"mac.mjs","names":["mkdir","readFile","rename","stat","writeFile","join","pathJoin","basename","dirname","ArchiveDir","createArchiveByFileExtensionOrThrow","PathType","Plist","ValueDict","ValueString","trimExtension","macProjectorMachoPatch","ProjectorSa","ProjectorSaMac","binaryName","iconData","iconFile","infoPlistData","infoPlistFile","pkgInfoData","pkgInfoFile","bundleName","removeFileAssociations","removeInfoPlistStrings","removeCodeSignature","patchWindowTitle","constructor","path","extension","appIconName","n","appRsrcName","appPathMovie","appPathInfoPlist","appPathPkgInfo","moviePath","infoPlistPath","pkgInfoPath","getBinaryPath","getRsrcPath","name","addExt","getIconPath","iconName","getIconData","d","Uint8Array","buffer","byteOffset","byteLength","getInfoPlistData","TextDecoder","decode","getPkgInfoData","TextEncoder","encode","getBundleName","_writePlayer","player","extLower","toLowerCase","archive","isPlayer","st","endsWith","isDirectory","subpaths","nobrowse","filters","_getFilters","patches","_getPatches","extract","entry","dest","filter","match","volumePath","type","FILE","data","patch","read","Error","modify","recursive","setAttributes","ignoreTimes","playerPath","RESOURCE_FORK","startsWith","slice","length","Promise","all","map","p","after","_writeMovie","movieData","getMovieData","_getFilterInfoPlistStrings","_getFilterCodeSignature","Boolean","file","test","_getPatchBinary","_getPatchPkgInfo","_getPatchInfoPlist","_getPatchMovie","infoData","count","customPlist","modifyPlist","xmlOld","lower","indexOf","plist","fromXml","dict","getValue","castAs","set","key","delete","toXml","oldDictValue","oldDict","tasks","binaryOld","value","binaryPathOld","binaryPathNew","push","rsrcPathOld","rsrcPathNew","catch","err","code","oldIconName","iconPathOld","includes","iconPathNew","then","f"],"sources":["../../../src/projector/sa/mac.ts"],"sourcesContent":["import {mkdir, readFile, rename, stat, writeFile} from 'node:fs/promises';\nimport {join as pathJoin, basename, dirname} from 'node:path';\n\nimport {\n\tArchiveDir,\n\tcreateArchiveByFileExtensionOrThrow,\n\tEntry,\n\tPathType\n} from '@shockpkg/archive-files';\nimport {Plist, ValueDict, ValueString} from '@shockpkg/plist-dom';\n\nimport {trimExtension} from '../../util.ts';\nimport {macProjectorMachoPatch} from '../../util/mac.ts';\nimport {IFileFilter, IFilePatch, ProjectorSa} from '../sa.ts';\n\n/**\n * ProjectorSaMac object.\n */\nexport class ProjectorSaMac extends ProjectorSa {\n\t/**\n\t * Binary name, also renames rsrc and icns.\n\t */\n\tpublic binaryName: string | null = null;\n\n\t/**\n\t * Icon data.\n\t */\n\tpublic iconData:\n\t\t| Readonly<Uint8Array>\n\t\t| (() => Readonly<Uint8Array>)\n\t\t| (() => Promise<Readonly<Uint8Array>>)\n\t\t| null = null;\n\n\t/**\n\t * Icon file.\n\t */\n\tpublic iconFile: string | null = null;\n\n\t/**\n\t * Info.plist data.\n\t * Currently only supports XML plist.\n\t */\n\tpublic infoPlistData:\n\t\t| string\n\t\t| Readonly<Uint8Array>\n\t\t| (() => string | Readonly<Uint8Array>)\n\t\t| (() => Promise<string | Readonly<Uint8Array>>)\n\t\t| null = null;\n\n\t/**\n\t * Info.plist file.\n\t * Currently only supports XML plist.\n\t */\n\tpublic infoPlistFile: string | null = null;\n\n\t/**\n\t * PkgInfo data.\n\t */\n\tpublic pkgInfoData:\n\t\t| string\n\t\t| Readonly<Uint8Array>\n\t\t| (() => Readonly<Uint8Array>)\n\t\t| (() => Promise<Readonly<Uint8Array>>)\n\t\t| null = null;\n\n\t/**\n\t * PkgInfo file.\n\t */\n\tpublic pkgInfoFile: string | null = null;\n\n\t/**\n\t * Update the bundle name in Info.plist.\n\t * Possible values:\n\t * - false: Leave untouched.\n\t * - true: Output name.\n\t * - null: Remove value.\n\t * - string: Custom value.\n\t */\n\tpublic bundleName: boolean | string | null = false;\n\n\t/**\n\t * Remove the file associations in Info.plist.\n\t */\n\tpublic removeFileAssociations = false;\n\n\t/**\n\t * Remove InfoPlist.strings localization files if present.\n\t */\n\tpublic removeInfoPlistStrings = false;\n\n\t/**\n\t * Remove the code signature.\n\t * Modern projectors are codesigned so that any changes breaks it.\n\t * No signature is better than a broken one.\n\t */\n\tpublic removeCodeSignature = false;\n\n\t/**\n\t * Attempt to patch the window title with a custom title.\n\t * Currently supports versions 11+.\n\t */\n\tpublic patchWindowTitle: string | null = null;\n\n\t/**\n\t * ProjectorSaMac constructor.\n\t *\n\t * @param path Output path.\n\t */\n\tconstructor(path: string) {\n\t\tsuper(path);\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic get extension() {\n\t\treturn '.app';\n\t}\n\n\t/**\n\t * Get app icon name, custom.\n\t *\n\t * @returns File name.\n\t */\n\tpublic get appIconName() {\n\t\tconst n = this.binaryName;\n\t\treturn n ? `${n}.icns` : null;\n\t}\n\n\t/**\n\t * Get app rsrc name, custom.\n\t *\n\t * @returns File name.\n\t */\n\tpublic get appRsrcName() {\n\t\tconst n = this.binaryName;\n\t\treturn n ? `${n}.rsrc` : null;\n\t}\n\n\t/**\n\t * Get app movie path.\n\t *\n\t * @returns File path.\n\t */\n\tpublic get appPathMovie() {\n\t\treturn 'Contents/Resources/movie.swf';\n\t}\n\n\t/**\n\t * Get app Info.plist path.\n\t *\n\t * @returns File path.\n\t */\n\tpublic get appPathInfoPlist() {\n\t\treturn 'Contents/Info.plist';\n\t}\n\n\t/**\n\t * Get app PkgInfo path.\n\t *\n\t * @returns File path.\n\t */\n\tpublic get appPathPkgInfo() {\n\t\treturn 'Contents/PkgInfo';\n\t}\n\n\t/**\n\t * Get the movie path.\n\t *\n\t * @returns Icon path.\n\t */\n\tpublic get moviePath() {\n\t\treturn pathJoin(this.path, this.appPathMovie);\n\t}\n\n\t/**\n\t * Get the Info.plist path.\n\t *\n\t * @returns Icon path.\n\t */\n\tpublic get infoPlistPath() {\n\t\treturn pathJoin(this.path, this.appPathInfoPlist);\n\t}\n\n\t/**\n\t * Get the PkgInfo path.\n\t *\n\t * @returns Icon path.\n\t */\n\tpublic get pkgInfoPath() {\n\t\treturn pathJoin(this.path, this.appPathPkgInfo);\n\t}\n\n\t/**\n\t * Get the binary path.\n\t *\n\t * @param binaryName Binary name.\n\t * @returns Binary path.\n\t */\n\tpublic getBinaryPath(binaryName: string) {\n\t\treturn pathJoin(this.path, 'Contents/MacOS', binaryName);\n\t}\n\n\t/**\n\t * Get the rsrc path.\n\t *\n\t * @param name The name.\n\t * @param addExt Add extension.\n\t * @returns Rsrc path.\n\t */\n\tpublic getRsrcPath(name: string, addExt = false) {\n\t\tname += addExt ? '.rsrc' : '';\n\t\treturn pathJoin(this.path, 'Contents/Resources', name);\n\t}\n\n\t/**\n\t * Get the icon path.\n\t *\n\t * @param iconName Icon name.\n\t * @returns Icon path.\n\t */\n\tpublic getIconPath(iconName: string) {\n\t\treturn pathJoin(this.path, 'Contents/Resources', iconName);\n\t}\n\n\t/**\n\t * Get icon data if any specified, from data or file.\n\t *\n\t * @returns Icon data or null.\n\t */\n\tpublic async getIconData() {\n\t\tconst {iconData, iconFile} = this;\n\t\tif (iconData) {\n\t\t\treturn typeof iconData === 'function' ? iconData() : iconData;\n\t\t}\n\t\tif (iconFile) {\n\t\t\tconst d = await readFile(iconFile);\n\t\t\treturn new Uint8Array(d.buffer, d.byteOffset, d.byteLength);\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * Get Info.plist data if any specified, from data or file.\n\t *\n\t * @returns Info.plist data or null.\n\t */\n\tpublic async getInfoPlistData() {\n\t\tconst {infoPlistData, infoPlistFile} = this;\n\t\tif (infoPlistData) {\n\t\t\tswitch (typeof infoPlistData) {\n\t\t\t\tcase 'function': {\n\t\t\t\t\tconst d = await infoPlistData();\n\t\t\t\t\treturn typeof d === 'string'\n\t\t\t\t\t\t? d\n\t\t\t\t\t\t: new TextDecoder().decode(d);\n\t\t\t\t}\n\t\t\t\tcase 'string': {\n\t\t\t\t\treturn infoPlistData;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\t// Fall through.\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn new TextDecoder().decode(infoPlistData);\n\t\t}\n\t\tif (infoPlistFile) {\n\t\t\treturn readFile(infoPlistFile, 'utf8');\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * Get PkgInfo data if any specified, from data or file.\n\t *\n\t * @returns PkgInfo data or null.\n\t */\n\tpublic async getPkgInfoData() {\n\t\tconst {pkgInfoData, pkgInfoFile} = this;\n\t\tif (pkgInfoData) {\n\t\t\tswitch (typeof pkgInfoData) {\n\t\t\t\tcase 'function': {\n\t\t\t\t\treturn pkgInfoData();\n\t\t\t\t}\n\t\t\t\tcase 'string': {\n\t\t\t\t\treturn new TextEncoder().encode(pkgInfoData);\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\t// Fall through.\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn pkgInfoData;\n\t\t}\n\t\tif (pkgInfoFile) {\n\t\t\tconst d = await readFile(pkgInfoFile);\n\t\t\treturn new Uint8Array(d.buffer, d.byteOffset, d.byteLength);\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * Get configured bundle name, or null to remove.\n\t *\n\t * @returns New name or null.\n\t */\n\tpublic getBundleName() {\n\t\tconst {bundleName} = this;\n\t\treturn bundleName === true\n\t\t\t? trimExtension(basename(this.path), this.extension, true)\n\t\t\t: bundleName;\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\tprotected async _writePlayer(player: string) {\n\t\tconst {path, extension} = this;\n\t\tconst extLower = extension.toLowerCase();\n\t\tlet archive;\n\t\tlet isPlayer: (path: string) => boolean;\n\t\tlet st = player.toLowerCase().endsWith(extLower)\n\t\t\t? await stat(player)\n\t\t\t: null;\n\t\tif (st?.isDirectory()) {\n\t\t\tconst name = basename(player);\n\t\t\tarchive = new ArchiveDir(dirname(player));\n\t\t\tarchive.subpaths = [name];\n\t\t\t// eslint-disable-next-line jsdoc/require-jsdoc\n\t\t\tisPlayer = (path: string) => path === name;\n\t\t} else {\n\t\t\tst ??= await stat(player);\n\t\t\tarchive = st.isDirectory()\n\t\t\t\t? new ArchiveDir(player)\n\t\t\t\t: createArchiveByFileExtensionOrThrow(player, {\n\t\t\t\t\t\tnobrowse: this.nobrowse\n\t\t\t\t\t});\n\t\t\t// eslint-disable-next-line jsdoc/require-jsdoc\n\t\t\tisPlayer = (path: string) => path.toLowerCase().endsWith(extLower);\n\t\t}\n\n\t\tconst filters = await this._getFilters();\n\t\tconst patches = await this._getPatches();\n\n\t\t/**\n\t\t * Extract entry, and also apply patches if any.\n\t\t *\n\t\t * @param entry Archive entry.\n\t\t * @param dest Output path.\n\t\t */\n\t\tconst extract = async (entry: Entry, dest: string) => {\n\t\t\tfor (const filter of filters) {\n\t\t\t\t// eslint-disable-next-line unicorn/prefer-regexp-test\n\t\t\t\tif (filter.match(entry.volumePath)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (entry.type === PathType.FILE) {\n\t\t\t\tlet data: Uint8Array | null = null;\n\t\t\t\tfor (const patch of patches) {\n\t\t\t\t\t// eslint-disable-next-line unicorn/prefer-regexp-test\n\t\t\t\t\tif (patch.match(entry.volumePath)) {\n\t\t\t\t\t\tif (!data) {\n\t\t\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\t\t\tconst d = await entry.read();\n\t\t\t\t\t\t\tif (!d) {\n\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t`Failed to read: ${entry.volumePath}`\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdata = new Uint8Array(\n\t\t\t\t\t\t\t\td.buffer,\n\t\t\t\t\t\t\t\td.byteOffset,\n\t\t\t\t\t\t\t\td.byteLength\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\t\tdata = await patch.modify(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (data) {\n\t\t\t\t\tawait mkdir(dirname(dest), {recursive: true});\n\t\t\t\t\tawait writeFile(dest, data);\n\t\t\t\t\tawait entry.setAttributes(dest, null, {\n\t\t\t\t\t\tignoreTimes: true\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait entry.extract(dest);\n\t\t};\n\n\t\tlet playerPath = '';\n\t\tawait archive.read(async entry => {\n\t\t\tconst {volumePath, type} = entry;\n\n\t\t\t// No resource forks expected.\n\t\t\tif (type === PathType.RESOURCE_FORK) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Look for the player.\n\t\t\tif (isPlayer(volumePath)) {\n\t\t\t\tif (playerPath) {\n\t\t\t\t\tthrow new Error(`Found multiple players in: ${player}`);\n\t\t\t\t}\n\t\t\t\tplayerPath = volumePath;\n\t\t\t}\n\n\t\t\t// Check if this is the player.\n\t\t\tif (\n\t\t\t\tvolumePath !== playerPath &&\n\t\t\t\t!volumePath.startsWith(`${playerPath}/`)\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst dest = path + volumePath.slice(playerPath.length);\n\t\t\tawait extract(entry, dest);\n\t\t\treturn true;\n\t\t});\n\n\t\tif (!playerPath) {\n\t\t\tthrow new Error(`Failed to locate player in: ${player}`);\n\t\t}\n\n\t\tawait Promise.all(patches.map(async p => p.after()));\n\t}\n\n\t/**\n\t * Write out the projector movie file.\n\t */\n\tprotected async _writeMovie() {\n\t\tconst movieData = await this.getMovieData();\n\t\tif (!movieData) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait writeFile(this.moviePath, movieData);\n\t}\n\n\t/**\n\t * Get filters to apply.\n\t *\n\t * @returns Filter list.\n\t */\n\tprotected async _getFilters() {\n\t\treturn (\n\t\t\tawait Promise.all([\n\t\t\t\tthis._getFilterInfoPlistStrings(),\n\t\t\t\tthis._getFilterCodeSignature()\n\t\t\t])\n\t\t).filter(Boolean) as IFileFilter[];\n\t}\n\n\t/**\n\t * Get filter for InfoPlist.strings.\n\t *\n\t * @returns Filter spec.\n\t */\n\tprotected async _getFilterInfoPlistStrings() {\n\t\tconst {removeInfoPlistStrings} = this;\n\t\tif (!removeInfoPlistStrings) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst filter: IFileFilter = {\n\t\t\t// eslint-disable-next-line jsdoc/require-jsdoc, unicorn/better-regex\n\t\t\tmatch: (file: string) => /\\.lproj\\/InfoPlist\\.strings$/i.test(file)\n\t\t};\n\t\treturn filter;\n\t}\n\n\t/**\n\t * Get filter for code signature paths.\n\t *\n\t * @returns Filter spec.\n\t */\n\tprotected async _getFilterCodeSignature() {\n\t\tconst {removeCodeSignature} = this;\n\t\tif (!removeCodeSignature) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst filter: IFileFilter = {\n\t\t\t// eslint-disable-next-line jsdoc/require-jsdoc\n\t\t\tmatch: (file: string) =>\n\t\t\t\t// eslint-disable-next-line unicorn/better-regex\n\t\t\t\t/\\/(_CodeSignature|CodeResources)(\\/|$)/i.test(file)\n\t\t};\n\t\treturn filter;\n\t}\n\n\t/**\n\t * Get patches to apply.\n\t *\n\t * @returns Patches list.\n\t */\n\tprotected async _getPatches() {\n\t\treturn (\n\t\t\tawait Promise.all([\n\t\t\t\tthis._getPatchBinary(),\n\t\t\t\tthis._getPatchPkgInfo(),\n\t\t\t\tthis._getPatchInfoPlist(),\n\t\t\t\tthis._getPatchMovie()\n\t\t\t])\n\t\t).filter(Boolean) as IFilePatch[];\n\t}\n\n\t/**\n\t * Get patch for PkgInfo.\n\t *\n\t * @returns Patch spec.\n\t */\n\tprotected async _getPatchPkgInfo() {\n\t\tconst infoData = await this.getPkgInfoData();\n\t\tif (!infoData) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet count = 0;\n\t\tconst patch: IFilePatch = {\n\t\t\t/**\n\t\t\t * @inheritdoc\n\t\t\t */\n\t\t\t// eslint-disable-next-line unicorn/better-regex\n\t\t\tmatch: (file: string) => /^[^/]+\\/Contents\\/PkgInfo$/i.test(file),\n\n\t\t\t/**\n\t\t\t * @inheritdoc\n\t\t\t */\n\t\t\tmodify: (data: Uint8Array) => {\n\t\t\t\tcount++;\n\t\t\t\treturn infoData;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @inheritdoc\n\t\t\t */\n\t\t\tafter: async () => {\n\t\t\t\t// Player could omit this file, just write in that case.\n\t\t\t\tif (!count) {\n\t\t\t\t\tconst {pkgInfoPath} = this;\n\t\t\t\t\tawait mkdir(dirname(pkgInfoPath), {recursive: true});\n\t\t\t\t\tawait writeFile(pkgInfoPath, infoData);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn patch;\n\t}\n\n\t/**\n\t * Get patch for binary.\n\t *\n\t * @returns Patch spec.\n\t */\n\tprotected async _getPatchBinary() {\n\t\tconst {removeCodeSignature, patchWindowTitle} = this;\n\t\tif (!(removeCodeSignature || patchWindowTitle !== null)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet count = 0;\n\t\tconst patch: IFilePatch = {\n\t\t\t/**\n\t\t\t * @inheritdoc\n\t\t\t */\n\t\t\tmatch: (file: string) =>\n\t\t\t\t// eslint-disable-next-line unicorn/better-regex\n\t\t\t\t/^[^/]+\\/Contents\\/MacOS\\/[^/]+$/i.test(file),\n\n\t\t\t/**\n\t\t\t * @inheritdoc\n\t\t\t */\n\t\t\tmodify: (data: Uint8Array) => {\n\t\t\t\tdata = macProjectorMachoPatch(data, {\n\t\t\t\t\tremoveCodeSignature,\n\t\t\t\t\tpatchWindowTitle\n\t\t\t\t});\n\t\t\t\tcount++;\n\t\t\t\treturn data;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @inheritdoc\n\t\t\t */\n\t\t\tafter: () => {\n\t\t\t\tif (!count) {\n\t\t\t\t\tthrow new Error('Failed to locate binary for patching');\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn patch;\n\t}\n\n\t/**\n\t * Get patch for Info.plist and dependancies.\n\t *\n\t * @returns Patch spec.\n\t */\n\tprotected async _getPatchInfoPlist() {\n\t\tconst {\n\t\t\tbinaryName,\n\t\t\tappIconName,\n\t\t\tremoveFileAssociations,\n\t\t\tappPathInfoPlist,\n\t\t\tappRsrcName\n\t\t} = this;\n\t\tconst bundleName = this.getBundleName();\n\t\tconst customPlist = await this.getInfoPlistData();\n\t\tconst iconData = await this.getIconData();\n\t\tconst modifyPlist = !!(\n\t\t\tcustomPlist !== null ||\n\t\t\tappIconName ||\n\t\t\tbinaryName ||\n\t\t\tbundleName !== false ||\n\t\t\tremoveFileAssociations\n\t\t);\n\t\tif (!modifyPlist && !iconData) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet count = 0;\n\t\tlet xmlOld: string | null = '';\n\t\tconst lower = modifyPlist ? appPathInfoPlist.toLowerCase() : '';\n\t\tconst patch: IFilePatch = {\n\t\t\t/**\n\t\t\t * @inheritdoc\n\t\t\t */\n\t\t\tmatch: (file: string) =>\n\t\t\t\tmodifyPlist &&\n\t\t\t\tfile.slice(file.indexOf('/') + 1).toLowerCase() === lower,\n\n\t\t\t/**\n\t\t\t * @inheritdoc\n\t\t\t */\n\t\t\tmodify: (data: Uint8Array) => {\n\t\t\t\t// Use a custom plist or the existing one.\n\t\t\t\txmlOld = new TextDecoder().decode(data);\n\t\t\t\tconst plist = new Plist();\n\t\t\t\tplist.fromXml(customPlist || xmlOld);\n\t\t\t\tconst dict = plist.getValue().castAs(ValueDict);\n\n\t\t\t\tif (appIconName) {\n\t\t\t\t\tdict.set('CFBundleIconFile', new ValueString(appIconName));\n\t\t\t\t}\n\n\t\t\t\tif (binaryName) {\n\t\t\t\t\tdict.set('CFBundleExecutable', new ValueString(binaryName));\n\t\t\t\t}\n\n\t\t\t\tif (bundleName !== false) {\n\t\t\t\t\tconst key = 'CFBundleName';\n\t\t\t\t\tif (bundleName === null) {\n\t\t\t\t\t\tdict.delete(key);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdict.set(key, new ValueString(bundleName));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (removeFileAssociations) {\n\t\t\t\t\tdict.delete('CFBundleDocumentTypes');\n\t\t\t\t}\n\n\t\t\t\tdata = new TextEncoder().encode(plist.toXml());\n\t\t\t\tcount++;\n\t\t\t\treturn data;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @inheritdoc\n\t\t\t */\n\t\t\tafter: async () => {\n\t\t\t\tif (modifyPlist && !count) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Failed to locate for update: ${appPathInfoPlist}`\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tlet oldDictValue: ValueDict | null = null;\n\n\t\t\t\t// eslint-disable-next-line jsdoc/require-jsdoc\n\t\t\t\tconst oldDict = async () => {\n\t\t\t\t\tif (!oldDictValue) {\n\t\t\t\t\t\tconst plist = new Plist();\n\t\t\t\t\t\tplist.fromXml(\n\t\t\t\t\t\t\txmlOld ??\n\t\t\t\t\t\t\t\t(await readFile(this.infoPlistPath, 'utf8'))\n\t\t\t\t\t\t);\n\t\t\t\t\t\toldDictValue = plist.getValue().castAs(ValueDict);\n\t\t\t\t\t}\n\t\t\t\t\treturn oldDictValue;\n\t\t\t\t};\n\n\t\t\t\tconst tasks = [];\n\n\t\t\t\tif (binaryName) {\n\t\t\t\t\tconst binaryOld = (await oldDict())\n\t\t\t\t\t\t.getValue('CFBundleExecutable')\n\t\t\t\t\t\t.castAs(ValueString).value;\n\n\t\t\t\t\tconst binaryPathOld = this.getBinaryPath(binaryOld);\n\t\t\t\t\tconst binaryPathNew = this.getBinaryPath(binaryName);\n\t\t\t\t\ttasks.push(async () =>\n\t\t\t\t\t\trename(binaryPathOld, binaryPathNew)\n\t\t\t\t\t);\n\n\t\t\t\t\tconst rsrcPathOld = this.getRsrcPath(binaryOld, true);\n\t\t\t\t\tif (!appRsrcName) {\n\t\t\t\t\t\tthrow new Error('Internal error');\n\t\t\t\t\t}\n\n\t\t\t\t\tconst rsrcPathNew = this.getRsrcPath(appRsrcName);\n\t\t\t\t\ttasks.push(async () =>\n\t\t\t\t\t\trename(rsrcPathOld, rsrcPathNew).catch(err => {\n\t\t\t\t\t\t\t// The rsrc file does not exist in 35+.\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t!err ||\n\t\t\t\t\t\t\t\t(err as {code: string}).code !== 'ENOENT'\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tthrow err;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (appIconName || iconData) {\n\t\t\t\t\tconst oldIconName = (await oldDict())\n\t\t\t\t\t\t.getValue('CFBundleIconFile')\n\t\t\t\t\t\t.castAs(ValueString).value;\n\t\t\t\t\tlet iconPathOld = this.getIconPath(oldIconName);\n\n\t\t\t\t\t// Implicit extension (old projectors).\n\t\t\t\t\tif (!oldIconName.includes('.')) {\n\t\t\t\t\t\ticonPathOld += '.icns';\n\t\t\t\t\t}\n\n\t\t\t\t\tif (appIconName) {\n\t\t\t\t\t\tconst iconPathNew = this.getIconPath(appIconName);\n\t\t\t\t\t\ttasks.push(async () =>\n\t\t\t\t\t\t\trename(iconPathOld, iconPathNew).then(async () => {\n\t\t\t\t\t\t\t\tif (iconData) {\n\t\t\t\t\t\t\t\t\tawait writeFile(iconPathNew, iconData);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if (iconData) {\n\t\t\t\t\t\ttasks.push(async () =>\n\t\t\t\t\t\t\twriteFile(iconPathOld, iconData)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tawait Promise.all(tasks.map(async f => f()));\n\t\t\t}\n\t\t};\n\t\treturn patch;\n\t}\n\n\t/**\n\t * Get patch for movie.\n\t *\n\t * @returns Patch spec.\n\t */\n\tprotected async _getPatchMovie() {\n\t\tconst movieData = await this.getMovieData();\n\t\tif (!movieData) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst patch: IFilePatch = {\n\t\t\t/**\n\t\t\t * @inheritdoc\n\t\t\t */\n\t\t\tmatch: (file: string) => false,\n\n\t\t\t/**\n\t\t\t * @inheritdoc\n\t\t\t */\n\t\t\tmodify: (data: Uint8Array) => data,\n\n\t\t\t/**\n\t\t\t * @inheritdoc\n\t\t\t */\n\t\t\tafter: async () => {\n\t\t\t\tawait writeFile(this.moviePath, movieData);\n\t\t\t}\n\t\t};\n\t\treturn patch;\n\t}\n}\n"],"mappings":"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","ignoreList":[]}