@wener/utils 1.1.26 → 1.1.29

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 (351) hide show
  1. package/README.md +4 -0
  2. package/lib/arrays/MaybeArray.js +36 -25
  3. package/lib/arrays/MaybeArray.js.map +1 -1
  4. package/lib/arrays/arrayFromAsync.js +5 -7
  5. package/lib/arrays/arrayFromAsync.js.map +1 -1
  6. package/lib/asyncs/AsyncInterval.js +11 -12
  7. package/lib/asyncs/AsyncInterval.js.map +1 -1
  8. package/lib/asyncs/MaybePromise.js +3 -0
  9. package/lib/asyncs/MaybePromise.js.map +1 -0
  10. package/lib/asyncs/createAsyncIterator.js +37 -35
  11. package/lib/asyncs/createAsyncIterator.js.map +1 -1
  12. package/lib/asyncs/createLazyPromise.js +59 -60
  13. package/lib/asyncs/createLazyPromise.js.map +1 -1
  14. package/lib/asyncs/firstOfAsyncIterator.js +7 -9
  15. package/lib/asyncs/firstOfAsyncIterator.js.map +1 -1
  16. package/lib/asyncs/generatorOfStream.js +16 -0
  17. package/lib/asyncs/generatorOfStream.js.map +1 -0
  18. package/lib/asyncs/isIterator.js +3 -4
  19. package/lib/asyncs/isIterator.js.map +1 -1
  20. package/lib/asyncs/isPromise.js +3 -4
  21. package/lib/asyncs/isPromise.js.map +1 -1
  22. package/lib/asyncs/isThenable.js +6 -0
  23. package/lib/asyncs/isThenable.js.map +1 -0
  24. package/lib/asyncs/nextOfAsyncIterator.js +20 -14
  25. package/lib/asyncs/nextOfAsyncIterator.js.map +1 -1
  26. package/lib/asyncs/promiseOfCallback.js +17 -0
  27. package/lib/asyncs/promiseOfCallback.js.map +1 -0
  28. package/lib/asyncs/sleep.js +2 -3
  29. package/lib/asyncs/sleep.js.map +1 -1
  30. package/lib/asyncs/timeout.js +22 -26
  31. package/lib/asyncs/timeout.js.map +1 -1
  32. package/lib/browsers/copy.js +47 -45
  33. package/lib/browsers/copy.js.map +1 -1
  34. package/lib/browsers/download.js +38 -27
  35. package/lib/browsers/download.js.map +1 -1
  36. package/lib/browsers/getFileFromDataTransfer.js +41 -28
  37. package/lib/browsers/getFileFromDataTransfer.js.map +1 -1
  38. package/lib/browsers/loaders.js +43 -43
  39. package/lib/browsers/loaders.js.map +1 -1
  40. package/lib/crypto/base.js +5 -4
  41. package/lib/crypto/base.js.map +1 -1
  42. package/lib/crypto/getNodeCrypto.js +14 -13
  43. package/lib/crypto/getNodeCrypto.js.map +1 -1
  44. package/lib/crypto/getRandomValues.js +22 -26
  45. package/lib/crypto/getRandomValues.js.map +1 -1
  46. package/lib/crypto/hashing.js +42 -50
  47. package/lib/crypto/hashing.js.map +1 -1
  48. package/lib/crypto/md5.bench.js +21 -0
  49. package/lib/crypto/md5.bench.js.map +1 -0
  50. package/lib/crypto/md5.d.js +3 -0
  51. package/lib/crypto/md5.d.js.map +1 -0
  52. package/lib/crypto/md5.js +119 -121
  53. package/lib/crypto/md5.js.map +1 -1
  54. package/lib/crypto/pem/pem.js +32 -35
  55. package/lib/crypto/pem/pem.js.map +1 -1
  56. package/lib/crypto/randomUUID.js +12 -11
  57. package/lib/crypto/randomUUID.js.map +1 -1
  58. package/lib/crypto/ulid.js +123 -112
  59. package/lib/crypto/ulid.js.map +1 -1
  60. package/lib/errors/Errors.js +167 -149
  61. package/lib/errors/Errors.js.map +1 -1
  62. package/lib/fetch/createFetchWith.js +20 -23
  63. package/lib/fetch/createFetchWith.js.map +1 -1
  64. package/lib/fetch/createFetchWithLogging.js +20 -16
  65. package/lib/fetch/createFetchWithLogging.js.map +1 -1
  66. package/lib/fetch/createFetchWithRetry.js +61 -65
  67. package/lib/fetch/createFetchWithRetry.js.map +1 -1
  68. package/lib/fetch/dumpRequest.js +39 -42
  69. package/lib/fetch/dumpRequest.js.map +1 -1
  70. package/lib/fetch/dumpResponse.js +13 -20
  71. package/lib/fetch/dumpResponse.js.map +1 -1
  72. package/lib/fetch/index.js +7 -0
  73. package/lib/fetch/index.js.map +1 -0
  74. package/lib/fetch/types.js +3 -0
  75. package/lib/fetch/types.js.map +1 -0
  76. package/lib/http/HttpStatus.js +89 -80
  77. package/lib/http/HttpStatus.js.map +1 -1
  78. package/lib/i18n/createTranslate.js +48 -48
  79. package/lib/i18n/createTranslate.js.map +1 -1
  80. package/lib/index.js +30 -14
  81. package/lib/index.js.map +1 -1
  82. package/lib/io/AbstractEncoding.js +7 -0
  83. package/lib/io/AbstractEncoding.js.map +1 -0
  84. package/lib/io/ArrayBuffer.test-d.js +7 -0
  85. package/lib/io/ArrayBuffer.test-d.js.map +1 -0
  86. package/lib/io/ArrayBuffers.js +198 -172
  87. package/lib/io/ArrayBuffers.js.map +1 -1
  88. package/lib/io/Buffer.js +21 -20
  89. package/lib/io/Buffer.js.map +1 -1
  90. package/lib/io/base64.js +49 -48
  91. package/lib/io/base64.js.map +1 -1
  92. package/lib/io/isBuffer.js +7 -5
  93. package/lib/io/isBuffer.js.map +1 -1
  94. package/lib/io/isTransferable.js +23 -19
  95. package/lib/io/isTransferable.js.map +1 -1
  96. package/lib/isomorphics/getGlobalThis.js +17 -12
  97. package/lib/isomorphics/getGlobalThis.js.map +1 -1
  98. package/lib/isomorphics/structuredClone.js +71 -63
  99. package/lib/isomorphics/structuredClone.js.map +1 -1
  100. package/lib/langs/MaybeFunction.js +7 -7
  101. package/lib/langs/MaybeFunction.js.map +1 -1
  102. package/lib/langs/classOf.js +3 -4
  103. package/lib/langs/classOf.js.map +1 -1
  104. package/lib/langs/deepEqual.js +77 -85
  105. package/lib/langs/deepEqual.js.map +1 -1
  106. package/lib/langs/deepFreeze.js +20 -0
  107. package/lib/langs/deepFreeze.js.map +1 -0
  108. package/lib/langs/hashCode.ignored.js +112 -0
  109. package/lib/langs/hashCode.ignored.js.map +1 -0
  110. package/lib/langs/isClass.js +3 -4
  111. package/lib/langs/isClass.js.map +1 -1
  112. package/lib/langs/isDefined.js +3 -4
  113. package/lib/langs/isDefined.js.map +1 -1
  114. package/lib/langs/isEmptyObject.js +3 -5
  115. package/lib/langs/isEmptyObject.js.map +1 -1
  116. package/lib/langs/isFunction.js +5 -0
  117. package/lib/langs/isFunction.js.map +1 -0
  118. package/lib/langs/isPlainObject.js +7 -8
  119. package/lib/langs/isPlainObject.js.map +1 -1
  120. package/lib/langs/memoize.js +19 -21
  121. package/lib/langs/memoize.js.map +1 -1
  122. package/lib/langs/parseBoolean.js +26 -27
  123. package/lib/langs/parseBoolean.js.map +1 -1
  124. package/lib/langs/shallowClone.js +12 -12
  125. package/lib/langs/shallowClone.js.map +1 -1
  126. package/lib/langs/shallowEqual.js +21 -18
  127. package/lib/langs/shallowEqual.js.map +1 -1
  128. package/lib/libs/ms.js +123 -103
  129. package/lib/libs/ms.js.map +1 -1
  130. package/lib/logging/Logger.js +5 -0
  131. package/lib/logging/Logger.js.map +1 -0
  132. package/lib/logging/createChildLogger.js +12 -14
  133. package/lib/logging/createChildLogger.js.map +1 -1
  134. package/lib/logging/createLogger.js +59 -33
  135. package/lib/logging/createLogger.js.map +1 -1
  136. package/lib/logging/createNoopLogger.js +11 -12
  137. package/lib/logging/createNoopLogger.js.map +1 -1
  138. package/lib/logging/slog.js +143 -0
  139. package/lib/logging/slog.js.map +1 -0
  140. package/lib/maths/clamp.js +21 -0
  141. package/lib/maths/clamp.js.map +1 -0
  142. package/lib/maths/random.js +14 -15
  143. package/lib/maths/random.js.map +1 -1
  144. package/lib/modules/isModule.js +5 -4
  145. package/lib/modules/isModule.js.map +1 -1
  146. package/lib/modules/parseModuleId.js +36 -31
  147. package/lib/modules/parseModuleId.js.map +1 -1
  148. package/lib/objects/get.js +13 -11
  149. package/lib/objects/get.js.map +1 -1
  150. package/lib/objects/get.test-d.js +33 -0
  151. package/lib/objects/get.test-d.js.map +1 -0
  152. package/lib/objects/merge/index.js +3 -0
  153. package/lib/objects/merge/index.js.map +1 -0
  154. package/lib/objects/merge/isMergeableObject.js +11 -10
  155. package/lib/objects/merge/isMergeableObject.js.map +1 -1
  156. package/lib/objects/merge/merge.js +65 -66
  157. package/lib/objects/merge/merge.js.map +1 -1
  158. package/lib/objects/parseObjectPath.js +35 -23
  159. package/lib/objects/parseObjectPath.js.map +1 -1
  160. package/lib/objects/set.js +33 -34
  161. package/lib/objects/set.js.map +1 -1
  162. package/lib/schema/typebox/gen/codegen/common/encoder.js +100 -0
  163. package/lib/schema/typebox/gen/codegen/common/encoder.js.map +1 -0
  164. package/lib/schema/typebox/gen/codegen/common/formatter.js +33 -0
  165. package/lib/schema/typebox/gen/codegen/common/formatter.js.map +1 -0
  166. package/lib/schema/typebox/gen/codegen/common/index.js +5 -0
  167. package/lib/schema/typebox/gen/codegen/common/index.js.map +1 -0
  168. package/lib/schema/typebox/gen/codegen/common/jsdoc.js +117 -0
  169. package/lib/schema/typebox/gen/codegen/common/jsdoc.js.map +1 -0
  170. package/lib/schema/typebox/gen/codegen/expression/compiler.js +367 -0
  171. package/lib/schema/typebox/gen/codegen/expression/compiler.js.map +1 -0
  172. package/lib/schema/typebox/gen/codegen/expression/errors.js +259 -0
  173. package/lib/schema/typebox/gen/codegen/expression/errors.js.map +1 -0
  174. package/lib/schema/typebox/gen/codegen/expression/evaluator.js +254 -0
  175. package/lib/schema/typebox/gen/codegen/expression/evaluator.js.map +1 -0
  176. package/lib/schema/typebox/gen/codegen/expression/expression.js +384 -0
  177. package/lib/schema/typebox/gen/codegen/expression/expression.js.map +1 -0
  178. package/lib/schema/typebox/gen/codegen/expression/index.js +6 -0
  179. package/lib/schema/typebox/gen/codegen/expression/index.js.map +1 -0
  180. package/lib/schema/typebox/gen/codegen/index.js +5 -0
  181. package/lib/schema/typebox/gen/codegen/index.js.map +1 -0
  182. package/lib/schema/typebox/gen/codegen/model/index.js +16 -0
  183. package/lib/schema/typebox/gen/codegen/model/index.js.map +1 -0
  184. package/lib/schema/typebox/gen/codegen/model/model-to-arktype.js +239 -0
  185. package/lib/schema/typebox/gen/codegen/model/model-to-arktype.js.map +1 -0
  186. package/lib/schema/typebox/gen/codegen/model/model-to-expression.js +359 -0
  187. package/lib/schema/typebox/gen/codegen/model/model-to-expression.js.map +1 -0
  188. package/lib/schema/typebox/gen/codegen/model/model-to-grpc.js +217 -0
  189. package/lib/schema/typebox/gen/codegen/model/model-to-grpc.js.map +1 -0
  190. package/lib/schema/typebox/gen/codegen/model/model-to-io-ts.js +253 -0
  191. package/lib/schema/typebox/gen/codegen/model/model-to-io-ts.js.map +1 -0
  192. package/lib/schema/typebox/gen/codegen/model/model-to-javascript.js +47 -0
  193. package/lib/schema/typebox/gen/codegen/model/model-to-javascript.js.map +1 -0
  194. package/lib/schema/typebox/gen/codegen/model/model-to-json-schema.js +171 -0
  195. package/lib/schema/typebox/gen/codegen/model/model-to-json-schema.js.map +1 -0
  196. package/lib/schema/typebox/gen/codegen/model/model-to-typebox.js +33 -0
  197. package/lib/schema/typebox/gen/codegen/model/model-to-typebox.js.map +1 -0
  198. package/lib/schema/typebox/gen/codegen/model/model-to-typescript.js +164 -0
  199. package/lib/schema/typebox/gen/codegen/model/model-to-typescript.js.map +1 -0
  200. package/lib/schema/typebox/gen/codegen/model/model-to-valibot.js +218 -0
  201. package/lib/schema/typebox/gen/codegen/model/model-to-valibot.js.map +1 -0
  202. package/lib/schema/typebox/gen/codegen/model/model-to-value.js +43 -0
  203. package/lib/schema/typebox/gen/codegen/model/model-to-value.js.map +1 -0
  204. package/lib/schema/typebox/gen/codegen/model/model-to-yrel.js +206 -0
  205. package/lib/schema/typebox/gen/codegen/model/model-to-yrel.js.map +1 -0
  206. package/lib/schema/typebox/gen/codegen/model/model-to-yup.js +204 -0
  207. package/lib/schema/typebox/gen/codegen/model/model-to-yup.js.map +1 -0
  208. package/lib/schema/typebox/gen/codegen/model/model-to-zod.js +227 -0
  209. package/lib/schema/typebox/gen/codegen/model/model-to-zod.js.map +1 -0
  210. package/lib/schema/typebox/gen/codegen/model/model.js +27 -0
  211. package/lib/schema/typebox/gen/codegen/model/model.js.map +1 -0
  212. package/lib/schema/typebox/gen/codegen/typescript/index.js +4 -0
  213. package/lib/schema/typebox/gen/codegen/typescript/index.js.map +1 -0
  214. package/lib/schema/typebox/gen/codegen/typescript/typescript-to-model.js +48 -0
  215. package/lib/schema/typebox/gen/codegen/typescript/typescript-to-model.js.map +1 -0
  216. package/lib/schema/typebox/gen/codegen/typescript/typescript-to-typebox.js +596 -0
  217. package/lib/schema/typebox/gen/codegen/typescript/typescript-to-typebox.js.map +1 -0
  218. package/lib/schema/typebox/gen/index.js +3 -0
  219. package/lib/schema/typebox/gen/index.js.map +1 -0
  220. package/lib/schema/typebox/index.js +3 -0
  221. package/lib/schema/typebox/index.js.map +1 -0
  222. package/lib/schema/typebox/typebox.js +23 -0
  223. package/lib/schema/typebox/typebox.js.map +1 -0
  224. package/lib/server.js +2 -1
  225. package/lib/server.js.map +1 -1
  226. package/lib/servers/crypto/md5.js +3 -5
  227. package/lib/servers/crypto/md5.js.map +1 -1
  228. package/lib/servers/fetch/createFetchWithProxy.js +2 -4
  229. package/lib/servers/fetch/createFetchWithProxy.js.map +1 -1
  230. package/lib/servers/fetch/createFetchWithProxyByNodeFetch.js +34 -34
  231. package/lib/servers/fetch/createFetchWithProxyByNodeFetch.js.map +1 -1
  232. package/lib/servers/fetch/createFetchWithProxyByUndici.js +59 -45
  233. package/lib/servers/fetch/createFetchWithProxyByUndici.js.map +1 -1
  234. package/lib/servers/getPackageDir.js +8 -10
  235. package/lib/servers/getPackageDir.js.map +1 -1
  236. package/lib/servers/jsdom.js +3 -2
  237. package/lib/servers/jsdom.js.map +1 -1
  238. package/lib/servers/node-fetch.js +4 -3
  239. package/lib/servers/node-fetch.js.map +1 -1
  240. package/lib/servers/polyfill/polyfillBrowser.js +17 -0
  241. package/lib/servers/polyfill/polyfillBrowser.js.map +1 -0
  242. package/lib/servers/polyfill/polyfillCrypto.js +8 -10
  243. package/lib/servers/polyfill/polyfillCrypto.js.map +1 -1
  244. package/lib/servers/polyfill/polyfillFetch.js +23 -22
  245. package/lib/servers/polyfill/polyfillFetch.js.map +1 -1
  246. package/lib/servers/polyfill/polyfillJsDom.js +59 -52
  247. package/lib/servers/polyfill/polyfillJsDom.js.map +1 -1
  248. package/lib/servers/polyfill/polyfillWebSocket.js +13 -13
  249. package/lib/servers/polyfill/polyfillWebSocket.js.map +1 -1
  250. package/lib/servers/ws.js +3 -2
  251. package/lib/servers/ws.js.map +1 -1
  252. package/lib/strings/camelCase.js +51 -49
  253. package/lib/strings/camelCase.js.map +1 -1
  254. package/lib/strings/formatBytes.js +41 -15
  255. package/lib/strings/formatBytes.js.map +1 -1
  256. package/lib/strings/renderTemplate.js +27 -20
  257. package/lib/strings/renderTemplate.js.map +1 -1
  258. package/lib/typedoc.js +4 -0
  259. package/lib/typedoc.js.map +1 -0
  260. package/lib/types/global.d.js +2 -0
  261. package/lib/types/global.d.js.map +1 -0
  262. package/lib/types/index.d.js +6 -0
  263. package/lib/types/index.d.js.map +1 -0
  264. package/lib/validations/asserts.js +14 -0
  265. package/lib/validations/asserts.js.map +1 -0
  266. package/lib/validations/isUUID.js +3 -4
  267. package/lib/validations/isUUID.js.map +1 -1
  268. package/lib/validations/parseTimestamp.js +25 -21
  269. package/lib/validations/parseTimestamp.js.map +1 -1
  270. package/package.json +59 -44
  271. package/src/index.ts +3 -3
  272. package/src/langs/deepFreeze.ts +19 -0
  273. package/src/langs/hashCode.ignored.ts +125 -0
  274. package/src/libs/README.md +2 -0
  275. package/src/logging/slog.ts +121 -0
  276. package/src/maths/clamp.test.ts +19 -0
  277. package/src/maths/clamp.ts +23 -1
  278. package/src/objects/get.ts +14 -14
  279. package/src/objects/set.ts +5 -5
  280. package/src/schema/typebox/gen/codegen/common/encoder.ts +99 -0
  281. package/src/schema/typebox/gen/codegen/common/formatter.ts +31 -0
  282. package/src/schema/typebox/gen/codegen/common/index.ts +29 -0
  283. package/src/schema/typebox/gen/codegen/common/jsdoc.ts +93 -0
  284. package/src/schema/typebox/gen/codegen/expression/compiler.ts +377 -0
  285. package/src/schema/typebox/gen/codegen/expression/errors.ts +302 -0
  286. package/src/schema/typebox/gen/codegen/expression/evaluator.ts +268 -0
  287. package/src/schema/typebox/gen/codegen/expression/expression.ts +538 -0
  288. package/src/schema/typebox/gen/codegen/expression/index.ts +32 -0
  289. package/src/schema/typebox/gen/codegen/index.ts +29 -0
  290. package/src/schema/typebox/gen/codegen/model/index.ts +40 -0
  291. package/src/schema/typebox/gen/codegen/model/model-to-arktype.ts +266 -0
  292. package/src/schema/typebox/gen/codegen/model/model-to-expression.ts +378 -0
  293. package/src/schema/typebox/gen/codegen/model/model-to-grpc.ts +244 -0
  294. package/src/schema/typebox/gen/codegen/model/model-to-io-ts.ts +294 -0
  295. package/src/schema/typebox/gen/codegen/model/model-to-javascript.ts +42 -0
  296. package/src/schema/typebox/gen/codegen/model/model-to-json-schema.ts +166 -0
  297. package/src/schema/typebox/gen/codegen/model/model-to-typebox.ts +32 -0
  298. package/src/schema/typebox/gen/codegen/model/model-to-typescript.ts +189 -0
  299. package/src/schema/typebox/gen/codegen/model/model-to-valibot.ts +236 -0
  300. package/src/schema/typebox/gen/codegen/model/model-to-value.ts +42 -0
  301. package/src/schema/typebox/gen/codegen/model/model-to-yrel.ts +232 -0
  302. package/src/schema/typebox/gen/codegen/model/model-to-yup.ts +226 -0
  303. package/src/schema/typebox/gen/codegen/model/model-to-zod.ts +251 -0
  304. package/src/schema/typebox/gen/codegen/model/model.ts +33 -0
  305. package/src/schema/typebox/gen/codegen/typescript/index.ts +28 -0
  306. package/src/schema/typebox/gen/codegen/typescript/typescript-to-model.ts +61 -0
  307. package/src/schema/typebox/gen/codegen/typescript/typescript-to-typebox.ts +647 -0
  308. package/src/schema/typebox/gen/gen.test.ts +12 -0
  309. package/src/schema/typebox/gen/index.ts +1 -0
  310. package/src/schema/typebox/index.ts +1 -0
  311. package/src/schema/typebox/typebox.ts +34 -0
  312. package/src/servers/fetch/createFetchWithProxyByUndici.ts +16 -1
  313. package/src/types/index.d.ts +1 -0
  314. package/dist/LICENSE.txt +0 -1
  315. package/dist/cjs/getGlobalThis-304f74e0.js +0 -2
  316. package/dist/cjs/getGlobalThis-304f74e0.js.map +0 -1
  317. package/dist/cjs/index.cjs +0 -21
  318. package/dist/cjs/index.cjs.map +0 -1
  319. package/dist/cjs/server.cjs +0 -2
  320. package/dist/cjs/server.cjs.map +0 -1
  321. package/dist/cjs/servers/jsdom.cjs +0 -2
  322. package/dist/cjs/servers/jsdom.cjs.map +0 -1
  323. package/dist/cjs/servers/node-fetch.cjs +0 -2
  324. package/dist/cjs/servers/node-fetch.cjs.map +0 -1
  325. package/dist/cjs/servers/ws.cjs +0 -2
  326. package/dist/cjs/servers/ws.cjs.map +0 -1
  327. package/dist/esm/getGlobalThis-b7ad0cf9.js +0 -2
  328. package/dist/esm/getGlobalThis-b7ad0cf9.js.map +0 -1
  329. package/dist/esm/index.js +0 -21
  330. package/dist/esm/index.js.map +0 -1
  331. package/dist/esm/server.js +0 -2
  332. package/dist/esm/server.js.map +0 -1
  333. package/dist/esm/servers/jsdom.js +0 -2
  334. package/dist/esm/servers/jsdom.js.map +0 -1
  335. package/dist/esm/servers/node-fetch.js +0 -2
  336. package/dist/esm/servers/node-fetch.js.map +0 -1
  337. package/dist/esm/servers/ws.js +0 -2
  338. package/dist/esm/servers/ws.js.map +0 -1
  339. package/dist/system/getGlobalThis-8951eb0e.js +0 -2
  340. package/dist/system/getGlobalThis-8951eb0e.js.map +0 -1
  341. package/dist/system/index.js +0 -21
  342. package/dist/system/index.js.map +0 -1
  343. package/dist/system/server.js +0 -2
  344. package/dist/system/server.js.map +0 -1
  345. package/dist/system/servers/jsdom.js +0 -2
  346. package/dist/system/servers/jsdom.js.map +0 -1
  347. package/dist/system/servers/node-fetch.js +0 -2
  348. package/dist/system/servers/node-fetch.js.map +0 -1
  349. package/dist/system/servers/ws.js +0 -2
  350. package/dist/system/servers/ws.js.map +0 -1
  351. package/src/langs/hashCode.ts +0 -37
