@pawells/typescript-common 1.4.1 → 2.1.5

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 (428) hide show
  1. package/README.md +350 -223
  2. package/{build → dist}/array/array-chunk.d.ts +1 -1
  3. package/{build → dist}/array/array-chunk.js +2 -3
  4. package/{build → dist}/array/array-compact.d.ts +1 -1
  5. package/{build → dist}/array/array-compact.js +1 -2
  6. package/{build → dist}/array/array-contains.d.ts +4 -1
  7. package/{build → dist}/array/array-contains.d.ts.map +1 -1
  8. package/{build → dist}/array/array-contains.js +6 -3
  9. package/{build → dist}/array/array-count-by.d.ts +3 -1
  10. package/dist/array/array-count-by.d.ts.map +1 -0
  11. package/{build → dist}/array/array-count-by.js +4 -2
  12. package/dist/array/array-difference.d.ts +43 -0
  13. package/dist/array/array-difference.d.ts.map +1 -0
  14. package/dist/array/array-difference.js +70 -0
  15. package/dist/array/array-element.js +1 -0
  16. package/{build → dist}/array/array-filter.d.ts +3 -1
  17. package/{build → dist}/array/array-filter.d.ts.map +1 -1
  18. package/{build → dist}/array/array-filter.js +5 -3
  19. package/{build → dist}/array/array-flatten.d.ts +2 -2
  20. package/{build → dist}/array/array-flatten.d.ts.map +1 -1
  21. package/{build → dist}/array/array-flatten.js +1 -2
  22. package/{build → dist}/array/array-group-by.d.ts +3 -1
  23. package/dist/array/array-group-by.d.ts.map +1 -0
  24. package/{build → dist}/array/array-group-by.js +12 -8
  25. package/dist/array/array-intersection.d.ts +43 -0
  26. package/dist/array/array-intersection.d.ts.map +1 -0
  27. package/dist/array/array-intersection.js +79 -0
  28. package/{build → dist}/array/array-partition.d.ts +3 -1
  29. package/{build → dist}/array/array-partition.d.ts.map +1 -1
  30. package/{build → dist}/array/array-partition.js +4 -2
  31. package/{build → dist}/array/array-range.d.ts +1 -1
  32. package/{build → dist}/array/array-range.js +1 -2
  33. package/{build → dist}/array/array-sample.d.ts +4 -4
  34. package/dist/array/array-sample.d.ts.map +1 -0
  35. package/{build → dist}/array/array-sample.js +4 -14
  36. package/{build → dist}/array/array-shuffle.d.ts +1 -1
  37. package/{build → dist}/array/array-shuffle.js +1 -2
  38. package/{build → dist}/array/array-sort-by.d.ts +1 -1
  39. package/{build → dist}/array/array-sort-by.js +1 -2
  40. package/{build → dist}/array/array-zip.d.ts +1 -1
  41. package/{build → dist}/array/array-zip.js +1 -2
  42. package/{build → dist}/array/assert.d.ts +27 -23
  43. package/dist/array/assert.d.ts.map +1 -0
  44. package/{build → dist}/array/assert.js +40 -37
  45. package/{build → dist}/array/index.js +0 -1
  46. package/{build → dist}/array/types.d.ts +29 -0
  47. package/dist/array/types.d.ts.map +1 -0
  48. package/dist/array/types.js +1 -0
  49. package/{build → dist}/array/unique.d.ts +3 -1
  50. package/{build → dist}/array/unique.d.ts.map +1 -1
  51. package/{build → dist}/array/unique.js +5 -3
  52. package/dist/asserts/errors.d.ts.map +1 -0
  53. package/{build → dist}/asserts/errors.js +5 -3
  54. package/{build → dist}/asserts/generic.d.ts +32 -3
  55. package/dist/asserts/generic.d.ts.map +1 -0
  56. package/{build → dist}/asserts/generic.js +63 -15
  57. package/dist/asserts/index.d.ts +47 -0
  58. package/dist/asserts/index.d.ts.map +1 -0
  59. package/dist/asserts/index.js +46 -0
  60. package/{build → dist}/asserts/internal-utils.d.ts.map +1 -1
  61. package/{build → dist}/asserts/internal-utils.js +0 -1
  62. package/{build → dist}/asserts/types.d.ts +56 -17
  63. package/dist/asserts/types.d.ts.map +1 -0
  64. package/dist/asserts/types.js +1 -0
  65. package/{build → dist}/asserts/utils.d.ts +18 -2
  66. package/dist/asserts/utils.d.ts.map +1 -0
  67. package/{build → dist}/asserts/utils.js +56 -1
  68. package/{build → dist}/boolean/assert.d.ts +1 -2
  69. package/{build → dist}/boolean/assert.d.ts.map +1 -1
  70. package/{build → dist}/boolean/assert.js +3 -8
  71. package/dist/boolean/index.d.ts +13 -0
  72. package/dist/boolean/index.d.ts.map +1 -0
  73. package/dist/boolean/index.js +12 -0
  74. package/{build → dist}/enum/enum-entries.d.ts +1 -1
  75. package/dist/enum/enum-entries.d.ts.map +1 -0
  76. package/{build → dist}/enum/enum-entries.js +0 -1
  77. package/{build → dist}/enum/enum-key-by-value.d.ts +1 -1
  78. package/dist/enum/enum-key-by-value.d.ts.map +1 -0
  79. package/{build → dist}/enum/enum-key-by-value.js +0 -1
  80. package/{build → dist}/enum/enum-keys.js +0 -1
  81. package/{build → dist}/enum/enum-safe-value.d.ts +1 -1
  82. package/dist/enum/enum-safe-value.d.ts.map +1 -0
  83. package/{build → dist}/enum/enum-safe-value.js +0 -1
  84. package/{build → dist}/enum/enum-values.js +0 -1
  85. package/{build → dist}/enum/index.d.ts +1 -1
  86. package/dist/enum/index.d.ts.map +1 -0
  87. package/{build → dist}/enum/index.js +1 -2
  88. package/dist/enum/types.js +1 -0
  89. package/{build → dist}/enum/validate-enum-value.d.ts +1 -1
  90. package/dist/enum/validate-enum-value.d.ts.map +1 -0
  91. package/{build → dist}/enum/validate-enum-value.js +0 -1
  92. package/{build → dist}/function/compose.d.ts +9 -2
  93. package/dist/function/compose.d.ts.map +1 -0
  94. package/{build → dist}/function/compose.js +0 -1
  95. package/{build → dist}/function/debounce.d.ts +8 -1
  96. package/dist/function/debounce.d.ts.map +1 -0
  97. package/{build → dist}/function/debounce.js +6 -1
  98. package/{build → dist}/function/index.js +0 -1
  99. package/dist/function/memoize.d.ts +43 -0
  100. package/dist/function/memoize.d.ts.map +1 -0
  101. package/dist/function/memoize.js +59 -0
  102. package/{build → dist}/function/once.d.ts +1 -0
  103. package/{build → dist}/function/once.d.ts.map +1 -1
  104. package/{build → dist}/function/once.js +2 -1
  105. package/{build → dist}/function/sleep.js +0 -1
  106. package/dist/function/throttle.d.ts +25 -0
  107. package/dist/function/throttle.d.ts.map +1 -0
  108. package/{build → dist}/function/throttle.js +7 -1
  109. package/dist/function/types.d.ts +18 -0
  110. package/dist/function/types.d.ts.map +1 -0
  111. package/dist/function/types.js +1 -0
  112. package/dist/index.d.ts +11 -0
  113. package/dist/index.d.ts.map +1 -0
  114. package/dist/index.js +10 -0
  115. package/{build → dist}/lru-cache.d.ts +19 -0
  116. package/dist/lru-cache.d.ts.map +1 -0
  117. package/{build → dist}/lru-cache.js +24 -2
  118. package/{build → dist}/number/assert.d.ts.map +1 -1
  119. package/{build → dist}/number/assert.js +38 -43
  120. package/dist/number/index.d.ts +13 -0
  121. package/dist/number/index.d.ts.map +1 -0
  122. package/dist/number/index.js +12 -0
  123. package/{build → dist}/object/assert-object.d.ts +5 -1
  124. package/{build → dist}/object/assert-object.d.ts.map +1 -1
  125. package/{build → dist}/object/assert-object.js +4 -1
  126. package/{build → dist}/object/assert.d.ts +1 -1
  127. package/dist/object/assert.d.ts.map +1 -0
  128. package/{build → dist}/object/assert.js +7 -29
  129. package/{build → dist}/object/clone.d.ts.map +1 -1
  130. package/{build → dist}/object/clone.js +11 -5
  131. package/{build → dist}/object/equals.d.ts +1 -1
  132. package/{build → dist}/object/equals.d.ts.map +1 -1
  133. package/{build → dist}/object/equals.js +12 -9
  134. package/dist/object/filter-cached.d.ts +44 -0
  135. package/{build → dist}/object/filter-cached.d.ts.map +1 -1
  136. package/{build → dist}/object/filter-cached.js +41 -2
  137. package/{build → dist}/object/filter.d.ts +1 -1
  138. package/{build → dist}/object/filter.d.ts.map +1 -1
  139. package/{build → dist}/object/filter.js +38 -70
  140. package/{build → dist}/object/has-circular-reference.d.ts.map +1 -1
  141. package/{build → dist}/object/has-circular-reference.js +4 -2
  142. package/{build → dist}/object/hash.d.ts +5 -1
  143. package/dist/object/hash.d.ts.map +1 -0
  144. package/{build → dist}/object/hash.js +20 -6
  145. package/{build → dist}/object/index.d.ts +2 -2
  146. package/{build → dist}/object/index.d.ts.map +1 -1
  147. package/{build → dist}/object/index.js +1 -2
  148. package/{build → dist}/object/json-circular-replacer.d.ts.map +1 -1
  149. package/{build → dist}/object/json-circular-replacer.js +0 -1
  150. package/{build → dist}/object/key-value-pairs.js +0 -1
  151. package/dist/object/map-cached.d.ts +31 -0
  152. package/dist/object/map-cached.d.ts.map +1 -0
  153. package/{build → dist}/object/map-cached.js +34 -6
  154. package/{build → dist}/object/map.js +0 -1
  155. package/{build → dist}/object/merge.d.ts.map +1 -1
  156. package/{build → dist}/object/merge.js +7 -7
  157. package/{build → dist}/object/object-diff.d.ts +2 -2
  158. package/{build → dist}/object/object-diff.d.ts.map +1 -1
  159. package/{build → dist}/object/object-diff.js +11 -5
  160. package/{build → dist}/object/object-flatten.d.ts +1 -1
  161. package/{build → dist}/object/object-flatten.d.ts.map +1 -1
  162. package/{build → dist}/object/object-flatten.js +6 -4
  163. package/{build → dist}/object/object-invert.js +0 -1
  164. package/{build → dist}/object/omit.js +0 -1
  165. package/{build → dist}/object/pick.js +0 -1
  166. package/{build → dist}/object/property-paths.d.ts +2 -2
  167. package/{build → dist}/object/property-paths.d.ts.map +1 -1
  168. package/{build → dist}/object/property-paths.js +13 -9
  169. package/dist/object/security-utils.d.ts +193 -0
  170. package/dist/object/security-utils.d.ts.map +1 -0
  171. package/dist/object/security-utils.js +297 -0
  172. package/{build → dist}/object/sort-keys.d.ts +1 -1
  173. package/{build → dist}/object/sort-keys.d.ts.map +1 -1
  174. package/{build → dist}/object/sort-keys.js +18 -11
  175. package/{build → dist}/object/types.d.ts +61 -20
  176. package/dist/object/types.d.ts.map +1 -0
  177. package/dist/object/types.js +1 -0
  178. package/{build → dist}/string/assert.d.ts +5 -0
  179. package/dist/string/assert.d.ts.map +1 -0
  180. package/{build → dist}/string/assert.js +14 -10
  181. package/dist/string/case-conversion.d.ts +79 -0
  182. package/dist/string/case-conversion.d.ts.map +1 -0
  183. package/{build → dist}/string/case-conversion.js +59 -30
  184. package/dist/string/comparison.d.ts +20 -0
  185. package/dist/string/comparison.d.ts.map +1 -0
  186. package/dist/string/comparison.js +27 -0
  187. package/{build → dist}/string/formatting.d.ts +35 -22
  188. package/dist/string/formatting.d.ts.map +1 -0
  189. package/{build → dist}/string/formatting.js +40 -25
  190. package/{build → dist}/string/index.d.ts +1 -0
  191. package/{build → dist}/string/index.d.ts.map +1 -1
  192. package/{build → dist}/string/index.js +1 -1
  193. package/dist/string/transformation.d.ts +28 -0
  194. package/dist/string/transformation.d.ts.map +1 -0
  195. package/dist/string/transformation.js +42 -0
  196. package/dist/string/types.d.ts +118 -0
  197. package/dist/string/types.d.ts.map +1 -0
  198. package/dist/string/types.js +1 -0
  199. package/dist/string/validation.d.ts +30 -0
  200. package/dist/string/validation.d.ts.map +1 -0
  201. package/dist/string/validation.js +38 -0
  202. package/dist/time/elapsed-time/constants.d.ts +36 -0
  203. package/{build → dist}/time/elapsed-time/constants.d.ts.map +1 -1
  204. package/{build → dist}/time/elapsed-time/constants.js +32 -3
  205. package/{build → dist}/time/elapsed-time/elapsed-time.d.ts +67 -15
  206. package/dist/time/elapsed-time/elapsed-time.d.ts.map +1 -0
  207. package/{build → dist}/time/elapsed-time/elapsed-time.js +172 -78
  208. package/dist/time/elapsed-time/types.d.ts +336 -0
  209. package/dist/time/elapsed-time/types.d.ts.map +1 -0
  210. package/dist/time/elapsed-time/types.js +1 -0
  211. package/{build → dist}/time/elapsed-time/utils.d.ts +1 -1
  212. package/dist/time/elapsed-time/utils.d.ts.map +1 -0
  213. package/{build → dist}/time/elapsed-time/utils.js +0 -1
  214. package/{build → dist}/time/index.d.ts +0 -2
  215. package/{build → dist}/time/index.d.ts.map +1 -1
  216. package/{build → dist}/time/index.js +0 -2
  217. package/{build → dist}/time/stopwatch/entry.d.ts +1 -1
  218. package/dist/time/stopwatch/entry.d.ts.map +1 -0
  219. package/{build → dist}/time/stopwatch/entry.js +0 -1
  220. package/{build → dist}/time/stopwatch/stopwatch.d.ts +9 -3
  221. package/dist/time/stopwatch/stopwatch.d.ts.map +1 -0
  222. package/{build → dist}/time/stopwatch/stopwatch.js +9 -4
  223. package/package.json +58 -81
  224. package/LICENSE +0 -21
  225. package/build/array/array-chunk.js.map +0 -1
  226. package/build/array/array-compact.js.map +0 -1
  227. package/build/array/array-contains.js.map +0 -1
  228. package/build/array/array-count-by.d.ts.map +0 -1
  229. package/build/array/array-count-by.js.map +0 -1
  230. package/build/array/array-difference.d.ts +0 -25
  231. package/build/array/array-difference.d.ts.map +0 -1
  232. package/build/array/array-difference.js +0 -34
  233. package/build/array/array-difference.js.map +0 -1
  234. package/build/array/array-element.js +0 -2
  235. package/build/array/array-element.js.map +0 -1
  236. package/build/array/array-filter.js.map +0 -1
  237. package/build/array/array-flatten.js.map +0 -1
  238. package/build/array/array-group-by.d.ts.map +0 -1
  239. package/build/array/array-group-by.js.map +0 -1
  240. package/build/array/array-intersection.d.ts +0 -25
  241. package/build/array/array-intersection.d.ts.map +0 -1
  242. package/build/array/array-intersection.js +0 -39
  243. package/build/array/array-intersection.js.map +0 -1
  244. package/build/array/array-partition.js.map +0 -1
  245. package/build/array/array-range.js.map +0 -1
  246. package/build/array/array-sample.d.ts.map +0 -1
  247. package/build/array/array-sample.js.map +0 -1
  248. package/build/array/array-shuffle.js.map +0 -1
  249. package/build/array/array-sort-by.js.map +0 -1
  250. package/build/array/array-zip.js.map +0 -1
  251. package/build/array/assert.d.ts.map +0 -1
  252. package/build/array/assert.js.map +0 -1
  253. package/build/array/index.js.map +0 -1
  254. package/build/array/types.d.ts.map +0 -1
  255. package/build/array/types.js +0 -2
  256. package/build/array/types.js.map +0 -1
  257. package/build/array/unique.js.map +0 -1
  258. package/build/asserts/errors.d.ts.map +0 -1
  259. package/build/asserts/errors.js.map +0 -1
  260. package/build/asserts/generic.d.ts.map +0 -1
  261. package/build/asserts/generic.js.map +0 -1
  262. package/build/asserts/index.d.ts +0 -41
  263. package/build/asserts/index.d.ts.map +0 -1
  264. package/build/asserts/index.js +0 -41
  265. package/build/asserts/index.js.map +0 -1
  266. package/build/asserts/internal-utils.js.map +0 -1
  267. package/build/asserts/types.d.ts.map +0 -1
  268. package/build/asserts/types.js +0 -2
  269. package/build/asserts/types.js.map +0 -1
  270. package/build/asserts/utils.d.ts.map +0 -1
  271. package/build/asserts/utils.js.map +0 -1
  272. package/build/boolean/assert.js.map +0 -1
  273. package/build/boolean/index.d.ts +0 -9
  274. package/build/boolean/index.d.ts.map +0 -1
  275. package/build/boolean/index.js +0 -9
  276. package/build/boolean/index.js.map +0 -1
  277. package/build/enum/enum-entries.d.ts.map +0 -1
  278. package/build/enum/enum-entries.js.map +0 -1
  279. package/build/enum/enum-key-by-value.d.ts.map +0 -1
  280. package/build/enum/enum-key-by-value.js.map +0 -1
  281. package/build/enum/enum-keys.js.map +0 -1
  282. package/build/enum/enum-safe-value.d.ts.map +0 -1
  283. package/build/enum/enum-safe-value.js.map +0 -1
  284. package/build/enum/enum-values.js.map +0 -1
  285. package/build/enum/index.d.ts.map +0 -1
  286. package/build/enum/index.js.map +0 -1
  287. package/build/enum/types.js +0 -2
  288. package/build/enum/types.js.map +0 -1
  289. package/build/enum/validate-enum-value.d.ts.map +0 -1
  290. package/build/enum/validate-enum-value.js.map +0 -1
  291. package/build/function/compose.d.ts.map +0 -1
  292. package/build/function/compose.js.map +0 -1
  293. package/build/function/debounce.d.ts.map +0 -1
  294. package/build/function/debounce.js.map +0 -1
  295. package/build/function/index.js.map +0 -1
  296. package/build/function/memoize.d.ts +0 -30
  297. package/build/function/memoize.d.ts.map +0 -1
  298. package/build/function/memoize.js +0 -44
  299. package/build/function/memoize.js.map +0 -1
  300. package/build/function/once.js.map +0 -1
  301. package/build/function/sleep.js.map +0 -1
  302. package/build/function/throttle.d.ts +0 -17
  303. package/build/function/throttle.d.ts.map +0 -1
  304. package/build/function/throttle.js.map +0 -1
  305. package/build/function/types.d.ts +0 -5
  306. package/build/function/types.d.ts.map +0 -1
  307. package/build/function/types.js +0 -2
  308. package/build/function/types.js.map +0 -1
  309. package/build/index.d.ts +0 -38
  310. package/build/index.d.ts.map +0 -1
  311. package/build/index.js +0 -64
  312. package/build/index.js.map +0 -1
  313. package/build/lru-cache.d.ts.map +0 -1
  314. package/build/lru-cache.js.map +0 -1
  315. package/build/number/assert.js.map +0 -1
  316. package/build/number/index.d.ts +0 -9
  317. package/build/number/index.d.ts.map +0 -1
  318. package/build/number/index.js +0 -9
  319. package/build/number/index.js.map +0 -1
  320. package/build/object/assert-object.js.map +0 -1
  321. package/build/object/assert.d.ts.map +0 -1
  322. package/build/object/assert.js.map +0 -1
  323. package/build/object/clone.js.map +0 -1
  324. package/build/object/equals.js.map +0 -1
  325. package/build/object/filter-cached.d.ts +0 -21
  326. package/build/object/filter-cached.js.map +0 -1
  327. package/build/object/filter.js.map +0 -1
  328. package/build/object/has-circular-reference.js.map +0 -1
  329. package/build/object/hash.d.ts.map +0 -1
  330. package/build/object/hash.js.map +0 -1
  331. package/build/object/index.js.map +0 -1
  332. package/build/object/json-circular-replacer.js.map +0 -1
  333. package/build/object/key-value-pairs.js.map +0 -1
  334. package/build/object/map-cached.d.ts +0 -20
  335. package/build/object/map-cached.d.ts.map +0 -1
  336. package/build/object/map-cached.js.map +0 -1
  337. package/build/object/map.js.map +0 -1
  338. package/build/object/merge.js.map +0 -1
  339. package/build/object/object-diff.js.map +0 -1
  340. package/build/object/object-flatten.js.map +0 -1
  341. package/build/object/object-invert.js.map +0 -1
  342. package/build/object/omit.js.map +0 -1
  343. package/build/object/pick.js.map +0 -1
  344. package/build/object/property-paths.js.map +0 -1
  345. package/build/object/security-utils.d.ts +0 -59
  346. package/build/object/security-utils.d.ts.map +0 -1
  347. package/build/object/security-utils.js +0 -161
  348. package/build/object/security-utils.js.map +0 -1
  349. package/build/object/sort-keys.js.map +0 -1
  350. package/build/object/types.d.ts.map +0 -1
  351. package/build/object/types.js +0 -6
  352. package/build/object/types.js.map +0 -1
  353. package/build/string/assert.d.ts.map +0 -1
  354. package/build/string/assert.js.map +0 -1
  355. package/build/string/case-conversion.d.ts +0 -50
  356. package/build/string/case-conversion.d.ts.map +0 -1
  357. package/build/string/case-conversion.js.map +0 -1
  358. package/build/string/formatting.d.ts.map +0 -1
  359. package/build/string/formatting.js.map +0 -1
  360. package/build/string/index.js.map +0 -1
  361. package/build/string/transformation.d.ts +0 -18
  362. package/build/string/transformation.d.ts.map +0 -1
  363. package/build/string/transformation.js +0 -32
  364. package/build/string/transformation.js.map +0 -1
  365. package/build/string/types.d.ts +0 -44
  366. package/build/string/types.d.ts.map +0 -1
  367. package/build/string/types.js +0 -2
  368. package/build/string/types.js.map +0 -1
  369. package/build/string/validation.d.ts +0 -18
  370. package/build/string/validation.d.ts.map +0 -1
  371. package/build/string/validation.js +0 -26
  372. package/build/string/validation.js.map +0 -1
  373. package/build/time/elapsed-time/constants.d.ts +0 -10
  374. package/build/time/elapsed-time/constants.js.map +0 -1
  375. package/build/time/elapsed-time/elapsed-time.d.ts.map +0 -1
  376. package/build/time/elapsed-time/elapsed-time.js.map +0 -1
  377. package/build/time/elapsed-time/types.d.ts +0 -150
  378. package/build/time/elapsed-time/types.d.ts.map +0 -1
  379. package/build/time/elapsed-time/types.js +0 -2
  380. package/build/time/elapsed-time/types.js.map +0 -1
  381. package/build/time/elapsed-time/utils.d.ts.map +0 -1
  382. package/build/time/elapsed-time/utils.js.map +0 -1
  383. package/build/time/index.js.map +0 -1
  384. package/build/time/stopwatch/entry-types.d.ts +0 -13
  385. package/build/time/stopwatch/entry-types.d.ts.map +0 -1
  386. package/build/time/stopwatch/entry-types.js +0 -2
  387. package/build/time/stopwatch/entry-types.js.map +0 -1
  388. package/build/time/stopwatch/entry.d.ts.map +0 -1
  389. package/build/time/stopwatch/entry.js.map +0 -1
  390. package/build/time/stopwatch/stopwatch.d.ts.map +0 -1
  391. package/build/time/stopwatch/stopwatch.js.map +0 -1
  392. /package/{build → dist}/array/array-chunk.d.ts.map +0 -0
  393. /package/{build → dist}/array/array-compact.d.ts.map +0 -0
  394. /package/{build → dist}/array/array-element.d.ts +0 -0
  395. /package/{build → dist}/array/array-element.d.ts.map +0 -0
  396. /package/{build → dist}/array/array-range.d.ts.map +0 -0
  397. /package/{build → dist}/array/array-shuffle.d.ts.map +0 -0
  398. /package/{build → dist}/array/array-sort-by.d.ts.map +0 -0
  399. /package/{build → dist}/array/array-zip.d.ts.map +0 -0
  400. /package/{build → dist}/array/index.d.ts +0 -0
  401. /package/{build → dist}/array/index.d.ts.map +0 -0
  402. /package/{build → dist}/asserts/errors.d.ts +0 -0
  403. /package/{build → dist}/asserts/internal-utils.d.ts +0 -0
  404. /package/{build → dist}/enum/enum-keys.d.ts +0 -0
  405. /package/{build → dist}/enum/enum-keys.d.ts.map +0 -0
  406. /package/{build → dist}/enum/enum-values.d.ts +0 -0
  407. /package/{build → dist}/enum/enum-values.d.ts.map +0 -0
  408. /package/{build → dist}/enum/types.d.ts +0 -0
  409. /package/{build → dist}/enum/types.d.ts.map +0 -0
  410. /package/{build → dist}/function/index.d.ts +0 -0
  411. /package/{build → dist}/function/index.d.ts.map +0 -0
  412. /package/{build → dist}/function/sleep.d.ts +0 -0
  413. /package/{build → dist}/function/sleep.d.ts.map +0 -0
  414. /package/{build → dist}/number/assert.d.ts +0 -0
  415. /package/{build → dist}/object/clone.d.ts +0 -0
  416. /package/{build → dist}/object/has-circular-reference.d.ts +0 -0
  417. /package/{build → dist}/object/json-circular-replacer.d.ts +0 -0
  418. /package/{build → dist}/object/key-value-pairs.d.ts +0 -0
  419. /package/{build → dist}/object/key-value-pairs.d.ts.map +0 -0
  420. /package/{build → dist}/object/map.d.ts +0 -0
  421. /package/{build → dist}/object/map.d.ts.map +0 -0
  422. /package/{build → dist}/object/merge.d.ts +0 -0
  423. /package/{build → dist}/object/object-invert.d.ts +0 -0
  424. /package/{build → dist}/object/object-invert.d.ts.map +0 -0
  425. /package/{build → dist}/object/omit.d.ts +0 -0
  426. /package/{build → dist}/object/omit.d.ts.map +0 -0
  427. /package/{build → dist}/object/pick.d.ts +0 -0
  428. /package/{build → dist}/object/pick.d.ts.map +0 -0
