@shockpkg/dir-projector
Version:
Package for creating Shockwave Director projectors
1 lines • 8.86 kB
Source Map (JSON)
{"version":3,"sources":["projector/windows.ts"],"names":["join","pathJoin","dirname","fse","PathType","pathRelativeBase","pathRelativeBaseMatch","peResourceReplace","Projector","ProjectorWindows","constructor","path","iconFile","iconData","versionStrings","extension","configNewline","lingoNewline","splashImageExtension","sklName","getIconData","readFile","_writeSkeleton","skeleton","shockwave","xtrasName","xtrasPath","xtrasMappings","getIncludeXtrasMappings","foundProjectorSkl","foundXtras","xtrasHandler","entry","xtrasRel","volumePath","dest","includeXtrasMappingsDest","extract","projectorSklHandler","entryPath","includes","projectorDllHandler","test","archive","getSkeletonArchive","read","type","RESOURCE_FORK","Error","_modifySkeleton"],"mappings":"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","sourcesContent":["import {\n\tjoin as pathJoin,\n\tdirname\n} from 'path';\n\nimport fse from 'fs-extra';\nimport {\n\tEntry,\n\tPathType\n} from '@shockpkg/archive-files';\n\nimport {\n\tpathRelativeBase,\n\tpathRelativeBaseMatch\n} from '../util';\nimport {\n\tpeResourceReplace\n} from '../util/windows';\nimport {\n\tProjector\n} from '../projector';\n\n/**\n * ProjectorWindows constructor.\n *\n * @param path Output path.\n */\nexport abstract class ProjectorWindows extends Projector {\n\t/**\n\t * Icon file.\n\t */\n\tpublic iconFile: string | null = null;\n\n\t/**\n\t * Icon data.\n\t */\n\tpublic iconData: Readonly<Buffer> | null = null;\n\n\t/**\n\t * Version strings.\n\t */\n\tpublic versionStrings: Readonly<{[key: string]: string}> | null = null;\n\n\tconstructor(path: string) {\n\t\tsuper(path);\n\t}\n\n\t/**\n\t * Projector file extension.\n\t *\n\t * @returns File extension.\n\t */\n\tpublic get extension() {\n\t\treturn '.exe';\n\t}\n\n\t/**\n\t * Config file newline characters.\n\t *\n\t * @returns Newline characters.\n\t */\n\tpublic get configNewline() {\n\t\treturn '\\r\\n';\n\t}\n\n\t/**\n\t * Lingo file newline characters.\n\t *\n\t * @returns Newline characters.\n\t */\n\tpublic get lingoNewline() {\n\t\treturn '\\r\\n';\n\t}\n\n\t/**\n\t * Splash image file extension.\n\t *\n\t * @returns File extension.\n\t */\n\tpublic get splashImageExtension() {\n\t\treturn '.BMP';\n\t}\n\n\t/**\n\t * Get the SKL name.\n\t *\n\t * @returns File name.\n\t */\n\tpublic get sklName() {\n\t\treturn 'Projec32.skl';\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\treturn iconData || (iconFile ? fse.readFile(iconFile) : null);\n\t}\n\n\t/**\n\t * Write the projector skeleton from archive.\n\t *\n\t * @param skeleton Skeleton path.\n\t */\n\tprotected async _writeSkeleton(skeleton: string) {\n\t\tconst {\n\t\t\tpath,\n\t\t\tshockwave,\n\t\t\tsklName,\n\t\t\txtrasName,\n\t\t\txtrasPath\n\t\t} = this;\n\n\t\tconst xtrasMappings = this.getIncludeXtrasMappings();\n\n\t\tlet foundProjectorSkl = false;\n\t\tlet foundXtras = false;\n\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(\n\t\t\t\txtrasMappings,\n\t\t\t\txtrasRel\n\t\t\t);\n\t\t\tif (!dest) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tawait entry.extract(pathJoin(xtrasPath, dest));\n\t\t\treturn true;\n\t\t};\n\n\t\tconst projectorSklHandler = async (entry: Entry) => {\n\t\t\tconst entryPath = entry.volumePath;\n\n\t\t\t// Should not be in sub directory.\n\t\t\tif (entryPath.includes('/')) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Check if skl path.\n\t\t\tif (!pathRelativeBaseMatch(entryPath, sklName, true)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfoundProjectorSkl = true;\n\n\t\t\tawait entry.extract(path);\n\t\t\treturn true;\n\t\t};\n\n\t\tconst projectorDllHandler = async (entry: Entry) => {\n\t\t\tconst entryPath = entry.volumePath;\n\n\t\t\t// Should not be in sub directory.\n\t\t\tif (entryPath.includes('/')) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Check if dll path.\n\t\t\tif (!/\\.dll$/i.test(entryPath)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Exclude if shockwave projector.\n\t\t\tif (shockwave) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tawait entry.extract(pathJoin(dirname(path), entryPath));\n\t\t\treturn true;\n\t\t};\n\n\t\tconst archive = await this.getSkeletonArchive(skeleton);\n\t\tawait archive.read(async entry => {\n\t\t\tif (entry.type === PathType.RESOURCE_FORK) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (await xtrasHandler(entry)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (await projectorSklHandler(entry)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (await projectorDllHandler(entry)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t});\n\n\t\tif (!foundProjectorSkl) {\n\t\t\tthrow new Error(`Failed to locate: ${sklName}`);\n\t\t}\n\n\t\tif (!foundXtras) {\n\t\t\tthrow new Error(`Failed to locate: ${xtrasName}`);\n\t\t}\n\t}\n\n\t/**\n\t * Modify the projector skeleton.\n\t */\n\tprotected async _modifySkeleton() {\n\t\tconst iconData = await this.getIconData();\n\t\tconst {\n\t\t\tversionStrings\n\t\t} = this;\n\t\tif (!(\n\t\t\ticonData ||\n\t\t\tversionStrings\n\t\t)) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait peResourceReplace(this.path, {\n\t\t\ticonData,\n\t\t\tversionStrings\n\t\t});\n\t}\n}\n"],"file":"windows.mjs","sourceRoot":"../../src"}