es-toolkit 1.50.0 → 1.51.0-dev.2065

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (355) hide show
  1. package/CHANGELOG.md +82 -0
  2. package/NOTICE +39 -0
  3. package/README.md +2 -2
  4. package/bigint.d.ts +1 -0
  5. package/bigint.js +1 -0
  6. package/dist/_internal/NonPlainObject.d.mts +8 -0
  7. package/dist/_internal/NonPlainObject.d.ts +8 -0
  8. package/dist/_internal/bigIntRangeLength.js +19 -0
  9. package/dist/_internal/bigIntRangeLength.mjs +19 -0
  10. package/dist/_internal/isMergeableValue.js +17 -0
  11. package/dist/_internal/isMergeableValue.mjs +17 -0
  12. package/dist/_internal/isUnsafeProperty.js +7 -4
  13. package/dist/_internal/isUnsafeProperty.mjs +7 -4
  14. package/dist/_internal/isUnsafeToWriteProperty.js +22 -0
  15. package/dist/_internal/isUnsafeToWriteProperty.mjs +22 -0
  16. package/dist/array/at.d.mts +1 -1
  17. package/dist/array/at.d.ts +1 -1
  18. package/dist/array/filterAsync.js +1 -1
  19. package/dist/array/filterAsync.mjs +1 -1
  20. package/dist/array/flatMapAsync.js +1 -1
  21. package/dist/array/flatMapAsync.mjs +1 -1
  22. package/dist/array/forEachAsync.js +1 -1
  23. package/dist/array/forEachAsync.mjs +1 -1
  24. package/dist/array/index.js +1 -1
  25. package/dist/array/index.mjs +1 -1
  26. package/dist/array/limitAsync.d.mts +4 -28
  27. package/dist/array/limitAsync.d.ts +4 -28
  28. package/dist/array/limitAsync.js +2 -39
  29. package/dist/array/limitAsync.mjs +3 -39
  30. package/dist/array/mapAsync.js +1 -1
  31. package/dist/array/mapAsync.mjs +1 -1
  32. package/dist/array/orderBy.d.mts +1 -1
  33. package/dist/array/orderBy.d.ts +1 -1
  34. package/dist/array/pullAt.d.mts +1 -1
  35. package/dist/array/pullAt.d.ts +1 -1
  36. package/dist/array/pullAt.js +1 -1
  37. package/dist/array/pullAt.mjs +1 -1
  38. package/dist/array/sortBy.d.mts +1 -1
  39. package/dist/array/sortBy.d.ts +1 -1
  40. package/dist/array/unzip.d.mts +3 -0
  41. package/dist/array/unzip.d.ts +3 -0
  42. package/dist/array/unzip.js +3 -0
  43. package/dist/array/unzip.mjs +3 -0
  44. package/dist/bigint/clamp.d.mts +37 -0
  45. package/dist/bigint/clamp.d.ts +37 -0
  46. package/dist/bigint/clamp.js +16 -0
  47. package/dist/bigint/clamp.mjs +16 -0
  48. package/dist/bigint/inRange.d.mts +37 -0
  49. package/dist/bigint/inRange.d.ts +37 -0
  50. package/dist/bigint/inRange.js +20 -0
  51. package/dist/bigint/inRange.mjs +20 -0
  52. package/dist/bigint/index.d.mts +14 -0
  53. package/dist/bigint/index.d.ts +14 -0
  54. package/dist/bigint/index.js +27 -0
  55. package/dist/bigint/index.mjs +14 -0
  56. package/dist/bigint/max.d.mts +21 -0
  57. package/dist/bigint/max.d.ts +21 -0
  58. package/dist/bigint/max.js +26 -0
  59. package/dist/bigint/max.mjs +26 -0
  60. package/dist/bigint/maxBy.d.mts +21 -0
  61. package/dist/bigint/maxBy.d.ts +21 -0
  62. package/dist/bigint/maxBy.js +34 -0
  63. package/dist/bigint/maxBy.mjs +34 -0
  64. package/dist/bigint/median.d.mts +22 -0
  65. package/dist/bigint/median.d.ts +22 -0
  66. package/dist/bigint/median.js +28 -0
  67. package/dist/bigint/median.mjs +28 -0
  68. package/dist/bigint/medianBy.d.mts +21 -0
  69. package/dist/bigint/medianBy.d.ts +21 -0
  70. package/dist/bigint/medianBy.js +24 -0
  71. package/dist/bigint/medianBy.mjs +24 -0
  72. package/dist/bigint/min.d.mts +18 -0
  73. package/dist/bigint/min.d.ts +18 -0
  74. package/dist/bigint/min.js +23 -0
  75. package/dist/bigint/min.mjs +23 -0
  76. package/dist/bigint/minBy.d.mts +21 -0
  77. package/dist/bigint/minBy.d.ts +21 -0
  78. package/dist/bigint/minBy.js +34 -0
  79. package/dist/bigint/minBy.mjs +34 -0
  80. package/dist/bigint/percentile.d.mts +23 -0
  81. package/dist/bigint/percentile.d.ts +23 -0
  82. package/dist/bigint/percentile.js +31 -0
  83. package/dist/bigint/percentile.mjs +31 -0
  84. package/dist/bigint/range.d.mts +45 -0
  85. package/dist/bigint/range.d.ts +45 -0
  86. package/dist/bigint/range.js +24 -0
  87. package/dist/bigint/range.mjs +24 -0
  88. package/dist/bigint/rangeRight.d.mts +43 -0
  89. package/dist/bigint/rangeRight.d.ts +43 -0
  90. package/dist/bigint/rangeRight.js +25 -0
  91. package/dist/bigint/rangeRight.mjs +25 -0
  92. package/dist/bigint/sum.d.mts +18 -0
  93. package/dist/bigint/sum.d.ts +18 -0
  94. package/dist/bigint/sum.js +22 -0
  95. package/dist/bigint/sum.mjs +22 -0
  96. package/dist/bigint/sumBy.d.mts +20 -0
  97. package/dist/bigint/sumBy.d.ts +20 -0
  98. package/dist/bigint/sumBy.js +24 -0
  99. package/dist/bigint/sumBy.mjs +24 -0
  100. package/dist/browser.global.js +6 -3
  101. package/dist/compat/_internal/normalizeZero.js +13 -0
  102. package/dist/compat/_internal/normalizeZero.mjs +13 -0
  103. package/dist/compat/_internal/toKey.js +1 -1
  104. package/dist/compat/_internal/toKey.mjs +1 -1
  105. package/dist/compat/_internal/unicodeSize.js +45 -0
  106. package/dist/compat/_internal/unicodeSize.mjs +45 -0
  107. package/dist/compat/array/chunk.js +1 -0
  108. package/dist/compat/array/chunk.mjs +1 -0
  109. package/dist/compat/array/difference.js +2 -1
  110. package/dist/compat/array/difference.mjs +2 -1
  111. package/dist/compat/array/differenceBy.js +3 -2
  112. package/dist/compat/array/differenceBy.mjs +3 -2
  113. package/dist/compat/array/drop.d.mts +1 -1
  114. package/dist/compat/array/drop.d.ts +1 -1
  115. package/dist/compat/array/dropRight.d.mts +2 -3
  116. package/dist/compat/array/dropRight.d.ts +2 -3
  117. package/dist/compat/array/dropRight.js +4 -4
  118. package/dist/compat/array/dropRight.mjs +4 -4
  119. package/dist/compat/array/every.js +9 -9
  120. package/dist/compat/array/every.mjs +9 -9
  121. package/dist/compat/array/fill.js +8 -2
  122. package/dist/compat/array/fill.mjs +8 -2
  123. package/dist/compat/array/find.js +14 -13
  124. package/dist/compat/array/find.mjs +14 -13
  125. package/dist/compat/array/findIndex.js +3 -19
  126. package/dist/compat/array/findIndex.mjs +3 -19
  127. package/dist/compat/array/findLast.js +3 -3
  128. package/dist/compat/array/findLast.mjs +3 -3
  129. package/dist/compat/array/flatMap.js +3 -8
  130. package/dist/compat/array/flatMap.mjs +3 -7
  131. package/dist/compat/array/flatMapDepth.js +1 -1
  132. package/dist/compat/array/flatMapDepth.mjs +1 -1
  133. package/dist/compat/array/forEach.js +1 -1
  134. package/dist/compat/array/forEach.mjs +1 -1
  135. package/dist/compat/array/includes.js +13 -13
  136. package/dist/compat/array/includes.mjs +13 -13
  137. package/dist/compat/array/indexOf.js +2 -1
  138. package/dist/compat/array/indexOf.mjs +2 -1
  139. package/dist/compat/array/intersection.js +3 -2
  140. package/dist/compat/array/intersection.mjs +3 -2
  141. package/dist/compat/array/intersectionBy.js +7 -11
  142. package/dist/compat/array/intersectionBy.mjs +7 -11
  143. package/dist/compat/array/intersectionWith.js +6 -18
  144. package/dist/compat/array/intersectionWith.mjs +6 -18
  145. package/dist/compat/array/last.js +1 -1
  146. package/dist/compat/array/last.mjs +1 -1
  147. package/dist/compat/array/lastIndexOf.js +3 -1
  148. package/dist/compat/array/lastIndexOf.mjs +3 -1
  149. package/dist/compat/array/map.js +3 -3
  150. package/dist/compat/array/map.mjs +3 -3
  151. package/dist/compat/array/orderBy.js +8 -6
  152. package/dist/compat/array/orderBy.mjs +8 -6
  153. package/dist/compat/array/partition.js +6 -6
  154. package/dist/compat/array/partition.mjs +6 -6
  155. package/dist/compat/array/pull.js +1 -1
  156. package/dist/compat/array/pull.mjs +1 -1
  157. package/dist/compat/array/pullAll.js +2 -0
  158. package/dist/compat/array/pullAll.mjs +2 -0
  159. package/dist/compat/array/remove.js +8 -4
  160. package/dist/compat/array/remove.mjs +8 -4
  161. package/dist/compat/array/reverse.js +1 -1
  162. package/dist/compat/array/reverse.mjs +1 -1
  163. package/dist/compat/array/sampleSize.js +2 -1
  164. package/dist/compat/array/sampleSize.mjs +2 -1
  165. package/dist/compat/array/size.js +2 -1
  166. package/dist/compat/array/size.mjs +2 -1
  167. package/dist/compat/array/some.js +2 -1
  168. package/dist/compat/array/some.mjs +2 -1
  169. package/dist/compat/array/takeRightWhile.js +2 -2
  170. package/dist/compat/array/takeRightWhile.mjs +2 -2
  171. package/dist/compat/array/takeWhile.js +2 -2
  172. package/dist/compat/array/takeWhile.mjs +2 -2
  173. package/dist/compat/array/unionBy.js +2 -1
  174. package/dist/compat/array/unionBy.mjs +2 -1
  175. package/dist/compat/array/uniqBy.js +4 -3
  176. package/dist/compat/array/uniqBy.mjs +4 -3
  177. package/dist/compat/array/unzip.d.mts +3 -0
  178. package/dist/compat/array/unzip.d.ts +3 -0
  179. package/dist/compat/array/unzip.js +3 -0
  180. package/dist/compat/array/unzip.mjs +3 -0
  181. package/dist/compat/array/unzipWith.js +1 -1
  182. package/dist/compat/array/unzipWith.mjs +1 -1
  183. package/dist/compat/array/zipObject.js +2 -0
  184. package/dist/compat/array/zipObject.mjs +2 -0
  185. package/dist/compat/compat.d.mts +3 -3
  186. package/dist/compat/compat.d.ts +3 -3
  187. package/dist/compat/compat.js +8 -4
  188. package/dist/compat/compat.mjs +8 -4
  189. package/dist/compat/function/curry.d.mts +1 -1
  190. package/dist/compat/function/curry.d.ts +1 -1
  191. package/dist/compat/function/flowRight.d.mts +1 -1
  192. package/dist/compat/function/flowRight.d.ts +1 -1
  193. package/dist/compat/function/partial.d.mts +1 -1
  194. package/dist/compat/function/partial.d.ts +1 -1
  195. package/dist/compat/function/rest.d.mts +1 -1
  196. package/dist/compat/function/rest.d.ts +1 -1
  197. package/dist/compat/function/rest.js +1 -1
  198. package/dist/compat/function/rest.mjs +1 -1
  199. package/dist/compat/index.d.mts +3 -3
  200. package/dist/compat/index.d.ts +3 -3
  201. package/dist/compat/index.js +6 -4
  202. package/dist/compat/index.mjs +5 -5
  203. package/dist/compat/math/maxBy.js +1 -1
  204. package/dist/compat/math/maxBy.mjs +1 -1
  205. package/dist/compat/math/meanBy.d.mts +4 -0
  206. package/dist/compat/math/meanBy.d.ts +4 -0
  207. package/dist/compat/math/meanBy.js +8 -3
  208. package/dist/compat/math/meanBy.mjs +8 -3
  209. package/dist/compat/math/minBy.js +1 -1
  210. package/dist/compat/math/minBy.mjs +1 -1
  211. package/dist/compat/object/cloneDeep.d.mts +5 -5
  212. package/dist/compat/object/cloneDeep.d.ts +5 -5
  213. package/dist/compat/object/cloneDeep.js +5 -5
  214. package/dist/compat/object/cloneDeep.mjs +5 -5
  215. package/dist/compat/object/cloneDeepWith.js +3 -1
  216. package/dist/compat/object/cloneDeepWith.mjs +3 -1
  217. package/dist/compat/object/cloneWith.d.mts +1 -1
  218. package/dist/compat/object/cloneWith.d.ts +1 -1
  219. package/dist/compat/object/cloneWith.js +1 -1
  220. package/dist/compat/object/cloneWith.mjs +1 -1
  221. package/dist/compat/object/entries.d.mts +1 -0
  222. package/dist/compat/object/entries.d.ts +1 -0
  223. package/dist/compat/object/entries.js +1 -0
  224. package/dist/compat/object/entries.mjs +1 -0
  225. package/dist/compat/object/entriesIn.d.mts +1 -0
  226. package/dist/compat/object/entriesIn.d.ts +1 -0
  227. package/dist/compat/object/entriesIn.js +1 -0
  228. package/dist/compat/object/entriesIn.mjs +1 -0
  229. package/dist/compat/object/omit.js +5 -5
  230. package/dist/compat/object/omit.mjs +5 -5
  231. package/dist/compat/object/transform.js +1 -1
  232. package/dist/compat/object/transform.mjs +1 -1
  233. package/dist/compat/object/updateWith.js +2 -2
  234. package/dist/compat/object/updateWith.mjs +2 -2
  235. package/dist/compat/predicate/isMatchWith.js +14 -5
  236. package/dist/compat/predicate/isMatchWith.mjs +14 -5
  237. package/dist/compat/string/template.js +2 -1
  238. package/dist/compat/string/template.mjs +2 -1
  239. package/dist/compat/string/words.js +17 -13
  240. package/dist/compat/string/words.mjs +17 -13
  241. package/dist/compat/util/iteratee.js +1 -3
  242. package/dist/compat/util/iteratee.mjs +1 -3
  243. package/dist/compat/util/toArray.d.mts +5 -5
  244. package/dist/compat/util/toArray.d.ts +5 -5
  245. package/dist/compat/util/toArray.js +9 -5
  246. package/dist/compat/util/toArray.mjs +9 -5
  247. package/dist/compat/util/toPath.js +11 -3
  248. package/dist/compat/util/toPath.mjs +11 -3
  249. package/dist/compat/util/toString.js +4 -1
  250. package/dist/compat/util/toString.mjs +4 -1
  251. package/dist/fp/array/at.d.mts +1 -1
  252. package/dist/fp/array/at.d.ts +1 -1
  253. package/dist/fp/array/orderBy.d.mts +1 -1
  254. package/dist/fp/array/orderBy.d.ts +1 -1
  255. package/dist/fp/array/sortBy.d.mts +1 -1
  256. package/dist/fp/array/sortBy.d.ts +1 -1
  257. package/dist/fp/array/unzip.d.mts +3 -0
  258. package/dist/fp/array/unzip.d.ts +3 -0
  259. package/dist/fp/array/unzip.js +3 -0
  260. package/dist/fp/array/unzip.mjs +3 -0
  261. package/dist/function/memoize.d.mts +3 -2
  262. package/dist/function/memoize.d.ts +3 -2
  263. package/dist/function/memoize.js +3 -2
  264. package/dist/function/memoize.mjs +3 -2
  265. package/dist/function/partial.d.mts +2 -2
  266. package/dist/function/partial.d.ts +2 -2
  267. package/dist/function/partialRight.d.mts +5 -5
  268. package/dist/function/partialRight.d.ts +5 -5
  269. package/dist/function/rest.d.mts +1 -1
  270. package/dist/function/rest.d.ts +1 -1
  271. package/dist/function/rest.js +1 -1
  272. package/dist/function/rest.mjs +1 -1
  273. package/dist/function/retry.d.mts +7 -4
  274. package/dist/function/retry.d.ts +7 -4
  275. package/dist/function/retry.js +4 -2
  276. package/dist/function/retry.mjs +1 -1
  277. package/dist/index.d.mts +9 -2
  278. package/dist/index.d.ts +9 -2
  279. package/dist/index.js +18 -4
  280. package/dist/index.mjs +12 -5
  281. package/dist/object/cloneDeepWith.d.mts +3 -1
  282. package/dist/object/cloneDeepWith.d.ts +3 -1
  283. package/dist/object/cloneDeepWith.js +3 -1
  284. package/dist/object/cloneDeepWith.mjs +3 -1
  285. package/dist/object/deepFreeze.d.mts +20 -0
  286. package/dist/object/deepFreeze.d.ts +20 -0
  287. package/dist/object/deepFreeze.js +29 -0
  288. package/dist/object/deepFreeze.mjs +29 -0
  289. package/dist/object/flattenObject.d.mts +16 -1
  290. package/dist/object/flattenObject.d.ts +16 -1
  291. package/dist/object/flattenObject.js +15 -6
  292. package/dist/object/flattenObject.mjs +15 -6
  293. package/dist/object/index.d.mts +7 -1
  294. package/dist/object/index.d.ts +7 -1
  295. package/dist/object/index.js +12 -0
  296. package/dist/object/index.mjs +7 -1
  297. package/dist/object/mapKeysAsync.d.mts +25 -0
  298. package/dist/object/mapKeysAsync.d.ts +25 -0
  299. package/dist/object/mapKeysAsync.js +32 -0
  300. package/dist/object/mapKeysAsync.mjs +32 -0
  301. package/dist/object/mapValuesAsync.d.mts +26 -0
  302. package/dist/object/mapValuesAsync.d.ts +26 -0
  303. package/dist/object/mapValuesAsync.js +32 -0
  304. package/dist/object/mapValuesAsync.mjs +32 -0
  305. package/dist/object/merge.js +2 -4
  306. package/dist/object/merge.mjs +1 -3
  307. package/dist/object/mergeWith.js +4 -4
  308. package/dist/object/mergeWith.mjs +4 -4
  309. package/dist/object/toCamelCaseKeys.d.mts +2 -6
  310. package/dist/object/toCamelCaseKeys.d.ts +2 -6
  311. package/dist/object/toConstantCaseKeys.d.mts +52 -0
  312. package/dist/object/toConstantCaseKeys.d.ts +52 -0
  313. package/dist/object/toConstantCaseKeys.js +66 -0
  314. package/dist/object/toConstantCaseKeys.mjs +66 -0
  315. package/dist/object/toKebabCaseKeys.d.mts +52 -0
  316. package/dist/object/toKebabCaseKeys.d.ts +52 -0
  317. package/dist/object/toKebabCaseKeys.js +66 -0
  318. package/dist/object/toKebabCaseKeys.mjs +66 -0
  319. package/dist/object/toMerged.js +4 -4
  320. package/dist/object/toMerged.mjs +4 -4
  321. package/dist/object/toPascalCaseKeys.d.mts +52 -0
  322. package/dist/object/toPascalCaseKeys.d.ts +52 -0
  323. package/dist/object/toPascalCaseKeys.js +66 -0
  324. package/dist/object/toPascalCaseKeys.mjs +66 -0
  325. package/dist/object/toSnakeCaseKeys.d.mts +2 -3
  326. package/dist/object/toSnakeCaseKeys.d.ts +2 -3
  327. package/dist/promise/index.d.mts +2 -1
  328. package/dist/promise/index.d.ts +2 -1
  329. package/dist/promise/index.js +2 -0
  330. package/dist/promise/index.mjs +2 -1
  331. package/dist/promise/limitAsync.d.mts +35 -0
  332. package/dist/promise/limitAsync.d.ts +35 -0
  333. package/dist/promise/limitAsync.js +46 -0
  334. package/dist/promise/limitAsync.mjs +46 -0
  335. package/dist/string/dedent.d.mts +37 -0
  336. package/dist/string/dedent.d.ts +37 -0
  337. package/dist/string/dedent.js +38 -0
  338. package/dist/string/dedent.mjs +38 -0
  339. package/dist/string/index.d.mts +2 -1
  340. package/dist/string/index.d.ts +2 -1
  341. package/dist/string/index.js +5 -3
  342. package/dist/string/index.mjs +5 -4
  343. package/dist/types/ToCamelCaseKeys.d.mts +24 -0
  344. package/dist/types/ToCamelCaseKeys.d.ts +24 -0
  345. package/dist/types/ToConstantCaseKeys.d.mts +21 -0
  346. package/dist/types/ToConstantCaseKeys.d.ts +21 -0
  347. package/dist/types/ToKebabCaseKeys.d.mts +23 -0
  348. package/dist/types/ToKebabCaseKeys.d.ts +23 -0
  349. package/dist/types/ToPascalCaseKeys.d.mts +24 -0
  350. package/dist/types/ToPascalCaseKeys.d.ts +24 -0
  351. package/dist/types/ToSnakeCaseKeys.d.mts +21 -0
  352. package/dist/types/ToSnakeCaseKeys.d.ts +21 -0
  353. package/dist/types/index.d.mts +6 -1
  354. package/dist/types/index.d.ts +6 -1
  355. package/package.json +27 -2
