Skip to content

Commit 73a7df7

Browse files
authoredOct 16, 2019
fix(load): resolve nested parser preset factories (#831)
* test: add failing testcase for nested parser preset factories * fix(load): resolve nested parser preset factories * refactor(load): remove old console log statement * refactor(load): remove extraneous white line
1 parent e2edc43 commit 73a7df7

File tree

6 files changed

+39
-4
lines changed

6 files changed

+39
-4
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module.exports = {
2+
extends: ['./first-extended']
3+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module.exports = {
2+
extends: ['./second-extended']
3+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
module.exports = Promise.resolve().then(
2+
() =>
3+
function factory() {
4+
return {
5+
parserOpts: {
6+
headerPattern: /^(\w*)(?:\((.*)\))?-(.*)$/
7+
}
8+
};
9+
}
10+
);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module.exports = {
2+
parserPreset: './conventional-changelog-factory'
3+
};

‎@commitlint/load/src/index.js

+10-4
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ export default async (seed = {}, options = {cwd: process.cwd()}) => {
3030
pick(config, 'extends', 'plugins', 'ignores', 'defaultIgnores')
3131
);
3232

33-
// Resolve parserPreset key
33+
// Resolve parserPreset key from flat-non-extended config
3434
if (typeof config.parserPreset === 'string') {
3535
const resolvedParserPreset = resolveFrom(base, config.parserPreset);
3636
let resolvedParserConfig = await require(resolvedParserPreset);
3737

38-
// Resolve loaded parser preset if its a factory
38+
// Resolve loaded parser preset factory
3939
if (typeof resolvedParserConfig === 'function') {
4040
resolvedParserConfig = await resolvedParserConfig();
4141
}
@@ -61,8 +61,14 @@ export default async (seed = {}, options = {cwd: process.cwd()}) => {
6161
typeof preset.parserPreset.parserOpts === 'object' &&
6262
typeof preset.parserPreset.parserOpts.then === 'function'
6363
) {
64-
preset.parserPreset.parserOpts = (await preset.parserPreset
65-
.parserOpts).parserOpts;
64+
let parserPreset = await preset.parserPreset.parserOpts;
65+
66+
// Resolve loaded parser preset factory from extended config
67+
if (typeof parserPreset === 'function') {
68+
parserPreset = await parserPreset();
69+
}
70+
71+
preset.parserPreset.parserOpts = parserPreset.parserOpts;
6672
}
6773

6874
// Resolve config-relative formatter module

‎@commitlint/load/src/index.test.js

+10
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,16 @@ test('recursive extends with parserPreset', async t => {
228228
);
229229
});
230230

231+
test('recursive extends with parserPreset factory', async t => {
232+
const cwd = await git.bootstrap('fixtures/recursive-parser-preset-factory');
233+
const actual = await load({}, {cwd});
234+
235+
t.is(actual.parserPreset.name, './conventional-changelog-factory');
236+
t.deepEqual(actual.parserPreset.parserOpts, {
237+
headerPattern: /^(\w*)(?:\((.*)\))?-(.*)$/
238+
});
239+
});
240+
231241
test('ignores unknow keys', async t => {
232242
const cwd = await git.bootstrap('fixtures/trash-file');
233243
const actual = await load({}, {cwd});

0 commit comments

Comments
 (0)
Please sign in to comment.