{"version":3,"file":"mac.mjs","names":["copyFile","mkdir","readFile","stat","writeFile","join","pathJoin","basename","dirname","fsLstatExists","Plist","ValueDict","ValueString","trimExtension","machoTypesFile","machoAppLauncher","ProjectorSaMac","BundleSa","BundleSaMac","constructor","path","flat","projector","_createProjector","extension","_getLauncherName","_getProjectorPathNested","projName","_getProjectorPath","_writeLauncher","appContents","appMacOS","appResources","appInfoPlist","appPkgInfo","plist","fromXml","infoPlistPath","dict","getValue","castAs","projBinaryName","value","projBinaryPath","getBinaryPath","projBinaryTypes","projIconName","projIconPath","getIconPath","projPkgInfoPath","pkgInfoPath","launcherName","launcherPath","recursive","mode","pathIcon","set","toXml"],"sources":["../../../src/bundle/sa/mac.ts"],"sourcesContent":["import {copyFile, mkdir, readFile, stat, writeFile} from 'node:fs/promises';\nimport {join as pathJoin, basename, dirname} from 'node:path';\n\nimport {fsLstatExists} from '@shockpkg/archive-files';\nimport {Plist, ValueDict, ValueString} from '@shockpkg/plist-dom';\n\nimport {trimExtension} from '../../util.ts';\nimport {machoTypesFile, machoAppLauncher} from '../../util/mac.ts';\nimport {ProjectorSaMac} from '../../projector/sa/mac.ts';\nimport {BundleSa} from '../sa.ts';\n\n/**\n * BundleSaMac object.\n */\nexport class BundleSaMac extends BundleSa {\n\t/**\n\t * ProjectorSaMac instance.\n\t */\n\tpublic readonly projector: ProjectorSaMac;\n\n\t/**\n\t * BundleSaMac constructor.\n\t *\n\t * @param path Output path for the main application.\n\t * @param flat Flat bundle.\n\t */\n\tconstructor(path: string, flat = false) {\n\t\tsuper(path, flat);\n\n\t\tthis.projector = this._createProjector();\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 the launcher name.\n\t *\n\t * @returns Launcher name.\n\t */\n\tprotected _getLauncherName() {\n\t\treturn trimExtension(basename(this.path), this.extension, true);\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\tprotected _getProjectorPathNested(): string {\n\t\tconst projName = `${this._getLauncherName()}${this.extension}`;\n\t\treturn pathJoin(this.path, 'Contents', 'Resources', projName);\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\tprotected _createProjector() {\n\t\treturn new ProjectorSaMac(this._getProjectorPath());\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\tprotected async _writeLauncher() {\n\t\tconst {path, projector} = this;\n\n\t\t// Create paths to things to create.\n\t\tconst appContents = pathJoin(path, 'Contents');\n\t\tconst appMacOS = pathJoin(appContents, 'MacOS');\n\t\tconst appResources = pathJoin(appContents, 'Resources');\n\t\tconst appInfoPlist = pathJoin(appContents, 'Info.plist');\n\t\tconst appPkgInfo = pathJoin(appContents, 'PkgInfo');\n\n\t\t// Read the projector Info.plist.\n\t\tconst plist = new Plist();\n\t\tplist.fromXml(await readFile(projector.infoPlistPath, 'utf8'));\n\t\tconst dict = plist.getValue().castAs(ValueDict);\n\n\t\t// Get the binary path and read the types.\n\t\tconst projBinaryName = dict\n\t\t\t.getValue('CFBundleExecutable')\n\t\t\t.castAs(ValueString).value;\n\t\tconst projBinaryPath = projector.getBinaryPath(projBinaryName);\n\t\tconst projBinaryTypes = await machoTypesFile(projBinaryPath);\n\n\t\t// Get the icon path.\n\t\tconst projIconName = dict\n\t\t\t.getValue('CFBundleIconFile')\n\t\t\t.castAs(ValueString).value;\n\t\tconst projIconPath = projector.getIconPath(projIconName);\n\n\t\t// Get the PkgInfo path.\n\t\tconst projPkgInfoPath = projector.pkgInfoPath;\n\n\t\t// Create the launcher binary with the same types and mode.\n\t\tconst launcherName = this._getLauncherName();\n\t\tconst launcherPath = pathJoin(appMacOS, launcherName);\n\t\tawait mkdir(dirname(launcherPath), {recursive: true});\n\t\tawait writeFile(launcherPath, await machoAppLauncher(projBinaryTypes), {\n\t\t\tmode: (await stat(projBinaryPath)).mode\n\t\t});\n\n\t\t// Copy the projector icon if present.\n\t\tconst pathIcon = pathJoin(appResources, projIconName);\n\t\tif (await fsLstatExists(projIconPath)) {\n\t\t\tawait copyFile(projIconPath, pathIcon);\n\t\t}\n\n\t\t// Copy PkgInfo if present.\n\t\tif (await fsLstatExists(projPkgInfoPath)) {\n\t\t\tawait copyFile(projPkgInfoPath, appPkgInfo);\n\t\t}\n\n\t\t// Update the executable name in the plist for the launcher.\n\t\tdict.set('CFBundleExecutable', new ValueString(launcherName));\n\n\t\t// Write the updated Info.plist.\n\t\tawait mkdir(dirname(appInfoPlist), {recursive: true});\n\t\tawait writeFile(appInfoPlist, plist.toXml(), 'utf8');\n\t}\n}\n"],"mappings":"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","ignoreList":[]}