@@ -0,0 +1,20 @@
1
+ //#region src/object/deepFreeze.d.ts
2
+ /**
3
+ * Deeply freezes an object, making it and all nested objects immutable.
4
+ *
5
+ * Unlike `Object.freeze`, which only freezes the immediate properties of an object,
6
+ * `deepFreeze` recursively freezes all nested objects and arrays.
7
+ *
8
+ * @template T - The type of the object.
9
+ * @param {T} obj - The object to deeply freeze.
10
+ * @returns {T} The deeply frozen object.
11
+ *
12
+ * @example
13
+ * const frozen = deepFreeze({ user: { name: "Alex", age: 20 } });
14
+ *
15
+ * frozen.user = {}; // TypeError in strict mode
16
+ * frozen.user.age = 22; // TypeError in strict mode
17
+ */
18
+ declare function deepFreeze<T>(obj: T): T;
19
+ //#endregion
20
+ export { deepFreeze };
@@ -0,0 +1,29 @@
1
+ //#region src/object/deepFreeze.ts
2
+ /**
3
+ * Deeply freezes an object, making it and all nested objects immutable.
4
+ *
5
+ * Unlike `Object.freeze`, which only freezes the immediate properties of an object,
6
+ * `deepFreeze` recursively freezes all nested objects and arrays.
7
+ *
8
+ * @template T - The type of the object.
9
+ * @param {T} obj - The object to deeply freeze.
10
+ * @returns {T} The deeply frozen object.
11
+ *
12
+ * @example
13
+ * const frozen = deepFreeze({ user: { name: "Alex", age: 20 } });
14
+ *
15
+ * frozen.user = {}; // TypeError in strict mode
16
+ * frozen.user.age = 22; // TypeError in strict mode
17
+ */
18
+ function deepFreeze(obj) {
19
+ if (obj === null || typeof obj !== "object") return obj;
20
+ Object.freeze(obj);
21
+ const keys = Object.keys(obj);
22
+ for (let i = 0; i < keys.length; i++) {
23
+ const value = obj[keys[i]];
24
+ if (value !== null && typeof value === "object" && !Object.isFrozen(value)) deepFreeze(value);
25
+ }
26
+ return obj;
27
+ }
28
+ //#endregion
29
+ exports.deepFreeze = deepFreeze;
@@ -0,0 +1,29 @@
1
+ //#region src/object/deepFreeze.ts
2
+ /**
3
+ * Deeply freezes an object, making it and all nested objects immutable.
4
+ *
5
+ * Unlike `Object.freeze`, which only freezes the immediate properties of an object,
6
+ * `deepFreeze` recursively freezes all nested objects and arrays.
7
+ *
8
+ * @template T - The type of the object.
9
+ * @param {T} obj - The object to deeply freeze.
10
+ * @returns {T} The deeply frozen object.
11
+ *
12
+ * @example
13
+ * const frozen = deepFreeze({ user: { name: "Alex", age: 20 } });
14
+ *
15
+ * frozen.user = {}; // TypeError in strict mode
16
+ * frozen.user.age = 22; // TypeError in strict mode
17
+ */
18
+ function deepFreeze(obj) {
19
+ if (obj === null || typeof obj !== "object") return obj;
20
+ Object.freeze(obj);
21
+ const keys = Object.keys(obj);
22
+ for (let i = 0; i < keys.length; i++) {
23
+ const value = obj[keys[i]];
24
+ if (value !== null && typeof value === "object" && !Object.isFrozen(value)) deepFreeze(value);
25
+ }
26
+ return obj;
27
+ }
28
+ //#endregion
29
+ export { deepFreeze };
@@ -5,12 +5,18 @@ interface FlattenObjectOptions {
5
5
  * @default '.'
6
6
  */
7
7
  delimiter?: string;
8
+ /**
9
+ * If true, arrays are kept as values instead of being flattened.
10
+ * @default false
11
+ */
12
+ preserveArrays?: boolean;
8
13
  }
