Skip to content

Commit 4ec4c9e

Browse files
committed
refactor: streamline TauriWorkerService and enhance console logging
- Removed the driverProvider property from TauriWorkerService as it was unnecessary. - Updated the afterSession method to always clear the mock store, ensuring better memory management. - Enhanced the console wrapper to include a trace method, improving logging capabilities for debugging. - Adjusted the console wrapper script to ensure the trace method is properly defined and utilized.
1 parent 28ab18b commit 4ec4c9e

File tree

3 files changed

+21
-15
lines changed

3 files changed

+21
-15
lines changed

packages/tauri-service/src/scripts/console-wrapper.source.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ const FRONTEND_PREFIX = '[Tauri:Frontend]';
2525
info: console.info.bind(console),
2626
warn: console.warn.bind(console),
2727
error: console.error.bind(console),
28+
trace: console.trace.bind(console),
2829
};
2930

3031
const LogLevel = { Trace: 1, Debug: 2, Info: 3, Warn: 4, Error: 5 };
@@ -109,6 +110,13 @@ const FRONTEND_PREFIX = '[Tauri:Frontend]';
109110
writable: true,
110111
configurable: true,
111112
});
113+
Object.defineProperty(console, 'trace', {
114+
value: (...args) => {
115+
forward(LogLevel.Trace, args);
116+
},
117+
writable: true,
118+
configurable: true,
119+
});
112120
} catch (err) {
113121
originalConsole.warn('[WDIO Console Forwarding] Failed to override console methods:', err);
114122
}
@@ -120,6 +128,7 @@ const FRONTEND_PREFIX = '[Tauri:Frontend]';
120128
Object.defineProperty(console, 'info', { value: originalConsole.info, writable: true, configurable: true });
121129
Object.defineProperty(console, 'warn', { value: originalConsole.warn, writable: true, configurable: true });
122130
Object.defineProperty(console, 'error', { value: originalConsole.error, writable: true, configurable: true });
131+
Object.defineProperty(console, 'trace', { value: originalConsole.trace, writable: true, configurable: true });
123132
console[CONSOLE_WRAPPED] = undefined;
124133
} catch (_e) {}
125134
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
// AUTO-GENERATED - Do not edit manually.
22
// Source: src/scripts/console-wrapper.source.js
33
// Regenerate: pnpm --filter @wdio/tauri-service build:console-wrapper
4-
export const CONSOLE_WRAPPER_SCRIPT = `const CONSOLE_WRAPPED_KEY="wdio:console-wrapped",LOG_FRONTEND_COMMAND="plugin:wdio|log_frontend",FRONTEND_PREFIX="[Tauri:Frontend]";(()=>{const e=Symbol.for(CONSOLE_WRAPPED_KEY);if(console[e])return;if("undefined"==typeof window||!window.__TAURI__||!window.__TAURI__.core||!window.__TAURI__.core.invoke)return;console[e]=!0;const o={log:console.log.bind(console),debug:console.debug.bind(console),info:console.info.bind(console),warn:console.warn.bind(console),error:console.error.bind(console)},n=1,r=2,i=3,l=4,c=5,t={[n]:"trace",[r]:"debug",[i]:"info",[l]:"warn",[c]:"error"};function a(e,a){const d=Array.from(a).map(e=>"string"==typeof e?e:JSON.stringify(e)).join(" "),b=o[{[n]:"log",[r]:"debug",[i]:"info",[l]:"warn",[c]:"error"}[e]||"log"];b&&b.call(console,\`\${FRONTEND_PREFIX} \${d}\`);const s=t[e]||"info";(()=>{try{const e=window.__TAURI__.core.invoke(LOG_FRONTEND_COMMAND,{message:d,level:s}),o=new Promise((e,o)=>{setTimeout(()=>{o(new Error("Invoke timeout"))},5e3)});Promise.race([e,o])}catch(e){}})()}try{Object.defineProperty(console,"log",{value:(...e)=>{a(1,e)},writable:!0,configurable:!0}),Object.defineProperty(console,"debug",{value:(...e)=>{a(2,e)},writable:!0,configurable:!0}),Object.defineProperty(console,"info",{value:(...e)=>{a(3,e)},writable:!0,configurable:!0}),Object.defineProperty(console,"warn",{value:(...e)=>{a(4,e)},writable:!0,configurable:!0}),Object.defineProperty(console,"error",{value:(...e)=>{a(5,e)},writable:!0,configurable:!0})}catch(e){o.warn("[WDIO Console Forwarding] Failed to override console methods:",e)}function d(){try{Object.defineProperty(console,"log",{value:o.log,writable:!0,configurable:!0}),Object.defineProperty(console,"debug",{value:o.debug,writable:!0,configurable:!0}),Object.defineProperty(console,"info",{value:o.info,writable:!0,configurable:!0}),Object.defineProperty(console,"warn",{value:o.warn,writable:!0,configurable:!0}),Object.defineProperty(console,"error",{value:o.error,writable:!0,configurable:!0}),console[e]=void 0}catch(e){}}"undefined"!=typeof window&&(window.addEventListener("beforeunload",d),window.__wdioConsoleCleanup=d)})();`;
4+
export const CONSOLE_WRAPPER_SCRIPT = `const CONSOLE_WRAPPED_KEY="wdio:console-wrapped",LOG_FRONTEND_COMMAND="plugin:wdio|log_frontend",FRONTEND_PREFIX="[Tauri:Frontend]";(()=>{const e=Symbol.for(CONSOLE_WRAPPED_KEY);if(console[e])return;if("undefined"==typeof window||!window.__TAURI__||!window.__TAURI__.core||!window.__TAURI__.core.invoke)return;console[e]=!0;const o={log:console.log.bind(console),debug:console.debug.bind(console),info:console.info.bind(console),warn:console.warn.bind(console),error:console.error.bind(console),trace:console.trace.bind(console)},n=1,r=2,l=3,i=4,c=5,t={[n]:"trace",[r]:"debug",[l]:"info",[i]:"warn",[c]:"error"};function a(e,a){const b=Array.from(a).map(e=>"string"==typeof e?e:JSON.stringify(e)).join(" "),d=o[{[n]:"log",[r]:"debug",[l]:"info",[i]:"warn",[c]:"error"}[e]||"log"];d&&d.call(console,\`\${FRONTEND_PREFIX} \${b}\`);const s=t[e]||"info";(()=>{try{const e=window.__TAURI__.core.invoke(LOG_FRONTEND_COMMAND,{message:b,level:s}),o=new Promise((e,o)=>{setTimeout(()=>{o(new Error("Invoke timeout"))},5e3)});Promise.race([e,o])}catch(e){}})()}try{Object.defineProperty(console,"log",{value:(...e)=>{a(1,e)},writable:!0,configurable:!0}),Object.defineProperty(console,"debug",{value:(...e)=>{a(2,e)},writable:!0,configurable:!0}),Object.defineProperty(console,"info",{value:(...e)=>{a(3,e)},writable:!0,configurable:!0}),Object.defineProperty(console,"warn",{value:(...e)=>{a(4,e)},writable:!0,configurable:!0}),Object.defineProperty(console,"error",{value:(...e)=>{a(5,e)},writable:!0,configurable:!0}),Object.defineProperty(console,"trace",{value:(...e)=>{a(1,e)},writable:!0,configurable:!0})}catch(e){o.warn("[WDIO Console Forwarding] Failed to override console methods:",e)}function b(){try{Object.defineProperty(console,"log",{value:o.log,writable:!0,configurable:!0}),Object.defineProperty(console,"debug",{value:o.debug,writable:!0,configurable:!0}),Object.defineProperty(console,"info",{value:o.info,writable:!0,configurable:!0}),Object.defineProperty(console,"warn",{value:o.warn,writable:!0,configurable:!0}),Object.defineProperty(console,"error",{value:o.error,writable:!0,configurable:!0}),Object.defineProperty(console,"trace",{value:o.trace,writable:!0,configurable:!0}),console[e]=void 0}catch(e){}}"undefined"!=typeof window&&(window.addEventListener("beforeunload",b),window.__wdioConsoleCleanup=b)})();`;

