From 85773d282489d814db6e91639321a88a2fcb164d Mon Sep 17 00:00:00 2001 From: Cedric van Putten Date: Wed, 16 Oct 2019 21:13:44 +0000 Subject: [PATCH 1/4] test: add failing testcase for nested parser preset factories --- .../commitlint.config.js | 3 +++ .../first-extended/index.js | 3 +++ .../second-extended/conventional-changelog-factory.js | 10 ++++++++++ .../first-extended/second-extended/index.js | 3 +++ @commitlint/load/src/index.test.js | 10 ++++++++++ 5 files changed, 29 insertions(+) create mode 100644 @commitlint/load/fixtures/recursive-parser-preset-factory/commitlint.config.js create mode 100644 @commitlint/load/fixtures/recursive-parser-preset-factory/first-extended/index.js create mode 100644 @commitlint/load/fixtures/recursive-parser-preset-factory/first-extended/second-extended/conventional-changelog-factory.js create mode 100644 @commitlint/load/fixtures/recursive-parser-preset-factory/first-extended/second-extended/index.js diff --git a/@commitlint/load/fixtures/recursive-parser-preset-factory/commitlint.config.js b/@commitlint/load/fixtures/recursive-parser-preset-factory/commitlint.config.js new file mode 100644 index 0000000000..62804e2b03 --- /dev/null +++ b/@commitlint/load/fixtures/recursive-parser-preset-factory/commitlint.config.js @@ -0,0 +1,3 @@ +module.exports = { + extends: ['./first-extended'] +}; diff --git a/@commitlint/load/fixtures/recursive-parser-preset-factory/first-extended/index.js b/@commitlint/load/fixtures/recursive-parser-preset-factory/first-extended/index.js new file mode 100644 index 0000000000..6ec50f348e --- /dev/null +++ b/@commitlint/load/fixtures/recursive-parser-preset-factory/first-extended/index.js @@ -0,0 +1,3 @@ +module.exports = { + extends: ['./second-extended'] +}; diff --git a/@commitlint/load/fixtures/recursive-parser-preset-factory/first-extended/second-extended/conventional-changelog-factory.js b/@commitlint/load/fixtures/recursive-parser-preset-factory/first-extended/second-extended/conventional-changelog-factory.js new file mode 100644 index 0000000000..7ac0b81719 --- /dev/null +++ b/@commitlint/load/fixtures/recursive-parser-preset-factory/first-extended/second-extended/conventional-changelog-factory.js @@ -0,0 +1,10 @@ +module.exports = Promise.resolve().then( + () => + function factory() { + return { + parserOpts: { + headerPattern: /^(\w*)(?:\((.*)\))?-(.*)$/ + } + }; + } +); diff --git a/@commitlint/load/fixtures/recursive-parser-preset-factory/first-extended/second-extended/index.js b/@commitlint/load/fixtures/recursive-parser-preset-factory/first-extended/second-extended/index.js new file mode 100644 index 0000000000..bb423b3f4e --- /dev/null +++ b/@commitlint/load/fixtures/recursive-parser-preset-factory/first-extended/second-extended/index.js @@ -0,0 +1,3 @@ +module.exports = { + parserPreset: './conventional-changelog-factory' +}; diff --git a/@commitlint/load/src/index.test.js b/@commitlint/load/src/index.test.js index c2b16719fa..009fe0411a 100644 --- a/@commitlint/load/src/index.test.js +++ b/@commitlint/load/src/index.test.js @@ -228,6 +228,16 @@ test('recursive extends with parserPreset', async t => { ); }); +test('recursive extends with parserPreset factory', async t => { + const cwd = await git.bootstrap('fixtures/recursive-parser-preset-factory'); + const actual = await load({}, {cwd}); + // console.log('TEST', actual); + t.is(actual.parserPreset.name, './conventional-changelog-factory'); + t.deepEqual(actual.parserPreset.parserOpts, { + headerPattern: /^(\w*)(?:\((.*)\))?-(.*)$/ + }); +}); + test('ignores unknow keys', async t => { const cwd = await git.bootstrap('fixtures/trash-file'); const actual = await load({}, {cwd}); From 1be3c1f3bcea6d334d010e37fedea23191c22f33 Mon Sep 17 00:00:00 2001 From: Cedric van Putten Date: Wed, 16 Oct 2019 21:16:55 +0000 Subject: [PATCH 2/4] fix(load): resolve nested parser preset factories --- @commitlint/load/src/index.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/@commitlint/load/src/index.js b/@commitlint/load/src/index.js index 6845172940..8b436465fa 100644 --- a/@commitlint/load/src/index.js +++ b/@commitlint/load/src/index.js @@ -30,12 +30,12 @@ export default async (seed = {}, options = {cwd: process.cwd()}) => { pick(config, 'extends', 'plugins', 'ignores', 'defaultIgnores') ); - // Resolve parserPreset key + // Resolve parserPreset key from flat-non-extended config if (typeof config.parserPreset === 'string') { const resolvedParserPreset = resolveFrom(base, config.parserPreset); let resolvedParserConfig = await require(resolvedParserPreset); - // Resolve loaded parser preset if its a factory + // Resolve loaded parser preset factory if (typeof resolvedParserConfig === 'function') { resolvedParserConfig = await resolvedParserConfig(); } @@ -55,14 +55,21 @@ export default async (seed = {}, options = {cwd: process.cwd()}) => { }); const preset = valid(mergeWith(extended, config, w)); + // Await parser-preset if applicable if ( typeof preset.parserPreset === 'object' && typeof preset.parserPreset.parserOpts === 'object' && typeof preset.parserPreset.parserOpts.then === 'function' ) { - preset.parserPreset.parserOpts = (await preset.parserPreset - .parserOpts).parserOpts; + let parserPreset = await preset.parserPreset.parserOpts; + + // Resolve loaded parser preset factory from extended config + if (typeof parserPreset === 'function') { + parserPreset = await parserPreset(); + } + + preset.parserPreset.parserOpts = parserPreset.parserOpts; } // Resolve config-relative formatter module From a3287713fd036b5950ffb8a0998e5487258eb273 Mon Sep 17 00:00:00 2001 From: Cedric van Putten Date: Wed, 16 Oct 2019 21:18:21 +0000 Subject: [PATCH 3/4] refactor(load): remove old console log statement --- @commitlint/load/src/index.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/@commitlint/load/src/index.test.js b/@commitlint/load/src/index.test.js index 009fe0411a..14c6398436 100644 --- a/@commitlint/load/src/index.test.js +++ b/@commitlint/load/src/index.test.js @@ -231,7 +231,7 @@ test('recursive extends with parserPreset', async t => { test('recursive extends with parserPreset factory', async t => { const cwd = await git.bootstrap('fixtures/recursive-parser-preset-factory'); const actual = await load({}, {cwd}); - // console.log('TEST', actual); + t.is(actual.parserPreset.name, './conventional-changelog-factory'); t.deepEqual(actual.parserPreset.parserOpts, { headerPattern: /^(\w*)(?:\((.*)\))?-(.*)$/ From 4ea976b6926cc64add455c170fe805f82782414c Mon Sep 17 00:00:00 2001 From: Cedric van Putten Date: Wed, 16 Oct 2019 21:19:10 +0000 Subject: [PATCH 4/4] refactor(load): remove extraneous white line --- @commitlint/load/src/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/@commitlint/load/src/index.js b/@commitlint/load/src/index.js index 8b436465fa..0167c53ded 100644 --- a/@commitlint/load/src/index.js +++ b/@commitlint/load/src/index.js @@ -55,7 +55,6 @@ export default async (seed = {}, options = {cwd: process.cwd()}) => { }); const preset = valid(mergeWith(extended, config, w)); - // Await parser-preset if applicable if ( typeof preset.parserPreset === 'object' &&