@wener/utils 1.1.51 → 1.1.53

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 (499) hide show
  1. package/lib/arrays/MaybeArray.js +58 -8
  2. package/lib/arrays/arrayFromAsync.js +254 -6
  3. package/lib/asyncs/AsyncInterval.js +145 -9
  4. package/lib/asyncs/MaybePromise.js +0 -2
  5. package/lib/asyncs/Promises.js +95 -48
  6. package/lib/asyncs/createAsyncIterator.js +313 -23
  7. package/lib/asyncs/createLazyPromise.js +72 -31
  8. package/lib/asyncs/createLazyPromise.test.js +367 -0
  9. package/lib/asyncs/firstOfAsyncIterator.js +6 -6
  10. package/lib/asyncs/generatorOfStream.js +125 -14
  11. package/lib/asyncs/isIterator.js +1 -3
  12. package/lib/asyncs/isPromise.js +2 -4
  13. package/lib/asyncs/isThenable.js +0 -2
  14. package/lib/asyncs/nextOfAsyncIterator.js +15 -9
  15. package/lib/asyncs/promiseOfCallback.js +2 -4
  16. package/lib/asyncs/timeout.js +122 -13
  17. package/lib/browsers/copy.js +7 -8
  18. package/lib/browsers/download.js +215 -40
  19. package/lib/browsers/getFileFromDataTransfer.js +17 -14
  20. package/lib/browsers/loaders.js +251 -18
  21. package/lib/crypto/base.js +3 -3
  22. package/lib/crypto/getNodeCrypto.js +3 -5
  23. package/lib/crypto/hashing.js +236 -30
  24. package/lib/crypto/hashing.test.js +323 -0
  25. package/lib/crypto/md5.bench.js +11 -11
  26. package/lib/crypto/md5.d.js +0 -2
  27. package/lib/crypto/md5.js +0 -2
  28. package/lib/crypto/md5.test.js +7 -0
  29. package/lib/crypto/pem/pem.js +197 -35
  30. package/lib/crypto/pem/pem.test.js +104 -0
  31. package/lib/crypto/randomUUIDv7.js +0 -2
  32. package/lib/crypto/ulid.js +84 -48
  33. package/lib/crypto/ulid.test.js +115 -0
  34. package/lib/emitter/types.js +0 -2
  35. package/lib/errors/DetailError.js +297 -0
  36. package/lib/errors/Errors.js +2 -202
  37. package/lib/errors/Errors.mod.js +206 -0
  38. package/lib/errors/Errors.test.js +24 -0
  39. package/lib/fetch/HttpStatus.js +1 -3
  40. package/lib/fetch/createFetchWith.js +188 -19
  41. package/lib/fetch/createFetchWithLogging.js +17 -16
  42. package/lib/fetch/createFetchWithRetry.js +40 -24
  43. package/lib/fetch/dumpRequest.js +467 -41
  44. package/lib/fetch/dumpRequest.test.js +384 -0
  45. package/lib/fetch/dumpResponse.js +271 -16
  46. package/lib/fetch/dumpResponse.test.js +393 -0
  47. package/lib/fetch/http.types.js +0 -2
  48. package/lib/fetch/index.js +5 -7
  49. package/lib/fetch/isTextContentType.js +5 -0
  50. package/lib/fetch/resolveRequest.js +7 -0
  51. package/lib/fetch/types.js +0 -2
  52. package/lib/i18n/createTranslate.js +40 -20
  53. package/lib/i18n/createTranslate.test.js +177 -0
  54. package/lib/index.js +74 -76
  55. package/lib/io/AbstractEncoding.js +0 -2
  56. package/lib/io/ArrayBuffer.test-d.js +4 -6
  57. package/lib/io/ArrayBuffers.base64.test.js +60 -0
  58. package/lib/io/ArrayBuffers.js +2 -334
  59. package/lib/io/ArrayBuffers.mod.js +531 -0
  60. package/lib/io/ArrayBuffers.test.js +77 -0
  61. package/lib/io/Buffer.js +190 -20
  62. package/lib/io/Buffer.test.js +22 -0
  63. package/lib/io/ByteBuffer.js +752 -441
  64. package/lib/io/ByteBuffer.test.js +184 -0
  65. package/lib/io/base64.js +17 -19
  66. package/lib/io/dump.js +16 -16
  67. package/lib/io/isBuffer.js +2 -3
  68. package/lib/io/isBuffer.test.js +8 -0
  69. package/lib/io/isTransferable.js +16 -8
  70. package/lib/io/isTransferable.test.js +17 -0
  71. package/lib/io/parseDataUri.js +288 -40
  72. package/lib/io/parseDataUri.test.js +286 -0
  73. package/lib/io/types.js +1 -0
  74. package/lib/langs/AsyncCloser.js +270 -34
  75. package/lib/langs/Closer.js +95 -29
  76. package/lib/langs/MaybeFunction.js +38 -5
  77. package/lib/langs/classOf.js +0 -2
  78. package/lib/langs/deepEqual.js +82 -22
  79. package/lib/langs/deepEqual.test.js +11 -0
  80. package/lib/langs/deepFreeze.js +28 -9
  81. package/lib/langs/getGlobalStates.js +14 -10
  82. package/lib/langs/getObjectId.js +4 -6
  83. package/lib/langs/ifPresent.js +0 -2
  84. package/lib/langs/isClass.js +0 -2
  85. package/lib/langs/isDefined.js +0 -2
  86. package/lib/langs/isEmptyObject.js +1 -3
  87. package/lib/langs/isFunction.js +0 -2
  88. package/lib/langs/isNil.js +3 -0
  89. package/lib/langs/isPlainObject.js +2 -4
  90. package/lib/langs/langs.test.js +126 -0
  91. package/lib/langs/memoize.js +11 -7
  92. package/lib/langs/mixin.js +7 -4
  93. package/lib/langs/mixin.test.js +135 -0
  94. package/lib/langs/parseBoolean.js +11 -8
  95. package/lib/langs/shallowClone.js +5 -3
  96. package/lib/langs/shallowEqual.js +8 -6
  97. package/lib/libs/ms.js +28 -26
  98. package/lib/libs/ms.test.js +301 -0
  99. package/lib/logger/const.js +15 -0
  100. package/lib/logger/index.js +1 -0
  101. package/lib/logger/types.js +1 -0
  102. package/lib/maths/clamp.js +81 -12
  103. package/lib/maths/clamp.test.js +186 -0
  104. package/lib/maths/createRandom.test.js +36 -0
  105. package/lib/maths/random.js +162 -13
  106. package/lib/modules/isModule.js +0 -2
  107. package/lib/modules/parseModuleId.js +14 -15
  108. package/lib/modules/parseModuleId.test.js +153 -0
  109. package/lib/objects/computeIfAbsent.js +8 -3
  110. package/lib/objects/get.js +26 -8
  111. package/lib/objects/get.test-d.js +23 -25
  112. package/lib/objects/merge/index.js +1 -3
  113. package/lib/objects/merge/isMergeableObject.js +5 -3
  114. package/lib/objects/merge/merge.js +82 -26
  115. package/lib/objects/merge/merge.test.js +1397 -0
  116. package/lib/objects/parseObjectPath.js +47 -15
  117. package/lib/objects/parseObjectPath.test.js +138 -0
  118. package/lib/objects/set.js +25 -19
  119. package/lib/objects/set.test.js +522 -0
  120. package/lib/schema/typebox/index.js +2 -3
  121. package/lib/schema/typebox/typebox.js +6 -6
  122. package/lib/scripts/getGenerateContext.js +386 -77
  123. package/lib/server/crypto/md5.js +0 -2
  124. package/lib/server/fetch/createFetchWithProxy.js +2 -4
  125. package/lib/server/fetch/createFetchWithProxyByNodeFetch.js +258 -31
  126. package/lib/server/fetch/createFetchWithProxyByUndici.js +307 -49
  127. package/lib/server/getPackageDir.js +2 -3
  128. package/lib/server/index.js +5 -7
  129. package/lib/server/jsdom.js +1 -3
  130. package/lib/server/node-fetch.js +2 -4
  131. package/lib/server/polyfill/polyfillBrowser.js +163 -9
  132. package/lib/server/polyfill/polyfillBrowser.test.js +164 -0
  133. package/lib/server/polyfill/polyfillCrypto.js +157 -9
  134. package/lib/server/polyfill/polyfillFetch.js +13 -13
  135. package/lib/server/polyfill/polyfillJsDom.js +264 -58
  136. package/lib/server/polyfill/polyfillWebSocket.js +11 -11
  137. package/lib/server/ws.js +1 -3
  138. package/lib/strings/bytes.test.js +327 -0
  139. package/lib/strings/camelCase.js +23 -14
  140. package/lib/strings/formatBytes.js +29 -20
  141. package/lib/strings/parseBytes.js +54 -0
  142. package/lib/strings/renderTemplate.js +17 -12
  143. package/lib/strings/renderTemplate.test.js +104 -0
  144. package/lib/typedoc.js +2 -4
  145. package/lib/types.d.js +0 -2
  146. package/lib/validations/asserts.js +0 -2
  147. package/lib/validations/isUUID.js +0 -2
  148. package/lib/validations/isUUID.test.js +87 -0
  149. package/lib/validations/parseTimestamp.js +12 -7
  150. package/lib/validations/parseTimestamp.test.js +6 -0
  151. package/lib/web/getGlobalThis.js +3 -4
  152. package/lib/web/getRandomValues.js +28 -20
  153. package/lib/web/randomUUID.js +7 -8
  154. package/lib/web/requestIdleCallback.js +13 -9
  155. package/lib/web/structuredClone.js +35 -28
  156. package/lib/web/structuredClone.test.js +81 -0
  157. package/package.json +9 -14
  158. package/src/arrays/MaybeArray.ts +22 -22
  159. package/src/arrays/arrayFromAsync.ts +3 -3
  160. package/src/asyncs/AsyncInterval.ts +8 -8
  161. package/src/asyncs/Promises.ts +51 -51
  162. package/src/asyncs/createAsyncIterator.ts +33 -33
  163. package/src/asyncs/createLazyPromise.test.ts +73 -73
  164. package/src/asyncs/createLazyPromise.ts +68 -73
  165. package/src/asyncs/firstOfAsyncIterator.ts +5 -5
  166. package/src/asyncs/generatorOfStream.ts +12 -12
  167. package/src/asyncs/isIterator.ts +1 -1
  168. package/src/asyncs/isThenable.ts +2 -2
  169. package/src/asyncs/nextOfAsyncIterator.ts +20 -20
  170. package/src/asyncs/promiseOfCallback.ts +13 -13
  171. package/src/asyncs/timeout.ts +23 -23
  172. package/src/browsers/copy.ts +48 -48
  173. package/src/browsers/download.ts +38 -36
  174. package/src/browsers/getFileFromDataTransfer.ts +35 -35
  175. package/src/browsers/loaders.ts +49 -49
  176. package/src/crypto/base.ts +3 -3
  177. package/src/crypto/getNodeCrypto.ts +2 -2
  178. package/src/crypto/hashing.test.ts +33 -47
  179. package/src/crypto/hashing.ts +67 -67
  180. package/src/crypto/md5.bench.ts +20 -24
  181. package/src/crypto/md5.test.ts +3 -3
  182. package/src/crypto/pem/pem.test.ts +26 -42
  183. package/src/crypto/pem/pem.ts +65 -65
  184. package/src/crypto/ulid.test.ts +31 -31
  185. package/src/crypto/ulid.ts +116 -116
  186. package/src/emitter/types.ts +6 -6
  187. package/src/errors/DetailError.ts +151 -0
  188. package/src/errors/Errors.mod.ts +104 -0
  189. package/src/errors/Errors.test.ts +15 -15
  190. package/src/errors/Errors.ts +1 -247
  191. package/src/fetch/HttpStatus.ts +77 -77
  192. package/src/fetch/createFetchWith.ts +25 -25
  193. package/src/fetch/createFetchWithLogging.ts +12 -15
  194. package/src/fetch/createFetchWithRetry.ts +79 -79
  195. package/src/fetch/dumpRequest.test.ts +176 -0
  196. package/src/fetch/dumpRequest.ts +149 -52
  197. package/src/fetch/dumpResponse.test.ts +160 -0
  198. package/src/fetch/dumpResponse.ts +48 -20
  199. package/src/fetch/http.types.ts +35 -35
  200. package/src/fetch/isTextContentType.ts +12 -0
  201. package/src/fetch/resolveRequest.ts +1 -0
  202. package/src/fetch/types.ts +2 -2
  203. package/src/i18n/createTranslate.test.ts +90 -113
  204. package/src/i18n/createTranslate.ts +55 -55
  205. package/src/index.ts +17 -19
  206. package/src/io/AbstractEncoding.ts +12 -12
  207. package/src/io/ArrayBuffer.test-d.ts +1 -1
  208. package/src/io/ArrayBuffers.base64.test.ts +52 -52
  209. package/src/io/ArrayBuffers.mod.ts +670 -0
  210. package/src/io/ArrayBuffers.test.ts +14 -14
  211. package/src/io/ArrayBuffers.ts +1 -446
  212. package/src/io/Buffer.test.ts +17 -17
  213. package/src/io/Buffer.ts +17 -17
  214. package/src/io/ByteBuffer.test.ts +37 -37
  215. package/src/io/ByteBuffer.ts +574 -566
  216. package/src/io/base64.ts +46 -44
  217. package/src/io/dump.ts +22 -22
  218. package/src/io/isBuffer.test.ts +2 -2
  219. package/src/io/isBuffer.ts +1 -1
  220. package/src/io/isTransferable.test.ts +4 -4
  221. package/src/io/isTransferable.ts +29 -29
  222. package/src/io/parseDataUri.test.ts +22 -27
  223. package/src/io/parseDataUri.ts +57 -57
  224. package/src/io/types.ts +13 -0
  225. package/src/langs/AsyncCloser.ts +34 -34
  226. package/src/langs/Closer.ts +28 -28
  227. package/src/langs/MaybeFunction.ts +5 -5
  228. package/src/langs/classOf.ts +1 -1
  229. package/src/langs/deepEqual.test.ts +1 -12
  230. package/src/langs/deepEqual.ts +82 -82
  231. package/src/langs/deepFreeze.ts +11 -11
  232. package/src/langs/getGlobalStates.ts +16 -16
  233. package/src/langs/getObjectId.ts +10 -13
  234. package/src/langs/ifPresent.ts +2 -2
  235. package/src/langs/isClass.ts +1 -1
  236. package/src/langs/isDefined.ts +1 -1
  237. package/src/langs/isEmptyObject.ts +1 -1
  238. package/src/langs/isFunction.ts +1 -1
  239. package/src/langs/isNil.ts +3 -0
  240. package/src/langs/isPlainObject.ts +4 -4
  241. package/src/langs/langs.test.ts +18 -18
  242. package/src/langs/memoize.ts +21 -21
  243. package/src/langs/mixin.test.ts +22 -26
  244. package/src/langs/mixin.ts +6 -9
  245. package/src/langs/parseBoolean.ts +30 -26
  246. package/src/langs/shallowClone.ts +11 -11
  247. package/src/langs/shallowEqual.ts +19 -19
  248. package/src/libs/ms.test.ts +274 -274
  249. package/src/libs/ms.ts +137 -137
  250. package/src/logger/const.ts +18 -0
  251. package/src/logger/index.ts +2 -0
  252. package/src/logger/types.ts +10 -0
  253. package/src/maths/clamp.test.ts +18 -18
  254. package/src/maths/clamp.ts +17 -17
  255. package/src/maths/createRandom.test.ts +12 -0
  256. package/src/maths/random.ts +50 -14
  257. package/src/modules/isModule.ts +4 -4
  258. package/src/modules/parseModuleId.test.ts +61 -68
  259. package/src/modules/parseModuleId.ts +29 -43
  260. package/src/objects/computeIfAbsent.ts +10 -10
  261. package/src/objects/get.test-d.ts +33 -51
  262. package/src/objects/get.ts +31 -31
  263. package/src/objects/merge/isMergeableObject.ts +5 -5
  264. package/src/objects/merge/merge.test.ts +658 -880
  265. package/src/objects/merge/merge.ts +84 -84
  266. package/src/objects/parseObjectPath.test.ts +13 -13
  267. package/src/objects/parseObjectPath.ts +25 -25
  268. package/src/objects/set.test.ts +271 -366
  269. package/src/objects/set.ts +36 -36
  270. package/src/schema/typebox/typebox.ts +20 -26
  271. package/src/scripts/getGenerateContext.ts +79 -79
  272. package/src/server/crypto/md5.ts +1 -1
  273. package/src/server/fetch/createFetchWithProxyByNodeFetch.ts +28 -31
  274. package/src/server/fetch/createFetchWithProxyByUndici.ts +63 -69
  275. package/src/server/getPackageDir.ts +7 -7
  276. package/src/server/polyfill/polyfillBrowser.test.ts +10 -10
  277. package/src/server/polyfill/polyfillBrowser.ts +3 -3
  278. package/src/server/polyfill/polyfillCrypto.ts +6 -6
  279. package/src/server/polyfill/polyfillFetch.ts +11 -21
  280. package/src/server/polyfill/polyfillJsDom.ts +59 -71
  281. package/src/server/polyfill/polyfillWebSocket.ts +14 -14
  282. package/src/strings/bytes.test.ts +69 -0
  283. package/src/strings/camelCase.ts +58 -63
  284. package/src/strings/formatBytes.ts +50 -29
  285. package/src/strings/parseBytes.ts +66 -0
  286. package/src/strings/renderTemplate.test.ts +10 -17
  287. package/src/strings/renderTemplate.ts +19 -22
  288. package/src/types.d.ts +9 -9
  289. package/src/validations/asserts.ts +8 -8
  290. package/src/validations/isUUID.test.ts +8 -8
  291. package/src/validations/isUUID.ts +1 -1
  292. package/src/validations/parseTimestamp.test.ts +2 -2
  293. package/src/validations/parseTimestamp.ts +21 -21
  294. package/src/web/getGlobalThis.ts +6 -6
  295. package/src/web/getRandomValues.ts +29 -29
  296. package/src/web/randomUUID.ts +5 -5
  297. package/src/web/requestIdleCallback.ts +7 -10
  298. package/src/web/structuredClone.test.ts +8 -8
  299. package/src/web/structuredClone.ts +62 -62
  300. package/tsconfig.json +35 -34
  301. package/lib/arrays/MaybeArray.js.map +0 -1
  302. package/lib/arrays/arrayFromAsync.js.map +0 -1
  303. package/lib/asyncs/AsyncInterval.js.map +0 -1
  304. package/lib/asyncs/MaybePromise.js.map +0 -1
  305. package/lib/asyncs/Promises.js.map +0 -1
  306. package/lib/asyncs/createAsyncIterator.js.map +0 -1
  307. package/lib/asyncs/createLazyPromise.js.map +0 -1
  308. package/lib/asyncs/firstOfAsyncIterator.js.map +0 -1
  309. package/lib/asyncs/generatorOfStream.js.map +0 -1
  310. package/lib/asyncs/isIterator.js.map +0 -1
  311. package/lib/asyncs/isPromise.js.map +0 -1
  312. package/lib/asyncs/isThenable.js.map +0 -1
  313. package/lib/asyncs/nextOfAsyncIterator.js.map +0 -1
  314. package/lib/asyncs/promiseOfCallback.js.map +0 -1
  315. package/lib/asyncs/timeout.js.map +0 -1
  316. package/lib/browsers/copy.js.map +0 -1
  317. package/lib/browsers/download.js.map +0 -1
  318. package/lib/browsers/getFileFromDataTransfer.js.map +0 -1
  319. package/lib/browsers/loaders.js.map +0 -1
  320. package/lib/cn/division/DivisionCode.js +0 -215
  321. package/lib/cn/division/DivisionCode.js.map +0 -1
  322. package/lib/cn/division/binarySearch.js +0 -27
  323. package/lib/cn/division/binarySearch.js.map +0 -1
  324. package/lib/cn/formatChineseAmount.js +0 -77
  325. package/lib/cn/formatChineseAmount.js.map +0 -1
  326. package/lib/cn/id/Mod11.js +0 -43
  327. package/lib/cn/id/Mod11.js.map +0 -1
  328. package/lib/cn/id/ResidentIdNumber.js +0 -98
  329. package/lib/cn/id/ResidentIdNumber.js.map +0 -1
  330. package/lib/cn/id/types.js +0 -8
  331. package/lib/cn/id/types.js.map +0 -1
  332. package/lib/cn/index.js +0 -14
  333. package/lib/cn/index.js.map +0 -1
  334. package/lib/cn/parseChineseNumber.js +0 -94
  335. package/lib/cn/parseChineseNumber.js.map +0 -1
  336. package/lib/cn/pinyin/cartesianProduct.js +0 -22
  337. package/lib/cn/pinyin/cartesianProduct.js.map +0 -1
  338. package/lib/cn/pinyin/data.json +0 -413
  339. package/lib/cn/pinyin/loader.js +0 -15
  340. package/lib/cn/pinyin/loader.js.map +0 -1
  341. package/lib/cn/pinyin/preload.js +0 -4
  342. package/lib/cn/pinyin/preload.js.map +0 -1
  343. package/lib/cn/pinyin/toPinyinPure.js +0 -32
  344. package/lib/cn/pinyin/toPinyinPure.js.map +0 -1
  345. package/lib/cn/pinyin/transform.js +0 -14
  346. package/lib/cn/pinyin/transform.js.map +0 -1
  347. package/lib/cn/types.js +0 -3
  348. package/lib/cn/types.js.map +0 -1
  349. package/lib/cn/uscc/Mod31.js +0 -49
  350. package/lib/cn/uscc/Mod31.js.map +0 -1
  351. package/lib/cn/uscc/USCC.js +0 -94
  352. package/lib/cn/uscc/USCC.js.map +0 -1
  353. package/lib/cn/uscc/isUSCC.js +0 -8
  354. package/lib/cn/uscc/isUSCC.js.map +0 -1
  355. package/lib/crypto/base.js.map +0 -1
  356. package/lib/crypto/getNodeCrypto.js.map +0 -1
  357. package/lib/crypto/hashing.js.map +0 -1
  358. package/lib/crypto/md5.bench.js.map +0 -1
  359. package/lib/crypto/md5.d.js.map +0 -1
  360. package/lib/crypto/md5.js.map +0 -1
  361. package/lib/crypto/pem/pem.js.map +0 -1
  362. package/lib/crypto/randomUUIDv7.js.map +0 -1
  363. package/lib/crypto/ulid.js.map +0 -1
  364. package/lib/emitter/types.js.map +0 -1
  365. package/lib/errors/Errors.js.map +0 -1
  366. package/lib/fetch/HttpStatus.js.map +0 -1
  367. package/lib/fetch/createFetchWith.js.map +0 -1
  368. package/lib/fetch/createFetchWithLogging.js.map +0 -1
  369. package/lib/fetch/createFetchWithRetry.js.map +0 -1
  370. package/lib/fetch/dumpRequest.js.map +0 -1
  371. package/lib/fetch/dumpResponse.js.map +0 -1
  372. package/lib/fetch/http.types.js.map +0 -1
  373. package/lib/fetch/index.js.map +0 -1
  374. package/lib/fetch/types.js.map +0 -1
  375. package/lib/i18n/createTranslate.js.map +0 -1
  376. package/lib/index.js.map +0 -1
  377. package/lib/io/AbstractEncoding.js.map +0 -1
  378. package/lib/io/ArrayBuffer.test-d.js.map +0 -1
  379. package/lib/io/ArrayBuffers.js.map +0 -1
  380. package/lib/io/Buffer.js.map +0 -1
  381. package/lib/io/ByteBuffer.js.map +0 -1
  382. package/lib/io/base64.js.map +0 -1
  383. package/lib/io/dump.js.map +0 -1
  384. package/lib/io/isBuffer.js.map +0 -1
  385. package/lib/io/isTransferable.js.map +0 -1
  386. package/lib/io/parseDataUri.js.map +0 -1
  387. package/lib/langs/AsyncCloser.js.map +0 -1
  388. package/lib/langs/Closer.js.map +0 -1
  389. package/lib/langs/MaybeFunction.js.map +0 -1
  390. package/lib/langs/classOf.js.map +0 -1
  391. package/lib/langs/deepEqual.js.map +0 -1
  392. package/lib/langs/deepFreeze.js.map +0 -1
  393. package/lib/langs/getGlobalStates.js.map +0 -1
  394. package/lib/langs/getObjectId.js.map +0 -1
  395. package/lib/langs/ifPresent.js.map +0 -1
  396. package/lib/langs/isClass.js.map +0 -1
  397. package/lib/langs/isDefined.js.map +0 -1
  398. package/lib/langs/isEmptyObject.js.map +0 -1
  399. package/lib/langs/isFunction.js.map +0 -1
  400. package/lib/langs/isNullish.js +0 -5
  401. package/lib/langs/isNullish.js.map +0 -1
  402. package/lib/langs/isPlainObject.js.map +0 -1
  403. package/lib/langs/memoize.js.map +0 -1
  404. package/lib/langs/mixin.js.map +0 -1
  405. package/lib/langs/parseBoolean.js.map +0 -1
  406. package/lib/langs/shallowClone.js.map +0 -1
  407. package/lib/langs/shallowEqual.js.map +0 -1
  408. package/lib/libs/ms.js.map +0 -1
  409. package/lib/logging/Logger.js +0 -5
  410. package/lib/logging/Logger.js.map +0 -1
  411. package/lib/logging/createChildLogger.js +0 -16
  412. package/lib/logging/createChildLogger.js.map +0 -1
  413. package/lib/logging/createLogger.js +0 -63
  414. package/lib/logging/createLogger.js.map +0 -1
  415. package/lib/logging/createNoopLogger.js +0 -13
  416. package/lib/logging/createNoopLogger.js.map +0 -1
  417. package/lib/logging/slog.js +0 -143
  418. package/lib/logging/slog.js.map +0 -1
  419. package/lib/maths/clamp.js.map +0 -1
  420. package/lib/maths/random.js.map +0 -1
  421. package/lib/mitt/index.js +0 -77
  422. package/lib/mitt/index.js.map +0 -1
  423. package/lib/modules/isModule.js.map +0 -1
  424. package/lib/modules/parseModuleId.js.map +0 -1
  425. package/lib/objects/computeIfAbsent.js.map +0 -1
  426. package/lib/objects/get.js.map +0 -1
  427. package/lib/objects/get.test-d.js.map +0 -1
  428. package/lib/objects/merge/index.js.map +0 -1
  429. package/lib/objects/merge/isMergeableObject.js.map +0 -1
  430. package/lib/objects/merge/merge.js.map +0 -1
  431. package/lib/objects/parseObjectPath.js.map +0 -1
  432. package/lib/objects/set.js.map +0 -1
  433. package/lib/schema/typebox/index.js.map +0 -1
  434. package/lib/schema/typebox/typebox.js.map +0 -1
  435. package/lib/scripts/getGenerateContext.js.map +0 -1
  436. package/lib/server/crypto/md5.js.map +0 -1
  437. package/lib/server/fetch/createFetchWithProxy.js.map +0 -1
  438. package/lib/server/fetch/createFetchWithProxyByNodeFetch.js.map +0 -1
  439. package/lib/server/fetch/createFetchWithProxyByUndici.js.map +0 -1
  440. package/lib/server/getPackageDir.js.map +0 -1
  441. package/lib/server/index.js.map +0 -1
  442. package/lib/server/jsdom.js.map +0 -1
  443. package/lib/server/node-fetch.js.map +0 -1
  444. package/lib/server/polyfill/polyfillBrowser.js.map +0 -1
  445. package/lib/server/polyfill/polyfillCrypto.js.map +0 -1
  446. package/lib/server/polyfill/polyfillFetch.js.map +0 -1
  447. package/lib/server/polyfill/polyfillJsDom.js.map +0 -1
  448. package/lib/server/polyfill/polyfillWebSocket.js.map +0 -1
  449. package/lib/server/ws.js.map +0 -1
  450. package/lib/strings/camelCase.js.map +0 -1
  451. package/lib/strings/formatBytes.js.map +0 -1
  452. package/lib/strings/renderTemplate.js.map +0 -1
  453. package/lib/typedoc.js.map +0 -1
  454. package/lib/types.d.js.map +0 -1
  455. package/lib/validations/asserts.js.map +0 -1
  456. package/lib/validations/isUUID.js.map +0 -1
  457. package/lib/validations/parseTimestamp.js.map +0 -1
  458. package/lib/web/getGlobalThis.js.map +0 -1
  459. package/lib/web/getRandomValues.js.map +0 -1
  460. package/lib/web/randomUUID.js.map +0 -1
  461. package/lib/web/requestIdleCallback.js.map +0 -1
  462. package/lib/web/structuredClone.js.map +0 -1
  463. package/src/cn/README.md +0 -3
  464. package/src/cn/division/DivisionCode.ts +0 -173
  465. package/src/cn/division/binarySearch.test.ts +0 -64
  466. package/src/cn/division/binarySearch.ts +0 -25
  467. package/src/cn/division/division.test.ts +0 -22
  468. package/src/cn/formatChineseAmount.ts +0 -61
  469. package/src/cn/id/Mod11.ts +0 -26
  470. package/src/cn/id/ResidentIdNumber.ts +0 -126
  471. package/src/cn/id/id.test.ts +0 -20
  472. package/src/cn/id/types.ts +0 -26
  473. package/src/cn/index.ts +0 -17
  474. package/src/cn/parseChineseNumber.test.ts +0 -159
  475. package/src/cn/parseChineseNumber.ts +0 -97
  476. package/src/cn/pinyin/cartesianProduct.test.ts +0 -64
  477. package/src/cn/pinyin/cartesianProduct.ts +0 -24
  478. package/src/cn/pinyin/data.json +0 -413
  479. package/src/cn/pinyin/loader.ts +0 -12
  480. package/src/cn/pinyin/preload.ts +0 -3
  481. package/src/cn/pinyin/toPinyin.test.ts +0 -12
  482. package/src/cn/pinyin/toPinyinPure.ts +0 -43
  483. package/src/cn/pinyin/transform.ts +0 -12
  484. package/src/cn/scripts/gen.test.ts +0 -131
  485. package/src/cn/types.ts +0 -11
  486. package/src/cn/uscc/Mod31.ts +0 -38
  487. package/src/cn/uscc/USCC.ts +0 -94
  488. package/src/cn/uscc/isUSCC.ts +0 -8
  489. package/src/cn/uscc/uscc.test.ts +0 -16
  490. package/src/langs/isNullish.ts +0 -3
  491. package/src/logging/Logger.ts +0 -25
  492. package/src/logging/createChildLogger.ts +0 -16
  493. package/src/logging/createLogger.ts +0 -50
  494. package/src/logging/createNoopLogger.ts +0 -13
  495. package/src/logging/logger.test.ts +0 -36
  496. package/src/logging/slog.test.ts +0 -8
  497. package/src/logging/slog.ts +0 -221
  498. package/src/mitt/README.md +0 -1
  499. package/src/mitt/index.ts +0 -114
