@wener/utils 1.1.50 → 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 (506) 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 +75 -75
  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 +276 -0
  75. package/lib/langs/Closer.js +100 -0
  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 +19 -7
  82. package/lib/langs/getObjectId.js +4 -6
  83. package/lib/langs/ifPresent.js +3 -0
  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 -76
  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/{runtime → web}/getGlobalThis.js +3 -4
  152. package/lib/web/getRandomValues.js +44 -0
  153. package/lib/web/randomUUID.js +15 -0
  154. package/lib/web/requestIdleCallback.js +17 -0
  155. package/lib/{runtime → web}/structuredClone.js +35 -28
  156. package/lib/web/structuredClone.test.js +81 -0
  157. package/package.json +10 -18
  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 +34 -34
  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 +3 -3
  178. package/src/crypto/hashing.test.ts +34 -48
  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 +32 -32
  185. package/src/crypto/ulid.ts +117 -117
  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 +27 -27
  193. package/src/fetch/createFetchWithLogging.ts +13 -16
  194. package/src/fetch/createFetchWithRetry.ts +80 -80
  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 +26 -27
  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 +30 -30
  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 +45 -0
  226. package/src/langs/Closer.ts +39 -0
  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 +21 -11
  233. package/src/langs/getObjectId.ts +10 -13
  234. package/src/langs/ifPresent.ts +3 -0
  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 +82 -80
  272. package/src/server/crypto/md5.ts +1 -1
  273. package/src/server/fetch/createFetchWithProxyByNodeFetch.ts +30 -33
  274. package/src/server/fetch/createFetchWithProxyByUndici.ts +64 -70
  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 +7 -7
  279. package/src/server/polyfill/polyfillFetch.ts +11 -21
  280. package/src/server/polyfill/polyfillJsDom.ts +60 -72
  281. package/src/server/polyfill/polyfillWebSocket.ts +15 -15
  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 +9 -9
  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/{runtime → web}/getGlobalThis.ts +6 -6
  295. package/src/web/getRandomValues.ts +41 -0
  296. package/src/web/randomUUID.ts +19 -0
  297. package/src/web/requestIdleCallback.ts +11 -0
  298. package/src/{runtime → web}/structuredClone.test.ts +8 -8
  299. package/src/web/structuredClone.ts +88 -0
  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 -209
  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/getRandomValues.js +0 -36
  358. package/lib/crypto/getRandomValues.js.map +0 -1
  359. package/lib/crypto/hashing.js.map +0 -1
  360. package/lib/crypto/md5.bench.js.map +0 -1
  361. package/lib/crypto/md5.d.js.map +0 -1
  362. package/lib/crypto/md5.js.map +0 -1
  363. package/lib/crypto/pem/pem.js.map +0 -1
  364. package/lib/crypto/randomUUID.js +0 -16
  365. package/lib/crypto/randomUUID.js.map +0 -1
  366. package/lib/crypto/randomUUIDv7.js.map +0 -1
  367. package/lib/crypto/ulid.js.map +0 -1
  368. package/lib/emitter/types.js.map +0 -1
  369. package/lib/errors/Errors.js.map +0 -1
  370. package/lib/fetch/HttpStatus.js.map +0 -1
  371. package/lib/fetch/createFetchWith.js.map +0 -1
  372. package/lib/fetch/createFetchWithLogging.js.map +0 -1
  373. package/lib/fetch/createFetchWithRetry.js.map +0 -1
  374. package/lib/fetch/dumpRequest.js.map +0 -1
  375. package/lib/fetch/dumpResponse.js.map +0 -1
  376. package/lib/fetch/http.types.js.map +0 -1
  377. package/lib/fetch/index.js.map +0 -1
  378. package/lib/fetch/types.js.map +0 -1
  379. package/lib/i18n/createTranslate.js.map +0 -1
  380. package/lib/index.js.map +0 -1
  381. package/lib/io/AbstractEncoding.js.map +0 -1
  382. package/lib/io/ArrayBuffer.test-d.js.map +0 -1
  383. package/lib/io/ArrayBuffers.js.map +0 -1
  384. package/lib/io/Buffer.js.map +0 -1
  385. package/lib/io/ByteBuffer.js.map +0 -1
  386. package/lib/io/base64.js.map +0 -1
  387. package/lib/io/dump.js.map +0 -1
  388. package/lib/io/isBuffer.js.map +0 -1
  389. package/lib/io/isTransferable.js.map +0 -1
  390. package/lib/io/parseDataUri.js.map +0 -1
  391. package/lib/langs/MaybeFunction.js.map +0 -1
  392. package/lib/langs/classOf.js.map +0 -1
  393. package/lib/langs/deepEqual.js.map +0 -1
  394. package/lib/langs/deepFreeze.js.map +0 -1
  395. package/lib/langs/getGlobalStates.js.map +0 -1
  396. package/lib/langs/getObjectId.js.map +0 -1
  397. package/lib/langs/isClass.js.map +0 -1
  398. package/lib/langs/isDefined.js.map +0 -1
  399. package/lib/langs/isEmptyObject.js.map +0 -1
  400. package/lib/langs/isFunction.js.map +0 -1
  401. package/lib/langs/isNullish.js +0 -5
  402. package/lib/langs/isNullish.js.map +0 -1
  403. package/lib/langs/isPlainObject.js.map +0 -1
  404. package/lib/langs/memoize.js.map +0 -1
  405. package/lib/langs/mixin.js.map +0 -1
  406. package/lib/langs/parseBoolean.js.map +0 -1
  407. package/lib/langs/shallowClone.js.map +0 -1
  408. package/lib/langs/shallowEqual.js.map +0 -1
  409. package/lib/libs/ms.js.map +0 -1
  410. package/lib/logging/Logger.js +0 -5
  411. package/lib/logging/Logger.js.map +0 -1
  412. package/lib/logging/createChildLogger.js +0 -16
  413. package/lib/logging/createChildLogger.js.map +0 -1
  414. package/lib/logging/createLogger.js +0 -63
  415. package/lib/logging/createLogger.js.map +0 -1
  416. package/lib/logging/createNoopLogger.js +0 -13
  417. package/lib/logging/createNoopLogger.js.map +0 -1
  418. package/lib/logging/slog.js +0 -143
  419. package/lib/logging/slog.js.map +0 -1
  420. package/lib/maths/clamp.js.map +0 -1
  421. package/lib/maths/random.js.map +0 -1
  422. package/lib/mitt/index.js +0 -77
  423. package/lib/mitt/index.js.map +0 -1
  424. package/lib/modules/isModule.js.map +0 -1
  425. package/lib/modules/parseModuleId.js.map +0 -1
  426. package/lib/objects/computeIfAbsent.js.map +0 -1
  427. package/lib/objects/get.js.map +0 -1
  428. package/lib/objects/get.test-d.js.map +0 -1
  429. package/lib/objects/merge/index.js.map +0 -1
  430. package/lib/objects/merge/isMergeableObject.js.map +0 -1
  431. package/lib/objects/merge/merge.js.map +0 -1
  432. package/lib/objects/parseObjectPath.js.map +0 -1
  433. package/lib/objects/set.js.map +0 -1
  434. package/lib/runtime/AsyncCloser.js +0 -40
  435. package/lib/runtime/AsyncCloser.js.map +0 -1
  436. package/lib/runtime/Closer.js +0 -34
  437. package/lib/runtime/Closer.js.map +0 -1
  438. package/lib/runtime/getGlobalThis.js.map +0 -1
  439. package/lib/runtime/structuredClone.js.map +0 -1
  440. package/lib/schema/typebox/index.js.map +0 -1
  441. package/lib/schema/typebox/typebox.js.map +0 -1
  442. package/lib/scripts/getGenerateContext.js.map +0 -1
  443. package/lib/server/crypto/md5.js.map +0 -1
  444. package/lib/server/fetch/createFetchWithProxy.js.map +0 -1
  445. package/lib/server/fetch/createFetchWithProxyByNodeFetch.js.map +0 -1
  446. package/lib/server/fetch/createFetchWithProxyByUndici.js.map +0 -1
  447. package/lib/server/getPackageDir.js.map +0 -1
  448. package/lib/server/index.js.map +0 -1
  449. package/lib/server/jsdom.js.map +0 -1
  450. package/lib/server/node-fetch.js.map +0 -1
  451. package/lib/server/polyfill/polyfillBrowser.js.map +0 -1
  452. package/lib/server/polyfill/polyfillCrypto.js.map +0 -1
  453. package/lib/server/polyfill/polyfillFetch.js.map +0 -1
  454. package/lib/server/polyfill/polyfillJsDom.js.map +0 -1
  455. package/lib/server/polyfill/polyfillWebSocket.js.map +0 -1
  456. package/lib/server/ws.js.map +0 -1
  457. package/lib/strings/camelCase.js.map +0 -1
  458. package/lib/strings/formatBytes.js.map +0 -1
  459. package/lib/strings/renderTemplate.js.map +0 -1
  460. package/lib/typedoc.js.map +0 -1
  461. package/lib/types.d.js.map +0 -1
  462. package/lib/validations/asserts.js.map +0 -1
  463. package/lib/validations/isUUID.js.map +0 -1
  464. package/lib/validations/parseTimestamp.js.map +0 -1
  465. package/src/cn/README.md +0 -3
  466. package/src/cn/division/DivisionCode.ts +0 -155
  467. package/src/cn/division/binarySearch.test.ts +0 -64
  468. package/src/cn/division/binarySearch.ts +0 -25
  469. package/src/cn/division/division.test.ts +0 -6
  470. package/src/cn/formatChineseAmount.ts +0 -61
  471. package/src/cn/id/Mod11.ts +0 -26
  472. package/src/cn/id/ResidentIdNumber.ts +0 -126
  473. package/src/cn/id/id.test.ts +0 -20
  474. package/src/cn/id/types.ts +0 -26
  475. package/src/cn/index.ts +0 -17
  476. package/src/cn/parseChineseNumber.test.ts +0 -159
  477. package/src/cn/parseChineseNumber.ts +0 -97
  478. package/src/cn/pinyin/cartesianProduct.test.ts +0 -64
  479. package/src/cn/pinyin/cartesianProduct.ts +0 -24
  480. package/src/cn/pinyin/data.json +0 -413
  481. package/src/cn/pinyin/loader.ts +0 -12
  482. package/src/cn/pinyin/preload.ts +0 -3
  483. package/src/cn/pinyin/toPinyin.test.ts +0 -12
  484. package/src/cn/pinyin/toPinyinPure.ts +0 -43
  485. package/src/cn/pinyin/transform.ts +0 -12
  486. package/src/cn/scripts/gen.test.ts +0 -131
  487. package/src/cn/types.ts +0 -11
  488. package/src/cn/uscc/Mod31.ts +0 -38
  489. package/src/cn/uscc/USCC.ts +0 -94
  490. package/src/cn/uscc/isUSCC.ts +0 -8
  491. package/src/cn/uscc/uscc.test.ts +0 -16
  492. package/src/crypto/getRandomValues.ts +0 -41
  493. package/src/crypto/randomUUID.ts +0 -19
  494. package/src/langs/isNullish.ts +0 -3
  495. package/src/logging/Logger.ts +0 -25
  496. package/src/logging/createChildLogger.ts +0 -16
  497. package/src/logging/createLogger.ts +0 -50
  498. package/src/logging/createNoopLogger.ts +0 -13
  499. package/src/logging/logger.test.ts +0 -36
  500. package/src/logging/slog.test.ts +0 -8
  501. package/src/logging/slog.ts +0 -221
  502. package/src/mitt/README.md +0 -1
  503. package/src/mitt/index.ts +0 -114
  504. package/src/runtime/AsyncCloser.ts +0 -45
  505. package/src/runtime/Closer.ts +0 -39
  506. package/src/runtime/structuredClone.ts +0 -88
