UNPKG

@shockpkg/dir-projector

Version:

Package for creating Shockwave Director projectors

1 lines 37 kB
{"version":3,"file":"mac.mjs","names":["readFile","mkdir","writeFile","join","pathJoin","basename","dirname","PathType","createArchiveByFileStatOrThrow","Plist","ValueDict","ValueString","pathRelativeBase","pathRelativeBaseMatch","trimExtension","ProjectorOtto","ProjectorOttoMac","binaryName","intel","iconData","iconFile","infoPlistData","infoPlistFile","pkgInfoData","pkgInfoFile","bundleName","nestXtrasContents","constructor","path","extension","configNewline","lingoNewline","splashImageExtension","hasIcon","hasInfoPlist","hasPkgInfo","projectorResourcesDirectoryName","appBinaryNameDefault","appBinaryNameCustom","appBinaryName","appIconNameDefault","appIconNameCustom","n","appIconName","appRsrcNameDefault","appRsrcNameCustom","appRsrcName","appPathInfoPlist","appPathPkgInfo","appPathFrameworks","appPathXtras","xtrasName","appPathBinaryDefault","appPathBinaryCustom","appPathBinary","appPathIconDefault","appPathIconCustom","appPathIcon","appPathRsrcDefault","appPathRsrcCustom","appPathRsrc","iconPath","infoPlistPath","pkgInfoPath","binaryPath","xtrasPath","getIconData","d","Uint8Array","buffer","byteOffset","byteLength","getInfoPlistData","TextDecoder","decode","getPkgInfoData","TextEncoder","encode","getBundleName","_writeSkeleton","skeleton","shockwave","xtrasMappings","getIncludeXtrasMappings","foundProjectorResourcesDirectory","foundFrameworks","foundBinary","foundIcon","foundRsrc","foundXtras","patches","_getPatches","extract","entry","dest","type","FILE","data","patch","match","volumePath","read","Error","modify","recursive","setAttributes","ignoreTimes","xtrasHandler","xtrasRel","includeXtrasMappingsDest","projectorResourcesHandler","projectorRel","archive","nobrowse","RESOURCE_FORK","Promise","all","map","p","after","_getPatchIcon","_getPatchPkgInfo","_getPatchInfoPlist","filter","Boolean","count","file","f","infoData","customPlist","xml","plist","fromXml","dict","getValue","castAs","set","key","delete","plistData","toXml"],"sources":["../../../src/projector/otto/mac.ts"],"sourcesContent":["import {readFile, mkdir, writeFile} from 'node:fs/promises';\nimport {join as pathJoin, basename, dirname} from 'node:path';\n\nimport {\n\tPathType,\n\tEntry,\n\tcreateArchiveByFileStatOrThrow\n} from '@shockpkg/archive-files';\nimport {Plist, ValueDict, ValueString} from '@shockpkg/plist-dom';\n\nimport {\n\tpathRelativeBase,\n\tpathRelativeBaseMatch,\n\ttrimExtension\n} from '../../util.ts';\nimport {IFilePatch, ProjectorOtto} from '../otto.ts';\n\n/**\n * ProjectorOttoMac object.\n */\nexport class ProjectorOttoMac extends ProjectorOtto {\n\t/**\n\t * Binary name.\n\t */\n\tpublic binaryName: string | null = null;\n\n\t/**\n\t * Intel binary package, not universal binary.\n\t */\n\tpublic intel = false;\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 * Nest Xtras at *.app/Contents/xtras.\n\t */\n\tpublic nestXtrasContents = false;\n\n\t/**\n\t * ProjectorOttoMac 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 * @inheritdoc\n\t */\n\tpublic get configNewline() {\n\t\treturn '\\n';\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic get lingoNewline() {\n\t\treturn '\\n';\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic get splashImageExtension() {\n\t\treturn '.pict';\n\t}\n\n\t/**\n\t * If icon is specified.\n\t *\n\t * @returns Has icon.\n\t */\n\tpublic get hasIcon() {\n\t\treturn !!(this.iconData || this.iconFile);\n\t}\n\n\t/**\n\t * If Info.plist is specified.\n\t *\n\t * @returns Has Info.plist.\n\t */\n\tpublic get hasInfoPlist() {\n\t\treturn !!(this.infoPlistData || this.infoPlistFile);\n\t}\n\n\t/**\n\t * If PkgInfo is specified.\n\t *\n\t * @returns Has PkgInfo.\n\t */\n\tpublic get hasPkgInfo() {\n\t\treturn !!(this.pkgInfoData || this.pkgInfoFile);\n\t}\n\n\t/**\n\t * Get the Projector Resources directory name.\n\t *\n\t * @returns Directory name.\n\t */\n\tpublic get projectorResourcesDirectoryName() {\n\t\treturn this.intel ? 'Projector Intel Resources' : 'Projector Resources';\n\t}\n\n\t/**\n\t * Get app binary name, default.\n\t *\n\t * @returns File name.\n\t */\n\tpublic get appBinaryNameDefault() {\n\t\treturn 'Projector';\n\t}\n\n\t/**\n\t * Get app binary name, custom.\n\t *\n\t * @returns File name.\n\t */\n\tpublic get appBinaryNameCustom() {\n\t\treturn this.binaryName;\n\t}\n\n\t/**\n\t * Get app binary name.\n\t *\n\t * @returns File name.\n\t */\n\tpublic get appBinaryName() {\n\t\treturn this.appBinaryNameCustom || this.appBinaryNameDefault;\n\t}\n\n\t/**\n\t * Get app icon name, default.\n\t *\n\t * @returns File name.\n\t */\n\tpublic get appIconNameDefault() {\n\t\treturn 'projector.icns';\n\t}\n\n\t/**\n\t * Get app icon name, custom.\n\t *\n\t * @returns File name.\n\t */\n\tpublic get appIconNameCustom() {\n\t\tconst n = this.binaryName;\n\t\treturn n ? `${n}.icns` : null;\n\t}\n\n\t/**\n\t * Get app icon name.\n\t *\n\t * @returns File name.\n\t */\n\tpublic get appIconName() {\n\t\treturn this.appIconNameCustom || this.appIconNameDefault;\n\t}\n\n\t/**\n\t * Get app rsrc name, default.\n\t *\n\t * @returns File name.\n\t */\n\tpublic get appRsrcNameDefault() {\n\t\treturn 'Projector.rsrc';\n\t}\n\n\t/**\n\t * Get app rsrc name, custom.\n\t *\n\t * @returns File name.\n\t */\n\tpublic get appRsrcNameCustom() {\n\t\tconst n = this.binaryName;\n\t\treturn n ? `${n}.rsrc` : null;\n\t}\n\n\t/**\n\t * Get app rsrc name.\n\t *\n\t * @returns File name.\n\t */\n\tpublic get appRsrcName() {\n\t\treturn this.appRsrcNameCustom || this.appRsrcNameDefault;\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 app Frameworks path.\n\t *\n\t * @returns File path.\n\t */\n\tpublic get appPathFrameworks() {\n\t\treturn 'Contents/Frameworks';\n\t}\n\n\t/**\n\t * Get app Xtras path.\n\t *\n\t * @returns Directory path.\n\t */\n\tpublic get appPathXtras() {\n\t\treturn `Contents/${this.xtrasName}`;\n\t}\n\n\t/**\n\t * Get app binary path, default.\n\t *\n\t * @returns File path.\n\t */\n\tpublic get appPathBinaryDefault() {\n\t\treturn `Contents/MacOS/${this.appBinaryNameDefault}`;\n\t}\n\n\t/**\n\t * Get app binary path, custom.\n\t *\n\t * @returns File path.\n\t */\n\tpublic get appPathBinaryCustom() {\n\t\tconst n = this.appBinaryNameCustom;\n\t\treturn n ? `Contents/MacOS/${n}` : null;\n\t}\n\n\t/**\n\t * Get app binary path.\n\t *\n\t * @returns File path.\n\t */\n\tpublic get appPathBinary() {\n\t\treturn this.appPathBinaryCustom || this.appPathBinaryDefault;\n\t}\n\n\t/**\n\t * Get app icon path, default.\n\t *\n\t * @returns File path.\n\t */\n\tpublic get appPathIconDefault() {\n\t\treturn `Contents/Resources/${this.appIconNameDefault}`;\n\t}\n\n\t/**\n\t * Get app icon path, custom.\n\t *\n\t * @returns File path.\n\t */\n\tpublic get appPathIconCustom() {\n\t\tconst n = this.appIconNameCustom;\n\t\treturn n ? `Contents/Resources/${n}` : null;\n\t}\n\n\t/**\n\t * Get app icon path.\n\t *\n\t * @returns File path.\n\t */\n\tpublic get appPathIcon() {\n\t\treturn this.appPathIconCustom || this.appPathIconDefault;\n\t}\n\n\t/**\n\t * Get app rsrc path, default.\n\t *\n\t * @returns File path.\n\t */\n\tpublic get appPathRsrcDefault() {\n\t\treturn `Contents/Resources/${this.appRsrcNameDefault}`;\n\t}\n\n\t/**\n\t * Get app rsrc path, custom.\n\t *\n\t * @returns File path.\n\t */\n\tpublic get appPathRsrcCustom() {\n\t\tconst n = this.appRsrcNameCustom;\n\t\treturn n ? `Contents/Resources/${n}` : null;\n\t}\n\n\t/**\n\t * Get app rsrc path.\n\t *\n\t * @returns File path.\n\t */\n\tpublic get appPathRsrc() {\n\t\treturn this.appPathRsrcCustom || this.appPathRsrcDefault;\n\t}\n\n\t/**\n\t * Get the icon path.\n\t *\n\t * @returns Icon path.\n\t */\n\tpublic get iconPath() {\n\t\treturn pathJoin(this.path, this.appPathIcon);\n\t}\n\n\t/**\n\t * Get the Info.plist path.\n\t *\n\t * @returns Info.plist 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 PkgInfo 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 * @returns Binary path.\n\t */\n\tpublic get binaryPath() {\n\t\treturn pathJoin(this.path, this.appPathBinary);\n\t}\n\n\t/**\n\t * Get outout Xtras path.\n\t *\n\t * @returns Output path.\n\t */\n\tpublic get xtrasPath() {\n\t\tif (this.nestXtrasContents) {\n\t\t\treturn `${this.path}/${this.appPathXtras}`;\n\t\t}\n\t\treturn super.xtrasPath;\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 _writeSkeleton(skeleton: string) {\n\t\tconst {\n\t\t\tpath,\n\t\t\tshockwave,\n\t\t\tappPathFrameworks,\n\t\t\tappPathBinaryDefault,\n\t\t\tappPathBinaryCustom,\n\t\t\tappPathIconDefault,\n\t\t\tappPathIconCustom,\n\t\t\tappPathRsrcDefault,\n\t\t\tappPathRsrcCustom,\n\t\t\txtrasName,\n\t\t\txtrasPath,\n\t\t\tprojectorResourcesDirectoryName\n\t\t} = this;\n\n\t\tconst xtrasMappings = this.getIncludeXtrasMappings();\n\n\t\tlet foundProjectorResourcesDirectory = false;\n\t\tlet foundFrameworks = false;\n\t\tlet foundBinary = false;\n\t\tlet foundIcon = false;\n\t\tlet foundRsrc = false;\n\t\tlet foundXtras = false;\n\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\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\t/**\n\t\t * Xtras handler.\n\t\t *\n\t\t * @param entry Archive entry.\n\t\t * @returns Boolean.\n\t\t */\n\t\tconst xtrasHandler = async (entry: Entry) => {\n\t\t\t// Check if Xtras path.\n\t\t\tconst xtrasRel = pathRelativeBase(\n\t\t\t\tentry.volumePath,\n\t\t\t\txtrasName,\n\t\t\t\ttrue\n\t\t\t);\n\t\t\tif (xtrasRel === null) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfoundXtras = true;\n\n\t\t\t// Find output path if being included, else skip.\n\t\t\tconst dest = this.includeXtrasMappingsDest(xtrasMappings, xtrasRel);\n\t\t\tif (!dest) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tawait extract(entry, pathJoin(xtrasPath, dest));\n\t\t\treturn true;\n\t\t};\n\n\t\t/**\n\t\t * Resources handler.\n\t\t *\n\t\t * @param entry Archive entry.\n\t\t * @returns Boolean.\n\t\t */\n\t\tconst projectorResourcesHandler = async (entry: Entry) => {\n\t\t\t// Check if projector path.\n\t\t\tconst projectorRel = pathRelativeBase(\n\t\t\t\tentry.volumePath,\n\t\t\t\tprojectorResourcesDirectoryName,\n\t\t\t\ttrue\n\t\t\t);\n\t\t\tif (projectorRel === null) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfoundProjectorResourcesDirectory = true;\n\n\t\t\tif (pathRelativeBaseMatch(projectorRel, appPathFrameworks, true)) {\n\t\t\t\tfoundFrameworks = true;\n\n\t\t\t\t// Exclude Frameworks directory for Shockwave projectors.\n\t\t\t\tif (shockwave) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet dest = projectorRel;\n\n\t\t\t// Possibly rename the binary.\n\t\t\tif (\n\t\t\t\tpathRelativeBaseMatch(projectorRel, appPathBinaryDefault, true)\n\t\t\t) {\n\t\t\t\tfoundBinary = true;\n\n\t\t\t\tif (appPathBinaryCustom) {\n\t\t\t\t\tdest = appPathBinaryCustom;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Special case for icon.\n\t\t\tif (pathRelativeBaseMatch(projectorRel, appPathIconDefault, true)) {\n\t\t\t\tfoundIcon = true;\n\n\t\t\t\t// Possible rename the icon.\n\t\t\t\tif (appPathIconCustom) {\n\t\t\t\t\tdest = appPathIconCustom;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Special case for rsrc.\n\t\t\tif (pathRelativeBaseMatch(projectorRel, appPathRsrcDefault, true)) {\n\t\t\t\tfoundRsrc = true;\n\n\t\t\t\tif (appPathRsrcCustom) {\n\t\t\t\t\tdest = appPathRsrcCustom;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait extract(entry, pathJoin(path, dest));\n\t\t\treturn true;\n\t\t};\n\n\t\tconst archive = await createArchiveByFileStatOrThrow(skeleton, {\n\t\t\tnobrowse: this.nobrowse\n\t\t});\n\t\tawait archive.read(async entry => {\n\t\t\tif (entry.type === PathType.RESOURCE_FORK) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (await xtrasHandler(entry)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (await projectorResourcesHandler(entry)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\n\t\tif (!foundProjectorResourcesDirectory) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to locate: ${projectorResourcesDirectoryName}`\n\t\t\t);\n\t\t}\n\n\t\tif (!foundFrameworks) {\n\t\t\tconst d = projectorResourcesDirectoryName;\n\t\t\tthrow new Error(`Failed to locate: ${d}/${appPathFrameworks}`);\n\t\t}\n\n\t\tif (!foundBinary) {\n\t\t\tconst d = projectorResourcesDirectoryName;\n\t\t\tthrow new Error(`Failed to locate: ${d}/${appPathBinaryDefault}`);\n\t\t}\n\n\t\tif (!foundIcon) {\n\t\t\tconst d = projectorResourcesDirectoryName;\n\t\t\tthrow new Error(`Failed to locate: ${d}/${appPathIconDefault}`);\n\t\t}\n\n\t\tif (!foundRsrc) {\n\t\t\tconst d = projectorResourcesDirectoryName;\n\t\t\tthrow new Error(`Failed to locate: ${d}/${appPathRsrcDefault}`);\n\t\t}\n\n\t\tif (!foundXtras) {\n\t\t\tthrow new Error(`Failed to locate: ${xtrasName}`);\n\t\t}\n\n\t\tawait Promise.all(patches.map(async p => p.after()));\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._getPatchIcon(),\n\t\t\t\tthis._getPatchPkgInfo(),\n\t\t\t\tthis._getPatchInfoPlist()\n\t\t\t])\n\t\t).filter(Boolean) as IFilePatch[];\n\t}\n\n\t/**\n\t * Get patch for icon.\n\t *\n\t * @returns Patch spec.\n\t */\n\tprotected async _getPatchIcon() {\n\t\tconst iconData = await this.getIconData();\n\t\tif (!iconData) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst {projectorResourcesDirectoryName, appPathIconDefault} = this;\n\n\t\tlet count = 0;\n\n\t\tconst patch: IFilePatch = {\n\t\t\t// eslint-disable-next-line jsdoc/require-jsdoc\n\t\t\tmatch: (file: string) => {\n\t\t\t\tconst projectorRel = pathRelativeBase(\n\t\t\t\t\tfile,\n\t\t\t\t\tprojectorResourcesDirectoryName,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\treturn (\n\t\t\t\t\tprojectorRel !== null &&\n\t\t\t\t\tpathRelativeBaseMatch(\n\t\t\t\t\t\tprojectorRel,\n\t\t\t\t\t\tappPathIconDefault,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t},\n\t\t\t// eslint-disable-next-line jsdoc/require-jsdoc\n\t\t\tmodify: (data: Uint8Array) => {\n\t\t\t\tcount++;\n\t\t\t\treturn iconData;\n\t\t\t},\n\t\t\t// eslint-disable-next-line jsdoc/require-jsdoc\n\t\t\tafter: () => {\n\t\t\t\tif (!count) {\n\t\t\t\t\tconst d = projectorResourcesDirectoryName;\n\t\t\t\t\tconst f = appPathIconDefault;\n\t\t\t\t\tthrow new Error(`Failed to locate for replace: ${d}/${f}`);\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 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\tconst {projectorResourcesDirectoryName, appPathPkgInfo} = this;\n\n\t\tlet count = 0;\n\n\t\tconst patch: IFilePatch = {\n\t\t\t// eslint-disable-next-line jsdoc/require-jsdoc\n\t\t\tmatch: (file: string) => {\n\t\t\t\tconst projectorRel = pathRelativeBase(\n\t\t\t\t\tfile,\n\t\t\t\t\tprojectorResourcesDirectoryName,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\treturn (\n\t\t\t\t\tprojectorRel !== null &&\n\t\t\t\t\tpathRelativeBaseMatch(projectorRel, appPathPkgInfo, true)\n\t\t\t\t);\n\t\t\t},\n\t\t\t// eslint-disable-next-line jsdoc/require-jsdoc\n\t\t\tmodify: (data: Uint8Array) => {\n\t\t\t\tcount++;\n\t\t\t\treturn infoData;\n\t\t\t},\n\t\t\t// eslint-disable-next-line jsdoc/require-jsdoc\n\t\t\tafter: async () => {\n\t\t\t\t// Some skeletons lack 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 Info.plist.\n\t *\n\t * @returns Patch spec.\n\t */\n\tprotected async _getPatchInfoPlist() {\n\t\tconst customPlist = await this.getInfoPlistData();\n\t\tconst bundleName = this.getBundleName();\n\t\tconst {\n\t\t\tappBinaryNameCustom,\n\t\t\tappIconNameCustom,\n\t\t\tprojectorResourcesDirectoryName,\n\t\t\tappPathInfoPlist\n\t\t} = this;\n\t\tif (\n\t\t\t!(\n\t\t\t\tcustomPlist !== null ||\n\t\t\t\tappIconNameCustom ||\n\t\t\t\tappBinaryNameCustom ||\n\t\t\t\tbundleName !== false\n\t\t\t)\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet count = 0;\n\n\t\tconst patch: IFilePatch = {\n\t\t\t// eslint-disable-next-line jsdoc/require-jsdoc\n\t\t\tmatch: (file: string) => {\n\t\t\t\tconst projectorRel = pathRelativeBase(\n\t\t\t\t\tfile,\n\t\t\t\t\tprojectorResourcesDirectoryName,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\treturn (\n\t\t\t\t\tprojectorRel !== null &&\n\t\t\t\t\tpathRelativeBaseMatch(projectorRel, appPathInfoPlist, true)\n\t\t\t\t);\n\t\t\t},\n\t\t\t// eslint-disable-next-line jsdoc/require-jsdoc\n\t\t\tmodify: (data: Uint8Array) => {\n\t\t\t\t// Use a custom plist or the existing one.\n\t\t\t\tconst xml = customPlist ?? new TextDecoder().decode(data);\n\n\t\t\t\tconst plist = new Plist();\n\t\t\t\tplist.fromXml(xml);\n\t\t\t\tconst dict = plist.getValue().castAs(ValueDict);\n\n\t\t\t\tif (appIconNameCustom) {\n\t\t\t\t\tdict.set(\n\t\t\t\t\t\t'CFBundleIconFile',\n\t\t\t\t\t\tnew ValueString(appIconNameCustom)\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (appBinaryNameCustom) {\n\t\t\t\t\tdict.set(\n\t\t\t\t\t\t'CFBundleExecutable',\n\t\t\t\t\t\tnew ValueString(appBinaryNameCustom)\n\t\t\t\t\t);\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\tconst plistData = new TextEncoder().encode(plist.toXml());\n\n\t\t\t\tcount++;\n\t\t\t\treturn plistData;\n\t\t\t},\n\t\t\t// eslint-disable-next-line jsdoc/require-jsdoc\n\t\t\tafter: () => {\n\t\t\t\tif (!count) {\n\t\t\t\t\tconst d = projectorResourcesDirectoryName;\n\t\t\t\t\tconst f = appPathInfoPlist;\n\t\t\t\t\tthrow new Error(`Failed to locate for update: ${d}/${f}`);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn patch;\n\t}\n}\n"],"mappings":"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","ignoreList":[]}