@ezez/utils 4.0.0 → 4.1.0

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 (414) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/cap.js.map +1 -1
  3. package/dist/coalesce.d.ts.map +1 -1
  4. package/dist/coalesce.js.map +1 -1
  5. package/dist/compareArrays.d.ts.map +1 -1
  6. package/dist/compareProps.d.ts.map +1 -1
  7. package/dist/compareProps.js.map +1 -1
  8. package/dist/deserialize.d.ts.map +1 -1
  9. package/dist/deserialize.js.map +1 -1
  10. package/dist/ensureArray.d.ts.map +1 -1
  11. package/dist/ensureArray.js.map +1 -1
  12. package/dist/ensureDate.js.map +1 -1
  13. package/dist/ensureError.js.map +1 -1
  14. package/dist/ensurePrefix.js.map +1 -1
  15. package/dist/ensureSuffix.js.map +1 -1
  16. package/dist/ensureTimestamp.js.map +1 -1
  17. package/dist/escapeRegExp.d.ts.map +1 -1
  18. package/dist/escapeRegExp.js +1 -1
  19. package/dist/escapeRegExp.js.map +1 -1
  20. package/dist/formatDate.js +1 -1
  21. package/dist/formatDate.js.map +1 -1
  22. package/dist/get.js.map +1 -1
  23. package/dist/getMultiple.d.ts.map +1 -1
  24. package/dist/getMultiple.js.map +1 -1
  25. package/dist/index.d.ts +1 -0
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +1 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/insertSeparator.d.ts.map +1 -1
  30. package/dist/insertSeparator.js.map +1 -1
  31. package/dist/isEmpty.js.map +1 -1
  32. package/dist/isNumericString.js +1 -1
  33. package/dist/isNumericString.js.map +1 -1
  34. package/dist/last.d.ts.map +1 -1
  35. package/dist/later.d.ts.map +1 -1
  36. package/dist/mapAsync.d.ts.map +1 -1
  37. package/dist/mapAsync.js.map +1 -1
  38. package/dist/mapValues.d.ts.map +1 -1
  39. package/dist/mapValues.js.map +1 -1
  40. package/dist/match.d.ts.map +1 -1
  41. package/dist/match.js.map +1 -1
  42. package/dist/memoize.d.ts +3 -0
  43. package/dist/memoize.d.ts.map +1 -0
  44. package/dist/memoize.js +19 -0
  45. package/dist/memoize.js.map +1 -0
  46. package/dist/merge.d.ts +11 -7
  47. package/dist/merge.d.ts.map +1 -1
  48. package/dist/merge.js.map +1 -1
  49. package/dist/mostFrequent.d.ts.map +1 -1
  50. package/dist/mostFrequent.js.map +1 -1
  51. package/dist/occurrences.js.map +1 -1
  52. package/dist/omit.d.ts.map +1 -1
  53. package/dist/omit.js.map +1 -1
  54. package/dist/pick.d.ts.map +1 -1
  55. package/dist/pick.js.map +1 -1
  56. package/dist/pull.d.ts.map +1 -1
  57. package/dist/pull.js.map +1 -1
  58. package/dist/remove.d.ts.map +1 -1
  59. package/dist/remove.js +1 -1
  60. package/dist/remove.js.map +1 -1
  61. package/dist/removeCommonProperties.d.ts.map +1 -1
  62. package/dist/removeCommonProperties.js +3 -1
  63. package/dist/removeCommonProperties.js.map +1 -1
  64. package/dist/replace.js +1 -1
  65. package/dist/replace.js.map +1 -1
  66. package/dist/replaceDeep.d.ts.map +1 -1
  67. package/dist/replaceDeepByFn.d.ts.map +1 -1
  68. package/dist/replaceDeepByFn.js.map +1 -1
  69. package/dist/safe.js.map +1 -1
  70. package/dist/sample.d.ts +3 -1
  71. package/dist/sample.d.ts.map +1 -1
  72. package/dist/sample.js.map +1 -1
  73. package/dist/samples.d.ts.map +1 -1
  74. package/dist/samples.js.map +1 -1
  75. package/dist/seq.d.ts.map +1 -1
  76. package/dist/seq.js +1 -1
  77. package/dist/seq.js.map +1 -1
  78. package/dist/serialize.js.map +1 -1
  79. package/dist/set.js.map +1 -1
  80. package/dist/setImmutable.js.map +1 -1
  81. package/dist/shuffle.d.ts.map +1 -1
  82. package/dist/sortBy.d.ts.map +1 -1
  83. package/dist/sortBy.js.map +1 -1
  84. package/dist/sortProps.d.ts.map +1 -1
  85. package/dist/sortProps.js.map +1 -1
  86. package/dist/stripPrefix.js.map +1 -1
  87. package/dist/stripSuffix.js.map +1 -1
  88. package/dist/throttle.d.ts.map +1 -1
  89. package/dist/throttle.js.map +1 -1
  90. package/dist/toggle.d.ts.map +1 -1
  91. package/dist/toggle.js.map +1 -1
  92. package/dist/trimEnd.js.map +1 -1
  93. package/dist/trimStart.js.map +1 -1
  94. package/dist/truthy.d.ts +1 -1
  95. package/dist/truthy.d.ts.map +1 -1
  96. package/dist/unique.d.ts.map +1 -1
  97. package/dist/waitFor.d.ts.map +1 -1
  98. package/dist/waitFor.js +1 -1
  99. package/dist/waitFor.js.map +1 -1
  100. package/dist/waitSync.js.map +1 -1
  101. package/docs/assets/icons.js +15 -0
  102. package/docs/assets/icons.svg +1 -0
  103. package/docs/assets/main.js +4 -3
  104. package/docs/assets/navigation.js +1 -0
  105. package/docs/assets/search.js +1 -1
  106. package/docs/assets/style.css +544 -394
  107. package/docs/documents/CHANGELOG.html +337 -0
  108. package/docs/functions/index.cap.html +5 -0
  109. package/docs/functions/index.capitalize.html +13 -0
  110. package/docs/functions/index.coalesce.html +16 -0
  111. package/docs/functions/index.compareArrays.html +8 -0
  112. package/docs/functions/index.compareProps.html +11 -0
  113. package/docs/functions/index.deserialize.html +6 -0
  114. package/docs/functions/index.ensureArray.html +3 -0
  115. package/docs/functions/index.ensureDate.html +10 -0
  116. package/docs/functions/index.ensureError.html +14 -0
  117. package/docs/functions/index.ensurePrefix.html +10 -0
  118. package/docs/functions/index.ensureSuffix.html +10 -0
  119. package/docs/functions/index.ensureTimestamp.html +10 -0
  120. package/docs/functions/index.escapeRegExp.html +7 -0
  121. package/docs/functions/index.formatDate.html +6 -0
  122. package/docs/functions/index.get.html +26 -0
  123. package/docs/functions/index.getMultiple.html +16 -0
  124. package/docs/functions/index.insertSeparator.html +7 -0
  125. package/docs/functions/index.isEmpty.html +33 -0
  126. package/docs/functions/index.isNumericString.html +5 -0
  127. package/docs/functions/index.isPlainObject.html +18 -0
  128. package/docs/functions/index.last.html +15 -0
  129. package/docs/functions/index.later-1.html +6 -0
  130. package/docs/functions/index.mapAsync.html +8 -0
  131. package/docs/functions/index.mapValues.html +14 -0
  132. package/docs/functions/index.match.html +4 -0
  133. package/docs/functions/index.memoize.html +8 -0
  134. package/docs/functions/index.merge.html +13 -0
  135. package/docs/functions/index.mostFrequent.html +2 -0
  136. package/docs/functions/index.noop.html +2 -0
  137. package/docs/functions/index.occurrences.html +14 -0
  138. package/docs/functions/index.omit.html +18 -0
  139. package/docs/functions/index.pick.html +13 -0
  140. package/docs/functions/index.pull.html +2 -0
  141. package/docs/functions/index.remove.html +2 -0
  142. package/docs/functions/index.removeCommonProperties.html +18 -0
  143. package/docs/functions/index.replace.html +10 -0
  144. package/docs/functions/index.replaceDeep.html +15 -0
  145. package/docs/functions/index.rethrow.html +2 -0
  146. package/docs/functions/index.round.html +7 -0
  147. package/docs/functions/index.safe.html +7 -0
  148. package/docs/functions/index.sample.html +6 -0
  149. package/docs/functions/index.samples.html +7 -0
  150. package/docs/functions/index.scale.html +5 -0
  151. package/docs/functions/index.seq.html +17 -0
  152. package/docs/functions/index.seqEarlyBreak.html +12 -0
  153. package/docs/functions/index.serialize.html +14 -0
  154. package/docs/functions/index.set.html +26 -0
  155. package/docs/functions/index.setImmutable.html +25 -0
  156. package/docs/functions/index.shuffle.html +3 -0
  157. package/docs/functions/index.sortBy.html +6 -0
  158. package/docs/functions/index.sortProps.html +10 -0
  159. package/docs/functions/index.stripPrefix.html +4 -0
  160. package/docs/functions/index.stripSuffix.html +4 -0
  161. package/docs/functions/index.throttle.html +14 -0
  162. package/docs/functions/index.toggle.html +5 -0
  163. package/docs/functions/index.trim.html +8 -0
  164. package/docs/functions/index.trimEnd.html +8 -0
  165. package/docs/functions/index.trimStart.html +8 -0
  166. package/docs/functions/index.truthy.html +7 -0
  167. package/docs/functions/index.unique.html +6 -0
  168. package/docs/functions/index.wait.html +3 -0
  169. package/docs/functions/index.waitFor.html +10 -0
  170. package/docs/functions/index.waitSync.html +3 -0
  171. package/docs/index.html +18 -207
  172. package/docs/interfaces/index.ComparePropsOptions.html +5 -0
  173. package/docs/interfaces/index.GetMultipleSource.html +3 -0
  174. package/docs/interfaces/index.GetSource.html +3 -0
  175. package/docs/interfaces/index.IsNumericStringOptions.html +5 -0
  176. package/docs/interfaces/index.OccurencesOptions.html +3 -0
  177. package/docs/interfaces/index.SetImmutableSource.html +3 -0
  178. package/docs/interfaces/index.SetSource.html +3 -0
  179. package/docs/interfaces/index.ThrottleOptions.html +5 -0
  180. package/docs/interfaces/index.ThrottledFunctionExtras.html +5 -0
  181. package/docs/modules/index.html +86 -0
  182. package/docs/types/index.CustomDeserializers.html +1 -0
  183. package/docs/types/index.CustomSerializers.html +1 -0
  184. package/docs/types/index.Later.html +4 -0
  185. package/docs/types/index.MapValuesFn.html +14 -0
  186. package/docs/types/index.MatchCallback.html +1 -0
  187. package/docs/types/index.MergeTwo.html +3 -0
  188. package/docs/types/index.SeqEarlyBreaker.html +4 -0
  189. package/docs/types/index.SeqFn.html +3 -0
  190. package/docs/types/index.SeqFunctions.html +4 -0
  191. package/docs/types/index.SetImmutablePath.html +4 -0
  192. package/docs/types/index.ThrottledFunction.html +1 -0
  193. package/docs/variables/index.mapValuesUNSET.html +2 -0
  194. package/docs/variables/index.mergeUNSET.html +4 -0
  195. package/esm/cap.js.map +1 -1
  196. package/esm/coalesce.d.ts.map +1 -1
  197. package/esm/coalesce.js.map +1 -1
  198. package/esm/compareArrays.d.ts.map +1 -1
  199. package/esm/compareProps.d.ts.map +1 -1
  200. package/esm/compareProps.js.map +1 -1
  201. package/esm/deserialize.d.ts.map +1 -1
  202. package/esm/deserialize.js.map +1 -1
  203. package/esm/ensureArray.d.ts.map +1 -1
  204. package/esm/ensureArray.js.map +1 -1
  205. package/esm/ensureDate.js.map +1 -1
  206. package/esm/ensureError.js.map +1 -1
  207. package/esm/ensurePrefix.js.map +1 -1
  208. package/esm/ensureSuffix.js.map +1 -1
  209. package/esm/ensureTimestamp.js.map +1 -1
  210. package/esm/escapeRegExp.d.ts.map +1 -1
  211. package/esm/escapeRegExp.js +1 -1
  212. package/esm/escapeRegExp.js.map +1 -1
  213. package/esm/formatDate.js +1 -1
  214. package/esm/formatDate.js.map +1 -1
  215. package/esm/get.js.map +1 -1
  216. package/esm/getMultiple.d.ts.map +1 -1
  217. package/esm/getMultiple.js.map +1 -1
  218. package/esm/index.d.ts +1 -0
  219. package/esm/index.d.ts.map +1 -1
  220. package/esm/index.js +1 -0
  221. package/esm/index.js.map +1 -1
  222. package/esm/insertSeparator.d.ts.map +1 -1
  223. package/esm/insertSeparator.js.map +1 -1
  224. package/esm/isEmpty.js.map +1 -1
  225. package/esm/isNumericString.js +1 -1
  226. package/esm/isNumericString.js.map +1 -1
  227. package/esm/last.d.ts.map +1 -1
  228. package/esm/later.d.ts.map +1 -1
  229. package/esm/mapAsync.d.ts.map +1 -1
  230. package/esm/mapAsync.js.map +1 -1
  231. package/esm/mapValues.d.ts.map +1 -1
  232. package/esm/mapValues.js.map +1 -1
  233. package/esm/match.d.ts.map +1 -1
  234. package/esm/match.js.map +1 -1
  235. package/esm/memoize.d.ts +3 -0
  236. package/esm/memoize.d.ts.map +1 -0
  237. package/esm/memoize.js +16 -0
  238. package/esm/memoize.js.map +1 -0
  239. package/esm/merge.d.ts +11 -7
  240. package/esm/merge.d.ts.map +1 -1
  241. package/esm/merge.js.map +1 -1
  242. package/esm/mostFrequent.d.ts.map +1 -1
  243. package/esm/mostFrequent.js.map +1 -1
  244. package/esm/occurrences.js.map +1 -1
  245. package/esm/omit.d.ts.map +1 -1
  246. package/esm/omit.js.map +1 -1
  247. package/esm/pick.d.ts.map +1 -1
  248. package/esm/pick.js.map +1 -1
  249. package/esm/pull.d.ts.map +1 -1
  250. package/esm/pull.js.map +1 -1
  251. package/esm/remove.d.ts.map +1 -1
  252. package/esm/remove.js +1 -1
  253. package/esm/remove.js.map +1 -1
  254. package/esm/removeCommonProperties.d.ts.map +1 -1
  255. package/esm/removeCommonProperties.js +3 -1
  256. package/esm/removeCommonProperties.js.map +1 -1
  257. package/esm/replace.js +1 -1
  258. package/esm/replace.js.map +1 -1
  259. package/esm/replaceDeep.d.ts.map +1 -1
  260. package/esm/replaceDeepByFn.d.ts.map +1 -1
  261. package/esm/replaceDeepByFn.js.map +1 -1
  262. package/esm/safe.js.map +1 -1
  263. package/esm/sample.d.ts +3 -1
  264. package/esm/sample.d.ts.map +1 -1
  265. package/esm/sample.js.map +1 -1
  266. package/esm/samples.d.ts.map +1 -1
  267. package/esm/samples.js.map +1 -1
  268. package/esm/seq.d.ts.map +1 -1
  269. package/esm/seq.js +1 -1
  270. package/esm/seq.js.map +1 -1
  271. package/esm/serialize.js.map +1 -1
  272. package/esm/set.js.map +1 -1
  273. package/esm/setImmutable.js.map +1 -1
  274. package/esm/shuffle.d.ts.map +1 -1
  275. package/esm/sortBy.d.ts.map +1 -1
  276. package/esm/sortBy.js.map +1 -1
  277. package/esm/sortProps.d.ts.map +1 -1
  278. package/esm/sortProps.js.map +1 -1
  279. package/esm/stripPrefix.js.map +1 -1
  280. package/esm/stripSuffix.js.map +1 -1
  281. package/esm/throttle.d.ts.map +1 -1
  282. package/esm/throttle.js.map +1 -1
  283. package/esm/toggle.d.ts.map +1 -1
  284. package/esm/toggle.js.map +1 -1
  285. package/esm/trimEnd.js.map +1 -1
  286. package/esm/trimStart.js.map +1 -1
  287. package/esm/truthy.d.ts +1 -1
  288. package/esm/truthy.d.ts.map +1 -1
  289. package/esm/unique.d.ts.map +1 -1
  290. package/esm/waitFor.d.ts.map +1 -1
  291. package/esm/waitFor.js +1 -1
  292. package/esm/waitFor.js.map +1 -1
  293. package/esm/waitSync.js.map +1 -1
  294. package/package.json +10 -17
  295. package/pnpm-lock.yaml +661 -386
  296. package/src/compareProps.ts +9 -2
  297. package/src/deserialize.spec.ts +1 -0
  298. package/src/escapeRegExp.spec.ts +5 -3
  299. package/src/escapeRegExp.ts +3 -2
  300. package/src/formatDate.ts +2 -2
  301. package/src/get.spec.ts +1 -0
  302. package/src/getMultiple.ts +1 -0
  303. package/src/index.ts +1 -0
  304. package/src/isNumericString.ts +3 -3
  305. package/src/memoize.spec.ts +90 -0
  306. package/src/memoize.ts +35 -0
  307. package/src/merge.ts +30 -8
  308. package/src/mostFrequent.ts +1 -0
  309. package/src/remove.ts +1 -1
  310. package/src/removeCommonProperties.ts +4 -2
  311. package/src/replace.ts +1 -1
  312. package/src/rethrow.ts +1 -1
  313. package/src/sample.spec.ts +1 -0
  314. package/src/sample.ts +18 -2
  315. package/src/samples.ts +1 -1
  316. package/src/seq.spec.ts +6 -3
  317. package/src/seq.ts +1 -1
  318. package/src/serialize.spec.ts +1 -0
  319. package/src/serialize.ts +1 -1
  320. package/src/set.ts +1 -1
  321. package/src/setImmutable.ts +1 -1
  322. package/src/sortBy.ts +1 -1
  323. package/src/throttle.ts +1 -1
  324. package/src/waitFor.spec.ts +7 -2
  325. package/src/waitFor.ts +1 -1
  326. package/typedoc.cjs +2 -4
  327. package/docs/assets/pages.css +0 -14
  328. package/docs/functions/cap.html +0 -152
  329. package/docs/functions/capitalize.html +0 -157
  330. package/docs/functions/coalesce.html +0 -162
  331. package/docs/functions/compareArrays.html +0 -165
  332. package/docs/functions/compareProps.html +0 -164
  333. package/docs/functions/deserialize.html +0 -156
  334. package/docs/functions/ensureArray.html +0 -150
  335. package/docs/functions/ensureDate.html +0 -152
  336. package/docs/functions/ensureError.html +0 -156
  337. package/docs/functions/ensurePrefix.html +0 -154
  338. package/docs/functions/ensureSuffix.html +0 -154
  339. package/docs/functions/ensureTimestamp.html +0 -152
  340. package/docs/functions/escapeRegExp.html +0 -148
  341. package/docs/functions/formatDate.html +0 -150
  342. package/docs/functions/get.html +0 -174
  343. package/docs/functions/getMultiple.html +0 -165
  344. package/docs/functions/insertSeparator.html +0 -159
  345. package/docs/functions/isEmpty.html +0 -175
  346. package/docs/functions/isNumericString.html +0 -149
  347. package/docs/functions/isPlainObject.html +0 -159
  348. package/docs/functions/last.html +0 -162
  349. package/docs/functions/later-1.html +0 -147
  350. package/docs/functions/mapAsync.html +0 -180
  351. package/docs/functions/mapValues.html +0 -166
  352. package/docs/functions/match.html +0 -158
  353. package/docs/functions/merge.html +0 -500
  354. package/docs/functions/mostFrequent.html +0 -147
  355. package/docs/functions/noop.html +0 -137
  356. package/docs/functions/occurrences.html +0 -161
  357. package/docs/functions/omit.html +0 -169
  358. package/docs/functions/pick.html +0 -165
  359. package/docs/functions/pull.html +0 -149
  360. package/docs/functions/remove.html +0 -165
  361. package/docs/functions/removeCommonProperties.html +0 -164
  362. package/docs/functions/replace.html +0 -154
  363. package/docs/functions/replaceDeep.html +0 -170
  364. package/docs/functions/rethrow.html +0 -142
  365. package/docs/functions/round.html +0 -151
  366. package/docs/functions/safe.html +0 -192
  367. package/docs/functions/sample.html +0 -149
  368. package/docs/functions/samples.html +0 -159
  369. package/docs/functions/scale.html +0 -153
  370. package/docs/functions/seq.html +0 -164
  371. package/docs/functions/seqEarlyBreak.html +0 -162
  372. package/docs/functions/serialize.html +0 -161
  373. package/docs/functions/set.html +0 -174
  374. package/docs/functions/setImmutable.html +0 -173
  375. package/docs/functions/shuffle.html +0 -149
  376. package/docs/functions/sortBy.html +0 -171
  377. package/docs/functions/sortProps.html +0 -159
  378. package/docs/functions/stripPrefix.html +0 -148
  379. package/docs/functions/stripSuffix.html +0 -148
  380. package/docs/functions/throttle.html +0 -167
  381. package/docs/functions/toggle.html +0 -154
  382. package/docs/functions/trim.html +0 -152
  383. package/docs/functions/trimEnd.html +0 -152
  384. package/docs/functions/trimStart.html +0 -152
  385. package/docs/functions/truthy.html +0 -154
  386. package/docs/functions/unique.html +0 -152
  387. package/docs/functions/wait.html +0 -145
  388. package/docs/functions/waitFor.html +0 -164
  389. package/docs/functions/waitSync.html +0 -145
  390. package/docs/interfaces/ComparePropsOptions.html +0 -70
  391. package/docs/interfaces/GetMultipleSource.html +0 -142
  392. package/docs/interfaces/GetSource.html +0 -142
  393. package/docs/interfaces/IsNumericStringOptions.html +0 -91
  394. package/docs/interfaces/OccurencesOptions.html +0 -72
  395. package/docs/interfaces/SetImmutableSource.html +0 -142
  396. package/docs/interfaces/SetSource.html +0 -142
  397. package/docs/interfaces/ThrottleOptions.html +0 -81
  398. package/docs/interfaces/ThrottledFunctionExtras.html +0 -97
  399. package/docs/modules.html +0 -223
  400. package/docs/pages/CHANGELOG.html +0 -973
  401. package/docs/pages/Introduction.html +0 -130
  402. package/docs/types/CustomDeserializers.html +0 -159
  403. package/docs/types/CustomSerializers.html +0 -159
  404. package/docs/types/Later.html +0 -173
  405. package/docs/types/MapValuesFn.html +0 -170
  406. package/docs/types/MatchCallback.html +0 -149
  407. package/docs/types/SeqEarlyBreaker.html +0 -150
  408. package/docs/types/SeqFn.html +0 -148
  409. package/docs/types/SeqFunctions.html +0 -141
  410. package/docs/types/SetImmutablePath.html +0 -135
  411. package/docs/types/ThrottledFunction.html +0 -149
  412. package/docs/variables/mapValuesUNSET.html +0 -137
  413. package/docs/variables/mergeUNSET.html +0 -139
  414. package/tutorials/Introduction.md +0 -1
