UNPKG

lisn.js

Version:

Simply handle user gestures and actions. Includes widgets.

1 lines 16.6 kB
{"version":3,"file":"text.cjs","names":["MC","_interopRequireWildcard","require","MH","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","formatAsString","value","maxLen","result","maybeConvertToString","isNullish","lengthOf","slice","max","exports","joinAsString","separator","args","map","a","join","splitOn","input","trim","limit","output","addEntry","s","push","matchIndex","matchLength","isLiteralString","indexOf","_match$index","match","exec","index","kebabToCamelCase","camelToKebabCase","randId","nChars","segment","floor","MATH","random","toString","toMargins","absoluteSize","_parts$","_parts$2","_ref","_parts$3","toPxValue","strValue","margin","parseFloat","S_HEIGHT","S_WIDTH","parts","margins","objToStrKey","obj","stringify","flattenForSorting","array","isArray","keysOf","sort","k","isNonPrimitive","constructorOf","OBJECT","stringifyReplacer","key","nested","isElement","classStr","classList","id","tagName","isInstanceOf","Error","isString","stack","message","v","isIterableObject","typeOrClassOf","arrayFrom","STRING"],"sources":["../../../src/ts/utils/text.ts"],"sourcesContent":["/**\n * @module Utils\n */\n\nimport * as MC from \"@lisn/globals/minification-constants\";\nimport * as MH from \"@lisn/globals/minification-helpers\";\n\nimport { Size, StrRecord } from \"@lisn/globals/types\";\n\n/**\n * Formats an object as a string. It supports more meaningful formatting as\n * string for certain types rather than using the default string\n * representation.\n *\n * **NOTE:** This is not intended for serialization of data that needs to be\n * de-serialized. Only for debugging output.\n *\n * @param value The value to format as string.\n * @param [maxLen] Maximum length of the returned string. If not given or\n * is <= 0, the string is not truncated. Otherwise, if the\n * result is longer than maxLen, it is truncated to\n * `maxLen - 3` and added a suffix of \"...\".\n * Note that if `maxLen` is > 0 but <= 3, the result is\n * always \"...\"\n *\n * @category Text\n */\nexport const formatAsString = (value: unknown, maxLen?: number) => {\n const result = maybeConvertToString(value, false);\n\n if (!MH.isNullish(maxLen) && maxLen > 0 && MH.lengthOf(result) > maxLen) {\n return result.slice(0, MH.max(0, maxLen - 3)) + \"...\";\n }\n\n return result;\n};\n\n/**\n * Join an array of values as string using separator. It uses\n * {@link formatAsString} rather than the default string representation as\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join | Array:join} would.\n *\n * @param separator The separator to use to delimit each argument.\n * @param args Objects or values to convert to string and join.\n *\n * @category Text\n */\nexport const joinAsString = (separator: string, ...args: unknown[]) =>\n args.map((a) => formatAsString(a)).join(separator);\n\n/**\n * Similar to\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split | String.prototype.split}\n * except that\n * 1. `limit` is interpreted as the maximum number of splits, and the\n * returned array contains `limit + 1` entries. Also if `limit` is given and\n * the number of substrings is greater than the limit, all the remaining\n * substrings are present in the final substring.\n * 2. If input is an empty string (or containing only whitespace), returns an\n * empty array.\n *\n * @example\n * ```javascript\n * splitOn('foo, bar, baz', RegExp(',\\\\s*'), 0); // -> ['foo, bar, baz']\n * splitOn('foo, bar, baz', RegExp(',\\\\s*'), 1); // -> ['foo', 'bar, baz']\n * splitOn('foo, bar, baz', RegExp(',\\\\s*'), 2); // -> ['foo', 'bar', 'baz']\n * splitOn('foo, bar, baz', RegExp(',\\\\s*'), 3); // -> ['foo', 'bar', 'baz']\n * ```\n *\n * @param trim If true, entries will be trimmed for whitespace after splitting.\n *\n * @param limit If not given or < 0, the string will be split on every\n * occurrence of `separator`. Otherwise, it will be split on\n * the first `limit` number of occurrences of `separator`.\n *\n * @category Text\n */\nexport const splitOn = (\n input: string,\n separator: string | RegExp,\n trim?: boolean,\n limit?: number,\n) => {\n if (!input.trim()) {\n return [];\n }\n\n limit ??= -1;\n\n const output: string[] = [];\n const addEntry = (s: string) => output.push(trim ? s.trim() : s);\n\n while (limit--) {\n let matchIndex = -1,\n matchLength = 0;\n if (MH.isLiteralString(separator)) {\n matchIndex = input.indexOf(separator);\n matchLength = MH.lengthOf(separator);\n } else {\n const match = separator.exec(input);\n matchIndex = match?.index ?? -1;\n matchLength = match ? MH.lengthOf(match[0]) : 0;\n }\n\n if (matchIndex < 0) {\n break;\n }\n\n addEntry(input.slice(0, matchIndex));\n input = input.slice(matchIndex + matchLength);\n }\n\n addEntry(input);\n return output;\n};\n\n/**\n * Converts a kebab-cased-string to camelCase.\n * The result is undefined if the input string is not formatted in\n * kebab-case.\n *\n * @category Text\n */\nexport const kebabToCamelCase = MH.kebabToCamelCase;\n\n/**\n * Converts a camelCasedString to kebab-case.\n * The result is undefined if the input string is not formatted in\n * camelCase.\n *\n * @category Text\n */\nexport const camelToKebabCase = MH.camelToKebabCase;\n\n/**\n * Generates a random string of a fixed length.\n *\n * **IMPORTANT:** This is _not_ suitable for cryptographic applications.\n *\n * @param nChars The length of the returned stirng.\n *\n * @category Text\n */\nexport const randId = (nChars = 8) => {\n const segment = () =>\n MH.floor(100000 + MC.MATH.random() * 900000).toString(36);\n\n let s = \"\";\n while (MH.lengthOf(s) < nChars) {\n s += segment();\n }\n return s.slice(0, nChars);\n};\n\n/**\n * Returns an array of numeric margins in pixels from the given margin string.\n * The string should contain margins in either pixels or percentage; other\n * units are not supported.\n *\n * Percentage values are converted to pixels relative to the given\n * `absoluteSize`: left/right margins relative to the width, and top/bottom\n * margins relative to the height.\n *\n * Note that for the margin property, percentages are always relative to the\n * WIDTH of the parent, so you should pass the parent width as both the width\n * and the height keys in `absoluteSize`. But for IntersectionObserver's\n * `rootMargin`, top/bottom margin is relative to the height of the root, so\n * pass the actual root size.\n *\n * @returns [topMarginInPx, rightMarginInPx, bottomMarginInPx, leftMarginInPx]\n *\n * @category Text\n */\nexport const toMargins = (value: string, absoluteSize: Size) => {\n const toPxValue = (strValue: string | undefined, index: number) => {\n let margin = MH.parseFloat(strValue ?? \"\") || 0;\n\n if (strValue === margin + \"%\") {\n margin *=\n index % 2 ? absoluteSize[MC.S_HEIGHT] : absoluteSize[MC.S_WIDTH];\n }\n\n return margin;\n };\n\n const parts = splitOn(value, \" \", true);\n const margins: [number, number, number, number] = [\n // top\n toPxValue(parts[0], 0),\n // right\n toPxValue(parts[1] ?? parts[0], 1),\n // bottom\n toPxValue(parts[2] ?? parts[0], 2),\n // left\n toPxValue(parts[3] ?? parts[1] ?? parts[0], 3),\n ];\n\n return margins;\n};\n\n/**\n * @ignore\n * @internal\n */\nexport const objToStrKey = (obj: StrRecord): string =>\n MH.stringify(flattenForSorting(obj));\n\n// --------------------\n\nconst flattenForSorting = (obj: StrRecord): unknown[] => {\n const array = MH.isArray(obj)\n ? obj\n : MH.keysOf(obj)\n .sort()\n .map((k) => obj[k]);\n\n return array.map((value) => {\n if (\n MH.isArray(value) ||\n (MH.isNonPrimitive(value) && MH.constructorOf(value) === MC.OBJECT)\n ) {\n return flattenForSorting(value);\n }\n return value;\n });\n};\n\nconst stringifyReplacer = (key: string, value: unknown) =>\n key ? maybeConvertToString(value, true) : value;\n\nconst maybeConvertToString = <B extends boolean, V>(\n value: V,\n nested: B,\n): B extends false ? string : string | V => {\n let result: string | V = \"\";\n\n if (MH.isElement(value)) {\n const classStr = MH.classList(value).toString().trim();\n\n result = value.id\n ? \"#\" + value.id\n : `<${MH.tagName(value)}${classStr ? ' class=\"' + classStr + '\"' : \"\"}>`;\n\n //\n } else if (MH.isInstanceOf(value, Error)) {\n /* istanbul ignore else */\n if (\"stack\" in value && MH.isString(value.stack)) {\n result = value.stack;\n } else {\n result = `Error: ${value.message}`;\n }\n\n //\n } else if (MH.isArray(value)) {\n result =\n \"[\" +\n value\n .map((v) =>\n MH.isString(v) ? MH.stringify(v) : maybeConvertToString(v, false),\n )\n .join(\",\") +\n \"]\";\n\n //\n } else if (MH.isIterableObject(value)) {\n result =\n MH.typeOrClassOf(value) +\n \"(\" +\n maybeConvertToString(MH.arrayFrom(value), false) +\n \")\";\n\n //\n } else if (MH.isNonPrimitive(value)) {\n result = nested ? value : MH.stringify(value, stringifyReplacer);\n\n //\n } else {\n // primitive\n result = nested ? value : MC.STRING(value);\n }\n\n return result as B extends false ? string : string | V;\n};\n"],"mappings":"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","ignoreList":[]}