加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Y.js 3.19 KB
一键复制 编辑 原始数据 按行查看 历史
this_lucky 提交于 2018-08-12 10:03 . change js
/**
* @author yu
* @license http://www.apache.org/licenses/LICENSE-2.0
*/
'use strict';
var StringHelper = require('./helpers/StringHelper');
/**
* 辅助类
*/
class Y {
/**
* @ 别名路径转换真实路径
*
* @param {String} alias 路径别名
* @return {String} 路径
*/
static getPathAlias(alias) {
if('@' !== alias.charAt(0)) {
return alias;
}
// 截取开头作为别名
var pos = alias.indexOf('/');
var root = -1 === pos ? alias : alias.substring(0, pos);
if(undefined !== Y.pathAliases[root]) {
return -1 === pos ?
Y.pathAliases[root] :
Y.pathAliases[root] + alias.substring(pos);
}
return '';
}
/**
* 设置路径别名
*
* @param {String} alias 路径别名
* @param {String} path 路径
*/
static setPathAlias(alias, path) {
if('@' !== alias.charAt(0)) {
alias = '@' + alias;
}
if(null === path) {
delete Y.pathAliases[alias];
return;
}
Y.pathAliases[alias] = StringHelper.rTrimChar(path, '/');
}
/**
* 创建对象 系统类路径约定以 y 开头 应用类以项目目录开头
*
* @param {String | Object} clazz 以某个已经定义的别名开头的类全名或带 'classPath' 键的配置
*
* eg.
* 'some/path/Class'
* or
* {classPath: 'some/path/Class', ...}
*
* @param {any} params 构造函数参数
* @return {Object} 类实例
*/
static createObject(clazz, ...params) {
var file = '';
var properties = null;
if('string' === typeof clazz) {
file = Y.getPathAlias('@' + clazz);
} else if('object' === typeof clazz && undefined !== clazz.classPath) {
file = Y.getPathAlias('@' + clazz.classPath);
properties = Y.config({}, clazz);
delete properties.classPath;
}
// 文件不存在抛出异常
// todo
var ClassName = require(file + Y.fileExtention);
var instance = new ClassName(...params);
if(null !== properties) {
Y.config(instance, properties);
}
return instance;
}
/**
* 导入一个类文件
*
* @param {String} clazz 类全名
*/
static include(clazz) {
var file = Y.getPathAlias('@' + clazz);
// 文件不存在抛出异常
// todo
return require(file + Y.fileExtention);
}
/**
* 对象配置
*
* @param {Object} object 需要配置的对象
* @param {Object} properties 配置项
* @return {Object} 源对象
*/
static config(object, properties) {
for(let key in properties) {
object[key] = properties[key];
}
return object;
}
}
/**
* @property {Application} app 应用实例
*/
Y.app = null;
/**
* @property {Rest} rest RESTful 实例
*/
Y.rest = null;
/**
* @property {Object} pathAliases 路径别名
*/
Y.pathAliases = {'@y': __dirname};
/**
* @property {String} fileExtention 默认文件扩展名
*/
Y.fileExtention = '.js';
module.exports = Y;
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化