9
14
  /**
10
15
  * Flattens a nested object into a single level object with delimiter-separated keys.
11
16
  *
12
17
  * @param object - The object to flatten.
13
18
  * @param [options.delimiter='.'] - The delimiter to use between nested keys.
19
+ * @param [options.preserveArrays=false] - If true, arrays are kept as values instead of being flattened.
14
20
  * @returns The flattened object.
15
21
  *
16
22
  * @example
@@ -31,9 +37,18 @@ interface FlattenObjectOptions {
31
37
  * // 'd.0': 2,
32
38
  * // 'd.1': 3
33
39
  * // }
40
+ *
41
+ * const preserved = flattenObject(nestedObject, { preserveArrays: true });
42
+ * console.log(preserved);
43
+ * // Output:
44
+ * // {
45
+ * // 'a.b.c': 1,
46
+ * // 'd': [2, 3]
47
+ * // }
34
48
  */
35
49
  declare function flattenObject(object: object, {
36
- delimiter
50
+ delimiter,
51
+ preserveArrays
37
52
  }?: FlattenObjectOptions): Record<string, any>;
38
53
  //#endregion
39
54
  export { flattenObject };
@@ -5,12 +5,18 @@ interface FlattenObjectOptions {
5
5
  * @default '.'
6
6
  */
7
7
  delimiter?: string;
8
+ /**
9
+ * If true, arrays are kept as values instead of being flattened.
10
+ * @default false
11
+ */
12
+ preserveArrays?: boolean;
8
13
  }
