Files
bm/public_html/public/node_modules/foundation-cli/lib/commands/kits.js
2025-09-24 13:26:28 +02:00

80 lines
2.1 KiB
JavaScript

var async = require('async');
var _ = require('lodash');
var fs = require('fs');
var fetchUrl = require('../util/fetch-url')
var help = require('./help')
var blockCommand = require('./blocks');
var assertInstallableRepo = require('../util/assert-installable-repo');
var subcommands = {
list: listKits,
install: installKit
};
module.exports = function(args, options, callback) {
var fn = subcommands[args[0]]
if(fn) {
fn(args.slice(1), options, callback);
} else {
help(['kits']);
}
}
function listKits(args, options, callback) {
getKitList(function(kits) {
_.each(kits, function(value, key) {
// TODO: handle version info, etc
console.log(key + ': ' + value.total + ' blocks');
});
});
}
function getKitList(callback) {
// For now until kits are implemented, use categories to test out build
fetchUrl('foundation.zurb.com', '/building-blocks/data/kits.json', function(kitJson) {
var kits = JSON.parse(kitJson);
callback(kits);
});
}
function installKit(args, options, callback) {
var name = args[0];
assertInstallableRepo(function(type) {
if(type === 'zip') {
downloadZipFile(name, function() {
console.log('downloaded ' + name + '.zip');
});
} else {
getKitList(function(kits) {
if (!kits[name]) {
console.log('Could not find kit: ', name);
if(callback) {callback();}
return;
}
var blocks = kits[name].blocks;
async.eachSeries(blocks, function(block, cb) {
blockCommand(['install', block.datakey], {}, cb);
}, function() {
console.log("done installing kit: ", name);
if(callback) {callback();}
})
});
}
});
}
function downloadZipFile(name, callback) {
var filename = name + '.zip';
var path = '/building-blocks/files/kits/' + filename;
fetchUrl('foundation.zurb.com', path, function(file) {
if(file.length > 0) {
fs.writeFile(filename, file, callback);
} else {
console.log("could not find kit: " + name);
process.exit(1);
}
});
}