@@ -1 +1 @@
1
- {"version":3,"file":"pem.js","sources":["../../../src/crypto/pem/pem.ts"],"sourcesContent":["import { ArrayBuffers } from '../../io/ArrayBuffers';\n\nexport interface Block {\n /**\n * @see https://github.com/openssl/openssl/blob/master/include/openssl/pem.h#L35-L60 openssl/pem.h\n */\n type:\n | string\n | `${'RSA' | 'DSA'} ${'PRIVATE' | 'PUBLIC'} KEY`\n | `${'X509' | 'TRUSTED'} CERTIFICATE`\n | 'CERTIFICATE'\n | 'X509 CRL'\n | 'CERTIFICATE REQUEST'\n | 'NEW CERTIFICATE REQUEST'\n | 'ANY PRIVATE KEY'\n | 'PUBLIC KEY'\n | 'PKCS7'\n | 'PKCS #7 SIGNED DATA'\n | 'ENCRYPTED PRIVATE KEY'\n | 'PRIVATE KEY'\n | 'DH PARAMETERS'\n | 'X9.42 DH PARAMETERS'\n | 'SSL SESSION PARAMETERS'\n | 'DSA PARAMETERS'\n | 'ECDSA PUBLIC KEY'\n | 'EC PARAMETERS'\n | 'EC PRIVATE KEY'\n | 'PARAMETERS'\n | 'CMS'\n | 'SM2 PARAMETERS';\n\n header: Record<string, string>;\n bytes: BufferSource;\n}\n\nexport class PEM {\n static decode(data: string): { block: Block; tail: string; head: string } {\n const match = data.match(\n /^-----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,\n );\n if (!match?.groups) throw new Error('Invalid PEM data');\n const { type, headers = '', data: b64 } = match.groups;\n const header = headers\n .split('\\n')\n .filter((v) => v.trim())\n .map((h) => {\n const [k, ...v] = h.split(':');\n return [k.trim(), v.join(':').trim()];\n })\n .reduce((a, [k, v]) => ({ ...a, [k]: v }), {});\n return {\n block: {\n type,\n header,\n // avoid replaceAll\n bytes: ArrayBuffers.from(b64.replace(/[\\r\\n]/g, ''), 'base64'),\n },\n head: data.slice(0, match.index || 0),\n tail: data.slice((match.index || 0) + match[0].length),\n };\n }\n\n static encode(block: { type: string; bytes: string | BufferSource; header?: Record<string, string> }): string {\n const { type, header, bytes } = block;\n const headers = Object.entries(header || {})\n .map(([k, v]) => `${k}: ${v}`)\n .join('\\n');\n return `-----BEGIN ${type}-----\\n${headers}${headers.length ? '\\n\\n' : ''}${\n ArrayBuffers.toString(bytes, 'base64')\n .match(/.{1,64}/g)\n ?.join('\\n') || ''\n }\\n-----END ${type}-----\\n`;\n }\n}\n"],"names":[],"mappings":";;AAmCO,MAAM,GAAI,CAAA;AAAA,EACf,OAAO,OAAO,IAA4D,EAAA;AACxE,IAAA,MAAM,QAAQ,IAAK,CAAA,KAAA;AAAA,MACjB,gJAAA;AAAA,KACF,CAAA;AACA,IAAA,IAAI,EAAC,KAAO,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,MAAA,CAAA;AAAQ,MAAM,MAAA,IAAI,MAAM,kBAAkB,CAAA,CAAA;AACtD,IAAA,MAAM,EAAE,IAAM,EAAA,OAAA,GAAU,IAAI,IAAM,EAAA,GAAA,KAAQ,KAAM,CAAA,MAAA,CAAA;AAChD,IAAA,MAAM,MAAS,GAAA,OAAA,CACZ,KAAM,CAAA,IAAI,EACV,MAAO,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,IAAK,EAAC,CACtB,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA;AACV,MAAA,MAAM,CAAC,CAAG,EAAA,GAAG,CAAC,CAAI,GAAA,CAAA,CAAE,MAAM,GAAG,CAAA,CAAA;AAC7B,MAAO,OAAA,CAAC,EAAE,IAAK,EAAA,EAAG,EAAE,IAAK,CAAA,GAAG,CAAE,CAAA,IAAA,EAAM,CAAA,CAAA;AAAA,KACrC,CACA,CAAA,MAAA,CAAO,CAAC,CAAG,EAAA,CAAC,GAAG,CAAC,CAAA,MAAO,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAE,EAAA,CAAA,EAAI,EAAE,CAAA,CAAA;AAC/C,IAAO,OAAA;AAAA,MACL,KAAO,EAAA;AAAA,QACL,IAAA;AAAA,QACA,MAAA;AAAA;AAAA,QAEA,KAAA,EAAO,aAAa,IAAK,CAAA,GAAA,CAAI,QAAQ,SAAW,EAAA,EAAE,GAAG,QAAQ,CAAA;AAAA,OAC/D;AAAA,MACA,MAAM,IAAK,CAAA,KAAA,CAAM,CAAG,EAAA,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA,MACpC,IAAA,EAAM,KAAK,KAAO,CAAA,CAAA,KAAA,CAAM,SAAS,CAAK,IAAA,KAAA,CAAM,CAAC,CAAA,CAAE,MAAM,CAAA;AAAA,KACvD,CAAA;AAAA,GACF;AAAA,EAEA,OAAO,OAAO,KAAgG,EAAA;AA9DhH,IAAA,IAAA,EAAA,CAAA;AA+DI,IAAA,MAAM,EAAE,IAAA,EAAM,MAAQ,EAAA,KAAA,EAAU,GAAA,KAAA,CAAA;AAChC,IAAM,MAAA,OAAA,GAAU,OAAO,OAAQ,CAAA,MAAA,IAAU,EAAE,CAAA,CACxC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA,KAAM,GAAG,CAAC,CAAA,EAAA,EAAK,CAAC,CAAE,CAAA,CAAA,CAC5B,KAAK,IAAI,CAAA,CAAA;AACZ,IAAA,OAAO,cAAc,IAAI,CAAA;AAAA,EAAU,OAAO,CAAG,EAAA,OAAA,CAAQ,SAAS,MAAS,GAAA,EAAE,KACvE,EAAa,GAAA,YAAA,CAAA,QAAA,CAAS,KAAO,EAAA,QAAQ,EAClC,KAAM,CAAA,UAAU,MADnB,IAEI,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAK,UAAS,EACpB,CAAA;AAAA,SAAA,EAAc,IAAI,CAAA;AAAA,CAAA,CAAA;AAAA,GACpB;AACF;;;;"}
1
+ {"version":3,"sources":["../../../src/crypto/pem/pem.ts"],"sourcesContent":["import { ArrayBuffers } from '../../io/ArrayBuffers';\n\nexport interface Block {\n /**\n * @see https://github.com/openssl/openssl/blob/master/include/openssl/pem.h#L35-L60 openssl/pem.h\n */\n type:\n | string\n | `${'RSA' | 'DSA'} ${'PRIVATE' | 'PUBLIC'} KEY`\n | `${'X509' | 'TRUSTED'} CERTIFICATE`\n | 'CERTIFICATE'\n | 'X509 CRL'\n | 'CERTIFICATE REQUEST'\n | 'NEW CERTIFICATE REQUEST'\n | 'ANY PRIVATE KEY'\n | 'PUBLIC KEY'\n | 'PKCS7'\n | 'PKCS #7 SIGNED DATA'\n | 'ENCRYPTED PRIVATE KEY'\n | 'PRIVATE KEY'\n | 'DH PARAMETERS'\n | 'X9.42 DH PARAMETERS'\n | 'SSL SESSION PARAMETERS'\n | 'DSA PARAMETERS'\n | 'ECDSA PUBLIC KEY'\n | 'EC PARAMETERS'\n | 'EC PRIVATE KEY'\n | 'PARAMETERS'\n | 'CMS'\n | 'SM2 PARAMETERS';\n\n header: Record<string, string>;\n bytes: BufferSource;\n}\n\nexport class PEM {\n static decode(data: string): { block: Block; tail: string; head: string } {\n const match = data.match(\n /^-----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,\n );\n if (!match?.groups) throw new Error('Invalid PEM data');\n const { type, headers = '', data: b64 } = match.groups;\n const header = headers\n .split('\\n')\n .filter((v) => v.trim())\n .map((h) => {\n const [k, ...v] = h.split(':');\n return [k.trim(), v.join(':').trim()];\n })\n .reduce((a, [k, v]) => ({ ...a, [k]: v }), {});\n return {\n block: {\n type,\n header,\n // avoid replaceAll\n bytes: ArrayBuffers.from(b64.replace(/[\\r\\n]/g, ''), 'base64'),\n },\n head: data.slice(0, match.index || 0),\n tail: data.slice((match.index || 0) + match[0].length),\n };\n }\n\n static encode(block: { type: string; bytes: string | BufferSource; header?: Record<string, string> }): string {\n const { type, header, bytes } = block;\n const headers = Object.entries(header || {})\n .map(([k, v]) => `${k}: ${v}`)\n .join('\\n');\n return `-----BEGIN ${type}-----\\n${headers}${headers.length ? '\\n\\n' : ''}${\n ArrayBuffers.toString(bytes, 'base64')\n .match(/.{1,64}/g)\n ?.join('\\n') || ''\n }\\n-----END ${type}-----\\n`;\n }\n}\n"],"names":["ArrayBuffers","PEM","decode","data","match","groups","Error","type","headers","b64","header","split","filter","v","trim","map","h","k","join","reduce","a","block","bytes","from","replace","head","slice","index","tail","length","encode","Object","entries","toString"],"mappings":"AAAA,SAASA,YAAY,QAAQ,wBAAwB;AAmCrD,OAAO,MAAMC;IACX,OAAOC,OAAOC,IAAY,EAAgD;QACxE,MAAMC,QAAQD,KAAKC,KAAK,CACtB;QAEF,IAAI,CAACA,OAAOC,QAAQ,MAAM,IAAIC,MAAM;QACpC,MAAM,EAAEC,IAAI,EAAEC,UAAU,EAAE,EAAEL,MAAMM,GAAG,EAAE,GAAGL,MAAMC,MAAM;QACtD,MAAMK,SAASF,QACZG,KAAK,CAAC,MACNC,MAAM,CAAC,CAACC,IAAMA,EAAEC,IAAI,IACpBC,GAAG,CAAC,CAACC;YACJ,MAAM,CAACC,GAAG,GAAGJ,EAAE,GAAGG,EAAEL,KAAK,CAAC;YAC1B,OAAO;gBAACM,EAAEH,IAAI;gBAAID,EAAEK,IAAI,CAAC,KAAKJ,IAAI;aAAG;QACvC,GACCK,MAAM,CAAC,CAACC,GAAG,CAACH,GAAGJ,EAAE,GAAM,CAAA;gBAAE,GAAGO,CAAC;gBAAE,CAACH,EAAE,EAAEJ;YAAE,CAAA,GAAI,CAAC;QAC9C,OAAO;YACLQ,OAAO;gBACLd;gBACAG;gBACA,oBAAoB;gBACpBY,OAAOtB,aAAauB,IAAI,CAACd,IAAIe,OAAO,CAAC,WAAW,KAAK;YACvD;YACAC,MAAMtB,KAAKuB,KAAK,CAAC,GAAGtB,MAAMuB,KAAK,IAAI;YACnCC,MAAMzB,KAAKuB,KAAK,CAAC,AAACtB,CAAAA,MAAMuB,KAAK,IAAI,CAAA,IAAKvB,KAAK,CAAC,EAAE,CAACyB,MAAM;QACvD;IACF;IAEA,OAAOC,OAAOT,KAAsF,EAAU;QAC5G,MAAM,EAAEd,IAAI,EAAEG,MAAM,EAAEY,KAAK,EAAE,GAAGD;QAChC,MAAMb,UAAUuB,OAAOC,OAAO,CAACtB,UAAU,CAAC,GACvCK,GAAG,CAAC,CAAC,CAACE,GAAGJ,EAAE,GAAK,CAAC,EAAEI,EAAE,EAAE,EAAEJ,EAAE,CAAC,EAC5BK,IAAI,CAAC;QACR,OAAO,CAAC,WAAW,EAAEX,KAAK,OAAO,EAAEC,QAAQ,EAAEA,QAAQqB,MAAM,GAAG,SAAS,GAAG,EACxE7B,aAAaiC,QAAQ,CAACX,OAAO,UAC1BlB,KAAK,CAAC,aACLc,KAAK,SAAS,GACnB,WAAW,EAAEX,KAAK,OAAO,CAAC;IAC7B;AACF"}
@@ -1,15 +1,16 @@
1
1
  import { getGlobalThis } from '../isomorphics/getGlobalThis.js';