@@ -5,7 +5,7 @@ import { PEM } from './pem';
5
5
  const { decode, encode } = PEM;
6
6
 
7
7
  test('pem', () => {
8
- const pem = `-----BEGIN RSA PRIVATE KEY-----
8
+ const pem = `-----BEGIN RSA PRIVATE KEY-----
9
9
  Proc-Type: 4,ENCRYPTED
10
10
  DEK-Info: DES-EDE3-CBC,ABC
11
11
 
@@ -13,48 +13,32 @@ MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
13
13
  MDAwMDAwMDAwMDAwMDAwMA==
14
14
  -----END RSA PRIVATE KEY-----
15
15
  `;
16
- const input = `Nice\n${pem}Hello
16
+ const input = `Nice\n${pem}Hello
17
17
  `;
18
- const out = {
19
- block: {
20
- type: 'RSA PRIVATE KEY',
21
- header: {
22
- 'Proc-Type': '4,ENCRYPTED',
23
- 'DEK-Info': 'DES-EDE3-CBC,ABC',
24
- },
25
- bytes: ArrayBuffers.from('0'.repeat(64)),
26
- },
27
- head: 'Nice\n',
28
- tail: 'Hello\n',
29
- };
30
- expect(decode(input)).toEqual(out);
31
- expect(encode(out.block)).toBe(pem);
18
+ const out = {
19
+ block: {
20
+ type: 'RSA PRIVATE KEY',
21
+ header: { 'Proc-Type': '4,ENCRYPTED', 'DEK-Info': 'DES-EDE3-CBC,ABC' },
22
+ bytes: ArrayBuffers.from('0'.repeat(64)),
23
+ },
24
+ head: 'Nice\n',
25
+ tail: 'Hello\n',
26
+ };
27
+ expect(decode(input)).toEqual(out);
28
+ expect(encode(out.block)).toBe(pem);
32
29
  });
