mochapack
Version:
mocha cli with webpack support
83 lines (75 loc) • 2.6 kB
text/typescript
import { defaults as _defaults, omit as _omit, pick as _pick } from 'lodash'
import { loadConfig } from 'mocha/lib/cli/config'
import { MochaOptions } from 'mocha'
import { mochaCliOptionArgs } from './mochaOptionsFromParsedArgs'
import parseMochaOptsFile from './parseMochaOptsFile'
import { MochaCliOptions } from '../types'
/**
* Don't reinvent the wheel here, use Mocha's config file loading function
* under the hood
*/
const loadMochaConfigFile = (configPath: string): MochaOptions =>
loadConfig(configPath)
/**
* Don't reinvent the wheel here, use Mocha's config file loading function
* under the hood
*/
const loadMochaOptsFile = (optsFilePath: string): MochaOptions =>
parseMochaOptsFile(optsFilePath)
/**
* Merges configuration from config and/or opts file with options from CLI
*/
const mergeMochaConfigWithOptions = <
O extends 'cli' | 'constructor',
T = O extends 'cli'
? MochaCliOptions
: O extends 'constructor'
? MochaOptions
: never
>(
options: MochaOptions,
optionsOutputType: O,
configPath?: string,
optsFilePath?: string
): T => {
let configContents: MochaOptions = {}
if (configPath) configContents = loadMochaConfigFile(configPath)
if (optsFilePath)
configContents = _defaults(configContents, loadMochaOptsFile(optsFilePath))
if (optionsOutputType === 'cli') {
return _defaults(
{},
options,
_pick(configContents, mochaCliOptionArgs)
) as T
}
return _defaults({}, options, _omit(configContents, mochaCliOptionArgs)) as T
}
/**
* If a config file is present, the options in it will be merged with those
* provided in the `options`. The values in `options` are preferred over
* those in the config file.
*
* @param options A `MochaOptions` object to extract options from
* @param configPath Path to a Mocha config file
*/
export const mergeMochaConfigWithCliOptions = (
options: MochaOptions,
configPath?: string,
optsFilePath?: string
): MochaCliOptions =>
mergeMochaConfigWithOptions(options, 'cli', configPath, optsFilePath)
/**
* If a config file is present, the options in it will be merged with those
* provided in the `options`. The values in `options` are preferred over
* those in the config file.
*
* @param options A `MochaOptions` object to extract options from
* @param configPath Path to a Mocha config file
*/
export const mergeMochaConfigWithConstructorOptions = (
options: MochaOptions,
configPath?: string,
optsFilePath?: string
): MochaOptions =>
mergeMochaConfigWithOptions(options, 'constructor', configPath, optsFilePath)