@qudtlib/core
Version:
Data model for QUDTLib
1 lines • 6.24 kB
Source Map (JSON)
{"version":3,"sources":["utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,UAE5C;AAED,MAAM,WAAW,gBAAgB,CAAC,IAAI;IACpC,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe,CAAC,IAAI;IACnC,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,MAAM,CAAC;CACnC;AAED,eAAO,MAAM,iBAAiB,EAAE,eAAe,CAAC,OAAO,CAGd,CAAC;AAC1C,eAAO,MAAM,gBAAgB,EAAE,eAAe,CAAC,MAAM,CAGL,CAAC;AAEjD,eAAO,MAAM,gBAAgB,EAAE,eAAe,CAAC,MAAM,CAGJ,CAAC;AAElD,wBAAgB,kBAAkB,CAAC,IAAI,SAAS,cAAc,CAAC,IAAI,CAAC,EAClE,CAAC,EAAE,IAAI,EACP,CAAC,EAAE,IAAI,WAGR;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EACnC,GAAG,EAAE,IAAI,EAAE,EACX,GAAG,GAAE,gBAAgB,CAAC,IAAI,CAAqB,GAC9C,IAAI,EAAE,CASR;AAED,wBAAgB,WAAW,CAAC,IAAI,EAC9B,IAAI,CAAC,EAAE,IAAI,EAAE,EACb,KAAK,CAAC,EAAE,IAAI,EAAE,EACd,GAAG,GAAE,gBAAgB,CAAC,IAAI,CAAqB,GAC9C,OAAO,CAOT;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAC5C,IAAI,CAAC,EAAE,IAAI,EAAE,EACb,KAAK,CAAC,EAAE,IAAI,EAAE,EACd,GAAG,GAAE,gBAAgB,CAAC,IAAI,CAAqB,GAC9C,OAAO,CAeT;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAC1C,IAAI,CAAC,EAAE,IAAI,EAAE,EACb,KAAK,CAAC,EAAE,IAAI,EAAE,EACd,GAAG,GAAE,gBAAgB,CAAC,IAAI,CAAqB,GAC9C,MAAM,CAcR;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAc5E;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAE5E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAChC,GAAG,EAAE,IAAI,EAAE,EACX,MAAM,EAAE,IAAI,EACZ,GAAG,GAAE,gBAAgB,CAAC,IAAI,CAAqB,WAWhD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAIxD;AAED,wBAAgB,cAAc,CAAC,CAAC,EAC9B,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC7B,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,GAC/B,CAAC,GAAG,SAAS,CAOf;AACD,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,WAErC;AAED,eAAO,MAAM,GAAG,SAAmB,CAAC;AACpC,eAAO,MAAM,IAAI,SAAmB,CAAC","file":"utils.d.ts","sourcesContent":["import { SupportsEquals } from \"./baseTypes.js\";\nimport { Decimal } from \"decimal.js\";\n\nexport function getLastIriElement(iri: string) {\n return iri.replaceAll(/.+\\/([^\\/]+)/g, \"$1\");\n}\n\nexport interface EqualsComparator<Type> {\n (left: Type, right: Type): boolean;\n}\n\n/**\n * Compares two instances, `left` and `right`, yielding a negative result if `left` is smaller,\n * a positive result if `left` is greater, and 0 if they are equal.\n */\nexport interface OrderComparator<Type> {\n (left: Type, right: Type): number;\n}\n\nexport const BooleanComparator: OrderComparator<boolean> = (\n left: boolean,\n right: boolean\n) => (left === right ? 0 : left ? 1 : -1);\nexport const NumberComparator: OrderComparator<number> = (\n left: number,\n right: number\n) => (left < right ? -1 : left == right ? 0 : 1);\n\nexport const StringComparator: OrderComparator<string> = (\n left: string,\n right: string\n) => (left < right ? -1 : left === right ? 0 : 1);\n\nexport function compareUsingEquals<Type extends SupportsEquals<Type>>(\n a: Type,\n b: Type\n) {\n return a.equals(b);\n}\n\nexport function arrayDeduplicate<Type>(\n arr: Type[],\n cmp: EqualsComparator<Type> = (a, b) => a === b\n): Type[] {\n if (!arr || !arr.length || arr.length === 0) {\n return arr;\n }\n return arr.reduce(\n (prev: Type[], cur: Type) =>\n prev.some((p) => cmp(p, cur)) ? prev : [...prev, cur],\n []\n );\n}\n\nexport function arrayEquals<Type>(\n left?: Type[],\n right?: Type[],\n cmp: EqualsComparator<Type> = (a, b) => a === b\n): boolean {\n return (\n !!left &&\n !!right &&\n left.length === right.length &&\n left.every((e, i) => cmp(e, right[i]))\n );\n}\n\nexport function arrayEqualsIgnoreOrdering<Type>(\n left?: Type[],\n right?: Type[],\n cmp: EqualsComparator<Type> = (a, b) => a === b\n): boolean {\n if (!!left && !!right && left.length === right.length) {\n const unmatched = Array.from({ length: left.length }, (v, i) => i);\n outer: for (let i = 0; i < left.length; i++) {\n for (let j = 0; j < unmatched.length; j++) {\n if (cmp(left[i], right[unmatched[j]])) {\n unmatched.splice(j, 1);\n continue outer;\n }\n }\n return false;\n }\n return true;\n }\n return false;\n}\n\nexport function arrayCountEqualElements<Type>(\n left?: Type[],\n right?: Type[],\n cmp: EqualsComparator<Type> = (a, b) => a === b\n): number {\n if (!!left && !!right) {\n const unmatched = Array.from({ length: left.length }, (v, i) => i);\n outer: for (let i = 0; i < left.length; i++) {\n for (let j = 0; j < unmatched.length; j++) {\n if (cmp(left[i], right[unmatched[j]])) {\n unmatched.splice(j, 1);\n continue outer;\n }\n }\n }\n return left.length - unmatched.length;\n }\n return 0;\n}\n\nexport function arrayMin<Type>(arr: Type[], cmp: OrderComparator<Type>): Type {\n if (!arr || !arr?.length) {\n throw \"array is undefined or empty\";\n }\n let min: Type | undefined = undefined;\n for (const elem of arr as Type[]) {\n if (typeof min === \"undefined\" || cmp(min, elem) > 0) {\n min = elem;\n }\n }\n if (typeof min === \"undefined\") {\n throw \"no minimum found\";\n }\n return min;\n}\n\nexport function arrayMax<Type>(arr: Type[], cmp: OrderComparator<Type>): Type {\n return arrayMin(arr, (left, right) => -1 * cmp(left, right));\n}\n\nexport function arrayContains<Type>(\n arr: Type[],\n toFind: Type,\n cmp: EqualsComparator<Type> = (a, b) => a === b\n) {\n if (!arr) {\n throw \"array is undefined\";\n }\n for (const elem of arr as Type[]) {\n if (cmp(elem, toFind)) {\n return true;\n }\n }\n return false;\n}\n\nexport function checkInteger(arg: number, argName: string) {\n if (!Number.isInteger(arg)) {\n throw `${argName} must be integer, ${arg} (type ${typeof arg}) is not`;\n }\n}\n\nexport function findInIterable<T>(\n iterable: IterableIterator<T>,\n predicate: (value: T) => boolean\n): T | undefined {\n for (const elem of iterable) {\n if (predicate(elem)) {\n return elem;\n }\n }\n return undefined;\n}\nexport function isNullish(val: unknown) {\n return typeof val === \"undefined\" || val === null;\n}\n\nexport const ONE = new Decimal(\"1\");\nexport const ZERO = new Decimal(\"0\");\n"]}