UNPKG

@cisstech/nge

Version:

NG Essentials is a collection of libraries for Angular developers.

1 lines 31.5 kB
{"version":3,"file":"cisstech-nge-utils.mjs","sources":["../../../projects/nge/utils/src/copy.ts","../../../projects/nge/utils/src/builder.ts","../../../projects/nge/utils/src/colors.ts","../../../projects/nge/utils/src/compare.ts","../../../projects/nge/utils/src/contracts.ts","../../../projects/nge/utils/src/dates.ts","../../../projects/nge/utils/src/extensions.ts","../../../projects/nge/utils/src/strings.ts","../../../projects/nge/utils/cisstech-nge-utils.ts"],"sourcesContent":["export function deepCopy<T>(obj: T): T {\n if (obj === null || typeof obj !== 'object') {\n return obj\n }\n const copy = obj instanceof Array ? [] : {}\n for (const key in obj) {\n if ((obj as any).hasOwnProperty(key)) {\n ;(copy as any)[key] = deepCopy(obj[key])\n }\n }\n return copy as T\n}\n","import { deepCopy } from './copy'\n\ninterface ClassInfo {\n resolver?: (props: Record<string, any>) => Function\n}\n\ninterface PropertyInfo {\n type?: Function\n indexed?: boolean\n aliases?: string[]\n}\n\nclass Serializer {\n static serialize(instance: any): Record<string, any> {\n const record: Record<string, any> = {}\n const prototype = instance.constructor.prototype\n const properties: Record<string, PropertyInfo> = prototype.__properties_infos__\n\n Object.keys(properties).forEach((propertyName) => {\n if (!(propertyName in instance)) {\n return\n }\n\n const property = properties[propertyName]\n const exportName = (property.aliases ?? []).pop() ?? propertyName\n\n const value = instance[propertyName]\n if (value == null) {\n return\n }\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean':\n if (value != null) {\n record[exportName] = value\n }\n break\n case 'object':\n if (property.type) {\n if (Array.isArray(value)) {\n record[exportName] = value\n .map((e) => {\n return Serializer.serialize(e)\n })\n .filter((e) => e != null)\n } else if (property.indexed) {\n record[exportName] = Object.keys(value).reduce(\n (obj, key) => {\n if (value[key] === undefined) {\n return obj\n }\n obj[key] = Serializer.serialize(value[key])\n return obj\n },\n {} as Record<string, any>\n )\n } else {\n record[exportName] = Serializer.serialize(value)\n }\n } else {\n if (Array.isArray(value)) {\n record[exportName] = value.filter((obj) => obj != null)\n } else {\n record[exportName] = deepCopy(value)\n }\n }\n break\n }\n })\n return record\n }\n\n static deserialize(target: any, props: Record<string, any>) {\n const record: Record<string, any> = {\n ...props,\n }\n const prototype = target.prototype\n const info: ClassInfo = prototype.__class_info__\n if (info.resolver) {\n target = info.resolver(props)\n }\n\n const properties: Record<string, PropertyInfo> = prototype.__properties_infos__\n Object.keys(properties).forEach((propertyName) => {\n const property = properties[propertyName]\n const aliases = property.aliases ?? []\n const value =\n props[propertyName] ??\n Object.keys(props).find((k) => {\n return !!aliases.find((alias) => alias === k)\n })\n\n if (value == null) {\n return\n }\n\n switch (typeof value) {\n case 'object':\n if (property.type) {\n if (Array.isArray(value)) {\n record[propertyName] = value.map((e) => {\n return Serializer.deserialize(property.type, e)\n })\n } else if (property.indexed) {\n Object.keys(value).forEach((k) => {\n value[k] = Serializer.deserialize(property.type, value[k])\n })\n record[propertyName] = value\n } else {\n record[propertyName] = Serializer.deserialize(property.type, value)\n }\n } else {\n record[propertyName] = value\n }\n break\n default:\n record[propertyName] = value\n break\n }\n })\n return new target(record)\n }\n}\n\nexport class Builder<T> {\n /**\n * Creates new instance of `T` class.\n * @param props properties to pass to the constructor of the instance.\n * @returns new instance of `T`\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n static create<T>(props: Partial<T>): T {\n throw new Error('This is an abstract method. It needs to be overridden.')\n }\n\n save(): Record<keyof T, any> {\n throw new Error('This is an abstract method. It needs to be overridden.')\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n with(props: Partial<T>): T {\n throw new Error('This is an abstract method. It needs to be overridden.')\n }\n}\n\nexport function Entity(info?: ClassInfo): ClassDecorator {\n return function (target: any) {\n const prototype = target.prototype\n info = info ?? {}\n prototype.__class_info__ = prototype.__class_info__ ?? info\n prototype.__class_info__ = {\n ...prototype.__class_info__,\n ...info,\n }\n\n prototype.save = function () {\n return Serializer.serialize(this)\n }\n\n prototype.with = function (props: any) {\n return new target({\n ...this,\n ...props,\n })\n }\n\n target.create = function (props: Record<string, any>) {\n return Serializer.deserialize(target, props)\n }\n return target\n }\n}\n\nexport function Property(info?: PropertyInfo): PropertyDecorator {\n return (instance: any, name: string | symbol) => {\n info = info ?? {\n aliases: [],\n }\n\n const prototype = instance.constructor.prototype\n prototype.__properties_infos__ = prototype.__properties_infos__ ?? {}\n prototype.__properties_infos__[name] = info\n }\n}\n","export function rgbFromHex(color: string) {\n color = color.replace('#', '')\n const n = color.length\n if (n == 3) {\n // convert rgb to rrggbb\n const r = color[0]\n const g = color[1]\n const b = color[2]\n color = `${r}${r}${g}${g}${b}${b}`\n }\n\n const rgb = parseInt(color, 16) // convert rrggbb to decimal\n return {\n r: (rgb >> 16) & 0xff, // extract red\n g: (rgb >> 8) & 0xff, // extract green\n b: (rgb >> 0) & 0xff, // extract blue\n }\n}\n\nexport function rgbToHex(r: number, g: number, b: number) {\n r = Math.round(r)\n g = Math.round(g)\n b = Math.round(b)\n const componentToHex = (c: number) => {\n const hex = c.toString(16)\n return hex.length == 1 ? '0' + hex : hex\n }\n return '#' + componentToHex(r) + componentToHex(g) + componentToHex(b)\n}\n\nexport function colorContrast(color: string) {\n const { r, g, b } = rgbFromHex(color)\n const contrast = (Math.round(r * 299) + Math.round(g * 587) + Math.round(b * 114)) / 1000\n return contrast >= 128 ? 'black' : 'white'\n}\n\n// https://maketintsandshades.com/about\nexport function colorTint(color: string, factor = 0.1 /* 10% */) {\n let { r, g, b } = rgbFromHex(color)\n r += (255 - r) * factor\n g += (255 - g) * factor\n b += (255 - b) * factor\n return rgbToHex(r, g, b)\n}\n\nexport function colorShade(color: string, factor = 0.88 /* 12% */) {\n let { r, g, b } = rgbFromHex(color)\n r *= factor\n g *= factor\n b *= factor\n return rgbToHex(r, g, b)\n}\n","export function deepEqual(a: any, b: any): boolean {\n if (a === b) return true\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false\n\n var length, i, keys\n if (Array.isArray(a)) {\n length = a.length\n if (length != b.length) return false\n for (i = length; i-- !== 0; ) if (!deepEqual(a[i], b[i])) return false\n return true\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf()\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString()\n\n keys = Object.keys(a)\n length = keys.length\n if (length !== Object.keys(b).length) return false\n\n for (i = length; i-- !== 0; ) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false\n\n for (i = length; i-- !== 0; ) {\n var key = keys[i]\n\n if (!deepEqual(a[key], b[key])) return false\n }\n\n return true\n }\n\n // true if both NaN, false otherwise\n return a !== a && b !== b\n}\n","export function ensuresNonNull<T>(value?: T, message?: string): value is T {\n if (value == null) {\n throw new ReferenceError(message)\n }\n return true\n}\n\nexport function ensuresNonNullArray<T>(value?: T[], message?: string): value is T[] {\n if (value == null) {\n throw new ReferenceError(message)\n }\n value.forEach((v) => {\n if (v == null) {\n throw ReferenceError(message)\n }\n })\n return true\n}\n\nexport function ensuresNonNullString(value?: string, message?: string): value is string {\n if (value == null || value.trim().length === 0) {\n message = message || `'require non null|empty string`\n throw new ReferenceError(message)\n }\n return true\n}\n\nexport function ensures(condition: any, message?: string): asserts condition {\n if (!condition) {\n throw new Error(message)\n }\n}\n","export function epoch(): Date {\n return new Date('01/01/1970')\n}\n\nexport function addDays(date: Date, days: number) {\n date = new Date(date.valueOf())\n date.setDate(date.getDate() + days)\n return date\n}\n\n/** Gets current value of unix timestamp */\nexport function timestamp(): number {\n return new Date().getTime() / 1000\n}\n\n/**\n * Gets unix timestamp value of `date`\n * @param date the date.\n */\nexport function toTimestamp(date: Date): number {\n return date.getTime() / 1000\n}\n\n/**\n * Converts an unix timestamp to a Date object\n * @param time an unix timestamp\n */\nexport function dateFromTimestamp(time: number): Date {\n return new Date(time * 1000)\n}\n\n/**\n * Converts an unix timestamp to a date in the format 'day month hours mins'\n * @param time an unix timestamp.\n * @param locale target language locale tag.\n * @returns string representation of the date.\n */\nexport function fullDate(time: number, locale?: string): string {\n const format: Intl.DateTimeFormatOptions = {\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n }\n return convertDate(time, format, locale)\n}\n\n/**\n * Converts an unix timestamp to a date in the format 'day month'\n * @param time an unix timestamp.\n * @param locale target language locale tag.\n * @returns string representation of the date.\n */\nexport function shortDate(time: number, locale?: string): string {\n return convertDate(time, { month: 'short', day: 'numeric' }, locale)\n}\n\n/**\n * Converts an unix timestamp to a date in the format 'hours mins'\n * @param time an unix timestamp.\n * @returns string representation of the date.\n */\nexport function hours(time: number): string {\n const date = dateFromTimestamp(time)\n const minutes = date.getMinutes()\n const minutesFormat = minutes >= 10 ? minutes : `0${minutes}`\n return `${date.getHours()}:${minutesFormat}`\n}\n\n/**\n * Gets a value indicating whether the timestamp is today.\n * @param time an unix timestamp.\n */\nexport function isToday(time: number) {\n return new Date().toLocaleDateString() === dateFromTimestamp(time).toLocaleDateString()\n}\n\n/**\n * Gets a value indicating whether the given dates representes the same year, month and day.\n * @param d1 the first date.\n * @param d2 the second date.\n */\nexport function compareDays(d1: Date, d2: Date) {\n return d1.getFullYear() === d2.getFullYear() && d1.getMonth() === d2.getMonth() && d1.getDate() === d2.getDate()\n}\n\nexport function convertDate(time: number, format: Intl.DateTimeFormatOptions, locale?: string): string {\n const date = dateFromTimestamp(time)\n return date.toLocaleDateString(locale, format)\n}\n\nexport function weeksDiff(d1: Date, d2: Date) {\n let diff = (d2.getTime() - d1.getTime()) / 1000\n diff /= 60 * 60 * 24 * 7\n return Math.abs(Math.round(diff))\n}\n\nexport function dateRangeOverlaps(a_start: Date, a_end: Date, b_start: Date, b_end: Date): boolean {\n if (a_start < b_start && b_start < a_end) return true // b starts in a\n if (a_start < b_end && b_end < a_end) return true // b ends in a\n if (b_start < a_start && a_end < b_end) return true // a in b\n return false\n}\n","export function isImage(extension: string): boolean {\n extension = extension.toLowerCase()\n if (!extension.startsWith('.')) {\n extension = '.' + extension\n }\n return ['.ai', '.png', '.jpg', '.pjg', '.gif', '.svg', '.jpeg'].includes(extension)\n}\n\nexport function isPdf(extension: string): boolean {\n extension = extension.toLowerCase()\n if (!extension.startsWith('.')) {\n extension = '.' + extension\n }\n return extension === '.pdf'\n}\n\nexport function isWordDoc(extension: string): boolean {\n extension = extension.toLowerCase()\n if (!extension.startsWith('.')) {\n extension = '.' + extension\n }\n return ['.odt', '.doc', '.docx'].includes(extension)\n}\n\nexport function isText(extension: string): boolean {\n extension = extension.toLowerCase()\n return extension === 'txt' || extension === '.txt'\n}\n\nexport function isExcelDoc(extension: string): boolean {\n extension = extension.toLowerCase()\n if (!extension.startsWith('.')) {\n extension = '.' + extension\n }\n return ['.xlsx', '.xlsm', '.xsl', '.xst'].includes(extension)\n}\n\nexport function isPowerPointDoc(extension: string): boolean {\n extension = extension.toLowerCase()\n if (!extension.startsWith('.')) {\n extension = '.' + extension\n }\n return ['.ppt', '.pptm', '.pptx'].includes(extension)\n}\n\n/**\n * Gets the extension of the file (without the dot '.').\n * Throws an exception if the file is undefined.\n * @param file the file\n * @returns the extension of the file.\n */\nexport function extensionOf(file: File | Blob): string {\n if (file instanceof File) {\n const tmp1 = Math.max(0, file.name.lastIndexOf('.'))\n return file.name.slice((tmp1 || Infinity) + 1).toLowerCase()\n }\n const tmp2 = Math.max(0, file.type.lastIndexOf('/'))\n return file.type.slice((tmp2 || Infinity) + 1).toLowerCase()\n}\n","export function isNullOrEmpty(text: string) {\n return text == null || text.trim() === ''\n}\n\nexport function anyNullOrEmpty(...args: string[]) {\n if (args == null) {\n return true\n }\n for (const e of args) {\n if (isNullOrEmpty(e)) {\n return true\n }\n }\n return false\n}\n\nexport const urlPattern =\n '^(https?:\\\\/\\\\/)?' + // protocol\n '((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.)+[a-z]{2,}|' + // domain name\n '((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))' + // OR ip (v4) address\n '(\\\\:\\\\d+)?(\\\\/[@-a-z\\\\d%_.~+]*)*' + // port and path\n '(\\\\?[;@&a-z\\\\d%_.~+=-]*)?' + // query string\n '(\\\\#[@-a-z\\\\d_]*)?$'\n\nexport function isURL(str: string) {\n // https://stackoverflow.com/questions/5717093/check-if-a-javascript-string-is-a-url\n const pattern = new RegExp(urlPattern, 'i') // fragment locator\n return !!pattern.test(str)\n}\n\nexport function hashCode(str: string) {\n let hash = 0\n if (str.length === 0) return hash\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i)\n hash = (hash << 5) - hash + char\n hash = hash & hash // Convert to 32bit integer\n }\n return hash\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}