{"version":3,"file":"str.mjs","sources":["../../src/str.ts"],"sourcesContent":["/**\n * @ Author: Hanrea\n * @ version: 2023-03-06 13:14:21\n * @ copyright: Vecmat (c) - <hi(at)vecmat.com>\n */\n\n/**\n * 编译模板字符串\n * @param template\n * @param map\n * @param fallback\n * @example Templating('Hi ${person.info.name})', {\"person\":{\"info\":{\"name\":\"test\"}}}, \"--\")\n * @returns\n */\n// https://github.com/Jinntec/Fore/blob/9823dbc49fe0e5b2f736726d4d8742e5329521f9/src/actions/StringTpl.js#L9\nexport function Templating(template: string, map: any, fallback?: string) {\n    return template.replace(/\\$\\{[^}]+\\}/g, match =>\n        match\n            .slice(2, -1)\n            .trim()\n            .split(\".\")\n            .reduce((pre: any, cur: string, idx: number, keys: string[]) => pre[cur] || fallback || match, map)\n    );\n}\n\n/**\n * Convert the first letter in the value to uppercase\n *\n * @param {string} value\n * @returns {*}  {string}\n */\nexport function ucFirst(value: string): string {\n    if (typeof value !== \"string\") {\n        throw new TypeError(\"Expected a string\");\n    }\n    return `${value.slice(0, 1).toUpperCase()}${value.slice(1)}`;\n}\n\n\n\n\n/** @type {*} */\nconst htmlMaps: any = {\n    \"<\": \"&lt;\",\n    \">\": \"&gt;\",\n    '\"': \"&quote;\",\n    \"'\": \"&#39;\"\n};\n\n/** @type {*} */\nconst specialMaps: any = {\n    \"&lt;\": \"<\",\n    \"&gt;\": \">\",\n    \"&quote;\": '\"',\n    \"&#39;\": \"'\"\n};\n/**\n * Convert special characters(> < \" ') for entity character\n *\n * @param {string} value\n * @returns {*}  {string}\n */\nexport function escapeHtml(value: string): string {\n    return `${value}`.replace(/[<>'\"]/g, a => {\n        return htmlMaps[a];\n    });\n}\n\n/**\n * Convert entity value in value to(> < \" ')\n *\n * @param {string} value\n * @returns {*}  {string}\n */\nexport function escapeSpecial(value: string): string {\n    // tslint:disable-next-line: forin\n    for (const n in specialMaps) value = value.replace(new RegExp(n, \"g\"), specialMaps[n]);\n    return value;\n}\n\n\n/**\n * convert string to camelCase/pascalCase\n *\n * @param {string} input\n * @param {boolean} [pascalCase=false]\n * @returns {*}\n */\nexport function camelCase(input: string|string[], pascalCase = false) {\n    if (!(typeof input === \"string\" || Array.isArray(input))) throw new TypeError(\"Expected the input to be `string | string[]`\");\n\n    const postProcess = (x: string) => (pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x);\n    if (Array.isArray(input))\n        input = input\n            .map(x => x.trim())\n            .filter(x => x.length)\n            .join(\"-\");\n    else input = input.trim();\n\n    if (input.length === 0) return \"\";\n\n    if (input.length === 1) return pascalCase ? input.toUpperCase() : input.toLowerCase();\n\n    const hasUpperCase = input !== input.toLowerCase();\n    if (hasUpperCase) input = preserveCamelCase(input);\n\n    input = input\n        .replace(/^[_.\\- ]+/, \"\")\n        .toLowerCase()\n        .replace(/[_.\\- ]+(\\w|$)/g, (_, p1) => p1.toUpperCase())\n        .replace(/\\d+(\\w|$)/g, m => m.toUpperCase());\n    return postProcess(input);\n}\n\n\n/**\n *\n *\n * @param {string} str\n * @returns {*}\n */\nfunction preserveCamelCase(str: string) {\n    let isLastCharLower = false;\n    let isLastCharUpper = false;\n    let isLastLastCharUpper = false;\n\n    for (let i = 0; i < str.length; i++) {\n        const character = str[i]||\"\";\n\n        if (isLastCharLower && /[a-zA-Z]/.test(character) && character.toUpperCase() === character) {\n            str = `${str.slice(0, i)}-${str.slice(i)}`;\n            isLastCharLower = false;\n            isLastLastCharUpper = isLastCharUpper;\n            isLastCharUpper = true;\n            i++;\n        } else if (isLastCharUpper && isLastLastCharUpper && /[a-zA-Z]/.test(character) && character.toLowerCase() === character) {\n            str = `${str.slice(0, i - 1)}-${str.slice(i - 1)}`;\n            isLastLastCharUpper = isLastCharUpper;\n            isLastCharUpper = false;\n            isLastCharLower = true;\n        } else {\n            isLastCharLower = character.toLowerCase() === character && character.toUpperCase() !== character;\n            isLastLastCharUpper = isLastCharUpper;\n            isLastCharUpper = character.toUpperCase() === character && character.toLowerCase() !== character;\n        }\n    }\n    return str;\n}\n\n"],"names":[],"mappings":"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"}