@@ -0,0 +1,1397 @@
1
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
2
+ try {
3
+ var info = gen[key](arg);
4
+ var value = info.value;
5
+ }
6
+ catch (error) {
7
+ reject(error);
8
+ return;
9
+ }
10
+ if (info.done) {
11
+ resolve(value);
12
+ }
13
+ else {
14
+ Promise.resolve(value).then(_next, _throw);
15
+ }
16
+ }
17
+ function _async_to_generator(fn) {
18
+ return function () {
19
+ var self = this, args = arguments;
20
+ return new Promise(function (resolve, reject) {
21
+ var gen = fn.apply(self, args);
22
+ function _next(value) {
23
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
24
+ }
25
+ function _throw(err) {
26
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
27
+ }
28
+ _next(undefined);
29
+ });
30
+ };
31
+ }
32
+ function _class_call_check(instance, Constructor) {
33
+ if (!(instance instanceof Constructor)) {
34
+ throw new TypeError("Cannot call a class as a function");
35
+ }
36
+ }
37
+ function _define_property(obj, key, value) {
38
+ if (key in obj) {
39
+ Object.defineProperty(obj, key, {
40
+ value: value,
41
+ enumerable: true,
42
+ configurable: true,
43
+ writable: true
44
+ });
45
+ }
46
+ else {
47
+ obj[key] = value;
48
+ }
49
+ return obj;
50
+ }
51
+ function _instanceof(left, right) {
52
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
53
+ return !!right[Symbol.hasInstance](left);
54
+ }
55
+ else {
56
+ return left instanceof right;
57
+ }
58
+ }
59
+ function _type_of(obj) {
60
+ "@swc/helpers - typeof";
61
+ return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
62
+ }
63
+ function _ts_generator(thisArg, body) {
64
+ var f, y, t, _ = {
65
+ label: 0,
66
+ sent: function () {
67
+ if (t[0] & 1)
68
+ throw t[1];
69
+ return t[1];
70
+ },
71
+ trys: [],
72
+ ops: []
73
+ }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
74
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function () {
75
+ return this;
76
+ }), g;
77
+ function verb(n) {
78
+ return function (v) {
79
+ return step([
80
+ n,
81
+ v
82
+ ]);
83
+ };
84
+ }
85
+ function step(op) {
86
+ if (f)
87
+ throw new TypeError("Generator is already executing.");
88
+ while (g && (g = 0, op[0] && (_ = 0)), _)
89
+ try {
90
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
91
+ return t;
92
+ if (y = 0, t)
93
+ op = [
94
+ op[0] & 2,
95
+ t.value
96
+ ];
97
+ switch (op[0]) {
98
+ case 0:
99
+ case 1:
100
+ t = op;
101
+ break;
102
+ case 4:
103
+ _.label++;
104
+ return {
105
+ value: op[1],
106
+ done: false
107
+ };
108
+ case 5:
109
+ _.label++;
110
+ y = op[1];
111
+ op = [
112
+ 0
113
+ ];
114
+ continue;
115
+ case 7:
116
+ op = _.ops.pop();
117
+ _.trys.pop();
118
+ continue;
119
+ default:
120
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
121
+ _ = 0;
122
+ continue;
123
+ }
124
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
125
+ _.label = op[1];
126
+ break;
127
+ }
128
+ if (op[0] === 6 && _.label < t[1]) {
129
+ _.label = t[1];
130
+ t = op;
131
+ break;
132
+ }
133
+ if (t && _.label < t[2]) {
134
+ _.label = t[2];
135
+ _.ops.push(op);
136
+ break;
137
+ }
138
+ if (t[2])
139
+ _.ops.pop();
140
+ _.trys.pop();
141
+ continue;
142
+ }
143
+ op = body.call(thisArg, _);
144
+ }
145
+ catch (e) {
146
+ op = [
147
+ 6,
148
+ e
149
+ ];
150
+ y = 0;
151
+ }
152
+ finally {
153
+ f = t = 0;
154
+ }
155
+ if (op[0] & 5)
156
+ throw op[1];
157
+ return {
158
+ value: op[0] ? op[1] : void 0,
159
+ done: true
160
+ };
161
+ }
162
+ }
163
+ import { assert, describe, test } from "vitest";
164
+ import { isPlainObject } from "../../langs/isPlainObject.js";
165
+ import { merge } from "./merge.js";
166
+ describe("custom-array-merge", function () {
167
+ test("custom merge array", function () {
168
+ var mergeFunctionCalled = false;
169
+ function overwriteMerge(_target, source, options) {
170
+ mergeFunctionCalled = true;
171
+ assert.equal(options.arrayMerge, overwriteMerge);
172
+ return source;
173
+ }
174
+ var destination = {
175
+ someArray: [
176
+ 1,
177
+ 2
178
+ ],
179
+ someObject: {
180
+ what: "yes"
181
+ }
182
+ };
183
+ var source = {
184
+ someArray: [
185
+ 1,
186
+ 2,
187
+ 3
188
+ ]
189
+ };
190
+ var actual = merge(destination, source, {
191
+ arrayMerge: overwriteMerge
192
+ });
193
+ var expected = {
194
+ someArray: [
195
+ 1,
196
+ 2,
197
+ 3
198
+ ],
199
+ someObject: {
200
+ what: "yes"
201
+ }
202
+ };
203
+ assert.isTrue(mergeFunctionCalled);
204
+ assert.deepEqual(actual, expected);
205
+ });
206
+ test("merge top-level arrays", function () {
207
+ function overwriteMerge(_a, b) {
208
+ return b;
209
+ }
210
+ var actual = merge([
211
+ 1,
212
+ 2
213
+ ], [
214
+ 1,
215
+ 2
216
+ ], {
217
+ arrayMerge: overwriteMerge
218
+ });
219
+ var expected = [
220
+ 1,
221
+ 2
222
+ ];
223
+ assert.deepEqual(actual, expected);
224
+ });
225
+ test("cloner function is available for merge functions to use", function () {
226
+ var customMergeWasCalled = false;
227
+ function cloneMerge(target, source, options) {
228
+ customMergeWasCalled = true;
229
+ assert.isTrue(!!options.cloneUnlessOtherwiseSpecified, "cloner function is available");
230
+ return target.concat(source).map(function (element) {
231
+ return options.cloneUnlessOtherwiseSpecified(element, options);
232
+ });
233
+ }
234
+ var src = {
235
+ key1: [
236
+ "one",
237
+ "three"
238
+ ],
239
+ key2: [
240
+ "four"
241
+ ]
242
+ };
243
+ var target = {
244
+ key1: [
245
+ "one",
246
+ "two"
247
+ ]
248
+ };
249
+ var expected = {
250
+ key1: [
251
+ "one",
252
+ "two",
253
+ "one",
254
+ "three"
255
+ ],
256
+ key2: [
257
+ "four"
258
+ ]
259
+ };
260
+ assert.deepEqual(merge(target, src, {
261
+ arrayMerge: cloneMerge
262
+ }), expected);
263
+ assert.isTrue(customMergeWasCalled);
264
+ assert.isTrue(Array.isArray(merge(target, src).key1));
265
+ assert.isTrue(Array.isArray(merge(target, src).key2));
266
+ });
267
+ });
268
+ describe("custom-is-mergeable-object", function () {
269
+ test("isMergeableObject function copying object over object", function () {
270
+ var isMergeableObject = function isMergeableObject(object) {
271
+ return object && (typeof object === "undefined" ? "undefined" : _type_of(object)) === "object" && object.isMergeable !== false;
272
+ };
273
+ var src = {
274
+ key: {
275
+ isMergeable: false
276
+ },
277
+ baz: "yes"
278
+ };
279
+ var target = {
280
+ key: {
281
+ foo: "wat"
282
+ },
283
+ baz: "whatever"
284
+ };
285
+ var res = merge(target, src, {
286
+ isMergeableObject: isMergeableObject
287
+ });
288
+ assert.deepEqual(res, {
289
+ key: {
290
+ isMergeable: false
291
+ },
292
+ baz: "yes"
293
+ });
294
+ assert.equal(res.key, src.key, "Object has the same identity and was not cloned");
295
+ });
296
+ test("isMergeableObject function copying object over nothing", function () {
297
+ var isMergeableObject = function isMergeableObject(object) {
298
+ return object && (typeof object === "undefined" ? "undefined" : _type_of(object)) === "object" && object.isMergeable !== false;
299
+ };
300
+ var src = {
301
+ key: {
302
+ isMergeable: false,
303
+ foo: "bar"
304
+ },
305
+ baz: "yes"
306
+ };
307
+ var target = {
308
+ baz: "whatever"
309
+ };
310
+ var res = merge(target, src, {
311
+ isMergeableObject: isMergeableObject
312
+ });
313
+ assert.deepEqual(res, {
314
+ key: {
315
+ isMergeable: false,
316
+ foo: "bar"
317
+ },
318
+ baz: "yes"
319
+ });
320
+ assert.equal(res.key, src.key, "Object has the same identity and was not cloned");
321
+ });
322
+ test("example from readme", function () {
323
+ var SuperSpecial = function SuperSpecial() {
324
+ "use strict";
325
+ _class_call_check(this, SuperSpecial);
326
+ _define_property(this, "special", "oh yeah man totally");
327
+ };
328
+ var instantiatedSpecialObject = new SuperSpecial();
329
+ var target = {
330
+ someProperty: {
331
+ cool: "oh for sure"
332
+ }
333
+ };
334
+ var source = {
335
+ someProperty: instantiatedSpecialObject
336
+ };
337
+ var defaultOutput = merge(target, source);
338
+ assert.equal(defaultOutput.someProperty.cool, "oh for sure");
339
+ assert.equal(defaultOutput.someProperty.special, "oh yeah man totally");
340
+ assert.equal(_instanceof(defaultOutput.someProperty, SuperSpecial), false);
341
+ var customMergeOutput = merge(target, source, {
342
+ isMergeableObject: isPlainObject
343
+ });
344
+ assert.equal(customMergeOutput.someProperty.cool, undefined);
345
+ assert.equal(customMergeOutput.someProperty.special, "oh yeah man totally");
346
+ assert.equal(_instanceof(customMergeOutput.someProperty, SuperSpecial), true);
347
+ });
348
+ });
349
+ describe("merge-all", function () {
350
+ test("throw error if first argument is not an array", function () {
351
+ assert.throws(merge.all.bind(null, {
352
+ example: true
353
+ }, {
354
+ another: "2"
355
+ }), Error);
356
+ });
357
+ test("return an empty object if first argument is an array with no elements", function () {
358
+ assert.deepEqual(merge.all([]), {});
359
+ });
360
+ test("Work just fine if first argument is an array with least than two elements", function () {
361
+ var actual = merge.all([
362
+ {
363
+ example: true
364
+ }
365
+ ]);
366
+ var expected = {
367
+ example: true
368
+ };
369
+ assert.deepEqual(actual, expected);
370
+ });
371
+ test("execute correctly if options object were not passed", function () {
372
+ var arrayToMerge = [
373
+ {
374
+ example: true
375
+ },
376
+ {
377
+ another: "123"
378
+ }
379
+ ];
380
+ assert.doesNotThrow(merge.all.bind(null, arrayToMerge));
381
+ });
382
+ test("execute correctly if options object were passed", function () {
383
+ var arrayToMerge = [
384
+ {
385
+ example: true
386
+ },
387
+ {
388
+ another: "123"
389
+ }
390
+ ];
391
+ assert.doesNotThrow(merge.all.bind(null, arrayToMerge, {
392
+ clone: true
393
+ }));
394
+ });
395
+ test("invoke merge on every item in array should result with all props", function () {
396
+ var firstObject = {
397
+ first: true
398
+ };
399
+ var secondObject = {
400
+ second: false
401
+ };
402
+ var thirdObject = {
403
+ third: 123
404
+ };
405
+ var fourthObject = {
406
+ fourth: "some string"
407
+ };
408
+ var mergedObject = merge.all([
409
+ firstObject,
410
+ secondObject,
411
+ thirdObject,
412
+ fourthObject
413
+ ]);
414
+ assert.isTrue(mergedObject.first === true);
415
+ assert.isTrue(mergedObject.second === false);
416
+ assert.isTrue(mergedObject.third === 123);
417
+ assert.isTrue(mergedObject.fourth === "some string");
418
+ });
419
+ test("invoke merge on every item in array with clone should clone all elements", function () {
420
+ var firstObject = {
421
+ a: {
422
+ d: 123
423
+ }
424
+ };
425
+ var secondObject = {
426
+ b: {
427
+ e: true
428
+ }
429
+ };
430
+ var thirdObject = {
431
+ c: {
432
+ f: "string"
433
+ }
434
+ };
435
+ var mergedWithClone = merge.all([
436
+ firstObject,
437
+ secondObject,
438
+ thirdObject
439
+ ], {
440
+ clone: true
441
+ });
442
+ assert.notEqual(mergedWithClone.a, firstObject.a);
443
+ assert.notEqual(mergedWithClone.b, secondObject.b);
444
+ assert.notEqual(mergedWithClone.c, thirdObject.c);
445
+ });
446
+ test("invoke merge on every item in array clone=false should not clone all elements", function () {
447
+ var firstObject = {
448
+ a: {
449
+ d: 123
450
+ }
451
+ };
452
+ var secondObject = {
453
+ b: {
454
+ e: true
455
+ }
456
+ };
457
+ var thirdObject = {
458
+ c: {
459
+ f: "string"
460
+ }
461
+ };
462
+ var mergedWithoutClone = merge.all([
463
+ firstObject,
464
+ secondObject,
465
+ thirdObject
466
+ ], {
467
+ clone: false
468
+ });
469
+ assert.equal(mergedWithoutClone.a, firstObject.a);
470
+ assert.equal(mergedWithoutClone.b, secondObject.b);
471
+ assert.equal(mergedWithoutClone.c, thirdObject.c);
472
+ });
473
+ test("invoke merge on every item in array without clone should clone all elements", function () {
474
+ var firstObject = {
475
+ a: {
476
+ d: 123
477
+ }
478
+ };
479
+ var secondObject = {
480
+ b: {
481
+ e: true
482
+ }
483
+ };
484
+ var thirdObject = {
485
+ c: {
486
+ f: "string"
487
+ }
488
+ };
489
+ var mergedWithoutClone = merge.all([
490
+ firstObject,
491
+ secondObject,
492
+ thirdObject
493
+ ]);
494
+ assert.notEqual(mergedWithoutClone.a, firstObject.a);
495
+ assert.notEqual(mergedWithoutClone.b, secondObject.b);
496
+ assert.notEqual(mergedWithoutClone.c, thirdObject.c);
497
+ });
498
+ });
499
+ describe("merge", function () {
500
+ test("add keys in target that do not exist at the root", function () {
501
+ var src = {
502
+ key1: "value1",
503
+ key2: "value2"
504
+ };
505
+ var target = {};
506
+ var res = merge(target, src);
507
+ assert.deepEqual(target, {}, "merge should be immutable");
508
+ assert.deepEqual(res, src);
509
+ });
510
+ test("merge existing simple keys in target at the roots", function () {
511
+ var src = {
512
+ key1: "changed",
513
+ key2: "value2"
514
+ };
515
+ var target = {
516
+ key1: "value1",
517
+ key3: "value3"
518
+ };
519
+ var expected = {
520
+ key1: "changed",
521
+ key2: "value2",
522
+ key3: "value3"
523
+ };
524
+ assert.deepEqual(target, {
525
+ key1: "value1",
526
+ key3: "value3"
527
+ });
528
+ assert.deepEqual(merge(target, src), expected);
529
+ });
530
+ test("merge nested objects into target", function () {
531
+ var src = {
532
+ key1: {
533
+ subkey1: "changed",
534
+ subkey3: "added"
535
+ }
536
+ };
537
+ var target = {
538
+ key1: {
539
+ subkey1: "value1",
540
+ subkey2: "value2"
541
+ }
542
+ };
543
+ var expected = {
544
+ key1: {
545
+ subkey1: "changed",
546
+ subkey2: "value2",
547
+ subkey3: "added"
548
+ }
549
+ };
550
+ assert.deepEqual(target, {
551
+ key1: {
552
+ subkey1: "value1",
553
+ subkey2: "value2"
554
+ }
555
+ });
556
+ assert.deepEqual(merge(target, src), expected);
557
+ });
558
+ test("replace simple key with nested object in target", function () {
559
+ var src = {
560
+ key1: {
561
+ subkey1: "subvalue1",
562
+ subkey2: "subvalue2"
563
+ }
564
+ };
565
+ var target = {
566
+ key1: "value1",
567
+ key2: "value2"
568
+ };
569
+ var expected = {
570
+ key1: {
571
+ subkey1: "subvalue1",
572
+ subkey2: "subvalue2"
573
+ },
574
+ key2: "value2"
575
+ };
576
+ assert.deepEqual(target, {
577
+ key1: "value1",
578
+ key2: "value2"
579
+ });
580
+ assert.deepEqual(merge(target, src), expected);
581
+ });
582
+ test("should add nested object in target", function () {
583
+ var src = {
584
+ b: {
585
+ c: {}
586
+ }
587
+ };
588
+ var target = {
589
+ a: {}
590
+ };
591
+ var expected = {
592
+ a: {},
593
+ b: {
594
+ c: {}
595
+ }
596
+ };
597
+ assert.deepEqual(merge(target, src), expected);
598
+ });
599
+ test("should clone source and target", function () {
600
+ var src = {
601
+ b: {
602
+ c: "foo"
603
+ }
604
+ };
605
+ var target = {
606
+ a: {
607
+ d: "bar"
608
+ }
609
+ };
610
+ var expected = {
611
+ a: {
612
+ d: "bar"
613
+ },
614
+ b: {
615
+ c: "foo"
616
+ }
617
+ };
618
+ var merged = merge(target, src, {
619
+ clone: true
620
+ });
621
+ assert.deepEqual(merged, expected);
622
+ assert.notEqual(merged.a, target.a);
623
+ assert.notEqual(merged.b, src.b);
624
+ });
625
+ test("should clone source and target", function () {
626
+ var src = {
627
+ b: {
628
+ c: "foo"
629
+ }
630
+ };
631
+ var target = {
632
+ a: {
633
+ d: "bar"
634
+ }
635
+ };
636
+ var merged = merge(target, src);
637
+ assert.notEqual(merged.a, target.a);
638
+ assert.notEqual(merged.b, src.b);
639
+ });
640
+ test("should replace object with simple key in target", function () {
641
+ var src = {
642
+ key1: "value1"
643
+ };
644
+ var target = {
645
+ key1: {
646
+ subkey1: "subvalue1",
647
+ subkey2: "subvalue2"
648
+ },
649
+ key2: "value2"
650
+ };
651
+ var expected = {
652
+ key1: "value1",
653
+ key2: "value2"
654
+ };
655
+ assert.deepEqual(target, {
656
+ key1: {
657
+ subkey1: "subvalue1",
658
+ subkey2: "subvalue2"
659
+ },
660
+ key2: "value2"
661
+ });
662
+ assert.deepEqual(merge(target, src), expected);
663
+ });
664
+ test("should replace objects with arrays", function () {
665
+ var target = {
666
+ key1: {
667
+ subkey: "one"
668
+ }
669
+ };
670
+ var src = {
671
+ key1: [
672
+ "subkey"
673
+ ]
674
+ };
675
+ var expected = {
676
+ key1: [
677
+ "subkey"
678
+ ]
679
+ };
680
+ assert.deepEqual(merge(target, src), expected);
681
+ });
682
+ test("should replace arrays with objects", function () {
683
+ var target = {
684
+ key1: [
685
+ "subkey"
686
+ ]
687
+ };
688
+ var src = {
689
+ key1: {
690
+ subkey: "one"
691
+ }
692
+ };
693
+ var expected = {
694
+ key1: {
695
+ subkey: "one"
696
+ }
697
+ };
698
+ assert.deepEqual(merge(target, src), expected);
699
+ });
700
+ test("should replace dates with arrays", function () {
701
+ var target = {
702
+ key1: new Date()
703
+ };
704
+ var src = {
705
+ key1: [
706
+ "subkey"
707
+ ]
708
+ };
709
+ var expected = {
710
+ key1: [
711
+ "subkey"
712
+ ]
713
+ };
714
+ assert.deepEqual(merge(target, src), expected);
715
+ });
716
+ test("should replace null with arrays", function () {
717
+ var target = {
718
+ key1: null
719
+ };
720
+ var src = {
721
+ key1: [
722
+ "subkey"
723
+ ]
724
+ };
725
+ var expected = {
726
+ key1: [
727
+ "subkey"
728
+ ]
729
+ };
730
+ assert.deepEqual(merge(target, src), expected);
731
+ });
732
+ test("should work on simple array", function () {
733
+ var src = [
734
+ "one",
735
+ "three"
736
+ ];
737
+ var target = [
738
+ "one",
739
+ "two"
740
+ ];
741
+ var expected = [
742
+ "one",
743
+ "two",
744
+ "one",
745
+ "three"
746
+ ];
747
+ assert.deepEqual(merge(target, src), expected);
748
+ assert.isTrue(Array.isArray(merge(target, src)));
749
+ });
750
+ test("should work on another simple array", function () {
751
+ var target = [
752
+ "a1",
753
+ "a2",
754
+ "c1",
755
+ "f1",
756
+ "p1"
757
+ ];
758
+ var src = [
759
+ "t1",
760
+ "s1",
761
+ "c2",
762
+ "r1",
763
+ "p2",
764
+ "p3"
765
+ ];
766
+ var expected = [
767
+ "a1",
768
+ "a2",
769
+ "c1",
770
+ "f1",
771
+ "p1",
772
+ "t1",
773
+ "s1",
774
+ "c2",
775
+ "r1",
776
+ "p2",
777
+ "p3"
778
+ ];
779
+ assert.deepEqual(target, [
780
+ "a1",
781
+ "a2",
782
+ "c1",
783
+ "f1",
784
+ "p1"
785
+ ]);
786
+ assert.deepEqual(merge(target, src), expected);
787
+ assert.isTrue(Array.isArray(merge(target, src)));
788
+ });
789
+ test("should work on array properties", function () {
790
+ var src = {
791
+ key1: [
792
+ "one",
793
+ "three"
794
+ ],
795
+ key2: [
796
+ "four"
797
+ ]
798
+ };
799
+ var target = {
800
+ key1: [
801
+ "one",
802
+ "two"
803
+ ]
804
+ };
805
+ var expected = {
806
+ key1: [
807
+ "one",
808
+ "two",
809
+ "one",
810
+ "three"
811
+ ],
812
+ key2: [
813
+ "four"
814
+ ]
815
+ };
816
+ assert.deepEqual(merge(target, src), expected);
817
+ assert.isTrue(Array.isArray(merge(target, src).key1));
818
+ assert.isTrue(Array.isArray(merge(target, src).key2));
819
+ });
820
+ test("should work on array properties with clone option", function () {
821
+ var src = {
822
+ key1: [
823
+ "one",
824
+ "three"
825
+ ],
826
+ key2: [
827
+ "four"
828
+ ]
829
+ };
830
+ var target = {
831
+ key1: [
832
+ "one",
833
+ "two"
834
+ ]
835
+ };
836
+ assert.deepEqual(target, {
837
+ key1: [
838
+ "one",
839
+ "two"
840
+ ]
841
+ });
842
+ var merged = merge(target, src, {
843
+ clone: true
844
+ });
845
+ assert.notEqual(merged.key1, src.key1);
846
+ assert.notEqual(merged.key1, target.key1);
847
+ assert.notEqual(merged.key2, src.key2);
848
+ });
849
+ test("should work on array of objects", function () {
850
+ var src = [
851
+ {
852
+ key1: [
853
+ "one",
854
+ "three"
855
+ ],
856
+ key2: [
857
+ "one"
858
+ ]
859
+ },
860
+ {
861
+ key3: [
862
+ "five"
863
+ ]
864
+ }
865
+ ];
866
+ var target = [
867
+ {
868
+ key1: [
869
+ "one",
870
+ "two"
871
+ ]
872
+ },
873
+ {
874
+ key3: [
875
+ "four"
876
+ ]
877
+ }
878
+ ];
879
+ var expected = [
880
+ {
881
+ key1: [
882
+ "one",
883
+ "two"
884
+ ]
885
+ },
886
+ {
887
+ key3: [
888
+ "four"
889
+ ]
890
+ },
891
+ {
892
+ key1: [
893
+ "one",
894
+ "three"
895
+ ],
896
+ key2: [
897
+ "one"
898
+ ]
899
+ },
900
+ {
901
+ key3: [
902
+ "five"
903
+ ]
904
+ }
905
+ ];
906
+ assert.deepEqual(merge(target, src), expected);
907
+ assert.isTrue(Array.isArray(merge(target, src)), "result should be an array");
908
+ assert.isTrue(Array.isArray(merge(target, src)[0].key1), "subkey should be an array too");
909
+ });
910
+ test("should work on array of objects with clone option", function () {
911
+ var src = [
912
+ {
913
+ key1: [
914
+ "one",
915
+ "three"
916
+ ],
917
+ key2: [
918
+ "one"
919
+ ]
920
+ },
921
+ {
922
+ key3: [
923
+ "five"
924
+ ]
925
+ }
926
+ ];
927
+ var target = [
928
+ {
929
+ key1: [
930
+ "one",
931
+ "two"
932
+ ]
933
+ },
934
+ {
935
+ key3: [
936
+ "four"
937
+ ]
938
+ }
939
+ ];
940
+ var expected = [
941
+ {
942
+ key1: [
943
+ "one",
944
+ "two"
945
+ ]
946
+ },
947
+ {
948
+ key3: [
949
+ "four"
950
+ ]
951
+ },
952
+ {
953
+ key1: [
954
+ "one",
955
+ "three"
956
+ ],
957
+ key2: [
958
+ "one"
959
+ ]
960
+ },
961
+ {
962
+ key3: [
963
+ "five"
964
+ ]
965
+ }
966
+ ];
967
+ var merged = merge(target, src, {
968
+ clone: true
969
+ });
970
+ assert.deepEqual(merged, expected);
971
+ assert.isTrue(Array.isArray(merge(target, src)), "result should be an array");
972
+ assert.isTrue(Array.isArray(merge(target, src)[0].key1), "subkey should be an array too");
973
+ assert.notEqual(merged[0].key1, src[0].key1);
974
+ assert.notEqual(merged[0].key1, target[0].key1);
975
+ assert.notEqual(merged[0].key2, src[0].key2);
976
+ assert.notEqual(merged[1].key3, src[1].key3);
977
+ assert.notEqual(merged[1].key3, target[1].key3);
978
+ });
979
+ test("should treat regular expressions like primitive values", function () {
980
+ var target = {
981
+ key1: /abc/
982
+ };
983
+ var src = {
984
+ key1: /efg/
985
+ };
986
+ var expected = {
987
+ key1: /efg/
988
+ };
989
+ assert.deepEqual(merge(target, src), expected);
990
+ assert.deepEqual(merge(target, src).key1.test("efg"), true);
991
+ });
992
+ test("should treat regular expressions like primitive values and should not" + " clone even with clone option", function () {
993
+ var target = {
994
+ key1: /abc/
995
+ };
996
+ var src = {
997
+ key1: /efg/
998
+ };
999
+ var output = merge(target, src, {
1000
+ clone: true
1001
+ });
1002
+ assert.equal(output.key1, src.key1);
1003
+ });
1004
+ test("should treat dates like primitives", function () {
1005
+ var monday = new Date("2016-09-27T01:08:12.761Z");
1006
+ var tuesday = new Date("2016-09-28T01:18:12.761Z");
1007
+ var target = {
1008
+ key: monday
1009
+ };
1010
+ var source = {
1011
+ key: tuesday
1012
+ };
1013
+ var expected = {
1014
+ key: tuesday
1015
+ };
1016
+ var actual = merge(target, source);
1017
+ assert.deepEqual(actual, expected);
1018
+ assert.equal(actual.key.valueOf(), tuesday.valueOf());
1019
+ });
1020
+ test("should treat dates like primitives and should not clone even with clone" + " option", function () {
1021
+ var monday = new Date("2016-09-27T01:08:12.761Z");
1022
+ var tuesday = new Date("2016-09-28T01:18:12.761Z");
1023
+ var target = {
1024
+ key: monday
1025
+ };
1026
+ var source = {
1027
+ key: tuesday
1028
+ };
1029
+ var actual = merge(target, source, {
1030
+ clone: true
1031
+ });
1032
+ assert.equal(actual.key, tuesday);
1033
+ });
1034
+ test("should work on array with null in it", function () {
1035
+ var target = [];
1036
+ var src = [
1037
+ null
1038
+ ];
1039
+ var expected = [
1040
+ null
1041
+ ];
1042
+ assert.deepEqual(merge(target, src), expected);
1043
+ });
1044
+ test("should clone array's element if it is object", function () {
1045
+ var a = {
1046
+ key: "yup"
1047
+ };
1048
+ var target = [];
1049
+ var source = [
1050
+ a
1051
+ ];
1052
+ var output = merge(target, source, {
1053
+ clone: true
1054
+ });
1055
+ assert.notEqual(output[0], a);
1056
+ assert.equal(output[0].key, "yup");
1057
+ });
1058
+ test("should clone an array property when there is no target array", function () {
1059
+ var someObject = {};
1060
+ var target = {};
1061
+ var source = {
1062
+ ary: [
1063
+ someObject
1064
+ ]
1065
+ };
1066
+ var output = merge(target, source, {
1067
+ clone: true
1068
+ });
1069
+ assert.deepEqual(output, {
1070
+ ary: [
1071
+ {}
1072
+ ]
1073
+ });
1074
+ assert.notEqual(output.ary[0], someObject);
1075
+ });
1076
+ test("should overwrite values when property is initialised but undefined", function () {
1077
+ var target1 = {
1078
+ value: []
1079
+ };
1080
+ var target2 = {
1081
+ value: null
1082
+ };
1083
+ var target3 = {
1084
+ value: 2
1085
+ };
1086
+ var src = {
1087
+ value: undefined
1088
+ };
1089
+ function hasUndefinedProperty(o) {
1090
+ assert.isTrue(o.hasOwnProperty("value"));
1091
+ assert.equal(_type_of(o.value), "undefined");
1092
+ }
1093
+ hasUndefinedProperty(merge(target1, src));
1094
+ hasUndefinedProperty(merge(target2, src));
1095
+ hasUndefinedProperty(merge(target3, src));
1096
+ });
1097
+ test("dates should copy correctly in an array", function () {
1098
+ var monday = new Date("2016-09-27T01:08:12.761Z");
1099
+ var tuesday = new Date("2016-09-28T01:18:12.761Z");
1100
+ var target = [
1101
+ monday,
1102
+ "dude"
1103
+ ];
1104
+ var source = [
1105
+ tuesday,
1106
+ "lol"
1107
+ ];
1108
+ var expected = [
1109
+ monday,
1110
+ "dude",
1111
+ tuesday,
1112
+ "lol"
1113
+ ];
1114
+ var actual = merge(target, source);
1115
+ assert.deepEqual(actual, expected);
1116
+ });
1117
+ test("should handle custom merge functions", function () {
1118
+ var target = {
1119
+ letters: [
1120
+ "a",
1121
+ "b"
1122
+ ],
1123
+ people: {
1124
+ first: "Alex",
1125
+ second: "Bert"
1126
+ }
1127
+ };
1128
+ var source = {
1129
+ letters: [
1130
+ "c"
1131
+ ],
1132
+ people: {
1133
+ first: "Smith",
1134
+ second: "Bertson",
1135
+ third: "Car"
1136
+ }
1137
+ };
1138
+ var mergePeople = function (target, source) {
1139
+ var keys = new Set(Object.keys(target).concat(Object.keys(source)));
1140
+ var destination = {};
1141
+ keys.forEach(function (key) {
1142
+ if (key in target && key in source) {
1143
+ destination[key] = "".concat(target[key], "-").concat(source[key]);
1144
+ }
1145
+ else if (key in target) {
1146
+ destination[key] = target[key];
1147
+ }
1148
+ else {
1149
+ destination[key] = source[key];
1150
+ }
1151
+ });
1152
+ return destination;
1153
+ };
1154
+ var options = {
1155
+ customMerge: function (key) {
1156
+ if (key === "people") {
1157
+ return mergePeople;
1158
+ }
1159
+ return merge;
1160
+ }
1161
+ };
1162
+ var expected = {
1163
+ letters: [
1164
+ "a",
1165
+ "b",
1166
+ "c"
1167
+ ],
1168
+ people: {
1169
+ first: "Alex-Smith",
1170
+ second: "Bert-Bertson",
1171
+ third: "Car"
1172
+ }
1173
+ };
1174
+ var actual = merge(target, source, options);
1175
+ assert.deepEqual(actual, expected);
1176
+ });
1177
+ test("should handle custom merge functions", function () {
1178
+ var target = {
1179
+ letters: [
1180
+ "a",
1181
+ "b"
1182
+ ],
1183
+ people: {
1184
+ first: "Alex",
1185
+ second: "Bert"
1186
+ }
1187
+ };
1188
+ var source = {
1189
+ letters: [
1190
+ "c"
1191
+ ],
1192
+ people: {
1193
+ first: "Smith",
1194
+ second: "Bertson",
1195
+ third: "Car"
1196
+ }
1197
+ };
1198
+ var mergeLetters = function () {
1199
+ return "merged letters";
1200
+ };
1201
+ var options = {
1202
+ customMerge: function (key) {
1203
+ if (key === "letters") {
1204
+ return mergeLetters;
1205
+ }
1206
+ return;
1207
+ }
1208
+ };
1209
+ var expected = {
1210
+ letters: "merged letters",
1211
+ people: {
1212
+ first: "Smith",
1213
+ second: "Bertson",
1214
+ third: "Car"
1215
+ }
1216
+ };
1217
+ var actual = merge(target, source, options);
1218
+ assert.deepEqual(actual, expected);
1219
+ });
1220
+ test("should merge correctly if custom merge is not a valid function", function () {
1221
+ var target = {
1222
+ letters: [
1223
+ "a",
1224
+ "b"
1225
+ ],
1226
+ people: {
1227
+ first: "Alex",
1228
+ second: "Bert"
1229
+ }
1230
+ };
1231
+ var source = {
1232
+ letters: [
1233
+ "c"
1234
+ ],
1235
+ people: {
1236
+ first: "Smith",
1237
+ second: "Bertson",
1238
+ third: "Car"
1239
+ }
1240
+ };
1241
+ var options = {
1242
+ customMerge: function () {
1243
+ return false;
1244
+ }
1245
+ };
1246
+ var expected = {
1247
+ letters: [
1248
+ "a",
1249
+ "b",
1250
+ "c"
1251
+ ],
1252
+ people: {
1253
+ first: "Smith",
1254
+ second: "Bertson",
1255
+ third: "Car"
1256
+ }
1257
+ };
1258
+ var actual = merge(target, source, options);
1259
+ assert.deepEqual(actual, expected);
1260
+ });
1261
+ test("copy symbol keys in target that do not exist on the target", function () {
1262
+ var mySymbol = Symbol();
1263
+ var src = _define_property({}, mySymbol, "value1");
1264
+ var target = {};
1265
+ var res = merge(target, src);
1266
+ assert.equal(res[mySymbol], "value1");
1267
+ assert.deepEqual(Object.getOwnPropertySymbols(res), Object.getOwnPropertySymbols(src));
1268
+ });
1269
+ test("copy symbol keys in target that do exist on the target", function () {
1270
+ var mySymbol = Symbol();
1271
+ var src = _define_property({}, mySymbol, "value1");
1272
+ var target = _define_property({}, mySymbol, "wat");
1273
+ var res = merge(target, src);
1274
+ assert.equal(res[mySymbol], "value1");
1275
+ });
1276
+ test("Falsey properties should be mergeable", function () {
1277
+ var uniqueValue = {};
1278
+ var target = {
1279
+ wat: false
1280
+ };
1281
+ var source = {
1282
+ wat: false
1283
+ };
1284
+ var customMergeWasCalled = false;
1285
+ var result = merge(target, source, {
1286
+ isMergeableObject: function isMergeableObject() {
1287
+ return true;
1288
+ },
1289
+ customMerge: function customMerge() {
1290
+ return function () {
1291
+ customMergeWasCalled = true;
1292
+ return uniqueValue;
1293
+ };
1294
+ }
1295
+ });
1296
+ assert.equal(result.wat, uniqueValue);
1297
+ assert.isTrue(customMergeWasCalled, "custom merge function was called");
1298
+ });
1299
+ });
1300
+ describe("prototype-poisoning", function () {
1301
+ return _async_to_generator(function () {
1302
+ var isMergeableObject;
1303
+ return _ts_generator(this, function (_state) {
1304
+ switch (_state.label) {
1305
+ case 0:
1306
+ return [
1307
+ 4,
1308
+ import("./isMergeableObject.js")
1309
+ ];
1310
+ case 1:
1311
+ isMergeableObject = _state.sent().isMergeableObject;
1312
+ test("merging objects with own __proto__", function () {
1313
+ var user = {};
1314
+ var malicious = JSON.parse("{ \"__proto__\": { \"admin\": true } }");
1315
+ var mergedObject = merge(user, malicious);
1316
+ assert.isFalse(!!mergedObject.__proto__.admin, "non-plain properties should not be merged");
1317
+ assert.isFalse(!!mergedObject.admin, "the destination should have an unmodified prototype");
1318
+ });
1319
+ test("merging objects with plain and non-plain properties", function () {
1320
+ var plainSymbolKey = Symbol("plainSymbolKey");
1321
+ var parent = {
1322
+ parentKey: "should be undefined"
1323
+ };
1324
+ var target = Object.create(parent);
1325
+ target.plainKey = "should be replaced";
1326
+ target[plainSymbolKey] = "should also be replaced";
1327
+ var source = _define_property({
1328
+ parentKey: "foo",
1329
+ plainKey: "bar",
1330
+ newKey: "baz"
1331
+ }, plainSymbolKey, "qux");
1332
+ var mergedObject = merge(target, source);
1333
+ assert.equal(undefined, mergedObject.parentKey, "inherited properties of target should be removed, not merged or ignored");
1334
+ assert.equal("bar", mergedObject.plainKey, "enumerable own properties of target should be merged");
1335
+ assert.equal("baz", mergedObject.newKey, "properties not yet on target should be merged");
1336
+ assert.equal("qux", mergedObject[plainSymbolKey], "enumerable own symbol properties of target should be merged");
1337
+ });
1338
+ // the following cases come from the thread here: https://github.com/TehShrike/deepmerge/pull/164
1339
+ test("merging strings works with a custom string merge", function () {
1340
+ var target = {
1341
+ name: "Alexander"
1342
+ };
1343
+ var source = {
1344
+ name: "Hamilton"
1345
+ };
1346
+ function customMerge(key) {
1347
+ if (key === "name") {
1348
+ return function (target, source) {
1349
+ return target[0] + ". " + source.substring(0, 3);
1350
+ };
1351
+ }
1352
+ else {
1353
+ return merge;
1354
+ }
1355
+ }
1356
+ function mergeable(target) {
1357
+ return isMergeableObject(target) || typeof target === "string" && target.length > 1;
1358
+ }
1359
+ assert.equal("A. Ham", merge(target, source, {
1360
+ customMerge: customMerge,
1361
+ isMergeableObject: mergeable
1362
+ }).name);
1363
+ });
1364
+ test("merging objects with null prototype", function () {
1365
+ var target = Object.create(null);
1366
+ var source = Object.create(null);
1367
+ target.wheels = 4;
1368
+ target.trunk = {
1369
+ toolbox: [
1370
+ "hammer"
1371
+ ]
1372
+ };
1373
+ source.trunk = {
1374
+ toolbox: [
1375
+ "wrench"
1376
+ ]
1377
+ };
1378
+ source.engine = "v8";
1379
+ var expected = {
1380
+ wheels: 4,
1381
+ engine: "v8",
1382
+ trunk: {
1383
+ toolbox: [
1384
+ "hammer",
1385
+ "wrench"
1386
+ ]
1387
+ }
1388
+ };
1389
+ assert.deepEqual(expected, merge(target, source));
1390
+ });
1391
+ return [
1392
+ 2
1393
+ ];
1394
+ }
1395
+ });
1396
+ })();
1397
+ });