Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | 16x 16x 8x 8x 8x 1x 10x 2x 2x 8x 8x 2x 6x 5x 3x 2x | /**
* Allows to safely require a package, it only throws if the package was found
* but failed to load due to syntax errors
* @param {string} name of package
* @return {object} package content
*/
function safeRequire (name) {
try {
require.resolve(name)
} catch (e) {
return null
}
try {
return require(name)
} catch (e) {
throw new Error(`Couldn't initialise "${name}".\n${e.stack}`)
}
}
/**
* initialise WebdriverIO compliant plugins like reporter or services in the following way:
* 1. if package name is scoped (starts with "@"), require scoped package name
* 2. otherwise try to require "@wdio/<name>-<type>"
* 3. otherwise try to require "wdio-<name>-<type>"
*/
export default function initialisePlugin (name, type, target = 'default') {
/**
* directly import packages that are scoped
*/
if (name[0] === '@') {
const service = safeRequire(name)
return service[target]
}
/**
* check for scoped version of plugin first (e.g. @wdio/sauce-service)
*/
const scopedPlugin = safeRequire(`@wdio/${name.toLowerCase()}-${type}`)
if (scopedPlugin) {
return scopedPlugin[target]
}
/**
* check for old type of
*/
const plugin = safeRequire(`wdio-${name.toLowerCase()}-${type}`)
if (plugin) {
return plugin[target]
}
throw new Error(
`Couldn't find plugin "${name}" ${type}, neither as wdio scoped package `+
`"@wdio/${name.toLowerCase()}-${type}" nor as community package ` +
`"wdio-${name.toLowerCase()}-${type}". Please make sure you have it installed!`
)
}
|