UNPKG

@shockpkg/dir-projector

Version:

Package for creating Shockwave Director projectors

1 lines 6.26 kB
{"version":3,"sources":["bundle/mac/app.ts"],"names":["join","pathJoin","basename","fse","trimExtension","plistRead","infoPlistBundleExecutableSet","infoPlistBundleIconFileGet","machoTypesFile","machoAppLauncher","ProjectorMacApp","BundleMac","BundleMacApp","constructor","path","projector","_createProjector","_getLauncherName","extension","projName","projPath","_writeLauncher","appContents","appMacOS","appResources","appInfoPlist","appPkgInfo","plist","infoPlistPath","projBinaryPath","binaryPath","projBinaryTypes","projIconName","projIconPath","iconPath","projPkgInfoPath","pkgInfoPath","launcherName","launcherPath","outputFile","mode","stat","pathIcon","pathExists","copyFile","toXml"],"mappings":"AAAA,SACCA,IAAI,IAAIC,QADT,EAECC,QAFD,QAGO,MAHP;AAKA,OAAOC,GAAP,MAAgB,UAAhB;AAEA,SAAQC,aAAR,QAA4B,gBAA5B;AACA,SACCC,SADD,EAECC,4BAFD,EAGCC,0BAHD,EAICC,cAJD,EAKCC,gBALD,QAMO,oBANP;AAOA,SAAQC,eAAR,QAA8B,6BAA9B;AACA,SAAQC,SAAR,QAAwB,YAAxB;AAEA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,YAAN,SAA2BD,SAA3B,CAAqC;AAC3C;AACD;AACA;AAGCE,EAAAA,WAAW,CAACC,IAAD,EAAe;AACzB,UAAMA,IAAN;AADyB,SAFVC,SAEU;AAGzB,SAAKA,SAAL,GAAiB,KAAKC,gBAAL,EAAjB;AACA;AAED;AACD;AACA;AACA;AACA;;;AACWC,EAAAA,gBAAV,GAA6B;AAC5B,WAAOb,aAAa,CAACF,QAAQ,CAAC,KAAKY,IAAN,CAAT,EAAsB,KAAKI,SAA3B,EAAsC,IAAtC,CAApB;AACA;AAED;AACD;AACA;AACA;AACA;;;AACWF,EAAAA,gBAAV,GAA6B;AAC5B,UAAMG,QAAQ,GAAI,GAAE,KAAKF,gBAAL,EAAwB,GAAE,KAAKC,SAAU,EAA7D;AACA,UAAME,QAAQ,GAAGnB,QAAQ,CAAC,KAAKa,IAAN,EAAY,UAAZ,EAAwB,WAAxB,EAAqCK,QAArC,CAAzB;AACA,WAAO,IAAIT,eAAJ,CAAoBU,QAApB,CAAP;AACA;AAED;AACD;AACA;;;AACC,QAAgBC,cAAhB,GAAiC;AAChC,UAAM;AAACP,MAAAA,IAAD;AAAOC,MAAAA;AAAP,QAAoB,IAA1B,CADgC,CAGhC;;AACA,UAAMO,WAAW,GAAGrB,QAAQ,CAACa,IAAD,EAAO,UAAP,CAA5B;AACA,UAAMS,QAAQ,GAAGtB,QAAQ,CAACqB,WAAD,EAAc,OAAd,CAAzB;AACA,UAAME,YAAY,GAAGvB,QAAQ,CAACqB,WAAD,EAAc,WAAd,CAA7B;AACA,UAAMG,YAAY,GAAGxB,QAAQ,CAACqB,WAAD,EAAc,YAAd,CAA7B;AACA,UAAMI,UAAU,GAAGzB,QAAQ,CAACqB,WAAD,EAAc,SAAd,CAA3B,CARgC,CAUhC;;AACA,UAAMK,KAAK,GAAG,MAAMtB,SAAS,CAACU,SAAS,CAACa,aAAX,CAA7B,CAXgC,CAahC;;AACA,UAAMC,cAAc,GAAGd,SAAS,CAACe,UAAjC;AACA,UAAMC,eAAe,GAAG,MAAMvB,cAAc,CAACqB,cAAD,CAA5C,CAfgC,CAiBhC;;AACA,UAAMG,YAAY,GAAGzB,0BAA0B,CAACoB,KAAD,CAA/C;AACA,UAAMM,YAAY,GAAGlB,SAAS,CAACmB,QAA/B,CAnBgC,CAqBhC;;AACA,UAAMC,eAAe,GAAGpB,SAAS,CAACqB,WAAlC,CAtBgC,CAwBhC;;AACA,UAAMC,YAAY,GAAG,KAAKpB,gBAAL,EAArB;;AACA,UAAMqB,YAAY,GAAGrC,QAAQ,CAACsB,QAAD,EAAWc,YAAX,CAA7B;AACA,UAAMlC,GAAG,CAACoC,UAAJ,CACLD,YADK,EAEL,MAAM7B,gBAAgB,CAACsB,eAAD,CAFjB,EAGL;AACCS,MAAAA,IAAI,EAAE,CAAC,MAAMrC,GAAG,CAACsC,IAAJ,CAASZ,cAAT,CAAP,EAAiCW;AADxC,KAHK,CAAN,CA3BgC,CAmChC;;AACA,UAAME,QAAQ,GAAGzC,QAAQ,CAACuB,YAAD,EAAeQ,YAAf,CAAzB;;AACA,QAAI,MAAM7B,GAAG,CAACwC,UAAJ,CAAeV,YAAf,CAAV,EAAwC;AACvC,YAAM9B,GAAG,CAACyC,QAAJ,CAAaX,YAAb,EAA2BS,QAA3B,CAAN;AACA,KAvC+B,CAyChC;;;AACA,QAAI,MAAMvC,GAAG,CAACwC,UAAJ,CAAeR,eAAf,CAAV,EAA2C;AAC1C,YAAMhC,GAAG,CAACyC,QAAJ,CAAaT,eAAb,EAA8BT,UAA9B,CAAN;AACA,KA5C+B,CA8ChC;;;AACApB,IAAAA,4BAA4B,CAACqB,KAAD,EAAQU,YAAR,CAA5B,CA/CgC,CAiDhC;;AACA,UAAMlC,GAAG,CAACoC,UAAJ,CAAed,YAAf,EAA6BE,KAAK,CAACkB,KAAN,EAA7B,EAA4C,MAA5C,CAAN;AACA;;AAtF0C","sourcesContent":["import {\n\tjoin as pathJoin,\n\tbasename\n} from 'path';\n\nimport fse from 'fs-extra';\n\nimport {trimExtension} from '../../util';\nimport {\n\tplistRead,\n\tinfoPlistBundleExecutableSet,\n\tinfoPlistBundleIconFileGet,\n\tmachoTypesFile,\n\tmachoAppLauncher\n} from '../../util/mac';\nimport {ProjectorMacApp} from '../../projector/mac/app';\nimport {BundleMac} from '../mac';\n\n/**\n * BundleMacApp constructor.\n *\n * @param path Output path for the main application.\n */\nexport class BundleMacApp extends BundleMac {\n\t/**\n\t * ProjectorMacApp instance.\n\t */\n\tpublic readonly projector: ProjectorMacApp;\n\n\tconstructor(path: string) {\n\t\tsuper(path);\n\n\t\tthis.projector = this._createProjector();\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 * Create projector instance for the bundle.\n\t *\n\t * @returns Projector instance.\n\t */\n\tprotected _createProjector() {\n\t\tconst projName = `${this._getLauncherName()}${this.extension}`;\n\t\tconst projPath = pathJoin(this.path, 'Contents', 'Resources', projName);\n\t\treturn new ProjectorMacApp(projPath);\n\t}\n\n\t/**\n\t * Write the launcher file.\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 = await plistRead(projector.infoPlistPath);\n\n\t\t// Get the binary path and read the types.\n\t\tconst projBinaryPath = projector.binaryPath;\n\t\tconst projBinaryTypes = await machoTypesFile(projBinaryPath);\n\n\t\t// Get the icon path.\n\t\tconst projIconName = infoPlistBundleIconFileGet(plist);\n\t\tconst projIconPath = projector.iconPath;\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 fse.outputFile(\n\t\t\tlauncherPath,\n\t\t\tawait machoAppLauncher(projBinaryTypes),\n\t\t\t{\n\t\t\t\tmode: (await fse.stat(projBinaryPath)).mode\n\t\t\t}\n\t\t);\n\n\t\t// Copy the projector icon if present.\n\t\tconst pathIcon = pathJoin(appResources, projIconName);\n\t\tif (await fse.pathExists(projIconPath)) {\n\t\t\tawait fse.copyFile(projIconPath, pathIcon);\n\t\t}\n\n\t\t// Copy PkgInfo if present.\n\t\tif (await fse.pathExists(projPkgInfoPath)) {\n\t\t\tawait fse.copyFile(projPkgInfoPath, appPkgInfo);\n\t\t}\n\n\t\t// Update the executable name in the plist for the launcher.\n\t\tinfoPlistBundleExecutableSet(plist, launcherName);\n\n\t\t// Write the updated Info.plist.\n\t\tawait fse.outputFile(appInfoPlist, plist.toXml(), 'utf8');\n\t}\n}\n"],"file":"app.mjs","sourceRoot":"../../../src"}