@wener/utils 1.1.33 → 1.1.35

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 (284) hide show
  1. package/lib/arrays/MaybeArray.js +41 -0
  2. package/lib/arrays/MaybeArray.js.map +1 -0
  3. package/lib/arrays/arrayFromAsync.js +7 -0
  4. package/lib/arrays/arrayFromAsync.js.map +1 -0
  5. package/lib/asyncs/AsyncInterval.js +14 -0
  6. package/lib/asyncs/AsyncInterval.js.map +1 -0
  7. package/lib/asyncs/MaybePromise.js +3 -0
  8. package/lib/asyncs/MaybePromise.js.map +1 -0
  9. package/lib/asyncs/createAsyncIterator.js +41 -0
  10. package/lib/asyncs/createAsyncIterator.js.map +1 -0
  11. package/lib/asyncs/createLazyPromise.js +65 -0
  12. package/lib/asyncs/createLazyPromise.js.map +1 -0
  13. package/lib/asyncs/firstOfAsyncIterator.js +11 -0
  14. package/lib/asyncs/firstOfAsyncIterator.js.map +1 -0
  15. package/lib/asyncs/generatorOfStream.js +16 -0
  16. package/lib/asyncs/generatorOfStream.js.map +1 -0
  17. package/lib/asyncs/isIterator.js +5 -0
  18. package/lib/asyncs/isIterator.js.map +1 -0
  19. package/lib/asyncs/isPromise.js +5 -0
  20. package/lib/asyncs/isPromise.js.map +1 -0
  21. package/lib/asyncs/isThenable.js +6 -0
  22. package/lib/asyncs/isThenable.js.map +1 -0
  23. package/lib/asyncs/nextOfAsyncIterator.js +33 -0
  24. package/lib/asyncs/nextOfAsyncIterator.js.map +1 -0
  25. package/lib/asyncs/promiseOfCallback.js +17 -0
  26. package/lib/asyncs/promiseOfCallback.js.map +1 -0
  27. package/lib/asyncs/sleep.js +3 -0
  28. package/lib/asyncs/sleep.js.map +1 -0
  29. package/lib/asyncs/timeout.js +29 -0
  30. package/lib/asyncs/timeout.js.map +1 -0
  31. package/lib/browsers/copy.js +53 -0
  32. package/lib/browsers/copy.js.map +1 -0
  33. package/lib/browsers/download.js +41 -0
  34. package/lib/browsers/download.js.map +1 -0
  35. package/lib/browsers/getFileFromDataTransfer.js +45 -0
  36. package/lib/browsers/getFileFromDataTransfer.js.map +1 -0
  37. package/lib/browsers/loaders.js +49 -0
  38. package/lib/browsers/loaders.js.map +1 -0
  39. package/lib/cn/index.js +3 -0
  40. package/lib/cn/index.js.map +1 -0
  41. package/lib/cn/parseChineseNumber.js +94 -0
  42. package/lib/cn/parseChineseNumber.js.map +1 -0
  43. package/lib/crypto/base.js +7 -0
  44. package/lib/crypto/base.js.map +1 -0
  45. package/lib/crypto/getNodeCrypto.js +18 -0
  46. package/lib/crypto/getNodeCrypto.js.map +1 -0
  47. package/lib/crypto/getRandomValues.js +32 -0
  48. package/lib/crypto/getRandomValues.js.map +1 -0
  49. package/lib/crypto/hashing.js +57 -0
  50. package/lib/crypto/hashing.js.map +1 -0
  51. package/lib/crypto/md5.bench.js +21 -0
  52. package/lib/crypto/md5.bench.js.map +1 -0
  53. package/lib/crypto/md5.d.js +3 -0
  54. package/lib/crypto/md5.d.js.map +1 -0
  55. package/lib/crypto/md5.js +121 -0
  56. package/lib/crypto/md5.js.map +1 -0
  57. package/lib/crypto/pem/pem.js +35 -0
  58. package/lib/crypto/pem/pem.js.map +1 -0
  59. package/lib/crypto/randomUUID.js +16 -0
  60. package/lib/crypto/randomUUID.js.map +1 -0
  61. package/lib/crypto/ulid.js +153 -0
  62. package/lib/crypto/ulid.js.map +1 -0
  63. package/lib/errors/Errors.js +181 -0
  64. package/lib/errors/Errors.js.map +1 -0
  65. package/lib/fetch/createFetchWith.js +23 -0
  66. package/lib/fetch/createFetchWith.js.map +1 -0
  67. package/lib/fetch/createFetchWithLogging.js +25 -0
  68. package/lib/fetch/createFetchWithLogging.js.map +1 -0
  69. package/lib/fetch/createFetchWithRetry.js +66 -0
  70. package/lib/fetch/createFetchWithRetry.js.map +1 -0
  71. package/lib/fetch/dumpRequest.js +45 -0
  72. package/lib/fetch/dumpRequest.js.map +1 -0
  73. package/lib/fetch/dumpResponse.js +16 -0
  74. package/lib/fetch/dumpResponse.js.map +1 -0
  75. package/lib/fetch/index.js +7 -0
  76. package/lib/fetch/index.js.map +1 -0
  77. package/lib/fetch/types.js +3 -0
  78. package/lib/fetch/types.js.map +1 -0
  79. package/lib/http/HttpStatus.js +94 -0
  80. package/lib/http/HttpStatus.js.map +1 -0
  81. package/lib/i18n/createTranslate.js +54 -0
  82. package/lib/i18n/createTranslate.js.map +1 -0
  83. package/lib/index.js +83 -0
  84. package/lib/index.js.map +1 -0
  85. package/lib/io/AbstractEncoding.js +7 -0
  86. package/lib/io/AbstractEncoding.js.map +1 -0
  87. package/lib/io/ArrayBuffer.test-d.js +7 -0
  88. package/lib/io/ArrayBuffer.test-d.js.map +1 -0
  89. package/lib/io/ArrayBuffers.js +210 -0
  90. package/lib/io/ArrayBuffers.js.map +1 -0
  91. package/lib/io/Buffer.js +25 -0
  92. package/lib/io/Buffer.js.map +1 -0
  93. package/lib/io/Bytes.js +51 -0
  94. package/lib/io/Bytes.js.map +1 -0
  95. package/lib/io/base64.js +54 -0
  96. package/lib/io/base64.js.map +1 -0
  97. package/lib/io/isBuffer.js +9 -0
  98. package/lib/io/isBuffer.js.map +1 -0
  99. package/lib/io/isTransferable.js +30 -0
  100. package/lib/io/isTransferable.js.map +1 -0
  101. package/lib/isomorphics/getGlobalThis.js +19 -0
  102. package/lib/isomorphics/getGlobalThis.js.map +1 -0
  103. package/lib/isomorphics/structuredClone.js +78 -0
  104. package/lib/isomorphics/structuredClone.js.map +1 -0
  105. package/lib/langs/AsyncCloser.js +40 -0
  106. package/lib/langs/AsyncCloser.js.map +1 -0
  107. package/lib/langs/Closer.js +34 -0
  108. package/lib/langs/Closer.js.map +1 -0
  109. package/lib/langs/MaybeFunction.js +9 -0
  110. package/lib/langs/MaybeFunction.js.map +1 -0
  111. package/lib/langs/classOf.js +5 -0
  112. package/lib/langs/classOf.js.map +1 -0
  113. package/lib/langs/deepEqual.js +87 -0
  114. package/lib/langs/deepEqual.js.map +1 -0
  115. package/lib/langs/deepFreeze.js +20 -0
  116. package/lib/langs/deepFreeze.js.map +1 -0
  117. package/lib/langs/hashCode.ignored.js +112 -0
  118. package/lib/langs/hashCode.ignored.js.map +1 -0
  119. package/lib/langs/isClass.js +5 -0
  120. package/lib/langs/isClass.js.map +1 -0
  121. package/lib/langs/isDefined.js +5 -0
  122. package/lib/langs/isDefined.js.map +1 -0
  123. package/lib/langs/isEmptyObject.js +6 -0
  124. package/lib/langs/isEmptyObject.js.map +1 -0
  125. package/lib/langs/isFunction.js +5 -0
  126. package/lib/langs/isFunction.js.map +1 -0
  127. package/lib/langs/isPlainObject.js +10 -0
  128. package/lib/langs/isPlainObject.js.map +1 -0
  129. package/lib/langs/memoize.js +22 -0
  130. package/lib/langs/memoize.js.map +1 -0
  131. package/lib/langs/parseBoolean.js +30 -0
  132. package/lib/langs/parseBoolean.js.map +1 -0
  133. package/lib/langs/shallowClone.js +15 -0
  134. package/lib/langs/shallowClone.js.map +1 -0
  135. package/lib/langs/shallowEqual.js +24 -0
  136. package/lib/langs/shallowEqual.js.map +1 -0
  137. package/lib/libs/ms.js +137 -0
  138. package/lib/libs/ms.js.map +1 -0
  139. package/lib/logging/Logger.js +5 -0
  140. package/lib/logging/Logger.js.map +1 -0
  141. package/lib/logging/createChildLogger.js +16 -0
  142. package/lib/logging/createChildLogger.js.map +1 -0
  143. package/lib/logging/createLogger.js +63 -0
  144. package/lib/logging/createLogger.js.map +1 -0
  145. package/lib/logging/createNoopLogger.js +13 -0
  146. package/lib/logging/createNoopLogger.js.map +1 -0
  147. package/lib/logging/slog.js +143 -0
  148. package/lib/logging/slog.js.map +1 -0
  149. package/lib/maths/clamp.js +21 -0
  150. package/lib/maths/clamp.js.map +1 -0
  151. package/lib/maths/random.js +17 -0
  152. package/lib/maths/random.js.map +1 -0
  153. package/lib/modules/isModule.js +7 -0
  154. package/lib/modules/isModule.js.map +1 -0
  155. package/lib/modules/parseModuleId.js +39 -0
  156. package/lib/modules/parseModuleId.js.map +1 -0
  157. package/lib/objects/get.js +16 -0
  158. package/lib/objects/get.js.map +1 -0
  159. package/lib/objects/get.test-d.js +33 -0
  160. package/lib/objects/get.test-d.js.map +1 -0
  161. package/lib/objects/merge/index.js +3 -0
  162. package/lib/objects/merge/index.js.map +1 -0
  163. package/lib/objects/merge/isMergeableObject.js +19 -0
  164. package/lib/objects/merge/isMergeableObject.js.map +1 -0
  165. package/lib/objects/merge/merge.js +90 -0
  166. package/lib/objects/merge/merge.js.map +1 -0
  167. package/lib/objects/parseObjectPath.js +39 -0
  168. package/lib/objects/parseObjectPath.js.map +1 -0
  169. package/lib/objects/set.js +38 -0
  170. package/lib/objects/set.js.map +1 -0
  171. package/lib/schema/typebox/gen/codegen/common/encoder.js +94 -0
  172. package/lib/schema/typebox/gen/codegen/common/encoder.js.map +1 -0
  173. package/lib/schema/typebox/gen/codegen/common/formatter.js +33 -0
  174. package/lib/schema/typebox/gen/codegen/common/formatter.js.map +1 -0
  175. package/lib/schema/typebox/gen/codegen/common/index.js +29 -0
  176. package/lib/schema/typebox/gen/codegen/common/index.js.map +1 -0
  177. package/lib/schema/typebox/gen/codegen/common/jsdoc.js +117 -0
  178. package/lib/schema/typebox/gen/codegen/common/jsdoc.js.map +1 -0
  179. package/lib/schema/typebox/gen/codegen/expression/compiler.js +364 -0
  180. package/lib/schema/typebox/gen/codegen/expression/compiler.js.map +1 -0
  181. package/lib/schema/typebox/gen/codegen/expression/errors.js +259 -0
  182. package/lib/schema/typebox/gen/codegen/expression/errors.js.map +1 -0
  183. package/lib/schema/typebox/gen/codegen/expression/evaluator.js +254 -0
  184. package/lib/schema/typebox/gen/codegen/expression/evaluator.js.map +1 -0
  185. package/lib/schema/typebox/gen/codegen/expression/expression.js +381 -0
  186. package/lib/schema/typebox/gen/codegen/expression/expression.js.map +1 -0
  187. package/lib/schema/typebox/gen/codegen/expression/index.js +32 -0
  188. package/lib/schema/typebox/gen/codegen/expression/index.js.map +1 -0
  189. package/lib/schema/typebox/gen/codegen/index.js +29 -0
  190. package/lib/schema/typebox/gen/codegen/index.js.map +1 -0
  191. package/lib/schema/typebox/gen/codegen/model/index.js +40 -0
  192. package/lib/schema/typebox/gen/codegen/model/index.js.map +1 -0
  193. package/lib/schema/typebox/gen/codegen/model/model-to-arktype.js +260 -0
  194. package/lib/schema/typebox/gen/codegen/model/model-to-arktype.js.map +1 -0
  195. package/lib/schema/typebox/gen/codegen/model/model-to-expression.js +383 -0
  196. package/lib/schema/typebox/gen/codegen/model/model-to-expression.js.map +1 -0
  197. package/lib/schema/typebox/gen/codegen/model/model-to-grpc.js +238 -0
  198. package/lib/schema/typebox/gen/codegen/model/model-to-grpc.js.map +1 -0
  199. package/lib/schema/typebox/gen/codegen/model/model-to-io-ts.js +274 -0
  200. package/lib/schema/typebox/gen/codegen/model/model-to-io-ts.js.map +1 -0
  201. package/lib/schema/typebox/gen/codegen/model/model-to-javascript.js +47 -0
  202. package/lib/schema/typebox/gen/codegen/model/model-to-javascript.js.map +1 -0
  203. package/lib/schema/typebox/gen/codegen/model/model-to-json-schema.js +192 -0
  204. package/lib/schema/typebox/gen/codegen/model/model-to-json-schema.js.map +1 -0
  205. package/lib/schema/typebox/gen/codegen/model/model-to-typebox.js +33 -0
  206. package/lib/schema/typebox/gen/codegen/model/model-to-typebox.js.map +1 -0
  207. package/lib/schema/typebox/gen/codegen/model/model-to-typescript.js +188 -0
  208. package/lib/schema/typebox/gen/codegen/model/model-to-typescript.js.map +1 -0
  209. package/lib/schema/typebox/gen/codegen/model/model-to-valibot.js +239 -0
  210. package/lib/schema/typebox/gen/codegen/model/model-to-valibot.js.map +1 -0
  211. package/lib/schema/typebox/gen/codegen/model/model-to-value.js +43 -0
  212. package/lib/schema/typebox/gen/codegen/model/model-to-value.js.map +1 -0
  213. package/lib/schema/typebox/gen/codegen/model/model-to-yrel.js +227 -0
  214. package/lib/schema/typebox/gen/codegen/model/model-to-yrel.js.map +1 -0
  215. package/lib/schema/typebox/gen/codegen/model/model-to-yup.js +225 -0
  216. package/lib/schema/typebox/gen/codegen/model/model-to-yup.js.map +1 -0
  217. package/lib/schema/typebox/gen/codegen/model/model-to-zod.js +248 -0
  218. package/lib/schema/typebox/gen/codegen/model/model-to-zod.js.map +1 -0
  219. package/lib/schema/typebox/gen/codegen/model/model.js +27 -0
  220. package/lib/schema/typebox/gen/codegen/model/model.js.map +1 -0
  221. package/lib/schema/typebox/gen/codegen/typescript/index.js +28 -0
  222. package/lib/schema/typebox/gen/codegen/typescript/index.js.map +1 -0
  223. package/lib/schema/typebox/gen/codegen/typescript/typescript-to-model.js +72 -0
  224. package/lib/schema/typebox/gen/codegen/typescript/typescript-to-model.js.map +1 -0
  225. package/lib/schema/typebox/gen/codegen/typescript/typescript-to-typebox.js +620 -0
  226. package/lib/schema/typebox/gen/codegen/typescript/typescript-to-typebox.js.map +1 -0
  227. package/lib/schema/typebox/gen/index.js +3 -0
  228. package/lib/schema/typebox/gen/index.js.map +1 -0
  229. package/lib/schema/typebox/index.js +3 -0
  230. package/lib/schema/typebox/index.js.map +1 -0
  231. package/lib/schema/typebox/typebox.js +23 -0
  232. package/lib/schema/typebox/typebox.js.map +1 -0
  233. package/lib/server/crypto/md5.js +6 -0
  234. package/lib/server/crypto/md5.js.map +1 -0
  235. package/lib/server/fetch/createFetchWithProxy.js +4 -0
  236. package/lib/server/fetch/createFetchWithProxy.js.map +1 -0
  237. package/lib/server/fetch/createFetchWithProxyByNodeFetch.js +38 -0
  238. package/lib/server/fetch/createFetchWithProxyByNodeFetch.js.map +1 -0
  239. package/lib/server/fetch/createFetchWithProxyByUndici.js +64 -0
  240. package/lib/server/fetch/createFetchWithProxyByUndici.js.map +1 -0
  241. package/lib/server/getPackageDir.js +16 -0
  242. package/lib/server/getPackageDir.js.map +1 -0
  243. package/lib/server/index.js +7 -0
  244. package/lib/server/index.js.map +1 -0
  245. package/lib/server/jsdom.js +3 -0
  246. package/lib/server/jsdom.js.map +1 -0
  247. package/lib/server/node-fetch.js +4 -0
  248. package/lib/server/node-fetch.js.map +1 -0
  249. package/lib/server/polyfill/polyfillBrowser.js +17 -0
  250. package/lib/server/polyfill/polyfillBrowser.js.map +1 -0
  251. package/lib/server/polyfill/polyfillCrypto.js +11 -0
  252. package/lib/server/polyfill/polyfillCrypto.js.map +1 -0
  253. package/lib/server/polyfill/polyfillFetch.js +25 -0
  254. package/lib/server/polyfill/polyfillFetch.js.map +1 -0
  255. package/lib/server/polyfill/polyfillJsDom.js +64 -0
  256. package/lib/server/polyfill/polyfillJsDom.js.map +1 -0
  257. package/lib/server/polyfill/polyfillWebSocket.js +21 -0
  258. package/lib/server/polyfill/polyfillWebSocket.js.map +1 -0
  259. package/lib/server/ws.js +3 -0
  260. package/lib/server/ws.js.map +1 -0
  261. package/lib/strings/camelCase.js +58 -0
  262. package/lib/strings/camelCase.js.map +1 -0
  263. package/lib/strings/formatBytes.js +43 -0
  264. package/lib/strings/formatBytes.js.map +1 -0
  265. package/lib/strings/renderTemplate.js +32 -0
  266. package/lib/strings/renderTemplate.js.map +1 -0
  267. package/lib/typedoc.js +4 -0
  268. package/lib/typedoc.js.map +1 -0
  269. package/lib/types.d.js +6 -0
  270. package/lib/types.d.js.map +1 -0
  271. package/lib/validations/asserts.js +14 -0
  272. package/lib/validations/asserts.js.map +1 -0
  273. package/lib/validations/isUUID.js +5 -0
  274. package/lib/validations/isUUID.js.map +1 -0
  275. package/lib/validations/parseTimestamp.js +29 -0
  276. package/lib/validations/parseTimestamp.js.map +1 -0
  277. package/package.json +1 -3
  278. package/dist/LICENSE.txt +0 -1
  279. package/dist/cjs/index.cjs +0 -21
  280. package/dist/cjs/index.cjs.map +0 -1
  281. package/dist/esm/index.js +0 -21
  282. package/dist/esm/index.js.map +0 -1
  283. package/dist/system/index.js +0 -21
  284. package/dist/system/index.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/langs/isEmptyObject.ts"],"sourcesContent":["import { isPlainObject } from './isPlainObject';\n\nexport function isEmptyObject(o: any) {\n return isPlainObject(o) && Object.keys(o).length === 0;\n}\n"],"names":["isPlainObject","isEmptyObject","o","Object","keys","length"],"mappings":"AAAA,SAASA,aAAa,QAAQ,kBAAkB;AAEhD,OAAO,SAASC,cAAcC,CAAM;IAClC,OAAOF,cAAcE,MAAMC,OAAOC,IAAI,CAACF,GAAGG,MAAM,KAAK;AACvD"}
