logo.svg
Version:
Generate a svg logo, then you can embed it in you README.md
161 lines (124 loc) • 3.13 kB
JavaScript
;
var fs = require('fs');
var path = require('path');
var mkdirp = require('mkdirp');
var cursor = require('ansi.js')(process.stdout);
var loadrc = require('loadrc');
var isAbsolute = require('path-is-absolute');
var pkg = require('../package.json');
var logo = require('./index');
// exports
// -------
exports.version = function () {
console.log(' v' + pkg.version);
};
exports.help = function (command) {
if (!command || command === true) {
command = 'help';
}
try {
var filepath = path.join('../doc/console', command + '.txt');
var content = readFile(filepath);
console.log(content);
} catch (e) {
console.log('"' + command + '" help can\'t be found.\n');
}
};
exports.generate = function (options) {
var configFile = options.config;
options = getOptions(options);
var output = options.output;
var overwrite = options.overwrite;
delete options.output;
delete options.overwrite;
if (!output) {
cursor
.red()
.write('The output path should be specified. \n')
.fg.reset();
return;
}
if (!isAbsolute(output)) {
output = path.resolve(process.cwd(), output);
}
function writeFile() {
fs.stat(output, function (err, stats) {
if (stats && stats.isFile() && !overwrite) {
cursor
.yellow()
.write('File "' + output + '" exist, ignored.\n')
.fg.reset();
} else {
try {
var svg = logo.generate(options, !!configFile);
fs.writeFile(output, svg, function () {
cursor
.green()
.write('Generated: ' + output + '\n')
.fg.reset();
});
} catch (err) {
cursor
.red()
.write(err.message || ('' + err) || 'Unknown exception.')
.write('\n')
.fg.reset();
}
}
});
}
var dir = path.dirname(output);
fs.stat(dir, function (err, stats) {
if (stats) {
writeFile();
} else {
mkdirp(dir, function (err) {
if (err) {
cursor
.red()
.write(err.message || ('' + err) || 'Exception occured when make dir.')
.write('\n')
.fg.reset();
} else {
writeFile();
}
});
}
});
};
// helpers
// -------
function readFile(filepath) {
return fs.readFileSync(path.resolve(__dirname, filepath), 'utf8');
}
function hasOwn(obj, key) {
return {}.hasOwnProperty.call(obj, key);
}
function getOptions(options) {
var result = {};
[
'overwrite',
'kerning',
'divided',
'logo',
'font',
'fontSize',
'output'
].forEach(function (key) {
if (options[key]) {
result[key] = options[key];
}
});
var external = loadrc.load('logorc', options.config);
if (external) {
for (var name in external) {
if (!hasOwn(result, name) && hasOwn(external, name)) {
result[name] = external[name];
}
}
}
if (!result.output) {
result.output = 'logo.svg';
}
return result;
}