@toolpad/utils
Version:
Shared utilities used by Toolpad packages.
1 lines • 4.68 kB
Source Map (JSON)
{"version":3,"sources":["../src/immutability.ts"],"sourcesContent":["/**\n * Applies changes to an object in an immutable way. The `dest` object will adopt the properties of\n * the `src` object. Object identity is preserved if the operation results in a no-op.\n */\nexport function update<T>(dest: T, src: Partial<T>): T {\n let result: T | undefined;\n Object.entries(src).forEach(([key, value]) => {\n if (dest[key as keyof T] !== value) {\n result = result || { ...dest };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (result as any)[key] = value;\n }\n });\n return result || dest;\n}\n/**\n * Applies changes to an object in an immutable way. The `dest` object will adopt the properties of\n * the `src` object. If `dest` is undefined, `src` will be used. Object identity is preserved if\n * the operation results in a no-op.\n */\nexport function updateOrCreate<T>(dest: T | null | undefined, src: NonNullable<T>): T {\n return dest ? update(dest, src) : src;\n}\n\n/**\n * Inserts a value in an immutable array.\n */\nexport function insert<T>(array: readonly T[], value: T, index: number): T[] {\n return [...array.slice(0, index), value, ...array.slice(index)];\n}\n\n/**\n * Updates a value in an immutable array.\n */\nexport function updateArray<T>(array: readonly T[], value: T, index: number): T[] {\n return [...array.slice(0, index), value, ...array.slice(index + 1)];\n}\n\n/**\n * Removes a value in an immutable array.\n */\nexport function remove<T>(array: readonly T[], index: number): T[] {\n return [...array.slice(0, index), ...array.slice(index + 1)];\n}\n\n/**\n * Removes a set of properties from an object in an immutable way. Object identity is preserved if\n * the operation results in a no-op.\n */\nexport function omit<T, K extends keyof T>(obj: T, ...keys: readonly K[]): Omit<T, K> {\n let result: T | undefined;\n\n keys.forEach((key) => {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n if (!result) {\n result = { ...obj };\n }\n delete result[key];\n }\n });\n\n return result || obj;\n}\n\n/**\n * Returns an object created from `obj` with only the specified `keys`. Object identity is preserved if\n * the operation results in a no-op.\n */\nexport function take<K extends string, T extends Record<K, unknown>>(\n obj: T,\n ...keys: readonly K[]\n): Omit<T, Exclude<keyof T, K>> {\n const keySet = new Set<string>(keys);\n let result: T | undefined;\n\n Object.keys(obj).forEach((key) => {\n if (!keySet.has(key)) {\n if (!result) {\n result = { ...obj };\n }\n delete result[key as keyof T];\n }\n });\n\n return result || obj;\n}\n/**\n * Returns an array without any of its items equal to `value`. Object identity is preserved if\n * the operation results in a no-op.\n */\nexport function without<T>(array: readonly T[], value: T): readonly T[] {\n const result: T[] = [];\n\n let found = false;\n for (let i = 0; i < array.length; i += 1) {\n const elm = array[i];\n if (elm === value) {\n found = true;\n } else {\n result.push(elm);\n }\n }\n\n return found ? result : array;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIO,SAAS,OAAU,MAAS,KAAoB;AACrD,MAAI;AACJ,SAAO,QAAQ,GAAG,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC5C,QAAI,KAAK,GAAc,MAAM,OAAO;AAClC,eAAS,UAAU,EAAE,GAAG,KAAK;AAE7B,MAAC,OAAe,GAAG,IAAI;AAAA,IACzB;AAAA,EACF,CAAC;AACD,SAAO,UAAU;AACnB;AAMO,SAAS,eAAkB,MAA4B,KAAwB;AACpF,SAAO,OAAO,OAAO,MAAM,GAAG,IAAI;AACpC;AAKO,SAAS,OAAU,OAAqB,OAAU,OAAoB;AAC3E,SAAO,CAAC,GAAG,MAAM,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,MAAM,KAAK,CAAC;AAChE;AAKO,SAAS,YAAe,OAAqB,OAAU,OAAoB;AAChF,SAAO,CAAC,GAAG,MAAM,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,MAAM,QAAQ,CAAC,CAAC;AACpE;AAKO,SAAS,OAAU,OAAqB,OAAoB;AACjE,SAAO,CAAC,GAAG,MAAM,MAAM,GAAG,KAAK,GAAG,GAAG,MAAM,MAAM,QAAQ,CAAC,CAAC;AAC7D;AAMO,SAAS,KAA2B,QAAW,MAAgC;AACpF,MAAI;AAEJ,OAAK,QAAQ,CAAC,QAAQ;AACpB,QAAI,OAAO,UAAU,eAAe,KAAK,KAAK,GAAG,GAAG;AAClD,UAAI,CAAC,QAAQ;AACX,iBAAS,EAAE,GAAG,IAAI;AAAA,MACpB;AACA,aAAO,OAAO,GAAG;AAAA,IACnB;AAAA,EACF,CAAC;AAED,SAAO,UAAU;AACnB;AAMO,SAAS,KACd,QACG,MAC2B;AAC9B,QAAM,SAAS,IAAI,IAAY,IAAI;AACnC,MAAI;AAEJ,SAAO,KAAK,GAAG,EAAE,QAAQ,CAAC,QAAQ;AAChC,QAAI,CAAC,OAAO,IAAI,GAAG,GAAG;AACpB,UAAI,CAAC,QAAQ;AACX,iBAAS,EAAE,GAAG,IAAI;AAAA,MACpB;AACA,aAAO,OAAO,GAAc;AAAA,IAC9B;AAAA,EACF,CAAC;AAED,SAAO,UAAU;AACnB;AAKO,SAAS,QAAW,OAAqB,OAAwB;AACtE,QAAM,SAAc,CAAC;AAErB,MAAI,QAAQ;AACZ,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AACxC,UAAM,MAAM,MAAM,CAAC;AACnB,QAAI,QAAQ,OAAO;AACjB,cAAQ;AAAA,IACV,OAAO;AACL,aAAO,KAAK,GAAG;AAAA,IACjB;AAAA,EACF;AAEA,SAAO,QAAQ,SAAS;AAC1B;","names":[]}