function verify_deps( cfg, key ) { var val = proves.get( cfg, key ), label = key.join('.'), str; if( val ) { assert( proves.is.obj( val ), label + ' must be object' ); for( var name in val ) { str = val[name]; assert( proves.is.str( str ) && ( str = str.trim() ).length, label + '.' + name + ' must be string' ); val[name] = str; } } else { val = {}; proves.set( cfg, key, val ); } return val; }
val = val.map(function(path) { assert( proves.is.str( path ) && ( path = path.trim() ).length, label + ' item must be string' ); tmp = proves.is.file( process.cwd() + '/' + path ); assert( tmp, path + ' is not file' ); return tmp; });
function verify_dir( cfg, key ) { var val = proves.get( cfg, key ), label = key.join('.'), tmp; assert( proves.is.str( val ) && ( val = val.trim() ).length, label + ' must be string' ); tmp = proves.is.dir( process.cwd() + '/' + val ); assert( tmp, label + ': ' + val + ' must be directory' ); proves.set( cfg, key, tmp ); return val; }
function verify_compile_externs( cfg, key ) { var val = proves.get( cfg, key ); if( val ) { var label = key.join('.'), tmp; assert( proves.is.arr( val ), label + ' must be array' ); val = val.map(function(path) { assert( proves.is.str( path ) && ( path = path.trim() ).length, label + ' item must be string' ); tmp = proves.is.file( process.cwd() + '/' + path ); assert( tmp, path + ' is not file' ); return tmp; }); proves.set( cfg, key, val ); } else { proves.set( cfg, key, [] ); } return val; }
function verify_compile( cfg, key ) { var val = proves.get( cfg, key ); if( val ){ var label = key.join('.'); assert( proves.is.obj( val ), label + ' must be object' ); } return val; }
function verify_name( cfg, key ) { var val = proves.get( cfg, key ), label = key.join('.'); assert( proves.is.str( val ) && ( val = val.trim() ).length, label + ' must be string' ); assert( val.match( '^[a-zA-Z0-9_](?:[a-zA-Z0-9_.])*$' ), label + ' range must be <^[a-zA-Z0-9](?:[a-zA-Z0-9_.])*$>' ); proves.set( cfg, key, val ); return val; }
function verify_compile_path( cfg, key ) { var val = proves.get( cfg, key ); if( val ) { var label = key.join('.'), tmp; assert( proves.is.str( val ) && ( val = val.trim() ).length, label + ' must be object' ); tmp = proves.is.file( process.cwd() + '/' + val ); assert( tmp, label + ': ' + val + ' not found' ); proves.set( cfg, key, tmp ); } else { proves.set( cfg, key, '' ); } return val; }
function verify_target( cfg, key ) { var val = proves.get( cfg, key ); if( val ) { assert( proves.is.str( val ) && ( val = val.trim() ).length, key.join('.') + ' must be string' ); proves.set( cfg, key, val ); } return val; }
function readConfig() { var path = proves.is.file( process.cwd() + '/' + CFGFILE ), buildCfg = undefined; if( !path ){ exit( 'config file %s not found', CFGFILE ); } else { try { print.info( 'read config file: %s', path ); buildCfg = require( path ); assert( proves.is.arr( buildCfg.build ), 'build field must be array' ); // check dels if( buildCfg.dels ) { assert( proves.is.arr( buildCfg.dels ), 'dels field must be array' ); buildCfg.dels = buildCfg.dels.map(function(str){ assert( proves.is.str( str ) && ( str = str.trim() ).length, 'dels item must be string' ); return str; }); } else { buildCfg.dels = []; } } catch(e) { exit( 'failed to read config file %s --- %s', path, e.message ); } } return buildCfg; }
function verify_assign( cfg, key ) { var val = proves.get( cfg, key ), label = key.join('.'); if( val ) { assert( proves.is.str( val ) && ( val = val.trim() ).length, label + ' must be string' ); assert( !!cfg.target, 'target not defined' ); proves.set( cfg, key, val ); } else if( cfg.target ){ assert( false, label + ' not defined' ); } return val; }
function verify_dels( cfg, key ) { var val = proves.get( cfg, key ); if( val ) { var label = key.join('.'); assert( proves.is.arr( val ), label + ' must be array' ); val = val.map(function(str) { assert( proves.is.str( str ) && ( str = str.trim() ).length, label + ' item must be string' ); return str; }); } else { val = []; } proves.set( cfg, key, val ); return val; }
function changeDir( callback ) { var cwd = process.argv[2]; if( !cwd ){ exit( 'undefined target dir' ); } // resolve target path else if( !( cwd = proves.is.dir( cwd ) ) ){ exit( 'target dir %s not found', process.argv[2] ); } else { var npm; // change working directory print.info( 'chdir: %s', cwd ); process.chdir( cwd ); // install dependencies by npm with package.json npm = spawn( 'npm', ['install','.'] ); npm.stdout.on( 'data', function(data){ print.info( (''+data).replace( /[\r\n]/g, '' ) ); }); npm.stderr.on('data',function(data){ print.error( (''+data).replace( /[\r\n]/g, '' ) ); }); npm.on('close',function(code) { if( code ){ exit( 'failed to npm install %d', code ); } else { callback( cwd ); } }); } }
val = val.map(function(str) { assert( proves.is.str( str ) && ( str = str.trim() ).length, label + ' item must be string' ); return str; });
buildCfg.dels = buildCfg.dels.map(function(str){ assert( proves.is.str( str ) && ( str = str.trim() ).length, 'dels item must be string' ); return str; });