33
30
  test('cases', () => {
34
- for (const b of [
35
- {
36
- type: 'RSA PRIVATE KEY',
37
- bytes: 'Hello',
38
- },
39
- {
40
- type: 'RSA PRIVATE KEY',
41
- header: {
42
- Name: 'N-:1/=',
43
- Age: '1234',
44
- },
45
- bytes: ArrayBuffers.from('Nice'),
46
- },
47
- ]) {
48
- const s = encode(b);
49
- const act = decode(s);
50
- expect({
51
- ...act.block,
52
- bytes: ArrayBuffers.toString(act.block.bytes),
53
- }).toStrictEqual({
54
- header: {},
55
- ...b,
56
- bytes: ArrayBuffers.toString(b.bytes),
57
- });
58
- expect(s).matchSnapshot();
59
- }
31
+ for (const b of [
32
+ { type: 'RSA PRIVATE KEY', bytes: 'Hello' },
33
+ { type: 'RSA PRIVATE KEY', header: { Name: 'N-:1/=', Age: '1234' }, bytes: ArrayBuffers.from('Nice') },
34
+ ]) {
35
+ const s = encode(b);
36
+ const act = decode(s);
37
+ expect({ ...act.block, bytes: ArrayBuffers.toString(act.block.bytes) }).toStrictEqual({
38
+ header: {},
39
+ ...b,
40
+ bytes: ArrayBuffers.toString(b.bytes),
41
+ });
42
+ expect(s).matchSnapshot();
43
+ }
60
44
  });
