UNPKG

ts-api-core

Version:

Nodejs api framework core

151 lines 5.09 kB
"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