9
14
  /**
10
15
  * Flattens a nested object into a single level object with delimiter-separated keys.
11
16
  *
12
17
  * @param object - The object to flatten.
13
18
  * @param [options.delimiter='.'] - The delimiter to use between nested keys.
19
+ * @param [options.preserveArrays=false] - If true, arrays are kept as values instead of being flattened.
14
20
  * @returns The flattened object.
15
21
  *
16
22
  * @example
@@ -31,9 +37,18 @@ interface FlattenObjectOptions {
31
37
  * // 'd.0': 2,
32
38
  * // 'd.1': 3
33
39
  * // }
40
+ *
41
+ * const preserved = flattenObject(nestedObject, { preserveArrays: true });
42
+ * console.log(preserved);
43
+ * // Output:
44
+ * // {
45
+ * // 'a.b.c': 1,
46
+ * // 'd': [2, 3]
47
+ * // }
34
48
  */
35
49
  declare function flattenObject(object: object, {
36
- delimiter
50
+ delimiter,
51
+ preserveArrays
37
52
  }?: FlattenObjectOptions): Record<string, any>;
38
53
  //#endregion
39
54
  export { flattenObject };
@@ -5,6 +5,7 @@ const require_isPlainObject = require("../predicate/isPlainObject.js");
5
5
  *
6
6
  * @param object - The object to flatten.
7
7
  * @param [options.delimiter='.'] - The delimiter to use between nested keys.
8
+ * @param [options.preserveArrays=false] - If true, arrays are kept as values instead of being flattened.
8
9
  * @returns The flattened object.
9
10
  *
10
11
  * @example
@@ -25,11 +26,19 @@ const require_isPlainObject = require("../predicate/isPlainObject.js");
25
26
  * // 'd.0': 2,