@@ -1,74 +1,74 @@
1
1
  import { ArrayBuffers } from '../../io/ArrayBuffers';
2
2
 
3
3
  export interface Block {
4
- /**
5
- * @see https://github.com/openssl/openssl/blob/master/include/openssl/pem.h#L35-L60 openssl/pem.h
6
- */
7
- type:
8
- | string
9
- | `${'RSA' | 'DSA'} ${'PRIVATE' | 'PUBLIC'} KEY`
10
- | `${'X509' | 'TRUSTED'} CERTIFICATE`
11
- | 'CERTIFICATE'
12
- | 'X509 CRL'
13
- | 'CERTIFICATE REQUEST'
14
- | 'NEW CERTIFICATE REQUEST'
15
- | 'ANY PRIVATE KEY'
16
- | 'PUBLIC KEY'
17
- | 'PKCS7'
18
- | 'PKCS #7 SIGNED DATA'
19
- | 'ENCRYPTED PRIVATE KEY'
20
- | 'PRIVATE KEY'
21
- | 'DH PARAMETERS'
22
- | 'X9.42 DH PARAMETERS'
23
- | 'SSL SESSION PARAMETERS'
24
- | 'DSA PARAMETERS'
25
- | 'ECDSA PUBLIC KEY'
26
- | 'EC PARAMETERS'
27
- | 'EC PRIVATE KEY'
28
- | 'PARAMETERS'
29
- | 'CMS'
30
- | 'SM2 PARAMETERS';
4
+ /**
5
+ * @see https://github.com/openssl/openssl/blob/master/include/openssl/pem.h#L35-L60 openssl/pem.h
6
+ */
7
+ type:
8
+ | string
9
+ | `${'RSA' | 'DSA'} ${'PRIVATE' | 'PUBLIC'} KEY`
10
+ | `${'X509' | 'TRUSTED'} CERTIFICATE`
11
+ | 'CERTIFICATE'
12
+ | 'X509 CRL'
13
+ | 'CERTIFICATE REQUEST'
14
+ | 'NEW CERTIFICATE REQUEST'
15
+ | 'ANY PRIVATE KEY'
16
+ | 'PUBLIC KEY'
17
+ | 'PKCS7'
18
+ | 'PKCS #7 SIGNED DATA'
19
+ | 'ENCRYPTED PRIVATE KEY'
20
+ | 'PRIVATE KEY'
21
+ | 'DH PARAMETERS'
22
+ | 'X9.42 DH PARAMETERS'
23
+ | 'SSL SESSION PARAMETERS'
24
+ | 'DSA PARAMETERS'
25
+ | 'ECDSA PUBLIC KEY'
26
+ | 'EC PARAMETERS'
27
+ | 'EC PRIVATE KEY'
28
+ | 'PARAMETERS'
29
+ | 'CMS'
30
+ | 'SM2 PARAMETERS';
31
31
 
32
- header: Record<string, string>;
33
- bytes: BufferSource;
32
+ header: Record<string, string>;
33
+ bytes: BufferSource;
34
34
  }
35
35
 
