%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/tjamichg/cursos.tjamich.gob.mx/plugin/mindmap/edit-mindmap/build/lib/
Upload File :
Create Path :
Current File : /home/tjamichg/cursos.tjamich.gob.mx/plugin/mindmap/edit-mindmap/build/lib/dependency.js

var fs = require('fs'),
    path = require('path');

var //项目名
    prefix,
    //项目路径
    jsDir,
    //依赖文件路径
    depsPath,
    //依赖关系缓存
    dependencies = {
        pathToNames: {},    // 1 to many
        nameToPath: {},     // 1 to 1
        requires: {}        // 1 to many
    };

function addDepsToFile(src, provides, requires) {
    var insertText, fd;

    requires = '[' + requires.join(',') + ']';
    provides = '[' + provides.join(',') + ']';

    insertText = [
        prefix,
        '.addDependency(\'',
        src,
        '\', ',
        provides,
        ', ',
        requires,
        ');\n'
    ].join('');

    try{
        fd = fs.openSync(depsPath, 'a');
        fs.writeSync(fd, insertText, 0, 'utf8');
    }catch(e){
        return false;
    }

    return true;
}

function addDepsToObj(src, provides, requires) {
    var provide, require, deps = dependencies;

    for( var i = 0; (provide = provides[i]); i++) {
        deps.nameToPath[provide] = src;
        if (!(src in deps.pathToNames)) {
            deps.pathToNames[src] = {};
        }
        deps.pathToNames[src][provide] = true;
    }

    for( var j = 0; (require = requires[j]); j++) {
        if (!(src in deps.requires)) {
            deps.requires[src] = {};
        }
        deps.requires[src][require] = true;
    }
}

function scanFile(uri) {
    if( path.basename(uri) === 'deps.js') {
        return;
    }

    var reg = prefix + '\\.(require|provide)\\([\'\"]([-_\\.a-zA-Z0-9]+)[\'\"]\\);[\n\r]*',
        provides = [],
        requires = [],
        content = fs.readFileSync(uri),
        match;

    reg = new RegExp(reg, 'g');
    uri = path.relative(jsDir, uri).replace(/\\/g, '/');

    do {
        match = reg.exec(content);

        if(match) {
            if( match[1] === 'require' ) {
                requires.push('\'' + match[2] + '\'');
            }
            if( match[1] === 'provide' ) {
                //prefix不应该被包含在provide name中
                var provide = match[2].split('.');
                if(provide[0] === prefix) {
                    provide = provide.slice(1).join('.');
                } else {
                    provide = match[2];
                }

                provides.push('\'' + provide + '\'');
            }
        }
    } while(match);

    addDepsToFile( uri, provides, requires );
    addDepsToObj( uri, provides, requires );
    console.log('success! -> create one dependency record : ' + uri);
}

exports.scan = function(uri) {
    var stat = fs.statSync(uri);

    if( stat.isDirectory() ) {
        fs.readdirSync(uri).forEach(function(part) {
            exports.scan( path.join(uri, part) );
        });
    } else if( stat.isFile() ) {
        scanFile(uri);
    }
};

exports.init = function(config) {
    prefix = config.getProjectName();
    jsDir = config.getJsDir();
    depsPath = path.join(jsDir, 'deps.js');
    
    fs.writeFile(depsPath, '');
    console.log('success! -> create a new deps.js');

    exports.scan(jsDir);
};

exports.getRequiresByPath = function(src) {
    return dependencies.requires[src];
};

exports.getPathByName = function(name) {
    return dependencies.nameToPath[name];
};

exports.getDepsPath = function() {
    return depsPath;
};

Zerion Mini Shell 1.0