@@ -1,4 +1,3 @@
1
- import { ObjectHasCircularReference } from './has-circular-reference.js';
2
1
  // cyrb53-style hash mixing constants (chosen for good avalanche properties)
3
2
  const HASH_SEED_1 = 0xdeadbeef;
4
3
  const HASH_SEED_2 = 0x41c6ce57;
@@ -15,6 +14,13 @@ const HEXADECIMAL_RADIX = 16;
15
14
  * Browser-compatible and synchronous — no Node.js APIs required.
16
15
  * Returns a 16-character lowercase hex string.
17
16
  */
17
+ /**
18
+ * 64-bit cyrb53 hash function.
19
+ *
20
+ * PERFORMANCE NOTE: This hash has 2^64 output space; collisions are theoretically
21
+ * possible with large datasets. For cryptographic applications requiring collision
22
+ * resistance, use crypto.subtle.digest instead.
23
+ */
18
24
  function defaultHash(data) {
19
25
  let h1 = HASH_SEED_1;
20
26
  let h2 = HASH_SEED_2;
@@ -28,6 +34,10 @@ function defaultHash(data) {
28
34
  return h1.toString(HEXADECIMAL_RADIX).padStart(HASH_PAD_WIDTH, '0') + h2.toString(HEXADECIMAL_RADIX).padStart(HASH_PAD_WIDTH, '0');
29
35
  }
30
36
  /**
37
+ * SECURITY WARNING: This hash is NON-CRYPTOGRAPHIC (cyrb53, 64-bit).
38
+ * Do NOT use for passwords, tokens, signatures, or any security-sensitive operation.
39
+ * For cryptographic hashing, use `crypto.subtle.digest('SHA-256', ...)` instead.
40
+ *
31
41
  * Creates a hash of an object.
32
42
  *
33
43
  * By default a fast, non-cryptographic 64-bit hash is used that works in all
@@ -53,15 +63,19 @@ function defaultHash(data) {
53
63
  * ```
54
64
  */
55
65
  export function ObjectHash(obj, hashFunction) {
56
- // Check for circular references before attempting to stringify
57
- if (ObjectHasCircularReference(obj)) {
58
- throw new Error('Cannot hash object with circular references');
66
+ let jsonString;
67
+ try {
68
+ jsonString = JSON.stringify(obj);
69
+ }
70
+ catch (e) {
71
+ if (e instanceof TypeError && e.message.includes('circular')) {
72
+ throw new Error('Cannot hash object with circular references');
73
+ }
74
+ throw new Error('Cannot hash object: JSON.stringify failed');
59
75
  }
60
- const jsonString = JSON.stringify(obj);
61
76
  // Handle cases where JSON.stringify returns undefined
62
77
  if (jsonString === undefined) {
63
78
  throw new Error('Cannot hash object: JSON.stringify returned undefined');
64
79
  }
65
80
  return hashFunction ? hashFunction(jsonString) : defaultHash(jsonString);
66
81
  }
67
- //# sourceMappingURL=hash.js.map
@@ -23,12 +23,12 @@ export { ObjectPick } from './pick.js';
23
23
  export { ObjectOmit } from './omit.js';
24
24
  export { ObjectMerge } from './merge.js';
25
25
  export { IsObject } from './assert-object.js';
26
- export { isPropertyKeySafe, isPropertyPathSafe, sanitizePropertyKey, filterDangerousKeys, createCircularReferenceDetector, isInputSafe } from './security-utils.js';
26
+ export { IsPropertyKeySafe, IsPropertyPathSafe, SanitizePropertyKey, FilterDangerousKeys, CreateCircularReferenceDetector, IsInputSafe } from './security-utils.js';
27
27
  export { ObjectInvert } from './object-invert.js';
28
28
  export { ObjectFlatten } from './object-flatten.js';
29
29
  export { ObjectDiff } from './object-diff.js';
30
30
  export { AssertObject, ObjectError, ObjectPropertyError, AssertObjectHasProperty, AssertObjectHasOwnProperty, AssertObjectPropertyNotNull } from './assert.js';
31
31
  export type { IObjectDiffResult } from './object-diff.js';
32
- export type { TConstructableObject, TObjectOmitExtraProperties, TCachedObjectFilterFunction, TCachedObjectMapperFunction, TObjectPredicate, TObjectTransformer, TObjectComparator, TObjectEqualityComparator, TPropertyMapper, TPropertyFilter } from './types.js';
32
+ export type { TObjectOmitExtraProperties, TCachedObjectFilterFunction, TCachedObjectMapperFunction, TObjectPredicate, TObjectTransformer, TObjectComparator, TObjectEqualityComparator, TPropertyMapper, TPropertyFilter } from './types.js';
33
33
  export type { IObjectFilterOptions, ICachedObjectFilterOptions, ICachedObjectMapOptions } from './types.js';
34
34
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/object/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,+BAA+B,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACpK,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC/J,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAG1D,YAAY,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGnQ,YAAY,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/object/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,+BAA+B,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACpK,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC/J,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAG1D,YAAY,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG7O,YAAY,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC"}
@@ -24,9 +24,8 @@ export { ObjectPick } from './pick.js';
24
24
  export { ObjectOmit } from './omit.js';
25
25
  export { ObjectMerge } from './merge.js';
26
26
  export { IsObject } from './assert-object.js';
27
- export { isPropertyKeySafe, isPropertyPathSafe, sanitizePropertyKey, filterDangerousKeys, createCircularReferenceDetector, isInputSafe } from './security-utils.js';
27
+ export { IsPropertyKeySafe, IsPropertyPathSafe, SanitizePropertyKey, FilterDangerousKeys, CreateCircularReferenceDetector, IsInputSafe } from './security-utils.js';
28
28
  export { ObjectInvert } from './object-invert.js';
29
29
  export { ObjectFlatten } from './object-flatten.js';
30
30
  export { ObjectDiff } from './object-diff.js';
31
31
  export { AssertObject, ObjectError, ObjectPropertyError, AssertObjectHasProperty, AssertObjectHasOwnProperty, AssertObjectPropertyNotNull } from './assert.js';
32
- //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"json-circular-replacer.d.ts","sourceRoot":"","sources":["../../src/object/json-circular-replacer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,0BAA0B,CACzC,WAAW,GAAE,MAAqB,GAChC,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CA0BzD"}
1
+ {"version":3,"file":"json-circular-replacer.d.ts","sourceRoot":"","sources":["../../src/object/json-circular-replacer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,0BAA0B,CACzC,WAAW,SAAe,GACxB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CA0BzD"}
@@ -57,4 +57,3 @@ export function CreateJsonCircularReplacer(placeholder = '[Circular]') {
57
57
  return value;
58
58
  };
59
59
  }
60
- //# sourceMappingURL=json-circular-replacer.js.map
@@ -41,4 +41,3 @@ export function ObjectFromKeyValuePairs(entries) {
41
41
  export function ObjectToKeyValuePairs(obj) {
42
42
  return Object.entries(obj);
43
43
  }
44
- //# sourceMappingURL=key-value-pairs.js.map
@@ -0,0 +1,31 @@
1
+ import type { TPropertyMapper, ICachedObjectMapOptions } from './types.js';
2
+ /**
3
+ * Creates a cached version of {@link MapObject} for improved performance
4
+ * when mapping the same objects repeatedly.
5
+ *
6
+ * Results are cached by hashing the object. Cache entries are evicted in
7
+ * approximately 20% batches when the limit is reached.
8
+ *
9
+ * @template T - The object type being mapped
10
+ * @param options - Configuration options for cache behaviour
11
+ * @returns A cached map function with parameters:
12
+ * - `cursor` - The object to be mapped
13
+ * - `mapper` - Function to map each property value
14
+ * - `mapperKey` - Optional stable string identifier for the mapper. When omitted,
15
+ * `Function.toString()` is used as the cache key, which may cause cache collisions
16
+ * for closures with identical source text but different captured variables.
17
+ * Always provide an explicit `mapperKey` when the mapper captures mutable state.
18
+ *
19
+ * @warning When `mapperKey` is not provided, the function uses `Function.toString()` as
20
+ * the cache key. This approach is expensive for large functions and causes cache collisions
21
+ * for closures with identical source code but different captured values. Always supply an
22
+ * explicit `mapperKey` to avoid unexpected cache behavior.
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * const cachedMap = MapObjectCached<User>();
27
+ * const display = await cachedMap(user, (key, value) => String(value));
28
+ * ```
29
+ */
30
+ export declare function MapObjectCached<T extends object>(options?: ICachedObjectMapOptions): (cursor: T, mapper: TPropertyMapper<T>, mapperKey?: string) => Promise<Record<keyof T, unknown>>;
31
+ //# sourceMappingURL=map-cached.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-cached.d.ts","sourceRoot":"","sources":["../../src/object/map-cached.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAM3E;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAmHzL"}
@@ -12,7 +12,18 @@ const CACHE_EVICTION_PERCENTAGE = 0.2; // 20%
12
12
  *
13
13
  * @template T - The object type being mapped
14
14
  * @param options - Configuration options for cache behaviour
15
- * @returns A cached map function `(cursor, mapper, mapperKey?) => Promise<Record<keyof T, unknown>>`
15
+ * @returns A cached map function with parameters:
16
+ * - `cursor` - The object to be mapped
17
+ * - `mapper` - Function to map each property value
18
+ * - `mapperKey` - Optional stable string identifier for the mapper. When omitted,
19
+ * `Function.toString()` is used as the cache key, which may cause cache collisions
20
+ * for closures with identical source text but different captured variables.
21
+ * Always provide an explicit `mapperKey` when the mapper captures mutable state.
22
+ *
23
+ * @warning When `mapperKey` is not provided, the function uses `Function.toString()` as
24
+ * the cache key. This approach is expensive for large functions and causes cache collisions
25
+ * for closures with identical source code but different captured values. Always supply an
26
+ * explicit `mapperKey` to avoid unexpected cache behavior.
16
27
  *
17
28
  * @example
18
29
  * ```typescript
@@ -30,6 +41,11 @@ export function MapObjectCached(options = {}) {
30
41
  *
31
42
  * The eviction strategy targets the most-populated bucket to reclaim the most
32
43
  * memory in a single pass while preserving results for other active mappers.
44
+ *
45
+ * PERFORMANCE NOTE: For distributed mapper load, eviction triggers too frequently.
46
+ * A true global LRU across all mappers would be more efficient but would require
47
+ * tracking access order globally. Refactoring to use the library's own LRUCache
48
+ * (if available) instead of per-mapper Maps would improve this further.
33
49
  */
34
50
  const clearOldestEntries = () => {
35
51
  if (cache.size === 0)
@@ -46,6 +62,8 @@ export function MapObjectCached(options = {}) {
46
62
  }
47
63
  }
48
64
  if (largestCache) {
65
+ // Capture the original bucket size before eviction
66
+ const originalBucketSize = largestCache.size;
49
67
  // Remove approximately 20% of entries from the largest cache
50
68
  const entriesToRemove = Math.ceil(largestSize * CACHE_EVICTION_PERCENTAGE);
51
69
  let removed = 0;
@@ -58,8 +76,13 @@ export function MapObjectCached(options = {}) {
58
76
  // If the cache is now empty, remove it completely
59
77
  if (largestCache.size === 0) {
60
78
  cache.delete(largestCacheKey);
79
+ // Account for all entries that were in the bucket (not just the ones we explicitly removed)
80
+ totalCachedEntries -= originalBucketSize;
81
+ }
82
+ else {
83
+ // Only remove the entries we explicitly deleted
84
+ totalCachedEntries -= removed;
61
85
  }
62
- totalCachedEntries -= removed;
63
86
  }
64
87
  };
65
88
  return (cursor, mapper, mapperKey) => {
@@ -68,9 +91,10 @@ export function MapObjectCached(options = {}) {
68
91
  return Promise.resolve({});
69
92
  }
70
93
  // Use the explicitly provided mapperKey when available.
71
- // WARNING: If mapperKey is omitted and mapper is a closure, two closures with
72
- // identical source code but different captured values will incorrectly share cache
73
- // entries. Always provide an explicit mapperKey when using closure mappers.
94
+ // NOTE: When mapperKey is not provided, uses Function.toString() as cache key.
95
+ // This is expensive for large functions and causes cache collisions for closures
96
+ // with identical source code but different captured values.
97
+ // Always provide explicit mapperKey for correct behavior.
74
98
  const resolvedMapperKey = mapperKey ?? mapper.toString();
75
99
  // Try to get the object cache for this mapper
76
100
  let objectCache = cache.get(resolvedMapperKey);
@@ -100,8 +124,12 @@ export function MapObjectCached(options = {}) {
100
124
  // Ensure the cache size does not exceed the limit
101
125
  if (totalCachedEntries > maxCacheSize) {
102
126
  clearOldestEntries();
127
+ // Recompute counter to eliminate drift
128
+ totalCachedEntries = 0;
129
+ for (const bucket of cache.values()) {
130
+ totalCachedEntries += bucket.size;
131
+ }
103
132
  }
104
133
  return Promise.resolve(result);
105
134
  };
106
135
  }
107
- //# sourceMappingURL=map-cached.js.map
@@ -37,4 +37,3 @@ export function MapObject(obj, mapper) {
37
37
  }
38
38
  return result;
39
39
  }
40
- //# sourceMappingURL=map.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/object/merge.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAyBvF"}
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/object/merge.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CA0BvF"}
@@ -1,4 +1,4 @@
1
- import { filterDangerousKeys } from './security-utils.js';
1
+ import { FilterDangerousKeys } from './security-utils.js';
2
2
  /**
3
3
  * Merges two objects deeply with security protections.
4
4
  *
@@ -28,22 +28,22 @@ export function ObjectMerge(target, source) {
28
28
  if (!source || typeof source !== 'object')
29
29
  return target;
30
30
  // Security: Filter out dangerous keys from source object
31
- const safeSource = filterDangerousKeys(source);
31
+ const safeSource = FilterDangerousKeys(source);
32
32
  const output = { ...target };
33
33
  // Object.keys() returns only own enumerable properties — no further guard needed.
34
34
  for (const key of Object.keys(safeSource)) {
35
- const targetValue = output[key];
35
+ const outputRecord = output;
36
+ const targetValue = outputRecord[key];
36
37
  const sourceValue = safeSource[key];
37
38
  if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {
38
- output[key] = [...targetValue, ...sourceValue];
39
+ outputRecord[key] = [...targetValue, ...sourceValue];
39
40
  }
40
41
  else if (targetValue && typeof targetValue === 'object' && sourceValue && typeof sourceValue === 'object') {
41
- output[key] = ObjectMerge(targetValue, sourceValue);
42
+ outputRecord[key] = ObjectMerge(targetValue, sourceValue);
42
43
  }
43
44
  else {
44
- output[key] = sourceValue;
45
+ outputRecord[key] = sourceValue;
45
46
  }
46
47
  }
47
48
  return output;
48
49
  }
49
- //# sourceMappingURL=merge.js.map
@@ -16,8 +16,8 @@ export interface IObjectDiffResult {
16
16
  * Returns three groups:
17
17
  * - **added** — keys in `objB` that are absent from `objA`
18
18
  * - **removed** — keys in `objA` that are absent from `objB`
19
- * - **changed** — keys present in both whose values are not strictly equal
20
- * (compared via `JSON.stringify` for deep value equality)
19
+ * - **changed** — keys present in both whose values differ
20
+ * (compared via `ObjectEquals` for deep value equality)
21
21
  *
22
22
  * **Important**: Comparison is performed with deep equality (`ObjectEquals`),
23
23
  * which correctly handles nested objects regardless of key insertion order,
@@ -1 +1 @@
1
- {"version":3,"file":"object-diff.d.ts","sourceRoot":"","sources":["../../src/object/object-diff.ts"],"names":[],"mappings":"AAEA,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IACjC,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACxD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,UAAU,CACzB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,iBAAiB,CAkBnB"}
1
+ {"version":3,"file":"object-diff.d.ts","sourceRoot":"","sources":["../../src/object/object-diff.ts"],"names":[],"mappings":"AAEA,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IACjC,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACxD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,UAAU,CACzB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,iBAAiB,CA0BnB"}
@@ -5,8 +5,8 @@ import { ObjectEquals } from './equals.js';
5
5
  * Returns three groups:
6
6
  * - **added** — keys in `objB` that are absent from `objA`
7
7
  * - **removed** — keys in `objA` that are absent from `objB`
8
- * - **changed** — keys present in both whose values are not strictly equal
9
- * (compared via `JSON.stringify` for deep value equality)
8
+ * - **changed** — keys present in both whose values differ
9
+ * (compared via `ObjectEquals` for deep value equality)
10
10
  *
11
11
  * **Important**: Comparison is performed with deep equality (`ObjectEquals`),
12
12
  * which correctly handles nested objects regardless of key insertion order,
@@ -32,8 +32,15 @@ import { ObjectEquals } from './equals.js';
32
32
  */
33
33
  export function ObjectDiff(objA, objB) {
34
34
  const result = { added: {}, removed: {}, changed: {} };
35
- const allKeys = new Set([...Object.keys(objA), ...Object.keys(objB)]);
36
- for (const key of allKeys) {
35
+ // Combine keys from both objects efficiently
36
+ const allKeys = new Map();
37
+ for (const key of Object.keys(objA)) {
38
+ allKeys.set(key, true);
39
+ }
40
+ for (const key of Object.keys(objB)) {
41
+ allKeys.set(key, true);
42
+ }
43
+ for (const key of allKeys.keys()) {
37
44
  const inA = Object.hasOwn(objA, key);
38
45
  const inB = Object.hasOwn(objB, key);
39
46
  if (inA && !inB) {
@@ -48,4 +55,3 @@ export function ObjectDiff(objA, objB) {
48
55
  }
49
56
  return result;
50
57
  }
51
- //# sourceMappingURL=object-diff.js.map
@@ -18,5 +18,5 @@
18
18
  * // { 'a/b': 1 }
19
19
  * ```
20
20
  */
21
- export declare function ObjectFlatten(obj: Record<string, unknown>, separator?: string, _prefix?: string): Record<string, unknown>;
21
+ export declare function ObjectFlatten(obj: Record<string, unknown>, separator?: string): Record<string, unknown>;
22
22
  //# sourceMappingURL=object-flatten.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"object-flatten.d.ts","sourceRoot":"","sources":["../../src/object/object-flatten.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,SAAS,SAAM,EACf,OAAO,SAAK,GACV,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoBzB"}
1
+ {"version":3,"file":"object-flatten.d.ts","sourceRoot":"","sources":["../../src/object/object-flatten.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,SAAS,SAAM,GACb,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzB"}
@@ -18,16 +18,19 @@
18
18
  * // { 'a/b': 1 }
19
19
  * ```
20
20
  */
21
- export function ObjectFlatten(obj, separator = '.', _prefix = '') {
21
+ export function ObjectFlatten(obj, separator = '.') {
22
+ return flattenRecursive(obj, separator, '');
23
+ }
24
+ function flattenRecursive(obj, separator, prefix) {
22
25
  const result = {};
23
26
  for (const key of Object.keys(obj)) {
24
27
  const value = obj[key];
25
- const newKey = _prefix ? `${_prefix}${separator}${key}` : key;
28
+ const newKey = prefix ? `${prefix}${separator}${key}` : key;
26
29
  if (value !== null &&
27
30
  typeof value === 'object' &&
28
31
  !Array.isArray(value) &&
29
32
  !(value instanceof Date)) {
30
- Object.assign(result, ObjectFlatten(value, separator, newKey));
33
+ Object.assign(result, flattenRecursive(value, separator, newKey));
31
34
  }
32
35
  else {
33
36
  result[newKey] = value;
@@ -35,4 +38,3 @@ export function ObjectFlatten(obj, separator = '.', _prefix = '') {
35
38
  }
36
39
  return result;
37
40
  }
38
- //# sourceMappingURL=object-flatten.js.map
@@ -23,4 +23,3 @@ export function ObjectInvert(obj) {
23
23
  }
24
24
  return result;
25
25
  }
26
- //# sourceMappingURL=object-invert.js.map
@@ -23,4 +23,3 @@ export function ObjectOmit(obj, keys) {
23
23
  });
24
24
  return result;
25
25
  }
26
- //# sourceMappingURL=omit.js.map
@@ -57,4 +57,3 @@ export function ObjectPick(obj, keys) {
57
57
  return result;
58
58
  }, {});
59
59
  }
60
- //# sourceMappingURL=pick.js.map
@@ -53,7 +53,7 @@
53
53
  * ObjectGetPropertyByPath(user, '', 'default'); // 'default'
54
54
  * ```
55
55
  */
56
- export declare function ObjectGetPropertyByPath<T = any>(obj: any, path: string, defaultValue?: T): T | undefined;
56
+ export declare function ObjectGetPropertyByPath<T = unknown>(obj: unknown, path: string, defaultValue?: T): T | undefined;
57
57
  /**
58
58
  * Sets a nested property on an object using a path string with dot notation.
59
59
  * Automatically creates intermediate objects if they don't exist or are not objects.
@@ -111,5 +111,5 @@ export declare function ObjectGetPropertyByPath<T = any>(obj: any, path: string,
111
111
  * ObjectSetPropertyByPath(user, '', 'value'); // No effect, safely ignored
112
112
  * ```
113
113
  */
114
- export declare function ObjectSetPropertyByPath<T = any>(obj: any, path: string, value: T): void;
114
+ export declare function ObjectSetPropertyByPath<T = unknown>(obj: unknown, path: string, value: T): void;
115
115
  //# sourceMappingURL=property-paths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"property-paths.d.ts","sourceRoot":"","sources":["../../src/object/property-paths.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAgCxG;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAoCvF"}
1
+ {"version":3,"file":"property-paths.d.ts","sourceRoot":"","sources":["../../src/object/property-paths.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAiChH;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAyC/F"}
@@ -1,4 +1,4 @@
1
- import { isPropertyPathSafe, isPropertyKeySafe } from './security-utils.js';
1
+ import { IsPropertyPathSafe, IsPropertyKeySafe } from './security-utils.js';
2
2
  /**
3
3
  * Safely gets a nested property from an object using a path string with dot notation.
4
4
  * Returns the default value if the path doesn't exist or any intermediate value is null/undefined.
@@ -59,24 +59,25 @@ export function ObjectGetPropertyByPath(obj, path, defaultValue) {
59
59
  return defaultValue;
60
60
  }
61
61
  // Security validation: Check if the path is safe
62
- if (!isPropertyPathSafe(path)) {
62
+ if (!IsPropertyPathSafe(path)) {
63
63
  return defaultValue;
64
64
  }
65
65
  const keys = path.split('.');
66
66
  let result = obj;
67
67
  for (const key of keys) {
68
68
  // Security check for each key
69
- if (!isPropertyKeySafe(key)) {
69
+ if (!IsPropertyKeySafe(key)) {
70
70
  return defaultValue;
71
71
  }
72
72
  if (result === null || result === undefined || typeof result !== 'object') {
73
73
  return defaultValue;
74
74
  }
75
75
  // Use Object.hasOwn to prevent prototype chain access
76
- if (!Object.hasOwn(result, key)) {
76
+ const resultObj = result;
77
+ if (!Object.hasOwn(resultObj, key)) {
77
78
  return defaultValue;
78
79
  }
79
- result = result[key];
80
+ result = resultObj[key];
80
81
  }
81
82
  return result === undefined ? defaultValue : result;
82
83
  }
@@ -141,8 +142,12 @@ export function ObjectSetPropertyByPath(obj, path, value) {
141
142
  if (!obj || !path) {
142
143
  return;
143
144
  }
145
+ // Type guard for object access
146
+ if (typeof obj !== 'object') {
147
+ return;
148
+ }
144
149
  // Security validation: Check if the path is safe
145
- if (!isPropertyPathSafe(path)) {
150
+ if (!IsPropertyPathSafe(path)) {
146
151
  return;
147
152
  }
148
153
  const keys = path.split('.');
@@ -151,13 +156,13 @@ export function ObjectSetPropertyByPath(obj, path, value) {
151
156
  return;
152
157
  }
153
158
  // Additional security check for the final key
154
- if (!isPropertyKeySafe(lastKey)) {
159
+ if (!IsPropertyKeySafe(lastKey)) {
155
160
  return;
156
161
  }
157
162
  let current = obj;
158
163
  for (const key of keys) {
159
164
  // Security check for each intermediate key
160
- if (!isPropertyKeySafe(key)) {
165
+ if (!IsPropertyKeySafe(key)) {
161
166
  return;
162
167
  }
163
168
  if (current[key] === null || current[key] === undefined || typeof current[key] !== 'object') {
@@ -167,4 +172,3 @@ export function ObjectSetPropertyByPath(obj, path, value) {
167
172
  }
168
173
  current[lastKey] = value;
169
174
  }
170
- //# sourceMappingURL=property-paths.js.map