ts-api-core
Version:
Nodejs api framework core
151 lines • 5.09 kB
JavaScript
"use strict";
/* eslint-disable @typescript-eslint/no-extraneous-class */
/* eslint-disable no-plusplus */
/* eslint-disable no-loop-func */
/* eslint-disable id-length */
Object.defineProperty(exports, "__esModule", { value: true });
exports.ModelHumpHelper = exports.BaseModelHumpConfig = void 0;
/** 数据字段驼峰转化配置 */
class BaseModelHumpConfig {
}
exports.BaseModelHumpConfig = BaseModelHumpConfig;
/**
* 数据字段驼峰转化 Helper
*/
class ModelHumpHelper {
static init(config) {
var _a;
this.keyDests.clear();
if (config.keyDests && config.keyDests.size > 0) {
config.keyDests.forEach((v, key) => {
this.keyDests.set(key, v);
});
}
this.keys = (_a = config.keys) !== null && _a !== void 0 ? _a : [];
this.map.clear();
if (config.keyMap && config.keyMap.size > 0) {
config.keyMap.forEach((v, key) => {
this.map.set(key, v);
});
}
}
/**
* 获取小坨峰字段名
* @param text 小写的原字符串
* @returns
*/
static get(text) {
var _a, _b;
let result = this.map.get(text);
if (result) {
return result;
}
// 初始化
if (this.keysMap === undefined) {
this.keysMap = this.keyDests;
this.keys.forEach((e) => {
var _a, _b;
((_a = this.keysMap) === null || _a === void 0 ? void 0 : _a.has(e))
? null
: (_b = this.keysMap) === null || _b === void 0 ? void 0 : _b.set(e, e.substr(0, 1).toUpperCase() + e.substr(1));
});
}
// 空字符串或长度小于2直接返回原字符串
const txtLen = text.length;
if (!text || txtLen <= 2) {
return text;
}
// 如果是字典中的单词,返回原字串
const key = this.keysMap.get(text);
if (key) {
return text;
}
// 最大化匹配
let keys = new Array();
let i = 0;
// 正向匹配
while (i < txtLen) {
let last;
if (this.skipSpecAndNumChar(text.substr(i, 1), v => keys.push(v))) {
i++;
continue;
}
for (let j = i + 1; j <= txtLen; j++) {
if (this.skipSpecAndNumChar(text.substr(j, 1))) {
last = text.substr(i, j - i);
last = (_a = this.keysMap.get(last)) !== null && _a !== void 0 ? _a : last;
break;
}
const s = text.substr(i, j - i);
const v = this.keysMap.get(s);
if (v) {
last = v;
}
}
if (last) {
i += last.length;
keys.push(last);
}
else {
const v = text.substr(i);
keys.push((_b = this.keysMap.get(v)) !== null && _b !== void 0 ? _b : (v.length <= 1 || keys.length === 0
? v
: v.substr(0, 1).toUpperCase() + v.substr(1)));
break;
}
}
if (keys.length <= 1) {
// 如果正向没有匹配到,再进行反向匹配
i = txtLen - 1;
keys = [];
while (i >= 0) {
let last;
if (this.skipSpecAndNumChar(text.substr(i, 1), v => keys.push(v))) {
i++;
continue;
}
for (let j = i - 1; j >= 0; j--) {
const s = text.substr(j, i - j + 1);
const v = this.keysMap.get(s);
if (v) {
last = v;
}
}
if (last) {
i -= last.length;
keys.unshift(last);
}
else {
keys.unshift(text.substr(0, i + 1));
break;
}
}
}
if (keys.length <= 1) {
result = text;
}
else {
keys[0] = keys[0].toLowerCase();
result = keys.join("");
}
// 更新映射表
this.map.set(text, result);
return result;
}
// 跳过分隔符和数字
static skipSpecAndNumChar(char, onSkip) {
const result = char === "_" || char === "-" || (char >= "0" && char <= "9");
if (result && onSkip) {
onSkip(char);
}
return result;
}
}
exports.ModelHumpHelper = ModelHumpHelper;
/** 特殊的转换词对照表 */
ModelHumpHelper.keyDests = new Map([]);
/** 关键词字典 */
ModelHumpHelper.keys = [];
/** 字段名映射表 */
ModelHumpHelper.map = new Map([]);
//# sourceMappingURL=model.hump.helper.js.map