@@ -1,13 +1,20 @@
1
1
  import { unique } from "./unique.js";
2
2
 
3
+ /**
4
+ * Options for `compareProps` function.
5
+ */
3
6
  interface ComparePropsOptions {
7
+ /**
8
+ * If `true`, missing properties in the first object will be considered as equal to explicit `undefined` properties
9
+ * in the second.
10
+ */
4
11
  missingEqualsUndefined?: boolean;
5
12
  }
6
13
 
7
14
  /**
8
15
  * Compare two objects and return an array of the properties that are different.
9
- * By default, if first object doesn't have a property at all and second object has it defined as `undefined` it will be
10
- * considered as a difference. To change this behavior set `missingEqualsUndefined` option to `true`.
16
+ * By default, if the first object doesn't have a property at all and the second object has it defined as `undefined`
17
+ * this will be considered as a difference. To change this behavior, set `missingEqualsUndefined` option to `true`.
11
18
  * @param a - first object
12
19
  * @param b - second object
13
20
  * @param options - options
@@ -5,6 +5,7 @@ import { deserialize } from "./deserialize";
5
5
  class Person {
6
6
  public name: string;
7
7
 
8
+ // eslint-disable-next-line @typescript-eslint/no-shadow
8
9
  public constructor(name: string) {
9
10
  this.name = name;
10
11
  }
@@ -3,7 +3,7 @@ import { escapeRegExp } from "./escapeRegExp.js";
3
3
  describe("escapeRegExp", () => {
4
4
  it("it should escape dot", () => {
5
5
  const userName = ".";
6
- const regex = new RegExp(`^(maciek|${escapeRegExp(userName)})$`);
6
+ const regex = new RegExp(`^(maciek|${escapeRegExp(userName)})$`, "u");
7
7
  const result = regex.test("maciek");
8
8
  result.must.be.true();
9
9
 
@@ -22,10 +22,12 @@ describe("escapeRegExp", () => {
22
22
 
23
23
  it("should escape complex string", () => {
24
24
  const userName = "([{^|";
25
- const fn = () => new RegExp(`^(maciek|${escapeRegExp(userName)})$`);
25
+ const fn = () => new RegExp(`^(maciek|${escapeRegExp(userName)})$`, "u");
26
26
  fn.must.not.throw();
27
27
 
28
- const fnNoEscape = () => new RegExp(`^(maciek|${userName})$`);
28
+ const fnNoEscape = () => new RegExp(`^(maciek|${userName})$`, "u");
29
29
  fnNoEscape.must.throw();
30
30
  });
31
+
32
+ // @TODO add tests for missing u flag, test if this flag changed anything in fn behavior
31
33
  });
@@ -2,14 +2,15 @@
2
2
  * Escapes a string to be used in a regular expression.
3
3
  * From: https://stackoverflow.com/a/3561711
4
4
  * @param string - string to escape
5
- * @example ```typescript
5
+ * @example
6
+ * ```typescript
6
7
  * const badName = "([{^|";
7
8
  * const regex = new RegExp(`^(maciek|${escapeRegExp(badName)})$`); // won't crash
8
9
  * regex.test(badName); // true
9
10
  * ```
10
11
  */
