@jscrpt/common 3.5.0-beta.20230814111300 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/changelog.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## Version 3.5.0 (2023-08-14)
4
+
5
+ ### Features
6
+
7
+ - new `formatString` function, that formats input string using formatting parameters (Array or Object)
8
+
3
9
  ## Version 3.4.0 (2023-02-08)
4
10
 
5
11
  ### Features
@@ -1 +1 @@
1
- {"version":3,"file":"common.mjs","sourceRoot":"","sources":["../../../src/utils/common.ts"],"names":[],"mappings":"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","sourcesContent":["import extendLib from 'extend';\r\n\r\nimport {isPresent} from './lang';\r\nimport {AsDictionary, Dictionary, StringDictionary} from '../types/dictionaries';\r\nimport {Enum} from '../types/enums';\r\nimport {ValueNamePair} from '../types/valueNamePair';\r\nimport {normalize} from '../normalizer/normalizer';\r\n\r\n/**\r\n * Reverse current string and returns new reverse string\r\n * @param str - String to be reversed\r\n * @returns string Reverse string\r\n */\r\nexport function reverseString(str: string): string\r\n{\r\n return str.split('').reverse().join('');\r\n}\r\n\r\n/**\r\n * Extends target object with source\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source - Object that will be used for extending\r\n */\r\nexport function extend<T, U>(deep: boolean, target: T, source: U): T & U;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V>(deep: boolean, target: T, source1: U, source2: V): T & U & V;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W>(deep: boolean, target: T, source1: U, source2: V, source3: W): T & U & V & W;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n * @param source4 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W, X>(deep: boolean, target: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source - Object that will be used for extending\r\n */\r\nexport function extend<T, U>(target: T, source: U): T & U;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V>(target: T, source1: U, source2: V): T & U & V;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W>(target: T, source1: U, source2: V, source3: W): T & U & V & W;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n * @param source4 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W, X>(target: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;\r\n/**\r\n * Extends one object with additional properties from other objects, supports deep extend\r\n * @param deepOrObject - Object to be extended or indication that deep copy should be performed\r\n * @param objectN - Objects that will be used for extending, if deep is used first here is target object\r\n * @returns Object Extended object with properties from other objects\r\n */\r\nexport function extend<TResult>(deepOrObject: boolean | Dictionary<any>, ...objectN: Dictionary<any>[]): TResult;\r\n/**\r\n * Extends one object with additional properties from other objects, supports deep extend\r\n * @param deepOrObject - Object to be extended or indication that deep copy should be performed\r\n * @param objectN - Objects that will be used for extending, if deep is used first here is target object\r\n * @returns Object Extended object with properties from other objects\r\n */\r\nexport function extend(deepOrObject: boolean | Dictionary<any>, ...objectN: Dictionary<any>[]): Dictionary\r\n{\r\n return extendLib.apply(null, [deepOrObject, ...objectN]);\r\n}\r\n\r\n/**\r\n * Generates random string consisting from lowercase letters\r\n * @param length - Length of generated string\r\n * @returns number Generated string\r\n */\r\nexport function generateId(length: number): string\r\n{\r\n let result = '';\r\n\r\n for(let x = 0; x < length; x++)\r\n {\r\n result += String.fromCharCode(Math.round(Math.random() * 25 + 97));\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Generates random string of specified length from possible characters\r\n * @param length - Length of generated string\r\n * @param possible - Possible characters used for generation of string\r\n */\r\nexport function generateRandomString(length: number, possible: string = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'): string\r\n{\r\n let text = '';\r\n\r\n for (let i = 0;i < length; i++)\r\n {\r\n text += possible.charAt(Math.floor(Math.random() * possible.length));\r\n }\r\n\r\n return text;\r\n}\r\n\r\n/**\r\n * Converts string in that way that first letter will be lowerCase\r\n * @param text - Text to be converted\r\n */\r\nexport function firstToLowerCase(text: string): string\r\n{\r\n return text.charAt(0).toLowerCase() + text.substr(1);\r\n}\r\n\r\n/**\r\n * Gets indication whether is child descendand of parent\r\n * @param parent - Parent to be tested\r\n * @param child - Child to be looked for\r\n */\r\nexport function isDescendant(parent: HTMLElement, child: HTMLElement): boolean\r\n{\r\n let node = child.parentNode;\r\n\r\n while (node != null)\r\n {\r\n if (node == parent)\r\n {\r\n return true;\r\n }\r\n\r\n node = node.parentNode;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Computes offset of element against document\r\n * @param element - Html element which offset is counted\r\n * @param doc - Html document to be used for extracting scroll offset\r\n */\r\nexport function offset(element: HTMLElement, doc?: Document)\r\n{\r\n doc = doc || document;\r\n\r\n const rect = element.getBoundingClientRect(),\r\n scrollLeft = window.pageXOffset || doc.documentElement.scrollLeft,\r\n scrollTop = window.pageYOffset || doc.documentElement.scrollTop;\r\n\r\n return {\r\n top: rect.top + scrollTop,\r\n left: rect.left + scrollLeft,\r\n bottom: rect.top + scrollTop + rect.height,\r\n right: rect.left + scrollLeft + rect.width\r\n };\r\n}\r\n\r\n/**\r\n * Converts html string into html DOM\r\n * @param html - Html string to be converted to DOM\r\n * @param doc - Optional html document to be used\r\n */\r\nexport function htmlToElement(html: string, doc?: Document): HTMLElement\r\n{\r\n let htmlDocument = document;\r\n\r\n if(isPresent(doc))\r\n {\r\n htmlDocument = doc;\r\n }\r\n\r\n const template = htmlDocument.createElement('template');\r\n html = html.trim();\r\n template.innerHTML = html;\r\n\r\n return template.content.firstChild as HTMLElement;\r\n}\r\n\r\n/**\r\n * Extract values from enum type\r\n * @param enumType - Enum type that will have extracted values\r\n */\r\nexport function getEnumValues<TEnum extends Enum>(enumType: TEnum): ValueNamePair[]\r\n{\r\n const result: ValueNamePair[] = [];\r\n\r\n Object.keys(enumType).forEach(key =>\r\n {\r\n if(isNaN(+key))\r\n {\r\n return;\r\n }\r\n\r\n result.push(\r\n {\r\n value: key,\r\n name: enumType[+key]\r\n });\r\n });\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Safely returns value from object property using string expression\r\n * @param object - Object which property value will be obtained\r\n * @param expression - Expression for obtaining value\r\n */\r\nexport function getValue<TValue = unknown>(object: Dictionary<any>, expression: string): TValue\r\nexport function getValue(object: Dictionary<any>, expression: string): unknown\r\n{\r\n return expression.split('.').reduce((o, i) =>\r\n {\r\n if(o)\r\n {\r\n return o[i];\r\n }\r\n\r\n return null;\r\n }, object);\r\n}\r\n\r\n/**\r\n * Sets value to objects property using string expression\r\n * @param object - Object which property value will be set\r\n * @param value - Value that will be set\r\n * @param expression - Expression for setting value\r\n */\r\nexport function setValue(object: Dictionary<any>, value: unknown, expression: string): void\r\n{\r\n const parts = expression.split('.');\r\n\r\n parts.forEach((part, index) =>\r\n {\r\n //last item value is assigned\r\n if(index == parts.length - 1)\r\n {\r\n if(isPresent(value))\r\n {\r\n object[part] = value;\r\n }\r\n\r\n return;\r\n }\r\n\r\n object = object[part] = object[part] ?? {};\r\n });\r\n}\r\n\r\n/**\r\n * Formats string using '%s', to print '%s' you have to use '%%s'\r\n * @param str - String containing substitution constants\r\n * @param args - Arguments that are used for replacement\r\n */\r\nexport function format(str: string, ...args: unknown[]): string\r\n{\r\n let i = 0;\r\n\r\n return str.replace(/((?!%).)%s/g, (_sub, substArgs) => `${substArgs[0]}${args[i++]}`).replace(/%%s/g, '%s');\r\n}\r\n\r\n/**\r\n * Performs flatMap over provided array\r\n * @param array - Array to be reduced using flatMap\r\n */\r\nexport function flatMapArray<TItem>(array: TItem[][]): TItem[]\r\n{\r\n return array.reduce((acc, x) => acc.concat(x), []);\r\n}\r\n\r\n/**\r\n * Serialize object to string that is usable as url query parameter\r\n * @param obj - Object to be serialized\r\n * @param replacer - Function that can be used for replacing provided values\r\n */\r\nexport function serializeToUrlQuery<TObj>(obj: TObj, replacer?: (this: any, key: string, value: any) => any): string\r\n{\r\n return btoa(encodeURIComponent(JSON.stringify(obj, replacer)));\r\n}\r\n\r\n/**\r\n * Deserialize value from url query string into object\r\n * @param queryParamValue - Query param string value\r\n * @param reviver - Function that can be used for correctly deserializing value\r\n */\r\nexport function deserializeFromUrlQuery<TObj>(queryParamValue: string, reviver?: (this: any, key: string, value: any) => any): TObj\r\n{\r\n return JSON.parse(decodeURIComponent(atob(queryParamValue)), reviver);\r\n}\r\n\r\n/**\r\n * Converts id to valid html id\r\n * @param id - Id that is going to be converted to valid html id\r\n * @param charMap - Character map used during normalization\r\n */\r\nexport function validHtmlId(id: string, charMap: StringDictionary = {}): string\r\n{\r\n id = id.toLowerCase()\r\n .replace(/[\\s]+/g, '-')\r\n .replace(/\\./g, '')\r\n .replace(/^(\\d)/g, 'x$1');\r\n\r\n id = normalize(id, charMap);\r\n\r\n return id;\r\n}\r\n\r\n/**\r\n * Checks whether is element overflown either horizontal, or vertical\r\n * @param element - Element to be tested for overflow\r\n */\r\nexport function isOverflown(element: HTMLElement): boolean\r\n{\r\n return element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;\r\n}\r\n\r\n/**\r\n * Normalizes string, removing accent\r\n * @param value - String to be normalized\r\n */\r\nexport function normalizeAccent(value: string): string\r\n{\r\n return value.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\r\n}\r\n\r\n/**\r\n * Converts instance of Class to equivalent Record type\r\n * @param instance - Instance which type to be converted\r\n * @typeparam TType - Type of instance\r\n */\r\nexport function asDictionary<TType>(instance: TType): AsDictionary<TType>\r\n{\r\n return instance as AsDictionary<TType>;\r\n}\r\n\r\n/**\r\n * Maps all iterable property values of object to \"this\" bounded\r\n * @param this - Object which will be filled with new values\r\n * @param value - Object holding values that will be used for filling\r\n * @param all - Indication whether map only existing properties or everything\r\n */\r\nexport function mapValuesToThis(this: Dictionary<any>, value: Dictionary<any>|undefined|null, all: boolean = false): void\r\n{\r\n if(!value)\r\n {\r\n return;\r\n }\r\n\r\n Object.keys(value).forEach(prop =>\r\n {\r\n if(value[prop] !== undefined && (all || (prop in this)))\r\n {\r\n this[prop] = value[prop];\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Briefly shows simple notification with simple text\r\n * @param show - Indication whether show notification\r\n * @param text - Text to be displayed, defaults to HMR finished text\r\n */\r\nexport function simpleNotification(show: boolean, text: string = 'HMR finished, app updated!'): void\r\n{\r\n if (show)\r\n {\r\n let div: HTMLDivElement|null = document.createElement('div');\r\n div.style.position = 'absolute';\r\n div.style.zIndex = '54345';\r\n div.style.background = 'rgb(255, 255, 255) none repeat scroll 0% 0%';\r\n div.style.padding = '8px';\r\n div.style.fontWeight = 'bold';\r\n div.style.borderRadius = 'bold';\r\n div.style.color = 'rgb(21, 57, 255)';\r\n div.style.left = '47%';\r\n div.style.top = '11px';\r\n div.style.boxShadow = '0px 0px 4px rgb(170, 170, 170)';\r\n div.style.transition = 'all 500ms';\r\n div.style.opacity = '0';\r\n\r\n div.innerText = text;\r\n\r\n document.body.append(div);\r\n\r\n setTimeout(() => div!.style.opacity = '1', 50);\r\n\r\n setTimeout(() =>\r\n {\r\n if(div)\r\n {\r\n div.style.opacity = '0';\r\n\r\n setTimeout(() =>\r\n {\r\n div!.remove();\r\n div = null;\r\n }, 500);\r\n }\r\n }, 2000);\r\n }\r\n}\r\n\r\n/**\r\n * Transforms any string to colour code\r\n * @param str - String to be changed to colour code\r\n */\r\nexport function stringToColour(str: string): string\r\n{\r\n let hash = 0;\r\n\r\n for (let i = 0; i < str.length; i++) \r\n {\r\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n \r\n let colour = '#';\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n const value = (hash >> (i * 8)) & 0xFF;\r\n colour += ('00' + value.toString(16)).substr(-2);\r\n }\r\n\r\n return colour;\r\n}\r\n\r\n/**\r\n * Renders element into body directly or into container element\r\n * @param document - Html document instance\r\n * @param element - Html element that will be rendered\r\n * @param containerElementSelector - Css selector for container element, if not specified renders into body, css selector must contain element name and optionally css classes\r\n */\r\nexport function renderToBody(document: Document, element: HTMLElement, containerElementSelector?: string|null): void\r\n{\r\n //render to specified target element\r\n if(containerElementSelector)\r\n {\r\n let containerElement = document.querySelector(`body ${containerElementSelector}`);\r\n\r\n //render to specified target element\r\n if(!containerElement)\r\n {\r\n const [name, ...css] = containerElementSelector.split('.');\r\n\r\n containerElement = document.createElement(name);\r\n\r\n if(!name)\r\n {\r\n throw new Error('renderToBody: missing name of element');\r\n }\r\n\r\n if(css?.length)\r\n {\r\n for(const cssClass of css)\r\n {\r\n containerElement.classList.add(cssClass);\r\n }\r\n }\r\n\r\n document.body.appendChild(containerElement);\r\n }\r\n\r\n containerElement.appendChild(element);\r\n }\r\n //render directly to body\r\n else\r\n {\r\n document.body.appendChild(element);\r\n }\r\n}"]}
1
+ {"version":3,"file":"common.mjs","sourceRoot":"","sources":["../../../src/utils/common.ts"],"names":[],"mappings":"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","sourcesContent":["import extendLib from 'extend';\r\n\r\nimport {isBlank, isJsObject, isPresent} from './lang';\r\nimport {AsDictionary, Dictionary, StringDictionary} from '../types/dictionaries';\r\nimport {Enum} from '../types/enums';\r\nimport {ValueNamePair} from '../types/valueNamePair';\r\nimport {normalize} from '../normalizer/normalizer';\r\n\r\n/**\r\n * Reverse current string and returns new reverse string\r\n * @param str - String to be reversed\r\n * @returns string Reverse string\r\n */\r\nexport function reverseString(str: string): string\r\n{\r\n return str.split('').reverse().join('');\r\n}\r\n\r\n/**\r\n * Extends target object with source\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source - Object that will be used for extending\r\n */\r\nexport function extend<T, U>(deep: boolean, target: T, source: U): T & U;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V>(deep: boolean, target: T, source1: U, source2: V): T & U & V;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W>(deep: boolean, target: T, source1: U, source2: V, source3: W): T & U & V & W;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n * @param source4 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W, X>(deep: boolean, target: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source - Object that will be used for extending\r\n */\r\nexport function extend<T, U>(target: T, source: U): T & U;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V>(target: T, source1: U, source2: V): T & U & V;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W>(target: T, source1: U, source2: V, source3: W): T & U & V & W;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n * @param source4 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W, X>(target: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;\r\n/**\r\n * Extends one object with additional properties from other objects, supports deep extend\r\n * @param deepOrObject - Object to be extended or indication that deep copy should be performed\r\n * @param objectN - Objects that will be used for extending, if deep is used first here is target object\r\n * @returns Object Extended object with properties from other objects\r\n */\r\nexport function extend<TResult>(deepOrObject: boolean | Dictionary<any>, ...objectN: Dictionary<any>[]): TResult;\r\n/**\r\n * Extends one object with additional properties from other objects, supports deep extend\r\n * @param deepOrObject - Object to be extended or indication that deep copy should be performed\r\n * @param objectN - Objects that will be used for extending, if deep is used first here is target object\r\n * @returns Object Extended object with properties from other objects\r\n */\r\nexport function extend(deepOrObject: boolean | Dictionary<any>, ...objectN: Dictionary<any>[]): Dictionary\r\n{\r\n return extendLib.apply(null, [deepOrObject, ...objectN]);\r\n}\r\n\r\n/**\r\n * Generates random string consisting from lowercase letters\r\n * @param length - Length of generated string\r\n * @returns number Generated string\r\n */\r\nexport function generateId(length: number): string\r\n{\r\n let result = '';\r\n\r\n for(let x = 0; x < length; x++)\r\n {\r\n result += String.fromCharCode(Math.round(Math.random() * 25 + 97));\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Generates random string of specified length from possible characters\r\n * @param length - Length of generated string\r\n * @param possible - Possible characters used for generation of string\r\n */\r\nexport function generateRandomString(length: number, possible: string = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'): string\r\n{\r\n let text = '';\r\n\r\n for (let i = 0;i < length; i++)\r\n {\r\n text += possible.charAt(Math.floor(Math.random() * possible.length));\r\n }\r\n\r\n return text;\r\n}\r\n\r\n/**\r\n * Converts string in that way that first letter will be lowerCase\r\n * @param text - Text to be converted\r\n */\r\nexport function firstToLowerCase(text: string): string\r\n{\r\n return text.charAt(0).toLowerCase() + text.substr(1);\r\n}\r\n\r\n/**\r\n * Gets indication whether is child descendand of parent\r\n * @param parent - Parent to be tested\r\n * @param child - Child to be looked for\r\n */\r\nexport function isDescendant(parent: HTMLElement, child: HTMLElement): boolean\r\n{\r\n let node = child.parentNode;\r\n\r\n while (node != null)\r\n {\r\n if (node == parent)\r\n {\r\n return true;\r\n }\r\n\r\n node = node.parentNode;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Computes offset of element against document\r\n * @param element - Html element which offset is counted\r\n * @param doc - Html document to be used for extracting scroll offset\r\n */\r\nexport function offset(element: HTMLElement, doc?: Document)\r\n{\r\n doc = doc || document;\r\n\r\n const rect = element.getBoundingClientRect(),\r\n scrollLeft = window.pageXOffset || doc.documentElement.scrollLeft,\r\n scrollTop = window.pageYOffset || doc.documentElement.scrollTop;\r\n\r\n return {\r\n top: rect.top + scrollTop,\r\n left: rect.left + scrollLeft,\r\n bottom: rect.top + scrollTop + rect.height,\r\n right: rect.left + scrollLeft + rect.width\r\n };\r\n}\r\n\r\n/**\r\n * Converts html string into html DOM\r\n * @param html - Html string to be converted to DOM\r\n * @param doc - Optional html document to be used\r\n */\r\nexport function htmlToElement(html: string, doc?: Document): HTMLElement\r\n{\r\n let htmlDocument = document;\r\n\r\n if(isPresent(doc))\r\n {\r\n htmlDocument = doc;\r\n }\r\n\r\n const template = htmlDocument.createElement('template');\r\n html = html.trim();\r\n template.innerHTML = html;\r\n\r\n return template.content.firstChild as HTMLElement;\r\n}\r\n\r\n/**\r\n * Extract values from enum type\r\n * @param enumType - Enum type that will have extracted values\r\n */\r\nexport function getEnumValues<TEnum extends Enum>(enumType: TEnum): ValueNamePair[]\r\n{\r\n const result: ValueNamePair[] = [];\r\n\r\n Object.keys(enumType).forEach(key =>\r\n {\r\n if(isNaN(+key))\r\n {\r\n return;\r\n }\r\n\r\n result.push(\r\n {\r\n value: key,\r\n name: enumType[+key]\r\n });\r\n });\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Safely returns value from object property using string expression\r\n * @param object - Object which property value will be obtained\r\n * @param expression - Expression for obtaining value\r\n */\r\nexport function getValue<TValue = unknown>(object: Dictionary<any>, expression: string): TValue\r\nexport function getValue(object: Dictionary<any>, expression: string): unknown\r\n{\r\n return expression.split('.').reduce((o, i) =>\r\n {\r\n if(o)\r\n {\r\n return o[i];\r\n }\r\n\r\n return null;\r\n }, object);\r\n}\r\n\r\n/**\r\n * Sets value to objects property using string expression\r\n * @param object - Object which property value will be set\r\n * @param value - Value that will be set\r\n * @param expression - Expression for setting value\r\n */\r\nexport function setValue(object: Dictionary<any>, value: unknown, expression: string): void\r\n{\r\n const parts = expression.split('.');\r\n\r\n parts.forEach((part, index) =>\r\n {\r\n //last item value is assigned\r\n if(index == parts.length - 1)\r\n {\r\n if(isPresent(value))\r\n {\r\n object[part] = value;\r\n }\r\n\r\n return;\r\n }\r\n\r\n object = object[part] = object[part] ?? {};\r\n });\r\n}\r\n\r\n/**\r\n * Formats string using '%s', to print '%s' you have to use '%%s'\r\n * @param str - String containing substitution constants\r\n * @param args - Arguments that are used for replacement\r\n */\r\nexport function format(str: string, ...args: unknown[]): string\r\n{\r\n let i = 0;\r\n\r\n return str.replace(/((?!%).)%s/g, (_sub, substArgs) => `${substArgs[0]}${args[i++]}`).replace(/%%s/g, '%s');\r\n}\r\n\r\n/**\r\n * Performs flatMap over provided array\r\n * @param array - Array to be reduced using flatMap\r\n */\r\nexport function flatMapArray<TItem>(array: TItem[][]): TItem[]\r\n{\r\n return array.reduce((acc, x) => acc.concat(x), []);\r\n}\r\n\r\n/**\r\n * Serialize object to string that is usable as url query parameter\r\n * @param obj - Object to be serialized\r\n * @param replacer - Function that can be used for replacing provided values\r\n */\r\nexport function serializeToUrlQuery<TObj>(obj: TObj, replacer?: (this: any, key: string, value: any) => any): string\r\n{\r\n return btoa(encodeURIComponent(JSON.stringify(obj, replacer)));\r\n}\r\n\r\n/**\r\n * Deserialize value from url query string into object\r\n * @param queryParamValue - Query param string value\r\n * @param reviver - Function that can be used for correctly deserializing value\r\n */\r\nexport function deserializeFromUrlQuery<TObj>(queryParamValue: string, reviver?: (this: any, key: string, value: any) => any): TObj\r\n{\r\n return JSON.parse(decodeURIComponent(atob(queryParamValue)), reviver);\r\n}\r\n\r\n/**\r\n * Converts id to valid html id\r\n * @param id - Id that is going to be converted to valid html id\r\n * @param charMap - Character map used during normalization\r\n */\r\nexport function validHtmlId(id: string, charMap: StringDictionary = {}): string\r\n{\r\n id = id.toLowerCase()\r\n .replace(/[\\s]+/g, '-')\r\n .replace(/\\./g, '')\r\n .replace(/^(\\d)/g, 'x$1');\r\n\r\n id = normalize(id, charMap);\r\n\r\n return id;\r\n}\r\n\r\n/**\r\n * Checks whether is element overflown either horizontal, or vertical\r\n * @param element - Element to be tested for overflow\r\n */\r\nexport function isOverflown(element: HTMLElement): boolean\r\n{\r\n return element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;\r\n}\r\n\r\n/**\r\n * Normalizes string, removing accent\r\n * @param value - String to be normalized\r\n */\r\nexport function normalizeAccent(value: string): string\r\n{\r\n return value.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\r\n}\r\n\r\n/**\r\n * Converts instance of Class to equivalent Record type\r\n * @param instance - Instance which type to be converted\r\n * @typeparam TType - Type of instance\r\n */\r\nexport function asDictionary<TType>(instance: TType): AsDictionary<TType>\r\n{\r\n return instance as AsDictionary<TType>;\r\n}\r\n\r\n/**\r\n * Maps all iterable property values of object to \"this\" bounded\r\n * @param this - Object which will be filled with new values\r\n * @param value - Object holding values that will be used for filling\r\n * @param all - Indication whether map only existing properties or everything\r\n */\r\nexport function mapValuesToThis(this: Dictionary<any>, value: Dictionary<any>|undefined|null, all: boolean = false): void\r\n{\r\n if(!value)\r\n {\r\n return;\r\n }\r\n\r\n Object.keys(value).forEach(prop =>\r\n {\r\n if(value[prop] !== undefined && (all || (prop in this)))\r\n {\r\n this[prop] = value[prop];\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Briefly shows simple notification with simple text\r\n * @param show - Indication whether show notification\r\n * @param text - Text to be displayed, defaults to HMR finished text\r\n */\r\nexport function simpleNotification(show: boolean, text: string = 'HMR finished, app updated!'): void\r\n{\r\n if (show)\r\n {\r\n let div: HTMLDivElement|null = document.createElement('div');\r\n div.style.position = 'absolute';\r\n div.style.zIndex = '54345';\r\n div.style.background = 'rgb(255, 255, 255) none repeat scroll 0% 0%';\r\n div.style.padding = '8px';\r\n div.style.fontWeight = 'bold';\r\n div.style.borderRadius = 'bold';\r\n div.style.color = 'rgb(21, 57, 255)';\r\n div.style.left = '47%';\r\n div.style.top = '11px';\r\n div.style.boxShadow = '0px 0px 4px rgb(170, 170, 170)';\r\n div.style.transition = 'all 500ms';\r\n div.style.opacity = '0';\r\n\r\n div.innerText = text;\r\n\r\n document.body.append(div);\r\n\r\n setTimeout(() => div!.style.opacity = '1', 50);\r\n\r\n setTimeout(() =>\r\n {\r\n if(div)\r\n {\r\n div.style.opacity = '0';\r\n\r\n setTimeout(() =>\r\n {\r\n div!.remove();\r\n div = null;\r\n }, 500);\r\n }\r\n }, 2000);\r\n }\r\n}\r\n\r\n/**\r\n * Transforms any string to colour code\r\n * @param str - String to be changed to colour code\r\n */\r\nexport function stringToColour(str: string): string\r\n{\r\n let hash = 0;\r\n\r\n for (let i = 0; i < str.length; i++) \r\n {\r\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n \r\n let colour = '#';\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n const value = (hash >> (i * 8)) & 0xFF;\r\n colour += ('00' + value.toString(16)).substr(-2);\r\n }\r\n\r\n return colour;\r\n}\r\n\r\n/**\r\n * Renders element into body directly or into container element\r\n * @param document - Html document instance\r\n * @param element - Html element that will be rendered\r\n * @param containerElementSelector - Css selector for container element, if not specified renders into body, css selector must contain element name and optionally css classes\r\n */\r\nexport function renderToBody(document: Document, element: HTMLElement, containerElementSelector?: string|null): void\r\n{\r\n //render to specified target element\r\n if(containerElementSelector)\r\n {\r\n let containerElement = document.querySelector(`body ${containerElementSelector}`);\r\n\r\n //render to specified target element\r\n if(!containerElement)\r\n {\r\n const [name, ...css] = containerElementSelector.split('.');\r\n\r\n containerElement = document.createElement(name);\r\n\r\n if(!name)\r\n {\r\n throw new Error('renderToBody: missing name of element');\r\n }\r\n\r\n if(css?.length)\r\n {\r\n for(const cssClass of css)\r\n {\r\n containerElement.classList.add(cssClass);\r\n }\r\n }\r\n\r\n document.body.appendChild(containerElement);\r\n }\r\n\r\n containerElement.appendChild(element);\r\n }\r\n //render directly to body\r\n else\r\n {\r\n document.body.appendChild(element);\r\n }\r\n}\r\n\r\n/**\r\n * Formats input string using no parameters, returns original input\r\n * @param input - Input that will be formatted\r\n */\r\nexport function formatString(input: string|undefined|null): string\r\n/**\r\n * Formats input string using object holding formatting parameters\r\n * @param input - Input that will be formatted\r\n * @param parameter - Parameter as object which properties will be used for formatting\r\n * \r\n * ```\r\n * formatString('test {val}, {@test}, {@(2)test}', {val: 3, test: {bool: true, num: 10}});\r\n * ```\r\n * \r\n * displays `{val}` as direct stringified value of '`val`' property \r\n * displays `{@test}` as JSON strinfigied value of '`test`' property \r\n * displays `{@(2)test}` as JSON stringified value of '`test`' property with 2 spaces indentation (other supported spaces are 4 and 8)\r\n */\r\nexport function formatString(input: string|undefined|null, parameter: Record<string, unknown>): string\r\n/**\r\n * Formats input string using array holding formatting parameters\r\n * @param input - Input that will be formatted\r\n * @param parameter - Parameter as array which items will be used for formatting\r\n * \r\n * ```\r\n * formatString('test {0}, {@1}, {@(2)1}', [3, {bool: true, num: 10}])\r\n * ```\r\n * \r\n * displays `{0}` as direct stringified value of '`0`' index item \r\n * displays `{@1}` as JSON strinfigied value of '`0`' index item \r\n * displays `{@(2)1}` as JSON stringified value of '`0`' index item with 2 spaces indentation (other supported spaces are 4 and 8)\r\n */\r\nexport function formatString(input: string|undefined|null, ...parameters: unknown[]): string\r\nexport function formatString(input: string|undefined|null, ...parameters: unknown[]|[Record<string, unknown>]): string\r\n{\r\n if(isBlank(input))\r\n {\r\n return '';\r\n }\r\n\r\n //formatting using object\r\n if(parameters.length == 1 && isJsObject(parameters[0]))\r\n {\r\n const parameter = parameters[0] as Record<string, unknown>;\r\n\r\n for(const prop in parameter)\r\n {\r\n input = input?.replace(new RegExp('\\\\{' + prop + '\\\\}', 'g'), `${parameter[prop]}`);\r\n input = input?.replace(new RegExp('\\\\{@(?:\\\\(([2|4|8])\\\\))?' + prop + '\\\\}', 'g'), (_, ...args) =>\r\n {\r\n if(isBlank(args[0]))\r\n {\r\n return JSON.stringify(parameter[prop]);\r\n }\r\n \r\n return JSON.stringify(parameter[prop], null, +args[0]);\r\n });\r\n }\r\n }\r\n //formatting using array of values\r\n else\r\n {\r\n //no formatting parameters\r\n if(!parameters.length)\r\n {\r\n return input;\r\n }\r\n\r\n for(let x = 0; x < parameters.length; x++)\r\n {\r\n input = input?.replace(new RegExp('\\\\{' + x + '\\\\}', 'g'), `${parameters[x]}`);\r\n input = input?.replace(new RegExp('\\\\{@(?:\\\\(([2|4|8])\\\\))?' + x + '\\\\}', 'g'), (_, ...args) =>\r\n {\r\n if(isBlank(args[0]))\r\n {\r\n return JSON.stringify(parameters[x]);\r\n }\r\n \r\n return JSON.stringify(parameters[x], null, +args[0]);\r\n });\r\n }\r\n }\r\n\r\n return input;\r\n}"]}
@@ -1,5 +1,5 @@
1
1
  import extendLib from 'extend';
