From b5ca1c756a345d1f6b1bc7a338308fcbae6e9cea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Nison?= Date: Thu, 20 Jun 2019 18:54:30 +0200 Subject: [PATCH] Adds basic support for .yamlrc.yml (yarnPath only, v2) (#7350) --- src/rc.js | 6 +++++- src/util/rc.js | 30 ++++++++++++++++++++---------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/rc.js b/src/rc.js index 98e71a28f3..dd61a19ab3 100644 --- a/src/rc.js +++ b/src/rc.js @@ -43,7 +43,11 @@ export function getRcConfigForCwd(cwd: string, args: Array): {[key: stri } function loadRcFile(fileText: string, filePath: string): {[key: string]: string} { - const {object: values} = parse(fileText, 'yarnrc'); + let {object: values} = parse(fileText, 'yarnrc'); + + if (filePath.match(/\.yml$/)) { + values = {yarnPath: values.yarnPath}; + } // some keys reference directories so keep their relativity for (const key in values) { diff --git a/src/util/rc.js b/src/util/rc.js index c113d6ba4c..dbc960c637 100644 --- a/src/util/rc.js +++ b/src/util/rc.js @@ -11,26 +11,36 @@ const home = isWin ? process.env.USERPROFILE : process.env.HOME; function getRcPaths(name: string, cwd: string): Array { const configPaths = []; - function addConfigPath(...segments) { + function pushConfigPath(...segments) { configPaths.push(path.join(...segments)); + if (segments[segments.length - 1] === `.${name}rc`) { + configPaths.push(path.join(...segments.slice(0, -1), `.${name}rc.yml`)); + } + } + + function unshiftConfigPath(...segments) { + configPaths.unshift(path.join(...segments)); + if (segments[segments.length - 1] === `.${name}rc`) { + configPaths.unshift(path.join(...segments.slice(0, -1), `.${name}rc.yml`)); + } } if (!isWin) { - addConfigPath(etc, name, 'config'); - addConfigPath(etc, `${name}rc`); + pushConfigPath(etc, name, 'config'); + pushConfigPath(etc, `${name}rc`); } if (home) { - addConfigPath(CONFIG_DIRECTORY); - addConfigPath(home, '.config', name, 'config'); - addConfigPath(home, '.config', name); - addConfigPath(home, `.${name}`, 'config'); - addConfigPath(home, `.${name}rc`); + pushConfigPath(CONFIG_DIRECTORY); + pushConfigPath(home, '.config', name, 'config'); + pushConfigPath(home, '.config', name); + pushConfigPath(home, `.${name}`, 'config'); + pushConfigPath(home, `.${name}rc`); } // add .yarnrc locations relative to the cwd while (true) { - configPaths.unshift(path.join(cwd, `.${name}rc`)); + unshiftConfigPath(cwd, `.${name}rc`); const upperCwd = path.dirname(cwd); if (upperCwd === cwd) { @@ -45,7 +55,7 @@ function getRcPaths(name: string, cwd: string): Array { const envVariable = `${name}_config`.toUpperCase(); if (process.env[envVariable]) { - addConfigPath(process.env[envVariable]); + pushConfigPath(process.env[envVariable]); } return configPaths;