26
27
  * // 'd.1': 3
27
28
  * // }
29
+ *
30
+ * const preserved = flattenObject(nestedObject, { preserveArrays: true });
31
+ * console.log(preserved);
32
+ * // Output:
33
+ * // {
34
+ * // 'a.b.c': 1,
35
+ * // 'd': [2, 3]
36
+ * // }
28
37
  */
29
- function flattenObject(object, { delimiter = "." } = {}) {
30
- return flattenObjectImpl(object, "", delimiter);
38
+ function flattenObject(object, { delimiter = ".", preserveArrays = false } = {}) {
39
+ return flattenObjectImpl(object, "", delimiter, preserveArrays);
31
40
  }
32
- function flattenObjectImpl(object, prefix, delimiter) {
41
+ function flattenObjectImpl(object, prefix, delimiter, preserveArrays) {
33
42
  const result = {};
34
43
  const keys = Object.keys(object);
35
44
  for (let i = 0; i < keys.length; i++) {
@@ -37,11 +46,11 @@ function flattenObjectImpl(object, prefix, delimiter) {
37
46
  const value = object[key];
38
47
  const prefixedKey = prefix ? `${prefix}${delimiter}${key}` : key;
39
48
  if (require_isPlainObject.isPlainObject(value) && Object.keys(value).length > 0) {
40
- Object.assign(result, flattenObjectImpl(value, prefixedKey, delimiter));
49
+ Object.assign(result, flattenObjectImpl(value, prefixedKey, delimiter, preserveArrays));
41
50
  continue;
42
51
  }
43
- if (Array.isArray(value) && value.length > 0) {
44
- Object.assign(result, flattenObjectImpl(value, prefixedKey, delimiter));
52
+ if (Array.isArray(value) && !preserveArrays && value.length > 0) {
53
+ Object.assign(result, flattenObjectImpl(value, prefixedKey, delimiter, preserveArrays));
45
54
  continue;
46
55
  }
47
56
  result[prefixedKey] = value;
@@ -5,6 +5,7 @@ import { isPlainObject } from "../predicate/isPlainObject.mjs";
5
5
  *
6
6
  * @param object - The object to flatten.
7
7
  * @param [options.delimiter='.'] - The delimiter to use between nested keys.
8
+ * @param [options.preserveArrays=false] - If true, arrays are kept as values instead of being flattened.
8
9
  * @returns The flattened object.
9
10
  *
10
11
  * @example
@@ -25,11 +26,19 @@ import { isPlainObject } from "../predicate/isPlainObject.mjs";
25
26
  * // 'd.0': 2,
26
27
  * // 'd.1': 3
27
28
  * // }
29
+ *
30
+ * const preserved = flattenObject(nestedObject, { preserveArrays: true });
31
+ * console.log(preserved);
32
+ * // Output:
33
+ * // {
34
+ * // 'a.b.c': 1,
35
+ * // 'd': [2, 3]
36
+ * // }
28
37
  */
29
- function flattenObject(object, { delimiter = "." } = {}) {
30
- return flattenObjectImpl(object, "", delimiter);
38
+ function flattenObject(object, { delimiter = ".", preserveArrays = false } = {}) {
39
+ return flattenObjectImpl(object, "", delimiter, preserveArrays);
31
40
  }
32
- function flattenObjectImpl(object, prefix, delimiter) {
41
+ function flattenObjectImpl(object, prefix, delimiter, preserveArrays) {
33
42
  const result = {};
34
43
  const keys = Object.keys(object);
35
44
  for (let i = 0; i < keys.length; i++) {
@@ -37,11 +46,11 @@ function flattenObjectImpl(object, prefix, delimiter) {
37
46
  const value = object[key];
38
47
  const prefixedKey = prefix ? `${prefix}${delimiter}${key}` : key;
39
48
  if (isPlainObject(value) && Object.keys(value).length > 0) {
40
- Object.assign(result, flattenObjectImpl(value, prefixedKey, delimiter));
49
+ Object.assign(result, flattenObjectImpl(value, prefixedKey, delimiter, preserveArrays));
41
50
  continue;
42
51
  }
43
- if (Array.isArray(value) && value.length > 0) {
44
- Object.assign(result, flattenObjectImpl(value, prefixedKey, delimiter));
52
+ if (Array.isArray(value) && !preserveArrays && value.length > 0) {
53
+ Object.assign(result, flattenObjectImpl(value, prefixedKey, delimiter, preserveArrays));
45
54
  continue;
46
55
  }
47
56
  result[prefixedKey] = value;
@@ -1,11 +1,14 @@
1
1
  import { clone } from "./clone.mjs";
2
2
  import { cloneDeep } from "./cloneDeep.mjs";
3
3
  import { cloneDeepWith } from "./cloneDeepWith.mjs";
4
+ import { deepFreeze } from "./deepFreeze.mjs";
4
5
  import { findKey } from "./findKey.mjs";
5
6
  import { flattenObject } from "./flattenObject.mjs";
6
7
  import { invert } from "./invert.mjs";
7
8
  import { mapKeys } from "./mapKeys.mjs";
9
+ import { mapKeysAsync } from "./mapKeysAsync.mjs";
8
10
  import { mapValues } from "./mapValues.mjs";
11
+ import { mapValuesAsync } from "./mapValuesAsync.mjs";
9
12
  import { merge } from "./merge.mjs";
10
13
  import { mergeWith } from "./mergeWith.mjs";
11
14
  import { omit } from "./omit.mjs";
@@ -14,6 +17,9 @@ import { pick } from "./pick.mjs";
14
17
  import { pickBy } from "./pickBy.mjs";
15
18
  import { sortKeys } from "./sortKeys.mjs";
16
19
  import { toCamelCaseKeys } from "./toCamelCaseKeys.mjs";
20
+ import { toConstantCaseKeys } from "./toConstantCaseKeys.mjs";
21
+ import { toKebabCaseKeys } from "./toKebabCaseKeys.mjs";
17
22
  import { toMerged } from "./toMerged.mjs";
23
+ import { toPascalCaseKeys } from "./toPascalCaseKeys.mjs";
18
24
  import { toSnakeCaseKeys } from "./toSnakeCaseKeys.mjs";
19
- export { clone, cloneDeep, cloneDeepWith, findKey, flattenObject, invert, mapKeys, mapValues, merge, mergeWith, omit, omitBy, pick, pickBy, sortKeys, toCamelCaseKeys, toMerged, toSnakeCaseKeys };
25
+ export { clone, cloneDeep, cloneDeepWith, deepFreeze, findKey, flattenObject, invert, mapKeys, mapKeysAsync, mapValues, mapValuesAsync, merge, mergeWith, omit, omitBy, pick, pickBy, sortKeys, toCamelCaseKeys, toConstantCaseKeys, toKebabCaseKeys, toMerged, toPascalCaseKeys, toSnakeCaseKeys };
@@ -1,11 +1,14 @@
1
1
  import { clone } from "./clone.js";
2
2
  import { cloneDeep } from "./cloneDeep.js";
3
3
  import { cloneDeepWith } from "./cloneDeepWith.js";
4
+ import { deepFreeze } from "./deepFreeze.js";
4
5
  import { findKey } from "./findKey.js";
5
6
  import { flattenObject } from "./flattenObject.js";
6
7
  import { invert } from "./invert.js";
7
8
  import { mapKeys } from "./mapKeys.js";
9
+ import { mapKeysAsync } from "./mapKeysAsync.js";
8
10
  import { mapValues } from "./mapValues.js";
11
+ import { mapValuesAsync } from "./mapValuesAsync.js";
9
12
  import { merge } from "./merge.js";
10
13
  import { mergeWith } from "./mergeWith.js";
11
14
  import { omit } from "./omit.js";
@@ -14,6 +17,9 @@ import { pick } from "./pick.js";
14
17
  import { pickBy } from "./pickBy.js";
15
18
  import { sortKeys } from "./sortKeys.js";
16
19
  import { toCamelCaseKeys } from "./toCamelCaseKeys.js";
20
+ import { toConstantCaseKeys } from "./toConstantCaseKeys.js";
21
+ import { toKebabCaseKeys } from "./toKebabCaseKeys.js";
17
22
  import { toMerged } from "./toMerged.js";
23
+ import { toPascalCaseKeys } from "./toPascalCaseKeys.js";
18
24
  import { toSnakeCaseKeys } from "./toSnakeCaseKeys.js";
19
- export { clone, cloneDeep, cloneDeepWith, findKey, flattenObject, invert, mapKeys, mapValues, merge, mergeWith, omit, omitBy, pick, pickBy, sortKeys, toCamelCaseKeys, toMerged, toSnakeCaseKeys };
25
+ export { clone, cloneDeep, cloneDeepWith, deepFreeze, findKey, flattenObject, invert, mapKeys, mapKeysAsync, mapValues, mapValuesAsync, merge, mergeWith, omit, omitBy, pick, pickBy, sortKeys, toCamelCaseKeys, toConstantCaseKeys, toKebabCaseKeys, toMerged, toPascalCaseKeys, toSnakeCaseKeys };
@@ -2,11 +2,14 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_clone = require("./clone.js");
3
3
  const require_cloneDeepWith = require("./cloneDeepWith.js");
4
4
  const require_cloneDeep = require("./cloneDeep.js");
5
+ const require_deepFreeze = require("./deepFreeze.js");
5
6
  const require_findKey = require("./findKey.js");
6
7
  const require_flattenObject = require("./flattenObject.js");
7
8
  const require_invert = require("./invert.js");
8
9
  const require_mapKeys = require("./mapKeys.js");
10
+ const require_mapKeysAsync = require("./mapKeysAsync.js");
9
11
  const require_mapValues = require("./mapValues.js");
12
+ const require_mapValuesAsync = require("./mapValuesAsync.js");
10
13
  const require_merge = require("./merge.js");
11
14
  const require_mergeWith = require("./mergeWith.js");
12
15
  const require_omit = require("./omit.js");
@@ -15,16 +18,22 @@ const require_pick = require("./pick.js");
15
18
  const require_pickBy = require("./pickBy.js");
16
19
  const require_sortKeys = require("./sortKeys.js");
17
20
  const require_toCamelCaseKeys = require("./toCamelCaseKeys.js");
21
+ const require_toConstantCaseKeys = require("./toConstantCaseKeys.js");
22
+ const require_toKebabCaseKeys = require("./toKebabCaseKeys.js");
18
23
  const require_toMerged = require("./toMerged.js");
24
+ const require_toPascalCaseKeys = require("./toPascalCaseKeys.js");
19
25
  const require_toSnakeCaseKeys = require("./toSnakeCaseKeys.js");
20
26
  exports.clone = require_clone.clone;
21
27
  exports.cloneDeep = require_cloneDeep.cloneDeep;
22
28
  exports.cloneDeepWith = require_cloneDeepWith.cloneDeepWith;
29
+ exports.deepFreeze = require_deepFreeze.deepFreeze;
23
30
  exports.findKey = require_findKey.findKey;
24
31
  exports.flattenObject = require_flattenObject.flattenObject;
25
32
  exports.invert = require_invert.invert;
26
33
  exports.mapKeys = require_mapKeys.mapKeys;
34
+ exports.mapKeysAsync = require_mapKeysAsync.mapKeysAsync;
27
35
  exports.mapValues = require_mapValues.mapValues;
36
+ exports.mapValuesAsync = require_mapValuesAsync.mapValuesAsync;
28
37
  exports.merge = require_merge.merge;
29
38
  exports.mergeWith = require_mergeWith.mergeWith;
30
39
  exports.omit = require_omit.omit;
@@ -33,5 +42,8 @@ exports.pick = require_pick.pick;
33
42
  exports.pickBy = require_pickBy.pickBy;
34
43
  exports.sortKeys = require_sortKeys.sortKeys;
35
44
  exports.toCamelCaseKeys = require_toCamelCaseKeys.toCamelCaseKeys;
45
+ exports.toConstantCaseKeys = require_toConstantCaseKeys.toConstantCaseKeys;
46
+ exports.toKebabCaseKeys = require_toKebabCaseKeys.toKebabCaseKeys;
36
47
  exports.toMerged = require_toMerged.toMerged;
48
+ exports.toPascalCaseKeys = require_toPascalCaseKeys.toPascalCaseKeys;
37
49
  exports.toSnakeCaseKeys = require_toSnakeCaseKeys.toSnakeCaseKeys;
@@ -1,11 +1,14 @@
1
1
  import { clone } from "./clone.mjs";
2
2
  import { cloneDeepWith } from "./cloneDeepWith.mjs";
3
3
  import { cloneDeep } from "./cloneDeep.mjs";
4
+ import { deepFreeze } from "./deepFreeze.mjs";
4
5
  import { findKey } from "./findKey.mjs";
5
6
  import { flattenObject } from "./flattenObject.mjs";
6
7
  import { invert } from "./invert.mjs";
7
8
  import { mapKeys } from "./mapKeys.mjs";
9
+ import { mapKeysAsync } from "./mapKeysAsync.mjs";
8
10
  import { mapValues } from "./mapValues.mjs";
11
+ import { mapValuesAsync } from "./mapValuesAsync.mjs";
9
12
  import { merge } from "./merge.mjs";
10
13
  import { mergeWith } from "./mergeWith.mjs";
11
14
  import { omit } from "./omit.mjs";
@@ -14,6 +17,9 @@ import { pick } from "./pick.mjs";
14
17
  import { pickBy } from "./pickBy.mjs";
15
18
  import { sortKeys } from "./sortKeys.mjs";
16
19
  import { toCamelCaseKeys } from "./toCamelCaseKeys.mjs";
20
+ import { toConstantCaseKeys } from "./toConstantCaseKeys.mjs";
21
+ import { toKebabCaseKeys } from "./toKebabCaseKeys.mjs";
17
22
  import { toMerged } from "./toMerged.mjs";
23
+ import { toPascalCaseKeys } from "./toPascalCaseKeys.mjs";
18
24
  import { toSnakeCaseKeys } from "./toSnakeCaseKeys.mjs";
19
- export { clone, cloneDeep, cloneDeepWith, findKey, flattenObject, invert, mapKeys, mapValues, merge, mergeWith, omit, omitBy, pick, pickBy, sortKeys, toCamelCaseKeys, toMerged, toSnakeCaseKeys };
25
+ export { clone, cloneDeep, cloneDeepWith, deepFreeze, findKey, flattenObject, invert, mapKeys, mapKeysAsync, mapValues, mapValuesAsync, merge, mergeWith, omit, omitBy, pick, pickBy, sortKeys, toCamelCaseKeys, toConstantCaseKeys, toKebabCaseKeys, toMerged, toPascalCaseKeys, toSnakeCaseKeys };
@@ -0,0 +1,25 @@
1
+ //#region src/object/mapKeysAsync.d.ts
2
+ interface MapKeysAsyncOptions {
3
+ concurrency?: number;
4
+ }
5
+ /**
6
+ * Creates a new object with the same values as the given object, but with keys generated
7
+ * by running each own enumerable property of the object through the async iteratee function.
8
+ *
9
+ * @template T - The type of the object.
10
+ * @template K - The type of the new keys generated by the iteratee function.
11
+ *
12
+ * @param {T} object - The object to iterate over.
13
+ * @param {(value: T[keyof T], key: keyof T, object: T) => Promise<K>} getNewKey - The async function invoked per own enumerable property.
14
+ * @param {MapKeysAsyncOptions} [options] Optional configuration object.
15
+ * @returns {Promise<Record<K, T[keyof T]>>} - A promise that resolves to the new mapped object.
16
+ *
17
+ * @example
18
+ * // Example usage:
19
+ * const obj = { a: 1, b: 2 };
20
+ * const result = await mapKeysAsync(obj, async (value, key) => key + value);
21
+ * console.log(result); // { a1: 1, b2: 2 }
22
+ */
23
+ declare function mapKeysAsync<T extends Record<PropertyKey, any>, K extends PropertyKey>(object: T, getNewKey: (value: T[keyof T], key: keyof T, object: T) => Promise<K>, options?: MapKeysAsyncOptions): Promise<Record<K, T[keyof T]>>;
24
+ //#endregion
25
+ export { mapKeysAsync };
@@ -0,0 +1,25 @@
1
+ //#region src/object/mapKeysAsync.d.ts
2
+ interface MapKeysAsyncOptions {
3
+ concurrency?: number;
4
+ }
5
+ /**
6
+ * Creates a new object with the same values as the given object, but with keys generated
7
+ * by running each own enumerable property of the object through the async iteratee function.
8
+ *
9
+ * @template T - The type of the object.
10
+ * @template K - The type of the new keys generated by the iteratee function.
11
+ *
12
+ * @param {T} object - The object to iterate over.
13
+ * @param {(value: T[keyof T], key: keyof T, object: T) => Promise<K>} getNewKey - The async function invoked per own enumerable property.
14
+ * @param {MapKeysAsyncOptions} [options] Optional configuration object.
15
+ * @returns {Promise<Record<K, T[keyof T]>>} - A promise that resolves to the new mapped object.
16
+ *
17
+ * @example
18
+ * // Example usage:
19
+ * const obj = { a: 1, b: 2 };
20
+ * const result = await mapKeysAsync(obj, async (value, key) => key + value);
21
+ * console.log(result); // { a1: 1, b2: 2 }
22
+ */
23
+ declare function mapKeysAsync<T extends Record<PropertyKey, any>, K extends PropertyKey>(object: T, getNewKey: (value: T[keyof T], key: keyof T, object: T) => Promise<K>, options?: MapKeysAsyncOptions): Promise<Record<K, T[keyof T]>>;
24
+ //#endregion
25
+ export { mapKeysAsync };
@@ -0,0 +1,32 @@
1
+ const require_limitAsync = require("../promise/limitAsync.js");
2
+ //#region src/object/mapKeysAsync.ts
3
+ /**
4
+ * Creates a new object with the same values as the given object, but with keys generated
5
+ * by running each own enumerable property of the object through the async iteratee function.
6
+ *
7
+ * @template T - The type of the object.
8
+ * @template K - The type of the new keys generated by the iteratee function.
9
+ *
10
+ * @param {T} object - The object to iterate over.
11
+ * @param {(value: T[keyof T], key: keyof T, object: T) => Promise<K>} getNewKey - The async function invoked per own enumerable property.
12
+ * @param {MapKeysAsyncOptions} [options] Optional configuration object.
13
+ * @returns {Promise<Record<K, T[keyof T]>>} - A promise that resolves to the new mapped object.
14
+ *
15
+ * @example
16
+ * // Example usage:
17
+ * const obj = { a: 1, b: 2 };
18
+ * const result = await mapKeysAsync(obj, async (value, key) => key + value);
19
+ * console.log(result); // { a1: 1, b2: 2 }
20
+ */
21
+ async function mapKeysAsync(object, getNewKey, options) {
22
+ const result = {};
23
+ const keys = Object.keys(object);
24
+ if (options?.concurrency) getNewKey = require_limitAsync.limitAsync(getNewKey, options.concurrency);
25
+ await Promise.all(keys.map(async (key) => {
26
+ const value = object[key];
27
+ result[await getNewKey(value, key, object)] = value;
28
+ }));
29
+ return result;
30
+ }
31
+ //#endregion
32
+ exports.mapKeysAsync = mapKeysAsync;
@@ -0,0 +1,32 @@
1
+ import { limitAsync } from "../promise/limitAsync.mjs";
2
+ //#region src/object/mapKeysAsync.ts
3
+ /**
4
+ * Creates a new object with the same values as the given object, but with keys generated
5
+ * by running each own enumerable property of the object through the async iteratee function.
6
+ *
7
+ * @template T - The type of the object.
8
+ * @template K - The type of the new keys generated by the iteratee function.
9
+ *
10
+ * @param {T} object - The object to iterate over.
11
+ * @param {(value: T[keyof T], key: keyof T, object: T) => Promise<K>} getNewKey - The async function invoked per own enumerable property.
12
+ * @param {MapKeysAsyncOptions} [options] Optional configuration object.
13
+ * @returns {Promise<Record<K, T[keyof T]>>} - A promise that resolves to the new mapped object.
14
+ *
15
+ * @example
16
+ * // Example usage:
17
+ * const obj = { a: 1, b: 2 };
18
+ * const result = await mapKeysAsync(obj, async (value, key) => key + value);
19
+ * console.log(result); // { a1: 1, b2: 2 }
20
+ */
21
+ async function mapKeysAsync(object, getNewKey, options) {
22
+ const result = {};
23
+ const keys = Object.keys(object);
24
+ if (options?.concurrency) getNewKey = limitAsync(getNewKey, options.concurrency);
25
+ await Promise.all(keys.map(async (key) => {
26
+ const value = object[key];
27
+ result[await getNewKey(value, key, object)] = value;
28
+ }));
29
+ return result;
30
+ }
31
+ //#endregion
32
+ export { mapKeysAsync };
@@ -0,0 +1,26 @@
1
+ //#region src/object/mapValuesAsync.d.ts
2
+ interface MapValuesAsyncOptions {
3
+ concurrency?: number;
4
+ }
5
+ /**
6
+ * Creates a new object with the same keys as the given object, but with values generated
7
+ * by running each own enumerable property of the object through the async iteratee function.
8
+ *
9
+ * @template T - The type of the object.
10
+ * @template K - The type of the keys in the object.
11
+ * @template V - The type of the new values generated by the async iteratee function.
12
+ *
13
+ * @param {T} object - The object to iterate over.
14
+ * @param {(value: T[K], key: K, object: T) => Promise<V>} getNewValue - The async function invoked per own enumerable property.
15
+ * @param {MapValuesAsyncOptions} [options] Optional configuration object.
16
+ * @returns {Promise<Record<K, V>>} - A promise that resolves to the new mapped object.
17
+ *
18
+ * @example
19
+ * // Example usage:
20
+ * const obj = { a: 1, b: 2 };
21
+ * const result = await mapValuesAsync(obj, async (value) => value * 2);
22
+ * console.log(result); // { a: 2, b: 4 }
23
+ */
24
+ declare function mapValuesAsync<T extends object, K extends keyof T, V>(object: T, getNewValue: (value: T[K], key: K, object: T) => Promise<V>, options?: MapValuesAsyncOptions): Promise<Record<K, V>>;
25
+ //#endregion
26
+ export { mapValuesAsync };
@@ -0,0 +1,26 @@
1
+ //#region src/object/mapValuesAsync.d.ts
2
+ interface MapValuesAsyncOptions {
3
+ concurrency?: number;
4
+ }
5
+ /**
6
+ * Creates a new object with the same keys as the given object, but with values generated
7
+ * by running each own enumerable property of the object through the async iteratee function.
8
+ *
9
+ * @template T - The type of the object.
10
+ * @template K - The type of the keys in the object.
11
+ * @template V - The type of the new values generated by the async iteratee function.
12
+ *
13
+ * @param {T} object - The object to iterate over.
14
+ * @param {(value: T[K], key: K, object: T) => Promise<V>} getNewValue - The async function invoked per own enumerable property.
15
+ * @param {MapValuesAsyncOptions} [options] Optional configuration object.
16
+ * @returns {Promise<Record<K, V>>} - A promise that resolves to the new mapped object.
17
+ *
18
+ * @example
19
+ * // Example usage:
20
+ * const obj = { a: 1, b: 2 };
21
+ * const result = await mapValuesAsync(obj, async (value) => value * 2);
22
+ * console.log(result); // { a: 2, b: 4 }
23
+ */
24
+ declare function mapValuesAsync<T extends object, K extends keyof T, V>(object: T, getNewValue: (value: T[K], key: K, object: T) => Promise<V>, options?: MapValuesAsyncOptions): Promise<Record<K, V>>;
25
+ //#endregion
26
+ export { mapValuesAsync };
@@ -0,0 +1,32 @@
1
+ const require_limitAsync = require("../promise/limitAsync.js");
2
+ //#region src/object/mapValuesAsync.ts
3
+ /**
4
+ * Creates a new object with the same keys as the given object, but with values generated
5
+ * by running each own enumerable property of the object through the async iteratee function.
6
+ *
7
+ * @template T - The type of the object.
8
+ * @template K - The type of the keys in the object.
9
+ * @template V - The type of the new values generated by the async iteratee function.
10
+ *
11
+ * @param {T} object - The object to iterate over.
12
+ * @param {(value: T[K], key: K, object: T) => Promise<V>} getNewValue - The async function invoked per own enumerable property.
13
+ * @param {MapValuesAsyncOptions} [options] Optional configuration object.
14
+ * @returns {Promise<Record<K, V>>} - A promise that resolves to the new mapped object.
15
+ *
16
+ * @example
17
+ * // Example usage:
18
+ * const obj = { a: 1, b: 2 };
19
+ * const result = await mapValuesAsync(obj, async (value) => value * 2);
20
+ * console.log(result); // { a: 2, b: 4 }
21
+ */
22
+ async function mapValuesAsync(object, getNewValue, options) {
23
+ const result = {};
24
+ const keys = Object.keys(object);
25
+ if (options?.concurrency) getNewValue = require_limitAsync.limitAsync(getNewValue, options.concurrency);
26
+ await Promise.all(keys.map(async (key) => {
27
+ result[key] = await getNewValue(object[key], key, object);
28
+ }));
29
+ return result;
30
+ }
31
+ //#endregion
32
+ exports.mapValuesAsync = mapValuesAsync;
@@ -0,0 +1,32 @@
1
+ import { limitAsync } from "../promise/limitAsync.mjs";
2
+ //#region src/object/mapValuesAsync.ts
3
+ /**
4
+ * Creates a new object with the same keys as the given object, but with values generated
5
+ * by running each own enumerable property of the object through the async iteratee function.
6
+ *
7
+ * @template T - The type of the object.
8
+ * @template K - The type of the keys in the object.
9
+ * @template V - The type of the new values generated by the async iteratee function.
10
+ *
11
+ * @param {T} object - The object to iterate over.
12
+ * @param {(value: T[K], key: K, object: T) => Promise<V>} getNewValue - The async function invoked per own enumerable property.
13
+ * @param {MapValuesAsyncOptions} [options] Optional configuration object.
14
+ * @returns {Promise<Record<K, V>>} - A promise that resolves to the new mapped object.
15
+ *
16
+ * @example
17
+ * // Example usage:
18
+ * const obj = { a: 1, b: 2 };
19
+ * const result = await mapValuesAsync(obj, async (value) => value * 2);
20
+ * console.log(result); // { a: 2, b: 4 }
21
+ */
22
+ async function mapValuesAsync(object, getNewValue, options) {
23
+ const result = {};
24
+ const keys = Object.keys(object);
25
+ if (options?.concurrency) getNewValue = limitAsync(getNewValue, options.concurrency);
26
+ await Promise.all(keys.map(async (key) => {
27
+ result[key] = await getNewValue(object[key], key, object);
28
+ }));
29
+ return result;
30
+ }
31
+ //#endregion
32
+ export { mapValuesAsync };
@@ -1,4 +1,5 @@
1
1
  const require_isPlainObject = require("../predicate/isPlainObject.js");
2
+ const require_isMergeableValue = require("../_internal/isMergeableValue.js");
2
3
  const require_isUnsafeProperty = require("../_internal/isUnsafeProperty.js");
3
4
  //#region src/object/merge.ts
4
5
  /**
@@ -48,15 +49,12 @@ function merge(target, source) {
48
49
  if (require_isUnsafeProperty.isUnsafeProperty(key)) continue;
49
50
  const sourceValue = source[key];
50
51
  const targetValue = target[key];
51
- if (isMergeableValue(sourceValue) && isMergeableValue(targetValue)) target[key] = merge(targetValue, sourceValue);
52
+ if (require_isMergeableValue.isMergeableValue(sourceValue) && require_isMergeableValue.isMergeableValue(targetValue)) target[key] = merge(targetValue, sourceValue);
52
53
  else if (Array.isArray(sourceValue)) target[key] = merge([], sourceValue);
53
54
  else if (require_isPlainObject.isPlainObject(sourceValue)) target[key] = merge({}, sourceValue);
54
55
  else if (targetValue === void 0 || sourceValue !== void 0) target[key] = sourceValue;
55
56
  }
56
57
  return target;
57
58
  }
58
- function isMergeableValue(value) {
59
- return require_isPlainObject.isPlainObject(value) || Array.isArray(value);
60
- }
61
59
  //#endregion
62
60
  exports.merge = merge;
@@ -1,4 +1,5 @@
1
1
  import { isPlainObject } from "../predicate/isPlainObject.mjs";
2
+ import { isMergeableValue } from "../_internal/isMergeableValue.mjs";
2
3
  import { isUnsafeProperty } from "../_internal/isUnsafeProperty.mjs";
3
4
  //#region src/object/merge.ts
4
5
  /**
@@ -55,8 +56,5 @@ function merge(target, source) {
55
56
  }
56
57
  return target;
57
58
  }
58
- function isMergeableValue(value) {
59
- return isPlainObject(value) || Array.isArray(value);
60
- }
61
59
  //#endregion
62
60
  export { merge };