36
36
  export class PEM {
37
- static decode(data: string): { block: Block; tail: string; head: string } {
38
- const match = data.match(
39
- /^-----BEGIN (?<type>[^\r\n-]+)-----$\r?\n(?<headers>(^[^:\r\n]+:[^\n\r]+\r?\n)+\r?\n)?(?<data>[a-zA-Z0-9/_=\n\r+]+?)^-----END \1-----$\r?\n?/ms,
40
- );
41
- if (!match?.groups) throw new Error('Invalid PEM data');
42
- const { type, headers = '', data: b64 } = match.groups;
43
- const header = headers
44
- .split('\n')
45
- .filter((v) => v.trim())
46
- .map((h) => {
47
- const [k, ...v] = h.split(':');
48
- return [k.trim(), v.join(':').trim()];
49
- })
50
- .reduce((a, [k, v]) => ({ ...a, [k]: v }), {});
51
- return {
52
- block: {
53
- type,
54
- header,
55
- // avoid replaceAll
56
- bytes: ArrayBuffers.from(b64.replace(/[\r\n]/g, ''), 'base64'),
57
- },
58
- head: data.slice(0, match.index || 0),
59
- tail: data.slice((match.index || 0) + match[0].length),
60
- };
61
- }
37
+ static decode(data: string): { block: Block; tail: string; head: string } {
38
+ const match = data.match(
39
+ /^-----BEGIN (?<type>[^\r\n-]+)-----$\r?\n(?<headers>(^[^:\r\n]+:[^\n\r]+\r?\n)+\r?\n)?(?<data>[a-zA-Z0-9/_=\n\r+]+?)^-----END \1-----$\r?\n?/ms,
40
+ );
41
+ if (!match?.groups) throw new Error('Invalid PEM data');
42
+ const { type, headers = '', data: b64 } = match.groups;
43
+ const header = headers
44
+ .split('\n')
45
+ .filter((v) => v.trim())
46
+ .map((h) => {
47
+ const [k, ...v] = h.split(':');
48
+ return [k.trim(), v.join(':').trim()];
49
+ })
50
+ .reduce((a, [k, v]) => ({ ...a, [k]: v }), {});
51
+ return {
52
+ block: {
53
+ type,
54
+ header,
55
+ // avoid replaceAll
56
+ bytes: ArrayBuffers.from(b64.replace(/[\r\n]/g, ''), 'base64'),
57
+ },
58
+ head: data.slice(0, match.index || 0),
59
+ tail: data.slice((match.index || 0) + match[0].length),
60
+ };
61
+ }
62
62
 
63
- static encode(block: { type: string; bytes: string | BufferSource; header?: Record<string, string> }): string {
64
- const { type, header, bytes } = block;
65
- const headers = Object.entries(header || {})
66
- .map(([k, v]) => `${k}: ${v}`)
67
- .join('\n');
68
- return `-----BEGIN ${type}-----\n${headers}${headers.length ? '\n\n' : ''}${
69
- ArrayBuffers.toString(bytes, 'base64')
70
- .match(/.{1,64}/g)
71
- ?.join('\n') || ''
72
- }\n-----END ${type}-----\n`;
73
- }
63
+ static encode(block: { type: string; bytes: string | BufferSource; header?: Record<string, string> }): string {
64
+ const { type, header, bytes } = block;
65
+ const headers = Object.entries(header || {})
66
+ .map(([k, v]) => `${k}: ${v}`)
67
+ .join('\n');
68
+ return `-----BEGIN ${type}-----\n${headers}${headers.length ? '\n\n' : ''}${
69
+ ArrayBuffers.toString(bytes, 'base64')
70
+ .match(/.{1,64}/g)
71
+ ?.join('\n') || ''
72
+ }\n-----END ${type}-----\n`;
73
+ }
74
74
  }
@@ -1,43 +1,43 @@
1
1
  import { expect, test } from 'vitest';
2
- import { randomUUID } from './randomUUID';
2
+ import { randomUUID } from '../web/randomUUID';
3
3
  import { createULID, isULID, parseULID, ulid } from './ulid';
4
4
 
5
5
  test('isULID', () => {
6
- for (const [a, b] of [
7
- [undefined, false],
8
- [null, false],
9
- ['', false],
10
- [randomUUID(), false],
11
- [ulid(), true],
12
- ] as const) {
13
- expect(isULID(a), `${a} -> ${b}`).toEqual(b);
14
- }
6
+ for (const [a, b] of [
7
+ [undefined, false],
8
+ [null, false],
9
+ ['', false],
10
+ [randomUUID(), false],
11
+ [ulid(), true],
12
+ ] as const) {
13
+ expect(isULID(a), `${a} -> ${b}`).toEqual(b);
14
+ }
15
15
  });
16
16
 
