From 276cd6f6ae7dcd4436ec63cc509fd95befb09327 Mon Sep 17 00:00:00 2001 From: ChangeHow <23733347+ChangeHow@users.noreply.github.com> Date: Thu, 16 Jan 2025 23:56:51 +0800 Subject: [PATCH 1/2] feat: support finding config file in .config folder --- lib/getConfig.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/getConfig.js b/lib/getConfig.js index 7d68a45e..fe845839 100644 --- a/lib/getConfig.js +++ b/lib/getConfig.js @@ -2,6 +2,7 @@ const path = require('path'); const fs = require('fs'); const signale = require('signale'); +const os = require('os'); const defaults = require('./defaults'); const configFiles = [ @@ -11,9 +12,7 @@ const configFiles = [ 'changelog.config.json' ]; -const findOverrides = (root) => { - const dir = root || process.cwd(); - +function containConfigFile(dir) { for (const file of configFiles) { const filename = path.resolve(dir, file); @@ -21,6 +20,16 @@ const findOverrides = (root) => { return require(filename); } } + return null; +} + +const findOverrides = (root) => { + const dir = root || process.cwd(); + + const configContent = containConfigFile(dir); + if (configContent !== null) { + return configContent; + } const parent = path.resolve(dir, '..'); @@ -45,7 +54,8 @@ const findOverrides = (root) => { }; const getConfig = (root) => { - const overrides = findOverrides(root); + const configFolder = path.join(os.homedir(), '.config'); + const overrides = containConfigFile(configFolder) || findOverrides(root); if (typeof overrides !== 'object') { signale.fatal(new TypeError('Expected changelog config to be an object.')); From 09ed992a7642ad5a6d3bed737382b191ad86a068 Mon Sep 17 00:00:00 2001 From: ChangeHow <23733347+ChangeHow@users.noreply.github.com> Date: Thu, 16 Jan 2025 16:24:32 +0000 Subject: [PATCH 2/2] feat: read config files from .config by default --- lib/getConfig.js | 14 +++++++++----- test/.config/.git-cz.json | 3 +++ test/getConfig.test.js | 10 ++++++++++ 3 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 test/.config/.git-cz.json create mode 100644 test/getConfig.test.js diff --git a/lib/getConfig.js b/lib/getConfig.js index fe845839..29538f68 100644 --- a/lib/getConfig.js +++ b/lib/getConfig.js @@ -1,8 +1,8 @@ /* eslint-disable global-require, import/no-dynamic-require */ const path = require('path'); const fs = require('fs'); -const signale = require('signale'); const os = require('os'); +const signale = require('signale'); const defaults = require('./defaults'); const configFiles = [ @@ -12,7 +12,7 @@ const configFiles = [ 'changelog.config.json' ]; -function containConfigFile(dir) { +const containConfigFile = (dir) => { for (const file of configFiles) { const filename = path.resolve(dir, file); @@ -20,8 +20,9 @@ function containConfigFile(dir) { return require(filename); } } + return null; -} +}; const findOverrides = (root) => { const dir = root || process.cwd(); @@ -42,7 +43,7 @@ const findOverrides = (root) => { if (changelog) { return changelog; } - // eslint-disable-next-line no-empty + // eslint-disable-next-line no-empty } catch (error) {} } @@ -53,8 +54,11 @@ const findOverrides = (root) => { return {}; }; +// eslint-disable-next-line no-process-env +const HOME_DIR = process.env.NODE_ENV === 'test' ? path.resolve(__dirname, '../test') : os.homedir(); + const getConfig = (root) => { - const configFolder = path.join(os.homedir(), '.config'); + const configFolder = path.join(HOME_DIR, '.config'); const overrides = containConfigFile(configFolder) || findOverrides(root); if (typeof overrides !== 'object') { diff --git a/test/.config/.git-cz.json b/test/.config/.git-cz.json new file mode 100644 index 00000000..ac75f3db --- /dev/null +++ b/test/.config/.git-cz.json @@ -0,0 +1,3 @@ +{ + "disableEmoji": true +} \ No newline at end of file diff --git a/test/getConfig.test.js b/test/getConfig.test.js new file mode 100644 index 00000000..8d3b787c --- /dev/null +++ b/test/getConfig.test.js @@ -0,0 +1,10 @@ +const {expect} = require('chai'); +const getConfig = require('../lib/getConfig'); + +describe('getConfig', () => { + it('should match config with .git-cz.json', () => { + const actual = getConfig(); + // eslint-disable-next-line no-unused-expressions + expect(actual.disableEmoji).to.be.true; + }); +});