lib/recaster.js
function readData(fullPath, data, type, path) {
    var vow = VOW.make();
    // var isModule = Path.extname(Path.basename(path, Path.extname(path))) === '.nm';
    // if (isModule) fullPath = Path.dirname + '/'  + Path.basename(path, Path.extname(path))
    if (data) vow.keep({ recast: data, type: type, isModule: data.isModule});
    else {
        type = Path.extname(fullPath).slice(1);
        // if (!type) vow.breek('Extension missing: ' + path);
        // else
        fs.readFile(decodeURI(fullPath), function(err, data) {
            if (err) vow.breek({ srcPath: path, missing: true, recastError: 'Error reading file ' + fullPath + ':' + err});
            else vow.keep({ recast: data, type: type, isModule: data.isModule });
        });
    }
    return vow.promise;
}
function readData(fullPath, data, type, path) {
    var vow = VOW.make();
    // var isModule = Path.extname(Path.basename(path, Path.extname(path))) === '.nm';
    // if (isModule) fullPath = Path.dirname + '/'  + Path.basename(path, Path.extname(path))
    if (data) vow.keep({ recast: data, type: type, isModule: data.isModule});
    else {
        type = Path.extname(fullPath).slice(1);
        // if (!type) vow.breek('Extension missing: ' + path);
        // else
        fs.readFile(decodeURI(fullPath), function(err, data) {
            if (err) vow.breek({ srcPath: path, missing: true, recastError: 'Error reading file ' + fullPath + ':' + err});
            else vow.keep({ recast: data, type: type, isModule: data.isModule });
        });
    }
    return vow.promise;
}
function Typeof(v) { var type = {}.toString.call(v); return type.slice(8, type.length-1); }