17
17
  test('ulid', () => {
18
- // monotonic
19
- {
20
- let lastTime = 0;
21
- const ulid = createULID({
22
- now: () => {
23
- lastTime ||= Date.now();
24
- return lastTime;
25
- },
26
- });
18
+ // monotonic
19
+ {
20
+ let lastTime = 0;
21
+ const ulid = createULID({
22
+ now: () => {
23
+ lastTime ||= Date.now();
24
+ return lastTime;
25
+ },
26
+ });
27
27
 
28
- const ulid1 = ulid();
29
- expect(parseULID(ulid1).timestamp).toBe(lastTime);
30
- expect(isULID(ulid1), ulid1).toBeTruthy();
28
+ const ulid1 = ulid();
29
+ expect(parseULID(ulid1).timestamp).toBe(lastTime);
30
+ expect(isULID(ulid1), ulid1).toBeTruthy();
31
31
 
32
- const ulid2 = ulid();
33
- expect(ulid1 < ulid2).toBeTruthy();
34
- expect(isULID(ulid2), ulid2).toBeTruthy();
35
- expect(parseULID(ulid2).timestamp).toBe(lastTime);
36
- }
32
+ const ulid2 = ulid();
33
+ expect(ulid1 < ulid2).toBeTruthy();
34
+ expect(isULID(ulid2), ulid2).toBeTruthy();
35
+ expect(parseULID(ulid2).timestamp).toBe(lastTime);
36
+ }
37
37
 
38
- {
39
- const next = createULID();
40
- expect(isULID(next().toLowerCase())).toBeTruthy();
41
- expect(isULID('ttttttttttrrrrrrrrrrrrrrrr')).toBeTruthy();
42
- }
38
+ {
39
+ const next = createULID();
40
+ expect(isULID(next().toLowerCase())).toBeTruthy();
41
+ expect(isULID('ttttttttttrrrrrrrrrrrrrrrr')).toBeTruthy();
42
+ }
43
43
  });
@@ -1,4 +1,4 @@
1
- import { getRandomValues } from './getRandomValues';
1
+ import { getRandomValues } from '../web/getRandomValues';
2
2
 
3
3
  type PRNG = () => number;
4
4
 
@@ -10,13 +10,13 @@ type PRNG = () => number;
10
10
  export type ULID = (seedTime?: number) => string;
11
11
 
12
12
  export interface ULIDError extends Error {
13
- source: string;
13
+ source: string;
14
14
  }
15
15
 
16
16
  function createError(message: string): ULIDError {
17
- const err = new Error(message) as ULIDError;
18
- err.source = 'ulid';
19
- return err;
17
+ const err = new Error(message) as ULIDError;
18
+ err.source = 'ulid';
19
+ return err;
20
20
  }
21
21
 
22
22
  // These values should NEVER change. If
@@ -31,81 +31,81 @@ const RANDOM_LEN = 16;
31
31
  * check give {@link str} is a valid ulid
32
32
  */
33
33
  export function isULID(str: string | undefined | null): boolean {
34
- if (!str) {
35
- return false;
36
- }
37
- // ttttttttttrrrrrrrrrrrrrrrr
38
- return str.length === 26 && /^[0-9A-HJKMNP-TV-Z]{26}$/i.test(str);
34
+ if (!str) {
35
+ return false;
36
+ }
37
+ // ttttttttttrrrrrrrrrrrrrrrr
38
+ return str.length === 26 && /^[0-9A-HJKMNP-TV-Z]{26}$/i.test(str);
39
39
  }
40
40
 
41
41
  function replaceCharAt(str: string, index: number, char: string) {
42
- if (index > str.length - 1) {
43
- return str;
44
- }
45
- return str.substr(0, index) + char + str.substr(index + 1);
42
+ if (index > str.length - 1) {
43
+ return str;
44
+ }
45
+ return str.substr(0, index) + char + str.substr(index + 1);
46
46
  }
47
47
 
48
48
  function incrementBase32(str: string): string {
49
- let done;
50
- let index = str.length;
51
- let char;
52
- let charIndex;
53
- const maxCharIndex = ENCODING_LEN - 1;
54
- while (!done && index-- >= 0) {
55
- char = str[index];
56
- charIndex = ENCODING.indexOf(char);
57
- if (charIndex === -1) {
58
- throw createError('incorrectly encoded string');
59
- }
60
- if (charIndex === maxCharIndex) {
61
- str = replaceCharAt(str, index, ENCODING[0]);
62
- continue;
63
- }
64
- done = replaceCharAt(str, index, ENCODING[charIndex + 1]);
65
- }
66
- if (typeof done === 'string') {
67
- return done;
68
- }
69
- throw createError('cannot increment this string');
49
+ let done;
50
+ let index = str.length;
51
+ let char;
52
+ let charIndex;
53
+ const maxCharIndex = ENCODING_LEN - 1;
54
+ while (!done && index-- >= 0) {
55
+ char = str[index];
56
+ charIndex = ENCODING.indexOf(char);
57
+ if (charIndex === -1) {
58
+ throw createError('incorrectly encoded string');
59
+ }
60
+ if (charIndex === maxCharIndex) {
61
+ str = replaceCharAt(str, index, ENCODING[0]);
62
+ continue;
63
+ }
64
+ done = replaceCharAt(str, index, ENCODING[charIndex + 1]);
65
+ }
66
+ if (typeof done === 'string') {
67
+ return done;
68
+ }
69
+ throw createError('cannot increment this string');
70
70
  }
