{"version":3,"file":"windows.mjs","names":["mkdir","readFile","writeFile","join","pathJoin","dirname","PathType","createArchiveByFileStatOrThrow","pathRelativeBase","pathRelativeBaseMatch","peResourceReplace","windowsPatch3dDisplayDriversSize","ProjectorOtto","ProjectorOttoWindows","iconFile","iconData","versionStrings","patch3dDisplayDriversSize","constructor","path","extension","configNewline","lingoNewline","splashImageExtension","sklName","getIconData","d","Uint8Array","buffer","byteOffset","byteLength","_writeSkeleton","skeleton","shockwave","xtrasName","xtrasPath","xtrasMappings","getIncludeXtrasMappings","foundProjectorSkl","foundXtras","patches","_getPatches","extract","entry","dest","type","FILE","data","patch","match","volumePath","read","Error","modify","recursive","setAttributes","ignoreTimes","xtrasHandler","xtrasRel","includeXtrasMappingsDest","projectorSklHandler","entryPath","includes","projectorDllHandler","test","archive","nobrowse","RESOURCE_FORK","Promise","all","map","p","after","_getPatch3dDisplayDriversSize","push","_getPatchResources","skl","search","toLowerCase","count","file","split","pop","x32"],"sources":["../../../src/projector/otto/windows.ts"],"sourcesContent":["import {mkdir, readFile, writeFile} from 'node:fs/promises';\nimport {join as pathJoin, dirname} from 'node:path';\n\nimport {\n\tEntry,\n\tPathType,\n\tcreateArchiveByFileStatOrThrow\n} from '@shockpkg/archive-files';\n\nimport {pathRelativeBase, pathRelativeBaseMatch} from '../../util.ts';\nimport {\n\tpeResourceReplace,\n\twindowsPatch3dDisplayDriversSize\n} from '../../util/windows.ts';\nimport {IFilePatch, ProjectorOtto} from '../otto.ts';\n\n/**\n * ProjectorOttoWindows object.\n */\nexport class ProjectorOttoWindows extends ProjectorOtto {\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:\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 * Version strings.\n\t */\n\tpublic versionStrings: Readonly<{[key: string]: string}> | null = null;\n\n\t/**\n\t * Patch the Shockave 3D Xtra to have a larger buffer to avoid a crash.\n\t * The buffer for resolving InstalledDisplayDrivers to a path is small.\n\t * Changes to the values stored in InstalledDisplayDrivers cause issues.\n\t * The value is now supposed to hold full paths on modern Windows.\n\t * In particular, Nvidia drivers which do this need this patch.\n\t */\n\tpublic patch3dDisplayDriversSize = false;\n\n\t/**\n\t * ProjectorOttoWindows 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 '.exe';\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic get configNewline() {\n\t\treturn '\\r\\n';\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\tpublic get lingoNewline() {\n\t\treturn '\\r\\n';\n\t}\n\n\t/**\n\t * @inheritdoc\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\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 * @inheritdoc\n\t */\n\tprotected async _writeSkeleton(skeleton: string) {\n\t\tconst {path, shockwave, sklName, xtrasName, xtrasPath} = this;\n\n\t\tconst xtrasMappings = this.getIncludeXtrasMappings();\n\n\t\tlet foundProjectorSkl = 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 * SKL handler.\n\t\t *\n\t\t * @param entry Archive entry.\n\t\t * @returns Boolean.\n\t\t */\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 extract(entry, path);\n\t\t\treturn true;\n\t\t};\n\n\t\t/**\n\t\t * DLL handler.\n\t\t *\n\t\t * @param entry Archive entry.\n\t\t * @returns Boolean.\n\t\t */\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 extract(entry, pathJoin(dirname(path), entryPath));\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 projectorSklHandler(entry)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (await projectorDllHandler(entry)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn true;\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\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\tconst patches: IFilePatch[] = [];\n\t\tlet p = this._getPatch3dDisplayDriversSize();\n\t\tif (p) {\n\t\t\tpatches.push(p);\n\t\t}\n\t\tp = await this._getPatchResources();\n\t\tif (p) {\n\t\t\tpatches.push(p);\n\t\t}\n\t\treturn patches;\n\t}\n\n\t/**\n\t * Get patch for main file resources.\n\t *\n\t * @returns Patch spec.\n\t */\n\tprotected async _getPatchResources() {\n\t\tconst iconData = await this.getIconData();\n\t\tconst {versionStrings, sklName} = this;\n\t\tif (!(iconData || versionStrings)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst skl = sklName;\n\t\tconst search = skl.toLowerCase();\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\tsearch === file.split('/').pop()!.toLowerCase(),\n\t\t\t// eslint-disable-next-line jsdoc/require-jsdoc\n\t\t\tmodify: (data: Uint8Array) => {\n\t\t\t\tconst d = peResourceReplace(data, {\n\t\t\t\t\ticonData,\n\t\t\t\t\tversionStrings\n\t\t\t\t});\n\t\t\t\tcount++;\n\t\t\t\treturn d;\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\tthrow new Error(`Failed to locate for patching: ${skl}`);\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 Shockwave 3D InstalledDisplayDrivers size.\n\t *\n\t * @returns Patch spec.\n\t */\n\tprotected _getPatch3dDisplayDriversSize() {\n\t\tif (!this.patch3dDisplayDriversSize) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst x32 = 'Shockwave 3D Asset.x32';\n\t\tconst search = x32.toLowerCase();\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\tsearch === file.split('/').pop()!.toLowerCase(),\n\t\t\t// eslint-disable-next-line jsdoc/require-jsdoc\n\t\t\tmodify: (data: Uint8Array) => {\n\t\t\t\twindowsPatch3dDisplayDriversSize(data);\n\t\t\t\tcount++;\n\t\t\t\treturn data;\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\tthrow new Error(`Failed to locate for patching: ${x32}`);\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":[]}