You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.6 KiB
72 lines
1.6 KiB
#!/usr/bin/env node
|
|
|
|
var path = require('path');
|
|
var os = require('os');
|
|
var fs = require('fs');
|
|
var ejs = require('ejs');
|
|
var configDir = path.join( process.env.HOME, '.file-headers' );
|
|
|
|
|
|
function cp( src, dest ){
|
|
var data = fs.readFileSync(src);
|
|
fs.writeFileSync( dest, data);
|
|
}
|
|
|
|
function initialize(){
|
|
if( !fs.existsSync( configDir )){
|
|
fs.mkdirSync( configDir );
|
|
cp( path.join( __dirname, 'default-template' ), path.join( configDir, 'default' ) );
|
|
cp( path.join( __dirname, 'default-data.js' ), path.join( configDir, 'template_data.js' ) );
|
|
}
|
|
}
|
|
|
|
|
|
function getTemplate( fname ){
|
|
var match = fname.match(/\.(.*)/);
|
|
var ext = match ? match[1] : fname;
|
|
|
|
if( fs.existsSync( path.join(configDir, ext ) ) ){
|
|
return fs.readFileSync( path.join(configDir, ext ), 'utf-8' );
|
|
} else if( ext.indexOf('.') !== -1 ){
|
|
return getTemplate( ext );
|
|
} else {
|
|
return fs.readFileSync( path.join(configDir, 'default' ), 'utf-8' );
|
|
}
|
|
}
|
|
|
|
|
|
function getConfig(){
|
|
try{
|
|
return require( path.join(configDir, 'template_data' ) );
|
|
} catch(e){
|
|
return { date: new Date(), user: process.env.USER, email: process.env.USER + '@' + os.hostname() };
|
|
}
|
|
}
|
|
|
|
|
|
function getHeader( fname ){
|
|
var template = getTemplate( fname );
|
|
var config = getConfig();
|
|
var data = Object.assign({ filename: fname }, config );
|
|
return ejs.render( template, data );
|
|
}
|
|
|
|
|
|
function printHeader( fname ){
|
|
var header = getHeader( fname );
|
|
console.log( header );
|
|
}
|
|
|
|
|
|
if( require.main === module ){
|
|
var fname = process.argv[2];
|
|
initialize();
|
|
|
|
if( !fname ){
|
|
console.log( 'file-header <filename>');
|
|
process.exit(-1);
|
|
}
|
|
|
|
printHeader( fname );
|
|
}
|
|
|
|
|