2
-
3
- var _a, _b;
4
2
  const globalThis = getGlobalThis();
5
- const randomUUID = ((_b = (_a = globalThis.crypto) == null ? void 0 : _a.randomUUID) == null ? void 0 : _b.bind(globalThis.crypto)) || _randomUUID;
6
- function _randomUUID() {
7
- return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
8
- const r = Math.random() * 16 | 0;
9
- const v = c === "x" ? r : r & 3 | 8;
10
- return v.toString(16);
11
- });
3
+ /**
4
+ * generate random UUIDv4
5
+ */ export const randomUUID = globalThis.crypto?.randomUUID?.bind(globalThis.crypto) || _randomUUID;
6
+ /**
7
+ * @internal
8
+ */ export function _randomUUID() {
9
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c)=>{
10
+ const r = Math.random() * 16 | 0;
11
+ const v = c === 'x' ? r : r & 0x3 | 0x8;
12
+ return v.toString(16);
13
+ });
12
14
  }
13
15
 
14
- export { _randomUUID, randomUUID };
15
- //# sourceMappingURL=randomUUID.js.map
16
+ //# sourceMappingURL=randomUUID.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"randomUUID.js","sources":["../../src/crypto/randomUUID.ts"],"sourcesContent":["import { getGlobalThis } from '../isomorphics/getGlobalThis';\n\nconst globalThis = getGlobalThis();\n\n/**\n * generate random UUIDv4\n */\nexport const randomUUID: () => string = globalThis.crypto?.randomUUID?.bind(globalThis.crypto) || _randomUUID;\n\n/**\n * @internal\n */\nexport function _randomUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n"],"names":[],"mappings":";;AAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAEA,MAAM,aAAa,aAAc,EAAA,CAAA;AAKpB,MAAA,UAAA,GAAA,CAAA,CAA2B,sBAAW,MAAX,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAmB,eAAnB,IAA+B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAK,WAAW,MAAW,CAAA,KAAA,YAAA;AAK3F,SAAS,WAAc,GAAA;AAC5B,EAAA,OAAO,sCAAuC,CAAA,OAAA,CAAQ,OAAS,EAAA,CAAC,CAAM,KAAA;AACpE,IAAA,MAAM,CAAK,GAAA,IAAA,CAAK,MAAO,EAAA,GAAI,EAAM,GAAA,CAAA,CAAA;AACjC,IAAA,MAAM,CAAI,GAAA,CAAA,KAAM,GAAM,GAAA,CAAA,GAAK,IAAI,CAAO,GAAA,CAAA,CAAA;AACtC,IAAO,OAAA,CAAA,CAAE,SAAS,EAAE,CAAA,CAAA;AAAA,GACrB,CAAA,CAAA;AACH;;;;"}
1
+ {"version":3,"sources":["../../src/crypto/randomUUID.ts"],"sourcesContent":["import { getGlobalThis } from '../isomorphics/getGlobalThis';\n\nconst globalThis = getGlobalThis();\n\n/**\n * generate random UUIDv4\n */\nexport const randomUUID: () => string = globalThis.crypto?.randomUUID?.bind(globalThis.crypto) || _randomUUID;\n\n/**\n * @internal\n */\nexport function _randomUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n"],"names":["getGlobalThis","globalThis","randomUUID","crypto","bind","_randomUUID","replace","c","r","Math","random","v","toString"],"mappings":"AAAA,SAASA,aAAa,QAAQ,+BAA+B;AAE7D,MAAMC,aAAaD;AAEnB;;CAEC,GACD,OAAO,MAAME,aAA2BD,WAAWE,MAAM,EAAED,YAAYE,KAAKH,WAAWE,MAAM,KAAKE,YAAY;AAE9G;;CAEC,GACD,OAAO,SAASA;IACd,OAAO,uCAAuCC,OAAO,CAAC,SAAS,CAACC;QAC9D,MAAMC,IAAI,AAACC,KAAKC,MAAM,KAAK,KAAM;QACjC,MAAMC,IAAIJ,MAAM,MAAMC,IAAI,AAACA,IAAI,MAAO;QACtC,OAAOG,EAAEC,QAAQ,CAAC;IACpB;AACF"}
@@ -1,142 +1,153 @@
1
1
  import { getRandomValues } from './getRandomValues.js';
