webdriverio-automation
Version:
WebdriverIO-Automation android ios project
45 lines (44 loc) • 1.57 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fibers_1 = __importDefault(require("./fibers"));
const logger_1 = __importDefault(require("@wdio/logger"));
const log = logger_1.default('@wdio/sync');
async function executeHooksWithArgs(hookName, hooks = [], args) {
if (typeof hooks === 'function') {
hooks = [hooks];
}
if (!Array.isArray(args)) {
args = [args];
}
const hookPromise = hooks.map((hook) => new Promise((resolve) => {
let result;
const execHook = () => {
delete global.browser._NOT_FIBER;
try {
result = hook.apply(null, args);
}
catch (e) {
log.error(e.stack);
return resolve(e);
}
if (result && typeof result.then === 'function') {
return result.then(resolve, (e) => {
log.error(e.stack);
resolve(e);
});
}
resolve(result);
};
return hook.constructor.name === 'AsyncFunction' ? execHook() : fibers_1.default(execHook).run();
}));
const start = Date.now();
const result = await Promise.all(hookPromise);
if (hookPromise.length) {
log.debug(`Finished to run "${hookName}" hook in ${Date.now() - start}ms`);
}
return result;
}
exports.default = executeHooksWithArgs;