UNPKG

next

Version:

The React Framework

102 lines (101 loc) 3.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); 0 && (module.exports = { findConfig: null, findConfigPath: null }); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { findConfig: function() { return findConfig; }, findConfigPath: function() { return findConfigPath; } }); const _findup = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/find-up")); const _promises = require("fs/promises"); const _json5 = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/json5")); const _url = require("url"); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function findConfigPath(dir, key) { // If we didn't find the configuration in `package.json`, we should look for // known filenames. return (0, _findup.default)([ `.${key}rc.json`, `${key}.config.json`, `.${key}rc.js`, `${key}.config.js`, `${key}.config.mjs`, `${key}.config.cjs` ], { cwd: dir }); } async function findConfig(directory, key, _returnFile) { // `package.json` configuration always wins. Let's check that first. const packageJsonPath = await (0, _findup.default)('package.json', { cwd: directory }); let isESM = false; if (packageJsonPath) { try { const packageJsonStr = await (0, _promises.readFile)(packageJsonPath, 'utf8'); const packageJson = JSON.parse(packageJsonStr); if (typeof packageJson !== 'object') { throw new Error() // Stop processing and continue ; } if (packageJson.type === 'module') { isESM = true; } if (packageJson[key] != null && typeof packageJson[key] === 'object') { return packageJson[key]; } } catch { // Ignore error and continue } } const filePath = await findConfigPath(directory, key); const esmImport = (path)=>{ // Skip mapping to absolute url with pathToFileURL on windows if it's jest // https://github.com/nodejs/node/issues/31710#issuecomment-587345749 if (process.platform === 'win32' && !process.env.JEST_WORKER_ID) { // on windows import("C:\\path\\to\\file") is not valid, so we need to // use file:// URLs return import((0, _url.pathToFileURL)(path).toString()); } else { return import(path); } }; if (filePath) { if (filePath.endsWith('.js')) { if (isESM) { return (await esmImport(filePath)).default; } else { return require(filePath); } } else if (filePath.endsWith('.mjs')) { return (await esmImport(filePath)).default; } else if (filePath.endsWith('.cjs')) { return require(filePath); } // We load JSON contents with JSON5 to allow users to comment in their // configuration file. This pattern was popularized by TypeScript. const fileContents = await (0, _promises.readFile)(filePath, 'utf8'); return _json5.default.parse(fileContents); } return null; } //# sourceMappingURL=find-config.js.map