diff --git a/core/lib/patternlab.js b/core/lib/patternlab.js index b0c68175f..99accaa15 100644 --- a/core/lib/patternlab.js +++ b/core/lib/patternlab.js @@ -1,10 +1,10 @@ /* - * patternlab-node - v2.4.3 - 2016 + * patternlab-node - v2.4.4 - 2016 * * Brian Muenzenmeyer, Geoff Pursell, and the web community. - * Licensed under the MIT license. - * - * Many thanks to Brad Frost and Dave Olsen for inspiration, encouragement, and advice. + * Licensed under the MIT license. + * + * Many thanks to Brad Frost and Dave Olsen for inspiration, encouragement, and advice. * */ @@ -339,6 +339,7 @@ var patternlab_engine = function (config) { patternName: pattern.patternName, patternPartial: pattern.patternPartial, patternState: pattern.patternState, + patternEngineName: pattern.engine.engineName, extraOutput: {} }); @@ -375,17 +376,29 @@ var patternlab_engine = function (config) { return getVersion(); }, build: function (callback, deletePatternDir) { + if (patternlab && patternlab.isBusy) { + console.log('Pattern Lab is busy building a previous run - returning early.'); + return; + } + patternlab.isBusy = true; buildPatterns(deletePatternDir); new ui().buildFrontend(patternlab); printDebug(); + patternlab.isBusy = false; callback(); }, help: function () { help(); }, patternsonly: function (callback, deletePatternDir) { + if (patternlab && patternlab.isBusy) { + console.log('Pattern Lab is busy building a previous run - returning early.'); + return; + } + patternlab.isBusy = true; buildPatterns(deletePatternDir); printDebug(); + patternlab.isBusy = false; callback(); }, liststarterkits: function () { diff --git a/core/lib/ui_builder.js b/core/lib/ui_builder.js index a78240126..4fecf68d8 100644 --- a/core/lib/ui_builder.js +++ b/core/lib/ui_builder.js @@ -20,10 +20,6 @@ var ui_builder = function () { * @param pattern - the pattern to add */ function addToPatternPaths(patternlab, pattern) { - if (!patternlab.patternPaths) { - patternlab.patternPaths = {}; - } - if (!patternlab.patternPaths[pattern.patternGroup]) { patternlab.patternPaths[pattern.patternGroup] = {}; } @@ -40,10 +36,6 @@ var ui_builder = function () { * @param pattern - the pattern to add */ function addToViewAllPaths(patternlab, pattern) { - if (!patternlab.viewAllPaths) { - patternlab.viewAllPaths = {}; - } - if (!patternlab.viewAllPaths[pattern.patternGroup]) { patternlab.viewAllPaths[pattern.patternGroup] = {}; } @@ -342,10 +334,6 @@ var ui_builder = function () { patternGroups: {} }; - if (!patternlab.patternTypes) { - patternlab.patternTypes = []; - } - _.forEach(sortPatterns(patternlab.patterns), function (pattern) { //ignore patterns we can omit from rendering directly @@ -560,12 +548,23 @@ var ui_builder = function () { writeFile(path.resolve(paths.public.annotations, 'annotations.js'), annotations); } + /** + * Reset any global data we use between builds to guard against double adding things + */ + function resetUIBuilderState(patternlab) { + patternlab.patternPaths = {}; + patternlab.viewAllPaths = {}; + patternlab.patternTypes = []; + } + /** * The main entry point for ui_builder * @param patternlab - global data store */ function buildFrontend(patternlab) { + resetUIBuilderState(patternlab); + var paths = patternlab.config.paths; //determine which patterns should be included in the front-end rendering @@ -626,6 +625,9 @@ var ui_builder = function () { }, groupPatterns: function (patternlab) { return groupPatterns(patternlab); + }, + resetUIBuilderState: function (patternlab) { + resetUIBuilderState(patternlab); } }; diff --git a/package.json b/package.json index 25442e032..811086048 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "patternlab-node", "description": "Pattern Lab is a collection of tools to help you create atomic design systems. This is the node command line interface (CLI).", - "version": "2.4.3", + "version": "2.4.4", "main": "./core/lib/patternlab.js", "dependencies": { "diveSync": "^0.3.0", diff --git a/test/ui_builder_tests.js b/test/ui_builder_tests.js index 28af58e41..c677fc963 100644 --- a/test/ui_builder_tests.js +++ b/test/ui_builder_tests.js @@ -112,6 +112,7 @@ exports['ui_builder'] = { new Pattern('patternType1/patternSubType2/grey.mustache'), new Pattern('patternType1/patternSubType2/white.mustache') ); + ui.resetUIBuilderState(patternlab); //act var result = ui.groupPatterns(patternlab); @@ -150,6 +151,7 @@ exports['ui_builder'] = { new Pattern('patternType1/patternSubType2/grey.mustache'), new Pattern('patternType1/patternSubType2/white.mustache') ); + ui.resetUIBuilderState(patternlab); //act var result = ui.groupPatterns(patternlab); @@ -179,6 +181,7 @@ exports['ui_builder'] = { new Pattern('patternType1/patternSubType2/grey.mustache'), new Pattern('patternType1/patternSubType2/white.mustache') ); + ui.resetUIBuilderState(patternlab); //act var result = ui.groupPatterns(patternlab); @@ -214,6 +217,7 @@ exports['ui_builder'] = { new Pattern('patternType1/patternSubType2/grey.mustache'), new Pattern('patternType1/patternSubType2/white.mustache') ); + ui.resetUIBuilderState(patternlab); //act var result = ui.groupPatterns(patternlab); @@ -221,6 +225,25 @@ exports['ui_builder'] = { //assert test.equals('todo', 'todo'); + test.done(); + }, + + 'resetUIBuilderState - reset global objects' : function (test) { + //arrange + var patternlab = createFakePatternLab({ + patternPaths: { foo: 1}, + viewAllPaths: { bar: 2}, + patternTypes: ['baz'] + }); + + //act + ui.resetUIBuilderState(patternlab); + + //assert + test.equals(patternlab.patternPaths.foo, undefined); + test.equals(patternlab.viewAllPaths.bar, undefined); + test.equals(patternlab.patternTypes.length, 0); + test.done(); }