zoo-kernel
Version:
Based on fis-kernel for fis-zoo
131 lines (109 loc) • 3.14 kB
JavaScript
/*
* fis
* http://fis.baidu.com/
*/
;
var last = Date.now();
//oo
Function.prototype.derive = function(constructor, proto){
if(typeof constructor === 'object'){
proto = constructor;
constructor = proto.constructor || function(){};
delete proto.constructor;
}
var parent = this;
var fn = function(){
parent.apply(this, arguments);
constructor.apply(this, arguments);
};
var tmp = function(){};
tmp.prototype = parent.prototype;
var fp = new tmp(),
cp = constructor.prototype,
key;
for(key in cp){
if(cp.hasOwnProperty(key)){
fp[key] = cp[key];
}
}
proto = proto || {};
for(key in proto){
if(proto.hasOwnProperty(key)){
fp[key] = proto[key];
}
}
fp.constructor = constructor.prototype.constructor;
fn.prototype = fp;
return fn;
};
//factory
Function.prototype.factory = function(){
var clazz = this;
function F(args){
clazz.apply(this, args);
}
F.prototype = clazz.prototype;
return function(){
return new F(arguments);
};
};
var fis = module.exports = {};
//register global variable
Object.defineProperty(global, 'fis', {
enumerable : true,
writable : false,
value : fis
});
fis.emitter = new (require('events').EventEmitter);
//time for debug
fis.time = function(title){
console.log(title + ' : ' + (Date.now() - last) + 'ms');
last = Date.now();
};
//log
fis.log = require('./lib/log.js');
//require
fis.require = function(){
var path;
var name = Array.prototype.slice.call(arguments, 0).join('-');
if(fis.require._cache.hasOwnProperty(name)) return fis.require._cache[name];
var names = [];
for(var i = 0, len = fis.require.prefixes.length; i < len; i++){
try {
var pluginName = fis.require.prefixes[i] + '-' + name;
names.push(pluginName);
//require.resolve取得pluginName模块的路径,检测是否存在pluginName这个模块
path = require.resolve(pluginName);
//存在的话,尝试加载这个模块
try {
return fis.require._cache[name] = require(pluginName);
} catch (e){
fis.log.error('load plugin [' + pluginName + '] error : ' + e.message);
}
} catch (e){}
}
fis.log.error('unable to load plugin [' + names.join('] or [') + ']');
};
fis.require._cache = {};
//modified by zooble, add other prefixes
fis.require.prefixes = ['zoo', 'fis'];
//system config
fis.config = require('./lib/config.js');
//utils
fis.util = require('./lib/util.js');
//resource location
fis.uri = require('./lib/uri.js');
//project
fis.project = require('./lib/project.js');
//file
fis.file = require('./lib/file.js');
//cache
fis.cache = require('./lib/cache.js');
//compile kernel
fis.compile = require('./lib/compile.js');
//release api
fis.release = require('./lib/release.js');
//package info
fis.info = fis.util.readJSON(__dirname + '/package.json');
//kernel version
fis.version = fis.info.version;