@rx-angular/cdk
Version:
@rx-angular/cdk is a Component Development Kit for ergonomic and highly performant angular applications. It helps to to build Large scale applications, UI libs, state management, rendering systems and much more. Furthermore the unique way of mixing reacti
1 lines • 106 kB
Source Map (JSON)
{"version":3,"file":"cdk-transformations.mjs","sources":["../tmp-esm2022/transformations/lib/_internals/guards.js","../tmp-esm2022/transformations/lib/array/extract.js","../tmp-esm2022/transformations/lib/array/insert.js","../tmp-esm2022/transformations/lib/_internals/valuesComparer.util.js","../tmp-esm2022/transformations/lib/array/remove.js","../tmp-esm2022/transformations/lib/array/toDictionary.js","../tmp-esm2022/transformations/lib/array/update.js","../tmp-esm2022/transformations/lib/array/upsert.js","../tmp-esm2022/transformations/lib/object/deleteProp.js","../tmp-esm2022/transformations/lib/object/dictionaryToArray.js","../tmp-esm2022/transformations/lib/object/patch.js","../tmp-esm2022/transformations/lib/object/setProp.js","../tmp-esm2022/transformations/lib/object/slice.js","../tmp-esm2022/transformations/lib/object/toggle.js","../tmp-esm2022/transformations/cdk-transformations.js"],"sourcesContent":["export function isKeyOf(k) {\n const typeofK = typeof k;\n return (k !== null &&\n k !== undefined &&\n ['string', 'symbol', 'number'].includes(typeofK));\n}\nexport function isObjectGuard(obj) {\n return (obj !== null &&\n obj !== undefined &&\n typeof obj === 'object' &&\n !Array.isArray(obj));\n}\nexport function isDefined(val) {\n return val !== null && val !== undefined;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhcmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvdHJhbnNmb3JtYXRpb25zL3NyYy9saWIvX2ludGVybmFscy9ndWFyZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLE9BQU8sQ0FBSSxDQUFVO0lBQ25DLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLE9BQU8sQ0FDTCxDQUFDLEtBQUssSUFBSTtRQUNWLENBQUMsS0FBSyxTQUFTO1FBQ2YsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FDakQsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLEdBQVk7SUFDeEMsT0FBTyxDQUNMLEdBQUcsS0FBSyxJQUFJO1FBQ1osR0FBRyxLQUFLLFNBQVM7UUFDakIsT0FBTyxHQUFHLEtBQUssUUFBUTtRQUN2QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQ3BCLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFZO0lBQ3BDLE9BQU8sR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssU0FBUyxDQUFDO0FBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gaXNLZXlPZjxPPihrOiB1bmtub3duKTogayBpcyBrZXlvZiBPIHtcbiAgY29uc3QgdHlwZW9mSyA9IHR5cGVvZiBrO1xuICByZXR1cm4gKFxuICAgIGsgIT09IG51bGwgJiZcbiAgICBrICE9PSB1bmRlZmluZWQgJiZcbiAgICBbJ3N0cmluZycsICdzeW1ib2wnLCAnbnVtYmVyJ10uaW5jbHVkZXModHlwZW9mSylcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0R3VhcmQob2JqOiB1bmtub3duKTogb2JqIGlzIG9iamVjdCB7XG4gIHJldHVybiAoXG4gICAgb2JqICE9PSBudWxsICYmXG4gICAgb2JqICE9PSB1bmRlZmluZWQgJiZcbiAgICB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJlxuICAgICFBcnJheS5pc0FycmF5KG9iailcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5lZCh2YWw6IHVua25vd24pOiB2YWwgaXMgTm9uTnVsbGFibGU8YW55PiB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgdmFsICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBbGxvd3MgdG8gcGFzcyBvbmx5IGtleXMgd2hpY2ggdmFsdWUgaXMgb2Ygc3BlY2lmaWMgdHlwZS5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGludGVyZmFjZSBDcmVhdHVyZSB7XG4gKiAgaWQ6IG51bWJlcjtcbiAqICB0eXBlOiBzdHJpbmc7XG4gKiAgbmFtZTogc3RyaW5nO1xuICogfVxuICpcbiAqIGNvbnN0IGNhdCA9IHtpZDogMSwgdHlwZTogJ2NhdCcsIG5hbWU6ICdGbHVmZnknfTtcbiAqXG4gKiBmdW5jdGlvbiB1cGRhdGVDcmVhdHVyZTxUPihjcmVhdHVyZTogVCwga2V5OiBPbmx5S2V5c09mU3BlY2lmaWNUeXBlPFQsIHN0cmluZz4sIHZhbHVlOiBzdHJpbmcpIHtcbiAqICAvLyB1cGRhdGUgbG9naWNcbiAqIH1cbiAqXG4gKiAvLyBWYWxpZCBrZXlcbiAqIHVwZGF0ZUNyZWF0dXJlKGNhdCwgJ25hbWUnLCAnTHVuYScpO1xuICpcbiAqIC8vIEludmFsaWQga2V5XG4gKiB1cGRhdGVDcmVhdHVyZShjYXQsICdpZCcsIDMpO1xuICpcbiAqIEBkb2NzUGFnZSBPbmx5S2V5c09mU3BlY2lmaWNUeXBlXG4gKiBAZG9jc0NhdGVnb3J5IGludGVyZmFjZXNcbiAqL1xuZXhwb3J0IHR5cGUgT25seUtleXNPZlNwZWNpZmljVHlwZTxULCBTPiA9IHtcbiAgW0tleSBpbiBrZXlvZiBUXTogUyBleHRlbmRzIFRbS2V5XSA/IEtleSA6IG5ldmVyO1xufVtrZXlvZiBUXTtcbiJdfQ==","import { isDefined, isKeyOf } from '../_internals/guards';\n/**\n * @description\n * Accepts an array of objects of type T and single key or array of keys (K extends keyof T).\n * The `exctract` method is pure and immutable, thus not touching the input values and returning a shallow\n * copy of the extracted source.\n *\n * @example\n *\n * const cats = [{id: 1, type: 'cat', name: 'Fluffy'}, {id: 2, type: 'cat', name: 'Emma'}];\n *\n * const catsWithoutTypes = extract(cats, ['name', 'id']);\n *\n * // catsWithoutTypes will be:\n * // [{id: 1, name: 'Fluffy'}, {id: 2, name: 'Emma'}];\n *\n * @example\n * // Usage with RxState\n *\n * export class AnimalsListComponent {\n *\n * constructor(private state: RxState<ComponentState>, private api: ApiService) {\n * state.connect(\n * 'animals'\n * this.api.getAnimals(),\n * (state, animals) => extract(animals, ['id', 'name'])\n * );\n * }\n * }\n *\n * @returns T\n *\n * @docsPage slice\n * @docsCategory transformation-helpers\n */\nexport function extract(array, keys) {\n const arrayIsArray = isDefined(array) && Array.isArray(array);\n if (!arrayIsArray) {\n console.warn(`extract: original value (${array}) is not an array.`);\n return undefined;\n }\n const sanitizedKeys = (Array.isArray(keys) ? keys : [keys]).filter(k => isKeyOf(k) && array.some(i => k in i));\n const length = sanitizedKeys.length;\n if (!sanitizedKeys.length) {\n console.warn(`extract: provided keys not found`);\n return undefined;\n }\n return array.map(item => {\n let i = 0;\n const result = {};\n for (i; i < length; i++) {\n result[sanitizedKeys[i]] = item[sanitizedKeys[i]];\n }\n return result;\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0cmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3RyYW5zZm9ybWF0aW9ucy9zcmMvbGliL2FycmF5L2V4dHJhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUxRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUNHO0FBQ0YsTUFBTSxVQUFVLE9BQU8sQ0FDdEIsS0FBVSxFQUNWLElBQWE7SUFFYixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU5RCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsS0FBSyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3BFLE9BQU8sU0FBZ0IsQ0FBQztJQUMxQixDQUFDO0lBRUQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQ2hFLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQzlDLENBQUM7SUFDRixNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO0lBRXBDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUIsT0FBTyxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sU0FBZ0IsQ0FBQztJQUMxQixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLE1BQU0sTUFBTSxHQUFHLEVBQWdCLENBQUM7UUFFaEMsS0FBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FDQSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRGVmaW5lZCwgaXNLZXlPZiB9IGZyb20gJy4uL19pbnRlcm5hbHMvZ3VhcmRzJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFjY2VwdHMgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvZiB0eXBlIFQgYW5kIHNpbmdsZSBrZXkgb3IgYXJyYXkgb2Yga2V5cyAoSyBleHRlbmRzIGtleW9mIFQpLlxuICogVGhlIGBleGN0cmFjdGAgbWV0aG9kIGlzIHB1cmUgYW5kIGltbXV0YWJsZSwgdGh1cyBub3QgdG91Y2hpbmcgdGhlIGlucHV0IHZhbHVlcyBhbmQgcmV0dXJuaW5nIGEgc2hhbGxvd1xuICogY29weSBvZiB0aGUgZXh0cmFjdGVkIHNvdXJjZS5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGNvbnN0IGNhdHMgPSBbe2lkOiAxLCB0eXBlOiAnY2F0JywgbmFtZTogJ0ZsdWZmeSd9LCB7aWQ6IDIsIHR5cGU6ICdjYXQnLCBuYW1lOiAnRW1tYSd9XTtcbiAqXG4gKiBjb25zdCBjYXRzV2l0aG91dFR5cGVzID0gZXh0cmFjdChjYXRzLCBbJ25hbWUnLCAnaWQnXSk7XG4gKlxuICogLy8gY2F0c1dpdGhvdXRUeXBlcyB3aWxsIGJlOlxuICogLy8gW3tpZDogMSwgbmFtZTogJ0ZsdWZmeSd9LCB7aWQ6IDIsIG5hbWU6ICdFbW1hJ31dO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBVc2FnZSB3aXRoIFJ4U3RhdGVcbiAqXG4gKiBleHBvcnQgY2xhc3MgQW5pbWFsc0xpc3RDb21wb25lbnQge1xuICpcbiAqICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RhdGU6IFJ4U3RhdGU8Q29tcG9uZW50U3RhdGU+LCBwcml2YXRlIGFwaTogQXBpU2VydmljZSkge1xuICogICAgICBzdGF0ZS5jb25uZWN0KFxuICogICAgICAgICdhbmltYWxzJ1xuICogICAgICAgIHRoaXMuYXBpLmdldEFuaW1hbHMoKSxcbiAqICAgICAgICAoc3RhdGUsIGFuaW1hbHMpID0+IGV4dHJhY3QoYW5pbWFscywgWydpZCcsICduYW1lJ10pXG4gKiAgICAgICk7XG4gKiAgICB9XG4gKiB9XG4gKlxuICogQHJldHVybnMgVFxuICpcbiAqIEBkb2NzUGFnZSBzbGljZVxuICogQGRvY3NDYXRlZ29yeSB0cmFuc2Zvcm1hdGlvbi1oZWxwZXJzXG4gKi9cbiBleHBvcnQgZnVuY3Rpb24gZXh0cmFjdDxUIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMga2V5b2YgVD4oXG4gIGFycmF5OiBUW10sXG4gIGtleXM6IEsgfCBLW11cbik6IFBpY2s8VCwgSz5bXSB7XG4gIGNvbnN0IGFycmF5SXNBcnJheSA9IGlzRGVmaW5lZChhcnJheSkgJiYgQXJyYXkuaXNBcnJheShhcnJheSk7XG5cbiAgaWYgKCFhcnJheUlzQXJyYXkpIHtcbiAgICBjb25zb2xlLndhcm4oYGV4dHJhY3Q6IG9yaWdpbmFsIHZhbHVlICgke2FycmF5fSkgaXMgbm90IGFuIGFycmF5LmApO1xuICAgIHJldHVybiB1bmRlZmluZWQgYXMgYW55O1xuICB9XG5cbiAgY29uc3Qgc2FuaXRpemVkS2V5cyA9IChBcnJheS5pc0FycmF5KGtleXMpID8ga2V5cyA6IFtrZXlzXSkuZmlsdGVyKFxuICAgIGsgPT4gaXNLZXlPZjxUPihrKSAmJiBhcnJheS5zb21lKGkgPT4gayBpbiBpKVxuICApO1xuICBjb25zdCBsZW5ndGggPSBzYW5pdGl6ZWRLZXlzLmxlbmd0aDtcblxuICBpZiAoIXNhbml0aXplZEtleXMubGVuZ3RoKSB7XG4gICAgY29uc29sZS53YXJuKGBleHRyYWN0OiBwcm92aWRlZCBrZXlzIG5vdCBmb3VuZGApO1xuICAgIHJldHVybiB1bmRlZmluZWQgYXMgYW55O1xuICB9XG5cbiAgcmV0dXJuIGFycmF5Lm1hcChpdGVtID0+IHtcbiAgICBsZXQgaSA9IDA7XG4gICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUGljazxULCBLPjtcblxuICAgIGZvcihpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtzYW5pdGl6ZWRLZXlzW2ldXSA9IGl0ZW1bc2FuaXRpemVkS2V5c1tpXV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICApO1xufVxuIl19","import { isDefined } from '../_internals/guards';\n/**\n * @description\n * Inserts one or multiple items to an array T[].\n * Returns a shallow copy of the updated array T[], and does not mutate the original one.\n *\n * @example\n * // Inserting single value\n *\n * const creatures = [{id: 1, type: 'cat'}, {id: 2, type: 'dog'}];\n *\n * const updatedCreatures = insert(creatures, {id: 3, type: 'parrot'});\n *\n * // updatedCreatures will be:\n * // [{id: 1, type: 'cat'}, {id: 2, type: 'dog}, {id: 3, type: 'parrot}];\n *\n * @example\n * // Inserting multiple values\n *\n * const creatures = [{id: 1, type: 'cat'}, {id: 2, type: 'dog'}];\n *\n * const updatedCreatures = insert(creatures, [{id: 3, type: 'parrot'}, {id: 4, type: 'hamster'}]);\n *\n * // updatedCreatures will be:\n * // [{id: 1, type: 'cat'}, {id: 2, type: 'dog'}, {id: 3, type: 'parrot'}, {id: 4, type: 'hamster'}];\n *\n * @example\n * // Usage with RxState\n *\n * export class ListComponent {\n *\n * readonly insertCreature$ = new Subject<void>();\n *\n * constructor(private state: RxState<ComponentState>) {\n * // Reactive implementation\n * state.connect(\n * 'creatures',\n * this.insertCreature$,\n * ({ creatures }) => {\n * const creatureToAdd = {id: generateId(), name: 'newCreature', type: 'dinosaur' };\n * return insert(creatures, creatureToAdd);\n * }\n * );\n * }\n *\n * // Imperative implementation\n * insertCeature(): void {\n * const creatureToAdd = {id: generateId(), name: 'newCreature', type: 'dinosaur' };\n * this.state.set({ creatures: insert(this.state.get().creatures, creatureToAdd)});\n * }\n * }\n *\n *\n * @returns T[]\n *\n * @docsPage insert\n * @docsCategory transformation-helpers\n */\nexport function insert(source, updates) {\n const updatesDefined = isDefined(updates);\n const sourceIsNotArray = !Array.isArray(source);\n const invalidInput = sourceIsNotArray && !updatesDefined;\n if (sourceIsNotArray && isDefined(source)) {\n console.warn(`Insert: Original value (${source}) is not an array.`);\n }\n if (invalidInput) {\n return source;\n }\n return (sourceIsNotArray ? [] : source).concat(updatesDefined ? (Array.isArray(updates) ? updates : [updates]) : []);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zZXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvdHJhbnNmb3JtYXRpb25zL3NyYy9saWIvYXJyYXkvaW5zZXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3REc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFJLE1BQVcsRUFBRSxPQUFnQjtJQUNyRCxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLElBQUksQ0FBQyxjQUFjLENBQUM7SUFFekQsSUFBSSxnQkFBZ0IsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMxQyxPQUFPLENBQUMsSUFBSSxDQUFDLDJCQUEyQixNQUFNLG9CQUFvQixDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELElBQUksWUFBWSxFQUFFLENBQUM7UUFDakIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQzVDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUNyRSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRGVmaW5lZCB9IGZyb20gJy4uL19pbnRlcm5hbHMvZ3VhcmRzJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEluc2VydHMgb25lIG9yIG11bHRpcGxlIGl0ZW1zIHRvIGFuIGFycmF5IFRbXS5cbiAqIFJldHVybnMgYSBzaGFsbG93IGNvcHkgb2YgdGhlIHVwZGF0ZWQgYXJyYXkgVFtdLCBhbmQgZG9lcyBub3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBvbmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEluc2VydGluZyBzaW5nbGUgdmFsdWVcbiAqXG4gKiBjb25zdCBjcmVhdHVyZXMgPSBbe2lkOiAxLCB0eXBlOiAnY2F0J30sIHtpZDogMiwgdHlwZTogJ2RvZyd9XTtcbiAqXG4gKiBjb25zdCB1cGRhdGVkQ3JlYXR1cmVzID0gaW5zZXJ0KGNyZWF0dXJlcywge2lkOiAzLCB0eXBlOiAncGFycm90J30pO1xuICpcbiAqIC8vIHVwZGF0ZWRDcmVhdHVyZXMgd2lsbCBiZTpcbiAqIC8vICBbe2lkOiAxLCB0eXBlOiAnY2F0J30sIHtpZDogMiwgdHlwZTogJ2RvZ30sIHtpZDogMywgdHlwZTogJ3BhcnJvdH1dO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJbnNlcnRpbmcgbXVsdGlwbGUgdmFsdWVzXG4gKlxuICogY29uc3QgY3JlYXR1cmVzID0gW3tpZDogMSwgdHlwZTogJ2NhdCd9LCB7aWQ6IDIsIHR5cGU6ICdkb2cnfV07XG4gKlxuICogY29uc3QgdXBkYXRlZENyZWF0dXJlcyA9IGluc2VydChjcmVhdHVyZXMsIFt7aWQ6IDMsIHR5cGU6ICdwYXJyb3QnfSwge2lkOiA0LCB0eXBlOiAnaGFtc3Rlcid9XSk7XG4gKlxuICogLy8gdXBkYXRlZENyZWF0dXJlcyB3aWxsIGJlOlxuICogLy8gW3tpZDogMSwgdHlwZTogJ2NhdCd9LCB7aWQ6IDIsIHR5cGU6ICdkb2cnfSwge2lkOiAzLCB0eXBlOiAncGFycm90J30sIHtpZDogNCwgdHlwZTogJ2hhbXN0ZXInfV07XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFVzYWdlIHdpdGggUnhTdGF0ZVxuICpcbiAqIGV4cG9ydCBjbGFzcyBMaXN0Q29tcG9uZW50IHtcbiAqXG4gKiAgICByZWFkb25seSBpbnNlcnRDcmVhdHVyZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICpcbiAqICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RhdGU6IFJ4U3RhdGU8Q29tcG9uZW50U3RhdGU+KSB7XG4gKiAgICAgIC8vIFJlYWN0aXZlIGltcGxlbWVudGF0aW9uXG4gKiAgICAgIHN0YXRlLmNvbm5lY3QoXG4gKiAgICAgICAgJ2NyZWF0dXJlcycsXG4gKiAgICAgICAgdGhpcy5pbnNlcnRDcmVhdHVyZSQsXG4gKiAgICAgICAgKHsgY3JlYXR1cmVzIH0pID0+IHtcbiAqICAgICAgICAgICAgY29uc3QgY3JlYXR1cmVUb0FkZCA9IHtpZDogZ2VuZXJhdGVJZCgpLCBuYW1lOiAnbmV3Q3JlYXR1cmUnLCB0eXBlOiAnZGlub3NhdXInIH07XG4gKiAgICAgICAgICAgIHJldHVybiBpbnNlcnQoY3JlYXR1cmVzLCBjcmVhdHVyZVRvQWRkKTtcbiAqICAgICAgICB9XG4gKiAgICAgICk7XG4gKiAgICB9XG4gKlxuICogICAgLy8gSW1wZXJhdGl2ZSBpbXBsZW1lbnRhdGlvblxuICogICAgaW5zZXJ0Q2VhdHVyZSgpOiB2b2lkIHtcbiAqICAgICAgICBjb25zdCBjcmVhdHVyZVRvQWRkID0ge2lkOiBnZW5lcmF0ZUlkKCksIG5hbWU6ICduZXdDcmVhdHVyZScsIHR5cGU6ICdkaW5vc2F1cicgfTtcbiAqICAgICAgICB0aGlzLnN0YXRlLnNldCh7IGNyZWF0dXJlczogaW5zZXJ0KHRoaXMuc3RhdGUuZ2V0KCkuY3JlYXR1cmVzLCBjcmVhdHVyZVRvQWRkKX0pO1xuICogICAgfVxuICogfVxuICpcbiAqXG4gKiBAcmV0dXJucyBUW11cbiAqXG4gKiBAZG9jc1BhZ2UgaW5zZXJ0XG4gKiBAZG9jc0NhdGVnb3J5IHRyYW5zZm9ybWF0aW9uLWhlbHBlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc2VydDxUPihzb3VyY2U6IFRbXSwgdXBkYXRlczogVCB8IFRbXSk6IFRbXSB7XG4gIGNvbnN0IHVwZGF0ZXNEZWZpbmVkID0gaXNEZWZpbmVkKHVwZGF0ZXMpO1xuICBjb25zdCBzb3VyY2VJc05vdEFycmF5ID0gIUFycmF5LmlzQXJyYXkoc291cmNlKTtcbiAgY29uc3QgaW52YWxpZElucHV0ID0gc291cmNlSXNOb3RBcnJheSAmJiAhdXBkYXRlc0RlZmluZWQ7XG5cbiAgaWYgKHNvdXJjZUlzTm90QXJyYXkgJiYgaXNEZWZpbmVkKHNvdXJjZSkpIHtcbiAgICBjb25zb2xlLndhcm4oYEluc2VydDogT3JpZ2luYWwgdmFsdWUgKCR7c291cmNlfSkgaXMgbm90IGFuIGFycmF5LmApO1xuICB9XG5cbiAgaWYgKGludmFsaWRJbnB1dCkge1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICByZXR1cm4gKHNvdXJjZUlzTm90QXJyYXkgPyBbXSA6IHNvdXJjZSkuY29uY2F0KFxuICAgIHVwZGF0ZXNEZWZpbmVkID8gKEFycmF5LmlzQXJyYXkodXBkYXRlcykgPyB1cGRhdGVzIDogW3VwZGF0ZXNdKSA6IFtdXG4gICk7XG59XG4iXX0=","import { isKeyOf } from '../_internals/guards';\nconst defaultCompareFn = (a, b) => a === b;\nexport function valuesComparer(original, incoming, compare) {\n if (isKeyOf(compare)) {\n return original[compare] === incoming[compare];\n }\n if (Array.isArray(compare)) {\n const sanitizedKeys = compare.filter((k) => isKeyOf(k));\n return sanitizedKeys.length > 0\n ? sanitizedKeys.every((k) => original[k] === incoming[k])\n : defaultCompareFn(original, incoming);\n }\n return (compare || defaultCompareFn)(original, incoming);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWVzQ29tcGFyZXIudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3RyYW5zZm9ybWF0aW9ucy9zcmMvbGliL19pbnRlcm5hbHMvdmFsdWVzQ29tcGFyZXIudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJL0MsTUFBTSxnQkFBZ0IsR0FBRyxDQUFJLENBQUksRUFBRSxDQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFcEQsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsUUFBVyxFQUNYLFFBQVcsRUFDWCxPQUEyQjtJQUUzQixJQUFJLE9BQU8sQ0FBSSxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDM0IsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsT0FBTyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDN0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekQsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsT0FBTyxDQUFFLE9BQXdCLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDN0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzS2V5T2YgfSBmcm9tICcuLi9faW50ZXJuYWxzL2d1YXJkcyc7XG5pbXBvcnQgeyBDb21wYXJlRm4gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbXBhcmFibGUtZGF0YS10eXBlJztcbmltcG9ydCB7IENvbXBhcmFibGVEYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jb21wYXJhYmxlLWRhdGEtdHlwZSc7XG5cbmNvbnN0IGRlZmF1bHRDb21wYXJlRm4gPSA8VD4oYTogVCwgYjogVCkgPT4gYSA9PT0gYjtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc0NvbXBhcmVyPFQ+KFxuICBvcmlnaW5hbDogVCxcbiAgaW5jb21pbmc6IFQsXG4gIGNvbXBhcmU/OiBDb21wYXJhYmxlRGF0YTxUPlxuKTogYm9vbGVhbiB7XG4gIGlmIChpc0tleU9mPFQ+KGNvbXBhcmUpKSB7XG4gICAgcmV0dXJuIG9yaWdpbmFsW2NvbXBhcmVdID09PSBpbmNvbWluZ1tjb21wYXJlXTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGNvbXBhcmUpKSB7XG4gICAgY29uc3Qgc2FuaXRpemVkS2V5cyA9IGNvbXBhcmUuZmlsdGVyKChrKSA9PiBpc0tleU9mPFQ+KGspKTtcbiAgICByZXR1cm4gc2FuaXRpemVkS2V5cy5sZW5ndGggPiAwXG4gICAgICA/IHNhbml0aXplZEtleXMuZXZlcnkoKGspID0+IG9yaWdpbmFsW2tdID09PSBpbmNvbWluZ1trXSlcbiAgICAgIDogZGVmYXVsdENvbXBhcmVGbihvcmlnaW5hbCwgaW5jb21pbmcpO1xuICB9XG5cbiAgcmV0dXJuICgoY29tcGFyZSBhcyBDb21wYXJlRm48VD4pIHx8IGRlZmF1bHRDb21wYXJlRm4pKG9yaWdpbmFsLCBpbmNvbWluZyk7XG59XG4iXX0=","import { isDefined } from '../_internals/guards';\nimport { valuesComparer } from '../_internals/valuesComparer.util';\n/**\n * @description\n * Removes one or multiple items from an array T[].\n * For comparison you can provide a key, an array of keys or a custom comparison function that should return true if items match.\n * If no comparison data is provided, an equality check is used by default.\n * Returns a shallow copy of the updated array T[], and does not mutate the original one.\n *\n * @example\n * // Removing value without comparison data\n *\n * const items = [1,2,3,4,5];\n *\n * const updatedItems = remove(items, [1,2,3]);\n *\n * // updatedItems will be: [4,5];\n *\n * @example\n * // Removing values with comparison function\n *\n * const creatures = [{id: 1, type: 'cat'}, {id: 2, type: 'unicorn'}, {id: 3, type: 'kobold'}];\n *\n * const nonExistingCreatures = [{id: 2, type: 'unicorn'}, {id: 3, type: 'kobold'}];\n *\n * const realCreatures = remove(creatures, nonExistingCreatures, (a, b) => a.id === b.id);\n *\n * // realCreatures will be: [{id: 1, type: 'cat'}];\n *\n * @example\n * // Removing values with key\n *\n * const creatures = [{id: 1, type: 'cat'}, {id: 2, type: 'unicorn'}, {id: 3, type: 'kobold'}];\n *\n * const nonExistingCreatures = [{id: 2, type: 'unicorn'}, {id: 3, type: 'kobold'}];\n *\n * const realCreatures = remove(creatures, nonExistingCreatures, 'id');\n *\n * // realCreatures will be: [{id: 1, type: 'cat'}];\n *\n * @example\n * // Removing values with array of keys\n *\n * const creatures = [{id: 1, type: 'cat'}, {id: 2, type: 'unicorn'}, {id: 3, type: 'kobold'}];\n *\n * const nonExistingCreatures = [{id: 2, type: 'unicorn'}, {id: 3, type: 'kobold'}];\n *\n * const realCreatures = remove(creatures, nonExistingCreatures, ['id', 'type']);\n *\n * // realCreatures will be: [{id: 1, type: 'cat'}];\n *\n * @example\n * // Usage with RxState\n *\n * export class ListComponent {\n *\n * readonly removeCreature$ = new Subject<Creature>();\n *\n * constructor(private state: RxState<ComponentState>) {\n * // Reactive implementation\n * state.connect(\n * 'creatures',\n * this.removeCreature$,\n * ({ creatures }, creatureToRemove) => {\n * return remove(creatures, creatureToRemove, (a, b) => a.id === b.id);\n * }\n * );\n * }\n *\n * // Imperative implementation\n * removeCreature(creatureToRemove: Creature): void {\n * this.state.set({ creatures: remove(this.state.get().creatures, creatureToRemove, (a, b) => a.id === b.id)});\n * }\n * }\n *\n * @returns T[]\n *\n * @docsPage remove\n * @docsCategory transformation-helpers\n */\nexport function remove(source, scrap, compare) {\n const scrapAsArray = isDefined(scrap)\n ? Array.isArray(scrap)\n ? scrap\n : [scrap]\n : [];\n const invalidInput = !Array.isArray(source);\n if (invalidInput) {\n console.warn(`Remove: original value (${source}) is not an array`);\n return source;\n }\n return source.filter((existingItem) => {\n return !scrapAsArray.some((item) => valuesComparer(item, existingItem, compare));\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3ZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvdHJhbnNmb3JtYXRpb25zL3NyYy9saWIvYXJyYXkvcmVtb3ZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHbkU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkVHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FDcEIsTUFBVyxFQUNYLEtBQWdDLEVBQ2hDLE9BQTJCO0lBRTNCLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDbkMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3BCLENBQUMsQ0FBQyxLQUFLO1lBQ1AsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNQLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU1QyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLE1BQU0sbUJBQW1CLENBQUMsQ0FBQztRQUNuRSxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7UUFDcEMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNqQyxjQUFjLENBQUMsSUFBUyxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FDakQsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRGVmaW5lZCB9IGZyb20gJy4uL19pbnRlcm5hbHMvZ3VhcmRzJztcbmltcG9ydCB7IHZhbHVlc0NvbXBhcmVyIH0gZnJvbSAnLi4vX2ludGVybmFscy92YWx1ZXNDb21wYXJlci51dGlsJztcbmltcG9ydCB7IENvbXBhcmFibGVEYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jb21wYXJhYmxlLWRhdGEtdHlwZSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZW1vdmVzIG9uZSBvciBtdWx0aXBsZSBpdGVtcyBmcm9tIGFuIGFycmF5IFRbXS5cbiAqIEZvciBjb21wYXJpc29uIHlvdSBjYW4gcHJvdmlkZSBhIGtleSwgYW4gYXJyYXkgb2Yga2V5cyBvciBhIGN1c3RvbSBjb21wYXJpc29uIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIHJldHVybiB0cnVlIGlmIGl0ZW1zIG1hdGNoLlxuICogSWYgbm8gY29tcGFyaXNvbiBkYXRhIGlzIHByb3ZpZGVkLCBhbiBlcXVhbGl0eSBjaGVjayBpcyB1c2VkIGJ5IGRlZmF1bHQuXG4gKiBSZXR1cm5zIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSB1cGRhdGVkIGFycmF5IFRbXSwgYW5kIGRvZXMgbm90IG11dGF0ZSB0aGUgb3JpZ2luYWwgb25lLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZW1vdmluZyB2YWx1ZSB3aXRob3V0IGNvbXBhcmlzb24gZGF0YVxuICpcbiAqIGNvbnN0IGl0ZW1zID0gWzEsMiwzLDQsNV07XG4gKlxuICogY29uc3QgdXBkYXRlZEl0ZW1zID0gcmVtb3ZlKGl0ZW1zLCBbMSwyLDNdKTtcbiAqXG4gKiAvLyB1cGRhdGVkSXRlbXMgd2lsbCBiZTogWzQsNV07XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlbW92aW5nIHZhbHVlcyB3aXRoIGNvbXBhcmlzb24gZnVuY3Rpb25cbiAqXG4gKiBjb25zdCBjcmVhdHVyZXMgPSBbe2lkOiAxLCB0eXBlOiAnY2F0J30sIHtpZDogMiwgdHlwZTogJ3VuaWNvcm4nfSwge2lkOiAzLCB0eXBlOiAna29ib2xkJ31dO1xuICpcbiAqIGNvbnN0IG5vbkV4aXN0aW5nQ3JlYXR1cmVzID0gW3tpZDogMiwgdHlwZTogJ3VuaWNvcm4nfSwge2lkOiAzLCB0eXBlOiAna29ib2xkJ31dO1xuICpcbiAqIGNvbnN0IHJlYWxDcmVhdHVyZXMgPSByZW1vdmUoY3JlYXR1cmVzLCBub25FeGlzdGluZ0NyZWF0dXJlcywgKGEsIGIpID0+IGEuaWQgPT09IGIuaWQpO1xuICpcbiAqIC8vIHJlYWxDcmVhdHVyZXMgd2lsbCBiZTogW3tpZDogMSwgdHlwZTogJ2NhdCd9XTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVtb3ZpbmcgdmFsdWVzIHdpdGgga2V5XG4gKlxuICogY29uc3QgY3JlYXR1cmVzID0gW3tpZDogMSwgdHlwZTogJ2NhdCd9LCB7aWQ6IDIsIHR5cGU6ICd1bmljb3JuJ30sIHtpZDogMywgdHlwZTogJ2tvYm9sZCd9XTtcbiAqXG4gKiBjb25zdCBub25FeGlzdGluZ0NyZWF0dXJlcyA9IFt7aWQ6IDIsIHR5cGU6ICd1bmljb3JuJ30sIHtpZDogMywgdHlwZTogJ2tvYm9sZCd9XTtcbiAqXG4gKiBjb25zdCByZWFsQ3JlYXR1cmVzID0gcmVtb3ZlKGNyZWF0dXJlcywgbm9uRXhpc3RpbmdDcmVhdHVyZXMsICdpZCcpO1xuICpcbiAqIC8vIHJlYWxDcmVhdHVyZXMgd2lsbCBiZTogW3tpZDogMSwgdHlwZTogJ2NhdCd9XTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVtb3ZpbmcgdmFsdWVzIHdpdGggYXJyYXkgb2Yga2V5c1xuICpcbiAqIGNvbnN0IGNyZWF0dXJlcyA9IFt7aWQ6IDEsIHR5cGU6ICdjYXQnfSwge2lkOiAyLCB0eXBlOiAndW5pY29ybid9LCB7aWQ6IDMsIHR5cGU6ICdrb2JvbGQnfV07XG4gKlxuICogY29uc3Qgbm9uRXhpc3RpbmdDcmVhdHVyZXMgPSBbe2lkOiAyLCB0eXBlOiAndW5pY29ybid9LCB7aWQ6IDMsIHR5cGU6ICdrb2JvbGQnfV07XG4gKlxuICogY29uc3QgcmVhbENyZWF0dXJlcyA9IHJlbW92ZShjcmVhdHVyZXMsIG5vbkV4aXN0aW5nQ3JlYXR1cmVzLCBbJ2lkJywgJ3R5cGUnXSk7XG4gKlxuICogLy8gcmVhbENyZWF0dXJlcyB3aWxsIGJlOiBbe2lkOiAxLCB0eXBlOiAnY2F0J31dO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBVc2FnZSB3aXRoIFJ4U3RhdGVcbiAqXG4gKiBleHBvcnQgY2xhc3MgTGlzdENvbXBvbmVudCB7XG4gKlxuICogICAgcmVhZG9ubHkgcmVtb3ZlQ3JlYXR1cmUkID0gbmV3IFN1YmplY3Q8Q3JlYXR1cmU+KCk7XG4gKlxuICogICAgY29uc3RydWN0b3IocHJpdmF0ZSBzdGF0ZTogUnhTdGF0ZTxDb21wb25lbnRTdGF0ZT4pIHtcbiAqICAgICAgLy8gUmVhY3RpdmUgaW1wbGVtZW50YXRpb25cbiAqICAgICAgc3RhdGUuY29ubmVjdChcbiAqICAgICAgICAnY3JlYXR1cmVzJyxcbiAqICAgICAgICB0aGlzLnJlbW92ZUNyZWF0dXJlJCxcbiAqICAgICAgICAoeyBjcmVhdHVyZXMgfSwgY3JlYXR1cmVUb1JlbW92ZSkgPT4ge1xuICogICAgICAgICAgICByZXR1cm4gcmVtb3ZlKGNyZWF0dXJlcywgY3JlYXR1cmVUb1JlbW92ZSwgKGEsIGIpID0+IGEuaWQgPT09IGIuaWQpO1xuICogICAgICAgIH1cbiAqICAgICAgKTtcbiAqICAgIH1cbiAqXG4gKiAgICAvLyBJbXBlcmF0aXZlIGltcGxlbWVudGF0aW9uXG4gKiAgICByZW1vdmVDcmVhdHVyZShjcmVhdHVyZVRvUmVtb3ZlOiBDcmVhdHVyZSk6IHZvaWQge1xuICogICAgICAgIHRoaXMuc3RhdGUuc2V0KHsgY3JlYXR1cmVzOiByZW1vdmUodGhpcy5zdGF0ZS5nZXQoKS5jcmVhdHVyZXMsIGNyZWF0dXJlVG9SZW1vdmUsIChhLCBiKSA9PiBhLmlkID09PSBiLmlkKX0pO1xuICogICAgfVxuICogfVxuICpcbiAqIEByZXR1cm5zIFRbXVxuICpcbiAqIEBkb2NzUGFnZSByZW1vdmVcbiAqIEBkb2NzQ2F0ZWdvcnkgdHJhbnNmb3JtYXRpb24taGVscGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlPFQ+KFxuICBzb3VyY2U6IFRbXSxcbiAgc2NyYXA6IFBhcnRpYWw8VD5bXSB8IFBhcnRpYWw8VD4sXG4gIGNvbXBhcmU/OiBDb21wYXJhYmxlRGF0YTxUPlxuKTogVFtdIHtcbiAgY29uc3Qgc2NyYXBBc0FycmF5ID0gaXNEZWZpbmVkKHNjcmFwKVxuICAgID8gQXJyYXkuaXNBcnJheShzY3JhcClcbiAgICAgID8gc2NyYXBcbiAgICAgIDogW3NjcmFwXVxuICAgIDogW107XG4gIGNvbnN0IGludmFsaWRJbnB1dCA9ICFBcnJheS5pc0FycmF5KHNvdXJjZSk7XG5cbiAgaWYgKGludmFsaWRJbnB1dCkge1xuICAgIGNvbnNvbGUud2FybihgUmVtb3ZlOiBvcmlnaW5hbCB2YWx1ZSAoJHtzb3VyY2V9KSBpcyBub3QgYW4gYXJyYXlgKTtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZS5maWx0ZXIoKGV4aXN0aW5nSXRlbSkgPT4ge1xuICAgIHJldHVybiAhc2NyYXBBc0FycmF5LnNvbWUoKGl0ZW0pID0+XG4gICAgICB2YWx1ZXNDb21wYXJlcihpdGVtIGFzIFQsIGV4aXN0aW5nSXRlbSwgY29tcGFyZSlcbiAgICApO1xuICB9KTtcbn1cbiJdfQ==","import { isDefined, isKeyOf, } from '../_internals/guards';\n/**\n * @description\n * Converts an array of objects to a dictionary {[key: string]: T}.\n * Accepts array T[] and key of type string, number or symbol as inputs.\n *\n *\n * @example\n *\n * const creatures = [{id: 1, type: 'cat'}, {id: 2, type: 'dog'}, {id: 3, type: 'parrot'}];\n *\n * const creaturesDictionary = toDictionary(creatures, 'id');\n *\n * // creaturesDictionary will be:\n * // {\n * // 1: {id: 1, type: 'cat'},\n * // 2: {id: 2, type: 'dog'},\n * // 3: {id: 3, type: 'parrot'}\n * // };\n * @example\n * // Usage with RxState\n *\n * export class ListComponent {\n *\n * readonly convertToDictionary$ = new Subject();\n *\n * constructor(private state: RxState<ComponentState>) {\n * // Reactive implementation\n * state.connect(\n * 'creaturesDictionary',\n * this.convertToDictionary$,\n * ({ creatures }) => {\n * return toDictionary(creatures, 'id');\n * }\n * );\n * }\n *\n * // Imperative implementation\n * convertToDictionary(): void {\n * this.state.set({ creaturesDictionary: toDictionary(this.state.get().creatures, 'id'});\n * }\n * }\n *\n * @see {@link OnlyKeysOfSpecificType}\n * @param {OnlyKeysOfSpecificType<T, S>} key\n * @returns { [key: string]: T[] }\n * @docsPage toDictionary\n * @docsCategory transformation-helpers\n */\nexport function toDictionary(source, key) {\n if (!isDefined(source)) {\n return source;\n }\n const sourceEmpty = !source.length;\n if (!Array.isArray(source) || sourceEmpty || !isKeyOf(source[0][key])) {\n if (!sourceEmpty) {\n console.warn('ToDictionary: unexpected input params.');\n }\n return {};\n }\n const dictionary = {};\n const length = source.length;\n let i = 0;\n for (i; i < length; i++) {\n dictionary[`${source[i][key]}`] = Object.assign(Object.create(Object.getPrototypeOf(source[i])), source[i]);\n }\n return dictionary;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9EaWN0aW9uYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvdHJhbnNmb3JtYXRpb25zL3NyYy9saWIvYXJyYXkvdG9EaWN0aW9uYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsT0FBTyxHQUVSLE1BQU0sc0JBQXNCLENBQUM7QUFFOUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0NHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsTUFBVyxFQUNYLEdBR3FDO0lBRXJDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN2QixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBRW5DLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3pFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sVUFBVSxHQUF5QixFQUFFLENBQUM7SUFDNUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFVixLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDeEIsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDL0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUNWLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGlzRGVmaW5lZCxcbiAgaXNLZXlPZixcbiAgT25seUtleXNPZlNwZWNpZmljVHlwZSxcbn0gZnJvbSAnLi4vX2ludGVybmFscy9ndWFyZHMnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydHMgYW4gYXJyYXkgb2Ygb2JqZWN0cyB0byBhIGRpY3Rpb25hcnkge1trZXk6IHN0cmluZ106IFR9LlxuICogQWNjZXB0cyBhcnJheSBUW10gYW5kIGtleSBvZiB0eXBlIHN0cmluZywgbnVtYmVyIG9yIHN5bWJvbCBhcyBpbnB1dHMuXG4gKlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogY29uc3QgY3JlYXR1cmVzID0gW3tpZDogMSwgdHlwZTogJ2NhdCd9LCB7aWQ6IDIsIHR5cGU6ICdkb2cnfSwge2lkOiAzLCB0eXBlOiAncGFycm90J31dO1xuICpcbiAqIGNvbnN0IGNyZWF0dXJlc0RpY3Rpb25hcnkgPSB0b0RpY3Rpb25hcnkoY3JlYXR1cmVzLCAnaWQnKTtcbiAqXG4gKiAvLyBjcmVhdHVyZXNEaWN0aW9uYXJ5IHdpbGwgYmU6XG4gKiAvLyB7XG4gKiAvLyAgMToge2lkOiAxLCB0eXBlOiAnY2F0J30sXG4gKiAvLyAgMjoge2lkOiAyLCB0eXBlOiAnZG9nJ30sXG4gKiAvLyAgMzoge2lkOiAzLCB0eXBlOiAncGFycm90J31cbiAqIC8vIH07XG4gKiBAZXhhbXBsZVxuICogLy8gVXNhZ2Ugd2l0aCBSeFN0YXRlXG4gKlxuICogZXhwb3J0IGNsYXNzIExpc3RDb21wb25lbnQge1xuICpcbiAqICAgIHJlYWRvbmx5IGNvbnZlcnRUb0RpY3Rpb25hcnkkID0gbmV3IFN1YmplY3QoKTtcbiAqXG4gKiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0YXRlOiBSeFN0YXRlPENvbXBvbmVudFN0YXRlPikge1xuICogICAgICAvLyBSZWFjdGl2ZSBpbXBsZW1lbnRhdGlvblxuICogICAgICBzdGF0ZS5jb25uZWN0KFxuICogICAgICAgICdjcmVhdHVyZXNEaWN0aW9uYXJ5JyxcbiAqICAgICAgICB0aGlzLmNvbnZlcnRUb0RpY3Rpb25hcnkkLFxuICogICAgICAgICh7IGNyZWF0dXJlcyB9KSA9PiB7XG4gKiAgICAgICAgICAgIHJldHVybiB0b0RpY3Rpb25hcnkoY3JlYXR1cmVzLCAnaWQnKTtcbiAqICAgICAgICB9XG4gKiAgICAgICk7XG4gKiAgICB9XG4gKlxuICogICAgLy8gSW1wZXJhdGl2ZSBpbXBsZW1lbnRhdGlvblxuICogICAgY29udmVydFRvRGljdGlvbmFyeSgpOiB2b2lkIHtcbiAqICAgICAgICB0aGlzLnN0YXRlLnNldCh7IGNyZWF0dXJlc0RpY3Rpb25hcnk6IHRvRGljdGlvbmFyeSh0aGlzLnN0YXRlLmdldCgpLmNyZWF0dXJlcywgJ2lkJ30pO1xuICogICAgfVxuICogfVxuICpcbiAqIEBzZWUge0BsaW5rIE9ubHlLZXlzT2ZTcGVjaWZpY1R5cGV9XG4gKiBAcGFyYW0ge09ubHlLZXlzT2ZTcGVjaWZpY1R5cGU8VCwgUz59IGtleVxuICogQHJldHVybnMgeyBba2V5OiBzdHJpbmddOiBUW10gfVxuICogQGRvY3NQYWdlIHRvRGljdGlvbmFyeVxuICogQGRvY3NDYXRlZ29yeSB0cmFuc2Zvcm1hdGlvbi1oZWxwZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0RpY3Rpb25hcnk8VCBleHRlbmRzIG9iamVjdD4oXG4gIHNvdXJjZTogVFtdLFxuICBrZXk6XG4gICAgfCBPbmx5S2V5c09mU3BlY2lmaWNUeXBlPFQsIG51bWJlcj5cbiAgICB8IE9ubHlLZXlzT2ZTcGVjaWZpY1R5cGU8VCwgc3RyaW5nPlxuICAgIHwgT25seUtleXNPZlNwZWNpZmljVHlwZTxULCBzeW1ib2w+LFxuKTogeyBba2V5OiBzdHJpbmddOiBUIH0ge1xuICBpZiAoIWlzRGVmaW5lZChzb3VyY2UpKSB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZUVtcHR5ID0gIXNvdXJjZS5sZW5ndGg7XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHNvdXJjZSkgfHwgc291cmNlRW1wdHkgfHwgIWlzS2V5T2Y8VD4oc291cmNlWzBdW2tleV0pKSB7XG4gICAgaWYgKCFzb3VyY2VFbXB0eSkge1xuICAgICAgY29uc29sZS53YXJuKCdUb0RpY3Rpb25hcnk6IHVuZXhwZWN0ZWQgaW5wdXQgcGFyYW1zLicpO1xuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBkaWN0aW9uYXJ5OiB7IFtrZXk6IHN0cmluZ106IFQgfSA9IHt9O1xuICBjb25zdCBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuICBsZXQgaSA9IDA7XG5cbiAgZm9yIChpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBkaWN0aW9uYXJ5W2Ake3NvdXJjZVtpXVtrZXldfWBdID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZVtpXSkpLFxuICAgICAgc291cmNlW2ldLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZGljdGlvbmFyeTtcbn1cbiJdfQ==","import { valuesComparer } from '../_internals/valuesComparer.util';\n/**\n * @description\n * Updates one or multiple items in an array T[].\n * For comparison you can provide key, array of keys or a custom comparison function that should return true if items match.\n * If no comparison is provided, an equality check is used by default.\n * Returns a shallow copy of the array T[] and updated items, does not mutate the original array.\n *\n * @example\n * // Update with comparison function\n *\n * const creatures = [{id: 1, type: 'cat'}, {id: 2, type: 'dog'}];\n *\n * const newCat = {id: 1, type: 'lion'};\n *\n * const updatedCreatures = update(creatures, newCat, (a, b) => a.id === b.id);\n *\n * // updatedCreatures will be:\n * // [{id: 1, type: 'lion'}, {id: 2, type: 'dog'}];\n *\n * @example\n * // Update with key\n *\n * const creatures = [{id: 1, type: 'cat'}, {id: 2, type: 'dog'}];\n *\n * const newCat = {id: 1, type: 'lion'};\n *\n * const updatedCreatures = update(creatures, newCat, 'id');\n *\n * // updatedCreatures will be:\n * // [{id: 1, type: 'lion'}, {id: 2, type: 'dog'}];\n *\n * @example\n * // Update with array of keys\n *\n * const creatures = [{id: 1, type: 'cat', name: 'Bella'}, {id: 2, type: 'dog', name: 'Sparky'}];\n *\n * const newCat = {id: 1, type: 'lion', name: 'Bella'};\n *\n * const updatedCreatures = update(creatures, newCat, ['id', 'name']);\n *\n * // updatedCreatures will be:\n * // [{id: 1, type: 'lion', name: 'Bella'}, {id: 2, type: 'dog', name: 'Sparky'}];\n *\n * @example\n * // Usage with RxState\n *\n * export class ListComponent {\n *\n * readonly updateCreature$ = new Subject<Creature>();\n *\n * constructor(private state: RxState<ComponentState>) {\n * // Reactive implementation\n * state.connect(\n * 'creatures',\n * this.updateCreature$,\n * ({ creatures }, creatureToUpdate) => {\n * return update(creatures, creatureToUpdate, (a, b) => a.id === b.id);\n * }\n * );\n * }\n *\n * // Imperative implementation\n * updateCreature(creatureToUpdate: Creature): void {\n * this.state.set({ creatures: update(this.state.get().creatures, creatureToUpdate, (a, b) => a.id === b.id)});\n * }\n * }\n *\n * @returns T[]\n *\n * @docsPage update\n * @docsCategory transformation-helpers\n */\nexport function update(source, updates, compare) {\n const updatesDefined = updates != null;\n const updatesAsArray = updatesDefined\n ? Array.isArray(updates)\n ? updates\n : [updates]\n : [];\n const sourceDefined = source != null;\n const sourceIsNotArray = !Array.isArray(source);\n const invalidInput = sourceIsNotArray || source.length === 0 || updatesAsArray.length === 0;\n if (sourceDefined && sourceIsNotArray) {\n console.warn(`Update: Original value (${source}) is not an array.`);\n }\n if (invalidInput) {\n return source;\n }\n const x = [];\n for (const existingItem of source) {\n const match = customFind(updatesAsArray, (item) => valuesComparer(item, existingItem, compare));\n x.push(match\n ? Object.assign(Object.create(Object.getPrototypeOf(existingItem)), existingItem, match)\n : existingItem);\n }\n return x;\n}\nfunction customFind(array, fn) {\n for (const item of array) {\n const x = fn(item);\n if (x) {\n return item;\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvdHJhbnNmb3JtYXRpb25zL3NyYy9saWIvYXJyYXkvdXBkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUduRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1RUc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUNwQixNQUFXLEVBQ1gsT0FBa0MsRUFDbEMsT0FBMkI7SUFFM0IsTUFBTSxjQUFjLEdBQUcsT0FBTyxJQUFJLElBQUksQ0FBQztJQUN2QyxNQUFNLGNBQWMsR0FBRyxjQUFjO1FBQ25DLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUN0QixDQUFDLENBQUMsT0FBTztZQUNULENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNiLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFUCxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksSUFBSSxDQUFDO0lBQ3JDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELE1BQU0sWUFBWSxHQUNoQixnQkFBZ0IsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUV6RSxJQUFJLGFBQWEsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLE1BQU0sb0JBQW9CLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQVEsRUFBRSxDQUFDO0lBQ2xCLEtBQUssTUFBTSxZQUFZLElBQUksTUFBTSxFQUFFLENBQUM7UUFDbEMsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQ2hELGNBQWMsQ0FBQyxJQUFTLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUNqRCxDQUFDO1FBRUYsQ0FBQyxDQUFDLElBQUksQ0FDSixLQUFLO1lBQ0gsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQ1gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQ2xELFlBQVksRUFDWixLQUFLLENBQ047WUFDSCxDQUFDLENBQUMsWUFBWSxDQUNqQixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFJLEtBQVUsRUFBRSxFQUF3QjtJQUN6RCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB2YWx1ZXNDb21wYXJlciB9IGZyb20gJy4uL19pbnRlcm5hbHMvdmFsdWVzQ29tcGFyZXIudXRpbCc7XG5pbXBvcnQgeyBDb21wYXJhYmxlRGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY29tcGFyYWJsZS1kYXRhLXR5cGUnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogVXBkYXRlcyBvbmUgb3IgbXVsdGlwbGUgaXRlbXMgaW4gYW4gYXJyYXkgVFtdLlxuICogRm9yIGNvbXBhcmlzb24geW91IGNhbiBwcm92aWRlIGtleSwgYXJyYXkgb2Yga2V5cyBvciBhIGN1c3RvbSBjb21wYXJpc29uIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIHJldHVybiB0cnVlIGlmIGl0ZW1zIG1hdGNoLlxuICogSWYgbm8gY29tcGFyaXNvbiBpcyBwcm92aWRlZCwgYW4gZXF1YWxpdHkgY2hlY2sgaXMgdXNlZCBieSBkZWZhdWx0LlxuICogUmV0dXJucyBhIHNoYWxsb3cgY29weSBvZiB0aGUgYXJyYXkgVFtdIGFuZCB1cGRhdGVkIGl0ZW1zLCBkb2VzIG5vdCBtdXRhdGUgdGhlIG9yaWdpbmFsIGFycmF5LlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBVcGRhdGUgd2l0aCBjb21wYXJpc29uIGZ1bmN0aW9uXG4gKlxuICogY29uc3QgY3JlYXR1cmVzID0gW3tpZDogMSwgdHlwZTogJ2NhdCd9LCB7aWQ6IDIsIHR5cGU6ICdkb2cnfV07XG4gKlxuICogY29uc3QgbmV3Q2F0ID0ge2lkOiAxLCB0eXBlOiAnbGlvbid9O1xuICpcbiAqIGNvbnN0IHVwZGF0ZWRDcmVhdHVyZXMgPSB1cGRhdGUoY3JlYXR1cmVzLCBuZXdDYXQsIChhLCBiKSA9PiBhLmlkID09PSBiLmlkKTtcbiAqXG4gKiAvLyB1cGRhdGVkQ3JlYXR1cmVzIHdpbGwgYmU6XG4gKiAvLyBbe2lkOiAxLCB0eXBlOiAnbGlvbid9LCB7aWQ6IDIsIHR5cGU6ICdkb2cnfV07XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFVwZGF0ZSB3aXRoIGtleVxuICpcbiAqIGNvbnN0IGNyZWF0dXJlcyA9IFt7aWQ6IDEsIHR5cGU6ICdjYXQnfSwge2lkOiAyLCB0eXBlOiAnZG9nJ31dO1xuICpcbiAqIGNvbnN0IG5ld0NhdCA9IHtpZDogMSwgdHlwZTogJ2xpb24nfTtcbiAqXG4gKiBjb25zdCB1cGRhdGVkQ3JlYXR1cmVzID0gdXBkYXRlKGNyZWF0dXJlcywgbmV3Q2F0LCAnaWQnKTtcbiAqXG4gKiAvLyB1cGRhdGVkQ3JlYXR1cmVzIHdpbGwgYmU6XG4gKiAvLyBbe2lkOiAxLCB0eXBlOiAnbGlvbid9LCB7aWQ6IDIsIHR5cGU6ICdkb2cnfV07XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFVwZGF0ZSB3aXRoIGFycmF5IG9mIGtleXNcbiAqXG4gKiBjb25zdCBjcmVhdHVyZXMgPSBbe2lkOiAxLCB0eXBlOiAnY2F0JywgbmFtZTogJ0JlbGxhJ30sIHtpZDogMiwgdHlwZTogJ2RvZycsIG5hbWU6ICdTcGFya3knfV07XG4gKlxuICogY29uc3QgbmV3Q2F0ID0ge2lkOiAxLCB0eXBlOiAnbGlvbicsIG5hbWU6ICdCZWxsYSd9O1xuICpcbiAqIGNvbnN0IHVwZGF0ZWRDcmVhdHVyZXMgPSB1cGRhdGUoY3JlYXR1cmVzLCBuZXdDYXQsIFsnaWQnLCAnbmFtZSddKTtcbiAqXG4gKiAvLyB1cGRhdGVkQ3JlYXR1cmVzIHdpbGwgYmU6XG4gKiAvLyBbe2lkOiAxLCB0eXBlOiAnbGlvbicsIG5hbWU6ICdCZWxsYSd9LCB7aWQ6IDIsIHR5cGU6ICdkb2cnLCBuYW1lOiAnU3Bhcmt5J31dO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBVc2FnZSB3aXRoIFJ4U3RhdGVcbiAqXG4gKiBleHBvcnQgY2xhc3MgTGlzdENvbXBvbmVudCB7XG4gKlxuICogICAgcmVhZG9ubHkgdXBkYXRlQ3JlYXR1cmUkID0gbmV3IFN1YmplY3Q8Q3JlYXR1cmU+KCk7XG4gKlxuICogICAgY29uc3RydWN0b3IocHJpdmF0ZSBzdGF0ZTogUnhTdGF0ZTxDb21wb25lbnRTdGF0ZT4pIHtcbiAqICAgICAgLy8gUmVhY3RpdmUgaW1wbGVtZW50YXRpb25cbiAqICAgICAgc3RhdGUuY29ubmVjdChcbiAqICAgICAgICAnY3JlYXR1cmVzJyxcbiAqICAgICAgICB0aGlzLnVwZGF0ZUNyZWF0dXJlJCxcbiAqICAgICAgICAoeyBjcmVhdHVyZXMgfSwgY3JlYXR1cmVUb1VwZGF0ZSkgPT4ge1xuICogICAgICAgICAgICByZXR1cm4gdXBkYXRlKGNyZWF0dXJlcywgY3JlYXR1cmVUb1VwZGF0ZSwgKGEsIGIpID0+IGEuaWQgPT09IGIuaWQpO1xuICogICAgICAgIH1cbiAqICAgICAgKTtcbiAqICAgIH1cbiAqXG4gKiAgICAvLyBJbXBlcmF0aXZlIGltcGxlbWVudGF0aW9uXG4gKiAgICB1cGRhdGVDcmVhdHVyZShjcmVhdHVyZVRvVXBkYXRlOiBDcmVhdHVyZSk6IHZvaWQge1xuICogICAgICAgIHRoaXMuc3RhdGUuc2V0KHsgY3JlYXR1cmVzOiB1cGRhdGUodGhpcy5zdGF0ZS5nZXQoKS5jcmVhdHVyZXMsIGNyZWF0dXJlVG9VcGRhdGUsIChhLCBiKSA9PiBhLmlkID09PSBiLmlkKX0pO1xuICogICAgfVxuICogfVxuICpcbiAqIEByZXR1cm5zIFRbXVxuICpcbiAqIEBkb2NzUGFnZSB1cGRhdGVcbiAqIEBkb2NzQ2F0ZWdvcnkgdHJhbnNmb3JtYXRpb24taGVscGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlPFQgZXh0ZW5kcyBvYmplY3Q+KFxuICBzb3VyY2U6IFRbXSxcbiAgdXBkYXRlczogUGFydGlhbDxUPltdIHwgUGFydGlhbDxUPixcbiAgY29tcGFyZT86IENvbXBhcmFibGVEYXRhPFQ+LFxuKTogVFtdIHtcbiAgY29uc3QgdXBkYXRlc0RlZmluZWQgPSB1cGRhdGVzICE9IG51bGw7XG4gIGNvbnN0IHVwZGF0ZXNBc0FycmF5ID0gdXBkYXRlc0RlZmluZWRcbiAgICA/IEFycmF5LmlzQXJyYXkodXBkYXRlcylcbiAgICAgID8gdXBkYXRlc1xuICAgICAgOiBbdXBkYXRlc11cbiAgICA6IFtdO1xuXG4gIGNvbnN0IHNvdXJjZURlZmluZWQgPSBzb3VyY2UgIT0gbnVsbDtcbiAgY29uc3Qgc291cmNlSXNOb3RBcnJheSA9ICFBcnJheS5pc0FycmF5KHNvdXJjZSk7XG4gIGNvbnN0IGludmFsaWRJbnB1dCA9XG4gICAgc291cmNlSXNOb3RBcnJheSB8fCBzb3VyY2UubGVuZ3RoID09PSAwIHx8IHVwZGF0ZXNBc0FycmF5Lmxlbmd0aCA9PT0gMDtcblxuICBpZiAoc291cmNlRGVmaW5lZCAmJiBzb3VyY2VJc05vdEFycmF5KSB7XG4gICAgY29uc29sZS53YXJuKGBVcGRhdGU6IE9yaWdpbmFsIHZhbHVlICgke3NvdXJjZX0pIGlzIG5vdCBhbiBhcnJheS5gKTtcbiAgfVxuXG4gIGlmIChpbnZhbGlkSW5wdXQpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgY29uc3QgeDogVFtdID0gW107XG4gIGZvciAoY29uc3QgZXhpc3RpbmdJdGVtIG9mIHNvdXJjZSkge1xuICAgIGNvbnN0IG1hdGNoID0gY3VzdG9tRmluZCh1cGRhdGVzQXNBcnJheSwgKGl0ZW0pID0+XG4gICAgICB2YWx1ZXNDb21wYXJlcihpdGVtIGFzIFQsIGV4aXN0aW5nSXRlbSwgY29tcGFyZSksXG4gICAgKTtcblxuICAgIHgucHVzaChcbiAgICAgIG1hdGNoXG4gICAgICAgID8gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKGV4aXN0aW5nSXRlbSkpLFxuICAgICAgICAgICAgZXhpc3RpbmdJdGVtLFxuICAgICAgICAgICAgbWF0Y2gsXG4gICAgICAgICAgKVxuICAgICAgICA6IGV4aXN0aW5nSXRlbSxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHg7XG59XG5cbmZ1bmN0aW9uIGN1c3RvbUZpbmQ8VD4oYXJyYXk6IFRbXSwgZm46IChpdGVtOiBUKSA9PiBib29sZWFuKTogVCB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgaXRlbSBvZiBhcnJheSkge1xuICAgIGNvbnN0IHggPSBmbihpdGVtKTtcbiAgICBpZiAoeCkge1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuICB9XG59XG4iXX0=","import { isObjectGuard } from '../_internals/guards';\nimport { valuesComparer } from '../_internals/valuesComparer.util';\n/**\n * @description\n * Updates or inserts (if does not exist) one or multiple items in an array T[].\n * For comparison you can provide a key, an array of keys or a custom comparison function that should return true if\n * items match.\n * If no comparison is provided, an equality check is used by default.\n * upsert is `pure` and `immutable`, your inputs won't be changed\n *\n *\n * @example\n * // Upsert (update) with key\n *\n * const creatures = [{id: 1, type: 'cat'}, {id: 2, type: 'dog'}];\n *\n * const newCat = {id: 1, type: 'lion'};\n *\n * const updatedCreatures = upsert(creatures, newCat, 'id');\n *\n * // updatedCreatures will be:\n * // [{id: 1, type: 'lion'}, {id: 2, type: 'dog'}];\n *\n * @example\n * // Upsert (insert) with key\n *\n * const creatures = [{id: 1, type: 'cat'}, {id: 2, type: 'dog'}];\n *\n * const newCat = {id: 3, type: 'lion'};\n *\n * const updatedCreatures = upsert(creatures, newCat, 'id');\n *\n * // updatedCreatures will be:\n * // [{id: 1, type: 'cat'}, {id: 2, type: 'dog'}, {id: 3, type: 'lion'}];\n *\n * @example\n * // Upsert (update) with array of keys\n *\n * const creatures = [{id: 1, type: 'cat', name: 'Bella'}, {id: 2, type: 'dog', name: 'Sparky'}];\n *\n * const newCat = {id: 1, type: 'lion', name: 'Bella'};\n *\n * const updatedCreatures = upsert(creatures, newCat, ['id', 'name']);\n *\n * // updatedCreatures will be:\n * // [{id: 1, type: 'lion', name: 'Bella'}, {id: 2, type: 'dog', name: 'Sparky'}];\n *\n * @example\n * // Update (insert) with comparison function\n *\n * const creatures = [{id: 1, type: 'cat'}, {id: 2, type: 'dog'}];\n *\n * const newCat = {id: 3, type: 'lion'};\n *\n * const updatedCreatures = upsert(creatures, newCat, (a, b) => a.id === b.id);\n *\n * // updatedCreatures will be:\n * // [{id: 1, type: 'cat'}, {id: 2, type: 'dog'}, {id: 3, type: 'lion'}];\n *\n * @example\n * // Usage with RxState\n *\n * export class ListComponent {\n *\n * // trigger which gets called on add/update (for reactive implementation)\n * readonly addOrUpdateCreature = new Subject<Creature>();\n *\n * constructor(private state: RxState<ComponentState>) {\n * const initialCreatures = [{id: 1, type: 'cat', name: 'Bella'}, {id: 2, type: 'dog', name: 'Sparky'}];\n * state.set({ creatures: initialCreatures });\n * // Reactive implementation\n * state.connect(\n * 'creatures',\n * this.addOrUpdateCreature,\n * ({ creatures }, creatureToUpsert) => {\n * return upsert(creatures, creatureToUpsert, 'id');\n * }\n * );\n * }\n *\n * // Imperative implementation\n * updateCreature(creatureToUpdate: Creature): void {\n * this.state.set({ creatures: upsert(this.state.get('creatures'), creatureToUpdate, 'id')});\n * }\n * }\n *\n * @returns T[]\n *\n * @docsPage upsert\n * @docsCategory transformation-helpers\n */\nexport function upsert(source, update, compare) {\n // check inputs for validity\n const updatesAsArray = update != null ? (Array.isArray(update) ? update : [update]) : [];\n // check inputs for validity\n const sourceIsNotArray = !Array.isArray(source);\n const invalidInput = sourceIsNotArray && updatesAsArray.length === 0;\n // if the source value is not an Array or the input is not defined return the original source\n // this is the case for any edge case:\n // '', null, undefined, CustomObjectOfDoomAndDarkness, ...\n if (invalidInput) {\n return source;\n }\n // if source is empty array or not an array, but the updates are valid:\n // return a shallow copy of the updates as result\n if (updatesAsArray.length > 0 && (sourceIsNotArray || source.length === 0)) {\n return [...updatesAsArray];\n }\n const inserts = [];\n const updates = {};\n // process updates/inserts\n for (const item of updatesAsArray) {\n const match = source.findIndex((sourceItem) => valuesComparer(item, sourceItem, compare));\n // if item already exists, save it as update\n if (match !== -1) {\n updates[match] = item;\n }\n else {\n // otherwise consider this as insert\n if (isObjectGuard(item)) {\n inserts.push(Object.assign(Object.create(Object.getPrototypeOf(item)), item));\n }\n else {\n // otherwise just push it\n inserts.push(item);\n }\n }\n }\n const updated = sour