11
12
  const escapeRegExp = (string: string) => {
12
- return string.replace(/[/\-\\^$*+?.()|[\]{}]/g, "\\$&");
13
+ return string.replace(/[/\-\\^$*+?.()|[\]{}]/gu, "\\$&");
13
14
  };
14
15
 
15
16
  export {
package/src/formatDate.ts CHANGED
@@ -9,9 +9,9 @@ import { ensureDate } from "./ensureDate.js";
9
9
  * Important: this is work in progress. All locale-based values are not supported yet. Formats that heavily depend on
10
10
  * locale won't ever be supported.
11
11
  */
12
- const formatDate = (date: Date | number, format: string, locale = "en-US"): string => { // eslint-disable-line max-lines-per-function, max-len
12
+ const formatDate = (date: Date | number, format: string, locale = "en-US"): string => { // eslint-disable-line max-lines-per-function
13
13
  const d = ensureDate(date);
14
- return format.replace(/%([%a-zA-Z])/g, (_, c) => {
14
+ return format.replace(/%([%a-zA-Z])/gu, (_, c) => {
15
15
  switch (c) {
16
16
  case "%": return "%";
17
17
  // Day
package/src/get.spec.ts CHANGED
@@ -55,6 +55,7 @@ describe("get", () => {
55
55
 
56
56
  it("doesn't parse string as js code, behaves NOT like lodash", () => {
57
57
  // Lodash intention-guessing example, inconsistency detected
58
+ // eslint-disable-next-line @typescript-eslint/no-shadow
58
59
  const name = get(testObject, "product[name]");
59
60
  (name === undefined).must.be.true();
60
61
 
@@ -29,6 +29,7 @@ const DEFAULT = {};
29
29
  * @returns {*} - found value or default value
30
30
  */
31
31
  const getMultiple = (source: Source, defaultValue: unknown, ...paths: (string | string[])[]): unknown => {
32
+ // eslint-disable-next-line @typescript-eslint/no-shadow
32
33
  const length = paths.length;
33
34
  for (let i = 0; i < length; i++) {
34
35
  const properties = paths[i]!;
package/src/index.ts CHANGED
@@ -24,6 +24,7 @@ export * from "./later.js";
24
24
  export * from "./mapAsync.js";
25
25
  export * from "./mapValues.js";
26
26
  export * from "./match.js";
27
+ export * from "./memoize.js";
27
28
  export * from "./merge.js";
28
29
  export * from "./mostFrequent.js";
29
30
  export * from "./noop.js";
@@ -14,10 +14,10 @@ const NOT_FOUND = -1;
14
14
  * @param {object} [options] - Options object
15
15
  * @param {boolean} [options.allowFloats=false] - Allow floats
16
16
  * @param {boolean} [options.allowExponents=false] - Allow exponents
17
- * @param {boolean} [options.allowInfinity=false] - Allow Initity and -Infinity (casing matters)
17
+ * @param {boolean} [options.allowInfinity=false] - Allow Infinity and -Infinity (casing matters)
18
18
  * @param {boolean} [options.allowNaN=false] - Allow NaN (casing matters)
19
19
  */
20
- const isNumericString = (string: string, options: Options = {}) => { // eslint-disable-line max-statements, max-lines-per-function, max-len
20
+ const isNumericString = (string: string, options: Options = {}) => { // eslint-disable-line max-statements, max-lines-per-function
21
21
  if (typeof string !== "string") {
22
22
  throw new TypeError("Expected a string");
23
23
  }
@@ -82,7 +82,7 @@ const isNumericString = (string: string, options: Options = {}) => { // eslint-d
82
82
  }
83
83
  }
84
84
 
85
- return Boolean(/^[\de.+-]+$/.exec(normalized));
85
+ return Boolean(/^[\de.+-]+$/u.exec(normalized));
86
86
  };
87
87
 
88
88
  export {
@@ -0,0 +1,90 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-shadow
2
+ import must from "must";
3
+
4
+ import createSpy from "../test/createSpy";
5
+
6
+ import { memoize } from "./memoize";
7
+
8
+ describe("memoize", () => {
9
+ it("should memoize the result if called with the same arguments", async () => {
10
+ const sum = createSpy((a: number, b: number) => a + b);
11
+ const memoizedSum = memoize(sum);
12
+
13
+ must(memoizedSum(1, 2)).equal(3);
14
+ must(sum.__spy.calls.length).equal(1);
15
+ must(memoizedSum(1, 2)).equal(3);
16
+ must(memoizedSum(1, 2)).equal(3);
17
+ must(memoizedSum(1, 2)).equal(3);
18
+ must(sum.__spy.calls.length).equal(1);
19
+ });
20
+
21
+ it("should trigger the function again if arguments are changed", async () => {
22
+ const sum = createSpy((a: number, b: number) => a + b);
23
+ const memoizedSum = memoize(sum);
24
+
25
+ must(memoizedSum(1, 2)).equal(3);
26
+ must(sum.__spy.calls.length).equal(1);
27
+ must(memoizedSum(1, 2)).equal(3);
28
+ must(sum.__spy.calls.length).equal(1);
29
+ must(memoizedSum(1, 3)).equal(4);
30
+ must(sum.__spy.calls.length).equal(2);
31
+ });
32
+
33
+ it("should remember only one value", () => {
34
+ const sum = createSpy((a: number, b: number) => a + b);
35
+ const memoizedSum = memoize(sum);
36
+
37
+ must(memoizedSum(1, 2)).equal(3);
38
+ must(sum.__spy.calls.length).equal(1);
39
+ must(memoizedSum(1, 2)).equal(3);
40
+ must(sum.__spy.calls.length).equal(1);
41
+ must(memoizedSum(1, 3)).equal(4);
42
+ must(sum.__spy.calls.length).equal(2);
43
+ must(memoizedSum(1, 2)).equal(3);
44
+ must(sum.__spy.calls.length).equal(3);
45
+ });
46
+
47
+ it("should recalc if arguments amount changes", async () => {
48
+ const sum = createSpy((a: number, b: number) => a + b);
49
+ const memoizedSum = memoize(sum);
50
+
51
+ must(memoizedSum(1, 2)).equal(3);
52
+ must(sum.__spy.calls.length).equal(1);
53
+ must(memoizedSum(1, 2, 0)).equal(3);
54
+ must(sum.__spy.calls.length).equal(2);
55
+ must(memoizedSum(1, 2)).equal(3);
56
+ must(sum.__spy.calls.length).equal(3);
57
+ });
58
+
59
+ it("works with common pitfall values", async () => {
60
+ const sum = createSpy((a: number, b: number) => a + b);
61
+ const memoizedSum = memoize(sum);
62
+
63
+ memoizedSum(1, NaN);
64
+ must(sum.__spy.calls.length).equal(1);
65
+ memoizedSum(1, NaN);
66
+ must(sum.__spy.calls.length).equal(1);
67
+
68
+ memoizedSum(1, 0);
69
+ must(sum.__spy.calls.length).equal(2);
70
+ memoizedSum(1, -0);
71
+ must(sum.__spy.calls.length).equal(3);
72
+ });
73
+
74
+ it("compares by reference", async () => {
75
+ const fn = createSpy((a: unknown) => null);
76
+ const memoizedFn = memoize(fn);
77
+
78
+ const arr: never[] = [];
79
+
80
+ memoizedFn([]);
81
+ must(fn.__spy.calls.length).equal(1);
82
+ memoizedFn([]);
83
+ must(fn.__spy.calls.length).equal(2);
84
+
85
+ memoizedFn(arr);
86
+ must(fn.__spy.calls.length).equal(3);
87
+ memoizedFn(arr);
88
+ must(fn.__spy.calls.length).equal(3);
89
+ });
90
+ });
package/src/memoize.ts ADDED
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Memoizes a function, caching the result of the last call.
3
+ * If the function is called with the same arguments (and the same context!) again, it will return the cached result.
4
+ *
5
+ * It caches only the last call, so it's not suitable for functions that are called with different arguments in a short
6
+ * time.
7
+ *
8
+ * Warning: Your function must be 100% pure, and it can't access anything dynamic outside its scope.
9
+ *
10
+ * @param fn - function to memoize
11
+ * @returns memoized function
12
+ */
13
+ const memoize = <Args extends unknown[], Ret>(fn: (...args: Args) => Ret) => {
14
+ let lastArgs: Args | undefined, lastResult: Ret, lastThis: unknown;
15
+
16
+ return function memoized(this: unknown, ...args: Args): Ret {
17
+ if (
18
+ lastThis === this
19
+ && lastArgs?.length === args.length
20
+ && args.every((arg, i) => Object.is(arg, lastArgs![i]))
21
+ ) {
22
+ return lastResult;
23
+ }
24
+
25
+ lastThis = this;
26
+ lastArgs = args;
27
+ lastResult = fn.apply(this, args);
28
+
29
+ return lastResult;
30
+ };
31
+ };
32
+
33
+ export {
34
+ memoize,
35
+ };
package/src/merge.ts CHANGED
@@ -1,19 +1,37 @@
1
1
  /**
2
2
  * Special value that can be set as a value in an object.
3
- * If this value is merged with previous value - the property in a final object will be removed;
3
+ * If this value is merged with the previous value, the property in a final object will be removed;
4
4
  * @see {@link merge}
5
5
  */
6
6
  const UNSET = typeof Symbol !== "undefined" ? Symbol("UNSET") : {};
7
7
 
8
+ /**
9
+ * Merges two objects into one. If the same property is present in both objects, the value from the second object is
10
+ * used.
11
+ */
12
+ type MergeTwo<T, U> = {
13
+ [K in keyof T | keyof U]: K extends keyof U
14
+ ? U[K]
15
+ : K extends keyof T
16
+ ? T[K]
17
+ : never;
18
+ };
19
+
8
20
  interface Merge {
9
21
  <A>(a: A): A;
10
- <A, B>(a: A, b: B): A & B;
11
- <A, B, C>(a: A, b: B, c: C): A & B & C;
12
- <A, B, C, D>(a: A, b: B, c: C, d: D): A & B & C & D;
13
- <A, B, C, D, E>(a: A, b: B, c: C, d: D, e: E): A & B & C & D & E;
14
- <A, B, C, D, E, F>(a: A, b: B, c: C, d: D, e: E, f: F): A & B & C & D & E & F;
15
- <A, B, C, D, E, F, G>(a: A, b: B, c: C, d: D, e: E, f: F, g: G): A & B & C & D & E & F & G;
16
- <A, B, C, D, E, F, G, H>(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H): A & B & C & D & E & F & G & H;
22
+ <A, B>(a: A, b: B): MergeTwo<A, B>;
23
+ <A, B, C>(a: A, b: B, c: C): MergeTwo<MergeTwo<A, B>, C>;
24
+ <A, B, C, D>(a: A, b: B, c: C, d: D): MergeTwo<MergeTwo<MergeTwo<A, B>, C>, D>;
25
+ <A, B, C, D, E>(a: A, b: B, c: C, d: D, e: E): MergeTwo<MergeTwo<MergeTwo<MergeTwo<A, B>, C>, D>, E>;
26
+ <A, B, C, D, E, F>(a: A, b: B, c: C, d: D, e: E, f: F): MergeTwo<
27
+ MergeTwo<MergeTwo<MergeTwo<MergeTwo<A, B>, C>, D>, E>, F
28
+ >;
29
+ <A, B, C, D, E, F, G>(a: A, b: B, c: C, d: D, e: E, f: F, g: G): MergeTwo<
30
+ MergeTwo<MergeTwo<MergeTwo<MergeTwo<MergeTwo<A, B>, C>, D>, E>, F>, G
31
+ >;
32
+ <A, B, C, D, E, F, G, H>(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H): MergeTwo<
33
+ MergeTwo<MergeTwo<MergeTwo<MergeTwo<MergeTwo<MergeTwo<A, B>, C>, D>, E>, F>, G>, H
34
+ >;
17
35
  <A, B extends object>(a: A, ...args: B[]): unknown;
18
36
  }
19
37
 
@@ -56,3 +74,7 @@ export {
56
74
  merge,
57
75
  UNSET as mergeUNSET,
58
76
  };
77
+
78
+ export type {
79
+ MergeTwo,
80
+ };
@@ -3,6 +3,7 @@
3
3
  * @param {Array} array
4
4
  */
5
5
  const mostFrequent = <T>(array: T[]): T => {
6
+ // eslint-disable-next-line @typescript-eslint/no-shadow
6
7
  let top = 0,
7
8
  topValue = array[0];
8
9
 
package/src/remove.ts CHANGED
@@ -18,7 +18,7 @@ const remove = <T>(array: T[], fn: (elem: T, num: number, list: T[]) => boolean)
18
18
  }
19
19
  }
20
20
 
21
- idsToRemove.forEach(id => array.splice(id, 1));
21
+ idsToRemove.forEach(id => { array.splice(id, 1); });
22
22
 
23
23
  return removedValues;
24
24
  };
@@ -28,8 +28,10 @@ const removeCommonProperties = (source: Obj, target1: Obj, ...targetN: Obj[]) =>
28
28
  for (const key of keys) {
29
29
  const allTheSame = targets.every((target) => JSON.stringify(target[key]) === JSON.stringify(source[key]));
30
30
  if (allTheSame) {
31
- // eslint-disable-next-line no-param-reassign,@typescript-eslint/no-dynamic-delete
32
- targets.forEach((target) => delete target[key]);
31
+ targets.forEach((target) => {
32
+ // eslint-disable-next-line no-param-reassign,@typescript-eslint/no-dynamic-delete
33
+ delete target[key];
34
+ });
33
35
  }
34
36
  }
35
37
  };
package/src/replace.ts CHANGED
@@ -12,7 +12,7 @@ const replace = (source: string, replaceMap: Record<string, string>) => {
12
12
  if (keys.length === 0) {
13
13
  return source;
14
14
  }
15
- const regex = new RegExp(keys.map(escapeRegExp).join("|"), "g");
15
+ const regex = new RegExp(keys.map(escapeRegExp).join("|"), "gu");
16
16
  return source.replace(regex, (matched) => replaceMap[matched]!);
17
17
  };
18
18
 
package/src/rethrow.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  * @param {*} e
4
4
  */
5
5
  const rethrow = (e: unknown) => {
6
- // eslint-disable-next-line @typescript-eslint/no-throw-literal
6
+ // eslint-disable-next-line @typescript-eslint/only-throw-error
7
7
  throw e;
8
8
  };
9
9
 
@@ -25,6 +25,7 @@ describe("sample", () => {
25
25
 
26
26
  it("should work with 0 items array", async () => {
27
27
  const array: never[] = [];
28
+ // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression
28
29
  const item = sample(array);
29
30
  must(item).equal(undefined);
30
31
  });
package/src/sample.ts CHANGED
@@ -1,9 +1,25 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
2
+ type IsTuple<T> = T extends readonly [infer A, ...(infer B)] ? true : false;
3
+ type MaybeTupleReturn<T> = IsTuple<T> extends true
4
+ ? (T extends readonly (infer U)[] ? U : never)
5
+ : (T extends (infer U)[] ? U | undefined : never);
6
+
1
7
  /**
2
8
  * Picks a random element from an array.
3
9
  * @param array - source array
10
+ *
11
+ * @example
12
+ * sample([1, 2, 3]); // 2 (type: number | undefined)
13
+ * sample(["a", "b", "c"]); // "c" (type: string | undefined)
14
+ * sample([]); // undefined (type: undefined)
15
+ *
16
+ * const a = [1, 2, 3] as const;
17
+ * sample(a); // 2 (type: 1 | 2 | 3)
18
+ *
19
+ * sample([1, 1, 1] as [number, number, number]); // 1 (type: number)
4
20
  */
5
- const sample = <T>(array: T[]): T => {
6
- return array[Math.floor(Math.random() * array.length)]!;
21
+ const sample = <X, T extends readonly X[]>(array: T): MaybeTupleReturn<T> => {
22
+ return array[Math.floor(Math.random() * array.length)] as MaybeTupleReturn<T>;
7
23
  };
8
24
 
9
25
  export {
package/src/samples.ts CHANGED
@@ -8,7 +8,7 @@
8
8
  * @param elementsToPick - number of elements to pick
9
9
  * @param allowShuffle - if true, it will shuffle the values if elementsToPick is greater or equal to array length instead of returning the original array
10
10
  */
11
- const samples = <T>(array: T[], elementsToPick: number, allowShuffle = false): T[] => { // eslint-disable-line max-statements,max-len
11
+ const samples = <T>(array: T[], elementsToPick: number, allowShuffle = false): T[] => { // eslint-disable-line max-statements
12
12
  if (elementsToPick < 0) {
13
13
  throw new Error("elementsToPick must be a positive number");
14
14
  }
package/src/seq.spec.ts CHANGED
@@ -119,17 +119,20 @@ describe("seq", () => {
119
119
  const list = [
120
120
  () => {
121
121
  firstCalled = true;
122
- // eslint-disable-next-line prefer-promise-reject-errors
122
+
123
+ // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
123
124
  return Promise.reject(1);
124
125
  },
125
126
  () => {
126
127
  secondCalled = true;
127
- // eslint-disable-next-line prefer-promise-reject-errors
128
+
129
+ // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
128
130
  return Promise.reject(2);
129
131
  },
130
132
  () => {
131
133
  thirdCalled = true;
132
- // eslint-disable-next-line prefer-promise-reject-errors
134
+
135
+ // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
133
136
  return Promise.reject(3);
134
137
  },
135
138
  ];
package/src/seq.ts CHANGED
@@ -38,7 +38,7 @@ const run = <T>(list: Fn<T>[], earlyBreaker?: EarlyBreaker): Promise<T> => {
38
38
  const errors: Error[] = [];
39
39
 
40
40
  const doTry = function(error?: Error) {
41
- if (error !== undefined && earlyBreaker && earlyBreaker(error)) {
41
+ if (error !== undefined && earlyBreaker?.(error)) {
42
42
  reject(error);
43
43
  return;
44
44
  }
@@ -9,6 +9,7 @@ interface Test {
9
9
  class Person {
10
10
  public name: string;
11
11
 
12
+ // eslint-disable-next-line @typescript-eslint/no-shadow
12
13
  public constructor(name: string) {
13
14
  this.name = name;
14
15
  }
package/src/serialize.ts CHANGED
@@ -35,7 +35,7 @@ type Options = {
35
35
  * @param customSerializers - an object with custom serializers
36
36
  * @param options - options
37
37
  */
38
- const serialize = (data: unknown, customSerializers?: CustomSerializers, options?: Options) => { // eslint-disable-line max-lines-per-function,max-len
38
+ const serialize = (data: unknown, customSerializers?: CustomSerializers, options?: Options) => { // eslint-disable-line max-lines-per-function
39
39
  const sourceData = Object.keys(customSerializers ?? {}).length
40
40
  ? replaceDeepByFn(
41
41
  data,
package/src/set.ts CHANGED
@@ -30,7 +30,7 @@ const isObject = (value: unknown) => (typeof value === "object" || typeof value
30
30
  * { "items": { "0": value }}
31
31
  * @returns {Object} - given object or new object if source was primitive
32
32
  */
33
- const set = (source: Source, path: string | string[], value: unknown): Source | unknown => { // eslint-disable-line @typescript-eslint/no-redundant-type-constituents,max-len
33
+ const set = (source: Source, path: string | string[], value: unknown): Source | unknown => { // eslint-disable-line @typescript-eslint/no-redundant-type-constituents
34
34
  const pathParts = typeof path === "string" ? path.split(".") : path;
35
35
  const len = pathParts.length;
36
36
 
@@ -67,7 +67,7 @@ const getPathParts = (path: Path) => {
67
67
  * { "items": { "0": value }}
68
68
  * @returns {Object} - given object or new object if source was primitive
69
69
  */
70
- const setImmutable = (source: Source, path: Path, value: unknown): Source | unknown => { // eslint-disable-line max-statements, max-len, @typescript-eslint/no-redundant-type-constituents
70
+ const setImmutable = (source: Source, path: Path, value: unknown): Source | unknown => { // eslint-disable-line max-statements, @typescript-eslint/no-redundant-type-constituents
71
71
  const pathParts = getPathParts(path);
72
72
  const isValidPath = hasOnlyValidPathParts(pathParts);
73
73
  if (!isValidPath) {
package/src/sortBy.ts CHANGED
@@ -10,7 +10,7 @@ const sortBy = <T>(propertyName: keyof T, asc = true, defaultValue: unknown = nu
10
10
  return 0;
11
11
  }
12
12
  // @ts-expect-error We don't care about types here, it's for runtime pure JS too
13
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
13
+
14
14
  if ((a[propertyName] ?? defaultValue) > (b[propertyName] ?? defaultValue)) {
15
15
  // eslint-disable-next-line @typescript-eslint/no-magic-numbers
16
16
  return asc ? 1 : -1;
package/src/throttle.ts CHANGED
@@ -46,7 +46,7 @@ type CanReturnUndefined<F extends (...args: any[]) => any> = (...args: Parameter
46
46
  * @param {number | number[]} time - throttle time as number or array of numbers (min 1 element)
47
47
  * @param {Opts} options
48
48
  */
49
- const throttle = <RT, F extends (...args: any[]) => RT>( // eslint-disable-line max-lines-per-function, @typescript-eslint/no-explicit-any, max-len
49
+ const throttle = <RT, F extends (...args: any[]) => RT>( // eslint-disable-line max-lines-per-function, @typescript-eslint/no-explicit-any
50
50
  fn: F, time: number | [number, ...number[]] = 0, options?: Opts,
51
51
  ): CanReturnUndefined<F> & Extras => {
52
52
  const opts: Required<Opts> = {
@@ -4,6 +4,7 @@ import must from "must";
4
4
  import createSpy from "../test/createSpy";
5
5
 
6
6
  import { waitFor } from "./waitFor";
7
+ import { wait } from "./wait";
7
8
 
8
9
  describe("waitFor", () => {
9
10
  it("calls function multiple times until it returns truthy value", async () => {
@@ -53,14 +54,18 @@ describe("waitFor", () => {
53
54
  });
54
55
 
55
56
  it("time outs after given time", async () => {
57
+ const spy = createSpy(() => false);
56
58
  // eslint-disable-next-line @typescript-eslint/await-thenable
57
- await must(waitFor(() => null, {
59
+ await must(waitFor(spy, {
58
60
  interval: 40,
59
61
  timeout: 300,
60
62
  })).reject.to.instanceOf(Error);
63
+ const calls = spy.__spy.calls.length;
64
+ await wait(100);
65
+ must(spy.__spy.calls.length).equal(calls);
61
66
  });
62
67
 
63
- it("time outs after given amout of retries", async () => {
68
+ it("time outs after given count of retries", async () => {
64
69
  const spy = createSpy(() => false);
65
70
 
66
71
  // eslint-disable-next-line @typescript-eslint/await-thenable
package/src/waitFor.ts CHANGED
@@ -77,7 +77,7 @@ const waitFor = <T>(fn: () => MaybePromise<T>, options: Options = defaultOptions
77
77
  return;
78
78
  }
79
79
 
80
- setTimeout(() => {
80
+ intervalTimer = setTimeout(() => {
81
81
  tryFn().catch(noop);
82
82
  }, options.interval);
83
83
  }
package/typedoc.cjs CHANGED
@@ -1,5 +1,3 @@
1
- const json = require("./pagesconfig.json");
2
-
3
1
  module.exports = {
4
- pluginPages: json,
5
- };
2
+ projectDocuments: ["./CHANGELOG.md"]
3
+ }
@@ -1,14 +0,0 @@
1
- .tsd-navigation li.pages-entry.pages-entry-page > a {
2
- color: var(--color-link);
3
- }
4
- .tsd-navigation li.pages-entry > a {
5
- padding-top: 0.25rem;
6
- padding-bottom: 0.25rem;
7
- }
8
- .tsd-page-toolbar .table-cell .pages-entry {
9
- white-space: normal;
10
- }
11
-
12
- #tsd-search .results .pages-entry-page > a::before {
13
- content: '📚 ';
14
- }