71
71
 
72
72
  function randomChar(prng: PRNG): string {
73
- let rand = Math.floor(prng() * ENCODING_LEN);
74
- if (rand === ENCODING_LEN) {
75
- rand = ENCODING_LEN - 1;
76
- }
77
- return ENCODING.charAt(rand);
73
+ let rand = Math.floor(prng() * ENCODING_LEN);
74
+ if (rand === ENCODING_LEN) {
75
+ rand = ENCODING_LEN - 1;
76
+ }
77
+ return ENCODING.charAt(rand);
78
78
  }
79
79
 
80
80
  function encodeTime(now: number, len: number): string {
81
- if (isNaN(now)) {
82
- throw new Error(`${now} must be a number`);
83
- }
84
- if (now > TIME_MAX) {
85
- throw createError(`cannot encode time greater than ${TIME_MAX}`);
86
- }
87
- if (now < 0) {
88
- throw createError('time must be positive');
89
- }
90
- if (!Number.isInteger(now)) {
91
- throw createError('time must be an integer');
92
- }
93
- let mod;
94
- let str = '';
95
- for (; len > 0; len--) {
96
- mod = now % ENCODING_LEN;
97
- str = ENCODING.charAt(mod) + str;
98
- now = (now - mod) / ENCODING_LEN;
99
- }
100
- return str;
81
+ if (isNaN(now)) {
82
+ throw new Error(`${now} must be a number`);
83
+ }
84
+ if (now > TIME_MAX) {
85
+ throw createError(`cannot encode time greater than ${TIME_MAX}`);
86
+ }
87
+ if (now < 0) {
88
+ throw createError('time must be positive');
89
+ }
90
+ if (!Number.isInteger(now)) {
91
+ throw createError('time must be an integer');
92
+ }
93
+ let mod;
94
+ let str = '';
95
+ for (; len > 0; len--) {
96
+ mod = now % ENCODING_LEN;
97
+ str = ENCODING.charAt(mod) + str;
98
+ now = (now - mod) / ENCODING_LEN;
99
+ }
100
+ return str;
101
101
  }
102
102
 
103
103
  function encodeRandom(len: number, prng: PRNG): string {
104
- let str = '';
105
- for (; len > 0; len--) {
106
- str = randomChar(prng) + str;
107
- }
108
- return str;
104
+ let str = '';
105
+ for (; len > 0; len--) {
106
+ str = randomChar(prng) + str;
107
+ }
108
+ return str;
109
109
  }
110
110
 
111
111
  /**
@@ -114,73 +114,73 @@ function encodeRandom(len: number, prng: PRNG): string {
114
114
  * @throws ULIDError
115
115
  */
116
116
  export function parseULID(id: string): { timestamp: number; random: string } {
117
- if (id.length !== TIME_LEN + RANDOM_LEN) {
118
- throw createError('malformed ulid');
119
- }
120
- const time = id
121
- .substr(0, TIME_LEN)
122
- .split('')
123
- .reverse()
124
- .reduce((carry, char, index) => {
125
- const encodingIndex = ENCODING.indexOf(char);
126
- if (encodingIndex === -1) {
127
- throw createError('invalid character found: ' + char);
128
- }
129
- return (carry += encodingIndex * Math.pow(ENCODING_LEN, index));
130
- }, 0);
131
- if (time > TIME_MAX) {
132
- throw createError('malformed ulid, timestamp too large');
133
- }
134
- return { timestamp: time, random: id.substring(TIME_LEN) };
117
+ if (id.length !== TIME_LEN + RANDOM_LEN) {
118
+ throw createError('malformed ulid');
119
+ }
120
+ const time = id
121
+ .substr(0, TIME_LEN)
122
+ .split('')
123
+ .reverse()
124
+ .reduce((carry, char, index) => {
125
+ const encodingIndex = ENCODING.indexOf(char);
126
+ if (encodingIndex === -1) {
127
+ throw createError('invalid character found: ' + char);
128
+ }
129
+ return (carry += encodingIndex * Math.pow(ENCODING_LEN, index));
130
+ }, 0);
131
+ if (time > TIME_MAX) {
132
+ throw createError('malformed ulid, timestamp too large');
133
+ }
134
+ return { timestamp: time, random: id.substring(TIME_LEN) };
135
135
  }
