data-provider-temporary
Version:
Library that helps with server-to-client synchronization of data
86 lines (67 loc) • 2.53 kB
JavaScript
;
const fs = require('fs'); /**
* Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
*
*/const path = require('path');const jsonlint = require('./vendor/jsonlint');const JEST_CONFIG = 'jest.config.js';const PACKAGE_JSON = 'package.json';const isFile = filePath => fs.existsSync(filePath) && !fs.lstatSync(filePath).isDirectory();
const findConfig = root => {
// $FlowFixMe
let options = {};
let directory = root;
const isJS = directory.endsWith('.js');
if ((isJS || directory.endsWith('.json')) && isFile(directory)) {
const filePath = path.resolve(process.cwd(), directory);
if (isJS) {
// $FlowFixMe
options = require(filePath);
} else {
let pkg;
try {
// $FlowFixMe
pkg = require(filePath);
} catch (error) {
throw new Error(
`Jest: Failed to parse config file ${filePath}\n` +
` ${jsonlint.errors(fs.readFileSync(filePath, 'utf8'))}`);
}
if (directory.endsWith(PACKAGE_JSON)) {
options = pkg.jest || options;
} else {
options = pkg;
}
}
options.rootDir = options.rootDir ?
path.resolve(path.dirname(directory), options.rootDir) :
path.dirname(directory);
return options;
}
do {
const configJsFilePath = path.resolve(path.join(directory, JEST_CONFIG));
if (isFile(configJsFilePath)) {
// $FlowFixMe
options = require(configJsFilePath);
break;
}
const packageJsonFilePath = path.resolve(
path.join(directory, PACKAGE_JSON));
if (isFile(packageJsonFilePath)) {
// $FlowFixMe
const pkg = require(packageJsonFilePath);
if (pkg.jest) {
options = pkg.jest;
}
// Even if there is no configuration, we stop traveling up the
// tree if we hit a `package.json` file.
break;
}
} while (directory !== (directory = path.dirname(directory)));
options.rootDir = options.rootDir ?
path.resolve(root, options.rootDir) :
path.resolve(directory);
return options;
};
module.exports = findConfig;