diff --git a/core/lib/pseudopattern_hunter.js b/core/lib/pseudopattern_hunter.js index c5cb25bb8..78143bdd3 100644 --- a/core/lib/pseudopattern_hunter.js +++ b/core/lib/pseudopattern_hunter.js @@ -42,58 +42,12 @@ pseudopattern_hunter.prototype.find_pseudopatterns = function (currentPattern, p } //extend any existing data with variant data - variantFileData = _.merge(currentPattern.jsonFileData, variantFileData); + variantFileData = _.merge({}, currentPattern.jsonFileData, variantFileData); - let variantName = pseudoPatterns[i].substring(pseudoPatterns[i].indexOf('~') + 1).split('.')[0]; - let variantFilePath = path.join(currentPattern.subdir, currentPattern.fileName + '~' + variantName + '.json'); - let lm = fs.statSync(variantFileFullPath); - let patternVariant = Pattern.create(variantFilePath, variantFileData, { - //use the same template as the non-variant - template: currentPattern.template, - fileExtension: currentPattern.fileExtension, - extendedTemplate: currentPattern.extendedTemplate, - isPseudoPattern: true, - basePattern: currentPattern, - stylePartials: currentPattern.stylePartials, - parameteredPartials: currentPattern.parameteredPartials, - - // Only regular patterns are discovered during iterative walks - // Need to recompile on data change or template change - lastModified: Math.max(currentPattern.lastModified, lm.mtime), - - // use the same template engine as the non-variant - engine: currentPattern.engine - }, patternlab); - - changes_hunter.checkBuildState(patternVariant, patternlab); - patternlab.graph.add(patternVariant); - patternlab.graph.link(patternVariant, currentPattern); - - //process the companion markdown file if it exists - pattern_assembler.parse_pattern_markdown(patternVariant, patternlab); - - //find pattern lineage - lineage_hunter.find_lineage(patternVariant, patternlab); - - //add to patternlab object so we can look these up later. - pattern_assembler.addPattern(patternVariant, patternlab); - - //we want to do everything we normally would here, except instead read the pseudoPattern data - try { - var variantFileFullPath = path.resolve(paths.source.patterns, pseudoPatterns[i]); - var variantFileData = fs.readJSONSync(variantFileFullPath); - } catch (err) { - logger.warning(`There was an error parsing pseudopattern JSON for ${currentPattern.relPath}`); - logger.warning(err); - } - - //extend any existing data with variant data - variantFileData = _.merge(currentPattern.jsonFileData, variantFileData); - - variantName = pseudoPatterns[i].substring(pseudoPatterns[i].indexOf('~') + 1).split('.')[0]; - variantFilePath = path.join(currentPattern.subdir, currentPattern.fileName + '~' + variantName + '.json'); - lm = fs.statSync(variantFileFullPath); - patternVariant = Pattern.create(variantFilePath, variantFileData, { + const variantName = pseudoPatterns[i].substring(pseudoPatterns[i].indexOf('~') + 1).split('.')[0]; + const variantFilePath = path.join(currentPattern.subdir, currentPattern.fileName + '~' + variantName + '.json'); + const lm = fs.statSync(variantFileFullPath); + const patternVariant = Pattern.create(variantFilePath, variantFileData, { //use the same template as the non-variant template: currentPattern.template, fileExtension: currentPattern.fileExtension, diff --git a/test/files/_patterns/00-test/03-styled-atom.json b/test/files/_patterns/00-test/03-styled-atom.json new file mode 100644 index 000000000..475247e1a --- /dev/null +++ b/test/files/_patterns/00-test/03-styled-atom.json @@ -0,0 +1,3 @@ +{ + "message": "baseMessage" +} diff --git a/test/pseudopattern_hunter_tests.js b/test/pseudopattern_hunter_tests.js index e3643dada..3515624c2 100644 --- a/test/pseudopattern_hunter_tests.js +++ b/test/pseudopattern_hunter_tests.js @@ -46,11 +46,7 @@ tap.test('pseudpattern found and added as a pattern', function (test) { //arrange var pl = stubPatternlab(); - var atomPattern = new Pattern('00-test/03-styled-atom.mustache'); - atomPattern.template = fs.readFileSync(patterns_dir + '00-test/03-styled-atom.mustache', 'utf8'); - atomPattern.extendedTemplate = atomPattern.template; - atomPattern.stylePartials = pattern_assembler.find_pattern_partials_with_style_modifiers(atomPattern); - + var atomPattern = pattern_assembler.load_pattern_iterative('00-test/03-styled-atom.mustache', pl); pattern_assembler.addPattern(atomPattern, pl); //act @@ -59,12 +55,27 @@ tap.test('pseudpattern found and added as a pattern', function (test) { //assert test.equals(patternCountBefore + 1, pl.patterns.length); test.equals(pl.patterns[1].patternPartial, 'test-styled-atom-alt'); - test.equals(pl.patterns[1].extendedTemplate.replace(/\s\s+/g, ' ').replace(/\n/g, ' ').trim(), ' {{message}} '); test.equals(JSON.stringify(pl.patterns[1].jsonFileData), JSON.stringify({"message": "alternateMessage"})); test.equals(pl.patterns[1].patternLink, '00-test-03-styled-atom-alt' + path.sep + '00-test-03-styled-atom-alt.html'); }); }); +tap.test('pseudpattern does not pollute base pattern data', function (test) { + //arrange + var pl = stubPatternlab(); + + var atomPattern = pattern_assembler.load_pattern_iterative('00-test/03-styled-atom.mustache', pl); + pattern_assembler.addPattern(atomPattern, pl); + + //act + var patternCountBefore = pl.patterns.length; + return pph.find_pseudopatterns(atomPattern, pl).then(() => { + //assert + test.equals(pl.patterns[0].patternPartial, 'test-styled-atom'); + test.equals(JSON.stringify(pl.patterns[0].jsonFileData), JSON.stringify({"message": "baseMessage"})); + }); +}); + tap.test('pseudpattern variant includes stylePartials and parameteredPartials', function (test) { //arrange var pl = stubPatternlab();