136
136
 
137
137
  function createPrng(): PRNG {
138
- return () => {
139
- const buffer = new Uint8Array(1);
140
- getRandomValues(buffer);
141
- return buffer[0] / 0xff;
142
- };
138
+ return () => {
139
+ const buffer = new Uint8Array(1);
140
+ getRandomValues(buffer);
141
+ return buffer[0] / 0xff;
142
+ };
143
143
  }
144
144
 
145
145
  /**
146
146
  * create a ulid generator
147
147
  */
148
148
  export function createULID({
149
- monotonic = true,
150
- random = createPrng(),
151
- now = Date.now,
149
+ monotonic = true,
150
+ random = createPrng(),
151
+ now = Date.now,
152
152
  }: { monotonic?: boolean; now?: () => number; random?: () => number } = {}) {
153
- if (!monotonic) {
154
- return function ulid(seedTime?: number): string {
155
- seedTime ||= now();
156
- return encodeTime(seedTime, TIME_LEN) + encodeRandom(RANDOM_LEN, random);
157
- };
158
- }
159
-
160
- let lastTime: number = 0;
161
- let lastRandom: string;
162
- return function ulid(seedTime?: number): string {
163
- seedTime ||= now();
164
- if (seedTime <= lastTime && lastRandom) {
165
- const incrementedRandom = (lastRandom = incrementBase32(lastRandom));
166
- return encodeTime(lastTime, TIME_LEN) + incrementedRandom;
167
- }
168
- lastTime = seedTime;
169
- const newRandom = (lastRandom = encodeRandom(RANDOM_LEN, random));
170
- return encodeTime(seedTime, TIME_LEN) + newRandom;
171
- };
153
+ if (!monotonic) {
154
+ return function ulid(seedTime?: number): string {
155
+ seedTime ||= now();
156
+ return encodeTime(seedTime, TIME_LEN) + encodeRandom(RANDOM_LEN, random);
157
+ };
158
+ }
159
+
160
+ let lastTime: number = 0;
161
+ let lastRandom: string;
162
+ return function ulid(seedTime?: number): string {
163
+ seedTime ||= now();
164
+ if (seedTime <= lastTime && lastRandom) {
165
+ const incrementedRandom = (lastRandom = incrementBase32(lastRandom));
166
+ return encodeTime(lastTime, TIME_LEN) + incrementedRandom;
167
+ }
168
+ lastTime = seedTime;
169
+ const newRandom = (lastRandom = encodeRandom(RANDOM_LEN, random));
170
+ return encodeTime(seedTime, TIME_LEN) + newRandom;
171
+ };
172
172
  }
173
173
 
174
174
  /**
175
175
  * default monotonic ulid generator
176
176
  */
177
177
  export let ulid: ULID = (...args) => {
178
- if (_real) {
179
- return _real(...args);
180
- }
181
- // delay initialize crypto
182
- _real = createULID();
183
- ulid = _real;
184
- return _real(...args);
178
+ if (_real) {
179
+ return _real(...args);
180
+ }
181
+ // delay initialize crypto
182
+ _real = createULID();
183
+ ulid = _real;
184
+ return _real(...args);
185
185
  };
186
186
  let _real: ULID;
@@ -4,15 +4,15 @@ export type Handler<E extends keyof T, T = Record<string, unknown>> = (evt: { ty
4
4
  export type WildcardHandler<T = Record<string, unknown>> = <E extends keyof T>(evt: { type: E; payload: T[E] }) => void;
5
5
 
6
6
  export interface Emitter<Events extends Record<EventType, unknown>> {
7
- on<Key extends keyof Events>(type: Key, handler: Handler<Key, Events>): void;
7
+ on<Key extends keyof Events>(type: Key, handler: Handler<Key, Events>): void;
8
8
 
9
- on(type: '*', handler: WildcardHandler<Events>): void;
9
+ on(type: '*', handler: WildcardHandler<Events>): void;
10
10
 
11
- off<Key extends keyof Events>(type: Key, handler?: Handler<Key, Events>): void;
11
+ off<Key extends keyof Events>(type: Key, handler?: Handler<Key, Events>): void;
12
12
 
13
- off(type: '*', handler: WildcardHandler<Events>): void;
13
+ off(type: '*', handler: WildcardHandler<Events>): void;
14
14
 
15
- emit<Key extends keyof Events>(type: Key, event: Events[Key]): void;
15
+ emit<Key extends keyof Events>(type: Key, event: Events[Key]): void;
16
16
 
17
- emit<Key extends keyof Events>(type: undefined extends Events[Key] ? Key : never): void;
17
+ emit<Key extends keyof Events>(type: undefined extends Events[Key] ? Key : never): void;
18
18
  }