Skip to content

Commit b35000c

Browse files
Oleg Ulyanovmarionebl
Oleg Ulyanov
authored andcommitted
fix(resolve-extends): override array on extending rules (#470) (#539)
1 parent 5a6a4a8 commit b35000c

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

@commitlint/resolve-extends/src/index.js

+7-2
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,18 @@ import path from 'path';
33
import 'resolve-global'; // eslint-disable-line import/no-unassigned-import
44
import requireUncached from 'require-uncached';
55
import resolveFrom from 'resolve-from';
6-
import {merge, omit} from 'lodash';
6+
import {isArray, merge, mergeWith, omit} from 'lodash';
77

88
// Resolve extend configs
99
export default function resolveExtends(config = {}, context = {}) {
1010
const {extends: e} = config;
1111
const extended = loadExtends(config, context).reduceRight(
12-
(r, c) => merge(r, omit(c, 'extends')),
12+
(r, c) =>
13+
mergeWith(r, omit(c, 'extends'), (objValue, srcValue) => {
14+
if (isArray(objValue)) {
15+
return srcValue;
16+
}
17+
}),
1318
e ? {extends: e} : {}
1419
);
1520

@commitlint/resolve-extends/src/index.test.js

+28
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,34 @@ test('propagates contents recursively', t => {
190190
t.deepEqual(actual, expected);
191191
});
192192

193+
test('propagates contents recursively with overlap', t => {
194+
const input = {extends: ['extender-name']};
195+
196+
const actual = resolveExtends(input, {
197+
resolve: id,
198+
require(id) {
199+
if (id === 'extender-name') {
200+
return {
201+
extends: ['recursive-extender-name'],
202+
rules: {rule: ['zero', 'one']}
203+
};
204+
}
205+
if (id === 'recursive-extender-name') {
206+
return {rules: {rule: ['two', 'three', 'four']}};
207+
}
208+
}
209+
});
210+
211+
const expected = {
212+
extends: ['extender-name'],
213+
rules: {
214+
rule: ['zero', 'one']
215+
}
216+
};
217+
218+
t.deepEqual(actual, expected);
219+
});
220+
193221
test('extending contents should take precedence', t => {
194222
const input = {extends: ['extender-name'], zero: 'root'};
195223

0 commit comments

Comments
 (0)