Skip to content

Commit 055856d

Browse files
authored
Merge pull request #1199 from pattern-lab/feature/pseudo-pattern-config
Add possibility for variants merge strategy change
2 parents caaaa7b + 0184b9c commit 055856d

File tree

16 files changed

+132
-11
lines changed

16 files changed

+132
-11
lines changed

packages/cli/test/fixtures/patternlab-config.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
"patternStateCascade": ["inprogress", "inreview", "complete"],
7373
"patternExportDirectory": "./pattern_exports/",
7474
"patternExportPatternPartials": [],
75+
"patternMergeVariantArrays": true,
7576
"serverOptions": {
7677
"wait": 1000
7778
},

packages/core/patternlab-config.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
"patternExportPatternPartials": [],
7676
"patternExportPreserveDirectoryStructure": true,
7777
"patternExportRaw": false,
78+
"patternMergeVariantArrays": true,
7879
"serverOptions": {
7980
"wait": 1000
8081
},

packages/core/src/lib/pseudopattern_hunter.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,24 @@ pseudopattern_hunter.prototype.find_pseudopatterns = function(
6060
}
6161

6262
//extend any existing data with variant data
63-
variantFileData = _.merge(
63+
variantFileData = _.mergeWith(
6464
{},
6565
currentPattern.jsonFileData,
66-
variantFileData
66+
variantFileData,
67+
(objValue, srcValue) => {
68+
if (
69+
_.isArray(objValue) &&
70+
// If the parameter is not available after updating pattern lab but
71+
// not the patternlab-config it should not override arrays.
72+
patternlab.config.hasOwnProperty('patternMergeVariantArrays') &&
73+
!patternlab.config.patternMergeVariantArrays
74+
) {
75+
return srcValue;
76+
}
77+
// Lodash will only check for "undefined" and eslint needs a consistent
78+
// return so do not remove
79+
return undefined;
80+
}
6781
);
6882

6983
const variantName = pseudoPatterns[i]
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"a": 1,
3+
"b": [2, 3],
4+
"c": {
5+
"d": [4, 5],
6+
"e": 8,
7+
"f": {"a": ["a"], "b": ["b"], "c": ["c"]}
8+
}
9+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{{a}}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"a": 2,
3+
"b": [8],
4+
"c": {
5+
"d": [6, 7],
6+
"f": {"b": ["x"]}
7+
}
8+
}

packages/core/test/pseudopattern_hunter_tests.js

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,3 +133,68 @@ tap.test(
133133
});
134134
}
135135
);
136+
137+
tap.test('pseudo pattern variant data should merge arrays', function(test) {
138+
const pl = stubPatternlab();
139+
pl.config.patternMergeVariantArrays = true;
140+
141+
const pattern = loadPattern('00-test/475-variant-test.mustache', pl);
142+
143+
addPattern(pattern, pl);
144+
145+
return pph.find_pseudopatterns(pattern, pl).then(() => {
146+
test.equals(pl.patterns[1].patternPartial, 'test-variant-test-merge');
147+
test.equals(
148+
JSON.stringify(pl.patterns[1].jsonFileData),
149+
JSON.stringify({
150+
a: 2,
151+
b: [8, 3],
152+
c: { d: [6, 7], e: 8, f: { a: ['a'], b: ['x'], c: ['c'] } },
153+
})
154+
);
155+
});
156+
});
157+
158+
tap.test(
159+
'pseudo pattern variant data should merge arrays if config "patternMergeVariantArrays" is not available as default behavior',
160+
function(test) {
161+
const pl = stubPatternlab();
162+
163+
const pattern = loadPattern('00-test/475-variant-test.mustache', pl);
164+
165+
addPattern(pattern, pl);
166+
167+
return pph.find_pseudopatterns(pattern, pl).then(() => {
168+
test.equals(pl.patterns[1].patternPartial, 'test-variant-test-merge');
169+
test.equals(
170+
JSON.stringify(pl.patterns[1].jsonFileData),
171+
JSON.stringify({
172+
a: 2,
173+
b: [8, 3],
174+
c: { d: [6, 7], e: 8, f: { a: ['a'], b: ['x'], c: ['c'] } },
175+
})
176+
);
177+
});
178+
}
179+
);
180+
181+
tap.test('pseudo pattern variant data should override arrays', function(test) {
182+
const pl = stubPatternlab();
183+
pl.config.patternMergeVariantArrays = false;
184+
185+
const pattern = loadPattern('00-test/475-variant-test.mustache', pl);
186+
187+
addPattern(pattern, pl);
188+
189+
return pph.find_pseudopatterns(pattern, pl).then(() => {
190+
test.equals(pl.patterns[1].patternPartial, 'test-variant-test-merge');
191+
test.equals(
192+
JSON.stringify(pl.patterns[1].jsonFileData),
193+
JSON.stringify({
194+
a: 2,
195+
b: [8],
196+
c: { d: [6, 7], e: 8, f: { a: ['a'], b: ['x'], c: ['c'] } },
197+
})
198+
);
199+
});
200+
});

packages/core/test/util/patternlab-config.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
"patternExportPatternPartials": [],
5858
"patternExportDirectory": "./pattern_exports/",
5959
"patternExtension": "mustache",
60+
"patternMergeVariantArrays": true,
6061
"cacheBust": true,
6162
"outputFileSuffixes": {
6263
"rendered": ".rendered",

packages/development-edition-engine-handlebars/patternlab-config.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
"patternExportPatternPartials": [],
7171
"patternExportPreserveDirectoryStructure": true,
7272
"patternExportRaw": false,
73+
"patternMergeVariantArrays": true,
7374
"serverOptions": {
7475
"wait": 1000
7576
},

packages/development-edition-engine-react/patternlab-config.json

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,7 @@
2525
"m": [500, 800],
2626
"l": [800, 2600]
2727
},
28-
<<<<<<< HEAD:packages/development-edition-engine-react/patternlab-config.json
2928
"logLevel": "info",
30-
=======
31-
"patternExportAll": false,
32-
"patternExportPreserveDirectoryStructure": false,
33-
"patternExportRaw": false,
34-
"patternExportPatternPartials": [],
35-
"patternExportDirectory": "./pattern_exports/",
36-
"cacheBust": true,
37-
>>>>>>> 436dd99e50d808cd14691593b927209f1ecb663e:patternlab-config.json
3829
"outputFileSuffixes": {
3930
"rendered": ".rendered",
4031
"rawTemplate": "",
@@ -79,8 +70,12 @@
7970
},
8071
"patternExtension": "mustache",
8172
"patternStateCascade": ["inprogress", "inreview", "complete"],
73+
"patternExportAll": false,
74+
"patternExportPreserveDirectoryStructure": false,
75+
"patternExportRaw": false,
8276
"patternExportDirectory": "./pattern_exports/",
8377
"patternExportPatternPartials": [],
78+
"patternMergeVariantArrays": true,
8479
"serverOptions": {
8580
"wait": 1000
8681
},

0 commit comments

Comments
 (0)