appium-novawindows2-driver 1.1.9 → 1.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -53,11 +53,11 @@ declare const commands: {
53
53
  patternRestore(this: import("../driver").NovaWindows2Driver, element: import("@appium/types").Element): Promise<void>;
54
54
  patternClose(this: import("../driver").NovaWindows2Driver, element: import("@appium/types").Element): Promise<void>;
55
55
  focusElement(this: import("../driver").NovaWindows2Driver, element: import("@appium/types").Element): Promise<void>;
56
- getClipboardBase64(this: import("../driver").NovaWindows2Driver, contentType?: ("plaintext" | "image") | {
57
- contentType?: "plaintext" | "image";
56
+ getClipboardBase64(this: import("../driver").NovaWindows2Driver, contentType?: ("image" | "plaintext") | {
57
+ contentType?: "image" | "plaintext";
58
58
  }): Promise<string>;
59
59
  setClipboardFromBase64(this: import("../driver").NovaWindows2Driver, args: {
60
- contentType?: "plaintext" | "image";
60
+ contentType?: "image" | "plaintext";
61
61
  b64Content: string;
62
62
  }): Promise<string>;
63
63
  executePowerShellScript(this: import("../driver").NovaWindows2Driver, script: string | {
@@ -1,4 +1,17 @@
1
1
  import { NovaWindows2Driver } from '../driver';
2
+ /**
3
+ * Holds the in-flight command's accumulated stdout/stderr plus the unique
4
+ * marker used to detect command completion. The driver-level stdout/stderr
5
+ * listeners (installed once in startPowerShellSession) push chunks into the
6
+ * active context and call check() so waitForCommandCompletion can re-test
7
+ * the buffers for the completion markers.
8
+ */
9
+ export interface CommandContext {
10
+ stdout: string;
11
+ stderr: string;
12
+ marker: string;
13
+ check: () => void;
14
+ }
2
15
  /**
3
16
  * Executes a PowerShell command in the persistent session
4
17
  */
@@ -1 +1 @@
1
- {"version":3,"file":"powershell.d.ts","sourceRoot":"","sources":["../../../lib/commands/powershell.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAwM/C;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuCtG;AAED;;GAEG;AACH,wBAAsB,6BAA6B,CAAC,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsB9G;AAMD,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmEpF;AAuCD,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCxF"}
1
+ {"version":3,"file":"powershell.d.ts","sourceRoot":"","sources":["../../../lib/commands/powershell.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AA+B/C;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,IAAI,CAAC;CACrB;AA8RD;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoCtG;AAED;;GAEG;AACH,wBAAsB,6BAA6B,CAAC,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA2B9G;AAuBD,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgHpF;AAuCD,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4CxF"}
@@ -5,36 +5,33 @@ exports.sendIsolatedPowerShellCommand = sendIsolatedPowerShellCommand;
5
5
  exports.startPowerShellSession = startPowerShellSession;
6
6
  exports.terminatePowerShellSession = terminatePowerShellSession;
7
7
  const node_child_process_1 = require("node:child_process");
8
+ const node_crypto_1 = require("node:crypto");
8
9
  const base_driver_1 = require("@appium/base-driver");
9
10
  const functions_1 = require("./functions");
10
11
  const win32_1 = require("../powershell/win32");
11
12
  const core_1 = require("../powershell/core");
12
13
  const SET_UTF8_ENCODING = /* ps1 */ `$OutputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8`;
13
- // const ADD_NECESSARY_ASSEMBLIES = /* ps1 */ `
14
- // Add-Type -AssemblyName UIAutomationClient
15
- // Add-Type -AssemblyName UIAutomationTypes
16
- // Add-Type -AssemblyName UIAutomationClientsideProviders
17
- // Add-Type -AssemblyName System.Drawing
18
- // Add-Type -AssemblyName PresentationCore
19
- // Add-Type -AssemblyName System.Windows.Forms
20
- // `;
21
- const ADD_NECESSARY_ASSEMBLIES = /* ps1 */ `
22
- Add-Type -AssemblyName UIAutomationClient
23
- #Add-Type -AssemblyName UIAutomationTypes
24
- Add-Type -AssemblyName System.Drawing
25
- Add-Type -AssemblyName PresentationCore
26
- Add-Type -AssemblyName System.Windows.Forms
14
+ const ADD_NECESSARY_ASSEMBLIES = /* ps1 */ `
15
+ Add-Type -AssemblyName UIAutomationClient
16
+ #Add-Type -AssemblyName UIAutomationTypes
17
+ Add-Type -AssemblyName System.Drawing
18
+ Add-Type -AssemblyName PresentationCore
19
+ Add-Type -AssemblyName System.Windows.Forms
27
20
  `;
28
21
  const USE_UI_AUTOMATION_CLIENT = /* ps1 */ `using namespace System.Windows.Automation`;
29
- const INIT_CACHE_REQUEST = /* ps1 */ `
30
- $cacheRequest = New-Object System.Windows.Automation.CacheRequest
31
- $cacheRequest.TreeFilter = [AndCondition]::new([Automation]::ControlViewCondition, [NotCondition]::new([PropertyCondition]::new([AutomationElement]::FrameworkIdProperty, 'Chrome')));
32
- $cacheRequest.Push()
22
+ const INIT_CACHE_REQUEST = /* ps1 */ `
23
+ $cacheRequest = New-Object System.Windows.Automation.CacheRequest
24
+ $cacheRequest.TreeFilter = [AndCondition]::new([Automation]::ControlViewCondition, [NotCondition]::new([PropertyCondition]::new([AutomationElement]::FrameworkIdProperty, 'Chrome')));
25
+ $cacheRequest.Push()
33
26
  `;
34
27
  const INIT_ROOT_ELEMENT = /* ps1 */ `$rootElement = [AutomationElement]::RootElement`;
35
28
  const NULL_ROOT_ELEMENT = /* ps1 */ `$rootElement = $null`;
36
29
  const INIT_ELEMENT_TABLE = /* ps1 */ `$elementTable = New-Object System.Collections.Generic.Dictionary[[string]\`,[AutomationElement]]`;
37
- const COMMAND_END_MARKER = '___NOVA_WIN2_DRIVER_END___';
30
+ const MARKER_PREFIX = '___NOVA_END_';
31
+ const MARKER_SUFFIX = '___';
32
+ function newMarker() {
33
+ return `${MARKER_PREFIX}${(0, node_crypto_1.randomUUID)().replace(/-/g, '')}${MARKER_SUFFIX}`;
34
+ }
38
35
  // ============================================================================
39
36
  // Helper Functions
40
37
  // ============================================================================
@@ -65,8 +62,8 @@ function ensureSessionReady(driver) {
65
62
  }
66
63
  /**
67
64
  * Forcefully kills a process and all its children on Windows.
68
- * This is critical because certain COM/UIA calls can hang the PowerShell thread
69
- * in a way that a normal SIGTERM/SIGKILL doesn't clean up children.
65
+ * Critical because COM/UIA calls can hang the PS thread in a way that a
66
+ * plain TerminateProcess doesn't clean up spawned children.
70
67
  */
71
68
  function killProcessTree(pid, log) {
72
69
  try {
@@ -78,18 +75,82 @@ function killProcessTree(pid, log) {
78
75
  }
79
76
  }
80
77
  /**
81
- * Waits for command completion marker in PowerShell output
78
+ * Sends a command through the framing protocol and resolves when both the
79
+ * stdout AND stderr completion markers have been observed (or rejects on
80
+ * stderr, timeout, or process death).
81
+ *
82
+ * The dual-marker design solves the stdout/stderr ordering race: PS may
83
+ * write to stderr AFTER it writes the stdout marker, so resolving on the
84
+ * stdout marker alone risks reporting "success" while error text is still
85
+ * in flight (and would later bleed into the next command's buffer).
82
86
  */
83
- function waitForCommandCompletion(driver, powerShell, timeoutMs, command) {
87
+ function waitForCommandCompletion(driver, powerShell, command, timeoutMs) {
84
88
  return new Promise((resolve, reject) => {
85
- let timedOut = false;
89
+ const marker = newMarker();
90
+ let settled = false;
91
+ const startedAt = Date.now();
92
+ const ctx = {
93
+ stdout: '',
94
+ stderr: '',
95
+ marker,
96
+ check: () => check(),
97
+ };
86
98
  const cleanup = () => {
99
+ settled = true;
87
100
  clearTimeout(timeout);
88
- powerShell.stdout.off('data', onData);
89
101
  powerShell.off('close', onClose);
102
+ if (driver.powerShellCommandContext === ctx) {
103
+ driver.powerShellCommandContext = undefined;
104
+ }
105
+ };
106
+ const stripMarker = (text) => text.replace(marker, '').trimEnd();
107
+ const check = () => {
108
+ if (settled)
109
+ return;
110
+ if (!ctx.stdout.includes(marker))
111
+ return;
112
+ if (!ctx.stderr.includes(marker))
113
+ return;
114
+ cleanup();
115
+ const stderrText = stripMarker(ctx.stderr);
116
+ const stdoutText = stripMarker(ctx.stdout).trim();
117
+ const elapsedMs = Date.now() - startedAt;
118
+ const shortCmd = `${command.slice(0, 80)}${command.length > 80 ? '…' : ''}`;
119
+ // Native-exe failure: our $LASTEXITCODE injection emitted
120
+ // "[NativeExit] N" on stderr. ALWAYS a failure regardless of
121
+ // treatStderrAsError — caller asked PS to run a native exe and
122
+ // it exited non-zero, that's unambiguously bad.
123
+ const nativeExitMatch = stderrText.match(/^\[NativeExit\]\s+(-?\d+)\s*$/m);
124
+ if (nativeExitMatch) {
125
+ const nativeCode = nativeExitMatch[1];
126
+ const otherStderr = stderrText
127
+ .replace(/^\[NativeExit\]\s+-?\d+\s*$/m, '')
128
+ .trim();
129
+ const msg = otherStderr
130
+ ? `Native command exited with code ${nativeCode}. stderr: ${otherStderr}`
131
+ : `Native command exited with code ${nativeCode}`;
132
+ driver.log.debug(`[PS Command Failed] (${elapsedMs}ms) ${shortCmd}`);
133
+ driver.log.debug(`[PowerShell Raw Command] \n${(0, core_1.decodePwsh)(command)}`);
134
+ reject(new base_driver_1.errors.UnknownError(msg));
135
+ return;
136
+ }
137
+ if (stderrText) {
138
+ const treatAsError = driver.caps.treatStderrAsError !== false;
139
+ if (treatAsError) {
140
+ driver.log.debug(`[PS Command Failed] (${elapsedMs}ms) ${shortCmd}`);
141
+ driver.log.debug(`[PowerShell Error] ${stderrText}`);
142
+ driver.log.debug(`[PowerShell Raw Command] \n${(0, core_1.decodePwsh)(command)}`);
143
+ reject(new base_driver_1.errors.UnknownError(stderrText));
144
+ return;
145
+ }
146
+ driver.log.debug(`[PS stderr ignored, treatStderrAsError=false] ${stderrText}`);
147
+ }
148
+ driver.log.debug(`[PS Command OK] (${elapsedMs}ms) ${shortCmd}`);
149
+ resolve(stdoutText);
90
150
  };
91
151
  const timeout = setTimeout(() => {
92
- timedOut = true;
152
+ if (settled)
153
+ return;
93
154
  cleanup();
94
155
  driver.log.warn(`PowerShell command timed out after ${timeoutMs}ms`);
95
156
  try {
@@ -103,50 +164,84 @@ function waitForCommandCompletion(driver, powerShell, timeoutMs, command) {
103
164
  }
104
165
  reject(new base_driver_1.errors.TimeoutError(`PowerShell command timed out after ${timeoutMs}ms`));
105
166
  }, timeoutMs);
106
- const onData = (chunk) => {
107
- // driver.log.debug(`[PS Output] ${chunk.toString().trim()}`);
108
- if (chunk.toString().includes(COMMAND_END_MARKER)) {
109
- cleanup();
110
- // driver.log.debug(`[PS Output] \n${driver.powerShellStdOut}`);
111
- // driver.log.debug(`[PS Error] \n${driver.powerShellStdErr}`);
112
- if (driver.powerShellStdErr) {
113
- // Many PS pattern calls (SetFocus, InvokePattern, etc.) legitimately
114
- // fail and the caller catches and falls back. The full stderr is
115
- // already attached to the rejected promise; logging it at error
116
- // level was just noise. Demoted to debug.
117
- driver.log.debug(`[PowerShell Error] ${driver.powerShellStdErr}`);
118
- const decodedCommand = (0, core_1.decodePwsh)(command || '');
119
- driver.log.debug(`[PowerShell Raw Command] \n${decodedCommand}`);
120
- reject(new base_driver_1.errors.UnknownError(driver.powerShellStdErr));
121
- }
122
- else {
123
- const result = driver.powerShellStdOut.replace(COMMAND_END_MARKER, '').trim();
124
- resolve(result);
125
- }
126
- }
127
- };
128
167
  const onClose = (code) => {
129
- if (timedOut)
168
+ if (settled)
130
169
  return;
131
170
  cleanup();
132
171
  if (driver.powerShell === powerShell) {
133
172
  driver.powerShell = undefined;
134
173
  }
135
- if (code === 0) {
136
- const result = driver.powerShellStdOut.replace(COMMAND_END_MARKER, '').trim();
137
- resolve(result);
174
+ if (driver.powerShellTerminating) {
175
+ // Intentional teardown - the rejection here would float up as
176
+ // an unhandled rejection. Resolve silently.
177
+ driver.log.debug('PowerShell process closed during session teardown');
178
+ resolve('');
179
+ return;
138
180
  }
139
- else {
140
- const codeStr = code !== null ? code : 'Unknown';
141
- const hexCode = code !== null ? '0x' + code.toString(16).toUpperCase() : 'Signal';
142
- const errorMsg = driver.powerShellStdErr || 'No error details';
143
- const msg = `[PowerShell Error] Exited with code ${codeStr} (${hexCode}). stderr: \n${errorMsg}`;
144
- driver.log.error(msg);
181
+ // Code 0 mid-command: PS exited cleanly without ever emitting
182
+ // the markers. Either the user issued `exit 0` in their command,
183
+ // or stdin was closed externally. Still a failure of THIS
184
+ // command (the markers never arrived), but the previous log
185
+ // line "[PowerShell Error] Exited with code 0" was misleading.
186
+ if (code === 0) {
187
+ const msg = 'PowerShell process exited cleanly mid-command before completion markers arrived';
188
+ driver.log.warn(msg);
145
189
  reject(new base_driver_1.errors.UnknownError(msg));
190
+ return;
146
191
  }
192
+ const codeDisplay = code !== null
193
+ ? `${code} (0x${(code >>> 0).toString(16).toUpperCase()})`
194
+ : 'killed by signal';
195
+ const errorMsg = ctx.stderr || 'No error details';
196
+ const msg = `[PowerShell Error] Exited with code ${codeDisplay}. stderr: \n${errorMsg}`;
197
+ driver.log.error(msg);
198
+ reject(new base_driver_1.errors.UnknownError(msg));
147
199
  };
148
- powerShell.stdout.on('data', onData);
200
+ // Install context BEFORE writing so we don't miss any output that may
201
+ // already be in the OS pipe from earlier inter-command bytes.
202
+ driver.powerShellCommandContext = ctx;
149
203
  powerShell.once('close', onClose);
204
+ // Write the framed command as five lines:
205
+ // 1. $LASTEXITCODE = 0 - reset the native-exit slot so we
206
+ // don't pick up a stale value from
207
+ // an earlier command in the session.
208
+ // 2. & { <user command> } - subshell wrap prevents an open
209
+ // pipe/brace from absorbing the
210
+ // marker lines.
211
+ // 3. if ($LASTEXITCODE -ne 0) { ... } - if the user command
212
+ // invoked a native exe that exited
213
+ // non-zero, surface that as a
214
+ // "[NativeExit] N" line on stderr so
215
+ // check() can detect it. PS cmdlet
216
+ // failures don't touch
217
+ // $LASTEXITCODE; they already write
218
+ // to stderr.
219
+ // 4. Write-Output "<marker>" - stdout completion marker.
220
+ // 5. [Console]::Error.WriteLine("<marker>") - stderr completion
221
+ // marker; resolving on both ensures
222
+ // any stderr from the command is
223
+ // flushed before we return.
224
+ //
225
+ // EPIPE on any of these writes lands on the stdin 'error' handler
226
+ // installed in startPowerShellSession, which clears driver.powerShell.
227
+ // The pending command then surfaces the failure via onClose or the
228
+ // command timeout — no per-write callback needed.
229
+ try {
230
+ powerShell.stdin.write(`$LASTEXITCODE = 0\n`);
231
+ powerShell.stdin.write(`& { ${command} }\n`);
232
+ powerShell.stdin.write(`if ($LASTEXITCODE -and $LASTEXITCODE -ne 0) { [Console]::Error.WriteLine("[NativeExit] $LASTEXITCODE") }\n`);
233
+ powerShell.stdin.write(`Write-Output "${marker}"\n`);
234
+ powerShell.stdin.write(`[Console]::Error.WriteLine("${marker}")\n`);
235
+ }
236
+ catch (e) {
237
+ if (!settled) {
238
+ cleanup();
239
+ if (driver.powerShell === powerShell) {
240
+ driver.powerShell = undefined;
241
+ }
242
+ reject(new base_driver_1.errors.UnknownError(`Failed to write to PowerShell: ${e?.message ?? e}`));
243
+ }
244
+ }
150
245
  });
151
246
  }
152
247
  // ============================================================================
@@ -170,6 +265,12 @@ function isPowerShellAlive(driver) {
170
265
  * IDs surface as NoSuchElement on the next access, which is correct.
171
266
  */
172
267
  async function ensurePowerShellSession(driver) {
268
+ // Refuse to restart during teardown. Without this, queued commands that
269
+ // arrive after terminatePowerShellSession would happily respawn a fresh
270
+ // PS process, defeating the session delete.
271
+ if (driver.powerShellTerminating) {
272
+ throw new base_driver_1.errors.NoSuchDriverError('PowerShell session is being terminated; refusing to start a new one');
273
+ }
173
274
  if (isPowerShellAlive(driver))
174
275
  return;
175
276
  if (driver.powerShellRestartPromise) {
@@ -204,24 +305,21 @@ async function sendPowerShellCommand(command) {
204
305
  this.commandQueue = this.commandQueue.catch((err) => {
205
306
  this.log.debug(`[Command Queue] Previous command failed, proceeding with next command. Error: ${err?.message || err}`);
206
307
  }).then(async () => {
207
- // Re-check inside the queue: a previous queued command in this same
208
- // chain may have killed the session. If so, restart again.
209
- if (!isPowerShellAlive(this)) {
210
- await ensurePowerShellSession(this);
308
+ // Teardown may have started while we were waiting our turn in the
309
+ // queue. Bail before doing any I/O so we don't trigger an auto-
310
+ // restart of the very process the session is trying to terminate.
311
+ if (this.powerShellTerminating) {
312
+ throw new base_driver_1.errors.NoSuchDriverError('PowerShell session is being terminated');
211
313
  }
314
+ // If PS died between our pre-queue check and our turn, fail this
315
+ // single command. The next sendPowerShellCommand call will hit
316
+ // ensurePowerShellSession (pre-queue) and restart cleanly — which
317
+ // avoids the deadlock that would occur if we tried to restart from
318
+ // inside the queue (startPowerShellSession's own init commands
319
+ // await the queue we are currently holding).
212
320
  ensureSessionReady(this);
213
- this.powerShellStdOut = '';
214
- this.powerShellStdErr = '';
215
- const writeError = await new Promise((res) => {
216
- this.powerShell.stdin.write(`${command}\n`, (err) => err ? res(err) : res(null));
217
- });
218
- if (writeError) {
219
- this.powerShell = undefined;
220
- throw new base_driver_1.errors.UnknownError(`Failed to write to PowerShell: ${writeError.message}`);
221
- }
222
- this.powerShell.stdin.write(`Write-Output "${COMMAND_END_MARKER}"\n`);
223
321
  const timeoutMs = this.caps.powerShellCommandTimeout || 60000;
224
- return await waitForCommandCompletion(this, this.powerShell, timeoutMs, command);
322
+ return await waitForCommandCompletion(this, this.powerShell, command, timeoutMs);
225
323
  });
226
324
  return await this.commandQueue;
227
325
  }
@@ -235,16 +333,21 @@ async function sendIsolatedPowerShellCommand(command) {
235
333
  powerShell.stdout.on('data', chunk => stdout += chunk.toString());
236
334
  powerShell.stderr.on('data', chunk => stderr += chunk.toString());
237
335
  return new Promise((resolve, reject) => {
336
+ powerShell.on('error', (err) => {
337
+ this.log.error(`Isolated PowerShell spawn error: ${err.message}`);
338
+ reject(new base_driver_1.errors.UnknownError(`Failed to spawn PowerShell: ${err.message}`));
339
+ });
238
340
  powerShell.on('close', (code) => {
239
341
  if (code === 0) {
240
342
  resolve(stdout.trim());
241
343
  }
242
344
  else {
243
- const exitCode = code || -1;
244
- const hexCode = '0x' + exitCode.toString(16).toUpperCase();
345
+ const codeDisplay = code !== null
346
+ ? `${code} (0x${(code >>> 0).toString(16).toUpperCase()})`
347
+ : 'killed by signal';
245
348
  const error = stderr || 'No error details';
246
- this.log.error(`Isolated PowerShell exited with code ${exitCode} (${hexCode}). stderr: ${error}`);
247
- reject(new base_driver_1.errors.UnknownError(`PowerShell exited with code ${exitCode} (${hexCode})`));
349
+ this.log.error(`Isolated PowerShell exited with ${codeDisplay}. stderr: ${error}`);
350
+ reject(new base_driver_1.errors.UnknownError(`PowerShell exited with ${codeDisplay}`));
248
351
  }
249
352
  });
250
353
  });
@@ -252,20 +355,58 @@ async function sendIsolatedPowerShellCommand(command) {
252
355
  // ============================================================================
253
356
  // Session Management
254
357
  // ============================================================================
358
+ /**
359
+ * Init script broken into named stages. Each stage is sent as its own framed
360
+ * command so a failure surfaces with the stage name, and per-stage timing
361
+ * shows up in the debug log.
362
+ */
363
+ const INIT_STAGES = [
364
+ { name: 'utf8-encoding', script: SET_UTF8_ENCODING },
365
+ { name: 'using-namespace', script: USE_UI_AUTOMATION_CLIENT },
366
+ { name: 'add-assemblies', script: ADD_NECESSARY_ASSEMBLIES },
367
+ { name: 'win32-helper', script: win32_1.WIN32_HELPER_SCRIPT },
368
+ { name: 'cache-request', script: INIT_CACHE_REQUEST },
369
+ { name: 'element-table', script: INIT_ELEMENT_TABLE },
370
+ { name: 'page-source', script: functions_1.PAGE_SOURCE },
371
+ { name: 'find-children', script: functions_1.FIND_CHILDREN_RECURSIVELY },
372
+ { name: 'find-descendants', script: functions_1.FIND_DESCENDANTS_FUNCTIONS },
373
+ ];
255
374
  async function startPowerShellSession() {
256
375
  this.log.debug('Starting PowerShell session...');
257
- // Spawn PowerShell process
258
- const powerShell = (0, node_child_process_1.spawn)('powershell.exe', ['-NoProfile', '-NoExit', '-Command', '-']);
376
+ // -NoExit is intentionally OMITTED: with `-Command -` we want PS to exit
377
+ // when stdin closes, which is how terminatePowerShellSession requests a
378
+ // graceful shutdown. Earlier code had -NoExit, which kept PS alive past
379
+ // stdin EOF and forced every shutdown down the SIGKILL fallback path.
380
+ const powerShell = (0, node_child_process_1.spawn)('powershell.exe', ['-NoProfile', '-Command', '-']);
259
381
  powerShell.stdout.setEncoding('utf8');
260
382
  powerShell.stderr.setEncoding('utf8');
383
+ // Driver-level dispatchers: route every chunk into the active command's
384
+ // context. Output between commands (none expected in normal flow) is
385
+ // logged for diagnostics rather than silently discarded.
261
386
  powerShell.stdout.on('data', (chunk) => {
262
- this.powerShellStdOut += chunk.toString();
387
+ const text = chunk.toString();
388
+ const ctx = this.powerShellCommandContext;
389
+ if (ctx) {
390
+ ctx.stdout += text;
391
+ ctx.check();
392
+ }
393
+ else if (text.trim()) {
394
+ this.log.debug(`[PS inter-command stdout] ${text.trim()}`);
395
+ }
263
396
  });
264
397
  powerShell.stderr.on('data', (chunk) => {
265
- this.powerShellStdErr += chunk.toString();
398
+ const text = chunk.toString();
399
+ const ctx = this.powerShellCommandContext;
400
+ if (ctx) {
401
+ ctx.stderr += text;
402
+ ctx.check();
403
+ }
404
+ else if (text.trim()) {
405
+ this.log.debug(`[PS inter-command stderr] ${text.trim()}`);
406
+ }
266
407
  });
267
408
  // Prevent unhandled 'error' events (e.g. EPIPE when PS crashes mid-session)
268
- // from taking down the Node process. ensureSessionReady() will catch the
409
+ // from taking down the Node process. ensureSessionReady() catches the
269
410
  // broken state on the next command.
270
411
  powerShell.stdin.on('error', (err) => {
271
412
  this.log.warn(`PowerShell stdin error (${err.code}): ${err.message}`);
@@ -273,6 +414,14 @@ async function startPowerShellSession() {
273
414
  this.powerShell = undefined;
274
415
  }
275
416
  });
417
+ // Process-level 'error' (spawn failure, ENOENT for powershell.exe, etc.).
418
+ // Without a listener this would crash the Node process.
419
+ powerShell.on('error', (err) => {
420
+ this.log.error(`PowerShell process error: ${err.message}`);
421
+ if (this.powerShell === powerShell) {
422
+ this.powerShell = undefined;
423
+ }
424
+ });
276
425
  // Detect unexpected process exit between commands.
277
426
  powerShell.on('exit', (code, signal) => {
278
427
  if (this.powerShell === powerShell) {
@@ -281,33 +430,51 @@ async function startPowerShellSession() {
281
430
  }
282
431
  });
283
432
  this.powerShell = powerShell;
284
- // Set working directory if specified
285
- if (this.caps.appWorkingDir) {
286
- const expandedDir = expandEnvironmentVariables(this.caps.appWorkingDir, this.log);
287
- this.caps.appWorkingDir = expandedDir;
288
- await sendPowerShellCommand.call(this, `Set-Location -Path '${expandedDir}'`);
433
+ this.powerShellTerminating = false;
434
+ try {
435
+ // Set working directory if specified
436
+ if (this.caps.appWorkingDir) {
437
+ const expandedDir = expandEnvironmentVariables(this.caps.appWorkingDir, this.log);
438
+ this.caps.appWorkingDir = expandedDir;
439
+ await sendPowerShellCommand.call(this, `Set-Location -Path '${expandedDir}'`);
440
+ }
441
+ // Initialise PS environment one stage at a time. Failures point to
442
+ // the offending stage; timings highlight slow ones.
443
+ this.log.info('Initializing PowerShell environment...');
444
+ const initStart = Date.now();
445
+ for (const stage of INIT_STAGES) {
446
+ const stageStart = Date.now();
447
+ try {
448
+ await sendPowerShellCommand.call(this, stage.script);
449
+ }
450
+ catch (e) {
451
+ throw new base_driver_1.errors.UnknownError(`PowerShell init stage '${stage.name}' failed: ${e?.message ?? e}`);
452
+ }
453
+ this.log.debug(` init stage '${stage.name}' completed in ${Date.now() - stageStart}ms`);
454
+ }
455
+ this.log.debug(`PowerShell environment initialized in ${Date.now() - initStart}ms`);
456
+ // Setup root element based on capabilities
457
+ await setupRootElement.call(this);
458
+ this.log.debug('PowerShell session initialization completed');
459
+ }
460
+ catch (e) {
461
+ // Init or root-element setup failed. Tear down the spawned PS process
462
+ // so this.powerShell doesn't point at a half-initialised session that
463
+ // the next sendPowerShellCommand would happily try to use.
464
+ this.log.warn(`PowerShell session init failed, cleaning up: ${e?.message ?? e}`);
465
+ try {
466
+ if (powerShell.pid) {
467
+ killProcessTree(powerShell.pid, this.log);
468
+ }
469
+ }
470
+ catch {
471
+ // best effort
472
+ }
473
+ if (this.powerShell === powerShell) {
474
+ this.powerShell = undefined;
475
+ }
476
+ throw e;
289
477
  }
290
- // Initialize PowerShell environment
291
- // Combine all scripts into one for faster execution
292
- // 'using namespace' must be at the beginning of the script, so USE_UI_AUTOMATION_CLIENT comes first
293
- const combinedScript = [
294
- USE_UI_AUTOMATION_CLIENT,
295
- SET_UTF8_ENCODING,
296
- ADD_NECESSARY_ASSEMBLIES,
297
- win32_1.WIN32_HELPER_SCRIPT,
298
- INIT_CACHE_REQUEST,
299
- INIT_ELEMENT_TABLE,
300
- functions_1.PAGE_SOURCE,
301
- functions_1.FIND_CHILDREN_RECURSIVELY,
302
- functions_1.FIND_DESCENDANTS_FUNCTIONS
303
- ].join('\n');
304
- this.log.info('Initializing PowerShell environment...');
305
- const start = Date.now();
306
- await sendPowerShellCommand.call(this, combinedScript);
307
- this.log.debug(`PowerShell environment initialized in ${Date.now() - start}ms`);
308
- // Setup root element based on capabilities
309
- await setupRootElement.call(this);
310
- this.log.debug('PowerShell session initialization completed');
311
478
  }
312
479
  /**
313
480
  * Sets up the root UI element based on capabilities
@@ -347,13 +514,22 @@ async function terminatePowerShellSession() {
347
514
  return;
348
515
  }
349
516
  this.log.debug('Terminating PowerShell session...');
517
+ this.powerShellTerminating = true;
350
518
  const powerShell = this.powerShell;
351
519
  this.powerShell = undefined;
352
520
  return new Promise((resolve) => {
353
521
  const timeout = setTimeout(() => {
354
- this.log.warn('PowerShell did not terminate gracefully, killing process');
522
+ this.log.warn('PowerShell did not terminate gracefully, killing process tree');
355
523
  try {
356
- powerShell.kill('SIGKILL');
524
+ if (powerShell.pid) {
525
+ // taskkill /T kills the whole tree, which is the right
526
+ // thing to do here: PS may have spawned child exes that
527
+ // a plain TerminateProcess on the PS host would orphan.
528
+ killProcessTree(powerShell.pid, this.log);
529
+ }
530
+ else {
531
+ powerShell.kill('SIGKILL');
532
+ }
357
533
  }
358
534
  catch (e) {
359
535
  this.log.warn(`Failed to kill PowerShell: ${e}`);
@@ -1 +1 @@
1
- {"version":3,"file":"powershell.js","sourceRoot":"","sources":["../../../lib/commands/powershell.ts"],"names":[],"mappings":";;AA4MA,sDAuCC;AAKD,sEAsBC;AAMD,wDAmEC;AAuCD,gEAoCC;AAlaD,2DAAqF;AAErF,qDAA6C;AAC7C,2CAAiG;AACjG,+CAA0D;AAC1D,6CAAgD;AAEhD,MAAM,iBAAiB,GAAG,SAAS,CAAC,4EAA4E,CAAC;AACjH,+CAA+C;AAC/C,4CAA4C;AAC5C,2CAA2C;AAC3C,yDAAyD;AACzD,wCAAwC;AACxC,0CAA0C;AAC1C,8CAA8C;AAC9C,KAAK;AACL,MAAM,wBAAwB,GAAG,SAAS,CAAC;;;;;;CAM1C,CAAC;AACF,MAAM,wBAAwB,GAAG,SAAS,CAAC,2CAA2C,CAAC;AACvF,MAAM,kBAAkB,GAAG,SAAS,CAAC;;;;CAIpC,CAAC;AACF,MAAM,iBAAiB,GAAG,SAAS,CAAC,iDAAiD,CAAC;AACtF,MAAM,iBAAiB,GAAG,SAAS,CAAC,sBAAsB,CAAC;AAC3D,MAAM,kBAAkB,GAAG,SAAS,CAAC,kGAAkG,CAAC;AAExI,MAAM,kBAAkB,GAAG,4BAA4B,CAAC;AAExD,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,SAAS,0BAA0B,CAAC,KAAa,EAAE,GAAQ;IACvD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IACzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEvC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,GAAG,CAAC,IAAI,CAAC,oCAAoC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEtF,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QACtD,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,GAAG,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,MAA0B;IAClD,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;IAC7B,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpD,MAAM,IAAI,oBAAM,CAAC,YAAY,CAAC,+CAA+C,CAAC,CAAC;IACnF,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,GAAW,EAAE,GAAQ;IAC1C,IAAI,CAAC;QACD,GAAG,CAAC,KAAK,CAAC,2CAA2C,GAAG,EAAE,CAAC,CAAC;QAC5D,IAAA,6BAAQ,EAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QACd,GAAG,CAAC,IAAI,CAAC,uCAAuC,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACzE,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB,CAC7B,MAA0B,EAC1B,UAA0C,EAC1C,SAAiB,EACjB,OAAgB;IAEhB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,MAAM,OAAO,GAAG,GAAG,EAAE;YACjB,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACtC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,QAAQ,GAAG,IAAI,CAAC;YAChB,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,sCAAsC,SAAS,IAAI,CAAC,CAAC;YACrE,IAAI,CAAC;gBACD,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;oBACrD,eAAe,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC5C,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;gBAClC,CAAC;YACL,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,+CAA+C,CAAC,EAAE,CAAC,CAAC;YACxE,CAAC;YACD,MAAM,CAAC,IAAI,oBAAM,CAAC,YAAY,CAAC,sCAAsC,SAAS,IAAI,CAAC,CAAC,CAAC;QACzF,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,MAAM,MAAM,GAAG,CAAC,KAAU,EAAE,EAAE;YAC1B,8DAA8D;YAC9D,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBAChD,OAAO,EAAE,CAAC;gBACV,gEAAgE;gBAChE,+DAA+D;gBAC/D,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;oBAC1B,qEAAqE;oBACrE,iEAAiE;oBACjE,gEAAgE;oBAChE,0CAA0C;oBAC1C,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;oBAClE,MAAM,cAAc,GAAG,IAAA,iBAAU,EAAC,OAAO,IAAI,EAAE,CAAC,CAAC;oBACjD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,8BAA8B,cAAc,EAAE,CAAC,CAAC;oBACjE,MAAM,CAAC,IAAI,oBAAM,CAAC,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBAC7D,CAAC;qBAAM,CAAC;oBACJ,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC9E,OAAO,CAAC,MAAM,CAAC,CAAC;gBACpB,CAAC;YACL,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,IAAmB,EAAE,EAAE;YACpC,IAAI,QAAQ;gBAAE,OAAO;YACrB,OAAO,EAAE,CAAC;YACV,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBACnC,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;YAClC,CAAC;YAED,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC9E,OAAO,CAAC,MAAM,CAAC,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACJ,MAAM,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;gBACjD,MAAM,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAClF,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,IAAI,kBAAkB,CAAC;gBAC/D,MAAM,GAAG,GAAG,uCAAuC,OAAO,KAAK,OAAO,gBAAgB,QAAQ,EAAE,CAAC;gBACjG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACtB,MAAM,CAAC,IAAI,oBAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YACzC,CAAC;QACL,CAAC,CAAC;QAEF,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACP,CAAC;AAED,+EAA+E;AAC/E,oCAAoC;AACpC,+EAA+E;AAE/E;;GAEG;AACH,SAAS,iBAAiB,CAAC,MAA0B;IACjD,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;IAC7B,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,KAAK,IAAI,IAAI,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC7D,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,uBAAuB,CAAC,MAA0B;IAC7D,IAAI,iBAAiB,CAAC,MAAM,CAAC;QAAE,OAAO;IACtC,IAAI,MAAM,CAAC,wBAAwB,EAAE,CAAC;QAClC,MAAM,MAAM,CAAC,wBAAwB,CAAC;QACtC,OAAO;IACX,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;IACzE,MAAM,CAAC,wBAAwB,GAAG,CAAC,KAAK,IAAI,EAAE;QAC1C,IAAI,CAAC;YACD,MAAM,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACnD,CAAC;gBAAS,CAAC;YACP,MAAM,CAAC,wBAAwB,GAAG,SAAS,CAAC;QAChD,CAAC;IACL,CAAC,CAAC,EAAE,CAAC;IACL,MAAM,MAAM,CAAC,wBAAwB,CAAC;AAC1C,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,qBAAqB,CAA2B,OAAe;IACjF,2EAA2E;IAC3E,qEAAqE;IACrE,0EAA0E;IAC1E,4EAA4E;IAC5E,gCAAgC;IAChC,MAAM,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAEpC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QAChD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iFAAiF,GAAG,EAAE,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC;IAC3H,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;QACf,oEAAoE;QACpE,2DAA2D;QAC3D,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;QACD,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAEzB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAE3B,MAAM,UAAU,GAAG,MAAM,IAAI,OAAO,CAAe,CAAC,GAAG,EAAE,EAAE;YACvD,IAAI,CAAC,UAAW,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;QACH,IAAI,UAAU,EAAE,CAAC;YACb,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC5B,MAAM,IAAI,oBAAM,CAAC,YAAY,CAAC,kCAAkC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1F,CAAC;QACD,IAAI,CAAC,UAAW,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,kBAAkB,KAAK,CAAC,CAAC;QAEvE,MAAM,SAAS,GAAI,IAAI,CAAC,IAAY,CAAC,wBAAwB,IAAI,KAAK,CAAC;QACvE,OAAO,MAAM,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAW,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC;AACnC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,6BAA6B,CAA2B,OAAe;IACzF,MAAM,UAAU,GAAG,IAAA,0BAAK,EAAC,gBAAgB,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAEhF,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAElE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAC5B,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACb,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACJ,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;gBAC5B,MAAM,OAAO,GAAG,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC3D,MAAM,KAAK,GAAG,MAAM,IAAI,kBAAkB,CAAC;gBAC3C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,wCAAwC,QAAQ,KAAK,OAAO,cAAc,KAAK,EAAE,CAAC,CAAC;gBAClG,MAAM,CAAC,IAAI,oBAAM,CAAC,YAAY,CAAC,+BAA+B,QAAQ,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC;YAC5F,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AAED,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAExE,KAAK,UAAU,sBAAsB;IACxC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAEjD,2BAA2B;IAC3B,MAAM,UAAU,GAAG,IAAA,0BAAK,EAAC,gBAAgB,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;IACvF,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAEtC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAU,EAAE,EAAE;QACxC,IAAI,CAAC,gBAAgB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAU,EAAE,EAAE;QACxC,IAAI,CAAC,gBAAgB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,4EAA4E;IAC5E,yEAAyE;IACzE,oCAAoC;IACpC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAQ,EAAE,EAAE;QACtC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACtE,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACjC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAChC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,mDAAmD;IACnD,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QACnC,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wCAAwC,IAAI,YAAY,MAAM,GAAG,CAAC,CAAC;YACjF,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAChC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAE7B,qCAAqC;IACrC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1B,MAAM,WAAW,GAAG,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAClF,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC;QACtC,MAAM,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,uBAAuB,WAAW,GAAG,CAAC,CAAC;IAClF,CAAC;IAED,oCAAoC;IACpC,oDAAoD;IACpD,oGAAoG;IACpG,MAAM,cAAc,GAAG;QACnB,wBAAwB;QACxB,iBAAiB;QACjB,wBAAwB;QACxB,2BAAmB;QACnB,kBAAkB;QAClB,kBAAkB;QAClB,uBAAW;QACX,qCAAyB;QACzB,sCAA0B;KAC7B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IACvD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,yCAAyC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;IAEhF,2CAA2C;IAC3C,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAElC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB;IAC3B,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;IAE7C,mBAAmB;IACnB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC;QACzE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QACjE,MAAM,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;QAC1D,OAAO;IACX,CAAC;IAED,eAAe;IACf,IAAI,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACvD,MAAM,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;QAC1D,OAAO;IACX,CAAC;IAED,qBAAqB;IACrB,IAAI,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;QACtC,MAAM,WAAW,GAAG,0BAA0B,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,WAAW,EAAE,CAAC,CAAC;QACvD,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC;IAED,uBAAuB;IACvB,IAAI,iBAAiB,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAChB,MAAM,IAAI,oBAAM,CAAC,oBAAoB,CAAC,sDAAsD,CAAC,CAAC;QAClG,CAAC;QACD,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,0BAA0B;IAC5C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QACxD,OAAO;IACX,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAEpD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACnC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAE5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;YAC1E,IAAI,CAAC;gBACD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,EAAE,CAAC;QACd,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YAC1B,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAC7D,OAAO,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC;YACD,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC,EAAE,CAAC,CAAC;YACtD,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"powershell.js","sourceRoot":"","sources":["../../../lib/commands/powershell.ts"],"names":[],"mappings":"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"}