2
- import { isPresent } from './lang.mjs';
2
+ import { isBlank, isJsObject, isPresent } from './lang.mjs';
3
3
  import { normalize } from '../normalizer/normalizer.mjs';
4
4
  /**
5
5
  * Reverse current string and returns new reverse string
@@ -303,4 +303,39 @@ export function renderToBody(document, element, containerElementSelector) {
303
303
  document.body.appendChild(element);
304
304
  }
305
305
  }
306
+ export function formatString(input, ...parameters) {
307
+ if (isBlank(input)) {
308
+ return '';
309
+ }
310
+ //formatting using object
311
+ if (parameters.length == 1 && isJsObject(parameters[0])) {
312
+ const parameter = parameters[0];
313
+ for (const prop in parameter) {
314
+ input = input === null || input === void 0 ? void 0 : input.replace(new RegExp('\\{' + prop + '\\}', 'g'), `${parameter[prop]}`);
315
+ input = input === null || input === void 0 ? void 0 : input.replace(new RegExp('\\{@(?:\\(([2|4|8])\\))?' + prop + '\\}', 'g'), (_, ...args) => {
316
+ if (isBlank(args[0])) {
317
+ return JSON.stringify(parameter[prop]);
318
+ }
319
+ return JSON.stringify(parameter[prop], null, +args[0]);
320
+ });
321
+ }
322
+ }
323
+ //formatting using array of values
324
+ else {
325
+ //no formatting parameters
326
+ if (!parameters.length) {
327
+ return input;
328
+ }
329
+ for (let x = 0; x < parameters.length; x++) {
330
+ input = input === null || input === void 0 ? void 0 : input.replace(new RegExp('\\{' + x + '\\}', 'g'), `${parameters[x]}`);
331
+ input = input === null || input === void 0 ? void 0 : input.replace(new RegExp('\\{@(?:\\(([2|4|8])\\))?' + x + '\\}', 'g'), (_, ...args) => {
332
+ if (isBlank(args[0])) {
333
+ return JSON.stringify(parameters[x]);
334
+ }
335
+ return JSON.stringify(parameters[x], null, +args[0]);
336
+ });
337
+ }
338
+ }
339
+ return input;
340
+ }
306
341
  //# sourceMappingURL=common.js.map
@@ -1,5 +1,5 @@
1
1
  import extendLib from 'extend';
2
- import { isPresent } from './lang';
2
+ import { isBlank, isJsObject, isPresent } from './lang';
3
3
  import { normalize } from '../normalizer/normalizer';
4
4
  /**
5
5
  * Reverse current string and returns new reverse string
@@ -303,4 +303,39 @@ export function renderToBody(document, element, containerElementSelector) {
303
303
  document.body.appendChild(element);
304
304
  }
305
305
  }
306
+ export function formatString(input, ...parameters) {
307
+ if (isBlank(input)) {
308
+ return '';
309
+ }
310
+ //formatting using object
311
+ if (parameters.length == 1 && isJsObject(parameters[0])) {
312
+ const parameter = parameters[0];
313
+ for (const prop in parameter) {
314
+ input = input === null || input === void 0 ? void 0 : input.replace(new RegExp('\\{' + prop + '\\}', 'g'), `${parameter[prop]}`);
315
+ input = input === null || input === void 0 ? void 0 : input.replace(new RegExp('\\{@(?:\\(([2|4|8])\\))?' + prop + '\\}', 'g'), (_, ...args) => {
316
+ if (isBlank(args[0])) {
317
+ return JSON.stringify(parameter[prop]);
318
+ }
319
+ return JSON.stringify(parameter[prop], null, +args[0]);
320
+ });
321
+ }
322
+ }
323
+ //formatting using array of values
324
+ else {
325
+ //no formatting parameters
326
+ if (!parameters.length) {
327
+ return input;
328
+ }
329
+ for (let x = 0; x < parameters.length; x++) {
330
+ input = input === null || input === void 0 ? void 0 : input.replace(new RegExp('\\{' + x + '\\}', 'g'), `${parameters[x]}`);
331
+ input = input === null || input === void 0 ? void 0 : input.replace(new RegExp('\\{@(?:\\(([2|4|8])\\))?' + x + '\\}', 'g'), (_, ...args) => {
332
+ if (isBlank(args[0])) {
333
+ return JSON.stringify(parameters[x]);
334
+ }
335
+ return JSON.stringify(parameters[x], null, +args[0]);
336
+ });
337
+ }
338
+ }
339
+ return input;
340
+ }
306
341
  //# sourceMappingURL=common.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/utils/common.ts"],"names":[],"mappings":"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","sourcesContent":["import extendLib from 'extend';\r\n\r\nimport {isPresent} from './lang';\r\nimport {AsDictionary, Dictionary, StringDictionary} from '../types/dictionaries';\r\nimport {Enum} from '../types/enums';\r\nimport {ValueNamePair} from '../types/valueNamePair';\r\nimport {normalize} from '../normalizer/normalizer';\r\n\r\n/**\r\n * Reverse current string and returns new reverse string\r\n * @param str - String to be reversed\r\n * @returns string Reverse string\r\n */\r\nexport function reverseString(str: string): string\r\n{\r\n return str.split('').reverse().join('');\r\n}\r\n\r\n/**\r\n * Extends target object with source\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source - Object that will be used for extending\r\n */\r\nexport function extend<T, U>(deep: boolean, target: T, source: U): T & U;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V>(deep: boolean, target: T, source1: U, source2: V): T & U & V;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W>(deep: boolean, target: T, source1: U, source2: V, source3: W): T & U & V & W;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n * @param source4 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W, X>(deep: boolean, target: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source - Object that will be used for extending\r\n */\r\nexport function extend<T, U>(target: T, source: U): T & U;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V>(target: T, source1: U, source2: V): T & U & V;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W>(target: T, source1: U, source2: V, source3: W): T & U & V & W;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n * @param source4 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W, X>(target: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;\r\n/**\r\n * Extends one object with additional properties from other objects, supports deep extend\r\n * @param deepOrObject - Object to be extended or indication that deep copy should be performed\r\n * @param objectN - Objects that will be used for extending, if deep is used first here is target object\r\n * @returns Object Extended object with properties from other objects\r\n */\r\nexport function extend<TResult>(deepOrObject: boolean | Dictionary<any>, ...objectN: Dictionary<any>[]): TResult;\r\n/**\r\n * Extends one object with additional properties from other objects, supports deep extend\r\n * @param deepOrObject - Object to be extended or indication that deep copy should be performed\r\n * @param objectN - Objects that will be used for extending, if deep is used first here is target object\r\n * @returns Object Extended object with properties from other objects\r\n */\r\nexport function extend(deepOrObject: boolean | Dictionary<any>, ...objectN: Dictionary<any>[]): Dictionary\r\n{\r\n return extendLib.apply(null, [deepOrObject, ...objectN]);\r\n}\r\n\r\n/**\r\n * Generates random string consisting from lowercase letters\r\n * @param length - Length of generated string\r\n * @returns number Generated string\r\n */\r\nexport function generateId(length: number): string\r\n{\r\n let result = '';\r\n\r\n for(let x = 0; x < length; x++)\r\n {\r\n result += String.fromCharCode(Math.round(Math.random() * 25 + 97));\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Generates random string of specified length from possible characters\r\n * @param length - Length of generated string\r\n * @param possible - Possible characters used for generation of string\r\n */\r\nexport function generateRandomString(length: number, possible: string = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'): string\r\n{\r\n let text = '';\r\n\r\n for (let i = 0;i < length; i++)\r\n {\r\n text += possible.charAt(Math.floor(Math.random() * possible.length));\r\n }\r\n\r\n return text;\r\n}\r\n\r\n/**\r\n * Converts string in that way that first letter will be lowerCase\r\n * @param text - Text to be converted\r\n */\r\nexport function firstToLowerCase(text: string): string\r\n{\r\n return text.charAt(0).toLowerCase() + text.substr(1);\r\n}\r\n\r\n/**\r\n * Gets indication whether is child descendand of parent\r\n * @param parent - Parent to be tested\r\n * @param child - Child to be looked for\r\n */\r\nexport function isDescendant(parent: HTMLElement, child: HTMLElement): boolean\r\n{\r\n let node = child.parentNode;\r\n\r\n while (node != null)\r\n {\r\n if (node == parent)\r\n {\r\n return true;\r\n }\r\n\r\n node = node.parentNode;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Computes offset of element against document\r\n * @param element - Html element which offset is counted\r\n * @param doc - Html document to be used for extracting scroll offset\r\n */\r\nexport function offset(element: HTMLElement, doc?: Document)\r\n{\r\n doc = doc || document;\r\n\r\n const rect = element.getBoundingClientRect(),\r\n scrollLeft = window.pageXOffset || doc.documentElement.scrollLeft,\r\n scrollTop = window.pageYOffset || doc.documentElement.scrollTop;\r\n\r\n return {\r\n top: rect.top + scrollTop,\r\n left: rect.left + scrollLeft,\r\n bottom: rect.top + scrollTop + rect.height,\r\n right: rect.left + scrollLeft + rect.width\r\n };\r\n}\r\n\r\n/**\r\n * Converts html string into html DOM\r\n * @param html - Html string to be converted to DOM\r\n * @param doc - Optional html document to be used\r\n */\r\nexport function htmlToElement(html: string, doc?: Document): HTMLElement\r\n{\r\n let htmlDocument = document;\r\n\r\n if(isPresent(doc))\r\n {\r\n htmlDocument = doc;\r\n }\r\n\r\n const template = htmlDocument.createElement('template');\r\n html = html.trim();\r\n template.innerHTML = html;\r\n\r\n return template.content.firstChild as HTMLElement;\r\n}\r\n\r\n/**\r\n * Extract values from enum type\r\n * @param enumType - Enum type that will have extracted values\r\n */\r\nexport function getEnumValues<TEnum extends Enum>(enumType: TEnum): ValueNamePair[]\r\n{\r\n const result: ValueNamePair[] = [];\r\n\r\n Object.keys(enumType).forEach(key =>\r\n {\r\n if(isNaN(+key))\r\n {\r\n return;\r\n }\r\n\r\n result.push(\r\n {\r\n value: key,\r\n name: enumType[+key]\r\n });\r\n });\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Safely returns value from object property using string expression\r\n * @param object - Object which property value will be obtained\r\n * @param expression - Expression for obtaining value\r\n */\r\nexport function getValue<TValue = unknown>(object: Dictionary<any>, expression: string): TValue\r\nexport function getValue(object: Dictionary<any>, expression: string): unknown\r\n{\r\n return expression.split('.').reduce((o, i) =>\r\n {\r\n if(o)\r\n {\r\n return o[i];\r\n }\r\n\r\n return null;\r\n }, object);\r\n}\r\n\r\n/**\r\n * Sets value to objects property using string expression\r\n * @param object - Object which property value will be set\r\n * @param value - Value that will be set\r\n * @param expression - Expression for setting value\r\n */\r\nexport function setValue(object: Dictionary<any>, value: unknown, expression: string): void\r\n{\r\n const parts = expression.split('.');\r\n\r\n parts.forEach((part, index) =>\r\n {\r\n //last item value is assigned\r\n if(index == parts.length - 1)\r\n {\r\n if(isPresent(value))\r\n {\r\n object[part] = value;\r\n }\r\n\r\n return;\r\n }\r\n\r\n object = object[part] = object[part] ?? {};\r\n });\r\n}\r\n\r\n/**\r\n * Formats string using '%s', to print '%s' you have to use '%%s'\r\n * @param str - String containing substitution constants\r\n * @param args - Arguments that are used for replacement\r\n */\r\nexport function format(str: string, ...args: unknown[]): string\r\n{\r\n let i = 0;\r\n\r\n return str.replace(/((?!%).)%s/g, (_sub, substArgs) => `${substArgs[0]}${args[i++]}`).replace(/%%s/g, '%s');\r\n}\r\n\r\n/**\r\n * Performs flatMap over provided array\r\n * @param array - Array to be reduced using flatMap\r\n */\r\nexport function flatMapArray<TItem>(array: TItem[][]): TItem[]\r\n{\r\n return array.reduce((acc, x) => acc.concat(x), []);\r\n}\r\n\r\n/**\r\n * Serialize object to string that is usable as url query parameter\r\n * @param obj - Object to be serialized\r\n * @param replacer - Function that can be used for replacing provided values\r\n */\r\nexport function serializeToUrlQuery<TObj>(obj: TObj, replacer?: (this: any, key: string, value: any) => any): string\r\n{\r\n return btoa(encodeURIComponent(JSON.stringify(obj, replacer)));\r\n}\r\n\r\n/**\r\n * Deserialize value from url query string into object\r\n * @param queryParamValue - Query param string value\r\n * @param reviver - Function that can be used for correctly deserializing value\r\n */\r\nexport function deserializeFromUrlQuery<TObj>(queryParamValue: string, reviver?: (this: any, key: string, value: any) => any): TObj\r\n{\r\n return JSON.parse(decodeURIComponent(atob(queryParamValue)), reviver);\r\n}\r\n\r\n/**\r\n * Converts id to valid html id\r\n * @param id - Id that is going to be converted to valid html id\r\n * @param charMap - Character map used during normalization\r\n */\r\nexport function validHtmlId(id: string, charMap: StringDictionary = {}): string\r\n{\r\n id = id.toLowerCase()\r\n .replace(/[\\s]+/g, '-')\r\n .replace(/\\./g, '')\r\n .replace(/^(\\d)/g, 'x$1');\r\n\r\n id = normalize(id, charMap);\r\n\r\n return id;\r\n}\r\n\r\n/**\r\n * Checks whether is element overflown either horizontal, or vertical\r\n * @param element - Element to be tested for overflow\r\n */\r\nexport function isOverflown(element: HTMLElement): boolean\r\n{\r\n return element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;\r\n}\r\n\r\n/**\r\n * Normalizes string, removing accent\r\n * @param value - String to be normalized\r\n */\r\nexport function normalizeAccent(value: string): string\r\n{\r\n return value.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\r\n}\r\n\r\n/**\r\n * Converts instance of Class to equivalent Record type\r\n * @param instance - Instance which type to be converted\r\n * @typeparam TType - Type of instance\r\n */\r\nexport function asDictionary<TType>(instance: TType): AsDictionary<TType>\r\n{\r\n return instance as AsDictionary<TType>;\r\n}\r\n\r\n/**\r\n * Maps all iterable property values of object to \"this\" bounded\r\n * @param this - Object which will be filled with new values\r\n * @param value - Object holding values that will be used for filling\r\n * @param all - Indication whether map only existing properties or everything\r\n */\r\nexport function mapValuesToThis(this: Dictionary<any>, value: Dictionary<any>|undefined|null, all: boolean = false): void\r\n{\r\n if(!value)\r\n {\r\n return;\r\n }\r\n\r\n Object.keys(value).forEach(prop =>\r\n {\r\n if(value[prop] !== undefined && (all || (prop in this)))\r\n {\r\n this[prop] = value[prop];\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Briefly shows simple notification with simple text\r\n * @param show - Indication whether show notification\r\n * @param text - Text to be displayed, defaults to HMR finished text\r\n */\r\nexport function simpleNotification(show: boolean, text: string = 'HMR finished, app updated!'): void\r\n{\r\n if (show)\r\n {\r\n let div: HTMLDivElement|null = document.createElement('div');\r\n div.style.position = 'absolute';\r\n div.style.zIndex = '54345';\r\n div.style.background = 'rgb(255, 255, 255) none repeat scroll 0% 0%';\r\n div.style.padding = '8px';\r\n div.style.fontWeight = 'bold';\r\n div.style.borderRadius = 'bold';\r\n div.style.color = 'rgb(21, 57, 255)';\r\n div.style.left = '47%';\r\n div.style.top = '11px';\r\n div.style.boxShadow = '0px 0px 4px rgb(170, 170, 170)';\r\n div.style.transition = 'all 500ms';\r\n div.style.opacity = '0';\r\n\r\n div.innerText = text;\r\n\r\n document.body.append(div);\r\n\r\n setTimeout(() => div!.style.opacity = '1', 50);\r\n\r\n setTimeout(() =>\r\n {\r\n if(div)\r\n {\r\n div.style.opacity = '0';\r\n\r\n setTimeout(() =>\r\n {\r\n div!.remove();\r\n div = null;\r\n }, 500);\r\n }\r\n }, 2000);\r\n }\r\n}\r\n\r\n/**\r\n * Transforms any string to colour code\r\n * @param str - String to be changed to colour code\r\n */\r\nexport function stringToColour(str: string): string\r\n{\r\n let hash = 0;\r\n\r\n for (let i = 0; i < str.length; i++) \r\n {\r\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n \r\n let colour = '#';\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n const value = (hash >> (i * 8)) & 0xFF;\r\n colour += ('00' + value.toString(16)).substr(-2);\r\n }\r\n\r\n return colour;\r\n}\r\n\r\n/**\r\n * Renders element into body directly or into container element\r\n * @param document - Html document instance\r\n * @param element - Html element that will be rendered\r\n * @param containerElementSelector - Css selector for container element, if not specified renders into body, css selector must contain element name and optionally css classes\r\n */\r\nexport function renderToBody(document: Document, element: HTMLElement, containerElementSelector?: string|null): void\r\n{\r\n //render to specified target element\r\n if(containerElementSelector)\r\n {\r\n let containerElement = document.querySelector(`body ${containerElementSelector}`);\r\n\r\n //render to specified target element\r\n if(!containerElement)\r\n {\r\n const [name, ...css] = containerElementSelector.split('.');\r\n\r\n containerElement = document.createElement(name);\r\n\r\n if(!name)\r\n {\r\n throw new Error('renderToBody: missing name of element');\r\n }\r\n\r\n if(css?.length)\r\n {\r\n for(const cssClass of css)\r\n {\r\n containerElement.classList.add(cssClass);\r\n }\r\n }\r\n\r\n document.body.appendChild(containerElement);\r\n }\r\n\r\n containerElement.appendChild(element);\r\n }\r\n //render directly to body\r\n else\r\n {\r\n document.body.appendChild(element);\r\n }\r\n}"]}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/utils/common.ts"],"names":[],"mappings":"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","sourcesContent":["import extendLib from 'extend';\r\n\r\nimport {isBlank, isJsObject, isPresent} from './lang';\r\nimport {AsDictionary, Dictionary, StringDictionary} from '../types/dictionaries';\r\nimport {Enum} from '../types/enums';\r\nimport {ValueNamePair} from '../types/valueNamePair';\r\nimport {normalize} from '../normalizer/normalizer';\r\n\r\n/**\r\n * Reverse current string and returns new reverse string\r\n * @param str - String to be reversed\r\n * @returns string Reverse string\r\n */\r\nexport function reverseString(str: string): string\r\n{\r\n return str.split('').reverse().join('');\r\n}\r\n\r\n/**\r\n * Extends target object with source\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source - Object that will be used for extending\r\n */\r\nexport function extend<T, U>(deep: boolean, target: T, source: U): T & U;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V>(deep: boolean, target: T, source1: U, source2: V): T & U & V;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W>(deep: boolean, target: T, source1: U, source2: V, source3: W): T & U & V & W;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n * @param source4 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W, X>(deep: boolean, target: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source - Object that will be used for extending\r\n */\r\nexport function extend<T, U>(target: T, source: U): T & U;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V>(target: T, source1: U, source2: V): T & U & V;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W>(target: T, source1: U, source2: V, source3: W): T & U & V & W;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n * @param source4 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W, X>(target: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;\r\n/**\r\n * Extends one object with additional properties from other objects, supports deep extend\r\n * @param deepOrObject - Object to be extended or indication that deep copy should be performed\r\n * @param objectN - Objects that will be used for extending, if deep is used first here is target object\r\n * @returns Object Extended object with properties from other objects\r\n */\r\nexport function extend<TResult>(deepOrObject: boolean | Dictionary<any>, ...objectN: Dictionary<any>[]): TResult;\r\n/**\r\n * Extends one object with additional properties from other objects, supports deep extend\r\n * @param deepOrObject - Object to be extended or indication that deep copy should be performed\r\n * @param objectN - Objects that will be used for extending, if deep is used first here is target object\r\n * @returns Object Extended object with properties from other objects\r\n */\r\nexport function extend(deepOrObject: boolean | Dictionary<any>, ...objectN: Dictionary<any>[]): Dictionary\r\n{\r\n return extendLib.apply(null, [deepOrObject, ...objectN]);\r\n}\r\n\r\n/**\r\n * Generates random string consisting from lowercase letters\r\n * @param length - Length of generated string\r\n * @returns number Generated string\r\n */\r\nexport function generateId(length: number): string\r\n{\r\n let result = '';\r\n\r\n for(let x = 0; x < length; x++)\r\n {\r\n result += String.fromCharCode(Math.round(Math.random() * 25 + 97));\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Generates random string of specified length from possible characters\r\n * @param length - Length of generated string\r\n * @param possible - Possible characters used for generation of string\r\n */\r\nexport function generateRandomString(length: number, possible: string = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'): string\r\n{\r\n let text = '';\r\n\r\n for (let i = 0;i < length; i++)\r\n {\r\n text += possible.charAt(Math.floor(Math.random() * possible.length));\r\n }\r\n\r\n return text;\r\n}\r\n\r\n/**\r\n * Converts string in that way that first letter will be lowerCase\r\n * @param text - Text to be converted\r\n */\r\nexport function firstToLowerCase(text: string): string\r\n{\r\n return text.charAt(0).toLowerCase() + text.substr(1);\r\n}\r\n\r\n/**\r\n * Gets indication whether is child descendand of parent\r\n * @param parent - Parent to be tested\r\n * @param child - Child to be looked for\r\n */\r\nexport function isDescendant(parent: HTMLElement, child: HTMLElement): boolean\r\n{\r\n let node = child.parentNode;\r\n\r\n while (node != null)\r\n {\r\n if (node == parent)\r\n {\r\n return true;\r\n }\r\n\r\n node = node.parentNode;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Computes offset of element against document\r\n * @param element - Html element which offset is counted\r\n * @param doc - Html document to be used for extracting scroll offset\r\n */\r\nexport function offset(element: HTMLElement, doc?: Document)\r\n{\r\n doc = doc || document;\r\n\r\n const rect = element.getBoundingClientRect(),\r\n scrollLeft = window.pageXOffset || doc.documentElement.scrollLeft,\r\n scrollTop = window.pageYOffset || doc.documentElement.scrollTop;\r\n\r\n return {\r\n top: rect.top + scrollTop,\r\n left: rect.left + scrollLeft,\r\n bottom: rect.top + scrollTop + rect.height,\r\n right: rect.left + scrollLeft + rect.width\r\n };\r\n}\r\n\r\n/**\r\n * Converts html string into html DOM\r\n * @param html - Html string to be converted to DOM\r\n * @param doc - Optional html document to be used\r\n */\r\nexport function htmlToElement(html: string, doc?: Document): HTMLElement\r\n{\r\n let htmlDocument = document;\r\n\r\n if(isPresent(doc))\r\n {\r\n htmlDocument = doc;\r\n }\r\n\r\n const template = htmlDocument.createElement('template');\r\n html = html.trim();\r\n template.innerHTML = html;\r\n\r\n return template.content.firstChild as HTMLElement;\r\n}\r\n\r\n/**\r\n * Extract values from enum type\r\n * @param enumType - Enum type that will have extracted values\r\n */\r\nexport function getEnumValues<TEnum extends Enum>(enumType: TEnum): ValueNamePair[]\r\n{\r\n const result: ValueNamePair[] = [];\r\n\r\n Object.keys(enumType).forEach(key =>\r\n {\r\n if(isNaN(+key))\r\n {\r\n return;\r\n }\r\n\r\n result.push(\r\n {\r\n value: key,\r\n name: enumType[+key]\r\n });\r\n });\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Safely returns value from object property using string expression\r\n * @param object - Object which property value will be obtained\r\n * @param expression - Expression for obtaining value\r\n */\r\nexport function getValue<TValue = unknown>(object: Dictionary<any>, expression: string): TValue\r\nexport function getValue(object: Dictionary<any>, expression: string): unknown\r\n{\r\n return expression.split('.').reduce((o, i) =>\r\n {\r\n if(o)\r\n {\r\n return o[i];\r\n }\r\n\r\n return null;\r\n }, object);\r\n}\r\n\r\n/**\r\n * Sets value to objects property using string expression\r\n * @param object - Object which property value will be set\r\n * @param value - Value that will be set\r\n * @param expression - Expression for setting value\r\n */\r\nexport function setValue(object: Dictionary<any>, value: unknown, expression: string): void\r\n{\r\n const parts = expression.split('.');\r\n\r\n parts.forEach((part, index) =>\r\n {\r\n //last item value is assigned\r\n if(index == parts.length - 1)\r\n {\r\n if(isPresent(value))\r\n {\r\n object[part] = value;\r\n }\r\n\r\n return;\r\n }\r\n\r\n object = object[part] = object[part] ?? {};\r\n });\r\n}\r\n\r\n/**\r\n * Formats string using '%s', to print '%s' you have to use '%%s'\r\n * @param str - String containing substitution constants\r\n * @param args - Arguments that are used for replacement\r\n */\r\nexport function format(str: string, ...args: unknown[]): string\r\n{\r\n let i = 0;\r\n\r\n return str.replace(/((?!%).)%s/g, (_sub, substArgs) => `${substArgs[0]}${args[i++]}`).replace(/%%s/g, '%s');\r\n}\r\n\r\n/**\r\n * Performs flatMap over provided array\r\n * @param array - Array to be reduced using flatMap\r\n */\r\nexport function flatMapArray<TItem>(array: TItem[][]): TItem[]\r\n{\r\n return array.reduce((acc, x) => acc.concat(x), []);\r\n}\r\n\r\n/**\r\n * Serialize object to string that is usable as url query parameter\r\n * @param obj - Object to be serialized\r\n * @param replacer - Function that can be used for replacing provided values\r\n */\r\nexport function serializeToUrlQuery<TObj>(obj: TObj, replacer?: (this: any, key: string, value: any) => any): string\r\n{\r\n return btoa(encodeURIComponent(JSON.stringify(obj, replacer)));\r\n}\r\n\r\n/**\r\n * Deserialize value from url query string into object\r\n * @param queryParamValue - Query param string value\r\n * @param reviver - Function that can be used for correctly deserializing value\r\n */\r\nexport function deserializeFromUrlQuery<TObj>(queryParamValue: string, reviver?: (this: any, key: string, value: any) => any): TObj\r\n{\r\n return JSON.parse(decodeURIComponent(atob(queryParamValue)), reviver);\r\n}\r\n\r\n/**\r\n * Converts id to valid html id\r\n * @param id - Id that is going to be converted to valid html id\r\n * @param charMap - Character map used during normalization\r\n */\r\nexport function validHtmlId(id: string, charMap: StringDictionary = {}): string\r\n{\r\n id = id.toLowerCase()\r\n .replace(/[\\s]+/g, '-')\r\n .replace(/\\./g, '')\r\n .replace(/^(\\d)/g, 'x$1');\r\n\r\n id = normalize(id, charMap);\r\n\r\n return id;\r\n}\r\n\r\n/**\r\n * Checks whether is element overflown either horizontal, or vertical\r\n * @param element - Element to be tested for overflow\r\n */\r\nexport function isOverflown(element: HTMLElement): boolean\r\n{\r\n return element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;\r\n}\r\n\r\n/**\r\n * Normalizes string, removing accent\r\n * @param value - String to be normalized\r\n */\r\nexport function normalizeAccent(value: string): string\r\n{\r\n return value.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\r\n}\r\n\r\n/**\r\n * Converts instance of Class to equivalent Record type\r\n * @param instance - Instance which type to be converted\r\n * @typeparam TType - Type of instance\r\n */\r\nexport function asDictionary<TType>(instance: TType): AsDictionary<TType>\r\n{\r\n return instance as AsDictionary<TType>;\r\n}\r\n\r\n/**\r\n * Maps all iterable property values of object to \"this\" bounded\r\n * @param this - Object which will be filled with new values\r\n * @param value - Object holding values that will be used for filling\r\n * @param all - Indication whether map only existing properties or everything\r\n */\r\nexport function mapValuesToThis(this: Dictionary<any>, value: Dictionary<any>|undefined|null, all: boolean = false): void\r\n{\r\n if(!value)\r\n {\r\n return;\r\n }\r\n\r\n Object.keys(value).forEach(prop =>\r\n {\r\n if(value[prop] !== undefined && (all || (prop in this)))\r\n {\r\n this[prop] = value[prop];\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Briefly shows simple notification with simple text\r\n * @param show - Indication whether show notification\r\n * @param text - Text to be displayed, defaults to HMR finished text\r\n */\r\nexport function simpleNotification(show: boolean, text: string = 'HMR finished, app updated!'): void\r\n{\r\n if (show)\r\n {\r\n let div: HTMLDivElement|null = document.createElement('div');\r\n div.style.position = 'absolute';\r\n div.style.zIndex = '54345';\r\n div.style.background = 'rgb(255, 255, 255) none repeat scroll 0% 0%';\r\n div.style.padding = '8px';\r\n div.style.fontWeight = 'bold';\r\n div.style.borderRadius = 'bold';\r\n div.style.color = 'rgb(21, 57, 255)';\r\n div.style.left = '47%';\r\n div.style.top = '11px';\r\n div.style.boxShadow = '0px 0px 4px rgb(170, 170, 170)';\r\n div.style.transition = 'all 500ms';\r\n div.style.opacity = '0';\r\n\r\n div.innerText = text;\r\n\r\n document.body.append(div);\r\n\r\n setTimeout(() => div!.style.opacity = '1', 50);\r\n\r\n setTimeout(() =>\r\n {\r\n if(div)\r\n {\r\n div.style.opacity = '0';\r\n\r\n setTimeout(() =>\r\n {\r\n div!.remove();\r\n div = null;\r\n }, 500);\r\n }\r\n }, 2000);\r\n }\r\n}\r\n\r\n/**\r\n * Transforms any string to colour code\r\n * @param str - String to be changed to colour code\r\n */\r\nexport function stringToColour(str: string): string\r\n{\r\n let hash = 0;\r\n\r\n for (let i = 0; i < str.length; i++) \r\n {\r\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n \r\n let colour = '#';\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n const value = (hash >> (i * 8)) & 0xFF;\r\n colour += ('00' + value.toString(16)).substr(-2);\r\n }\r\n\r\n return colour;\r\n}\r\n\r\n/**\r\n * Renders element into body directly or into container element\r\n * @param document - Html document instance\r\n * @param element - Html element that will be rendered\r\n * @param containerElementSelector - Css selector for container element, if not specified renders into body, css selector must contain element name and optionally css classes\r\n */\r\nexport function renderToBody(document: Document, element: HTMLElement, containerElementSelector?: string|null): void\r\n{\r\n //render to specified target element\r\n if(containerElementSelector)\r\n {\r\n let containerElement = document.querySelector(`body ${containerElementSelector}`);\r\n\r\n //render to specified target element\r\n if(!containerElement)\r\n {\r\n const [name, ...css] = containerElementSelector.split('.');\r\n\r\n containerElement = document.createElement(name);\r\n\r\n if(!name)\r\n {\r\n throw new Error('renderToBody: missing name of element');\r\n }\r\n\r\n if(css?.length)\r\n {\r\n for(const cssClass of css)\r\n {\r\n containerElement.classList.add(cssClass);\r\n }\r\n }\r\n\r\n document.body.appendChild(containerElement);\r\n }\r\n\r\n containerElement.appendChild(element);\r\n }\r\n //render directly to body\r\n else\r\n {\r\n document.body.appendChild(element);\r\n }\r\n}\r\n\r\n/**\r\n * Formats input string using no parameters, returns original input\r\n * @param input - Input that will be formatted\r\n */\r\nexport function formatString(input: string|undefined|null): string\r\n/**\r\n * Formats input string using object holding formatting parameters\r\n * @param input - Input that will be formatted\r\n * @param parameter - Parameter as object which properties will be used for formatting\r\n * \r\n * ```\r\n * formatString('test {val}, {@test}, {@(2)test}', {val: 3, test: {bool: true, num: 10}});\r\n * ```\r\n * \r\n * displays `{val}` as direct stringified value of '`val`' property \r\n * displays `{@test}` as JSON strinfigied value of '`test`' property \r\n * displays `{@(2)test}` as JSON stringified value of '`test`' property with 2 spaces indentation (other supported spaces are 4 and 8)\r\n */\r\nexport function formatString(input: string|undefined|null, parameter: Record<string, unknown>): string\r\n/**\r\n * Formats input string using array holding formatting parameters\r\n * @param input - Input that will be formatted\r\n * @param parameter - Parameter as array which items will be used for formatting\r\n * \r\n * ```\r\n * formatString('test {0}, {@1}, {@(2)1}', [3, {bool: true, num: 10}])\r\n * ```\r\n * \r\n * displays `{0}` as direct stringified value of '`0`' index item \r\n * displays `{@1}` as JSON strinfigied value of '`0`' index item \r\n * displays `{@(2)1}` as JSON stringified value of '`0`' index item with 2 spaces indentation (other supported spaces are 4 and 8)\r\n */\r\nexport function formatString(input: string|undefined|null, ...parameters: unknown[]): string\r\nexport function formatString(input: string|undefined|null, ...parameters: unknown[]|[Record<string, unknown>]): string\r\n{\r\n if(isBlank(input))\r\n {\r\n return '';\r\n }\r\n\r\n //formatting using object\r\n if(parameters.length == 1 && isJsObject(parameters[0]))\r\n {\r\n const parameter = parameters[0] as Record<string, unknown>;\r\n\r\n for(const prop in parameter)\r\n {\r\n input = input?.replace(new RegExp('\\\\{' + prop + '\\\\}', 'g'), `${parameter[prop]}`);\r\n input = input?.replace(new RegExp('\\\\{@(?:\\\\(([2|4|8])\\\\))?' + prop + '\\\\}', 'g'), (_, ...args) =>\r\n {\r\n if(isBlank(args[0]))\r\n {\r\n return JSON.stringify(parameter[prop]);\r\n }\r\n \r\n return JSON.stringify(parameter[prop], null, +args[0]);\r\n });\r\n }\r\n }\r\n //formatting using array of values\r\n else\r\n {\r\n //no formatting parameters\r\n if(!parameters.length)\r\n {\r\n return input;\r\n }\r\n\r\n for(let x = 0; x < parameters.length; x++)\r\n {\r\n input = input?.replace(new RegExp('\\\\{' + x + '\\\\}', 'g'), `${parameters[x]}`);\r\n input = input?.replace(new RegExp('\\\\{@(?:\\\\(([2|4|8])\\\\))?' + x + '\\\\}', 'g'), (_, ...args) =>\r\n {\r\n if(isBlank(args[0]))\r\n {\r\n return JSON.stringify(parameters[x]);\r\n }\r\n \r\n return JSON.stringify(parameters[x], null, +args[0]);\r\n });\r\n }\r\n }\r\n\r\n return input;\r\n}"]}
@@ -1,5 +1,5 @@
1
1
  import extendLib from 'extend';
2
- import { isPresent } from './lang';
2
+ import { isBlank, isJsObject, isPresent } from './lang';
3
3
  import { normalize } from '../normalizer/normalizer';
4
4
  /**
5
5
  * Reverse current string and returns new reverse string
@@ -302,4 +302,39 @@ export function renderToBody(document, element, containerElementSelector) {
302
302
  document.body.appendChild(element);
303
303
  }
304
304
  }
305
+ export function formatString(input, ...parameters) {
306
+ if (isBlank(input)) {
307
+ return '';
308
+ }
309
+ //formatting using object
310
+ if (parameters.length == 1 && isJsObject(parameters[0])) {
311
+ const parameter = parameters[0];
312
+ for (const prop in parameter) {
313
+ input = input?.replace(new RegExp('\\{' + prop + '\\}', 'g'), `${parameter[prop]}`);
314
+ input = input?.replace(new RegExp('\\{@(?:\\(([2|4|8])\\))?' + prop + '\\}', 'g'), (_, ...args) => {
315
+ if (isBlank(args[0])) {
316
+ return JSON.stringify(parameter[prop]);
317
+ }
318
+ return JSON.stringify(parameter[prop], null, +args[0]);
319
+ });
320
+ }
321
+ }
322
+ //formatting using array of values
323
+ else {
324
+ //no formatting parameters
325
+ if (!parameters.length) {
326
+ return input;
327
+ }
328
+ for (let x = 0; x < parameters.length; x++) {
329
+ input = input?.replace(new RegExp('\\{' + x + '\\}', 'g'), `${parameters[x]}`);
330
+ input = input?.replace(new RegExp('\\{@(?:\\(([2|4|8])\\))?' + x + '\\}', 'g'), (_, ...args) => {
331
+ if (isBlank(args[0])) {
332
+ return JSON.stringify(parameters[x]);
333
+ }
334
+ return JSON.stringify(parameters[x], null, +args[0]);
335
+ });
336
+ }
337
+ }
338
+ return input;
339
+ }
305
340
  //# sourceMappingURL=common.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/utils/common.ts"],"names":[],"mappings":"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","sourcesContent":["import extendLib from 'extend';\r\n\r\nimport {isPresent} from './lang';\r\nimport {AsDictionary, Dictionary, StringDictionary} from '../types/dictionaries';\r\nimport {Enum} from '../types/enums';\r\nimport {ValueNamePair} from '../types/valueNamePair';\r\nimport {normalize} from '../normalizer/normalizer';\r\n\r\n/**\r\n * Reverse current string and returns new reverse string\r\n * @param str - String to be reversed\r\n * @returns string Reverse string\r\n */\r\nexport function reverseString(str: string): string\r\n{\r\n return str.split('').reverse().join('');\r\n}\r\n\r\n/**\r\n * Extends target object with source\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source - Object that will be used for extending\r\n */\r\nexport function extend<T, U>(deep: boolean, target: T, source: U): T & U;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V>(deep: boolean, target: T, source1: U, source2: V): T & U & V;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W>(deep: boolean, target: T, source1: U, source2: V, source3: W): T & U & V & W;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n * @param source4 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W, X>(deep: boolean, target: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source - Object that will be used for extending\r\n */\r\nexport function extend<T, U>(target: T, source: U): T & U;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V>(target: T, source1: U, source2: V): T & U & V;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W>(target: T, source1: U, source2: V, source3: W): T & U & V & W;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n * @param source4 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W, X>(target: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;\r\n/**\r\n * Extends one object with additional properties from other objects, supports deep extend\r\n * @param deepOrObject - Object to be extended or indication that deep copy should be performed\r\n * @param objectN - Objects that will be used for extending, if deep is used first here is target object\r\n * @returns Object Extended object with properties from other objects\r\n */\r\nexport function extend<TResult>(deepOrObject: boolean | Dictionary<any>, ...objectN: Dictionary<any>[]): TResult;\r\n/**\r\n * Extends one object with additional properties from other objects, supports deep extend\r\n * @param deepOrObject - Object to be extended or indication that deep copy should be performed\r\n * @param objectN - Objects that will be used for extending, if deep is used first here is target object\r\n * @returns Object Extended object with properties from other objects\r\n */\r\nexport function extend(deepOrObject: boolean | Dictionary<any>, ...objectN: Dictionary<any>[]): Dictionary\r\n{\r\n return extendLib.apply(null, [deepOrObject, ...objectN]);\r\n}\r\n\r\n/**\r\n * Generates random string consisting from lowercase letters\r\n * @param length - Length of generated string\r\n * @returns number Generated string\r\n */\r\nexport function generateId(length: number): string\r\n{\r\n let result = '';\r\n\r\n for(let x = 0; x < length; x++)\r\n {\r\n result += String.fromCharCode(Math.round(Math.random() * 25 + 97));\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Generates random string of specified length from possible characters\r\n * @param length - Length of generated string\r\n * @param possible - Possible characters used for generation of string\r\n */\r\nexport function generateRandomString(length: number, possible: string = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'): string\r\n{\r\n let text = '';\r\n\r\n for (let i = 0;i < length; i++)\r\n {\r\n text += possible.charAt(Math.floor(Math.random() * possible.length));\r\n }\r\n\r\n return text;\r\n}\r\n\r\n/**\r\n * Converts string in that way that first letter will be lowerCase\r\n * @param text - Text to be converted\r\n */\r\nexport function firstToLowerCase(text: string): string\r\n{\r\n return text.charAt(0).toLowerCase() + text.substr(1);\r\n}\r\n\r\n/**\r\n * Gets indication whether is child descendand of parent\r\n * @param parent - Parent to be tested\r\n * @param child - Child to be looked for\r\n */\r\nexport function isDescendant(parent: HTMLElement, child: HTMLElement): boolean\r\n{\r\n let node = child.parentNode;\r\n\r\n while (node != null)\r\n {\r\n if (node == parent)\r\n {\r\n return true;\r\n }\r\n\r\n node = node.parentNode;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Computes offset of element against document\r\n * @param element - Html element which offset is counted\r\n * @param doc - Html document to be used for extracting scroll offset\r\n */\r\nexport function offset(element: HTMLElement, doc?: Document)\r\n{\r\n doc = doc || document;\r\n\r\n const rect = element.getBoundingClientRect(),\r\n scrollLeft = window.pageXOffset || doc.documentElement.scrollLeft,\r\n scrollTop = window.pageYOffset || doc.documentElement.scrollTop;\r\n\r\n return {\r\n top: rect.top + scrollTop,\r\n left: rect.left + scrollLeft,\r\n bottom: rect.top + scrollTop + rect.height,\r\n right: rect.left + scrollLeft + rect.width\r\n };\r\n}\r\n\r\n/**\r\n * Converts html string into html DOM\r\n * @param html - Html string to be converted to DOM\r\n * @param doc - Optional html document to be used\r\n */\r\nexport function htmlToElement(html: string, doc?: Document): HTMLElement\r\n{\r\n let htmlDocument = document;\r\n\r\n if(isPresent(doc))\r\n {\r\n htmlDocument = doc;\r\n }\r\n\r\n const template = htmlDocument.createElement('template');\r\n html = html.trim();\r\n template.innerHTML = html;\r\n\r\n return template.content.firstChild as HTMLElement;\r\n}\r\n\r\n/**\r\n * Extract values from enum type\r\n * @param enumType - Enum type that will have extracted values\r\n */\r\nexport function getEnumValues<TEnum extends Enum>(enumType: TEnum): ValueNamePair[]\r\n{\r\n const result: ValueNamePair[] = [];\r\n\r\n Object.keys(enumType).forEach(key =>\r\n {\r\n if(isNaN(+key))\r\n {\r\n return;\r\n }\r\n\r\n result.push(\r\n {\r\n value: key,\r\n name: enumType[+key]\r\n });\r\n });\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Safely returns value from object property using string expression\r\n * @param object - Object which property value will be obtained\r\n * @param expression - Expression for obtaining value\r\n */\r\nexport function getValue<TValue = unknown>(object: Dictionary<any>, expression: string): TValue\r\nexport function getValue(object: Dictionary<any>, expression: string): unknown\r\n{\r\n return expression.split('.').reduce((o, i) =>\r\n {\r\n if(o)\r\n {\r\n return o[i];\r\n }\r\n\r\n return null;\r\n }, object);\r\n}\r\n\r\n/**\r\n * Sets value to objects property using string expression\r\n * @param object - Object which property value will be set\r\n * @param value - Value that will be set\r\n * @param expression - Expression for setting value\r\n */\r\nexport function setValue(object: Dictionary<any>, value: unknown, expression: string): void\r\n{\r\n const parts = expression.split('.');\r\n\r\n parts.forEach((part, index) =>\r\n {\r\n //last item value is assigned\r\n if(index == parts.length - 1)\r\n {\r\n if(isPresent(value))\r\n {\r\n object[part] = value;\r\n }\r\n\r\n return;\r\n }\r\n\r\n object = object[part] = object[part] ?? {};\r\n });\r\n}\r\n\r\n/**\r\n * Formats string using '%s', to print '%s' you have to use '%%s'\r\n * @param str - String containing substitution constants\r\n * @param args - Arguments that are used for replacement\r\n */\r\nexport function format(str: string, ...args: unknown[]): string\r\n{\r\n let i = 0;\r\n\r\n return str.replace(/((?!%).)%s/g, (_sub, substArgs) => `${substArgs[0]}${args[i++]}`).replace(/%%s/g, '%s');\r\n}\r\n\r\n/**\r\n * Performs flatMap over provided array\r\n * @param array - Array to be reduced using flatMap\r\n */\r\nexport function flatMapArray<TItem>(array: TItem[][]): TItem[]\r\n{\r\n return array.reduce((acc, x) => acc.concat(x), []);\r\n}\r\n\r\n/**\r\n * Serialize object to string that is usable as url query parameter\r\n * @param obj - Object to be serialized\r\n * @param replacer - Function that can be used for replacing provided values\r\n */\r\nexport function serializeToUrlQuery<TObj>(obj: TObj, replacer?: (this: any, key: string, value: any) => any): string\r\n{\r\n return btoa(encodeURIComponent(JSON.stringify(obj, replacer)));\r\n}\r\n\r\n/**\r\n * Deserialize value from url query string into object\r\n * @param queryParamValue - Query param string value\r\n * @param reviver - Function that can be used for correctly deserializing value\r\n */\r\nexport function deserializeFromUrlQuery<TObj>(queryParamValue: string, reviver?: (this: any, key: string, value: any) => any): TObj\r\n{\r\n return JSON.parse(decodeURIComponent(atob(queryParamValue)), reviver);\r\n}\r\n\r\n/**\r\n * Converts id to valid html id\r\n * @param id - Id that is going to be converted to valid html id\r\n * @param charMap - Character map used during normalization\r\n */\r\nexport function validHtmlId(id: string, charMap: StringDictionary = {}): string\r\n{\r\n id = id.toLowerCase()\r\n .replace(/[\\s]+/g, '-')\r\n .replace(/\\./g, '')\r\n .replace(/^(\\d)/g, 'x$1');\r\n\r\n id = normalize(id, charMap);\r\n\r\n return id;\r\n}\r\n\r\n/**\r\n * Checks whether is element overflown either horizontal, or vertical\r\n * @param element - Element to be tested for overflow\r\n */\r\nexport function isOverflown(element: HTMLElement): boolean\r\n{\r\n return element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;\r\n}\r\n\r\n/**\r\n * Normalizes string, removing accent\r\n * @param value - String to be normalized\r\n */\r\nexport function normalizeAccent(value: string): string\r\n{\r\n return value.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\r\n}\r\n\r\n/**\r\n * Converts instance of Class to equivalent Record type\r\n * @param instance - Instance which type to be converted\r\n * @typeparam TType - Type of instance\r\n */\r\nexport function asDictionary<TType>(instance: TType): AsDictionary<TType>\r\n{\r\n return instance as AsDictionary<TType>;\r\n}\r\n\r\n/**\r\n * Maps all iterable property values of object to \"this\" bounded\r\n * @param this - Object which will be filled with new values\r\n * @param value - Object holding values that will be used for filling\r\n * @param all - Indication whether map only existing properties or everything\r\n */\r\nexport function mapValuesToThis(this: Dictionary<any>, value: Dictionary<any>|undefined|null, all: boolean = false): void\r\n{\r\n if(!value)\r\n {\r\n return;\r\n }\r\n\r\n Object.keys(value).forEach(prop =>\r\n {\r\n if(value[prop] !== undefined && (all || (prop in this)))\r\n {\r\n this[prop] = value[prop];\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Briefly shows simple notification with simple text\r\n * @param show - Indication whether show notification\r\n * @param text - Text to be displayed, defaults to HMR finished text\r\n */\r\nexport function simpleNotification(show: boolean, text: string = 'HMR finished, app updated!'): void\r\n{\r\n if (show)\r\n {\r\n let div: HTMLDivElement|null = document.createElement('div');\r\n div.style.position = 'absolute';\r\n div.style.zIndex = '54345';\r\n div.style.background = 'rgb(255, 255, 255) none repeat scroll 0% 0%';\r\n div.style.padding = '8px';\r\n div.style.fontWeight = 'bold';\r\n div.style.borderRadius = 'bold';\r\n div.style.color = 'rgb(21, 57, 255)';\r\n div.style.left = '47%';\r\n div.style.top = '11px';\r\n div.style.boxShadow = '0px 0px 4px rgb(170, 170, 170)';\r\n div.style.transition = 'all 500ms';\r\n div.style.opacity = '0';\r\n\r\n div.innerText = text;\r\n\r\n document.body.append(div);\r\n\r\n setTimeout(() => div!.style.opacity = '1', 50);\r\n\r\n setTimeout(() =>\r\n {\r\n if(div)\r\n {\r\n div.style.opacity = '0';\r\n\r\n setTimeout(() =>\r\n {\r\n div!.remove();\r\n div = null;\r\n }, 500);\r\n }\r\n }, 2000);\r\n }\r\n}\r\n\r\n/**\r\n * Transforms any string to colour code\r\n * @param str - String to be changed to colour code\r\n */\r\nexport function stringToColour(str: string): string\r\n{\r\n let hash = 0;\r\n\r\n for (let i = 0; i < str.length; i++) \r\n {\r\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n \r\n let colour = '#';\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n const value = (hash >> (i * 8)) & 0xFF;\r\n colour += ('00' + value.toString(16)).substr(-2);\r\n }\r\n\r\n return colour;\r\n}\r\n\r\n/**\r\n * Renders element into body directly or into container element\r\n * @param document - Html document instance\r\n * @param element - Html element that will be rendered\r\n * @param containerElementSelector - Css selector for container element, if not specified renders into body, css selector must contain element name and optionally css classes\r\n */\r\nexport function renderToBody(document: Document, element: HTMLElement, containerElementSelector?: string|null): void\r\n{\r\n //render to specified target element\r\n if(containerElementSelector)\r\n {\r\n let containerElement = document.querySelector(`body ${containerElementSelector}`);\r\n\r\n //render to specified target element\r\n if(!containerElement)\r\n {\r\n const [name, ...css] = containerElementSelector.split('.');\r\n\r\n containerElement = document.createElement(name);\r\n\r\n if(!name)\r\n {\r\n throw new Error('renderToBody: missing name of element');\r\n }\r\n\r\n if(css?.length)\r\n {\r\n for(const cssClass of css)\r\n {\r\n containerElement.classList.add(cssClass);\r\n }\r\n }\r\n\r\n document.body.appendChild(containerElement);\r\n }\r\n\r\n containerElement.appendChild(element);\r\n }\r\n //render directly to body\r\n else\r\n {\r\n document.body.appendChild(element);\r\n }\r\n}"]}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/utils/common.ts"],"names":[],"mappings":"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","sourcesContent":["import extendLib from 'extend';\r\n\r\nimport {isBlank, isJsObject, isPresent} from './lang';\r\nimport {AsDictionary, Dictionary, StringDictionary} from '../types/dictionaries';\r\nimport {Enum} from '../types/enums';\r\nimport {ValueNamePair} from '../types/valueNamePair';\r\nimport {normalize} from '../normalizer/normalizer';\r\n\r\n/**\r\n * Reverse current string and returns new reverse string\r\n * @param str - String to be reversed\r\n * @returns string Reverse string\r\n */\r\nexport function reverseString(str: string): string\r\n{\r\n return str.split('').reverse().join('');\r\n}\r\n\r\n/**\r\n * Extends target object with source\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source - Object that will be used for extending\r\n */\r\nexport function extend<T, U>(deep: boolean, target: T, source: U): T & U;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V>(deep: boolean, target: T, source1: U, source2: V): T & U & V;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W>(deep: boolean, target: T, source1: U, source2: V, source3: W): T & U & V & W;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n * @param source4 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W, X>(deep: boolean, target: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source - Object that will be used for extending\r\n */\r\nexport function extend<T, U>(target: T, source: U): T & U;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V>(target: T, source1: U, source2: V): T & U & V;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W>(target: T, source1: U, source2: V, source3: W): T & U & V & W;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n * @param source4 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W, X>(target: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;\r\n/**\r\n * Extends one object with additional properties from other objects, supports deep extend\r\n * @param deepOrObject - Object to be extended or indication that deep copy should be performed\r\n * @param objectN - Objects that will be used for extending, if deep is used first here is target object\r\n * @returns Object Extended object with properties from other objects\r\n */\r\nexport function extend<TResult>(deepOrObject: boolean | Dictionary<any>, ...objectN: Dictionary<any>[]): TResult;\r\n/**\r\n * Extends one object with additional properties from other objects, supports deep extend\r\n * @param deepOrObject - Object to be extended or indication that deep copy should be performed\r\n * @param objectN - Objects that will be used for extending, if deep is used first here is target object\r\n * @returns Object Extended object with properties from other objects\r\n */\r\nexport function extend(deepOrObject: boolean | Dictionary<any>, ...objectN: Dictionary<any>[]): Dictionary\r\n{\r\n return extendLib.apply(null, [deepOrObject, ...objectN]);\r\n}\r\n\r\n/**\r\n * Generates random string consisting from lowercase letters\r\n * @param length - Length of generated string\r\n * @returns number Generated string\r\n */\r\nexport function generateId(length: number): string\r\n{\r\n let result = '';\r\n\r\n for(let x = 0; x < length; x++)\r\n {\r\n result += String.fromCharCode(Math.round(Math.random() * 25 + 97));\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Generates random string of specified length from possible characters\r\n * @param length - Length of generated string\r\n * @param possible - Possible characters used for generation of string\r\n */\r\nexport function generateRandomString(length: number, possible: string = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'): string\r\n{\r\n let text = '';\r\n\r\n for (let i = 0;i < length; i++)\r\n {\r\n text += possible.charAt(Math.floor(Math.random() * possible.length));\r\n }\r\n\r\n return text;\r\n}\r\n\r\n/**\r\n * Converts string in that way that first letter will be lowerCase\r\n * @param text - Text to be converted\r\n */\r\nexport function firstToLowerCase(text: string): string\r\n{\r\n return text.charAt(0).toLowerCase() + text.substr(1);\r\n}\r\n\r\n/**\r\n * Gets indication whether is child descendand of parent\r\n * @param parent - Parent to be tested\r\n * @param child - Child to be looked for\r\n */\r\nexport function isDescendant(parent: HTMLElement, child: HTMLElement): boolean\r\n{\r\n let node = child.parentNode;\r\n\r\n while (node != null)\r\n {\r\n if (node == parent)\r\n {\r\n return true;\r\n }\r\n\r\n node = node.parentNode;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Computes offset of element against document\r\n * @param element - Html element which offset is counted\r\n * @param doc - Html document to be used for extracting scroll offset\r\n */\r\nexport function offset(element: HTMLElement, doc?: Document)\r\n{\r\n doc = doc || document;\r\n\r\n const rect = element.getBoundingClientRect(),\r\n scrollLeft = window.pageXOffset || doc.documentElement.scrollLeft,\r\n scrollTop = window.pageYOffset || doc.documentElement.scrollTop;\r\n\r\n return {\r\n top: rect.top + scrollTop,\r\n left: rect.left + scrollLeft,\r\n bottom: rect.top + scrollTop + rect.height,\r\n right: rect.left + scrollLeft + rect.width\r\n };\r\n}\r\n\r\n/**\r\n * Converts html string into html DOM\r\n * @param html - Html string to be converted to DOM\r\n * @param doc - Optional html document to be used\r\n */\r\nexport function htmlToElement(html: string, doc?: Document): HTMLElement\r\n{\r\n let htmlDocument = document;\r\n\r\n if(isPresent(doc))\r\n {\r\n htmlDocument = doc;\r\n }\r\n\r\n const template = htmlDocument.createElement('template');\r\n html = html.trim();\r\n template.innerHTML = html;\r\n\r\n return template.content.firstChild as HTMLElement;\r\n}\r\n\r\n/**\r\n * Extract values from enum type\r\n * @param enumType - Enum type that will have extracted values\r\n */\r\nexport function getEnumValues<TEnum extends Enum>(enumType: TEnum): ValueNamePair[]\r\n{\r\n const result: ValueNamePair[] = [];\r\n\r\n Object.keys(enumType).forEach(key =>\r\n {\r\n if(isNaN(+key))\r\n {\r\n return;\r\n }\r\n\r\n result.push(\r\n {\r\n value: key,\r\n name: enumType[+key]\r\n });\r\n });\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Safely returns value from object property using string expression\r\n * @param object - Object which property value will be obtained\r\n * @param expression - Expression for obtaining value\r\n */\r\nexport function getValue<TValue = unknown>(object: Dictionary<any>, expression: string): TValue\r\nexport function getValue(object: Dictionary<any>, expression: string): unknown\r\n{\r\n return expression.split('.').reduce((o, i) =>\r\n {\r\n if(o)\r\n {\r\n return o[i];\r\n }\r\n\r\n return null;\r\n }, object);\r\n}\r\n\r\n/**\r\n * Sets value to objects property using string expression\r\n * @param object - Object which property value will be set\r\n * @param value - Value that will be set\r\n * @param expression - Expression for setting value\r\n */\r\nexport function setValue(object: Dictionary<any>, value: unknown, expression: string): void\r\n{\r\n const parts = expression.split('.');\r\n\r\n parts.forEach((part, index) =>\r\n {\r\n //last item value is assigned\r\n if(index == parts.length - 1)\r\n {\r\n if(isPresent(value))\r\n {\r\n object[part] = value;\r\n }\r\n\r\n return;\r\n }\r\n\r\n object = object[part] = object[part] ?? {};\r\n });\r\n}\r\n\r\n/**\r\n * Formats string using '%s', to print '%s' you have to use '%%s'\r\n * @param str - String containing substitution constants\r\n * @param args - Arguments that are used for replacement\r\n */\r\nexport function format(str: string, ...args: unknown[]): string\r\n{\r\n let i = 0;\r\n\r\n return str.replace(/((?!%).)%s/g, (_sub, substArgs) => `${substArgs[0]}${args[i++]}`).replace(/%%s/g, '%s');\r\n}\r\n\r\n/**\r\n * Performs flatMap over provided array\r\n * @param array - Array to be reduced using flatMap\r\n */\r\nexport function flatMapArray<TItem>(array: TItem[][]): TItem[]\r\n{\r\n return array.reduce((acc, x) => acc.concat(x), []);\r\n}\r\n\r\n/**\r\n * Serialize object to string that is usable as url query parameter\r\n * @param obj - Object to be serialized\r\n * @param replacer - Function that can be used for replacing provided values\r\n */\r\nexport function serializeToUrlQuery<TObj>(obj: TObj, replacer?: (this: any, key: string, value: any) => any): string\r\n{\r\n return btoa(encodeURIComponent(JSON.stringify(obj, replacer)));\r\n}\r\n\r\n/**\r\n * Deserialize value from url query string into object\r\n * @param queryParamValue - Query param string value\r\n * @param reviver - Function that can be used for correctly deserializing value\r\n */\r\nexport function deserializeFromUrlQuery<TObj>(queryParamValue: string, reviver?: (this: any, key: string, value: any) => any): TObj\r\n{\r\n return JSON.parse(decodeURIComponent(atob(queryParamValue)), reviver);\r\n}\r\n\r\n/**\r\n * Converts id to valid html id\r\n * @param id - Id that is going to be converted to valid html id\r\n * @param charMap - Character map used during normalization\r\n */\r\nexport function validHtmlId(id: string, charMap: StringDictionary = {}): string\r\n{\r\n id = id.toLowerCase()\r\n .replace(/[\\s]+/g, '-')\r\n .replace(/\\./g, '')\r\n .replace(/^(\\d)/g, 'x$1');\r\n\r\n id = normalize(id, charMap);\r\n\r\n return id;\r\n}\r\n\r\n/**\r\n * Checks whether is element overflown either horizontal, or vertical\r\n * @param element - Element to be tested for overflow\r\n */\r\nexport function isOverflown(element: HTMLElement): boolean\r\n{\r\n return element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;\r\n}\r\n\r\n/**\r\n * Normalizes string, removing accent\r\n * @param value - String to be normalized\r\n */\r\nexport function normalizeAccent(value: string): string\r\n{\r\n return value.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\r\n}\r\n\r\n/**\r\n * Converts instance of Class to equivalent Record type\r\n * @param instance - Instance which type to be converted\r\n * @typeparam TType - Type of instance\r\n */\r\nexport function asDictionary<TType>(instance: TType): AsDictionary<TType>\r\n{\r\n return instance as AsDictionary<TType>;\r\n}\r\n\r\n/**\r\n * Maps all iterable property values of object to \"this\" bounded\r\n * @param this - Object which will be filled with new values\r\n * @param value - Object holding values that will be used for filling\r\n * @param all - Indication whether map only existing properties or everything\r\n */\r\nexport function mapValuesToThis(this: Dictionary<any>, value: Dictionary<any>|undefined|null, all: boolean = false): void\r\n{\r\n if(!value)\r\n {\r\n return;\r\n }\r\n\r\n Object.keys(value).forEach(prop =>\r\n {\r\n if(value[prop] !== undefined && (all || (prop in this)))\r\n {\r\n this[prop] = value[prop];\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Briefly shows simple notification with simple text\r\n * @param show - Indication whether show notification\r\n * @param text - Text to be displayed, defaults to HMR finished text\r\n */\r\nexport function simpleNotification(show: boolean, text: string = 'HMR finished, app updated!'): void\r\n{\r\n if (show)\r\n {\r\n let div: HTMLDivElement|null = document.createElement('div');\r\n div.style.position = 'absolute';\r\n div.style.zIndex = '54345';\r\n div.style.background = 'rgb(255, 255, 255) none repeat scroll 0% 0%';\r\n div.style.padding = '8px';\r\n div.style.fontWeight = 'bold';\r\n div.style.borderRadius = 'bold';\r\n div.style.color = 'rgb(21, 57, 255)';\r\n div.style.left = '47%';\r\n div.style.top = '11px';\r\n div.style.boxShadow = '0px 0px 4px rgb(170, 170, 170)';\r\n div.style.transition = 'all 500ms';\r\n div.style.opacity = '0';\r\n\r\n div.innerText = text;\r\n\r\n document.body.append(div);\r\n\r\n setTimeout(() => div!.style.opacity = '1', 50);\r\n\r\n setTimeout(() =>\r\n {\r\n if(div)\r\n {\r\n div.style.opacity = '0';\r\n\r\n setTimeout(() =>\r\n {\r\n div!.remove();\r\n div = null;\r\n }, 500);\r\n }\r\n }, 2000);\r\n }\r\n}\r\n\r\n/**\r\n * Transforms any string to colour code\r\n * @param str - String to be changed to colour code\r\n */\r\nexport function stringToColour(str: string): string\r\n{\r\n let hash = 0;\r\n\r\n for (let i = 0; i < str.length; i++) \r\n {\r\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n \r\n let colour = '#';\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n const value = (hash >> (i * 8)) & 0xFF;\r\n colour += ('00' + value.toString(16)).substr(-2);\r\n }\r\n\r\n return colour;\r\n}\r\n\r\n/**\r\n * Renders element into body directly or into container element\r\n * @param document - Html document instance\r\n * @param element - Html element that will be rendered\r\n * @param containerElementSelector - Css selector for container element, if not specified renders into body, css selector must contain element name and optionally css classes\r\n */\r\nexport function renderToBody(document: Document, element: HTMLElement, containerElementSelector?: string|null): void\r\n{\r\n //render to specified target element\r\n if(containerElementSelector)\r\n {\r\n let containerElement = document.querySelector(`body ${containerElementSelector}`);\r\n\r\n //render to specified target element\r\n if(!containerElement)\r\n {\r\n const [name, ...css] = containerElementSelector.split('.');\r\n\r\n containerElement = document.createElement(name);\r\n\r\n if(!name)\r\n {\r\n throw new Error('renderToBody: missing name of element');\r\n }\r\n\r\n if(css?.length)\r\n {\r\n for(const cssClass of css)\r\n {\r\n containerElement.classList.add(cssClass);\r\n }\r\n }\r\n\r\n document.body.appendChild(containerElement);\r\n }\r\n\r\n containerElement.appendChild(element);\r\n }\r\n //render directly to body\r\n else\r\n {\r\n document.body.appendChild(element);\r\n }\r\n}\r\n\r\n/**\r\n * Formats input string using no parameters, returns original input\r\n * @param input - Input that will be formatted\r\n */\r\nexport function formatString(input: string|undefined|null): string\r\n/**\r\n * Formats input string using object holding formatting parameters\r\n * @param input - Input that will be formatted\r\n * @param parameter - Parameter as object which properties will be used for formatting\r\n * \r\n * ```\r\n * formatString('test {val}, {@test}, {@(2)test}', {val: 3, test: {bool: true, num: 10}});\r\n * ```\r\n * \r\n * displays `{val}` as direct stringified value of '`val`' property \r\n * displays `{@test}` as JSON strinfigied value of '`test`' property \r\n * displays `{@(2)test}` as JSON stringified value of '`test`' property with 2 spaces indentation (other supported spaces are 4 and 8)\r\n */\r\nexport function formatString(input: string|undefined|null, parameter: Record<string, unknown>): string\r\n/**\r\n * Formats input string using array holding formatting parameters\r\n * @param input - Input that will be formatted\r\n * @param parameter - Parameter as array which items will be used for formatting\r\n * \r\n * ```\r\n * formatString('test {0}, {@1}, {@(2)1}', [3, {bool: true, num: 10}])\r\n * ```\r\n * \r\n * displays `{0}` as direct stringified value of '`0`' index item \r\n * displays `{@1}` as JSON strinfigied value of '`0`' index item \r\n * displays `{@(2)1}` as JSON stringified value of '`0`' index item with 2 spaces indentation (other supported spaces are 4 and 8)\r\n */\r\nexport function formatString(input: string|undefined|null, ...parameters: unknown[]): string\r\nexport function formatString(input: string|undefined|null, ...parameters: unknown[]|[Record<string, unknown>]): string\r\n{\r\n if(isBlank(input))\r\n {\r\n return '';\r\n }\r\n\r\n //formatting using object\r\n if(parameters.length == 1 && isJsObject(parameters[0]))\r\n {\r\n const parameter = parameters[0] as Record<string, unknown>;\r\n\r\n for(const prop in parameter)\r\n {\r\n input = input?.replace(new RegExp('\\\\{' + prop + '\\\\}', 'g'), `${parameter[prop]}`);\r\n input = input?.replace(new RegExp('\\\\{@(?:\\\\(([2|4|8])\\\\))?' + prop + '\\\\}', 'g'), (_, ...args) =>\r\n {\r\n if(isBlank(args[0]))\r\n {\r\n return JSON.stringify(parameter[prop]);\r\n }\r\n \r\n return JSON.stringify(parameter[prop], null, +args[0]);\r\n });\r\n }\r\n }\r\n //formatting using array of values\r\n else\r\n {\r\n //no formatting parameters\r\n if(!parameters.length)\r\n {\r\n return input;\r\n }\r\n\r\n for(let x = 0; x < parameters.length; x++)\r\n {\r\n input = input?.replace(new RegExp('\\\\{' + x + '\\\\}', 'g'), `${parameters[x]}`);\r\n input = input?.replace(new RegExp('\\\\{@(?:\\\\(([2|4|8])\\\\))?' + x + '\\\\}', 'g'), (_, ...args) =>\r\n {\r\n if(isBlank(args[0]))\r\n {\r\n return JSON.stringify(parameters[x]);\r\n }\r\n \r\n return JSON.stringify(parameters[x], null, +args[0]);\r\n });\r\n }\r\n }\r\n\r\n return input;\r\n}"]}
@@ -1,6 +1,6 @@
1
1
  import { __spreadArray } from "tslib";
2
2
  import extendLib from 'extend';
3
- import { isPresent } from './lang';
3
+ import { isBlank, isJsObject, isPresent } from './lang';
4
4
  import { normalize } from '../normalizer/normalizer';
5
5
  /**
6
6
  * Reverse current string and returns new reverse string
@@ -318,4 +318,57 @@ export function renderToBody(document, element, containerElementSelector) {
318
318
  document.body.appendChild(element);
319
319
  }
320
320
  }
321
+ export function formatString(input) {
322
+ var parameters = [];
323
+ for (var _i = 1; _i < arguments.length; _i++) {
324
+ parameters[_i - 1] = arguments[_i];
325
+ }
326
+ if (isBlank(input)) {
327
+ return '';
328
+ }
329
+ //formatting using object
330
+ if (parameters.length == 1 && isJsObject(parameters[0])) {
331
+ var parameter_1 = parameters[0];
332
+ var _loop_1 = function (prop) {
333
+ input = input === null || input === void 0 ? void 0 : input.replace(new RegExp('\\{' + prop + '\\}', 'g'), "".concat(parameter_1[prop]));
334
+ input = input === null || input === void 0 ? void 0 : input.replace(new RegExp('\\{@(?:\\(([2|4|8])\\))?' + prop + '\\}', 'g'), function (_) {
335
+ var args = [];
336
+ for (var _i = 1; _i < arguments.length; _i++) {
337
+ args[_i - 1] = arguments[_i];
338
+ }
339
+ if (isBlank(args[0])) {
340
+ return JSON.stringify(parameter_1[prop]);
341
+ }
342
+ return JSON.stringify(parameter_1[prop], null, +args[0]);
343
+ });
344
+ };
345
+ for (var prop in parameter_1) {
346
+ _loop_1(prop);
347
+ }
348
+ }
349
+ //formatting using array of values
350
+ else {
351
+ //no formatting parameters
352
+ if (!parameters.length) {
353
+ return input;
354
+ }
355
+ var _loop_2 = function (x) {
356
+ input = input === null || input === void 0 ? void 0 : input.replace(new RegExp('\\{' + x + '\\}', 'g'), "".concat(parameters[x]));
357
+ input = input === null || input === void 0 ? void 0 : input.replace(new RegExp('\\{@(?:\\(([2|4|8])\\))?' + x + '\\}', 'g'), function (_) {
358
+ var args = [];
359
+ for (var _i = 1; _i < arguments.length; _i++) {
360
+ args[_i - 1] = arguments[_i];
361
+ }
362
+ if (isBlank(args[0])) {
363
+ return JSON.stringify(parameters[x]);
364
+ }
365
+ return JSON.stringify(parameters[x], null, +args[0]);
366
+ });
367
+ };
368
+ for (var x = 0; x < parameters.length; x++) {
369
+ _loop_2(x);
370
+ }
371
+ }
372
+ return input;
373
+ }
321
374
  //# sourceMappingURL=common.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/utils/common.ts"],"names":[],"mappings":"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","sourcesContent":["import extendLib from 'extend';\r\n\r\nimport {isPresent} from './lang';\r\nimport {AsDictionary, Dictionary, StringDictionary} from '../types/dictionaries';\r\nimport {Enum} from '../types/enums';\r\nimport {ValueNamePair} from '../types/valueNamePair';\r\nimport {normalize} from '../normalizer/normalizer';\r\n\r\n/**\r\n * Reverse current string and returns new reverse string\r\n * @param str - String to be reversed\r\n * @returns string Reverse string\r\n */\r\nexport function reverseString(str: string): string\r\n{\r\n return str.split('').reverse().join('');\r\n}\r\n\r\n/**\r\n * Extends target object with source\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source - Object that will be used for extending\r\n */\r\nexport function extend<T, U>(deep: boolean, target: T, source: U): T & U;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V>(deep: boolean, target: T, source1: U, source2: V): T & U & V;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W>(deep: boolean, target: T, source1: U, source2: V, source3: W): T & U & V & W;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n * @param source4 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W, X>(deep: boolean, target: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source - Object that will be used for extending\r\n */\r\nexport function extend<T, U>(target: T, source: U): T & U;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V>(target: T, source1: U, source2: V): T & U & V;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W>(target: T, source1: U, source2: V, source3: W): T & U & V & W;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n * @param source4 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W, X>(target: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;\r\n/**\r\n * Extends one object with additional properties from other objects, supports deep extend\r\n * @param deepOrObject - Object to be extended or indication that deep copy should be performed\r\n * @param objectN - Objects that will be used for extending, if deep is used first here is target object\r\n * @returns Object Extended object with properties from other objects\r\n */\r\nexport function extend<TResult>(deepOrObject: boolean | Dictionary<any>, ...objectN: Dictionary<any>[]): TResult;\r\n/**\r\n * Extends one object with additional properties from other objects, supports deep extend\r\n * @param deepOrObject - Object to be extended or indication that deep copy should be performed\r\n * @param objectN - Objects that will be used for extending, if deep is used first here is target object\r\n * @returns Object Extended object with properties from other objects\r\n */\r\nexport function extend(deepOrObject: boolean | Dictionary<any>, ...objectN: Dictionary<any>[]): Dictionary\r\n{\r\n return extendLib.apply(null, [deepOrObject, ...objectN]);\r\n}\r\n\r\n/**\r\n * Generates random string consisting from lowercase letters\r\n * @param length - Length of generated string\r\n * @returns number Generated string\r\n */\r\nexport function generateId(length: number): string\r\n{\r\n let result = '';\r\n\r\n for(let x = 0; x < length; x++)\r\n {\r\n result += String.fromCharCode(Math.round(Math.random() * 25 + 97));\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Generates random string of specified length from possible characters\r\n * @param length - Length of generated string\r\n * @param possible - Possible characters used for generation of string\r\n */\r\nexport function generateRandomString(length: number, possible: string = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'): string\r\n{\r\n let text = '';\r\n\r\n for (let i = 0;i < length; i++)\r\n {\r\n text += possible.charAt(Math.floor(Math.random() * possible.length));\r\n }\r\n\r\n return text;\r\n}\r\n\r\n/**\r\n * Converts string in that way that first letter will be lowerCase\r\n * @param text - Text to be converted\r\n */\r\nexport function firstToLowerCase(text: string): string\r\n{\r\n return text.charAt(0).toLowerCase() + text.substr(1);\r\n}\r\n\r\n/**\r\n * Gets indication whether is child descendand of parent\r\n * @param parent - Parent to be tested\r\n * @param child - Child to be looked for\r\n */\r\nexport function isDescendant(parent: HTMLElement, child: HTMLElement): boolean\r\n{\r\n let node = child.parentNode;\r\n\r\n while (node != null)\r\n {\r\n if (node == parent)\r\n {\r\n return true;\r\n }\r\n\r\n node = node.parentNode;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Computes offset of element against document\r\n * @param element - Html element which offset is counted\r\n * @param doc - Html document to be used for extracting scroll offset\r\n */\r\nexport function offset(element: HTMLElement, doc?: Document)\r\n{\r\n doc = doc || document;\r\n\r\n const rect = element.getBoundingClientRect(),\r\n scrollLeft = window.pageXOffset || doc.documentElement.scrollLeft,\r\n scrollTop = window.pageYOffset || doc.documentElement.scrollTop;\r\n\r\n return {\r\n top: rect.top + scrollTop,\r\n left: rect.left + scrollLeft,\r\n bottom: rect.top + scrollTop + rect.height,\r\n right: rect.left + scrollLeft + rect.width\r\n };\r\n}\r\n\r\n/**\r\n * Converts html string into html DOM\r\n * @param html - Html string to be converted to DOM\r\n * @param doc - Optional html document to be used\r\n */\r\nexport function htmlToElement(html: string, doc?: Document): HTMLElement\r\n{\r\n let htmlDocument = document;\r\n\r\n if(isPresent(doc))\r\n {\r\n htmlDocument = doc;\r\n }\r\n\r\n const template = htmlDocument.createElement('template');\r\n html = html.trim();\r\n template.innerHTML = html;\r\n\r\n return template.content.firstChild as HTMLElement;\r\n}\r\n\r\n/**\r\n * Extract values from enum type\r\n * @param enumType - Enum type that will have extracted values\r\n */\r\nexport function getEnumValues<TEnum extends Enum>(enumType: TEnum): ValueNamePair[]\r\n{\r\n const result: ValueNamePair[] = [];\r\n\r\n Object.keys(enumType).forEach(key =>\r\n {\r\n if(isNaN(+key))\r\n {\r\n return;\r\n }\r\n\r\n result.push(\r\n {\r\n value: key,\r\n name: enumType[+key]\r\n });\r\n });\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Safely returns value from object property using string expression\r\n * @param object - Object which property value will be obtained\r\n * @param expression - Expression for obtaining value\r\n */\r\nexport function getValue<TValue = unknown>(object: Dictionary<any>, expression: string): TValue\r\nexport function getValue(object: Dictionary<any>, expression: string): unknown\r\n{\r\n return expression.split('.').reduce((o, i) =>\r\n {\r\n if(o)\r\n {\r\n return o[i];\r\n }\r\n\r\n return null;\r\n }, object);\r\n}\r\n\r\n/**\r\n * Sets value to objects property using string expression\r\n * @param object - Object which property value will be set\r\n * @param value - Value that will be set\r\n * @param expression - Expression for setting value\r\n */\r\nexport function setValue(object: Dictionary<any>, value: unknown, expression: string): void\r\n{\r\n const parts = expression.split('.');\r\n\r\n parts.forEach((part, index) =>\r\n {\r\n //last item value is assigned\r\n if(index == parts.length - 1)\r\n {\r\n if(isPresent(value))\r\n {\r\n object[part] = value;\r\n }\r\n\r\n return;\r\n }\r\n\r\n object = object[part] = object[part] ?? {};\r\n });\r\n}\r\n\r\n/**\r\n * Formats string using '%s', to print '%s' you have to use '%%s'\r\n * @param str - String containing substitution constants\r\n * @param args - Arguments that are used for replacement\r\n */\r\nexport function format(str: string, ...args: unknown[]): string\r\n{\r\n let i = 0;\r\n\r\n return str.replace(/((?!%).)%s/g, (_sub, substArgs) => `${substArgs[0]}${args[i++]}`).replace(/%%s/g, '%s');\r\n}\r\n\r\n/**\r\n * Performs flatMap over provided array\r\n * @param array - Array to be reduced using flatMap\r\n */\r\nexport function flatMapArray<TItem>(array: TItem[][]): TItem[]\r\n{\r\n return array.reduce((acc, x) => acc.concat(x), []);\r\n}\r\n\r\n/**\r\n * Serialize object to string that is usable as url query parameter\r\n * @param obj - Object to be serialized\r\n * @param replacer - Function that can be used for replacing provided values\r\n */\r\nexport function serializeToUrlQuery<TObj>(obj: TObj, replacer?: (this: any, key: string, value: any) => any): string\r\n{\r\n return btoa(encodeURIComponent(JSON.stringify(obj, replacer)));\r\n}\r\n\r\n/**\r\n * Deserialize value from url query string into object\r\n * @param queryParamValue - Query param string value\r\n * @param reviver - Function that can be used for correctly deserializing value\r\n */\r\nexport function deserializeFromUrlQuery<TObj>(queryParamValue: string, reviver?: (this: any, key: string, value: any) => any): TObj\r\n{\r\n return JSON.parse(decodeURIComponent(atob(queryParamValue)), reviver);\r\n}\r\n\r\n/**\r\n * Converts id to valid html id\r\n * @param id - Id that is going to be converted to valid html id\r\n * @param charMap - Character map used during normalization\r\n */\r\nexport function validHtmlId(id: string, charMap: StringDictionary = {}): string\r\n{\r\n id = id.toLowerCase()\r\n .replace(/[\\s]+/g, '-')\r\n .replace(/\\./g, '')\r\n .replace(/^(\\d)/g, 'x$1');\r\n\r\n id = normalize(id, charMap);\r\n\r\n return id;\r\n}\r\n\r\n/**\r\n * Checks whether is element overflown either horizontal, or vertical\r\n * @param element - Element to be tested for overflow\r\n */\r\nexport function isOverflown(element: HTMLElement): boolean\r\n{\r\n return element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;\r\n}\r\n\r\n/**\r\n * Normalizes string, removing accent\r\n * @param value - String to be normalized\r\n */\r\nexport function normalizeAccent(value: string): string\r\n{\r\n return value.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\r\n}\r\n\r\n/**\r\n * Converts instance of Class to equivalent Record type\r\n * @param instance - Instance which type to be converted\r\n * @typeparam TType - Type of instance\r\n */\r\nexport function asDictionary<TType>(instance: TType): AsDictionary<TType>\r\n{\r\n return instance as AsDictionary<TType>;\r\n}\r\n\r\n/**\r\n * Maps all iterable property values of object to \"this\" bounded\r\n * @param this - Object which will be filled with new values\r\n * @param value - Object holding values that will be used for filling\r\n * @param all - Indication whether map only existing properties or everything\r\n */\r\nexport function mapValuesToThis(this: Dictionary<any>, value: Dictionary<any>|undefined|null, all: boolean = false): void\r\n{\r\n if(!value)\r\n {\r\n return;\r\n }\r\n\r\n Object.keys(value).forEach(prop =>\r\n {\r\n if(value[prop] !== undefined && (all || (prop in this)))\r\n {\r\n this[prop] = value[prop];\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Briefly shows simple notification with simple text\r\n * @param show - Indication whether show notification\r\n * @param text - Text to be displayed, defaults to HMR finished text\r\n */\r\nexport function simpleNotification(show: boolean, text: string = 'HMR finished, app updated!'): void\r\n{\r\n if (show)\r\n {\r\n let div: HTMLDivElement|null = document.createElement('div');\r\n div.style.position = 'absolute';\r\n div.style.zIndex = '54345';\r\n div.style.background = 'rgb(255, 255, 255) none repeat scroll 0% 0%';\r\n div.style.padding = '8px';\r\n div.style.fontWeight = 'bold';\r\n div.style.borderRadius = 'bold';\r\n div.style.color = 'rgb(21, 57, 255)';\r\n div.style.left = '47%';\r\n div.style.top = '11px';\r\n div.style.boxShadow = '0px 0px 4px rgb(170, 170, 170)';\r\n div.style.transition = 'all 500ms';\r\n div.style.opacity = '0';\r\n\r\n div.innerText = text;\r\n\r\n document.body.append(div);\r\n\r\n setTimeout(() => div!.style.opacity = '1', 50);\r\n\r\n setTimeout(() =>\r\n {\r\n if(div)\r\n {\r\n div.style.opacity = '0';\r\n\r\n setTimeout(() =>\r\n {\r\n div!.remove();\r\n div = null;\r\n }, 500);\r\n }\r\n }, 2000);\r\n }\r\n}\r\n\r\n/**\r\n * Transforms any string to colour code\r\n * @param str - String to be changed to colour code\r\n */\r\nexport function stringToColour(str: string): string\r\n{\r\n let hash = 0;\r\n\r\n for (let i = 0; i < str.length; i++) \r\n {\r\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n \r\n let colour = '#';\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n const value = (hash >> (i * 8)) & 0xFF;\r\n colour += ('00' + value.toString(16)).substr(-2);\r\n }\r\n\r\n return colour;\r\n}\r\n\r\n/**\r\n * Renders element into body directly or into container element\r\n * @param document - Html document instance\r\n * @param element - Html element that will be rendered\r\n * @param containerElementSelector - Css selector for container element, if not specified renders into body, css selector must contain element name and optionally css classes\r\n */\r\nexport function renderToBody(document: Document, element: HTMLElement, containerElementSelector?: string|null): void\r\n{\r\n //render to specified target element\r\n if(containerElementSelector)\r\n {\r\n let containerElement = document.querySelector(`body ${containerElementSelector}`);\r\n\r\n //render to specified target element\r\n if(!containerElement)\r\n {\r\n const [name, ...css] = containerElementSelector.split('.');\r\n\r\n containerElement = document.createElement(name);\r\n\r\n if(!name)\r\n {\r\n throw new Error('renderToBody: missing name of element');\r\n }\r\n\r\n if(css?.length)\r\n {\r\n for(const cssClass of css)\r\n {\r\n containerElement.classList.add(cssClass);\r\n }\r\n }\r\n\r\n document.body.appendChild(containerElement);\r\n }\r\n\r\n containerElement.appendChild(element);\r\n }\r\n //render directly to body\r\n else\r\n {\r\n document.body.appendChild(element);\r\n }\r\n}"]}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/utils/common.ts"],"names":[],"mappings":"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","sourcesContent":["import extendLib from 'extend';\r\n\r\nimport {isBlank, isJsObject, isPresent} from './lang';\r\nimport {AsDictionary, Dictionary, StringDictionary} from '../types/dictionaries';\r\nimport {Enum} from '../types/enums';\r\nimport {ValueNamePair} from '../types/valueNamePair';\r\nimport {normalize} from '../normalizer/normalizer';\r\n\r\n/**\r\n * Reverse current string and returns new reverse string\r\n * @param str - String to be reversed\r\n * @returns string Reverse string\r\n */\r\nexport function reverseString(str: string): string\r\n{\r\n return str.split('').reverse().join('');\r\n}\r\n\r\n/**\r\n * Extends target object with source\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source - Object that will be used for extending\r\n */\r\nexport function extend<T, U>(deep: boolean, target: T, source: U): T & U;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V>(deep: boolean, target: T, source1: U, source2: V): T & U & V;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W>(deep: boolean, target: T, source1: U, source2: V, source3: W): T & U & V & W;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n * @param source4 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W, X>(deep: boolean, target: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source - Object that will be used for extending\r\n */\r\nexport function extend<T, U>(target: T, source: U): T & U;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V>(target: T, source1: U, source2: V): T & U & V;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W>(target: T, source1: U, source2: V, source3: W): T & U & V & W;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n * @param source4 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W, X>(target: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;\r\n/**\r\n * Extends one object with additional properties from other objects, supports deep extend\r\n * @param deepOrObject - Object to be extended or indication that deep copy should be performed\r\n * @param objectN - Objects that will be used for extending, if deep is used first here is target object\r\n * @returns Object Extended object with properties from other objects\r\n */\r\nexport function extend<TResult>(deepOrObject: boolean | Dictionary<any>, ...objectN: Dictionary<any>[]): TResult;\r\n/**\r\n * Extends one object with additional properties from other objects, supports deep extend\r\n * @param deepOrObject - Object to be extended or indication that deep copy should be performed\r\n * @param objectN - Objects that will be used for extending, if deep is used first here is target object\r\n * @returns Object Extended object with properties from other objects\r\n */\r\nexport function extend(deepOrObject: boolean | Dictionary<any>, ...objectN: Dictionary<any>[]): Dictionary\r\n{\r\n return extendLib.apply(null, [deepOrObject, ...objectN]);\r\n}\r\n\r\n/**\r\n * Generates random string consisting from lowercase letters\r\n * @param length - Length of generated string\r\n * @returns number Generated string\r\n */\r\nexport function generateId(length: number): string\r\n{\r\n let result = '';\r\n\r\n for(let x = 0; x < length; x++)\r\n {\r\n result += String.fromCharCode(Math.round(Math.random() * 25 + 97));\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Generates random string of specified length from possible characters\r\n * @param length - Length of generated string\r\n * @param possible - Possible characters used for generation of string\r\n */\r\nexport function generateRandomString(length: number, possible: string = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'): string\r\n{\r\n let text = '';\r\n\r\n for (let i = 0;i < length; i++)\r\n {\r\n text += possible.charAt(Math.floor(Math.random() * possible.length));\r\n }\r\n\r\n return text;\r\n}\r\n\r\n/**\r\n * Converts string in that way that first letter will be lowerCase\r\n * @param text - Text to be converted\r\n */\r\nexport function firstToLowerCase(text: string): string\r\n{\r\n return text.charAt(0).toLowerCase() + text.substr(1);\r\n}\r\n\r\n/**\r\n * Gets indication whether is child descendand of parent\r\n * @param parent - Parent to be tested\r\n * @param child - Child to be looked for\r\n */\r\nexport function isDescendant(parent: HTMLElement, child: HTMLElement): boolean\r\n{\r\n let node = child.parentNode;\r\n\r\n while (node != null)\r\n {\r\n if (node == parent)\r\n {\r\n return true;\r\n }\r\n\r\n node = node.parentNode;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Computes offset of element against document\r\n * @param element - Html element which offset is counted\r\n * @param doc - Html document to be used for extracting scroll offset\r\n */\r\nexport function offset(element: HTMLElement, doc?: Document)\r\n{\r\n doc = doc || document;\r\n\r\n const rect = element.getBoundingClientRect(),\r\n scrollLeft = window.pageXOffset || doc.documentElement.scrollLeft,\r\n scrollTop = window.pageYOffset || doc.documentElement.scrollTop;\r\n\r\n return {\r\n top: rect.top + scrollTop,\r\n left: rect.left + scrollLeft,\r\n bottom: rect.top + scrollTop + rect.height,\r\n right: rect.left + scrollLeft + rect.width\r\n };\r\n}\r\n\r\n/**\r\n * Converts html string into html DOM\r\n * @param html - Html string to be converted to DOM\r\n * @param doc - Optional html document to be used\r\n */\r\nexport function htmlToElement(html: string, doc?: Document): HTMLElement\r\n{\r\n let htmlDocument = document;\r\n\r\n if(isPresent(doc))\r\n {\r\n htmlDocument = doc;\r\n }\r\n\r\n const template = htmlDocument.createElement('template');\r\n html = html.trim();\r\n template.innerHTML = html;\r\n\r\n return template.content.firstChild as HTMLElement;\r\n}\r\n\r\n/**\r\n * Extract values from enum type\r\n * @param enumType - Enum type that will have extracted values\r\n */\r\nexport function getEnumValues<TEnum extends Enum>(enumType: TEnum): ValueNamePair[]\r\n{\r\n const result: ValueNamePair[] = [];\r\n\r\n Object.keys(enumType).forEach(key =>\r\n {\r\n if(isNaN(+key))\r\n {\r\n return;\r\n }\r\n\r\n result.push(\r\n {\r\n value: key,\r\n name: enumType[+key]\r\n });\r\n });\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Safely returns value from object property using string expression\r\n * @param object - Object which property value will be obtained\r\n * @param expression - Expression for obtaining value\r\n */\r\nexport function getValue<TValue = unknown>(object: Dictionary<any>, expression: string): TValue\r\nexport function getValue(object: Dictionary<any>, expression: string): unknown\r\n{\r\n return expression.split('.').reduce((o, i) =>\r\n {\r\n if(o)\r\n {\r\n return o[i];\r\n }\r\n\r\n return null;\r\n }, object);\r\n}\r\n\r\n/**\r\n * Sets value to objects property using string expression\r\n * @param object - Object which property value will be set\r\n * @param value - Value that will be set\r\n * @param expression - Expression for setting value\r\n */\r\nexport function setValue(object: Dictionary<any>, value: unknown, expression: string): void\r\n{\r\n const parts = expression.split('.');\r\n\r\n parts.forEach((part, index) =>\r\n {\r\n //last item value is assigned\r\n if(index == parts.length - 1)\r\n {\r\n if(isPresent(value))\r\n {\r\n object[part] = value;\r\n }\r\n\r\n return;\r\n }\r\n\r\n object = object[part] = object[part] ?? {};\r\n });\r\n}\r\n\r\n/**\r\n * Formats string using '%s', to print '%s' you have to use '%%s'\r\n * @param str - String containing substitution constants\r\n * @param args - Arguments that are used for replacement\r\n */\r\nexport function format(str: string, ...args: unknown[]): string\r\n{\r\n let i = 0;\r\n\r\n return str.replace(/((?!%).)%s/g, (_sub, substArgs) => `${substArgs[0]}${args[i++]}`).replace(/%%s/g, '%s');\r\n}\r\n\r\n/**\r\n * Performs flatMap over provided array\r\n * @param array - Array to be reduced using flatMap\r\n */\r\nexport function flatMapArray<TItem>(array: TItem[][]): TItem[]\r\n{\r\n return array.reduce((acc, x) => acc.concat(x), []);\r\n}\r\n\r\n/**\r\n * Serialize object to string that is usable as url query parameter\r\n * @param obj - Object to be serialized\r\n * @param replacer - Function that can be used for replacing provided values\r\n */\r\nexport function serializeToUrlQuery<TObj>(obj: TObj, replacer?: (this: any, key: string, value: any) => any): string\r\n{\r\n return btoa(encodeURIComponent(JSON.stringify(obj, replacer)));\r\n}\r\n\r\n/**\r\n * Deserialize value from url query string into object\r\n * @param queryParamValue - Query param string value\r\n * @param reviver - Function that can be used for correctly deserializing value\r\n */\r\nexport function deserializeFromUrlQuery<TObj>(queryParamValue: string, reviver?: (this: any, key: string, value: any) => any): TObj\r\n{\r\n return JSON.parse(decodeURIComponent(atob(queryParamValue)), reviver);\r\n}\r\n\r\n/**\r\n * Converts id to valid html id\r\n * @param id - Id that is going to be converted to valid html id\r\n * @param charMap - Character map used during normalization\r\n */\r\nexport function validHtmlId(id: string, charMap: StringDictionary = {}): string\r\n{\r\n id = id.toLowerCase()\r\n .replace(/[\\s]+/g, '-')\r\n .replace(/\\./g, '')\r\n .replace(/^(\\d)/g, 'x$1');\r\n\r\n id = normalize(id, charMap);\r\n\r\n return id;\r\n}\r\n\r\n/**\r\n * Checks whether is element overflown either horizontal, or vertical\r\n * @param element - Element to be tested for overflow\r\n */\r\nexport function isOverflown(element: HTMLElement): boolean\r\n{\r\n return element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;\r\n}\r\n\r\n/**\r\n * Normalizes string, removing accent\r\n * @param value - String to be normalized\r\n */\r\nexport function normalizeAccent(value: string): string\r\n{\r\n return value.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\r\n}\r\n\r\n/**\r\n * Converts instance of Class to equivalent Record type\r\n * @param instance - Instance which type to be converted\r\n * @typeparam TType - Type of instance\r\n */\r\nexport function asDictionary<TType>(instance: TType): AsDictionary<TType>\r\n{\r\n return instance as AsDictionary<TType>;\r\n}\r\n\r\n/**\r\n * Maps all iterable property values of object to \"this\" bounded\r\n * @param this - Object which will be filled with new values\r\n * @param value - Object holding values that will be used for filling\r\n * @param all - Indication whether map only existing properties or everything\r\n */\r\nexport function mapValuesToThis(this: Dictionary<any>, value: Dictionary<any>|undefined|null, all: boolean = false): void\r\n{\r\n if(!value)\r\n {\r\n return;\r\n }\r\n\r\n Object.keys(value).forEach(prop =>\r\n {\r\n if(value[prop] !== undefined && (all || (prop in this)))\r\n {\r\n this[prop] = value[prop];\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Briefly shows simple notification with simple text\r\n * @param show - Indication whether show notification\r\n * @param text - Text to be displayed, defaults to HMR finished text\r\n */\r\nexport function simpleNotification(show: boolean, text: string = 'HMR finished, app updated!'): void\r\n{\r\n if (show)\r\n {\r\n let div: HTMLDivElement|null = document.createElement('div');\r\n div.style.position = 'absolute';\r\n div.style.zIndex = '54345';\r\n div.style.background = 'rgb(255, 255, 255) none repeat scroll 0% 0%';\r\n div.style.padding = '8px';\r\n div.style.fontWeight = 'bold';\r\n div.style.borderRadius = 'bold';\r\n div.style.color = 'rgb(21, 57, 255)';\r\n div.style.left = '47%';\r\n div.style.top = '11px';\r\n div.style.boxShadow = '0px 0px 4px rgb(170, 170, 170)';\r\n div.style.transition = 'all 500ms';\r\n div.style.opacity = '0';\r\n\r\n div.innerText = text;\r\n\r\n document.body.append(div);\r\n\r\n setTimeout(() => div!.style.opacity = '1', 50);\r\n\r\n setTimeout(() =>\r\n {\r\n if(div)\r\n {\r\n div.style.opacity = '0';\r\n\r\n setTimeout(() =>\r\n {\r\n div!.remove();\r\n div = null;\r\n }, 500);\r\n }\r\n }, 2000);\r\n }\r\n}\r\n\r\n/**\r\n * Transforms any string to colour code\r\n * @param str - String to be changed to colour code\r\n */\r\nexport function stringToColour(str: string): string\r\n{\r\n let hash = 0;\r\n\r\n for (let i = 0; i < str.length; i++) \r\n {\r\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n \r\n let colour = '#';\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n const value = (hash >> (i * 8)) & 0xFF;\r\n colour += ('00' + value.toString(16)).substr(-2);\r\n }\r\n\r\n return colour;\r\n}\r\n\r\n/**\r\n * Renders element into body directly or into container element\r\n * @param document - Html document instance\r\n * @param element - Html element that will be rendered\r\n * @param containerElementSelector - Css selector for container element, if not specified renders into body, css selector must contain element name and optionally css classes\r\n */\r\nexport function renderToBody(document: Document, element: HTMLElement, containerElementSelector?: string|null): void\r\n{\r\n //render to specified target element\r\n if(containerElementSelector)\r\n {\r\n let containerElement = document.querySelector(`body ${containerElementSelector}`);\r\n\r\n //render to specified target element\r\n if(!containerElement)\r\n {\r\n const [name, ...css] = containerElementSelector.split('.');\r\n\r\n containerElement = document.createElement(name);\r\n\r\n if(!name)\r\n {\r\n throw new Error('renderToBody: missing name of element');\r\n }\r\n\r\n if(css?.length)\r\n {\r\n for(const cssClass of css)\r\n {\r\n containerElement.classList.add(cssClass);\r\n }\r\n }\r\n\r\n document.body.appendChild(containerElement);\r\n }\r\n\r\n containerElement.appendChild(element);\r\n }\r\n //render directly to body\r\n else\r\n {\r\n document.body.appendChild(element);\r\n }\r\n}\r\n\r\n/**\r\n * Formats input string using no parameters, returns original input\r\n * @param input - Input that will be formatted\r\n */\r\nexport function formatString(input: string|undefined|null): string\r\n/**\r\n * Formats input string using object holding formatting parameters\r\n * @param input - Input that will be formatted\r\n * @param parameter - Parameter as object which properties will be used for formatting\r\n * \r\n * ```\r\n * formatString('test {val}, {@test}, {@(2)test}', {val: 3, test: {bool: true, num: 10}});\r\n * ```\r\n * \r\n * displays `{val}` as direct stringified value of '`val`' property \r\n * displays `{@test}` as JSON strinfigied value of '`test`' property \r\n * displays `{@(2)test}` as JSON stringified value of '`test`' property with 2 spaces indentation (other supported spaces are 4 and 8)\r\n */\r\nexport function formatString(input: string|undefined|null, parameter: Record<string, unknown>): string\r\n/**\r\n * Formats input string using array holding formatting parameters\r\n * @param input - Input that will be formatted\r\n * @param parameter - Parameter as array which items will be used for formatting\r\n * \r\n * ```\r\n * formatString('test {0}, {@1}, {@(2)1}', [3, {bool: true, num: 10}])\r\n * ```\r\n * \r\n * displays `{0}` as direct stringified value of '`0`' index item \r\n * displays `{@1}` as JSON strinfigied value of '`0`' index item \r\n * displays `{@(2)1}` as JSON stringified value of '`0`' index item with 2 spaces indentation (other supported spaces are 4 and 8)\r\n */\r\nexport function formatString(input: string|undefined|null, ...parameters: unknown[]): string\r\nexport function formatString(input: string|undefined|null, ...parameters: unknown[]|[Record<string, unknown>]): string\r\n{\r\n if(isBlank(input))\r\n {\r\n return '';\r\n }\r\n\r\n //formatting using object\r\n if(parameters.length == 1 && isJsObject(parameters[0]))\r\n {\r\n const parameter = parameters[0] as Record<string, unknown>;\r\n\r\n for(const prop in parameter)\r\n {\r\n input = input?.replace(new RegExp('\\\\{' + prop + '\\\\}', 'g'), `${parameter[prop]}`);\r\n input = input?.replace(new RegExp('\\\\{@(?:\\\\(([2|4|8])\\\\))?' + prop + '\\\\}', 'g'), (_, ...args) =>\r\n {\r\n if(isBlank(args[0]))\r\n {\r\n return JSON.stringify(parameter[prop]);\r\n }\r\n \r\n return JSON.stringify(parameter[prop], null, +args[0]);\r\n });\r\n }\r\n }\r\n //formatting using array of values\r\n else\r\n {\r\n //no formatting parameters\r\n if(!parameters.length)\r\n {\r\n return input;\r\n }\r\n\r\n for(let x = 0; x < parameters.length; x++)\r\n {\r\n input = input?.replace(new RegExp('\\\\{' + x + '\\\\}', 'g'), `${parameters[x]}`);\r\n input = input?.replace(new RegExp('\\\\{@(?:\\\\(([2|4|8])\\\\))?' + x + '\\\\}', 'g'), (_, ...args) =>\r\n {\r\n if(isBlank(args[0]))\r\n {\r\n return JSON.stringify(parameters[x]);\r\n }\r\n \r\n return JSON.stringify(parameters[x], null, +args[0]);\r\n });\r\n }\r\n }\r\n\r\n return input;\r\n}"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.renderToBody = exports.stringToColour = exports.simpleNotification = exports.mapValuesToThis = exports.asDictionary = exports.normalizeAccent = exports.isOverflown = exports.validHtmlId = exports.deserializeFromUrlQuery = exports.serializeToUrlQuery = exports.flatMapArray = exports.format = exports.setValue = exports.getValue = exports.getEnumValues = exports.htmlToElement = exports.offset = exports.isDescendant = exports.firstToLowerCase = exports.generateRandomString = exports.generateId = exports.extend = exports.reverseString = void 0;
3
+ exports.formatString = exports.renderToBody = exports.stringToColour = exports.simpleNotification = exports.mapValuesToThis = exports.asDictionary = exports.normalizeAccent = exports.isOverflown = exports.validHtmlId = exports.deserializeFromUrlQuery = exports.serializeToUrlQuery = exports.flatMapArray = exports.format = exports.setValue = exports.getValue = exports.getEnumValues = exports.htmlToElement = exports.offset = exports.isDescendant = exports.firstToLowerCase = exports.generateRandomString = exports.generateId = exports.extend = exports.reverseString = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const extend_1 = tslib_1.__importDefault(require("extend"));
6
6
  const lang_1 = require("./lang.cjs");
@@ -330,4 +330,40 @@ function renderToBody(document, element, containerElementSelector) {
330
330
  }
331
331
  }
332
332
  exports.renderToBody = renderToBody;
333
+ function formatString(input, ...parameters) {
334
+ if ((0, lang_1.isBlank)(input)) {
335
+ return '';
336
+ }
337
+ //formatting using object
338
+ if (parameters.length == 1 && (0, lang_1.isJsObject)(parameters[0])) {
339
+ const parameter = parameters[0];
340
+ for (const prop in parameter) {
341
+ input = input === null || input === void 0 ? void 0 : input.replace(new RegExp('\\{' + prop + '\\}', 'g'), `${parameter[prop]}`);
342
+ input = input === null || input === void 0 ? void 0 : input.replace(new RegExp('\\{@(?:\\(([2|4|8])\\))?' + prop + '\\}', 'g'), (_, ...args) => {
343
+ if ((0, lang_1.isBlank)(args[0])) {
344
+ return JSON.stringify(parameter[prop]);
345
+ }
346
+ return JSON.stringify(parameter[prop], null, +args[0]);
347
+ });
348
+ }
349
+ }
350
+ //formatting using array of values
351
+ else {
352
+ //no formatting parameters
353
+ if (!parameters.length) {
354
+ return input;
355
+ }
356
+ for (let x = 0; x < parameters.length; x++) {
357
+ input = input === null || input === void 0 ? void 0 : input.replace(new RegExp('\\{' + x + '\\}', 'g'), `${parameters[x]}`);
358
+ input = input === null || input === void 0 ? void 0 : input.replace(new RegExp('\\{@(?:\\(([2|4|8])\\))?' + x + '\\}', 'g'), (_, ...args) => {
359
+ if ((0, lang_1.isBlank)(args[0])) {
360
+ return JSON.stringify(parameters[x]);
361
+ }
362
+ return JSON.stringify(parameters[x], null, +args[0]);
363
+ });
364
+ }
365
+ }
366
+ return input;
367
+ }
368
+ exports.formatString = formatString;
333
369
  //# sourceMappingURL=common.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.cjs","sourceRoot":"","sources":["../../../src/utils/common.ts"],"names":[],"mappings":";;;;AAAA,4DAA+B;AAE/B,iCAAiC;AAIjC,yDAAmD;AAEnD;;;;GAIG;AACH,SAAgB,aAAa,CAAC,GAAW;IAErC,OAAO,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC5C,CAAC;AAHD,sCAGC;AAyED;;;;;GAKG;AACH,SAAgB,MAAM,CAAC,YAAuC,EAAE,GAAG,OAA0B;IAEzF,OAAO,gBAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,YAAY,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;AAC7D,CAAC;AAHD,wBAGC;AAED;;;;GAIG;AACH,SAAgB,UAAU,CAAC,MAAc;IAErC,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAC9B;QACI,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;KACtE;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAVD,gCAUC;AAED;;;;GAIG;AACH,SAAgB,oBAAoB,CAAC,MAAc,EAAE,WAAmB,gEAAgE;IAEpI,IAAI,IAAI,GAAG,EAAE,CAAC;IAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAC,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAC9B;QACI,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;KACxE;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAVD,oDAUC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,IAAY;IAEzC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAHD,4CAGC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAAC,MAAmB,EAAE,KAAkB;IAEhE,IAAI,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC;IAE5B,OAAO,IAAI,IAAI,IAAI,EACnB;QACI,IAAI,IAAI,IAAI,MAAM,EAClB;YACI,OAAO,IAAI,CAAC;SACf;QAED,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;KAC1B;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAfD,oCAeC;AAED;;;;GAIG;AACH,SAAgB,MAAM,CAAC,OAAoB,EAAE,GAAc;IAEvD,GAAG,GAAG,GAAG,IAAI,QAAQ,CAAC;IAEtB,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,EACxC,UAAU,GAAG,MAAM,CAAC,WAAW,IAAI,GAAG,CAAC,eAAe,CAAC,UAAU,EACjE,SAAS,GAAG,MAAM,CAAC,WAAW,IAAI,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC;IAEpE,OAAO;QACH,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,SAAS;QACzB,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,UAAU;QAC5B,MAAM,EAAE,IAAI,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,MAAM;QAC1C,KAAK,EAAE,IAAI,CAAC,IAAI,GAAG,UAAU,GAAG,IAAI,CAAC,KAAK;KAC7C,CAAC;AACN,CAAC;AAdD,wBAcC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAAC,IAAY,EAAE,GAAc;IAEtD,IAAI,YAAY,GAAG,QAAQ,CAAC;IAE5B,IAAG,IAAA,gBAAS,EAAC,GAAG,CAAC,EACjB;QACI,YAAY,GAAG,GAAG,CAAC;KACtB;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACnB,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;IAE1B,OAAO,QAAQ,CAAC,OAAO,CAAC,UAAyB,CAAC;AACtD,CAAC;AAdD,sCAcC;AAED;;;GAGG;AACH,SAAgB,aAAa,CAAqB,QAAe;IAE7D,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAEhC,IAAG,KAAK,CAAC,CAAC,GAAG,CAAC,EACd;YACI,OAAO;SACV;QAED,MAAM,CAAC,IAAI,CACX;YACI,KAAK,EAAE,GAAG;YACV,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC;SACvB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAClB,CAAC;AAnBD,sCAmBC;AAQD,SAAgB,QAAQ,CAAC,MAAuB,EAAE,UAAkB;IAEhE,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAEzC,IAAG,CAAC,EACJ;YACI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;SACf;QAED,OAAO,IAAI,CAAC;IAChB,CAAC,EAAE,MAAM,CAAC,CAAC;AACf,CAAC;AAXD,4BAWC;AAED;;;;;GAKG;AACH,SAAgB,QAAQ,CAAC,MAAuB,EAAE,KAAc,EAAE,UAAkB;IAEhF,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEpC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;;QAE1B,6BAA6B;QAC7B,IAAG,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAC5B;YACI,IAAG,IAAA,gBAAS,EAAC,KAAK,CAAC,EACnB;gBACI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;aACxB;YAED,OAAO;SACV;QAED,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,MAAA,MAAM,CAAC,IAAI,CAAC,mCAAI,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;AACP,CAAC;AAnBD,4BAmBC;AAED;;;;GAIG;AACH,SAAgB,MAAM,CAAC,GAAW,EAAE,GAAG,IAAe;IAElD,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAChH,CAAC;AALD,wBAKC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAAQ,KAAgB;IAEhD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACvD,CAAC;AAHD,oCAGC;AAED;;;;GAIG;AACH,SAAgB,mBAAmB,CAAO,GAAS,EAAE,QAAsD;IAEvG,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAHD,kDAGC;AAED;;;;GAIG;AACH,SAAgB,uBAAuB,CAAO,eAAuB,EAAE,OAAqD;IAExH,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC;AAHD,0DAGC;AAED;;;;GAIG;AACH,SAAgB,WAAW,CAAC,EAAU,EAAE,UAA4B,EAAE;IAElE,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE;SAChB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;SAClB,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAE9B,EAAE,GAAG,IAAA,sBAAS,EAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAE5B,OAAO,EAAE,CAAC;AACd,CAAC;AAVD,kCAUC;AAED;;;GAGG;AACH,SAAgB,WAAW,CAAC,OAAoB;IAE5C,OAAO,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;AACpG,CAAC;AAHD,kCAGC;AAED;;;GAGG;AACH,SAAgB,eAAe,CAAC,KAAa;IAEzC,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;AAClE,CAAC;AAHD,0CAGC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAAQ,QAAe;IAE/C,OAAO,QAA+B,CAAC;AAC3C,CAAC;AAHD,oCAGC;AAED;;;;;GAKG;AACH,SAAgB,eAAe,CAAwB,KAAqC,EAAE,MAAe,KAAK;IAE9G,IAAG,CAAC,KAAK,EACT;QACI,OAAO;KACV;IAED,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAE9B,IAAG,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,EACvD;YACI,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;SAC5B;IACL,CAAC,CAAC,CAAC;AACP,CAAC;AAdD,0CAcC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,IAAa,EAAE,OAAe,4BAA4B;IAEzF,IAAI,IAAI,EACR;QACI,IAAI,GAAG,GAAwB,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7D,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QAChC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;QAC3B,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,6CAA6C,CAAC;QACrE,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;QAC1B,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;QAC9B,GAAG,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;QAChC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,kBAAkB,CAAC;QACrC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;QACvB,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC;QACvB,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,gCAAgC,CAAC;QACvD,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,WAAW,CAAC;QACnC,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;QAExB,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;QAErB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE1B,UAAU,CAAC,GAAG,EAAE,CAAC,GAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;QAE/C,UAAU,CAAC,GAAG,EAAE;YAEZ,IAAG,GAAG,EACN;gBACI,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;gBAExB,UAAU,CAAC,GAAG,EAAE;oBAEZ,GAAI,CAAC,MAAM,EAAE,CAAC;oBACd,GAAG,GAAG,IAAI,CAAC;gBACf,CAAC,EAAE,GAAG,CAAC,CAAC;aACX;QACL,CAAC,EAAE,IAAI,CAAC,CAAC;KACZ;AACL,CAAC;AAtCD,gDAsCC;AAED;;;GAGG;AACH,SAAgB,cAAc,CAAC,GAAW;IAEtC,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACnC;QACI,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;KACnD;IAED,IAAI,MAAM,GAAG,GAAG,CAAC;IAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC1B;QACI,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACvC,MAAM,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;KACpD;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAlBD,wCAkBC;AAED;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,QAAkB,EAAE,OAAoB,EAAE,wBAAsC;IAEzG,oCAAoC;IACpC,IAAG,wBAAwB,EAC3B;QACI,IAAI,gBAAgB,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,wBAAwB,EAAE,CAAC,CAAC;QAElF,oCAAoC;QACpC,IAAG,CAAC,gBAAgB,EACpB;YACI,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,wBAAwB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE3D,gBAAgB,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAEhD,IAAG,CAAC,IAAI,EACR;gBACI,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;aAC5D;YAED,IAAG,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,MAAM,EACd;gBACI,KAAI,MAAM,QAAQ,IAAI,GAAG,EACzB;oBACI,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;iBAC5C;aACJ;YAED,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;SAC/C;QAED,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;KACzC;IACD,yBAAyB;SAEzB;QACI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;KACtC;AACL,CAAC;AArCD,oCAqCC","sourcesContent":["import extendLib from 'extend';\r\n\r\nimport {isPresent} from './lang';\r\nimport {AsDictionary, Dictionary, StringDictionary} from '../types/dictionaries';\r\nimport {Enum} from '../types/enums';\r\nimport {ValueNamePair} from '../types/valueNamePair';\r\nimport {normalize} from '../normalizer/normalizer';\r\n\r\n/**\r\n * Reverse current string and returns new reverse string\r\n * @param str - String to be reversed\r\n * @returns string Reverse string\r\n */\r\nexport function reverseString(str: string): string\r\n{\r\n return str.split('').reverse().join('');\r\n}\r\n\r\n/**\r\n * Extends target object with source\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source - Object that will be used for extending\r\n */\r\nexport function extend<T, U>(deep: boolean, target: T, source: U): T & U;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V>(deep: boolean, target: T, source1: U, source2: V): T & U & V;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W>(deep: boolean, target: T, source1: U, source2: V, source3: W): T & U & V & W;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n * @param source4 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W, X>(deep: boolean, target: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source - Object that will be used for extending\r\n */\r\nexport function extend<T, U>(target: T, source: U): T & U;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V>(target: T, source1: U, source2: V): T & U & V;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W>(target: T, source1: U, source2: V, source3: W): T & U & V & W;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n * @param source4 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W, X>(target: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;\r\n/**\r\n * Extends one object with additional properties from other objects, supports deep extend\r\n * @param deepOrObject - Object to be extended or indication that deep copy should be performed\r\n * @param objectN - Objects that will be used for extending, if deep is used first here is target object\r\n * @returns Object Extended object with properties from other objects\r\n */\r\nexport function extend<TResult>(deepOrObject: boolean | Dictionary<any>, ...objectN: Dictionary<any>[]): TResult;\r\n/**\r\n * Extends one object with additional properties from other objects, supports deep extend\r\n * @param deepOrObject - Object to be extended or indication that deep copy should be performed\r\n * @param objectN - Objects that will be used for extending, if deep is used first here is target object\r\n * @returns Object Extended object with properties from other objects\r\n */\r\nexport function extend(deepOrObject: boolean | Dictionary<any>, ...objectN: Dictionary<any>[]): Dictionary\r\n{\r\n return extendLib.apply(null, [deepOrObject, ...objectN]);\r\n}\r\n\r\n/**\r\n * Generates random string consisting from lowercase letters\r\n * @param length - Length of generated string\r\n * @returns number Generated string\r\n */\r\nexport function generateId(length: number): string\r\n{\r\n let result = '';\r\n\r\n for(let x = 0; x < length; x++)\r\n {\r\n result += String.fromCharCode(Math.round(Math.random() * 25 + 97));\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Generates random string of specified length from possible characters\r\n * @param length - Length of generated string\r\n * @param possible - Possible characters used for generation of string\r\n */\r\nexport function generateRandomString(length: number, possible: string = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'): string\r\n{\r\n let text = '';\r\n\r\n for (let i = 0;i < length; i++)\r\n {\r\n text += possible.charAt(Math.floor(Math.random() * possible.length));\r\n }\r\n\r\n return text;\r\n}\r\n\r\n/**\r\n * Converts string in that way that first letter will be lowerCase\r\n * @param text - Text to be converted\r\n */\r\nexport function firstToLowerCase(text: string): string\r\n{\r\n return text.charAt(0).toLowerCase() + text.substr(1);\r\n}\r\n\r\n/**\r\n * Gets indication whether is child descendand of parent\r\n * @param parent - Parent to be tested\r\n * @param child - Child to be looked for\r\n */\r\nexport function isDescendant(parent: HTMLElement, child: HTMLElement): boolean\r\n{\r\n let node = child.parentNode;\r\n\r\n while (node != null)\r\n {\r\n if (node == parent)\r\n {\r\n return true;\r\n }\r\n\r\n node = node.parentNode;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Computes offset of element against document\r\n * @param element - Html element which offset is counted\r\n * @param doc - Html document to be used for extracting scroll offset\r\n */\r\nexport function offset(element: HTMLElement, doc?: Document)\r\n{\r\n doc = doc || document;\r\n\r\n const rect = element.getBoundingClientRect(),\r\n scrollLeft = window.pageXOffset || doc.documentElement.scrollLeft,\r\n scrollTop = window.pageYOffset || doc.documentElement.scrollTop;\r\n\r\n return {\r\n top: rect.top + scrollTop,\r\n left: rect.left + scrollLeft,\r\n bottom: rect.top + scrollTop + rect.height,\r\n right: rect.left + scrollLeft + rect.width\r\n };\r\n}\r\n\r\n/**\r\n * Converts html string into html DOM\r\n * @param html - Html string to be converted to DOM\r\n * @param doc - Optional html document to be used\r\n */\r\nexport function htmlToElement(html: string, doc?: Document): HTMLElement\r\n{\r\n let htmlDocument = document;\r\n\r\n if(isPresent(doc))\r\n {\r\n htmlDocument = doc;\r\n }\r\n\r\n const template = htmlDocument.createElement('template');\r\n html = html.trim();\r\n template.innerHTML = html;\r\n\r\n return template.content.firstChild as HTMLElement;\r\n}\r\n\r\n/**\r\n * Extract values from enum type\r\n * @param enumType - Enum type that will have extracted values\r\n */\r\nexport function getEnumValues<TEnum extends Enum>(enumType: TEnum): ValueNamePair[]\r\n{\r\n const result: ValueNamePair[] = [];\r\n\r\n Object.keys(enumType).forEach(key =>\r\n {\r\n if(isNaN(+key))\r\n {\r\n return;\r\n }\r\n\r\n result.push(\r\n {\r\n value: key,\r\n name: enumType[+key]\r\n });\r\n });\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Safely returns value from object property using string expression\r\n * @param object - Object which property value will be obtained\r\n * @param expression - Expression for obtaining value\r\n */\r\nexport function getValue<TValue = unknown>(object: Dictionary<any>, expression: string): TValue\r\nexport function getValue(object: Dictionary<any>, expression: string): unknown\r\n{\r\n return expression.split('.').reduce((o, i) =>\r\n {\r\n if(o)\r\n {\r\n return o[i];\r\n }\r\n\r\n return null;\r\n }, object);\r\n}\r\n\r\n/**\r\n * Sets value to objects property using string expression\r\n * @param object - Object which property value will be set\r\n * @param value - Value that will be set\r\n * @param expression - Expression for setting value\r\n */\r\nexport function setValue(object: Dictionary<any>, value: unknown, expression: string): void\r\n{\r\n const parts = expression.split('.');\r\n\r\n parts.forEach((part, index) =>\r\n {\r\n //last item value is assigned\r\n if(index == parts.length - 1)\r\n {\r\n if(isPresent(value))\r\n {\r\n object[part] = value;\r\n }\r\n\r\n return;\r\n }\r\n\r\n object = object[part] = object[part] ?? {};\r\n });\r\n}\r\n\r\n/**\r\n * Formats string using '%s', to print '%s' you have to use '%%s'\r\n * @param str - String containing substitution constants\r\n * @param args - Arguments that are used for replacement\r\n */\r\nexport function format(str: string, ...args: unknown[]): string\r\n{\r\n let i = 0;\r\n\r\n return str.replace(/((?!%).)%s/g, (_sub, substArgs) => `${substArgs[0]}${args[i++]}`).replace(/%%s/g, '%s');\r\n}\r\n\r\n/**\r\n * Performs flatMap over provided array\r\n * @param array - Array to be reduced using flatMap\r\n */\r\nexport function flatMapArray<TItem>(array: TItem[][]): TItem[]\r\n{\r\n return array.reduce((acc, x) => acc.concat(x), []);\r\n}\r\n\r\n/**\r\n * Serialize object to string that is usable as url query parameter\r\n * @param obj - Object to be serialized\r\n * @param replacer - Function that can be used for replacing provided values\r\n */\r\nexport function serializeToUrlQuery<TObj>(obj: TObj, replacer?: (this: any, key: string, value: any) => any): string\r\n{\r\n return btoa(encodeURIComponent(JSON.stringify(obj, replacer)));\r\n}\r\n\r\n/**\r\n * Deserialize value from url query string into object\r\n * @param queryParamValue - Query param string value\r\n * @param reviver - Function that can be used for correctly deserializing value\r\n */\r\nexport function deserializeFromUrlQuery<TObj>(queryParamValue: string, reviver?: (this: any, key: string, value: any) => any): TObj\r\n{\r\n return JSON.parse(decodeURIComponent(atob(queryParamValue)), reviver);\r\n}\r\n\r\n/**\r\n * Converts id to valid html id\r\n * @param id - Id that is going to be converted to valid html id\r\n * @param charMap - Character map used during normalization\r\n */\r\nexport function validHtmlId(id: string, charMap: StringDictionary = {}): string\r\n{\r\n id = id.toLowerCase()\r\n .replace(/[\\s]+/g, '-')\r\n .replace(/\\./g, '')\r\n .replace(/^(\\d)/g, 'x$1');\r\n\r\n id = normalize(id, charMap);\r\n\r\n return id;\r\n}\r\n\r\n/**\r\n * Checks whether is element overflown either horizontal, or vertical\r\n * @param element - Element to be tested for overflow\r\n */\r\nexport function isOverflown(element: HTMLElement): boolean\r\n{\r\n return element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;\r\n}\r\n\r\n/**\r\n * Normalizes string, removing accent\r\n * @param value - String to be normalized\r\n */\r\nexport function normalizeAccent(value: string): string\r\n{\r\n return value.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\r\n}\r\n\r\n/**\r\n * Converts instance of Class to equivalent Record type\r\n * @param instance - Instance which type to be converted\r\n * @typeparam TType - Type of instance\r\n */\r\nexport function asDictionary<TType>(instance: TType): AsDictionary<TType>\r\n{\r\n return instance as AsDictionary<TType>;\r\n}\r\n\r\n/**\r\n * Maps all iterable property values of object to \"this\" bounded\r\n * @param this - Object which will be filled with new values\r\n * @param value - Object holding values that will be used for filling\r\n * @param all - Indication whether map only existing properties or everything\r\n */\r\nexport function mapValuesToThis(this: Dictionary<any>, value: Dictionary<any>|undefined|null, all: boolean = false): void\r\n{\r\n if(!value)\r\n {\r\n return;\r\n }\r\n\r\n Object.keys(value).forEach(prop =>\r\n {\r\n if(value[prop] !== undefined && (all || (prop in this)))\r\n {\r\n this[prop] = value[prop];\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Briefly shows simple notification with simple text\r\n * @param show - Indication whether show notification\r\n * @param text - Text to be displayed, defaults to HMR finished text\r\n */\r\nexport function simpleNotification(show: boolean, text: string = 'HMR finished, app updated!'): void\r\n{\r\n if (show)\r\n {\r\n let div: HTMLDivElement|null = document.createElement('div');\r\n div.style.position = 'absolute';\r\n div.style.zIndex = '54345';\r\n div.style.background = 'rgb(255, 255, 255) none repeat scroll 0% 0%';\r\n div.style.padding = '8px';\r\n div.style.fontWeight = 'bold';\r\n div.style.borderRadius = 'bold';\r\n div.style.color = 'rgb(21, 57, 255)';\r\n div.style.left = '47%';\r\n div.style.top = '11px';\r\n div.style.boxShadow = '0px 0px 4px rgb(170, 170, 170)';\r\n div.style.transition = 'all 500ms';\r\n div.style.opacity = '0';\r\n\r\n div.innerText = text;\r\n\r\n document.body.append(div);\r\n\r\n setTimeout(() => div!.style.opacity = '1', 50);\r\n\r\n setTimeout(() =>\r\n {\r\n if(div)\r\n {\r\n div.style.opacity = '0';\r\n\r\n setTimeout(() =>\r\n {\r\n div!.remove();\r\n div = null;\r\n }, 500);\r\n }\r\n }, 2000);\r\n }\r\n}\r\n\r\n/**\r\n * Transforms any string to colour code\r\n * @param str - String to be changed to colour code\r\n */\r\nexport function stringToColour(str: string): string\r\n{\r\n let hash = 0;\r\n\r\n for (let i = 0; i < str.length; i++) \r\n {\r\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n \r\n let colour = '#';\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n const value = (hash >> (i * 8)) & 0xFF;\r\n colour += ('00' + value.toString(16)).substr(-2);\r\n }\r\n\r\n return colour;\r\n}\r\n\r\n/**\r\n * Renders element into body directly or into container element\r\n * @param document - Html document instance\r\n * @param element - Html element that will be rendered\r\n * @param containerElementSelector - Css selector for container element, if not specified renders into body, css selector must contain element name and optionally css classes\r\n */\r\nexport function renderToBody(document: Document, element: HTMLElement, containerElementSelector?: string|null): void\r\n{\r\n //render to specified target element\r\n if(containerElementSelector)\r\n {\r\n let containerElement = document.querySelector(`body ${containerElementSelector}`);\r\n\r\n //render to specified target element\r\n if(!containerElement)\r\n {\r\n const [name, ...css] = containerElementSelector.split('.');\r\n\r\n containerElement = document.createElement(name);\r\n\r\n if(!name)\r\n {\r\n throw new Error('renderToBody: missing name of element');\r\n }\r\n\r\n if(css?.length)\r\n {\r\n for(const cssClass of css)\r\n {\r\n containerElement.classList.add(cssClass);\r\n }\r\n }\r\n\r\n document.body.appendChild(containerElement);\r\n }\r\n\r\n containerElement.appendChild(element);\r\n }\r\n //render directly to body\r\n else\r\n {\r\n document.body.appendChild(element);\r\n }\r\n}"]}
1
+ {"version":3,"file":"common.cjs","sourceRoot":"","sources":["../../../src/utils/common.ts"],"names":[],"mappings":"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","sourcesContent":["import extendLib from 'extend';\r\n\r\nimport {isBlank, isJsObject, isPresent} from './lang';\r\nimport {AsDictionary, Dictionary, StringDictionary} from '../types/dictionaries';\r\nimport {Enum} from '../types/enums';\r\nimport {ValueNamePair} from '../types/valueNamePair';\r\nimport {normalize} from '../normalizer/normalizer';\r\n\r\n/**\r\n * Reverse current string and returns new reverse string\r\n * @param str - String to be reversed\r\n * @returns string Reverse string\r\n */\r\nexport function reverseString(str: string): string\r\n{\r\n return str.split('').reverse().join('');\r\n}\r\n\r\n/**\r\n * Extends target object with source\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source - Object that will be used for extending\r\n */\r\nexport function extend<T, U>(deep: boolean, target: T, source: U): T & U;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V>(deep: boolean, target: T, source1: U, source2: V): T & U & V;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W>(deep: boolean, target: T, source1: U, source2: V, source3: W): T & U & V & W;\r\n/**\r\n * Extends target object with source objects\r\n * @param deep - Indication whether deep copy should be performed\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n * @param source4 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W, X>(deep: boolean, target: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source - Object that will be used for extending\r\n */\r\nexport function extend<T, U>(target: T, source: U): T & U;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V>(target: T, source1: U, source2: V): T & U & V;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W>(target: T, source1: U, source2: V, source3: W): T & U & V & W;\r\n/**\r\n * Extends target object with source\r\n * @param target - Object that will extended\r\n * @param source1 - Object that will be used for extending\r\n * @param source2 - Object that will be used for extending\r\n * @param source3 - Object that will be used for extending\r\n * @param source4 - Object that will be used for extending\r\n */\r\nexport function extend<T, U, V, W, X>(target: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;\r\n/**\r\n * Extends one object with additional properties from other objects, supports deep extend\r\n * @param deepOrObject - Object to be extended or indication that deep copy should be performed\r\n * @param objectN - Objects that will be used for extending, if deep is used first here is target object\r\n * @returns Object Extended object with properties from other objects\r\n */\r\nexport function extend<TResult>(deepOrObject: boolean | Dictionary<any>, ...objectN: Dictionary<any>[]): TResult;\r\n/**\r\n * Extends one object with additional properties from other objects, supports deep extend\r\n * @param deepOrObject - Object to be extended or indication that deep copy should be performed\r\n * @param objectN - Objects that will be used for extending, if deep is used first here is target object\r\n * @returns Object Extended object with properties from other objects\r\n */\r\nexport function extend(deepOrObject: boolean | Dictionary<any>, ...objectN: Dictionary<any>[]): Dictionary\r\n{\r\n return extendLib.apply(null, [deepOrObject, ...objectN]);\r\n}\r\n\r\n/**\r\n * Generates random string consisting from lowercase letters\r\n * @param length - Length of generated string\r\n * @returns number Generated string\r\n */\r\nexport function generateId(length: number): string\r\n{\r\n let result = '';\r\n\r\n for(let x = 0; x < length; x++)\r\n {\r\n result += String.fromCharCode(Math.round(Math.random() * 25 + 97));\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Generates random string of specified length from possible characters\r\n * @param length - Length of generated string\r\n * @param possible - Possible characters used for generation of string\r\n */\r\nexport function generateRandomString(length: number, possible: string = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'): string\r\n{\r\n let text = '';\r\n\r\n for (let i = 0;i < length; i++)\r\n {\r\n text += possible.charAt(Math.floor(Math.random() * possible.length));\r\n }\r\n\r\n return text;\r\n}\r\n\r\n/**\r\n * Converts string in that way that first letter will be lowerCase\r\n * @param text - Text to be converted\r\n */\r\nexport function firstToLowerCase(text: string): string\r\n{\r\n return text.charAt(0).toLowerCase() + text.substr(1);\r\n}\r\n\r\n/**\r\n * Gets indication whether is child descendand of parent\r\n * @param parent - Parent to be tested\r\n * @param child - Child to be looked for\r\n */\r\nexport function isDescendant(parent: HTMLElement, child: HTMLElement): boolean\r\n{\r\n let node = child.parentNode;\r\n\r\n while (node != null)\r\n {\r\n if (node == parent)\r\n {\r\n return true;\r\n }\r\n\r\n node = node.parentNode;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Computes offset of element against document\r\n * @param element - Html element which offset is counted\r\n * @param doc - Html document to be used for extracting scroll offset\r\n */\r\nexport function offset(element: HTMLElement, doc?: Document)\r\n{\r\n doc = doc || document;\r\n\r\n const rect = element.getBoundingClientRect(),\r\n scrollLeft = window.pageXOffset || doc.documentElement.scrollLeft,\r\n scrollTop = window.pageYOffset || doc.documentElement.scrollTop;\r\n\r\n return {\r\n top: rect.top + scrollTop,\r\n left: rect.left + scrollLeft,\r\n bottom: rect.top + scrollTop + rect.height,\r\n right: rect.left + scrollLeft + rect.width\r\n };\r\n}\r\n\r\n/**\r\n * Converts html string into html DOM\r\n * @param html - Html string to be converted to DOM\r\n * @param doc - Optional html document to be used\r\n */\r\nexport function htmlToElement(html: string, doc?: Document): HTMLElement\r\n{\r\n let htmlDocument = document;\r\n\r\n if(isPresent(doc))\r\n {\r\n htmlDocument = doc;\r\n }\r\n\r\n const template = htmlDocument.createElement('template');\r\n html = html.trim();\r\n template.innerHTML = html;\r\n\r\n return template.content.firstChild as HTMLElement;\r\n}\r\n\r\n/**\r\n * Extract values from enum type\r\n * @param enumType - Enum type that will have extracted values\r\n */\r\nexport function getEnumValues<TEnum extends Enum>(enumType: TEnum): ValueNamePair[]\r\n{\r\n const result: ValueNamePair[] = [];\r\n\r\n Object.keys(enumType).forEach(key =>\r\n {\r\n if(isNaN(+key))\r\n {\r\n return;\r\n }\r\n\r\n result.push(\r\n {\r\n value: key,\r\n name: enumType[+key]\r\n });\r\n });\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Safely returns value from object property using string expression\r\n * @param object - Object which property value will be obtained\r\n * @param expression - Expression for obtaining value\r\n */\r\nexport function getValue<TValue = unknown>(object: Dictionary<any>, expression: string): TValue\r\nexport function getValue(object: Dictionary<any>, expression: string): unknown\r\n{\r\n return expression.split('.').reduce((o, i) =>\r\n {\r\n if(o)\r\n {\r\n return o[i];\r\n }\r\n\r\n return null;\r\n }, object);\r\n}\r\n\r\n/**\r\n * Sets value to objects property using string expression\r\n * @param object - Object which property value will be set\r\n * @param value - Value that will be set\r\n * @param expression - Expression for setting value\r\n */\r\nexport function setValue(object: Dictionary<any>, value: unknown, expression: string): void\r\n{\r\n const parts = expression.split('.');\r\n\r\n parts.forEach((part, index) =>\r\n {\r\n //last item value is assigned\r\n if(index == parts.length - 1)\r\n {\r\n if(isPresent(value))\r\n {\r\n object[part] = value;\r\n }\r\n\r\n return;\r\n }\r\n\r\n object = object[part] = object[part] ?? {};\r\n });\r\n}\r\n\r\n/**\r\n * Formats string using '%s', to print '%s' you have to use '%%s'\r\n * @param str - String containing substitution constants\r\n * @param args - Arguments that are used for replacement\r\n */\r\nexport function format(str: string, ...args: unknown[]): string\r\n{\r\n let i = 0;\r\n\r\n return str.replace(/((?!%).)%s/g, (_sub, substArgs) => `${substArgs[0]}${args[i++]}`).replace(/%%s/g, '%s');\r\n}\r\n\r\n/**\r\n * Performs flatMap over provided array\r\n * @param array - Array to be reduced using flatMap\r\n */\r\nexport function flatMapArray<TItem>(array: TItem[][]): TItem[]\r\n{\r\n return array.reduce((acc, x) => acc.concat(x), []);\r\n}\r\n\r\n/**\r\n * Serialize object to string that is usable as url query parameter\r\n * @param obj - Object to be serialized\r\n * @param replacer - Function that can be used for replacing provided values\r\n */\r\nexport function serializeToUrlQuery<TObj>(obj: TObj, replacer?: (this: any, key: string, value: any) => any): string\r\n{\r\n return btoa(encodeURIComponent(JSON.stringify(obj, replacer)));\r\n}\r\n\r\n/**\r\n * Deserialize value from url query string into object\r\n * @param queryParamValue - Query param string value\r\n * @param reviver - Function that can be used for correctly deserializing value\r\n */\r\nexport function deserializeFromUrlQuery<TObj>(queryParamValue: string, reviver?: (this: any, key: string, value: any) => any): TObj\r\n{\r\n return JSON.parse(decodeURIComponent(atob(queryParamValue)), reviver);\r\n}\r\n\r\n/**\r\n * Converts id to valid html id\r\n * @param id - Id that is going to be converted to valid html id\r\n * @param charMap - Character map used during normalization\r\n */\r\nexport function validHtmlId(id: string, charMap: StringDictionary = {}): string\r\n{\r\n id = id.toLowerCase()\r\n .replace(/[\\s]+/g, '-')\r\n .replace(/\\./g, '')\r\n .replace(/^(\\d)/g, 'x$1');\r\n\r\n id = normalize(id, charMap);\r\n\r\n return id;\r\n}\r\n\r\n/**\r\n * Checks whether is element overflown either horizontal, or vertical\r\n * @param element - Element to be tested for overflow\r\n */\r\nexport function isOverflown(element: HTMLElement): boolean\r\n{\r\n return element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;\r\n}\r\n\r\n/**\r\n * Normalizes string, removing accent\r\n * @param value - String to be normalized\r\n */\r\nexport function normalizeAccent(value: string): string\r\n{\r\n return value.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\r\n}\r\n\r\n/**\r\n * Converts instance of Class to equivalent Record type\r\n * @param instance - Instance which type to be converted\r\n * @typeparam TType - Type of instance\r\n */\r\nexport function asDictionary<TType>(instance: TType): AsDictionary<TType>\r\n{\r\n return instance as AsDictionary<TType>;\r\n}\r\n\r\n/**\r\n * Maps all iterable property values of object to \"this\" bounded\r\n * @param this - Object which will be filled with new values\r\n * @param value - Object holding values that will be used for filling\r\n * @param all - Indication whether map only existing properties or everything\r\n */\r\nexport function mapValuesToThis(this: Dictionary<any>, value: Dictionary<any>|undefined|null, all: boolean = false): void\r\n{\r\n if(!value)\r\n {\r\n return;\r\n }\r\n\r\n Object.keys(value).forEach(prop =>\r\n {\r\n if(value[prop] !== undefined && (all || (prop in this)))\r\n {\r\n this[prop] = value[prop];\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Briefly shows simple notification with simple text\r\n * @param show - Indication whether show notification\r\n * @param text - Text to be displayed, defaults to HMR finished text\r\n */\r\nexport function simpleNotification(show: boolean, text: string = 'HMR finished, app updated!'): void\r\n{\r\n if (show)\r\n {\r\n let div: HTMLDivElement|null = document.createElement('div');\r\n div.style.position = 'absolute';\r\n div.style.zIndex = '54345';\r\n div.style.background = 'rgb(255, 255, 255) none repeat scroll 0% 0%';\r\n div.style.padding = '8px';\r\n div.style.fontWeight = 'bold';\r\n div.style.borderRadius = 'bold';\r\n div.style.color = 'rgb(21, 57, 255)';\r\n div.style.left = '47%';\r\n div.style.top = '11px';\r\n div.style.boxShadow = '0px 0px 4px rgb(170, 170, 170)';\r\n div.style.transition = 'all 500ms';\r\n div.style.opacity = '0';\r\n\r\n div.innerText = text;\r\n\r\n document.body.append(div);\r\n\r\n setTimeout(() => div!.style.opacity = '1', 50);\r\n\r\n setTimeout(() =>\r\n {\r\n if(div)\r\n {\r\n div.style.opacity = '0';\r\n\r\n setTimeout(() =>\r\n {\r\n div!.remove();\r\n div = null;\r\n }, 500);\r\n }\r\n }, 2000);\r\n }\r\n}\r\n\r\n/**\r\n * Transforms any string to colour code\r\n * @param str - String to be changed to colour code\r\n */\r\nexport function stringToColour(str: string): string\r\n{\r\n let hash = 0;\r\n\r\n for (let i = 0; i < str.length; i++) \r\n {\r\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n \r\n let colour = '#';\r\n\r\n for (let i = 0; i < 3; i++)\r\n {\r\n const value = (hash >> (i * 8)) & 0xFF;\r\n colour += ('00' + value.toString(16)).substr(-2);\r\n }\r\n\r\n return colour;\r\n}\r\n\r\n/**\r\n * Renders element into body directly or into container element\r\n * @param document - Html document instance\r\n * @param element - Html element that will be rendered\r\n * @param containerElementSelector - Css selector for container element, if not specified renders into body, css selector must contain element name and optionally css classes\r\n */\r\nexport function renderToBody(document: Document, element: HTMLElement, containerElementSelector?: string|null): void\r\n{\r\n //render to specified target element\r\n if(containerElementSelector)\r\n {\r\n let containerElement = document.querySelector(`body ${containerElementSelector}`);\r\n\r\n //render to specified target element\r\n if(!containerElement)\r\n {\r\n const [name, ...css] = containerElementSelector.split('.');\r\n\r\n containerElement = document.createElement(name);\r\n\r\n if(!name)\r\n {\r\n throw new Error('renderToBody: missing name of element');\r\n }\r\n\r\n if(css?.length)\r\n {\r\n for(const cssClass of css)\r\n {\r\n containerElement.classList.add(cssClass);\r\n }\r\n }\r\n\r\n document.body.appendChild(containerElement);\r\n }\r\n\r\n containerElement.appendChild(element);\r\n }\r\n //render directly to body\r\n else\r\n {\r\n document.body.appendChild(element);\r\n }\r\n}\r\n\r\n/**\r\n * Formats input string using no parameters, returns original input\r\n * @param input - Input that will be formatted\r\n */\r\nexport function formatString(input: string|undefined|null): string\r\n/**\r\n * Formats input string using object holding formatting parameters\r\n * @param input - Input that will be formatted\r\n * @param parameter - Parameter as object which properties will be used for formatting\r\n * \r\n * ```\r\n * formatString('test {val}, {@test}, {@(2)test}', {val: 3, test: {bool: true, num: 10}});\r\n * ```\r\n * \r\n * displays `{val}` as direct stringified value of '`val`' property \r\n * displays `{@test}` as JSON strinfigied value of '`test`' property \r\n * displays `{@(2)test}` as JSON stringified value of '`test`' property with 2 spaces indentation (other supported spaces are 4 and 8)\r\n */\r\nexport function formatString(input: string|undefined|null, parameter: Record<string, unknown>): string\r\n/**\r\n * Formats input string using array holding formatting parameters\r\n * @param input - Input that will be formatted\r\n * @param parameter - Parameter as array which items will be used for formatting\r\n * \r\n * ```\r\n * formatString('test {0}, {@1}, {@(2)1}', [3, {bool: true, num: 10}])\r\n * ```\r\n * \r\n * displays `{0}` as direct stringified value of '`0`' index item \r\n * displays `{@1}` as JSON strinfigied value of '`0`' index item \r\n * displays `{@(2)1}` as JSON stringified value of '`0`' index item with 2 spaces indentation (other supported spaces are 4 and 8)\r\n */\r\nexport function formatString(input: string|undefined|null, ...parameters: unknown[]): string\r\nexport function formatString(input: string|undefined|null, ...parameters: unknown[]|[Record<string, unknown>]): string\r\n{\r\n if(isBlank(input))\r\n {\r\n return '';\r\n }\r\n\r\n //formatting using object\r\n if(parameters.length == 1 && isJsObject(parameters[0]))\r\n {\r\n const parameter = parameters[0] as Record<string, unknown>;\r\n\r\n for(const prop in parameter)\r\n {\r\n input = input?.replace(new RegExp('\\\\{' + prop + '\\\\}', 'g'), `${parameter[prop]}`);\r\n input = input?.replace(new RegExp('\\\\{@(?:\\\\(([2|4|8])\\\\))?' + prop + '\\\\}', 'g'), (_, ...args) =>\r\n {\r\n if(isBlank(args[0]))\r\n {\r\n return JSON.stringify(parameter[prop]);\r\n }\r\n \r\n return JSON.stringify(parameter[prop], null, +args[0]);\r\n });\r\n }\r\n }\r\n //formatting using array of values\r\n else\r\n {\r\n //no formatting parameters\r\n if(!parameters.length)\r\n {\r\n return input;\r\n }\r\n\r\n for(let x = 0; x < parameters.length; x++)\r\n {\r\n input = input?.replace(new RegExp('\\\\{' + x + '\\\\}', 'g'), `${parameters[x]}`);\r\n input = input?.replace(new RegExp('\\\\{@(?:\\\\(([2|4|8])\\\\))?' + x + '\\\\}', 'g'), (_, ...args) =>\r\n {\r\n if(isBlank(args[0]))\r\n {\r\n return JSON.stringify(parameters[x]);\r\n }\r\n \r\n return JSON.stringify(parameters[x], null, +args[0]);\r\n });\r\n }\r\n }\r\n\r\n return input;\r\n}"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jscrpt/common",
3
- "version": "3.5.0-beta.20230814111300",
3
+ "version": "3.5.0",
4
4
  "description": "Common javascript tools, utilities and other usefull stuff",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -206,4 +206,37 @@ export declare function stringToColour(str: string): string;
206
206
  * @param containerElementSelector - Css selector for container element, if not specified renders into body, css selector must contain element name and optionally css classes
207
207
  */
208
208
  export declare function renderToBody(document: Document, element: HTMLElement, containerElementSelector?: string | null): void;
209
+ /**
210
+ * Formats input string using no parameters, returns original input
211
+ * @param input - Input that will be formatted
212
+ */
213
+ export declare function formatString(input: string | undefined | null): string;
214
+ /**
215
+ * Formats input string using object holding formatting parameters
216
+ * @param input - Input that will be formatted
217
+ * @param parameter - Parameter as object which properties will be used for formatting
218
+ *
219
+ * ```
220
+ * formatString('test {val}, {@test}, {@(2)test}', {val: 3, test: {bool: true, num: 10}});
221
+ * ```
222
+ *
223
+ * displays `{val}` as direct stringified value of '`val`' property
224
+ * displays `{@test}` as JSON strinfigied value of '`test`' property
225
+ * displays `{@(2)test}` as JSON stringified value of '`test`' property with 2 spaces indentation (other supported spaces are 4 and 8)
226
+ */
227
+ export declare function formatString(input: string | undefined | null, parameter: Record<string, unknown>): string;
228
+ /**
229
+ * Formats input string using array holding formatting parameters
230
+ * @param input - Input that will be formatted
231
+ * @param parameter - Parameter as array which items will be used for formatting
232
+ *
233
+ * ```
234
+ * formatString('test {0}, {@1}, {@(2)1}', [3, {bool: true, num: 10}])
235
+ * ```
236
+ *
237
+ * displays `{0}` as direct stringified value of '`0`' index item
238
+ * displays `{@1}` as JSON strinfigied value of '`0`' index item
239
+ * displays `{@(2)1}` as JSON stringified value of '`0`' index item with 2 spaces indentation (other supported spaces are 4 and 8)
240
+ */
241
+ export declare function formatString(input: string | undefined | null, ...parameters: unknown[]): string;
209
242
  //# sourceMappingURL=common.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["common.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["common.ts"],"names":[],"mappings":"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"}
package/version.bak CHANGED
@@ -1 +1 @@
1
- 3.5.0-beta.20230814111300
1
+ 3.5.0