remeda
Version:
A utility library for JavaScript and Typescript.
1 lines • 2.49 kB
Source Map (JSON)
{"version":3,"file":"mapKeys.cjs","names":["purry","out: Partial<Record<S, unknown>>"],"sources":["../src/mapKeys.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-empty-object-type --\n * We want to match the typing of the built-in Object.entries as much as\n * possible!\n */\n\nimport type { BoundedPartial } from \"./internal/types/BoundedPartial\";\nimport type { EnumerableStringKeyOf } from \"./internal/types/EnumerableStringKeyOf\";\nimport type { EnumerableStringKeyedValueOf } from \"./internal/types/EnumerableStringKeyedValueOf\";\nimport { purry } from \"./purry\";\n\n/**\n * Maps keys of `object` and keeps the same values.\n *\n * @param data - The object to map.\n * @param keyMapper - The mapping function.\n * @signature\n * R.mapKeys(object, fn)\n * @example\n * R.mapKeys({a: 1, b: 2}, (key, value) => key + value) // => { a1: 1, b2: 2 }\n * @dataFirst\n * @category Object\n */\nexport function mapKeys<T extends {}, S extends PropertyKey>(\n data: T,\n keyMapper: (\n key: EnumerableStringKeyOf<T>,\n value: EnumerableStringKeyedValueOf<T>,\n data: T,\n ) => S,\n): BoundedPartial<Record<S, EnumerableStringKeyedValueOf<T>>>;\n\n/**\n * Maps keys of `object` and keeps the same values.\n *\n * @param keyMapper - The mapping function.\n * @signature\n * R.mapKeys(fn)(object)\n * @example\n * R.pipe({a: 1, b: 2}, R.mapKeys((key, value) => key + value)) // => { a1: 1, b2: 2 }\n * @dataLast\n * @category Object\n */\nexport function mapKeys<T extends {}, S extends PropertyKey>(\n keyMapper: (\n key: EnumerableStringKeyOf<T>,\n value: EnumerableStringKeyedValueOf<T>,\n data: T,\n ) => S,\n): (data: T) => BoundedPartial<Record<S, EnumerableStringKeyedValueOf<T>>>;\n\nexport function mapKeys(...args: ReadonlyArray<unknown>): unknown {\n return purry(mapKeysImplementation, args);\n}\n\nfunction mapKeysImplementation<T extends {}, S extends PropertyKey>(\n data: T,\n keyMapper: (key: string, value: unknown, data: T) => S,\n): Partial<Record<S, unknown>> {\n const out: Partial<Record<S, unknown>> = {};\n\n for (const [key, value] of Object.entries(data)) {\n const mappedKey = keyMapper(key, value, data);\n out[mappedKey] = value;\n }\n\n return out;\n}\n"],"mappings":"wCAkDA,SAAgB,EAAQ,GAAG,EAAuC,CAChE,OAAOA,EAAAA,EAAM,EAAuB,EAAK,CAG3C,SAAS,EACP,EACA,EAC6B,CAC7B,IAAMC,EAAmC,EAAE,CAE3C,IAAK,GAAM,CAAC,EAAK,KAAU,OAAO,QAAQ,EAAK,CAAE,CAC/C,IAAM,EAAY,EAAU,EAAK,EAAO,EAAK,CAC7C,EAAI,GAAa,EAGnB,OAAO"}