{"version":3,"file":"windows.mjs","names":["mkdir","open","readFile","writeFile","join","pathJoin","basename","dirname","trimExtension","windowsLauncher","ProjectorOttoWindows","BundleOtto","BundleOttoWindows","constructor","path","flat","projector","_createProjector","extension","_getProjectorPathNested","directory","Error","_getProjectorPath","_writeLauncher","d","Uint8Array","v","DataView","buffer","byteOffset","byteLength","f","r","read","bytesRead","getUint32","close","machine","getUint16","res","launcher","recursive"],"sources":["../../../src/bundle/otto/windows.ts"],"sourcesContent":["import {mkdir, open, readFile, writeFile} from 'node:fs/promises';\nimport {join as pathJoin, basename, dirname} from 'node:path';\n\nimport {trimExtension} from '../../util.ts';\nimport {windowsLauncher} from '../../util/windows.ts';\nimport {ProjectorOttoWindows} from '../../projector/otto/windows.ts';\nimport {BundleOtto} from '../otto.ts';\n\n/**\n * BundleOttoWindows object.\n */\nexport class BundleOttoWindows extends BundleOtto {\n\t/**\n\t * ProjectorOttoWindows instance.\n\t */\n\tpublic readonly projector: ProjectorOttoWindows;\n\n\t/**\n\t * BundleOttoWindows 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 '.exe';\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\tprotected _getProjectorPathNested(): string {\n\t\tconst {path, extension} = this;\n\t\tconst directory = trimExtension(path, extension, true);\n\t\tif (directory === path) {\n\t\t\tthrow new Error(`Output path must end with: ${extension}`);\n\t\t}\n\t\treturn pathJoin(directory, basename(path));\n\t}\n\n\t/**\n\t * @inheritdoc\n\t */\n\tprotected _createProjector() {\n\t\treturn new ProjectorOttoWindows(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\tconst d = new Uint8Array(4);\n\t\tconst v = new DataView(d.buffer, d.byteOffset, d.byteLength);\n\t\tconst f = await open(projector.path, 'r');\n\t\ttry {\n\t\t\tlet r = await f.read(d, 0, 4, 60);\n\t\t\tif (r.bytesRead < 4) {\n\t\t\t\tthrow new Error('Unknown format');\n\t\t\t}\n\t\t\tr = await f.read(d, 0, 2, v.getUint32(0, true) + 4);\n\t\t\tif (r.bytesRead < 2) {\n\t\t\t\tthrow new Error('Unknown format');\n\t\t\t}\n\t\t} finally {\n\t\t\tawait f.close();\n\t\t}\n\n\t\tconst machine = v.getUint16(0, true);\n\t\t// eslint-disable-next-line jsdoc/require-jsdoc\n\t\tconst res = async () => readFile(projector.path);\n\t\tlet launcher = null;\n\t\tswitch (machine) {\n\t\t\tcase 0x14c: {\n\t\t\t\tlauncher = await windowsLauncher('i686', res);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tthrow new Error(`Unknown machine type: ${machine}`);\n\t\t\t}\n\t\t}\n\n\t\tawait mkdir(dirname(path), {recursive: true});\n\t\tawait writeFile(path, launcher);\n\t}\n}\n"],"mappings":"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","ignoreList":[]}