UNPKG

typeorm

Version:

Data-Mapper ORM for TypeScript, ES7, ES6, ES5. Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, MongoDB databases.

113 lines (111 loc) 4.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.hash = exports.shorten = exports.abbreviate = exports.titleCase = exports.snakeCase = exports.camelCase = void 0; var tslib_1 = require("tslib"); var sha_js_1 = tslib_1.__importDefault(require("sha.js")); /** * Converts string into camelCase. * * @see http://stackoverflow.com/questions/2970525/converting-any-string-into-camel-case */ function camelCase(str, firstCapital) { if (firstCapital === void 0) { firstCapital = false; } return str.replace(/^([A-Z])|[\s-_](\w)/g, function (match, p1, p2, offset) { if (firstCapital === true && offset === 0) return p1; if (p2) return p2.toUpperCase(); return p1.toLowerCase(); }); } exports.camelCase = camelCase; /** * Converts string into snake_case. * */ function snakeCase(str) { return str // ABc -> a_bc .replace(/([A-Z])([A-Z])([a-z])/g, "$1_$2$3") // aC -> a_c .replace(/([a-z0-9])([A-Z])/g, "$1_$2") .toLowerCase(); } exports.snakeCase = snakeCase; /** * Converts string into Title Case. * * @see http://stackoverflow.com/questions/196972/convert-string-to-title-case-with-javascript */ function titleCase(str) { return str.replace(/\w\S*/g, function (txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); }); } exports.titleCase = titleCase; /** * Builds abbreviated string from given string; */ function abbreviate(str, abbrLettersCount) { if (abbrLettersCount === void 0) { abbrLettersCount = 1; } var words = str.replace(/([a-z\xE0-\xFF])([A-Z\xC0\xDF])/g, "$1 $2").split(" "); return words.reduce(function (res, word) { res += word.substr(0, abbrLettersCount); return res; }, ""); } exports.abbreviate = abbreviate; /** * Shorten a given `input`. Useful for RDBMS imposing a limit on the * maximum length of aliases and column names in SQL queries. * * @param input String to be shortened. * @param options Default to `4` for segments length, `2` for terms length, `'__'` as a separator. * * @return Shortened `input`. * * @example * // returns: "UsShCa__orde__mark__dire" * shorten('UserShoppingCart__order__market__director') * * // returns: "cat_wit_ver_lon_nam_pos_wit_ver_lon_nam_pos_wit_ver_lon_nam" * shorten( * 'category_with_very_long_name_posts_with_very_long_name_post_with_very_long_name', * { separator: '_', segmentLength: 3 } * ) * * // equals: UsShCa__orde__mark_market_id * `${shorten('UserShoppingCart__order__market')}_market_id` */ function shorten(input, options) { if (options === void 0) { options = {}; } var _a = options.segmentLength, segmentLength = _a === void 0 ? 4 : _a, _b = options.separator, separator = _b === void 0 ? "__" : _b, _c = options.termLength, termLength = _c === void 0 ? 2 : _c; var segments = input.split(separator); var shortSegments = segments.reduce(function (acc, val) { // split the given segment into many terms based on an eventual camel cased name var segmentTerms = val.replace(/([a-z\xE0-\xFF])([A-Z\xC0-\xDF])/g, "$1 $2").split(" "); // "OrderItemList" becomes "OrItLi", while "company" becomes "comp" var length = segmentTerms.length > 1 ? termLength : segmentLength; var shortSegment = segmentTerms.map(function (term) { return term.substr(0, length); }).join(""); acc.push(shortSegment); return acc; }, []); return shortSegments.join(separator); } exports.shorten = shorten; /** * Returns a hashed input. * * @param input String to be hashed. * @param options.length Optionally, shorten the output to desired length. */ function hash(input, options) { if (options === void 0) { options = {}; } var hashFunction = sha_js_1.default("sha256"); hashFunction.update(input, "utf8"); var hashedInput = hashFunction.digest("hex"); if (options.length) { return hashedInput.slice(0, options.length); } return hashedInput; } exports.hash = hash; //# sourceMappingURL=StringUtils.js.map