packages/tauri-service/src/service.ts

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ export default class TauriWorkerService {
2525
private resetMocksPrefix?: string;
2626
private restoreMocks: boolean;
2727
private restoreMocksPrefix?: string;
28-
private driverProvider?: 'official' | 'crabnebula' | 'embedded';
2928

3029
constructor(options: TauriServiceOptions & TauriServiceGlobalOptions, _capabilities: TauriCapabilities) {
3130
this.clearMocks = options.clearMocks ?? false;
@@ -34,7 +33,6 @@ export default class TauriWorkerService {
3433
this.resetMocksPrefix = options.resetMocksPrefix;
3534
this.restoreMocks = options.restoreMocks ?? false;
3635
this.restoreMocksPrefix = options.restoreMocksPrefix;
37-
this.driverProvider = options.driverProvider;
3836
log.debug('TauriWorkerService initialized');
3937
}
4038

@@ -157,15 +155,17 @@ export default class TauriWorkerService {
157155
async afterSession(_config: unknown, _capabilities: TauriCapabilities, _specs: string[]): Promise<void> {
158156
log.debug('Cleaning up session...');
159157

160-
// Restore and clear mocks to prevent memory leaks
158+
// Restore mocks (ignore errors - session may already be closed)
161159
try {
162160
await restoreAllMocks.call({ browser: this.browser });
163-
mockStore.clear();
164-
log.debug('Mock store cleared');
165161
} catch (error) {
166-
log.warn('Failed to clear mock store:', error);
162+
log.debug('Could not restore mocks:', error);
167163
}
168164

165+
// Always clear mock store to prevent memory leaks
166+
mockStore.clear();
167+
log.debug('Mock store cleared');
168+
169169
if (!this.browser) {
170170
log.warn('No browser instance available for session cleanup');
171171
clearWindowState();
@@ -304,21 +304,18 @@ export default class TauriWorkerService {
304304
}
305305

306306
const originalExecute = browser.execute.bind(browser);
307-
const isEmbedded = this.driverProvider === 'embedded';
308307

309308
const patchedExecute = async function patchedExecute<ReturnValue, InnerArguments extends unknown[]>(
310309
script: string | ((...args: InnerArguments) => ReturnValue),
311310
...args: InnerArguments
312311
): Promise<ReturnValue> {
313312
const scriptString = typeof script === 'function' ? script.toString() : script;
314313

315-
if (isEmbedded) {
316-
// For embedded WebDriver: skip console wrapper as console forwarding
317-
// is handled by tauri-plugin-webdriver.
318-
return originalExecute(scriptString, ...args) as Promise<ReturnValue>;
319-
}
320-
321-
// For tauri-driver: use sync execute with console wrapper
314+
// Inject console wrapper script for ALL modes (embedded and tauri-driver)
315+
// This is necessary because:
316+
// 1. browser.execute() runs scripts in a WebDriver sandbox context
317+
// 2. The console wrappers set up by setupConsoleForwarding() only apply to the main page
318+
// 3. Without this wrapper, console calls from browser.execute() won't be captured
322319
const wrappedScript = `
323320
${CONSOLE_WRAPPER_SCRIPT}
324321
return (${scriptString}).apply(null, arguments);

0 commit comments

Comments
 (0)