12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- 'use strict';
- /**
- * Responsible for loading / finding Mocha's "rc" files.
- * This doesn't have anything to do with `mocha.opts`.
- *
- * @private
- * @module
- */
- const fs = require('fs');
- const findUp = require('findup-sync');
- const path = require('path');
- const debug = require('debug')('mocha:cli:config');
- /**
- * These are the valid config files, in order of precedence;
- * e.g., if `.mocharc.js` is present, then `.mocharc.yaml` and the rest
- * will be ignored.
- * The user should still be able to explicitly specify a file.
- * @private
- */
- exports.CONFIG_FILES = [
- '.mocharc.js',
- '.mocharc.yaml',
- '.mocharc.yml',
- '.mocharc.json'
- ];
- /**
- * Parsers for various config filetypes. Each accepts a filepath and
- * returns an object (but could throw)
- */
- const parsers = (exports.parsers = {
- yaml: filepath =>
- require('js-yaml').safeLoad(fs.readFileSync(filepath, 'utf8')),
- js: filepath => require(filepath),
- json: filepath =>
- JSON.parse(
- require('strip-json-comments')(fs.readFileSync(filepath, 'utf8'))
- )
- });
- /**
- * Loads and parses, based on file extension, a config file.
- * "JSON" files may have comments.
- * @param {string} filepath - Config file path to load
- * @returns {Object} Parsed config object
- * @private
- */
- exports.loadConfig = filepath => {
- let config = {};
- const ext = path.extname(filepath);
- try {
- if (/\.ya?ml/.test(ext)) {
- config = parsers.yaml(filepath);
- } else if (ext === '.js') {
- config = parsers.js(filepath);
- } else {
- config = parsers.json(filepath);
- }
- } catch (err) {
- throw new Error(`failed to parse ${filepath}: ${err}`);
- }
- return config;
- };
- /**
- * Find ("find up") config file starting at `cwd`
- * @param {string} [cwd] - Current working directory
- * @returns {string|null} Filepath to config, if found
- */
- exports.findConfig = (cwd = process.cwd()) => {
- const filepath = findUp(exports.CONFIG_FILES, {cwd});
- if (filepath) {
- debug(`found config at ${filepath}`);
- }
- return filepath;
- };
|