2
-
3
2
  function createError(message) {
4
- const err = new Error(message);
5
- err.source = "ulid";
6
- return err;
3
+ const err = new Error(message);
4
+ err.source = 'ulid';
5
+ return err;
7
6
  }
8
- const ENCODING = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
7
+ // These values should NEVER change. If
8
+ // they do, we're no longer making ulids!
9
+ const ENCODING = '0123456789ABCDEFGHJKMNPQRSTVWXYZ'; // Crockford's Base32
9
10
  const ENCODING_LEN = ENCODING.length;
10
11
  const TIME_MAX = Math.pow(2, 48) - 1;
11
12
  const TIME_LEN = 10;
12
13
  const RANDOM_LEN = 16;
13
- function isULID(str) {
14
- if (!str) {
15
- return false;
16
- }
17
- return str.length === 26 && /^[0-9A-HJKMNP-TV-Z]{26}$/i.test(str);
14
+ /**
15
+ * check give {@link str} is a valid ulid
16
+ */ export function isULID(str) {
17
+ if (!str) {
18
+ return false;
19
+ }
20
+ // ttttttttttrrrrrrrrrrrrrrrr
21
+ return str.length === 26 && /^[0-9A-HJKMNP-TV-Z]{26}$/i.test(str);
18
22
  }
19
23
  function replaceCharAt(str, index, char) {
20
- if (index > str.length - 1) {
21
- return str;
22
- }
23
- return str.substr(0, index) + char + str.substr(index + 1);
24
+ if (index > str.length - 1) {
25
+ return str;
26
+ }
27
+ return str.substr(0, index) + char + str.substr(index + 1);
24
28
  }
25
29
  function incrementBase32(str) {
26
- let done;
27
- let index = str.length;
28
- let char;
29
- let charIndex;
30
- const maxCharIndex = ENCODING_LEN - 1;
31
- while (!done && index-- >= 0) {
32
- char = str[index];
33
- charIndex = ENCODING.indexOf(char);
34
- if (charIndex === -1) {
35
- throw createError("incorrectly encoded string");
30
+ let done;
31
+ let index = str.length;
32
+ let char;
33
+ let charIndex;
34
+ const maxCharIndex = ENCODING_LEN - 1;
35
+ while(!done && index-- >= 0){
36
+ char = str[index];
37
+ charIndex = ENCODING.indexOf(char);
38
+ if (charIndex === -1) {
39
+ throw createError('incorrectly encoded string');
40
+ }
41
+ if (charIndex === maxCharIndex) {
42
+ str = replaceCharAt(str, index, ENCODING[0]);
43
+ continue;
44
+ }
45
+ done = replaceCharAt(str, index, ENCODING[charIndex + 1]);
36
46
  }
37
- if (charIndex === maxCharIndex) {
38
- str = replaceCharAt(str, index, ENCODING[0]);
39
- continue;
47
+ if (typeof done === 'string') {
48
+ return done;
40
49
  }
41
- done = replaceCharAt(str, index, ENCODING[charIndex + 1]);
42
- }
43
- if (typeof done === "string") {
44
- return done;
45
- }
46
- throw createError("cannot increment this string");
50
+ throw createError('cannot increment this string');
47
51
  }
48
52
  function randomChar(prng) {
49
- let rand = Math.floor(prng() * ENCODING_LEN);
50
- if (rand === ENCODING_LEN) {
51
- rand = ENCODING_LEN - 1;
52
- }
53
- return ENCODING.charAt(rand);
53
+ let rand = Math.floor(prng() * ENCODING_LEN);
54
+ if (rand === ENCODING_LEN) {
55
+ rand = ENCODING_LEN - 1;
56
+ }
57
+ return ENCODING.charAt(rand);
54
58
  }
55
59
  function encodeTime(now, len) {
56
- if (isNaN(now)) {
57
- throw new Error(`${now} must be a number`);
58
- }
59
- if (now > TIME_MAX) {
60
- throw createError(`cannot encode time greater than ${TIME_MAX}`);
61
- }
62
- if (now < 0) {
63
- throw createError("time must be positive");
64
- }
65
- if (!Number.isInteger(now)) {
66
- throw createError("time must be an integer");
67
- }
68
- let mod;
69
- let str = "";
70
- for (; len > 0; len--) {
71
- mod = now % ENCODING_LEN;
72
- str = ENCODING.charAt(mod) + str;
73
- now = (now - mod) / ENCODING_LEN;
74
- }
75
- return str;
60
+ if (isNaN(now)) {
61
+ throw new Error(`${now} must be a number`);
62
+ }
63
+ if (now > TIME_MAX) {
64
+ throw createError(`cannot encode time greater than ${TIME_MAX}`);
65
+ }
66
+ if (now < 0) {
67
+ throw createError('time must be positive');
68
+ }
69
+ if (!Number.isInteger(now)) {
70
+ throw createError('time must be an integer');
71
+ }
72
+ let mod;
73
+ let str = '';
74
+ for(; len > 0; len--){
75
+ mod = now % ENCODING_LEN;
76
+ str = ENCODING.charAt(mod) + str;
77
+ now = (now - mod) / ENCODING_LEN;
78
+ }
79
+ return str;
76
80
  }
77
81
  function encodeRandom(len, prng) {
78
- let str = "";
79
- for (; len > 0; len--) {
80
- str = randomChar(prng) + str;
81
- }
82
- return str;
82
+ let str = '';
83
+ for(; len > 0; len--){
84
+ str = randomChar(prng) + str;
85
+ }
86
+ return str;
83
87
  }
84
- function parseULID(id) {
85
- if (id.length !== TIME_LEN + RANDOM_LEN) {
86
- throw createError("malformed ulid");
87
- }
88
- const time = id.substr(0, TIME_LEN).split("").reverse().reduce((carry, char, index) => {
89
- const encodingIndex = ENCODING.indexOf(char);
90
- if (encodingIndex === -1) {
91
- throw createError("invalid character found: " + char);
88
+ /**
89
+ * extract time & random from ulid
90
+ *
91
+ * @throws ULIDError
92
+ */ export function parseULID(id) {
93
+ if (id.length !== TIME_LEN + RANDOM_LEN) {
94
+ throw createError('malformed ulid');
92
95
  }
93
- return carry += encodingIndex * Math.pow(ENCODING_LEN, index);
94
- }, 0);
95
- if (time > TIME_MAX) {
96
- throw createError("malformed ulid, timestamp too large");
97
- }
98
- return { timestamp: time, random: id.substring(TIME_LEN) };
96
+ const time = id.substr(0, TIME_LEN).split('').reverse().reduce((carry, char, index)=>{
97
+ const encodingIndex = ENCODING.indexOf(char);
98
+ if (encodingIndex === -1) {
99
+ throw createError('invalid character found: ' + char);
100
+ }
101
+ return carry += encodingIndex * Math.pow(ENCODING_LEN, index);
102
+ }, 0);
103
+ if (time > TIME_MAX) {
104
+ throw createError('malformed ulid, timestamp too large');
105
+ }
106
+ return {
107
+ timestamp: time,
108
+ random: id.substring(TIME_LEN)
109
+ };
99
110
  }
100
111
  function createPrng() {
101
- return () => {
102
- const buffer = new Uint8Array(1);
103
- getRandomValues(buffer);
104
- return buffer[0] / 255;
105
- };
106
- }
107
- function createULID({
108
- monotonic = true,
109
- random = createPrng(),
110
- now = Date.now
111
- } = {}) {
112
- if (!monotonic) {
113
- return function ulid2(seedTime) {
114
- seedTime || (seedTime = now());
115
- return encodeTime(seedTime, TIME_LEN) + encodeRandom(RANDOM_LEN, random);
112
+ return ()=>{
113
+ const buffer = new Uint8Array(1);
114
+ getRandomValues(buffer);
115
+ return buffer[0] / 0xff;
116
116
  };
117
- }
118
- let lastTime = 0;
119
- let lastRandom;
120
- return function ulid2(seedTime) {
121
- seedTime || (seedTime = now());
122
- if (seedTime <= lastTime && lastRandom) {
123
- const incrementedRandom = lastRandom = incrementBase32(lastRandom);
124
- return encodeTime(lastTime, TIME_LEN) + incrementedRandom;
117
+ }
118
+ /**
119
+ * create a ulid generator
120
+ */ export function createULID({ monotonic = true, random = createPrng(), now = Date.now } = {}) {
121
+ if (!monotonic) {
122
+ return function ulid(seedTime) {
123
+ seedTime ||= now();
124
+ return encodeTime(seedTime, TIME_LEN) + encodeRandom(RANDOM_LEN, random);
125
+ };
125
126
  }
126
- lastTime = seedTime;
127
- const newRandom = lastRandom = encodeRandom(RANDOM_LEN, random);
128
- return encodeTime(seedTime, TIME_LEN) + newRandom;
129
- };
127
+ let lastTime = 0;
128
+ let lastRandom;
129
+ return function ulid(seedTime) {
130
+ seedTime ||= now();
131
+ if (seedTime <= lastTime && lastRandom) {
132
+ const incrementedRandom = lastRandom = incrementBase32(lastRandom);
133
+ return encodeTime(lastTime, TIME_LEN) + incrementedRandom;
134
+ }
135
+ lastTime = seedTime;
136
+ const newRandom = lastRandom = encodeRandom(RANDOM_LEN, random);
137
+ return encodeTime(seedTime, TIME_LEN) + newRandom;
138
+ };
130
139
  }
131
- let ulid = (...args) => {
132
- if (_real) {
140
+ /**
141
+ * default monotonic ulid generator
142
+ */ export let ulid = (...args)=>{
143
+ if (_real) {
144
+ return _real(...args);
145
+ }
146
+ // delay initialize crypto
147
+ _real = createULID();
148
+ ulid = _real;
133
149
  return _real(...args);
134
- }
135
- _real = createULID();
136
- ulid = _real;
137
- return _real(...args);
138
150
  };
139
151
  let _real;
140
152
 
141
- export { createULID, isULID, parseULID, ulid };
142
- //# sourceMappingURL=ulid.js.map
153
+ //# sourceMappingURL=ulid.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ulid.js","sources":["../../src/crypto/ulid.ts"],"sourcesContent":["import { getRandomValues } from './getRandomValues';\n\ntype PRNG = () => number;\n\n/**\n * Universally Unique Lexicographically Sortable Identifier\n *\n * @see https://github.com/ulid/spec ulid/spec\n */\nexport type ULID = (seedTime?: number) => string;\n\nexport interface ULIDError extends Error {\n source: string;\n}\n\nfunction createError(message: string): ULIDError {\n const err = new Error(message) as ULIDError;\n err.source = 'ulid';\n return err;\n}\n\n// These values should NEVER change. If\n// they do, we're no longer making ulids!\nconst ENCODING = '0123456789ABCDEFGHJKMNPQRSTVWXYZ'; // Crockford's Base32\nconst ENCODING_LEN = ENCODING.length;\nconst TIME_MAX = Math.pow(2, 48) - 1;\nconst TIME_LEN = 10;\nconst RANDOM_LEN = 16;\n\n/**\n * check give {@link str} is a valid ulid\n */\nexport function isULID(str: string | undefined | null): boolean {\n if (!str) {\n return false;\n }\n // ttttttttttrrrrrrrrrrrrrrrr\n return str.length === 26 && /^[0-9A-HJKMNP-TV-Z]{26}$/i.test(str);\n}\n\nfunction replaceCharAt(str: string, index: number, char: string) {\n if (index > str.length - 1) {\n return str;\n }\n return str.substr(0, index) + char + str.substr(index + 1);\n}\n\nfunction incrementBase32(str: string): string {\n let done;\n let index = str.length;\n let char;\n let charIndex;\n const maxCharIndex = ENCODING_LEN - 1;\n while (!done && index-- >= 0) {\n char = str[index];\n charIndex = ENCODING.indexOf(char);\n if (charIndex === -1) {\n throw createError('incorrectly encoded string');\n }\n if (charIndex === maxCharIndex) {\n str = replaceCharAt(str, index, ENCODING[0]);\n continue;\n }\n done = replaceCharAt(str, index, ENCODING[charIndex + 1]);\n }\n if (typeof done === 'string') {\n return done;\n }\n throw createError('cannot increment this string');\n}\n\nfunction randomChar(prng: PRNG): string {\n let rand = Math.floor(prng() * ENCODING_LEN);\n if (rand === ENCODING_LEN) {\n rand = ENCODING_LEN - 1;\n }\n return ENCODING.charAt(rand);\n}\n\nfunction encodeTime(now: number, len: number): string {\n if (isNaN(now)) {\n throw new Error(`${now} must be a number`);\n }\n if (now > TIME_MAX) {\n throw createError(`cannot encode time greater than ${TIME_MAX}`);\n }\n if (now < 0) {\n throw createError('time must be positive');\n }\n if (!Number.isInteger(now)) {\n throw createError('time must be an integer');\n }\n let mod;\n let str = '';\n for (; len > 0; len--) {\n mod = now % ENCODING_LEN;\n str = ENCODING.charAt(mod) + str;\n now = (now - mod) / ENCODING_LEN;\n }\n return str;\n}\n\nfunction encodeRandom(len: number, prng: PRNG): string {\n let str = '';\n for (; len > 0; len--) {\n str = randomChar(prng) + str;\n }\n return str;\n}\n\n/**\n * extract time & random from ulid\n *\n * @throws ULIDError\n */\nexport function parseULID(id: string): { timestamp: number; random: string } {\n if (id.length !== TIME_LEN + RANDOM_LEN) {\n throw createError('malformed ulid');\n }\n const time = id\n .substr(0, TIME_LEN)\n .split('')\n .reverse()\n .reduce((carry, char, index) => {\n const encodingIndex = ENCODING.indexOf(char);\n if (encodingIndex === -1) {\n throw createError('invalid character found: ' + char);\n }\n return (carry += encodingIndex * Math.pow(ENCODING_LEN, index));\n }, 0);\n if (time > TIME_MAX) {\n throw createError('malformed ulid, timestamp too large');\n }\n return { timestamp: time, random: id.substring(TIME_LEN) };\n}\n\nfunction createPrng(): PRNG {\n return () => {\n const buffer = new Uint8Array(1);\n getRandomValues(buffer);\n return buffer[0] / 0xff;\n };\n}\n\n/**\n * create a ulid generator\n */\nexport function createULID({\n monotonic = true,\n random = createPrng(),\n now = Date.now,\n}: { monotonic?: boolean; now?: () => number; random?: () => number } = {}) {\n if (!monotonic) {\n return function ulid(seedTime?: number): string {\n seedTime ||= now();\n return encodeTime(seedTime, TIME_LEN) + encodeRandom(RANDOM_LEN, random);\n };\n }\n\n let lastTime: number = 0;\n let lastRandom: string;\n return function ulid(seedTime?: number): string {\n seedTime ||= now();\n if (seedTime <= lastTime && lastRandom) {\n const incrementedRandom = (lastRandom = incrementBase32(lastRandom));\n return encodeTime(lastTime, TIME_LEN) + incrementedRandom;\n }\n lastTime = seedTime;\n const newRandom = (lastRandom = encodeRandom(RANDOM_LEN, random));\n return encodeTime(seedTime, TIME_LEN) + newRandom;\n };\n}\n\n/**\n * default monotonic ulid generator\n */\nexport let ulid: ULID = (...args) => {\n if (_real) {\n return _real(...args);\n }\n // delay initialize crypto\n _real = createULID();\n ulid = _real;\n return _real(...args);\n};\nlet _real: ULID;\n"],"names":["ulid"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/crypto/ulid.ts"],"sourcesContent":["import { getRandomValues } from './getRandomValues';\n\ntype PRNG = () => number;\n\n/**\n * Universally Unique Lexicographically Sortable Identifier\n *\n * @see https://github.com/ulid/spec ulid/spec\n */\nexport type ULID = (seedTime?: number) => string;\n\nexport interface ULIDError extends Error {\n source: string;\n}\n\nfunction createError(message: string): ULIDError {\n const err = new Error(message) as ULIDError;\n err.source = 'ulid';\n return err;\n}\n\n// These values should NEVER change. If\n// they do, we're no longer making ulids!\nconst ENCODING = '0123456789ABCDEFGHJKMNPQRSTVWXYZ'; // Crockford's Base32\nconst ENCODING_LEN = ENCODING.length;\nconst TIME_MAX = Math.pow(2, 48) - 1;\nconst TIME_LEN = 10;\nconst RANDOM_LEN = 16;\n\n/**\n * check give {@link str} is a valid ulid\n */\nexport function isULID(str: string | undefined | null): boolean {\n if (!str) {\n return false;\n }\n // ttttttttttrrrrrrrrrrrrrrrr\n return str.length === 26 && /^[0-9A-HJKMNP-TV-Z]{26}$/i.test(str);\n}\n\nfunction replaceCharAt(str: string, index: number, char: string) {\n if (index > str.length - 1) {\n return str;\n }\n return str.substr(0, index) + char + str.substr(index + 1);\n}\n\nfunction incrementBase32(str: string): string {\n let done;\n let index = str.length;\n let char;\n let charIndex;\n const maxCharIndex = ENCODING_LEN - 1;\n while (!done && index-- >= 0) {\n char = str[index];\n charIndex = ENCODING.indexOf(char);\n if (charIndex === -1) {\n throw createError('incorrectly encoded string');\n }\n if (charIndex === maxCharIndex) {\n str = replaceCharAt(str, index, ENCODING[0]);\n continue;\n }\n done = replaceCharAt(str, index, ENCODING[charIndex + 1]);\n }\n if (typeof done === 'string') {\n return done;\n }\n throw createError('cannot increment this string');\n}\n\nfunction randomChar(prng: PRNG): string {\n let rand = Math.floor(prng() * ENCODING_LEN);\n if (rand === ENCODING_LEN) {\n rand = ENCODING_LEN - 1;\n }\n return ENCODING.charAt(rand);\n}\n\nfunction encodeTime(now: number, len: number): string {\n if (isNaN(now)) {\n throw new Error(`${now} must be a number`);\n }\n if (now > TIME_MAX) {\n throw createError(`cannot encode time greater than ${TIME_MAX}`);\n }\n if (now < 0) {\n throw createError('time must be positive');\n }\n if (!Number.isInteger(now)) {\n throw createError('time must be an integer');\n }\n let mod;\n let str = '';\n for (; len > 0; len--) {\n mod = now % ENCODING_LEN;\n str = ENCODING.charAt(mod) + str;\n now = (now - mod) / ENCODING_LEN;\n }\n return str;\n}\n\nfunction encodeRandom(len: number, prng: PRNG): string {\n let str = '';\n for (; len > 0; len--) {\n str = randomChar(prng) + str;\n }\n return str;\n}\n\n/**\n * extract time & random from ulid\n *\n * @throws ULIDError\n */\nexport function parseULID(id: string): { timestamp: number; random: string } {\n if (id.length !== TIME_LEN + RANDOM_LEN) {\n throw createError('malformed ulid');\n }\n const time = id\n .substr(0, TIME_LEN)\n .split('')\n .reverse()\n .reduce((carry, char, index) => {\n const encodingIndex = ENCODING.indexOf(char);\n if (encodingIndex === -1) {\n throw createError('invalid character found: ' + char);\n }\n return (carry += encodingIndex * Math.pow(ENCODING_LEN, index));\n }, 0);\n if (time > TIME_MAX) {\n throw createError('malformed ulid, timestamp too large');\n }\n return { timestamp: time, random: id.substring(TIME_LEN) };\n}\n\nfunction createPrng(): PRNG {\n return () => {\n const buffer = new Uint8Array(1);\n getRandomValues(buffer);\n return buffer[0] / 0xff;\n };\n}\n\n/**\n * create a ulid generator\n */\nexport function createULID({\n monotonic = true,\n random = createPrng(),\n now = Date.now,\n}: { monotonic?: boolean; now?: () => number; random?: () => number } = {}) {\n if (!monotonic) {\n return function ulid(seedTime?: number): string {\n seedTime ||= now();\n return encodeTime(seedTime, TIME_LEN) + encodeRandom(RANDOM_LEN, random);\n };\n }\n\n let lastTime: number = 0;\n let lastRandom: string;\n return function ulid(seedTime?: number): string {\n seedTime ||= now();\n if (seedTime <= lastTime && lastRandom) {\n const incrementedRandom = (lastRandom = incrementBase32(lastRandom));\n return encodeTime(lastTime, TIME_LEN) + incrementedRandom;\n }\n lastTime = seedTime;\n const newRandom = (lastRandom = encodeRandom(RANDOM_LEN, random));\n return encodeTime(seedTime, TIME_LEN) + newRandom;\n };\n}\n\n/**\n * default monotonic ulid generator\n */\nexport let ulid: ULID = (...args) => {\n if (_real) {\n return _real(...args);\n }\n // delay initialize crypto\n _real = createULID();\n ulid = _real;\n return _real(...args);\n};\nlet _real: ULID;\n"],"names":["getRandomValues","createError","message","err","Error","source","ENCODING","ENCODING_LEN","length","TIME_MAX","Math","pow","TIME_LEN","RANDOM_LEN","isULID","str","test","replaceCharAt","index","char","substr","incrementBase32","done","charIndex","maxCharIndex","indexOf","randomChar","prng","rand","floor","charAt","encodeTime","now","len","isNaN","Number","isInteger","mod","encodeRandom","parseULID","id","time","split","reverse","reduce","carry","encodingIndex","timestamp","random","substring","createPrng","buffer","Uint8Array","createULID","monotonic","Date","ulid","seedTime","lastTime","lastRandom","incrementedRandom","newRandom","args","_real"],"mappings":"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"}