di-controls
Version:
<!-- PROJECT LOGO -->
1 lines • 4 kB
Source Map (JSON)
{"version":3,"file":"di-controls-classes.mjs","sources":["../../../../libs/di-controls/classes/set-compare.ts","../../../../libs/di-controls/classes/compare-host.ts","../../../../libs/di-controls/classes/di-controls-classes.ts"],"sourcesContent":["import { DI_DEFAULT_COMPARE } from 'di-controls/constants';\nimport { DICompareFunction } from 'di-controls/types';\n\nexport class SetCompare<T> implements Iterable<T> {\n\tprivate values: Set<T> = new Set<T>();\n\tprivate readonly compareFn: DICompareFunction<T>;\n\n\tconstructor(compareFn?: DICompareFunction<T>, newValues?: T[] | null) {\n\t\tthis.compareFn = compareFn || DI_DEFAULT_COMPARE;\n\t\tthis.values = new Set<T>(newValues || []);\n\t}\n\n\tget size(): number {\n\t\treturn this.values.size;\n\t}\n\n\t*[Symbol.iterator](): Iterator<T> {\n\t\tfor (const value of this.values) {\n\t\t\tyield value;\n\t\t}\n\t}\n\n\tadd(value: T): void {\n\t\tconst item: T | null = this.find(value);\n\t\titem === null && this.values.add(value);\n\t}\n\n\tdelete(value: T): void {\n\t\tconst item: T | null = this.find(value);\n\t\titem !== null && this.values.delete(item);\n\t}\n\n\thas(value: T): boolean {\n\t\treturn this.values.has(value) || !!this.find(value);\n\t}\n\n\tclear(): void {\n\t\tthis.values = new Set<T>();\n\t}\n\n\ttoArray(): T[] {\n\t\treturn Array.from(this.values);\n\t}\n\n\tprivate find(value: T): T | null {\n\t\t/* trying to find element as is, because its the fastest way */\n\t\tif (this.values.has(value)) {\n\t\t\treturn value;\n\t\t}\n\n\t\t/* if we didn't find it then trying to use compare function to do that */\n\t\tfor (const v of this.values) {\n\t\t\tif (this.compareFn(value, v)) {\n\t\t\t\treturn v;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n}\n","import {DICompareFunction} from 'di-controls/types';\nimport {InputSignal, Provider, Type} from '@angular/core';\n\n/** Uses to implement host with compare function */\nexport abstract class DICompareHost<TModel, TValue extends TModel = TModel> {\n\t/** Uses to compare two values (useful to compare two objects, for example by id) */\n\tabstract compareFn: DICompareFunction<TModel, TValue> | InputSignal<DICompareFunction<TModel, TValue>>;\n}\n\n/**\n * Provides `DICompareHost` as a component that should be used to compare two values\n *\n * @param useExisting - Existing class that implements `DICompareHost`\n */\nexport function provideCompareHost<T extends DICompareHost<any>>(useExisting: Type<T>): Provider {\n\treturn {\n\t\tprovide: DICompareHost,\n\t\tuseExisting,\n\t};\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;MAGa,UAAU,CAAA;AACd,IAAA,MAAM,GAAW,IAAI,GAAG,EAAK;AACpB,IAAA,SAAS;IAE1B,WAAY,CAAA,SAAgC,EAAE,SAAsB,EAAA;AACnE,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,kBAAkB;QAChD,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAI,SAAS,IAAI,EAAE,CAAC;;AAG1C,IAAA,IAAI,IAAI,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI;;AAGxB,IAAA,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAA;AACjB,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AAChC,YAAA,MAAM,KAAK;;;AAIb,IAAA,GAAG,CAAC,KAAQ,EAAA;QACX,MAAM,IAAI,GAAa,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QACvC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;;AAGxC,IAAA,MAAM,CAAC,KAAQ,EAAA;QACd,MAAM,IAAI,GAAa,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QACvC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;;AAG1C,IAAA,GAAG,CAAC,KAAQ,EAAA;AACX,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;IAGpD,KAAK,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAK;;IAG3B,OAAO,GAAA;QACN,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;AAGvB,IAAA,IAAI,CAAC,KAAQ,EAAA;;QAEpB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC3B,YAAA,OAAO,KAAK;;;AAIb,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;YAC5B,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;AAC7B,gBAAA,OAAO,CAAC;;;AAGV,QAAA,OAAO,IAAI;;AAEZ;;ACvDD;MACsB,aAAa,CAAA;AAGlC;AAED;;;;AAIG;AACG,SAAU,kBAAkB,CAA+B,WAAoB,EAAA;IACpF,OAAO;AACN,QAAA,OAAO,EAAE,aAAa;QACtB,WAAW;KACX;AACF;;ACnBA;;AAEG;;;;"}