Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 9 additions & 7 deletions core/lib/patternlab.js
Original file line number Diff line number Diff line change
Expand Up @@ -121,14 +121,16 @@ var patternlab_engine = function (config) {
console.log('');

plutils.logGreen(' patternlab:loadstarterkit');
console.log(' > Load a starterkit into config.paths.soource/*');
console.log(' > NOTE: This does overwrite any existing contents, and does not clean the directory first.');
console.log(' > Load a starterkit into config.paths.source/*');
console.log(' > NOTE: Overwrites existing content, and only cleans out existing directory if --clean=true argument is passed.');
console.log(' > NOTE: In most cases, `npm install starterkit-name` will precede this call.');
console.log(' > arguments:');
console.log(' -- kit ');
console.log(' > the name of the starter kit to load');
console.log(' -- clean ');
console.log(' > removes all files from config.paths.source/ prior to load');
console.log(' > example (gulp):');
console.log(' `gulp patternlab:starterkit-load --kit=starterkit-mustache-demo`');
console.log(' `gulp patternlab:loadstarterkit --kit=starterkit-mustache-demo`');
console.log('');

console.log('===============================');
Expand Down Expand Up @@ -175,9 +177,9 @@ var patternlab_engine = function (config) {
return starterkit_manager.list_starterkits();
}

function loadStarterKit(starterkitName) {
function loadStarterKit(starterkitName, clean) {
var starterkit_manager = new sm(patternlab);
starterkit_manager.load_starterkit(starterkitName);
starterkit_manager.load_starterkit(starterkitName, clean);
}

function buildPatterns(deletePatternDir) {
Expand Down Expand Up @@ -369,8 +371,8 @@ var patternlab_engine = function (config) {
liststarterkits: function () {
return listStarterkits();
},
loadstarterkit: function (starterkitName) {
loadStarterKit(starterkitName);
loadstarterkit: function (starterkitName, clean) {
loadStarterKit(starterkitName, clean);
}
};
};
Expand Down
28 changes: 20 additions & 8 deletions core/lib/starterkit_manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,41 @@
var starterkit_manager = function (pl) {
var path = require('path'),
fs = require('fs-extra'),
util = require('./utilities'),
paths = pl.config.paths;

function loadStarterKit(starterkitName) {
function loadStarterKit(starterkitName, clean) {
try {
var kitPath = path.resolve(
path.join(process.cwd(), 'node_modules', starterkitName, pl.config.starterkitSubDir)
);
var kitPathDirExists = fs.statSync(kitPath).isDirectory();
console.log('Attempting to load starterkit from', kitPath);
try {
var kitDirStats = fs.statSync(kitPath);
} catch (ex) {
util.logRed(starterkitName + ' not found, please use npm to install it first.');
util.logRed(starterkitName + ' not loaded.');
return;
}
var kitPathDirExists = kitDirStats.isDirectory();
if (kitPathDirExists) {

//todo check and prompt user is paths().source is not empty
if (clean) {
console.log('Deleting contents of', paths.source.root, 'prior to starterkit load.');
util.emptyDirectory(paths.source.root);
} else {
console.log('Overwriting contents of', paths.source.root, 'during starterkit load.');
}

fs.copy(kitPath, paths.source.root, function (ex) {
if (ex) {
console.error(ex);
}
console.log('starterkit ' + starterkitName + ' loaded successfully.');
util.logGreen('starterkit ' + starterkitName + ' loaded successfully.');
});

}
} catch (ex) {
console.log(ex);
console.log(starterkitName + ' not found, please use npm to install it first');
}
}

Expand All @@ -38,8 +50,8 @@ var starterkit_manager = function (pl) {
}

return {
load_starterkit: function (starterkitName) {
loadStarterKit(starterkitName);
load_starterkit: function (starterkitName, clean) {
loadStarterKit(starterkitName, clean);
},
list_starterkits: function () {
listStarterkits();
Expand Down
25 changes: 25 additions & 0 deletions core/lib/utilities.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
"use strict";

var fs = require('fs-extra'),
path = require('path');

var util = {
// http://stackoverflow.com/questions/6274339/how-can-i-shuffle-an-array-in-javascript
shuffle: function (o) {
Expand Down Expand Up @@ -58,6 +61,28 @@ var util = {
if (obj.hasOwnProperty(prop)) { return false; }
}
return true;
},

// recursively delete the contents of directory
// adapted from https://gist.github.com/tkihira/2367067
emptyDirectory: function (dir, cleanDir) {
var list = fs.readdirSync(dir);
for (var i = 0; i < list.length; i++) {
var filename = path.join(dir, list[i]);
var stat = fs.statSync(filename);

if (filename === "." || filename === "..") {
// pass these files
} else if (stat.isDirectory()) {
this.emptyDirectory(filename);
} else {
// rm fiilename
fs.unlinkSync(filename);
}
}
if (cleanDir) {
fs.rmdirSync(dir);
}
}
};

Expand Down