UNPKG

7.22 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../src/vm/ParallelsVm.ts"],"names":[],"mappings":"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","sourcesContent":["import { exec, spawn, DebugLogger, ExtraSpawnOptions, log } from \"builder-util\"\nimport { SpawnOptions, execFileSync, ExecFileOptions } from \"child_process\"\nimport { VmManager } from \"./vm\"\n\n/** @internal */\nexport async function parseVmList(debugLogger: DebugLogger) {\n // do not log output if debug - it is huge, logged using debugLogger\n let rawList = await exec(\"prlctl\", [\"list\", \"-i\", \"-s\", \"name\"], undefined, false)\n debugLogger.add(\"parallels.list\", rawList)\n\n rawList = rawList.substring(rawList.indexOf(\"ID:\"))\n\n // let match: Array<string> | null\n const result: Array<ParallelsVm> = []\n for (const info of rawList.split(\"\\n\\n\").map(it => it.trim()).filter(it => it.length > 0)) {\n const vm: any = {}\n for (const line of info.split(\"\\n\")) {\n const meta = /^([^:(\"]+): (.*)$/.exec(line)\n if (meta == null) {\n continue\n }\n\n const key = meta[1].toLowerCase()\n if (key === \"id\" || key === \"os\" || key === \"name\" || key === \"state\" || key === \"name\") {\n vm[key] = meta[2].trim()\n }\n }\n result.push(vm)\n }\n return result\n}\n\n/** @internal */\nexport class ParallelsVmManager extends VmManager {\n private startPromise: Promise<any>\n\n private isExitHookAdded = false\n\n constructor(private readonly vm: ParallelsVm) {\n super()\n\n this.startPromise = this.doStartVm()\n }\n\n get pathSep(): string {\n return \"/\"\n }\n\n private handleExecuteError(error: Error): any {\n if (error.message.includes(\"Unable to open new session in this virtual machine\")) {\n throw new Error(`Please ensure that your are logged in \"${this.vm.name}\" parallels virtual machine. In the future please do not stop VM, but suspend.\\n\\n${error.message}`)\n }\n\n log.warn(\"ensure that 'Share folders' is set to 'All Disks', see https://goo.gl/E6XphP\")\n throw error\n }\n\n async exec(file: string, args: Array<string>, options?: ExecFileOptions): Promise<string> {\n await this.ensureThatVmStarted()\n // it is important to use \"--current-user\" to execute command under logged in user - to access certs.\n return await exec(\"prlctl\", [\"exec\", this.vm.id, \"--current-user\", file.startsWith(\"/\") ? macPathToParallelsWindows(file) : file].concat(args), options)\n .catch(error => this.handleExecuteError(error))\n }\n\n async spawn(file: string, args: Array<string>, options?: SpawnOptions, extraOptions?: ExtraSpawnOptions): Promise<any> {\n await this.ensureThatVmStarted()\n return await spawn(\"prlctl\", [\"exec\", this.vm.id, file].concat(args), options, extraOptions)\n .catch(error => this.handleExecuteError(error))\n }\n\n private async doStartVm() {\n const vmId = this.vm.id\n const state = this.vm.state\n if (state === \"running\") {\n return\n }\n\n if (!this.isExitHookAdded) {\n this.isExitHookAdded = true\n require(\"async-exit-hook\")((callback: (() => void) | null) => {\n const stopArgs = [\"suspend\", vmId]\n if (callback == null) {\n execFileSync(\"prlctl\", stopArgs)\n }\n else {\n exec(\"prlctl\", stopArgs)\n .then(callback)\n .catch(callback)\n }\n })\n }\n await exec(\"prlctl\", [\"start\", vmId])\n }\n\n private ensureThatVmStarted() {\n let startPromise = this.startPromise\n if (startPromise == null) {\n startPromise = this.doStartVm()\n this.startPromise = startPromise\n }\n return startPromise\n }\n\n toVmFile(file: string): string {\n // https://stackoverflow.com/questions/4742992/cannot-access-network-drive-in-powershell-running-as-administrator\n return macPathToParallelsWindows(file)\n }\n}\n\nexport function macPathToParallelsWindows(file: string) {\n if (file.startsWith(\"C:\\\\\")) {\n return file\n }\n return \"\\\\\\\\Mac\\\\Host\\\\\" + file.replace(/\\//g, \"\\\\\")\n}\n\nexport interface ParallelsVm {\n id: string\n name: string\n os: \"win-10\" | \"ubuntu\" | \"elementary\"\n state: \"running\" | \"suspended\" | \"stopped\"\n}"],"sourceRoot":""}