@@ -0,0 +1,5 @@
1
+ export function isFunction(value) {
2
+ return typeof value === 'function';
3
+ }
4
+
5
+ //# sourceMappingURL=isFunction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/langs/isFunction.ts"],"sourcesContent":["export function isFunction(value: any): value is Function {\n return typeof value === 'function';\n}\n"],"names":["isFunction","value"],"mappings":"AAAA,OAAO,SAASA,WAAWC,KAAU;IACnC,OAAO,OAAOA,UAAU;AAC1B"}
@@ -0,0 +1,10 @@
1
+ import { classOf } from './classOf.js';
2
+ // see: https://github.com/mesqueeb/is-what/blob/88d6e4ca92fb2baab6003c54e02eedf4e729e5ab/src/index.ts
3
+ export function isPlainObject(value) {
4
+ if (classOf(value) !== 'Object') {
5
+ return false;
6
+ }
7
+ return value.constructor === Object && Object.getPrototypeOf(value) === Object.prototype;
8
+ }
9
+
10
+ //# sourceMappingURL=isPlainObject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/langs/isPlainObject.ts"],"sourcesContent":["import { classOf } from './classOf';\n\n// see: https://github.com/mesqueeb/is-what/blob/88d6e4ca92fb2baab6003c54e02eedf4e729e5ab/src/index.ts\n\nexport function isPlainObject(value: any): value is Record<string, any> {\n if (classOf(value) !== 'Object') {\n return false;\n }\n return value.constructor === Object && Object.getPrototypeOf(value) === Object.prototype;\n}\n"],"names":["classOf","isPlainObject","value","constructor","Object","getPrototypeOf","prototype"],"mappings":"AAAA,SAASA,OAAO,QAAQ,YAAY;AAEpC,sGAAsG;AAEtG,OAAO,SAASC,cAAcC,KAAU;IACtC,IAAIF,QAAQE,WAAW,UAAU;QAC/B,OAAO;IACT;IACA,OAAOA,MAAMC,WAAW,KAAKC,UAAUA,OAAOC,cAAc,CAACH,WAAWE,OAAOE,SAAS;AAC1F"}
@@ -0,0 +1,22 @@
1
+ // https://github.com/angus-c/just/blob/master/packages/function-memoize/index.mjs
2
+ export function memoize(callback, { resolver = (...args)=>JSON.stringify(args) } = {}) {
3
+ if (typeof callback !== 'function') {
4
+ throw new Error('`callback` should be a function');
5
+ }
6
+ if (resolver !== undefined && typeof resolver !== 'function') {
7
+ throw new Error('`resolver` should be a function');
8
+ }
9
+ const cache = {};
10
+ const memoized = function() {
11
+ const args = Array.prototype.slice.call(arguments); // to simplify JSON.stringify
12
+ const key = resolver.apply(this, args);
13
+ if (!(key in cache)) {
14
+ cache[key] = callback.apply(this, args);
15
+ }
16
+ return cache[key];
17
+ };
18
+ memoized.cache = cache;
19
+ return memoized;
20
+ }
21
+
22
+ //# sourceMappingURL=memoize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/langs/memoize.ts"],"sourcesContent":["// https://github.com/angus-c/just/blob/master/packages/function-memoize/index.mjs\ntype func = (...args: any) => any;\n\nexport function memoize<T extends func>(\n callback: T,\n {\n resolver = (...args: Parameters<T>) => JSON.stringify(args),\n }: { resolver?: (...args: Parameters<T>) => string } = {},\n): T {\n if (typeof callback !== 'function') {\n throw new Error('`callback` should be a function');\n }\n\n if (resolver !== undefined && typeof resolver !== 'function') {\n throw new Error('`resolver` should be a function');\n }\n\n const cache: Record<string, any> = {};\n\n const memoized = function (this: any) {\n const args = Array.prototype.slice.call(arguments); // to simplify JSON.stringify\n const key = resolver.apply(this, args as Parameters<T>);\n\n if (!(key in cache)) {\n cache[key] = callback.apply(this, args);\n }\n\n return cache[key];\n };\n memoized.cache = cache;\n return memoized as func as T;\n}\n"],"names":["memoize","callback","resolver","args","JSON","stringify","Error","undefined","cache","memoized","Array","prototype","slice","call","arguments","key","apply"],"mappings":"AAAA,kFAAkF;AAGlF,OAAO,SAASA,QACdC,QAAW,EACX,EACEC,WAAW,CAAC,GAAGC,OAAwBC,KAAKC,SAAS,CAACF,KAAK,EACT,GAAG,CAAC,CAAC;IAEzD,IAAI,OAAOF,aAAa,YAAY;QAClC,MAAM,IAAIK,MAAM;IAClB;IAEA,IAAIJ,aAAaK,aAAa,OAAOL,aAAa,YAAY;QAC5D,MAAM,IAAII,MAAM;IAClB;IAEA,MAAME,QAA6B,CAAC;IAEpC,MAAMC,WAAW;QACf,MAAMN,OAAOO,MAAMC,SAAS,CAACC,KAAK,CAACC,IAAI,CAACC,YAAY,6BAA6B;QACjF,MAAMC,MAAMb,SAASc,KAAK,CAAC,IAAI,EAAEb;QAEjC,IAAI,CAAEY,CAAAA,OAAOP,KAAI,GAAI;YACnBA,KAAK,CAACO,IAAI,GAAGd,SAASe,KAAK,CAAC,IAAI,EAAEb;QACpC;QAEA,OAAOK,KAAK,CAACO,IAAI;IACnB;IACAN,SAASD,KAAK,GAAGA;IACjB,OAAOC;AACT"}
@@ -0,0 +1,30 @@
1
+ export function parseBoolean(s, strict = false) {
2
+ if (typeof s === 'boolean') {
3
+ return s;
4
+ }
5
+ if (typeof s === 'string') {
6
+ switch(s.toLowerCase()){
7
+ case 'f':
8
+ case 'false':
9
+ case '0':
10
+ return false;
11
+ case '1':
12
+ case 't':
13
+ case 'true':
14
+ return true;
15
+ }
16
+ } else if (typeof s === 'number') {
17
+ switch(s){
18
+ case 0:
19
+ return false;
20
+ case 1:
21
+ return true;
22
+ }
23
+ }
24
+ if (strict) {
25
+ return undefined;
26
+ }
27
+ return Boolean(s);
28
+ }
29
+
30
+ //# sourceMappingURL=parseBoolean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/langs/parseBoolean.ts"],"sourcesContent":["export function parseBoolean(s: string | boolean | number | null | undefined, strict: true): boolean | undefined;\nexport function parseBoolean(s: string | boolean | number | null | undefined | any): boolean;\nexport function parseBoolean(s?: string | boolean | number | null, strict = false): boolean | undefined {\n if (typeof s === 'boolean') {\n return s;\n }\n if (typeof s === 'string') {\n switch (s.toLowerCase()) {\n case 'f':\n case 'false':\n case '0':\n return false;\n case '1':\n case 't':\n case 'true':\n return true;\n }\n } else if (typeof s === 'number') {\n switch (s) {\n case 0:\n return false;\n case 1:\n return true;\n }\n }\n if (strict) {\n return undefined;\n }\n return Boolean(s);\n}\n"],"names":["parseBoolean","s","strict","toLowerCase","undefined","Boolean"],"mappings":"AAEA,OAAO,SAASA,aAAaC,CAAoC,EAAEC,SAAS,KAAK;IAC/E,IAAI,OAAOD,MAAM,WAAW;QAC1B,OAAOA;IACT;IACA,IAAI,OAAOA,MAAM,UAAU;QACzB,OAAQA,EAAEE,WAAW;YACnB,KAAK;YACL,KAAK;YACL,KAAK;gBACH,OAAO;YACT,KAAK;YACL,KAAK;YACL,KAAK;gBACH,OAAO;QACX;IACF,OAAO,IAAI,OAAOF,MAAM,UAAU;QAChC,OAAQA;YACN,KAAK;gBACH,OAAO;YACT,KAAK;gBACH,OAAO;QACX;IACF;IACA,IAAIC,QAAQ;QACV,OAAOE;IACT;IACA,OAAOC,QAAQJ;AACjB"}
@@ -0,0 +1,15 @@
1
+ export function shallowClone(obj) {
2
+ if (!obj) {
3
+ return obj;
4
+ }
5
+ if (Array.isArray(obj)) {
6
+ return obj.slice();
7
+ }
8
+ if (typeof obj === 'object') {
9
+ return Object.assign({}, obj);
10
+ }
11
+ // skip Map, Set, WeakMap, WeakSet, Date, RegExp, etc.
12
+ return obj;
13
+ }
14
+
15
+ //# sourceMappingURL=shallowClone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/langs/shallowClone.ts"],"sourcesContent":["export function shallowClone<T>(obj: T): T {\n if (!obj) {\n return obj;\n }\n if (Array.isArray(obj)) {\n return obj.slice() as T;\n }\n if (typeof obj === 'object') {\n return Object.assign({}, obj);\n }\n // skip Map, Set, WeakMap, WeakSet, Date, RegExp, etc.\n return obj;\n}\n"],"names":["shallowClone","obj","Array","isArray","slice","Object","assign"],"mappings":"AAAA,OAAO,SAASA,aAAgBC,GAAM;IACpC,IAAI,CAACA,KAAK;QACR,OAAOA;IACT;IACA,IAAIC,MAAMC,OAAO,CAACF,MAAM;QACtB,OAAOA,IAAIG,KAAK;IAClB;IACA,IAAI,OAAOH,QAAQ,UAAU;QAC3B,OAAOI,OAAOC,MAAM,CAAC,CAAC,GAAGL;IAC3B;IACA,sDAAsD;IACtD,OAAOA;AACT"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * shallow compare - support object, array
3
+ *
4
+ * @see {@link https://github.com/pmndrs/zustand/blob/main/src/shallow.ts zustand/src/shallow.ts}
5
+ */ export function shallowEqual(objA, objB) {
6
+ if (Object.is(objA, objB)) {
7
+ return true;
8
+ }
9
+ if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {
10
+ return false;
11
+ }
12
+ const keysA = Object.keys(objA);
13
+ if (keysA.length !== Object.keys(objB).length) {
14
+ return false;
15
+ }
16
+ for(let i = 0; i < keysA.length; i++){
17
+ if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) {
18
+ return false;
19
+ }
20
+ }
21
+ return true;
22
+ }
23
+
24
+ //# sourceMappingURL=shallowEqual.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/langs/shallowEqual.ts"],"sourcesContent":["/**\n * shallow compare - support object, array\n *\n * @see {@link https://github.com/pmndrs/zustand/blob/main/src/shallow.ts zustand/src/shallow.ts}\n */\nexport function shallowEqual<T, U>(objA: T, objB: U) {\n if (Object.is(objA, objB)) {\n return true;\n }\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n const keysA = Object.keys(objA);\n if (keysA.length !== Object.keys(objB).length) {\n return false;\n }\n for (let i = 0; i < keysA.length; i++) {\n if (\n !Object.prototype.hasOwnProperty.call(objB, keysA[i]) ||\n !Object.is(objA[keysA[i] as keyof T], objB[keysA[i] as keyof U])\n ) {\n return false;\n }\n }\n return true;\n}\n"],"names":["shallowEqual","objA","objB","Object","is","keysA","keys","length","i","prototype","hasOwnProperty","call"],"mappings":"AAAA;;;;CAIC,GACD,OAAO,SAASA,aAAmBC,IAAO,EAAEC,IAAO;IACjD,IAAIC,OAAOC,EAAE,CAACH,MAAMC,OAAO;QACzB,OAAO;IACT;IACA,IAAI,OAAOD,SAAS,YAAYA,SAAS,QAAQ,OAAOC,SAAS,YAAYA,SAAS,MAAM;QAC1F,OAAO;IACT;IACA,MAAMG,QAAQF,OAAOG,IAAI,CAACL;IAC1B,IAAII,MAAME,MAAM,KAAKJ,OAAOG,IAAI,CAACJ,MAAMK,MAAM,EAAE;QAC7C,OAAO;IACT;IACA,IAAK,IAAIC,IAAI,GAAGA,IAAIH,MAAME,MAAM,EAAEC,IAAK;QACrC,IACE,CAACL,OAAOM,SAAS,CAACC,cAAc,CAACC,IAAI,CAACT,MAAMG,KAAK,CAACG,EAAE,KACpD,CAACL,OAAOC,EAAE,CAACH,IAAI,CAACI,KAAK,CAACG,EAAE,CAAY,EAAEN,IAAI,CAACG,KAAK,CAACG,EAAE,CAAY,GAC/D;YACA,OAAO;QACT;IACF;IACA,OAAO;AACT"}
package/lib/libs/ms.js ADDED
@@ -0,0 +1,137 @@
1
+ // Helpers.
2
+ const s = 1000;
3
+ const m = s * 60;
4
+ const h = m * 60;
5
+ const d = h * 24;
6
+ const w = d * 7;
7
+ const y = d * 365.25;
8
+ function msFn(value, options) {
9
+ try {
10
+ if (typeof value === 'string' && value.length > 0) {
11
+ return parse(value);
12
+ } else if (typeof value === 'number' && isFinite(value)) {
13
+ return options?.long ? fmtLong(value) : fmtShort(value);
14
+ }
15
+ throw new Error('Value is not a string or number.');
16
+ } catch (error) {
17
+ const message = isError(error) ? `${error.message}. value=${JSON.stringify(value)}` : 'An unknown error has occurred.';
18
+ throw new Error(message);
19
+ }
20
+ }
21
+ /**
22
+ * Parse the given string and return milliseconds.
23
+ *
24
+ * @param str - A string to parse to milliseconds
25
+ * @returns The parsed value in milliseconds, or `NaN` if the string can't be
26
+ * parsed
27
+ */ function parse(str) {
28
+ if (str.length > 100) {
29
+ throw new Error('Value exceeds the maximum length of 100 characters.');
30
+ }
31
+ const match = /^(?<value>-?(?:\d+)?\.?\d+) *(?<type>milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str);
32
+ // Named capture groups need to be manually typed today.
33
+ // https://github.com/microsoft/TypeScript/issues/32098
34
+ const groups = match?.groups;
35
+ if (!groups) {
36
+ return NaN;
37
+ }
38
+ const n = parseFloat(groups.value);
39
+ const type = (groups.type || 'ms').toLowerCase();
40
+ switch(type){
41
+ case 'years':
42
+ case 'year':
43
+ case 'yrs':
44
+ case 'yr':
45
+ case 'y':
46
+ return n * y;
47
+ case 'weeks':
48
+ case 'week':
49
+ case 'w':
50
+ return n * w;
51
+ case 'days':
52
+ case 'day':
53
+ case 'd':
54
+ return n * d;
55
+ case 'hours':
56
+ case 'hour':
57
+ case 'hrs':
58
+ case 'hr':
59
+ case 'h':
60
+ return n * h;
61
+ case 'minutes':
62
+ case 'minute':
63
+ case 'mins':
64
+ case 'min':
65
+ case 'm':
66
+ return n * m;
67
+ case 'seconds':
68
+ case 'second':
69
+ case 'secs':
70
+ case 'sec':
71
+ case 's':
72
+ return n * s;
73
+ case 'milliseconds':
74
+ case 'millisecond':
75
+ case 'msecs':
76
+ case 'msec':
77
+ case 'ms':
78
+ return n;
79
+ default:
80
+ // This should never occur.
81
+ throw new Error(`The unit ${type} was matched, but no matching case exists.`);
82
+ }
83
+ }
84
+ // eslint-disable-next-line import/no-default-export
85
+ export default msFn;
86
+ /**
87
+ * Short format for `ms`.
88
+ */ function fmtShort(ms) {
89
+ const msAbs = Math.abs(ms);
90
+ if (msAbs >= d) {
91
+ return `${Math.round(ms / d)}d`;
92
+ }
93
+ if (msAbs >= h) {
94
+ return `${Math.round(ms / h)}h`;
95
+ }
96
+ if (msAbs >= m) {
97
+ return `${Math.round(ms / m)}m`;
98
+ }
99
+ if (msAbs >= s) {
100
+ return `${Math.round(ms / s)}s`;
101
+ }
102
+ return `${ms}ms`;
103
+ }
104
+ /**
105
+ * Long format for `ms`.
106
+ */ function fmtLong(ms) {
107
+ const msAbs = Math.abs(ms);
108
+ if (msAbs >= d) {
109
+ return plural(ms, msAbs, d, 'day');
110
+ }
111
+ if (msAbs >= h) {
112
+ return plural(ms, msAbs, h, 'hour');
113
+ }
114
+ if (msAbs >= m) {
115
+ return plural(ms, msAbs, m, 'minute');
116
+ }
117
+ if (msAbs >= s) {
118
+ return plural(ms, msAbs, s, 'second');
119
+ }
120
+ return `${ms} ms`;
121
+ }
122
+ /**
123
+ * Pluralization helper.
124
+ */ function plural(ms, msAbs, n, name) {
125
+ const isPlural = msAbs >= n * 1.5;
126
+ return `${Math.round(ms / n)} ${name}${isPlural ? 's' : ''}`;
127
+ }
128
+ /**
129
+ * A type guard for errors.
130
+ *
131
+ * @param value - The value to test
132
+ * @returns A boolean `true` if the provided value is an Error-like object
133
+ */ function isError(value) {
134
+ return typeof value === 'object' && value !== null && 'message' in value;
135
+ }
136
+
137
+ //# sourceMappingURL=ms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/libs/ms.ts"],"sourcesContent":["// Helpers.\nconst s = 1000;\nconst m = s * 60;\nconst h = m * 60;\nconst d = h * 24;\nconst w = d * 7;\nconst y = d * 365.25;\n\ntype Unit =\n | 'Years'\n | 'Year'\n | 'Yrs'\n | 'Yr'\n | 'Y'\n | 'Weeks'\n | 'Week'\n | 'W'\n | 'Days'\n | 'Day'\n | 'D'\n | 'Hours'\n | 'Hour'\n | 'Hrs'\n | 'Hr'\n | 'H'\n | 'Minutes'\n | 'Minute'\n | 'Mins'\n | 'Min'\n | 'M'\n | 'Seconds'\n | 'Second'\n | 'Secs'\n | 'Sec'\n | 's'\n | 'Milliseconds'\n | 'Millisecond'\n | 'Msecs'\n | 'Msec'\n | 'Ms';\n\ntype UnitAnyCase = Unit | Uppercase<Unit> | Lowercase<Unit>;\n\nexport type StringValue = `${number}` | `${number}${UnitAnyCase}` | `${number} ${UnitAnyCase}`;\n\ninterface Options {\n /**\n * Set to `true` to use verbose formatting. Defaults to `false`.\n */\n long?: boolean;\n}\n\n/**\n * Parse or format the given value.\n *\n * @param value - The string or number to convert\n * @param options - Options for the conversion\n * @throws Error if `value` is not a non-empty string or a number\n */\nfunction msFn(value: StringValue, options?: Options): number;\nfunction msFn(value: number, options?: Options): string;\nfunction msFn(value: StringValue | number, options?: Options): number | string {\n try {\n if (typeof value === 'string' && value.length > 0) {\n return parse(value);\n } else if (typeof value === 'number' && isFinite(value)) {\n return options?.long ? fmtLong(value) : fmtShort(value);\n }\n throw new Error('Value is not a string or number.');\n } catch (error) {\n const message = isError(error)\n ? `${error.message}. value=${JSON.stringify(value)}`\n : 'An unknown error has occurred.';\n throw new Error(message);\n }\n}\n\n/**\n * Parse the given string and return milliseconds.\n *\n * @param str - A string to parse to milliseconds\n * @returns The parsed value in milliseconds, or `NaN` if the string can't be\n * parsed\n */\nfunction parse(str: string): number {\n if (str.length > 100) {\n throw new Error('Value exceeds the maximum length of 100 characters.');\n }\n const match =\n /^(?<value>-?(?:\\d+)?\\.?\\d+) *(?<type>milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str,\n );\n // Named capture groups need to be manually typed today.\n // https://github.com/microsoft/TypeScript/issues/32098\n const groups = match?.groups as { value: string; type?: string } | undefined;\n if (!groups) {\n return NaN;\n }\n const n = parseFloat(groups.value);\n const type = (groups.type || 'ms').toLowerCase() as Lowercase<Unit>;\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n // This should never occur.\n throw new Error(`The unit ${type as string} was matched, but no matching case exists.`);\n }\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default msFn;\n\n/**\n * Short format for `ms`.\n */\nfunction fmtShort(ms: number): StringValue {\n const msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return `${Math.round(ms / d)}d`;\n }\n if (msAbs >= h) {\n return `${Math.round(ms / h)}h`;\n }\n if (msAbs >= m) {\n return `${Math.round(ms / m)}m`;\n }\n if (msAbs >= s) {\n return `${Math.round(ms / s)}s`;\n }\n return `${ms}ms`;\n}\n\n/**\n * Long format for `ms`.\n */\nfunction fmtLong(ms: number): StringValue {\n const msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return `${ms} ms`;\n}\n\n/**\n * Pluralization helper.\n */\nfunction plural(ms: number, msAbs: number, n: number, name: string): StringValue {\n const isPlural = msAbs >= n * 1.5;\n return `${Math.round(ms / n)} ${name}${isPlural ? 's' : ''}` as StringValue;\n}\n\n/**\n * A type guard for errors.\n *\n * @param value - The value to test\n * @returns A boolean `true` if the provided value is an Error-like object\n */\nfunction isError(value: unknown): value is Error {\n return typeof value === 'object' && value !== null && 'message' in value;\n}\n"],"names":["s","m","h","d","w","y","msFn","value","options","length","parse","isFinite","long","fmtLong","fmtShort","Error","error","message","isError","JSON","stringify","str","match","exec","groups","NaN","n","parseFloat","type","toLowerCase","ms","msAbs","Math","abs","round","plural","name","isPlural"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Logger interface satisfies the `console`, `pino` logger interface.
3
+ */ export { };
4
+
5
+ //# sourceMappingURL=Logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/logging/Logger.ts"],"sourcesContent":["/**\n * Logger interface satisfies the `console`, `pino` logger interface.\n */\nexport interface Logger {\n trace(...args: any[]): void;\n\n debug(...args: any[]): void;\n\n info(...args: any[]): void;\n\n warn(...args: any[]): void;\n\n error(...args: any[]): void;\n\n /**\n * create child logger with given context\n */\n child?: (o: object) => Logger;\n}\n\nexport interface LoggerWithChild extends Logger {\n child: (o: Record<string, any>) => LoggerWithChild;\n}\n\nexport type LogLevel = 'error' | 'warn' | 'info' | 'debug' | 'trace';\n"],"names":[],"mappings":"AAAA;;CAEC,GAsBD,WAAqE"}
@@ -0,0 +1,16 @@
1
+ import { createLogger } from './createLogger.js';
2
+ export function createChildLogger(l, ctx) {
3
+ if (l.child) {
4
+ return l.child(ctx);
5
+ }
6
+ return createLogger((o)=>{
7
+ const { level, values, ...c } = o;
8
+ if (Object.keys(c).length) {
9
+ l[level](c, ...values);
10
+ } else {
11
+ l[level](...values);
12
+ }
13
+ }, ctx);
14
+ }
15
+
16
+ //# sourceMappingURL=createChildLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/logging/createChildLogger.ts"],"sourcesContent":["import type { Logger, LoggerWithChild } from './Logger';\nimport { createLogger } from './createLogger';\n\nexport function createChildLogger(l: Logger, ctx: object): LoggerWithChild {\n if (l.child) {\n return l.child(ctx) as LoggerWithChild;\n }\n return createLogger((o) => {\n const { level, values, ...c } = o;\n if (Object.keys(c).length) {\n l[level](c, ...values);\n } else {\n l[level](...values);\n }\n }, ctx);\n}\n"],"names":["createLogger","createChildLogger","l","ctx","child","o","level","values","c","Object","keys","length"],"mappings":"AACA,SAASA,YAAY,QAAQ,iBAAiB;AAE9C,OAAO,SAASC,kBAAkBC,CAAS,EAAEC,GAAW;IACtD,IAAID,EAAEE,KAAK,EAAE;QACX,OAAOF,EAAEE,KAAK,CAACD;IACjB;IACA,OAAOH,aAAa,CAACK;QACnB,MAAM,EAAEC,KAAK,EAAEC,MAAM,EAAE,GAAGC,GAAG,GAAGH;QAChC,IAAII,OAAOC,IAAI,CAACF,GAAGG,MAAM,EAAE;YACzBT,CAAC,CAACI,MAAM,CAACE,MAAMD;QACjB,OAAO;YACLL,CAAC,CAACI,MAAM,IAAIC;QACd;IACF,GAAGJ;AACL"}
@@ -0,0 +1,63 @@
1
+ export function createLogger(write = ({ level, values, ...ctx })=>{
2
+ ({ values, ...ctx } = merge(ctx, values));
3
+ console[level]?.(...values, ctx);
4
+ }, context = {}) {
5
+ return {
6
+ trace: (...values)=>{
7
+ write({
8
+ ...context,
9
+ level: 'trace',
10
+ values
11
+ });
12
+ },
13
+ debug: (...values)=>{
14
+ write({
15
+ ...context,
16
+ level: 'debug',
17
+ values
18
+ });
19
+ },
20
+ info: (...values)=>{
21
+ write({
22
+ ...context,
23
+ level: 'info',
24
+ values
25
+ });
26
+ },
27
+ warn: (...values)=>{
28
+ write({
29
+ ...context,
30
+ level: 'warn',
31
+ values
32
+ });
33
+ },
34
+ error: (...values)=>{
35
+ write({
36
+ ...context,
37
+ level: 'error',
38
+ values
39
+ });
40
+ },
41
+ child: (ctx)=>createLogger(write, {
42
+ ...context,
43
+ ...ctx
44
+ })
45
+ };
46
+ }
47
+ // logger.info({name:'wener'},'message')
48
+ // merge initial context with message object
49
+ function merge(ctx, values) {
50
+ if (values[0] && typeof values[0] === 'object') {
51
+ return {
52
+ ...ctx,
53
+ ...values[0],
54
+ values: values.slice(1)
55
+ };
56
+ }
57
+ return {
58
+ ...ctx,
59
+ values
60
+ };
61
+ } // https://github.com/nestjs/nest/blob/master/packages/common/services/console-logger.service.ts
62
+
63
+ //# sourceMappingURL=createLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/logging/createLogger.ts"],"sourcesContent":["import type { LoggerWithChild, LogLevel } from './Logger';\n\nexport interface CreateLoggerOptions {\n name?: string;\n handler?: (o: { level: LogLevel; values: any[] } & Record<string | symbol, any>) => void;\n context?: Record<string, any>;\n levels?: LogLevel[];\n}\n\nexport function createLogger(\n write: (o: { level: LogLevel; values: any[] } & Record<string | symbol, any>) => void = ({\n level,\n values,\n ...ctx\n }) => {\n ({ values, ...ctx } = merge(ctx, values));\n console[level]?.(...values, ctx);\n },\n context: object = {},\n): LoggerWithChild {\n return {\n trace: (...values) => {\n write({ ...context, level: 'trace', values });\n },\n debug: (...values) => {\n write({ ...context, level: 'debug', values });\n },\n info: (...values) => {\n write({ ...context, level: 'info', values });\n },\n warn: (...values) => {\n write({ ...context, level: 'warn', values });\n },\n error: (...values) => {\n write({ ...context, level: 'error', values });\n },\n child: (ctx) => createLogger(write, { ...context, ...ctx }),\n };\n}\n\n// logger.info({name:'wener'},'message')\n// merge initial context with message object\nfunction merge(ctx: any, values: any[]) {\n if (values[0] && typeof values[0] === 'object') {\n return { ...ctx, ...values[0], values: values.slice(1) };\n }\n return { ...ctx, values };\n}\n\n// https://github.com/nestjs/nest/blob/master/packages/common/services/console-logger.service.ts\n"],"names":["createLogger","write","level","values","ctx","merge","console","context","trace","debug","info","warn","error","child","slice"],"mappings":"AASA,OAAO,SAASA,aACdC,QAAwF,CAAC,EACvFC,KAAK,EACLC,MAAM,EACN,GAAGC,KACJ;IACE,CAAA,EAAED,MAAM,EAAE,GAAGC,KAAK,GAAGC,MAAMD,KAAKD,OAAM;IACvCG,OAAO,CAACJ,MAAM,MAAMC,QAAQC;AAC9B,CAAC,EACDG,UAAkB,CAAC,CAAC;IAEpB,OAAO;QACLC,OAAO,CAAC,GAAGL;YACTF,MAAM;gBAAE,GAAGM,OAAO;gBAAEL,OAAO;gBAASC;YAAO;QAC7C;QACAM,OAAO,CAAC,GAAGN;YACTF,MAAM;gBAAE,GAAGM,OAAO;gBAAEL,OAAO;gBAASC;YAAO;QAC7C;QACAO,MAAM,CAAC,GAAGP;YACRF,MAAM;gBAAE,GAAGM,OAAO;gBAAEL,OAAO;gBAAQC;YAAO;QAC5C;QACAQ,MAAM,CAAC,GAAGR;YACRF,MAAM;gBAAE,GAAGM,OAAO;gBAAEL,OAAO;gBAAQC;YAAO;QAC5C;QACAS,OAAO,CAAC,GAAGT;YACTF,MAAM;gBAAE,GAAGM,OAAO;gBAAEL,OAAO;gBAASC;YAAO;QAC7C;QACAU,OAAO,CAACT,MAAQJ,aAAaC,OAAO;gBAAE,GAAGM,OAAO;gBAAE,GAAGH,GAAG;YAAC;IAC3D;AACF;AAEA,wCAAwC;AACxC,4CAA4C;AAC5C,SAASC,MAAMD,GAAQ,EAAED,MAAa;IACpC,IAAIA,MAAM,CAAC,EAAE,IAAI,OAAOA,MAAM,CAAC,EAAE,KAAK,UAAU;QAC9C,OAAO;YAAE,GAAGC,GAAG;YAAE,GAAGD,MAAM,CAAC,EAAE;YAAEA,QAAQA,OAAOW,KAAK,CAAC;QAAG;IACzD;IACA,OAAO;QAAE,GAAGV,GAAG;QAAED;IAAO;AAC1B,EAEA,gGAAgG"}
@@ -0,0 +1,13 @@
1
+ export function createNoopLogger() {
2
+ const noop = (..._)=>undefined;
3
+ return {
4
+ trace: noop,
5
+ debug: noop,
6
+ info: noop,
7
+ warn: noop,
8
+ error: noop,
9
+ child: ()=>createNoopLogger()
10
+ };
11
+ }
12
+
13
+ //# sourceMappingURL=createNoopLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/logging/createNoopLogger.ts"],"sourcesContent":["import type { LoggerWithChild } from './Logger';\n\nexport function createNoopLogger(): LoggerWithChild {\n const noop = (..._: any[]) => undefined;\n return {\n trace: noop,\n debug: noop,\n info: noop,\n warn: noop,\n error: noop,\n child: () => createNoopLogger(),\n };\n}\n"],"names":["createNoopLogger","noop","_","undefined","trace","debug","info","warn","error","child"],"mappings":"AAEA,OAAO,SAASA;IACd,MAAMC,OAAO,CAAC,GAAGC,IAAaC;IAC9B,OAAO;QACLC,OAAOH;QACPI,OAAOJ;QACPK,MAAML;QACNM,MAAMN;QACNO,OAAOP;QACPQ,OAAO,IAAMT;IACf;AACF"}
@@ -0,0 +1,143 @@
1
+ var Level;
2
+ (function(Level) {
3
+ Level[Level["trace"] = -8] = "trace";
4
+ Level[Level["debug"] = -4] = "debug";
5
+ Level[Level["info"] = 0] = "info";
6
+ Level[Level["warn"] = 4] = "warn";
7
+ Level[Level["error"] = 8] = "error";
8
+ })(Level || (Level = {}));
9
+ function createLogFunc(opts) {
10
+ return (msg, ...args)=>{
11
+ const rec = {
12
+ message: String(msg),
13
+ level: opts.level,
14
+ attrs: Object.assign({}, opts.attrs)
15
+ };
16
+ if (args[0] && typeof args[0] === 'object') {
17
+ rec.attrs = Object.assign(rec.attrs, args[0]);
18
+ } else {
19
+ for(let i = 0; i < args.length; i += 2){
20
+ rec.attrs[String(args[i])] = args[i + 1];
21
+ }
22
+ }
23
+ opts.onRecord(rec);
24
+ };
25
+ }
26
+ function stringify(rec, opts = {}) {
27
+ const sb = [];
28
+ if (rec.time) {
29
+ sb.push(rec.time.toJSON());
30
+ }
31
+ rec.level && opts.level !== false && sb.push(rec.level.toUpperCase().padStart(5, ' '));
32
+ sb.push(rec.message);
33
+ if (rec.attrs) {
34
+ for (let [key, value] of Object.entries(rec.attrs)){
35
+ sb.push(`${key}=${JSON.stringify(value)}`);
36
+ }
37
+ }
38
+ return sb.join(' ');
39
+ }
40
+ export function createLogger(opts = {}) {
41
+ opts.time ??= typeof window === 'undefined';
42
+ const onRecord = (record)=>{
43
+ // can change options after create
44
+ const { writer = createLogger.writer, level, time } = opts;
45
+ if (level) {
46
+ if (Level[level] < Level[record.level]) {
47
+ return;
48
+ }
49
+ }
50
+ if (time) {
51
+ record.time = new Date();
52
+ }
53
+ writer(record);
54
+ };
55
+ return {
56
+ trace: createLogFunc({
57
+ onRecord,
58
+ level: 'trace'
59
+ }),
60
+ debug: createLogFunc({
61
+ onRecord,
62
+ level: 'debug'
63
+ }),
64
+ info: createLogFunc({
65
+ onRecord,
66
+ level: 'info'
67
+ }),
68
+ warn: createLogFunc({
69
+ onRecord,
70
+ level: 'warn'
71
+ }),
72
+ error: createLogFunc({
73
+ onRecord,
74
+ level: 'error'
75
+ })
76
+ };
77
+ }
78
+ createLogger.writer = (record)=>{
79
+ const { level } = record;
80
+ console[level || 'info'](stringify(record));
81
+ };
82
+ let formatter = (open, close, replace = open)=>(input)=>{
83
+ let string = '' + input;
84
+ let index = string.indexOf(close, open.length);
85
+ return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close;
86
+ };
87
+ let replaceClose = (string, close, replace, index)=>{
88
+ let start = string.substring(0, index) + replace;
89
+ let end = string.substring(index + close.length);
90
+ let nextIndex = end.indexOf(close);
91
+ return ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end;
92
+ };
93
+ function getEnv() {
94
+ if (typeof process === 'object') {
95
+ return process.env;
96
+ }
97
+ return {};
98
+ }
99
+ function isColorSupported() {
100
+ if (typeof window === 'object') {
101
+ return true;
102
+ }
103
+ const env = getEnv();
104
+ if ('NO_COLOR' in env) {
105
+ return false;
106
+ }
107
+ if ('FORCE_COLOR' in env || 'CI' in env) {
108
+ return true;
109
+ }
110
+ return false;
111
+ }
112
+ export function createConsoleColors(enabled = isColorSupported()) {
113
+ return {
114
+ isColorSupported: enabled,
115
+ reset: enabled ? (s)=>`\x1b[0m${s}\x1b[0m` : String,
116
+ bold: enabled ? formatter('\x1b[1m', '\x1b[22m', '\x1b[22m\x1b[1m') : String,
117
+ dim: enabled ? formatter('\x1b[2m', '\x1b[22m', '\x1b[22m\x1b[2m') : String,
118
+ italic: enabled ? formatter('\x1b[3m', '\x1b[23m') : String,
119
+ underline: enabled ? formatter('\x1b[4m', '\x1b[24m') : String,
120
+ inverse: enabled ? formatter('\x1b[7m', '\x1b[27m') : String,
121
+ hidden: enabled ? formatter('\x1b[8m', '\x1b[28m') : String,
122
+ strikethrough: enabled ? formatter('\x1b[9m', '\x1b[29m') : String,
123
+ black: enabled ? formatter('\x1b[30m', '\x1b[39m') : String,
124
+ red: enabled ? formatter('\x1b[31m', '\x1b[39m') : String,
125
+ green: enabled ? formatter('\x1b[32m', '\x1b[39m') : String,
126
+ yellow: enabled ? formatter('\x1b[33m', '\x1b[39m') : String,
127
+ blue: enabled ? formatter('\x1b[34m', '\x1b[39m') : String,
128
+ magenta: enabled ? formatter('\x1b[35m', '\x1b[39m') : String,
129
+ cyan: enabled ? formatter('\x1b[36m', '\x1b[39m') : String,
130
+ white: enabled ? formatter('\x1b[37m', '\x1b[39m') : String,
131
+ gray: enabled ? formatter('\x1b[90m', '\x1b[39m') : String,
132
+ bgBlack: enabled ? formatter('\x1b[40m', '\x1b[49m') : String,
133
+ bgRed: enabled ? formatter('\x1b[41m', '\x1b[49m') : String,
134
+ bgGreen: enabled ? formatter('\x1b[42m', '\x1b[49m') : String,
135
+ bgYellow: enabled ? formatter('\x1b[43m', '\x1b[49m') : String,
136
+ bgBlue: enabled ? formatter('\x1b[44m', '\x1b[49m') : String,
137
+ bgMagenta: enabled ? formatter('\x1b[45m', '\x1b[49m') : String,
138
+ bgCyan: enabled ? formatter('\x1b[46m', '\x1b[49m') : String,
139
+ bgWhite: enabled ? formatter('\x1b[47m', '\x1b[49m') : String
140
+ };
141
+ }
142
+
143
+ //# sourceMappingURL=slog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/logging/slog.ts"],"sourcesContent":["import { Logger, LogLevel } from './Logger';\n\nenum Level {\n trace = -8,\n debug = -4,\n info = 0,\n warn = 4,\n error = 8,\n}\n\ninterface LogRecord {\n time?: Date;\n message: string;\n level?: 'info' | 'debug' | 'warn' | 'error' | 'trace';\n attrs?: Record<string, any>;\n\n source?: {\n func?: string;\n file?: string;\n line?: number;\n };\n\n // https://cs.opensource.google/go/x/exp/+/d63ba01a:slog/record.go\n}\n\ntype LogFunc =\n | ((message: string) => void)\n | ((message: string, attrs: Record<string, any>) => void)\n | ((message: string, key: string, value: any, ...attrs: any[]) => void);\n\nfunction createLogFunc(opts: {\n onRecord: (rec: LogRecord) => void;\n attrs?: Record<string, any>;\n level?: LogLevel;\n}): LogFunc {\n return (msg: string, ...args: any[]) => {\n const rec = {\n message: String(msg),\n level: opts.level,\n attrs: Object.assign({}, opts.attrs),\n };\n\n if (args[0] && typeof args[0] === 'object') {\n rec.attrs = Object.assign(rec.attrs, args[0]);\n } else {\n for (let i = 0; i < args.length; i += 2) {\n rec.attrs[String(args[i])] = args[i + 1];\n }\n }\n\n opts.onRecord(rec);\n };\n}\n\nfunction stringify(rec: LogRecord, opts: { level?: boolean } = {}) {\n const sb = [];\n if (rec.time) {\n sb.push(rec.time.toJSON());\n }\n rec.level && opts.level !== false && sb.push(rec.level.toUpperCase().padStart(5, ' '));\n sb.push(rec.message);\n\n if (rec.attrs) {\n for (let [key, value] of Object.entries(rec.attrs)) {\n sb.push(`${key}=${JSON.stringify(value)}`);\n }\n }\n return sb.join(' ');\n}\n\nexport function createLogger(\n opts: { writer?: (record: LogRecord) => void; level?: LogLevel; time?: boolean } = {},\n): Logger {\n opts.time ??= typeof window === 'undefined';\n const onRecord = (record: LogRecord) => {\n // can change options after create\n const { writer = createLogger.writer, level, time } = opts;\n if (level) {\n if (Level[level] < Level[record.level!]) {\n return;\n }\n }\n if (time) {\n record.time = new Date();\n }\n writer(record);\n };\n return {\n trace: createLogFunc({ onRecord, level: 'trace' }),\n debug: createLogFunc({ onRecord, level: 'debug' }),\n info: createLogFunc({ onRecord, level: 'info' }),\n warn: createLogFunc({ onRecord, level: 'warn' }),\n error: createLogFunc({ onRecord, level: 'error' }),\n };\n}\n\ncreateLogger.writer = (record: LogRecord) => {\n const { level } = record;\n console[level || 'info'](stringify(record));\n};\n\n// https://github.com/alexeyraspopov/picocolors/blob/main/picocolors.js\n/*\nMDN: Styling console output\nhttps://developer.mozilla.org/en-US/docs/Web/API/console#Usage\n\nChrome: Console API Reference\nhttps://developers.google.com/web/tools/chrome-devtools/console/console-write#styling_console_output_with_css\n\nWebKit: Console Object API\nhttps://webkit.org/web-inspector/console-object-api/\n\nhttps://stackoverflow.com/questions/7505623\n\nconsole.log('\\x1b[36m Hello \\x1b[34m Colored \\x1b[35m World!');\nconsole.log('\\x1B[31mHello\\x1B[34m World');\nconsole.log('\\x1b[43mHighlighted');\n\n\nNestJS Formatter\nhttps://github.com/nestjs/nest/blob/d4bda940fc10238eb18f14ebf66d66b7ef8bff41/packages/common/services/console-logger.service.ts#L201-L227\n\n */\n\nexport type Formatter = (input: string | number | null | undefined) => string;\n\nexport interface Colors {\n isColorSupported: boolean;\n reset: Formatter;\n bold: Formatter;\n dim: Formatter;\n italic: Formatter;\n underline: Formatter;\n inverse: Formatter;\n hidden: Formatter;\n strikethrough: Formatter;\n black: Formatter;\n red: Formatter;\n green: Formatter;\n yellow: Formatter;\n blue: Formatter;\n magenta: Formatter;\n cyan: Formatter;\n white: Formatter;\n gray: Formatter;\n bgBlack: Formatter;\n bgRed: Formatter;\n bgGreen: Formatter;\n bgYellow: Formatter;\n bgBlue: Formatter;\n bgMagenta: Formatter;\n bgCyan: Formatter;\n bgWhite: Formatter;\n}\n\nlet formatter =\n (open: string, close: string, replace: string = open) =>\n (input: string) => {\n let string = '' + input;\n let index = string.indexOf(close, open.length);\n return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close;\n };\n\nlet replaceClose = (string: string, close: string, replace: string, index: number): string => {\n let start = string.substring(0, index) + replace;\n let end = string.substring(index + close.length);\n let nextIndex = end.indexOf(close);\n return ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end;\n};\n\nfunction getEnv(): Record<string, string | undefined> {\n if (typeof process === 'object') {\n return process.env;\n }\n return {};\n}\n\nfunction isColorSupported() {\n if (typeof window === 'object') {\n return true;\n }\n const env = getEnv();\n if ('NO_COLOR' in env) {\n return false;\n }\n if ('FORCE_COLOR' in env || 'CI' in env) {\n return true;\n }\n return false;\n}\n\nexport function createConsoleColors(enabled = isColorSupported()) {\n return {\n isColorSupported: enabled,\n reset: enabled ? (s: string) => `\\x1b[0m${s}\\x1b[0m` : String,\n bold: enabled ? formatter('\\x1b[1m', '\\x1b[22m', '\\x1b[22m\\x1b[1m') : String,\n dim: enabled ? formatter('\\x1b[2m', '\\x1b[22m', '\\x1b[22m\\x1b[2m') : String,\n italic: enabled ? formatter('\\x1b[3m', '\\x1b[23m') : String,\n underline: enabled ? formatter('\\x1b[4m', '\\x1b[24m') : String,\n inverse: enabled ? formatter('\\x1b[7m', '\\x1b[27m') : String,\n hidden: enabled ? formatter('\\x1b[8m', '\\x1b[28m') : String,\n strikethrough: enabled ? formatter('\\x1b[9m', '\\x1b[29m') : String,\n black: enabled ? formatter('\\x1b[30m', '\\x1b[39m') : String,\n red: enabled ? formatter('\\x1b[31m', '\\x1b[39m') : String,\n green: enabled ? formatter('\\x1b[32m', '\\x1b[39m') : String,\n yellow: enabled ? formatter('\\x1b[33m', '\\x1b[39m') : String,\n blue: enabled ? formatter('\\x1b[34m', '\\x1b[39m') : String,\n magenta: enabled ? formatter('\\x1b[35m', '\\x1b[39m') : String,\n cyan: enabled ? formatter('\\x1b[36m', '\\x1b[39m') : String,\n white: enabled ? formatter('\\x1b[37m', '\\x1b[39m') : String,\n gray: enabled ? formatter('\\x1b[90m', '\\x1b[39m') : String,\n bgBlack: enabled ? formatter('\\x1b[40m', '\\x1b[49m') : String,\n bgRed: enabled ? formatter('\\x1b[41m', '\\x1b[49m') : String,\n bgGreen: enabled ? formatter('\\x1b[42m', '\\x1b[49m') : String,\n bgYellow: enabled ? formatter('\\x1b[43m', '\\x1b[49m') : String,\n bgBlue: enabled ? formatter('\\x1b[44m', '\\x1b[49m') : String,\n bgMagenta: enabled ? formatter('\\x1b[45m', '\\x1b[49m') : String,\n bgCyan: enabled ? formatter('\\x1b[46m', '\\x1b[49m') : String,\n bgWhite: enabled ? formatter('\\x1b[47m', '\\x1b[49m') : String,\n };\n}\n"],"names":["Level","createLogFunc","opts","msg","args","rec","message","String","level","attrs","Object","assign","i","length","onRecord","stringify","sb","time","push","toJSON","toUpperCase","padStart","key","value","entries","JSON","join","createLogger","window","record","writer","Date","trace","debug","info","warn","error","console","formatter","open","close","replace","input","string","index","indexOf","replaceClose","start","substring","end","nextIndex","getEnv","process","env","isColorSupported","createConsoleColors","enabled","reset","s","bold","dim","italic","underline","inverse","hidden","strikethrough","black","red","green","yellow","blue","magenta","cyan","white","gray","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ // export function clamp<T>(value: T | null | undefined, o: { min: T; max: T; default?: T }): T;
2
+ export function clamp(value, ...o) {
3
+ let min, max, def;
4
+ if (o.length === 1) {
5
+ ({ min, max, default: def = min } = o[0]);
6
+ } else {
7
+ [min, max, def = min] = o;
8
+ }
9
+ if (value === null || value === undefined) {
10
+ return def;
11
+ }
12
+ if (value < min) {
13
+ return min;
14
+ }
15
+ if (value > max) {
16
+ return max;
17
+ }
18
+ return value;
19
+ } // type Comparable = number | string | Date | BigInt;
20
+
21
+ //# sourceMappingURL=clamp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/maths/clamp.ts"],"sourcesContent":["// export function clamp<T>(value: T | null | undefined, o: { min: T; max: T; default?: T }): T;\n\nexport function clamp<T>(value: T | null | undefined, min: T, max: T, def?: T): T;\nexport function clamp<T>(value: T | null | undefined, ...o: any[]): T {\n let min: T, max: T, def: T;\n if (o.length === 1) {\n ({ min, max, default: def = min! } = o[0]);\n } else {\n [min, max, def = min!] = o;\n }\n if (value === null || value === undefined) {\n return def;\n }\n if (value < min) {\n return min;\n }\n if (value > max) {\n return max;\n }\n return value;\n}\n\n// type Comparable = number | string | Date | BigInt;\n"],"names":["clamp","value","o","min","max","def","length","default","undefined"],"mappings":"AAAA,gGAAgG;AAGhG,OAAO,SAASA,MAASC,KAA2B,EAAE,GAAGC,CAAQ;IAC/D,IAAIC,KAAQC,KAAQC;IACpB,IAAIH,EAAEI,MAAM,KAAK,GAAG;QACjB,CAAA,EAAEH,GAAG,EAAEC,GAAG,EAAEG,SAASF,MAAMF,GAAI,EAAE,GAAGD,CAAC,CAAC,EAAE,AAAD;IAC1C,OAAO;QACL,CAACC,KAAKC,KAAKC,MAAMF,GAAI,CAAC,GAAGD;IAC3B;IACA,IAAID,UAAU,QAAQA,UAAUO,WAAW;QACzC,OAAOH;IACT;IACA,IAAIJ,QAAQE,KAAK;QACf,OAAOA;IACT;IACA,IAAIF,QAAQG,KAAK;QACf,OAAOA;IACT;IACA,OAAOH;AACT,EAEA,qDAAqD"}