@wener/utils 1.1.32 → 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 (160) hide show
  1. package/lib/asyncs/nextOfAsyncIterator.js +8 -0
  2. package/lib/asyncs/nextOfAsyncIterator.js.map +1 -1
  3. package/lib/asyncs/timeout.js +9 -5
  4. package/lib/asyncs/timeout.js.map +1 -1
  5. package/lib/cn/index.js +3 -0
  6. package/lib/cn/index.js.map +1 -0
  7. package/lib/cn/parseChineseNumber.js +94 -0
  8. package/lib/cn/parseChineseNumber.js.map +1 -0
  9. package/lib/crypto/getRandomValues.js +6 -3
  10. package/lib/crypto/getRandomValues.js.map +1 -1
  11. package/lib/errors/Errors.js +1 -1
  12. package/lib/errors/Errors.js.map +1 -1
  13. package/lib/index.js +3 -0
  14. package/lib/index.js.map +1 -1
  15. package/lib/io/Bytes.js +51 -0
  16. package/lib/io/Bytes.js.map +1 -0
  17. package/lib/isomorphics/structuredClone.js +1 -3
  18. package/lib/isomorphics/structuredClone.js.map +1 -1
  19. package/lib/langs/AsyncCloser.js +40 -0
  20. package/lib/langs/AsyncCloser.js.map +1 -0
  21. package/lib/langs/Closer.js +34 -0
  22. package/lib/langs/Closer.js.map +1 -0
  23. package/lib/logging/Logger.js.map +1 -1
  24. package/lib/logging/slog.js.map +1 -1
  25. package/lib/objects/merge/merge.js +1 -0
  26. package/lib/schema/typebox/gen/codegen/common/encoder.js +0 -6
  27. package/lib/schema/typebox/gen/codegen/common/encoder.js.map +1 -1
  28. package/lib/schema/typebox/gen/codegen/common/formatter.js.map +1 -1
  29. package/lib/schema/typebox/gen/codegen/common/index.js +25 -1
  30. package/lib/schema/typebox/gen/codegen/common/jsdoc.js.map +1 -1
  31. package/lib/schema/typebox/gen/codegen/expression/compiler.js +2 -5
  32. package/lib/schema/typebox/gen/codegen/expression/compiler.js.map +1 -1
  33. package/lib/schema/typebox/gen/codegen/expression/errors.js +1 -1
  34. package/lib/schema/typebox/gen/codegen/expression/errors.js.map +1 -1
  35. package/lib/schema/typebox/gen/codegen/expression/evaluator.js +1 -1
  36. package/lib/schema/typebox/gen/codegen/expression/evaluator.js.map +1 -1
  37. package/lib/schema/typebox/gen/codegen/expression/expression.js +48 -51
  38. package/lib/schema/typebox/gen/codegen/expression/expression.js.map +1 -1
  39. package/lib/schema/typebox/gen/codegen/expression/index.js +27 -1
  40. package/lib/schema/typebox/gen/codegen/index.js +25 -1
  41. package/lib/schema/typebox/gen/codegen/model/index.js +25 -1
  42. package/lib/schema/typebox/gen/codegen/model/model-to-arktype.js +25 -4
  43. package/lib/schema/typebox/gen/codegen/model/model-to-arktype.js.map +1 -1
  44. package/lib/schema/typebox/gen/codegen/model/model-to-expression.js +26 -2
  45. package/lib/schema/typebox/gen/codegen/model/model-to-expression.js.map +1 -1
  46. package/lib/schema/typebox/gen/codegen/model/model-to-grpc.js +25 -4
  47. package/lib/schema/typebox/gen/codegen/model/model-to-grpc.js.map +1 -1
  48. package/lib/schema/typebox/gen/codegen/model/model-to-io-ts.js +25 -4
  49. package/lib/schema/typebox/gen/codegen/model/model-to-io-ts.js.map +1 -1
  50. package/lib/schema/typebox/gen/codegen/model/model-to-javascript.js.map +1 -1
  51. package/lib/schema/typebox/gen/codegen/model/model-to-json-schema.js +25 -4
  52. package/lib/schema/typebox/gen/codegen/model/model-to-json-schema.js.map +1 -1
  53. package/lib/schema/typebox/gen/codegen/model/model-to-typebox.js.map +1 -1
  54. package/lib/schema/typebox/gen/codegen/model/model-to-typescript.js +25 -1
  55. package/lib/schema/typebox/gen/codegen/model/model-to-typescript.js.map +1 -1
  56. package/lib/schema/typebox/gen/codegen/model/model-to-valibot.js +25 -4
  57. package/lib/schema/typebox/gen/codegen/model/model-to-valibot.js.map +1 -1
  58. package/lib/schema/typebox/gen/codegen/model/model-to-value.js.map +1 -1
  59. package/lib/schema/typebox/gen/codegen/model/model-to-yrel.js +25 -4
  60. package/lib/schema/typebox/gen/codegen/model/model-to-yrel.js.map +1 -1
  61. package/lib/schema/typebox/gen/codegen/model/model-to-yup.js +25 -4
  62. package/lib/schema/typebox/gen/codegen/model/model-to-yup.js.map +1 -1
  63. package/lib/schema/typebox/gen/codegen/model/model-to-zod.js +25 -4
  64. package/lib/schema/typebox/gen/codegen/model/model-to-zod.js.map +1 -1
  65. package/lib/schema/typebox/gen/codegen/model/model.js.map +1 -1
  66. package/lib/schema/typebox/gen/codegen/typescript/index.js +25 -1
  67. package/lib/schema/typebox/gen/codegen/typescript/typescript-to-model.js +25 -1
  68. package/lib/schema/typebox/gen/codegen/typescript/typescript-to-model.js.map +1 -1
  69. package/lib/schema/typebox/gen/codegen/typescript/typescript-to-typebox.js +27 -3
  70. package/lib/schema/typebox/gen/codegen/typescript/typescript-to-typebox.js.map +1 -1
  71. package/lib/server/crypto/md5.js.map +1 -0
  72. package/lib/server/fetch/createFetchWithProxy.js.map +1 -0
  73. package/lib/server/fetch/createFetchWithProxyByNodeFetch.js.map +1 -0
  74. package/lib/server/fetch/createFetchWithProxyByUndici.js.map +1 -0
  75. package/lib/server/getPackageDir.js.map +1 -0
  76. package/lib/server/index.js +7 -0
  77. package/lib/server/index.js.map +1 -0
  78. package/lib/server/jsdom.js.map +1 -0
  79. package/lib/server/node-fetch.js.map +1 -0
  80. package/lib/server/polyfill/polyfillBrowser.js.map +1 -0
  81. package/lib/server/polyfill/polyfillCrypto.js.map +1 -0
  82. package/lib/server/polyfill/polyfillFetch.js.map +1 -0
  83. package/lib/server/polyfill/polyfillJsDom.js.map +1 -0
  84. package/lib/{servers → server}/polyfill/polyfillWebSocket.js +5 -0
  85. package/lib/server/polyfill/polyfillWebSocket.js.map +1 -0
  86. package/lib/server/ws.js.map +1 -0
  87. package/lib/{types/index.d.js → types.d.js} +1 -1
  88. package/lib/types.d.js.map +1 -0
  89. package/package.json +37 -71
  90. package/src/asyncs/nextOfAsyncIterator.ts +13 -1
  91. package/src/asyncs/timeout.ts +15 -12
  92. package/src/cn/index.ts +1 -0
  93. package/src/cn/parseChineseNumber.test.ts +24 -0
  94. package/src/cn/parseChineseNumber.ts +97 -0
  95. package/src/crypto/getRandomValues.ts +5 -3
  96. package/src/crypto/hashing.test.ts +1 -1
  97. package/src/errors/Errors.test.ts +22 -0
  98. package/src/errors/Errors.ts +1 -4
  99. package/src/index.ts +2 -0
  100. package/src/io/Bytes.ts +64 -0
  101. package/src/isomorphics/structuredClone.ts +0 -3
  102. package/src/langs/AsyncCloser.ts +45 -0
  103. package/src/langs/Closer.ts +39 -0
  104. package/src/server/index.ts +6 -0
  105. package/src/{servers → server}/polyfill/polyfillWebSocket.ts +5 -0
  106. package/src/{types/index.d.ts → types.d.ts} +12 -0
  107. package/tsconfig.json +7 -5
  108. package/index.ts +0 -1
  109. package/lib/server.js +0 -7
  110. package/lib/server.js.map +0 -1
  111. package/lib/servers/crypto/md5.js.map +0 -1
  112. package/lib/servers/fetch/createFetchWithProxy.js.map +0 -1
  113. package/lib/servers/fetch/createFetchWithProxyByNodeFetch.js.map +0 -1
  114. package/lib/servers/fetch/createFetchWithProxyByUndici.js.map +0 -1
  115. package/lib/servers/getPackageDir.js.map +0 -1
  116. package/lib/servers/jsdom.js.map +0 -1
  117. package/lib/servers/node-fetch.js.map +0 -1
  118. package/lib/servers/polyfill/polyfillBrowser.js.map +0 -1
  119. package/lib/servers/polyfill/polyfillCrypto.js.map +0 -1
  120. package/lib/servers/polyfill/polyfillFetch.js.map +0 -1
  121. package/lib/servers/polyfill/polyfillJsDom.js.map +0 -1
  122. package/lib/servers/polyfill/polyfillWebSocket.js.map +0 -1
  123. package/lib/servers/ws.js.map +0 -1
  124. package/lib/types/global.d.js +0 -2
  125. package/lib/types/global.d.js.map +0 -1
  126. package/lib/types/index.d.js.map +0 -1
  127. package/schema/typebox/gen/index.ts +0 -1
  128. package/schema/typebox/index.ts +0 -1
  129. package/server/jsdom.ts +0 -1
  130. package/server/node-fetch.ts +0 -1
  131. package/server/ws.ts +0 -1
  132. package/server.ts +0 -1
  133. package/src/server.ts +0 -6
  134. package/src/types/global.d.ts +0 -11
  135. package/types.d.ts +0 -1
  136. /package/lib/{servers → server}/crypto/md5.js +0 -0
  137. /package/lib/{servers → server}/fetch/createFetchWithProxy.js +0 -0
  138. /package/lib/{servers → server}/fetch/createFetchWithProxyByNodeFetch.js +0 -0
  139. /package/lib/{servers → server}/fetch/createFetchWithProxyByUndici.js +0 -0
  140. /package/lib/{servers → server}/getPackageDir.js +0 -0
  141. /package/lib/{servers → server}/jsdom.js +0 -0
  142. /package/lib/{servers → server}/node-fetch.js +0 -0
  143. /package/lib/{servers → server}/polyfill/polyfillBrowser.js +0 -0
  144. /package/lib/{servers → server}/polyfill/polyfillCrypto.js +0 -0
  145. /package/lib/{servers → server}/polyfill/polyfillFetch.js +0 -0
  146. /package/lib/{servers → server}/polyfill/polyfillJsDom.js +0 -0
  147. /package/lib/{servers → server}/ws.js +0 -0
  148. /package/src/{servers → server}/crypto/md5.ts +0 -0
  149. /package/src/{servers → server}/fetch/createFetchWithProxy.ts +0 -0
  150. /package/src/{servers → server}/fetch/createFetchWithProxyByNodeFetch.ts +0 -0
  151. /package/src/{servers → server}/fetch/createFetchWithProxyByUndici.ts +0 -0
  152. /package/src/{servers → server}/getPackageDir.ts +0 -0
  153. /package/src/{servers → server}/jsdom.ts +0 -0
  154. /package/src/{servers → server}/node-fetch.ts +0 -0
  155. /package/src/{servers → server}/polyfill/polyfillBrowser.test.ts +0 -0
  156. /package/src/{servers → server}/polyfill/polyfillBrowser.ts +0 -0
  157. /package/src/{servers → server}/polyfill/polyfillCrypto.ts +0 -0
  158. /package/src/{servers → server}/polyfill/polyfillFetch.ts +0 -0
  159. /package/src/{servers → server}/polyfill/polyfillJsDom.ts +0 -0
  160. /package/src/{servers → server}/ws.ts +0 -0
@@ -17,6 +17,14 @@ export function nextOfAsyncIterator(it) {
17
17
  next.done
18
18
  ];
19
19
  }
20
+ if (it && typeof it === 'object') {
21
+ if (Symbol.iterator in it) {
22
+ return nextOfAsyncIterator(it[Symbol.iterator]());
23
+ }
24
+ if (Symbol.asyncIterator in it) {
25
+ return nextOfAsyncIterator(it[Symbol.asyncIterator]());
26
+ }
27
+ }
20
28
  return [
21
29
  it
22
30
  ];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/asyncs/nextOfAsyncIterator.ts"],"sourcesContent":["import { MaybePromise } from './MaybePromise';\nimport { isIterator } from './isIterator';\nimport { isPromise } from './isPromise';\n\nexport function nextOfAsyncIterator<T>(\n it: MaybePromise<AsyncIterator<T> | Iterator<T> | T>,\n): MaybePromise<[value: T, done?: boolean]> {\n if (isPromise(it)) {\n return it.then((v) => nextOfAsyncIterator(v));\n }\n if (isIterator(it)) {\n let next = it.next();\n if (isPromise(next)) {\n return next.then((v) => [v.value, v.done]);\n }\n return [next.value, next.done];\n }\n return [it];\n}\n"],"names":["isIterator","isPromise","nextOfAsyncIterator","it","then","v","next","value","done"],"mappings":"AACA,SAASA,UAAU,QAAQ,eAAe;AAC1C,SAASC,SAAS,QAAQ,cAAc;AAExC,OAAO,SAASC,oBACdC,EAAoD;IAEpD,IAAIF,UAAUE,KAAK;QACjB,OAAOA,GAAGC,IAAI,CAAC,CAACC,IAAMH,oBAAoBG;IAC5C;IACA,IAAIL,WAAWG,KAAK;QAClB,IAAIG,OAAOH,GAAGG,IAAI;QAClB,IAAIL,UAAUK,OAAO;YACnB,OAAOA,KAAKF,IAAI,CAAC,CAACC,IAAM;oBAACA,EAAEE,KAAK;oBAAEF,EAAEG,IAAI;iBAAC;QAC3C;QACA,OAAO;YAACF,KAAKC,KAAK;YAAED,KAAKE,IAAI;SAAC;IAChC;IACA,OAAO;QAACL;KAAG;AACb"}
1
+ {"version":3,"sources":["../../src/asyncs/nextOfAsyncIterator.ts"],"sourcesContent":["import { MaybePromise } from './MaybePromise';\nimport { isIterator } from './isIterator';\nimport { isPromise } from './isPromise';\n\ntype IteratorLike<T> = Iterable<T> | Iterator<T>;\ntype AsyncIteratorLike<T> = AsyncIterable<T> | AsyncIterator<T> | AsyncIterableIterator<T> | IteratorLike<T>;\n\nexport function nextOfAsyncIterator<T>(\n it: MaybePromise<AsyncIterable<T> | Iterable<T> | AsyncIterator<T> | Iterator<T> | T>,\n): MaybePromise<[value: T, done?: boolean]> {\n if (isPromise(it)) {\n return it.then((v) => nextOfAsyncIterator(v));\n }\n\n if (isIterator(it)) {\n let next = it.next();\n if (isPromise(next)) {\n return next.then((v) => [v.value, v.done]);\n }\n return [next.value, next.done];\n }\n if (it && typeof it === 'object') {\n if (Symbol.iterator in it) {\n return nextOfAsyncIterator(it[Symbol.iterator]());\n }\n if (Symbol.asyncIterator in it) {\n return nextOfAsyncIterator(it[Symbol.asyncIterator]());\n }\n }\n return [it];\n}\n"],"names":["isIterator","isPromise","nextOfAsyncIterator","it","then","v","next","value","done","Symbol","iterator","asyncIterator"],"mappings":"AACA,SAASA,UAAU,QAAQ,eAAe;AAC1C,SAASC,SAAS,QAAQ,cAAc;AAKxC,OAAO,SAASC,oBACdC,EAAqF;IAErF,IAAIF,UAAUE,KAAK;QACjB,OAAOA,GAAGC,IAAI,CAAC,CAACC,IAAMH,oBAAoBG;IAC5C;IAEA,IAAIL,WAAWG,KAAK;QAClB,IAAIG,OAAOH,GAAGG,IAAI;QAClB,IAAIL,UAAUK,OAAO;YACnB,OAAOA,KAAKF,IAAI,CAAC,CAACC,IAAM;oBAACA,EAAEE,KAAK;oBAAEF,EAAEG,IAAI;iBAAC;QAC3C;QACA,OAAO;YAACF,KAAKC,KAAK;YAAED,KAAKE,IAAI;SAAC;IAChC;IACA,IAAIL,MAAM,OAAOA,OAAO,UAAU;QAChC,IAAIM,OAAOC,QAAQ,IAAIP,IAAI;YACzB,OAAOD,oBAAoBC,EAAE,CAACM,OAAOC,QAAQ,CAAC;QAChD;QACA,IAAID,OAAOE,aAAa,IAAIR,IAAI;YAC9B,OAAOD,oBAAoBC,EAAE,CAACM,OAAOE,aAAa,CAAC;QACrD;IACF;IACA,OAAO;QAACR;KAAG;AACb"}
@@ -1,19 +1,23 @@
1
1
  export function timeout(v, ms) {
2
2
  const error = new TimeoutError();
3
3
  let timeout;
4
+ let ac;
5
+ if (typeof v === 'function') {
6
+ ac = new AbortController();
7
+ v = v({
8
+ signal: ac.signal
9
+ });
10
+ }
4
11
  return Promise.race([
5
12
  v,
6
13
  new Promise((_resolve, reject)=>{
7
14
  timeout = setTimeout(()=>{
15
+ ac?.abort(error);
8
16
  reject(error);
9
17
  }, ms);
10
18
  })
11
- ]).then((v)=>{
12
- clearTimeout(timeout);
13
- return v;
14
- }, (e)=>{
19
+ ]).finally(()=>{
15
20
  clearTimeout(timeout);
16
- throw e;
17
21
  });
18
22
  }
19
23
  export class TimeoutError extends Error {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/asyncs/timeout.ts"],"sourcesContent":["export function timeout<T = any>(v: Promise<T>, ms: number): Promise<T> {\n const error = new TimeoutError();\n let timeout: any;\n return Promise.race([\n v,\n new Promise((_resolve, reject) => {\n timeout = setTimeout(() => {\n reject(error);\n }, ms);\n }),\n ]).then(\n (v) => {\n clearTimeout(timeout);\n return v;\n },\n (e) => {\n clearTimeout(timeout);\n throw e;\n },\n ) as Promise<T>;\n}\n\nexport class TimeoutError extends Error {\n constructor() {\n super('TimeoutError');\n }\n}\n"],"names":["timeout","v","ms","error","TimeoutError","Promise","race","_resolve","reject","setTimeout","then","clearTimeout","e","Error","constructor"],"mappings":"AAAA,OAAO,SAASA,QAAiBC,CAAa,EAAEC,EAAU;IACxD,MAAMC,QAAQ,IAAIC;IAClB,IAAIJ;IACJ,OAAOK,QAAQC,IAAI,CAAC;QAClBL;QACA,IAAII,QAAQ,CAACE,UAAUC;YACrBR,UAAUS,WAAW;gBACnBD,OAAOL;YACT,GAAGD;QACL;KACD,EAAEQ,IAAI,CACL,CAACT;QACCU,aAAaX;QACb,OAAOC;IACT,GACA,CAACW;QACCD,aAAaX;QACb,MAAMY;IACR;AAEJ;AAEA,OAAO,MAAMR,qBAAqBS;IAChCC,aAAc;QACZ,KAAK,CAAC;IACR;AACF"}
1
+ {"version":3,"sources":["../../src/asyncs/timeout.ts"],"sourcesContent":["export function timeout<T = any>(\n v: Promise<T> | ((args: { signal: AbortSignal }) => Promise<T>),\n ms: number,\n): Promise<T> {\n const error = new TimeoutError();\n let timeout: any;\n let ac: AbortController | undefined;\n if (typeof v === 'function') {\n ac = new AbortController();\n v = v({ signal: ac.signal });\n }\n\n return Promise.race<T>([\n v,\n new Promise((_resolve, reject) => {\n timeout = setTimeout(() => {\n ac?.abort(error);\n reject(error);\n }, ms);\n }),\n ]).finally(() => {\n clearTimeout(timeout);\n });\n}\n\nexport class TimeoutError extends Error {\n constructor() {\n super('TimeoutError');\n }\n}\n"],"names":["timeout","v","ms","error","TimeoutError","ac","AbortController","signal","Promise","race","_resolve","reject","setTimeout","abort","finally","clearTimeout","Error","constructor"],"mappings":"AAAA,OAAO,SAASA,QACdC,CAA+D,EAC/DC,EAAU;IAEV,MAAMC,QAAQ,IAAIC;IAClB,IAAIJ;IACJ,IAAIK;IACJ,IAAI,OAAOJ,MAAM,YAAY;QAC3BI,KAAK,IAAIC;QACTL,IAAIA,EAAE;YAAEM,QAAQF,GAAGE,MAAM;QAAC;IAC5B;IAEA,OAAOC,QAAQC,IAAI,CAAI;QACrBR;QACA,IAAIO,QAAQ,CAACE,UAAUC;YACrBX,UAAUY,WAAW;gBACnBP,IAAIQ,MAAMV;gBACVQ,OAAOR;YACT,GAAGD;QACL;KACD,EAAEY,OAAO,CAAC;QACTC,aAAaf;IACf;AACF;AAEA,OAAO,MAAMI,qBAAqBY;IAChCC,aAAc;QACZ,KAAK,CAAC;IACR;AACF"}
@@ -0,0 +1,3 @@
1
+ export { parseChineseNumber } from './parseChineseNumber.js';
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cn/index.ts"],"sourcesContent":["export { parseChineseNumber } from './parseChineseNumber';\n"],"names":["parseChineseNumber"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,uBAAuB"}
@@ -0,0 +1,94 @@
1
+ const ToNumber = {
2
+ 〇: 0,
3
+ 一: 1,
4
+ 二: 2,
5
+ 三: 3,
6
+ 四: 4,
7
+ 五: 5,
8
+ 六: 6,
9
+ 七: 7,
10
+ 八: 8,
11
+ 九: 9,
12
+ 十: 10,
13
+ 百: 100,
14
+ 千: 1000,
15
+ 万: 10_000,
16
+ 零: 0,
17
+ 壹: 1,
18
+ 贰: 2,
19
+ 叁: 3,
20
+ 肆: 4,
21
+ 伍: 5,
22
+ 陆: 6,
23
+ 柒: 7,
24
+ 捌: 8,
25
+ 玖: 9,
26
+ 拾: 10,
27
+ 佰: 100,
28
+ 仟: 1000,
29
+ 0: 0,
30
+ 1: 1,
31
+ 2: 2,
32
+ 3: 3,
33
+ 4: 4,
34
+ 5: 5,
35
+ 6: 6,
36
+ 7: 7,
37
+ 8: 8,
38
+ 9: 9
39
+ };
40
+ // 一万一 -> 10001
41
+ // 一万一百一 -> 10101
42
+ // 一万 -> 10000
43
+ // 10000 -> 10000
44
+ export function parseChineseNumber(s) {
45
+ if (typeof s === 'number') {
46
+ return s;
47
+ }
48
+ let n = 0;
49
+ let c = 0;
50
+ let base = 0;
51
+ let shouldAddLast = false;
52
+ for (const char of s.split('').reverse()){
53
+ c = ToNumber[char];
54
+ if (c === undefined) {
55
+ throw new Error(`无法解析的数字: ${char}`);
56
+ }
57
+ switch(c){
58
+ case 10:
59
+ {
60
+ base = 1;
61
+ break;
62
+ }
63
+ case 100:
64
+ {
65
+ base = 2;
66
+ break;
67
+ }
68
+ case 1000:
69
+ {
70
+ base = 3;
71
+ break;
72
+ }
73
+ case 10_000:
74
+ {
75
+ base = 4;
76
+ break;
77
+ }
78
+ }
79
+ //
80
+ if (c < 10) {
81
+ n += c * 10 ** base;
82
+ base++;
83
+ shouldAddLast = false;
84
+ } else {
85
+ shouldAddLast = true;
86
+ }
87
+ }
88
+ if (shouldAddLast) {
89
+ n += c;
90
+ }
91
+ return n;
92
+ }
93
+
94
+ //# sourceMappingURL=parseChineseNumber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cn/parseChineseNumber.ts"],"sourcesContent":["const ToNumber: Record<string, number> = {\n 〇: 0,\n 一: 1,\n 二: 2,\n 三: 3,\n 四: 4,\n 五: 5,\n 六: 6,\n 七: 7,\n 八: 8,\n 九: 9,\n 十: 10,\n 百: 100,\n 千: 1000,\n 万: 10_000,\n 零: 0,\n 壹: 1,\n 贰: 2,\n 叁: 3,\n 肆: 4,\n 伍: 5,\n 陆: 6,\n 柒: 7,\n 捌: 8,\n 玖: 9,\n 拾: 10,\n 佰: 100,\n 仟: 1000,\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3,\n 4: 4,\n 5: 5,\n 6: 6,\n 7: 7,\n 8: 8,\n 9: 9,\n};\n\n// 一万一 -> 10001\n// 一万一百一 -> 10101\n// 一万 -> 10000\n// 10000 -> 10000\nexport function parseChineseNumber(s: string | number) {\n if (typeof s === 'number') {\n return s;\n }\n\n let n = 0;\n let c = 0;\n let base = 0;\n let shouldAddLast = false;\n for (const char of s.split('').reverse()) {\n c = ToNumber[char];\n if (c === undefined) {\n throw new Error(`无法解析的数字: ${char}`);\n }\n\n switch (c) {\n case 10: {\n base = 1;\n break;\n }\n\n case 100: {\n base = 2;\n break;\n }\n\n case 1000: {\n base = 3;\n break;\n }\n\n case 10_000: {\n base = 4;\n break;\n }\n }\n\n //\n if (c < 10) {\n n += c * 10 ** base;\n base++;\n shouldAddLast = false;\n } else {\n shouldAddLast = true;\n }\n }\n\n if (shouldAddLast) {\n n += c;\n }\n\n return n;\n}\n"],"names":["ToNumber","〇","一","二","三","四","五","六","七","八","九","十","百","千","万","零","壹","贰","叁","肆","伍","陆","柒","捌","玖","拾","佰","仟","parseChineseNumber","s","n","c","base","shouldAddLast","char","split","reverse","undefined","Error"],"mappings":"AAAA,MAAMA,WAAmC;IACvCC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;AACL;AAEA,eAAe;AACf,iBAAiB;AACjB,cAAc;AACd,iBAAiB;AACjB,OAAO,SAASC,mBAAmBC,CAAkB;IACnD,IAAI,OAAOA,MAAM,UAAU;QACzB,OAAOA;IACT;IAEA,IAAIC,IAAI;IACR,IAAIC,IAAI;IACR,IAAIC,OAAO;IACX,IAAIC,gBAAgB;IACpB,KAAK,MAAMC,QAAQL,EAAEM,KAAK,CAAC,IAAIC,OAAO,GAAI;QACxCL,IAAI/B,QAAQ,CAACkC,KAAK;QAClB,IAAIH,MAAMM,WAAW;YACnB,MAAM,IAAIC,MAAM,CAAC,SAAS,EAAEJ,KAAK,CAAC;QACpC;QAEA,OAAQH;YACN,KAAK;gBAAI;oBACPC,OAAO;oBACP;gBACF;YAEA,KAAK;gBAAK;oBACRA,OAAO;oBACP;gBACF;YAEA,KAAK;gBAAM;oBACTA,OAAO;oBACP;gBACF;YAEA,KAAK;gBAAQ;oBACXA,OAAO;oBACP;gBACF;QACF;QAEA,EAAE;QACF,IAAID,IAAI,IAAI;YACVD,KAAKC,IAAI,MAAMC;YACfA;YACAC,gBAAgB;QAClB,OAAO;YACLA,gBAAgB;QAClB;IACF;IAEA,IAAIA,eAAe;QACjBH,KAAKC;IACP;IAEA,OAAOD;AACT"}
@@ -1,12 +1,15 @@
1
+ // eslint-disable-next-line @typescript-eslint/consistent-type-imports
1
2
  import { getGlobalThis } from '../isomorphics/getGlobalThis.js';
2
3
  import { getNodeCrypto } from './getNodeCrypto.js';
3
4
  const globalThis = getGlobalThis();
4
5
  export let getRandomValues = globalThis.crypto?.getRandomValues?.bind(globalThis.crypto) || globalThis.msCrypto?.getRandomValues?.bind(globalThis.msCrypto) || _getRandomValues;
5
6
  function _getRandomValues(buf) {
6
7
  const nodeCrypto = getNodeCrypto();
7
- if (nodeCrypto?.webcrypto?.getRandomValues) {
8
- getRandomValues = nodeCrypto?.webcrypto?.getRandomValues?.bind(nodeCrypto?.webcrypto);
9
- return nodeCrypto.webcrypto.getRandomValues(buf);
8
+ // avoid type error
9
+ let wc = nodeCrypto?.webcrypto;
10
+ if (wc?.getRandomValues) {
11
+ getRandomValues = wc.getRandomValues?.bind(nodeCrypto?.webcrypto);
12
+ return wc.getRandomValues(buf);
10
13
  }
11
14
  if (nodeCrypto?.randomBytes) {
12
15
  if (!(buf instanceof Uint8Array)) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/crypto/getRandomValues.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport type { TypedArray } from '../io/ArrayBuffers';\nimport { getGlobalThis } from '../isomorphics/getGlobalThis';\nimport { getNodeCrypto } from './getNodeCrypto';\n\nconst globalThis = getGlobalThis();\nexport let getRandomValues: <T extends Exclude<TypedArray, Float32Array | Float64Array>>(typedArray: T) => T =\n globalThis.crypto?.getRandomValues?.bind(globalThis.crypto) ||\n (globalThis as any).msCrypto?.getRandomValues?.bind((globalThis as any).msCrypto) ||\n _getRandomValues;\n\nfunction _getRandomValues<T extends Exclude<TypedArray, Float32Array | Float64Array>>(buf: T) {\n const nodeCrypto = getNodeCrypto();\n if (nodeCrypto?.webcrypto?.getRandomValues) {\n getRandomValues = nodeCrypto?.webcrypto?.getRandomValues?.bind(nodeCrypto?.webcrypto);\n return nodeCrypto.webcrypto.getRandomValues(buf);\n }\n if (nodeCrypto?.randomBytes) {\n if (!(buf instanceof Uint8Array)) {\n throw new TypeError('expected Uint8Array');\n }\n if (buf.length > 65536) {\n const e: any = new Error();\n e.code = 22;\n e.message = `Failed to execute 'getRandomValues' on 'Crypto': The ArrayBufferView's byte length (${buf.length}) exceeds the number of bytes of entropy available via this API (65536).`;\n e.name = 'QuotaExceededError';\n throw e;\n }\n const bytes = nodeCrypto.randomBytes(buf.length);\n buf.set(bytes);\n return buf;\n }\n throw new Error('[getRandomValues]: No secure random number generator available.');\n}\n"],"names":["getGlobalThis","getNodeCrypto","globalThis","getRandomValues","crypto","bind","msCrypto","_getRandomValues","buf","nodeCrypto","webcrypto","randomBytes","Uint8Array","TypeError","length","e","Error","code","message","name","bytes","set"],"mappings":"AAAA,sEAAsE;AAEtE,SAASA,aAAa,QAAQ,+BAA+B;AAC7D,SAASC,aAAa,QAAQ,kBAAkB;AAEhD,MAAMC,aAAaF;AACnB,OAAO,IAAIG,kBACTD,WAAWE,MAAM,EAAED,iBAAiBE,KAAKH,WAAWE,MAAM,KAC1D,AAACF,WAAmBI,QAAQ,EAAEH,iBAAiBE,KAAK,AAACH,WAAmBI,QAAQ,KAChFC,iBAAiB;AAEnB,SAASA,iBAA6EC,GAAM;IAC1F,MAAMC,aAAaR;IACnB,IAAIQ,YAAYC,WAAWP,iBAAiB;QAC1CA,kBAAkBM,YAAYC,WAAWP,iBAAiBE,KAAKI,YAAYC;QAC3E,OAAOD,WAAWC,SAAS,CAACP,eAAe,CAACK;IAC9C;IACA,IAAIC,YAAYE,aAAa;QAC3B,IAAI,CAAEH,CAAAA,eAAeI,UAAS,GAAI;YAChC,MAAM,IAAIC,UAAU;QACtB;QACA,IAAIL,IAAIM,MAAM,GAAG,OAAO;YACtB,MAAMC,IAAS,IAAIC;YACnBD,EAAEE,IAAI,GAAG;YACTF,EAAEG,OAAO,GAAG,CAAC,oFAAoF,EAAEV,IAAIM,MAAM,CAAC,wEAAwE,CAAC;YACvLC,EAAEI,IAAI,GAAG;YACT,MAAMJ;QACR;QACA,MAAMK,QAAQX,WAAWE,WAAW,CAACH,IAAIM,MAAM;QAC/CN,IAAIa,GAAG,CAACD;QACR,OAAOZ;IACT;IACA,MAAM,IAAIQ,MAAM;AAClB"}
1
+ {"version":3,"sources":["../../src/crypto/getRandomValues.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport type { TypedArray } from '../io/ArrayBuffers';\nimport { getGlobalThis } from '../isomorphics/getGlobalThis';\nimport { getNodeCrypto } from './getNodeCrypto';\n\nconst globalThis = getGlobalThis();\nexport let getRandomValues: <T extends Exclude<TypedArray, Float32Array | Float64Array>>(typedArray: T) => T =\n globalThis.crypto?.getRandomValues?.bind(globalThis.crypto) ||\n (globalThis as any).msCrypto?.getRandomValues?.bind((globalThis as any).msCrypto) ||\n _getRandomValues;\n\nfunction _getRandomValues<T extends Exclude<TypedArray, Float32Array | Float64Array>>(buf: T) {\n const nodeCrypto = getNodeCrypto();\n // avoid type error\n let wc = nodeCrypto?.webcrypto as any;\n if (wc?.getRandomValues) {\n getRandomValues = wc.getRandomValues?.bind(nodeCrypto?.webcrypto);\n return wc.getRandomValues(buf);\n }\n if (nodeCrypto?.randomBytes) {\n if (!(buf instanceof Uint8Array)) {\n throw new TypeError('expected Uint8Array');\n }\n if (buf.length > 65536) {\n const e: any = new Error();\n e.code = 22;\n e.message = `Failed to execute 'getRandomValues' on 'Crypto': The ArrayBufferView's byte length (${buf.length}) exceeds the number of bytes of entropy available via this API (65536).`;\n e.name = 'QuotaExceededError';\n throw e;\n }\n const bytes = nodeCrypto.randomBytes(buf.length);\n buf.set(bytes);\n return buf;\n }\n throw new Error('[getRandomValues]: No secure random number generator available.');\n}\n"],"names":["getGlobalThis","getNodeCrypto","globalThis","getRandomValues","crypto","bind","msCrypto","_getRandomValues","buf","nodeCrypto","wc","webcrypto","randomBytes","Uint8Array","TypeError","length","e","Error","code","message","name","bytes","set"],"mappings":"AAAA,sEAAsE;AAEtE,SAASA,aAAa,QAAQ,+BAA+B;AAC7D,SAASC,aAAa,QAAQ,kBAAkB;AAEhD,MAAMC,aAAaF;AACnB,OAAO,IAAIG,kBACTD,WAAWE,MAAM,EAAED,iBAAiBE,KAAKH,WAAWE,MAAM,KAC1D,AAACF,WAAmBI,QAAQ,EAAEH,iBAAiBE,KAAK,AAACH,WAAmBI,QAAQ,KAChFC,iBAAiB;AAEnB,SAASA,iBAA6EC,GAAM;IAC1F,MAAMC,aAAaR;IACnB,mBAAmB;IACnB,IAAIS,KAAKD,YAAYE;IACrB,IAAID,IAAIP,iBAAiB;QACvBA,kBAAkBO,GAAGP,eAAe,EAAEE,KAAKI,YAAYE;QACvD,OAAOD,GAAGP,eAAe,CAACK;IAC5B;IACA,IAAIC,YAAYG,aAAa;QAC3B,IAAI,CAAEJ,CAAAA,eAAeK,UAAS,GAAI;YAChC,MAAM,IAAIC,UAAU;QACtB;QACA,IAAIN,IAAIO,MAAM,GAAG,OAAO;YACtB,MAAMC,IAAS,IAAIC;YACnBD,EAAEE,IAAI,GAAG;YACTF,EAAEG,OAAO,GAAG,CAAC,oFAAoF,EAAEX,IAAIO,MAAM,CAAC,wEAAwE,CAAC;YACvLC,EAAEI,IAAI,GAAG;YACT,MAAMJ;QACR;QACA,MAAMK,QAAQZ,WAAWG,WAAW,CAACJ,IAAIO,MAAM;QAC/CP,IAAIc,GAAG,CAACD;QACR,OAAOb;IACT;IACA,MAAM,IAAIS,MAAM;AAClB"}
@@ -115,7 +115,7 @@ export class Errors {
115
115
  status: 404
116
116
  });
117
117
  static InternalServerError = this.with({
118
- status: 501
118
+ status: 500
119
119
  });
120
120
  static NotImplemented = this.with({
121
121
  status: 501
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/errors/Errors.ts"],"sourcesContent":["import { getHttpStatusText } from '../http/HttpStatus';\n\nexport interface ErrorDetailInit {\n message?: string;\n status: number;\n description?: string;\n code?: number | string;\n metadata?: Record<string, any>;\n cause?: any;\n}\n\nexport class DetailError extends Error {\n readonly status: number;\n readonly description?: string;\n\n constructor(readonly detail: ErrorDetail) {\n super(detail.message, {\n cause: detail.cause,\n });\n this.status = detail.status;\n this.description = detail.description;\n }\n\n toJSON() {\n return {\n code: this.detail.code,\n message: this.message,\n status: this.status,\n description: this.description,\n cause: this.cause,\n };\n }\n}\n\nclass DetailHolder implements ErrorDetail {\n readonly message: string;\n readonly status: number;\n readonly code: number | string;\n readonly metadata?: Record<string, any>;\n readonly description?: string;\n readonly cause?: any;\n\n constructor({\n status,\n message = getHttpStatusText(status),\n code = status,\n metadata,\n description,\n cause,\n }: ErrorDetailInit) {\n this.message = message ?? String(status);\n this.status = status;\n this.code = code;\n this.description = description;\n this.metadata = metadata;\n this.cause = cause;\n }\n\n with(o?: Partial<ErrorDetailInit> | string): DetailHolder {\n if (typeof o === 'string') {\n o = { message: o };\n }\n\n if (o === undefined) {\n return new DetailHolder(this);\n }\n\n return new DetailHolder({\n status: this.status,\n code: this.code,\n message: this.message,\n metadata: this.metadata,\n cause: this.cause,\n ...o,\n });\n }\n\n asError(o?: Partial<ErrorDetailInit> | string): Error {\n if (typeof o === 'string') {\n o = { message: o };\n }\n\n return new DetailError(this.with(o));\n }\n\n require(v: any, o?: Partial<ErrorDetailInit> | string): any {\n if (v === undefined || v === null) {\n throw this.asError(o);\n }\n\n return v;\n }\n\n check(cond: any, o?: Partial<ErrorDetailInit> | string) {\n switch (cond) {\n case false:\n case undefined:\n case null: {\n throw this.asError(o);\n }\n }\n }\n\n throw(o?: string | Partial<ErrorDetailInit>): never {\n throw this.asError(o);\n }\n\n toJSON() {\n return {\n code: this.code,\n message: this.message,\n status: this.status,\n description: this.description,\n cause: this.cause,\n metadata: this.metadata,\n };\n }\n\n asResponse(): Response {\n return new Response(JSON.stringify(this.toJSON()), {\n status: this.status,\n statusText: this.description,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n }\n}\n\nexport interface ErrorDetail {\n readonly message: string;\n readonly status: number;\n readonly code?: number | string;\n readonly metadata?: Record<string, any>;\n readonly description?: string;\n readonly cause?: any;\n\n with(message: string): ErrorDetail;\n\n with(o?: Partial<ErrorDetailInit>): ErrorDetail;\n\n asError(o?: string | Partial<ErrorDetailInit>): Error;\n\n asResponse(): Response;\n\n throw(o?: string | Partial<ErrorDetailInit>): never;\n\n require<T>(v: T | undefined, o?: Partial<ErrorDetailInit> | string): NonNullable<T>;\n\n // 不支持 return value\n // https://stackoverflow.com/a/73252858/1870054\n\n check(condition: boolean, o?: Partial<ErrorDetailInit> | string): asserts condition;\n\n check<T>(v: T | undefined | null, o?: Partial<ErrorDetailInit> | string): asserts v is NonNullable<T>;\n}\n\nexport class Errors {\n static BadRequest: ErrorDetail = this.with({ status: 400 });\n static Unauthorized: ErrorDetail = this.with({ status: 403 });\n static Forbidden: ErrorDetail = this.with({ status: 403 });\n static NotFound: ErrorDetail = this.with({ status: 404 });\n static InternalServerError: ErrorDetail = this.with({ status: 501 });\n static NotImplemented: ErrorDetail = this.with({ status: 501 });\n static ServiceUnavailable: ErrorDetail = this.with({ status: 503 });\n\n static resolvers: ((e: any) => ErrorDetail | void)[] = [];\n\n static with(init: ErrorDetailInit): ErrorDetail {\n return new DetailHolder(init);\n }\n\n static ok(res: Response, o?: Partial<ErrorDetailInit>) {\n if (res.ok) {\n return res;\n }\n throw this.with({\n description: res.statusText,\n status: res.status,\n ...o,\n metadata: {\n ...o?.metadata,\n response: res,\n },\n }).asError();\n }\n\n static resolve(e: any): ErrorDetail {\n if (e instanceof DetailHolder) {\n return e;\n }\n\n if (e instanceof DetailError) {\n return e.detail;\n }\n\n for (const resolver of this.resolvers) {\n const r = resolver(e);\n if (r) {\n return r;\n }\n }\n\n if (e instanceof Error) {\n const { message, code, status } = e as any;\n // can get status from NestJS HttpException\n return new DetailHolder({\n message,\n status: parseInt(status) || 500,\n code,\n cause: e,\n });\n }\n\n return new DetailHolder({\n message: e.message,\n status: 500,\n cause: e,\n });\n }\n}\n\n// interface ZodError {\n// path: Array<string | number>;\n// message: string;\n// code: string;\n// expected?: any;\n// received?: any;\n// }\n"],"names":["getHttpStatusText","DetailError","Error","detail","status","description","constructor","message","cause","toJSON","code","DetailHolder","metadata","String","with","o","undefined","asError","require","v","check","cond","throw","asResponse","Response","JSON","stringify","statusText","headers","Errors","BadRequest","Unauthorized","Forbidden","NotFound","InternalServerError","NotImplemented","ServiceUnavailable","resolvers","init","ok","res","response","resolve","e","resolver","r","parseInt"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/errors/Errors.ts"],"sourcesContent":["import { getHttpStatusText } from '../http/HttpStatus';\n\nexport interface ErrorDetailInit {\n message?: string;\n status: number;\n description?: string;\n code?: number | string;\n metadata?: Record<string, any>;\n cause?: any;\n}\n\nexport class DetailError extends Error {\n readonly status: number;\n readonly description?: string;\n\n constructor(readonly detail: ErrorDetail) {\n super(detail.message, {\n cause: detail.cause,\n });\n this.status = detail.status;\n this.description = detail.description;\n }\n\n toJSON() {\n return {\n code: this.detail.code,\n message: this.message,\n status: this.status,\n description: this.description,\n cause: this.cause,\n };\n }\n}\n\nclass DetailHolder implements ErrorDetail {\n readonly message: string;\n readonly status: number;\n readonly code: number | string;\n readonly metadata?: Record<string, any>;\n readonly description?: string;\n readonly cause?: any;\n\n constructor({\n status,\n message = getHttpStatusText(status),\n code = status,\n metadata,\n description,\n cause,\n }: ErrorDetailInit) {\n this.message = message ?? String(status);\n this.status = status;\n this.code = code;\n this.description = description;\n this.metadata = metadata;\n this.cause = cause;\n }\n\n with(o?: Partial<ErrorDetailInit> | string): DetailHolder {\n if (typeof o === 'string') {\n o = { message: o };\n }\n\n if (o === undefined) {\n return new DetailHolder(this);\n }\n\n return new DetailHolder({\n status: this.status,\n code: this.code,\n message: this.message,\n metadata: this.metadata,\n cause: this.cause,\n ...o,\n });\n }\n\n asError(o?: Partial<ErrorDetailInit> | string): Error {\n if (typeof o === 'string') {\n o = { message: o };\n }\n\n return new DetailError(this.with(o));\n }\n\n require(v: any, o?: Partial<ErrorDetailInit> | string): any {\n if (v === undefined || v === null) {\n throw this.asError(o);\n }\n\n return v;\n }\n\n check(cond: any, o?: Partial<ErrorDetailInit> | string) {\n switch (cond) {\n case false:\n case undefined:\n case null: {\n throw this.asError(o);\n }\n }\n }\n\n throw(o?: string | Partial<ErrorDetailInit>): never {\n throw this.asError(o);\n }\n\n toJSON() {\n return {\n code: this.code,\n message: this.message,\n status: this.status,\n description: this.description,\n cause: this.cause,\n metadata: this.metadata,\n };\n }\n\n asResponse(): Response {\n return new Response(JSON.stringify(this.toJSON()), {\n status: this.status,\n statusText: this.description,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n }\n}\n\nexport interface ErrorDetail {\n readonly message: string;\n readonly status: number;\n readonly code?: number | string;\n readonly metadata?: Record<string, any>;\n readonly description?: string;\n readonly cause?: any;\n\n with(message: string): ErrorDetail;\n\n with(o?: Partial<ErrorDetailInit>): ErrorDetail;\n\n asError(o?: string | Partial<ErrorDetailInit>): Error;\n\n asResponse(): Response;\n\n throw(o?: string | Partial<ErrorDetailInit>): never;\n\n require<T>(v: T | undefined, o?: Partial<ErrorDetailInit> | string): NonNullable<T>;\n\n check(condition: boolean, o?: Partial<ErrorDetailInit> | string): asserts condition;\n\n check<T>(v: T | undefined | null, o?: Partial<ErrorDetailInit> | string): asserts v is NonNullable<T>;\n}\n\nexport class Errors {\n static BadRequest: ErrorDetail = this.with({ status: 400 });\n static Unauthorized: ErrorDetail = this.with({ status: 403 });\n static Forbidden: ErrorDetail = this.with({ status: 403 });\n static NotFound: ErrorDetail = this.with({ status: 404 });\n static InternalServerError: ErrorDetail = this.with({ status: 500 });\n static NotImplemented: ErrorDetail = this.with({ status: 501 });\n static ServiceUnavailable: ErrorDetail = this.with({ status: 503 });\n\n static resolvers: ((e: any) => ErrorDetail | void)[] = [];\n\n static with(init: ErrorDetailInit): ErrorDetail {\n return new DetailHolder(init);\n }\n\n static ok(res: Response, o?: Partial<ErrorDetailInit>) {\n if (res.ok) {\n return res;\n }\n throw this.with({\n description: res.statusText,\n status: res.status,\n ...o,\n metadata: {\n ...o?.metadata,\n response: res,\n },\n }).asError();\n }\n\n static resolve(e: any): ErrorDetail {\n if (e instanceof DetailHolder) {\n return e;\n }\n\n if (e instanceof DetailError) {\n return e.detail;\n }\n\n for (const resolver of this.resolvers) {\n const r = resolver(e);\n if (r) {\n return r;\n }\n }\n\n if (e instanceof Error) {\n const { message, code, status } = e as any;\n // can get status from NestJS HttpException\n return new DetailHolder({\n message,\n status: parseInt(status) || 500,\n code,\n cause: e,\n });\n }\n\n return new DetailHolder({\n message: e.message,\n status: 500,\n cause: e,\n });\n }\n}\n\n// interface ZodError {\n// path: Array<string | number>;\n// message: string;\n// code: string;\n// expected?: any;\n// received?: any;\n// }\n"],"names":["getHttpStatusText","DetailError","Error","status","description","constructor","detail","message","cause","toJSON","code","DetailHolder","metadata","String","with","o","undefined","asError","require","v","check","cond","throw","asResponse","Response","JSON","stringify","statusText","headers","Errors","BadRequest","Unauthorized","Forbidden","NotFound","InternalServerError","NotImplemented","ServiceUnavailable","resolvers","init","ok","res","response","resolve","e","resolver","r","parseInt"],"mappings":"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"}
package/lib/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ // arrays
1
2
  export { firstOfMaybeArray, lastOfMaybeArray, arrayOfMaybeArray, objectOfMaybeArray } from './arrays/MaybeArray.js';
2
3
  export { arrayFromAsync } from './arrays/arrayFromAsync.js';
3
4
  // object
@@ -30,6 +31,8 @@ export { isPlainObject } from './langs/isPlainObject.js';
30
31
  export { parseBoolean } from './langs/parseBoolean.js';
31
32
  export { maybeFunction } from './langs/MaybeFunction.js';
32
33
  export { memoize } from './langs/memoize.js';
34
+ export { AsyncCloser } from './langs/AsyncCloser.js';
35
+ export { Closer } from './langs/Closer.js';
33
36
  export { isUUID } from './validations/isUUID.js';
34
37
  export { parseTimestamp } from './validations/parseTimestamp.js';
35
38
  // modules
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// arrays\nexport {\n firstOfMaybeArray,\n lastOfMaybeArray,\n arrayOfMaybeArray,\n objectOfMaybeArray,\n type MaybeArray,\n} from './arrays/MaybeArray';\nexport { arrayFromAsync } from './arrays/arrayFromAsync';\n\n// object\nexport { get } from './objects/get';\nexport { set } from './objects/set';\nexport { parseObjectPath } from './objects/parseObjectPath';\nexport { merge, type MergeOptions } from './objects/merge';\n\n// async\nexport { createLazyPromise, type LazyPromise } from './asyncs/createLazyPromise';\nexport { setAsyncInterval, clearAsyncInterval } from './asyncs/AsyncInterval';\nexport { type MaybePromise } from './asyncs/MaybePromise';\n// async - iterator\nexport { createAsyncIterator } from './asyncs/createAsyncIterator';\nexport { firstOfAsyncIterator } from './asyncs/firstOfAsyncIterator';\nexport { nextOfAsyncIterator } from './asyncs/nextOfAsyncIterator';\nexport { isIterator } from './asyncs/isIterator';\n\nexport { sleep } from './asyncs/sleep';\nexport { timeout, TimeoutError } from './asyncs/timeout';\nexport { isPromise } from './asyncs/isPromise';\n// export * from './async/promiseOfCallback';\n\n// langs\nexport { shallowEqual } from './langs/shallowEqual';\nexport { deepEqual } from './langs/deepEqual';\nexport { deepFreeze } from './langs/deepFreeze';\nexport { classOf } from './langs/classOf';\nexport { shallowClone } from './langs/shallowClone';\nexport { isClass } from './langs/isClass';\nexport { isDefined } from './langs/isDefined';\nexport { isEmptyObject } from './langs/isEmptyObject';\nexport { isPlainObject } from './langs/isPlainObject';\nexport { parseBoolean } from './langs/parseBoolean';\nexport { maybeFunction, type MaybeFunction } from './langs/MaybeFunction';\nexport { memoize } from './langs/memoize';\n\nexport { isUUID } from './validations/isUUID';\nexport { parseTimestamp } from './validations/parseTimestamp';\n\n// modules\nexport { parseModuleId, type ParsedModuleId } from './modules/parseModuleId';\nexport { isModule, type Module } from './modules/isModule';\n\n// logging\nexport { type Logger, type LogLevel } from './logging/Logger';\nexport { createLogger } from './logging/createLogger';\nexport { createNoopLogger } from './logging/createNoopLogger';\nexport { createChildLogger } from './logging/createChildLogger';\n\n// strings\nexport { pascalCase, camelCase } from './strings/camelCase';\nexport { renderTemplate } from './strings/renderTemplate';\nexport { formatBytes } from './strings/formatBytes';\n\n// i18n\nexport { createTranslate } from './i18n/createTranslate';\n\n// io\nexport { isBuffer } from './io/isBuffer';\nexport { isTransferable } from './io/isTransferable';\nexport { ArrayBuffers } from './io/ArrayBuffers';\nexport { Buffer } from './io/Buffer';\nexport type { AbstractEncoding } from './io/AbstractEncoding';\n\n// browser\nexport { copy } from './browsers/copy';\nexport { download } from './browsers/download';\nexport { loadScripts, loadStyles } from './browsers/loaders';\nexport { getFileFromDataTransfer } from './browsers/getFileFromDataTransfer';\n\n// polyfills\nexport { getGlobalThis } from './isomorphics/getGlobalThis';\nexport { structuredClone } from './isomorphics/structuredClone';\n\n// crypto\nexport { randomUUID } from './crypto/randomUUID';\nexport { getRandomValues } from './crypto/getRandomValues';\nexport { sha1, sha256, sha384, sha512, hmac, type DigestOptions } from './crypto/hashing';\nexport { md5 } from './crypto/md5';\nexport { hex } from './crypto/base';\nexport { isULID, createULID, ulid, parseULID } from './crypto/ulid';\nexport { PEM } from './crypto/pem/pem';\n\n// math\nexport { createRandom } from './maths/random';\nexport { clamp } from './maths/clamp';\n\n// network\nexport {\n type FetchLike,\n createFetchWith,\n createFetchWithLogging,\n dumpResponse,\n dumpRequest,\n createFetchWithRetry,\n type FetchWithRetryOptions,\n} from './fetch';\n\n// bundled\nexport { default as ms } from './libs/ms';\n\n// error\nexport { Errors, DetailError, type ErrorDetail, type ErrorDetailInit } from './errors/Errors';\n// http\nexport { getHttpStatusText, isRetryableHttpStatus } from './http/HttpStatus';\n\nexport type * from './types';\n"],"names":["firstOfMaybeArray","lastOfMaybeArray","arrayOfMaybeArray","objectOfMaybeArray","arrayFromAsync","get","set","parseObjectPath","merge","createLazyPromise","setAsyncInterval","clearAsyncInterval","createAsyncIterator","firstOfAsyncIterator","nextOfAsyncIterator","isIterator","sleep","timeout","TimeoutError","isPromise","shallowEqual","deepEqual","deepFreeze","classOf","shallowClone","isClass","isDefined","isEmptyObject","isPlainObject","parseBoolean","maybeFunction","memoize","isUUID","parseTimestamp","parseModuleId","isModule","createLogger","createNoopLogger","createChildLogger","pascalCase","camelCase","renderTemplate","formatBytes","createTranslate","isBuffer","isTransferable","ArrayBuffers","Buffer","copy","download","loadScripts","loadStyles","getFileFromDataTransfer","getGlobalThis","structuredClone","randomUUID","getRandomValues","sha1","sha256","sha384","sha512","hmac","md5","hex","isULID","createULID","ulid","parseULID","PEM","createRandom","clamp","createFetchWith","createFetchWithLogging","dumpResponse","dumpRequest","createFetchWithRetry","default","ms","Errors","DetailError","getHttpStatusText","isRetryableHttpStatus"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// arrays\nexport {\n firstOfMaybeArray,\n lastOfMaybeArray,\n arrayOfMaybeArray,\n objectOfMaybeArray,\n type MaybeArray,\n} from './arrays/MaybeArray';\nexport { arrayFromAsync } from './arrays/arrayFromAsync';\n\n// object\nexport { get } from './objects/get';\nexport { set } from './objects/set';\nexport { parseObjectPath } from './objects/parseObjectPath';\nexport { merge, type MergeOptions } from './objects/merge';\n\n// async\nexport { createLazyPromise, type LazyPromise } from './asyncs/createLazyPromise';\nexport { setAsyncInterval, clearAsyncInterval } from './asyncs/AsyncInterval';\nexport { type MaybePromise } from './asyncs/MaybePromise';\n// async - iterator\nexport { createAsyncIterator } from './asyncs/createAsyncIterator';\nexport { firstOfAsyncIterator } from './asyncs/firstOfAsyncIterator';\nexport { nextOfAsyncIterator } from './asyncs/nextOfAsyncIterator';\nexport { isIterator } from './asyncs/isIterator';\n\nexport { sleep } from './asyncs/sleep';\nexport { timeout, TimeoutError } from './asyncs/timeout';\nexport { isPromise } from './asyncs/isPromise';\n// export * from './async/promiseOfCallback';\n\n// langs\nexport { shallowEqual } from './langs/shallowEqual';\nexport { deepEqual } from './langs/deepEqual';\nexport { deepFreeze } from './langs/deepFreeze';\nexport { classOf } from './langs/classOf';\nexport { shallowClone } from './langs/shallowClone';\nexport { isClass } from './langs/isClass';\nexport { isDefined } from './langs/isDefined';\nexport { isEmptyObject } from './langs/isEmptyObject';\nexport { isPlainObject } from './langs/isPlainObject';\nexport { parseBoolean } from './langs/parseBoolean';\nexport { maybeFunction, type MaybeFunction } from './langs/MaybeFunction';\nexport { memoize } from './langs/memoize';\nexport { AsyncCloser } from './langs/AsyncCloser';\nexport { Closer } from './langs/Closer';\n\nexport { isUUID } from './validations/isUUID';\nexport { parseTimestamp } from './validations/parseTimestamp';\n\n// modules\nexport { parseModuleId, type ParsedModuleId } from './modules/parseModuleId';\nexport { isModule, type Module } from './modules/isModule';\n\n// logging\nexport { type Logger, type LogLevel } from './logging/Logger';\nexport { createLogger } from './logging/createLogger';\nexport { createNoopLogger } from './logging/createNoopLogger';\nexport { createChildLogger } from './logging/createChildLogger';\n\n// strings\nexport { pascalCase, camelCase } from './strings/camelCase';\nexport { renderTemplate } from './strings/renderTemplate';\nexport { formatBytes } from './strings/formatBytes';\n\n// i18n\nexport { createTranslate } from './i18n/createTranslate';\n\n// io\nexport { isBuffer } from './io/isBuffer';\nexport { isTransferable } from './io/isTransferable';\nexport { ArrayBuffers } from './io/ArrayBuffers';\nexport { Buffer } from './io/Buffer';\nexport type { AbstractEncoding } from './io/AbstractEncoding';\n\n// browser\nexport { copy } from './browsers/copy';\nexport { download } from './browsers/download';\nexport { loadScripts, loadStyles } from './browsers/loaders';\nexport { getFileFromDataTransfer } from './browsers/getFileFromDataTransfer';\n\n// polyfills\nexport { getGlobalThis } from './isomorphics/getGlobalThis';\nexport { structuredClone } from './isomorphics/structuredClone';\n\n// crypto\nexport { randomUUID } from './crypto/randomUUID';\nexport { getRandomValues } from './crypto/getRandomValues';\nexport { sha1, sha256, sha384, sha512, hmac, type DigestOptions } from './crypto/hashing';\nexport { md5 } from './crypto/md5';\nexport { hex } from './crypto/base';\nexport { isULID, createULID, ulid, parseULID } from './crypto/ulid';\nexport { PEM } from './crypto/pem/pem';\n\n// math\nexport { createRandom } from './maths/random';\nexport { clamp } from './maths/clamp';\n\n// network\nexport {\n type FetchLike,\n createFetchWith,\n createFetchWithLogging,\n dumpResponse,\n dumpRequest,\n createFetchWithRetry,\n type FetchWithRetryOptions,\n} from './fetch';\n\n// bundled\nexport { default as ms } from './libs/ms';\n\n// error\nexport { Errors, DetailError, type ErrorDetail, type ErrorDetailInit } from './errors/Errors';\n// http\nexport { getHttpStatusText, isRetryableHttpStatus } from './http/HttpStatus';\n\nexport type * from './types';\n"],"names":["firstOfMaybeArray","lastOfMaybeArray","arrayOfMaybeArray","objectOfMaybeArray","arrayFromAsync","get","set","parseObjectPath","merge","createLazyPromise","setAsyncInterval","clearAsyncInterval","createAsyncIterator","firstOfAsyncIterator","nextOfAsyncIterator","isIterator","sleep","timeout","TimeoutError","isPromise","shallowEqual","deepEqual","deepFreeze","classOf","shallowClone","isClass","isDefined","isEmptyObject","isPlainObject","parseBoolean","maybeFunction","memoize","AsyncCloser","Closer","isUUID","parseTimestamp","parseModuleId","isModule","createLogger","createNoopLogger","createChildLogger","pascalCase","camelCase","renderTemplate","formatBytes","createTranslate","isBuffer","isTransferable","ArrayBuffers","Buffer","copy","download","loadScripts","loadStyles","getFileFromDataTransfer","getGlobalThis","structuredClone","randomUUID","getRandomValues","sha1","sha256","sha384","sha512","hmac","md5","hex","isULID","createULID","ulid","parseULID","PEM","createRandom","clamp","createFetchWith","createFetchWithLogging","dumpResponse","dumpRequest","createFetchWithRetry","default","ms","Errors","DetailError","getHttpStatusText","isRetryableHttpStatus"],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ const objectToString = Object.prototype.toString;
2
+ const uint8ArrayStringified = '[object Uint8Array]';
3
+ /**
4
+ * Utils for UInt8Array
5
+ *
6
+ * @see https://github.com/sindresorhus/uint8array-extras/blob/main/index.js
7
+ */ export class Bytes {
8
+ static #decoder = new globalThis.TextDecoder();
9
+ static isUint8Array(value) {
10
+ if (!value) {
11
+ return false;
12
+ }
13
+ if (value.constructor === Uint8Array) {
14
+ return true;
15
+ }
16
+ return objectToString.call(value) === uint8ArrayStringified;
17
+ }
18
+ static require(value) {
19
+ if (!this.isUint8Array(value)) {
20
+ throw new TypeError(`Expected \`Uint8Array\`, got \`${typeof value}\``);
21
+ }
22
+ return value;
23
+ }
24
+ static toUint8Array(value) {
25
+ if (value instanceof ArrayBuffer) {
26
+ return new Uint8Array(value);
27
+ }
28
+ if (ArrayBuffer.isView(value)) {
29
+ return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
30
+ }
31
+ throw new TypeError(`Unsupported value, got \`${typeof value}\`.`);
32
+ }
33
+ static concat(arrays, totalLength) {
34
+ if (arrays.length === 0) {
35
+ return new Uint8Array(0);
36
+ }
37
+ totalLength ??= arrays.reduce((accumulator, currentValue)=>accumulator + currentValue.length, 0);
38
+ const returnValue = new Uint8Array(totalLength);
39
+ let offset = 0;
40
+ for (const array of arrays){
41
+ returnValue.set(this.require(array), offset);
42
+ offset += array.length;
43
+ }
44
+ return returnValue;
45
+ }
46
+ static toString(value) {
47
+ return this.#decoder.decode(value);
48
+ }
49
+ }
50
+
51
+ //# sourceMappingURL=Bytes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/io/Bytes.ts"],"sourcesContent":["const objectToString = Object.prototype.toString;\nconst uint8ArrayStringified = '[object Uint8Array]';\n\n/**\n * Utils for UInt8Array\n *\n * @see https://github.com/sindresorhus/uint8array-extras/blob/main/index.js\n */\nexport class Bytes {\n static #decoder = new globalThis.TextDecoder();\n\n static isUint8Array(value: any): value is Uint8Array {\n if (!value) {\n return false;\n }\n\n if (value.constructor === Uint8Array) {\n return true;\n }\n\n return objectToString.call(value) === uint8ArrayStringified;\n }\n\n static require(value: any): Uint8Array {\n if (!this.isUint8Array(value)) {\n throw new TypeError(`Expected \\`Uint8Array\\`, got \\`${typeof value}\\``);\n }\n return value;\n }\n\n static toUint8Array(value: ArrayBuffer | ArrayBufferView): Uint8Array {\n if (value instanceof ArrayBuffer) {\n return new Uint8Array(value);\n }\n\n if (ArrayBuffer.isView(value)) {\n return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n }\n\n throw new TypeError(`Unsupported value, got \\`${typeof value}\\`.`);\n }\n\n static concat(arrays: Uint8Array[], totalLength: number): Uint8Array {\n if (arrays.length === 0) {\n return new Uint8Array(0);\n }\n\n totalLength ??= arrays.reduce((accumulator, currentValue) => accumulator + currentValue.length, 0);\n\n const returnValue = new Uint8Array(totalLength);\n\n let offset = 0;\n for (const array of arrays) {\n returnValue.set(this.require(array), offset);\n offset += array.length;\n }\n\n return returnValue;\n }\n\n static toString(value: Uint8Array) {\n return this.#decoder.decode(value);\n }\n}\n"],"names":["objectToString","Object","prototype","toString","uint8ArrayStringified","Bytes","decoder","globalThis","TextDecoder","isUint8Array","value","constructor","Uint8Array","call","require","TypeError","toUint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","concat","arrays","totalLength","length","reduce","accumulator","currentValue","returnValue","offset","array","set","decode"],"mappings":"AAAA,MAAMA,iBAAiBC,OAAOC,SAAS,CAACC,QAAQ;AAChD,MAAMC,wBAAwB;AAE9B;;;;CAIC,GACD,OAAO,MAAMC;IACX,OAAO,CAACC,OAAO,GAAG,IAAIC,WAAWC,WAAW,GAAG;IAE/C,OAAOC,aAAaC,KAAU,EAAuB;QACnD,IAAI,CAACA,OAAO;YACV,OAAO;QACT;QAEA,IAAIA,MAAMC,WAAW,KAAKC,YAAY;YACpC,OAAO;QACT;QAEA,OAAOZ,eAAea,IAAI,CAACH,WAAWN;IACxC;IAEA,OAAOU,QAAQJ,KAAU,EAAc;QACrC,IAAI,CAAC,IAAI,CAACD,YAAY,CAACC,QAAQ;YAC7B,MAAM,IAAIK,UAAU,CAAC,+BAA+B,EAAE,OAAOL,MAAM,EAAE,CAAC;QACxE;QACA,OAAOA;IACT;IAEA,OAAOM,aAAaN,KAAoC,EAAc;QACpE,IAAIA,iBAAiBO,aAAa;YAChC,OAAO,IAAIL,WAAWF;QACxB;QAEA,IAAIO,YAAYC,MAAM,CAACR,QAAQ;YAC7B,OAAO,IAAIE,WAAWF,MAAMS,MAAM,EAAET,MAAMU,UAAU,EAAEV,MAAMW,UAAU;QACxE;QAEA,MAAM,IAAIN,UAAU,CAAC,yBAAyB,EAAE,OAAOL,MAAM,GAAG,CAAC;IACnE;IAEA,OAAOY,OAAOC,MAAoB,EAAEC,WAAmB,EAAc;QACnE,IAAID,OAAOE,MAAM,KAAK,GAAG;YACvB,OAAO,IAAIb,WAAW;QACxB;QAEAY,gBAAgBD,OAAOG,MAAM,CAAC,CAACC,aAAaC,eAAiBD,cAAcC,aAAaH,MAAM,EAAE;QAEhG,MAAMI,cAAc,IAAIjB,WAAWY;QAEnC,IAAIM,SAAS;QACb,KAAK,MAAMC,SAASR,OAAQ;YAC1BM,YAAYG,GAAG,CAAC,IAAI,CAAClB,OAAO,CAACiB,QAAQD;YACrCA,UAAUC,MAAMN,MAAM;QACxB;QAEA,OAAOI;IACT;IAEA,OAAO1B,SAASO,KAAiB,EAAE;QACjC,OAAO,IAAI,CAAC,CAACJ,OAAO,CAAC2B,MAAM,CAACvB;IAC9B;AACF"}
@@ -1,6 +1,4 @@
1
- import { classOf } from '../langs/classOf.js';
2
- import { getGlobalThis } from './getGlobalThis.js';
3
- const globalThis = getGlobalThis();
1
+ /* eslint no-proto:0 */ import { classOf } from '../langs/classOf.js';
4
2
  /**
5
3
  * Clone an object using structured cloning algorithm
6
4
  *
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/isomorphics/structuredClone.ts"],"sourcesContent":["/* eslint no-proto:0 */\nimport { classOf } from '../langs/classOf';\nimport { getGlobalThis } from './getGlobalThis';\n\nconst globalThis = getGlobalThis();\n\n/**\n * Clone an object using structured cloning algorithm\n *\n * - Chrome 98, Safari 15.4, NodeJS 17\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/structuredClone structuredClone}\n * @see {@link https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/web.structured-clone.js core-js}\n */\nexport const structuredClone: <T>(value: T, options?: StructuredSerializeOptions) => T =\n globalThis.structuredClone || _clone;\n\nfunction set(obj: any, key: any, val: any) {\n if (typeof val.value === 'object') val.value = _clone(val.value);\n if (!val.enumerable || val.get || val.set || !val.configurable || !val.writable || key === '__proto__') {\n Object.defineProperty(obj, key, val);\n } else obj[key] = val.value;\n}\n\n/**\n * @see {@link https://github.com/lukeed/klona/blob/master/src/full.js klona}\n */\nexport function _clone(x: any): any {\n // too complex\n // https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/web.structured-clone.js\n\n if (typeof x !== 'object') return x;\n\n let i = 0;\n let k;\n let list;\n let tmp: any;\n const str = classOf(x);\n switch (str) {\n case 'Array':\n tmp = Array(x.length);\n break;\n case 'Object':\n tmp = Object.create(x.__proto__ || null);\n break;\n case 'Set':\n tmp = new Set();\n x.forEach(function (val: any) {\n tmp.add(_clone(val));\n });\n break;\n case 'Map':\n tmp = new Map();\n x.forEach(function (val: any, key: any) {\n tmp.set(_clone(key), _clone(val));\n });\n break;\n case 'Date':\n tmp = new Date(+x);\n break;\n case 'RegExp':\n tmp = new RegExp(x.source, x.flags);\n break;\n case 'DataView':\n tmp = new x.constructor(_clone(x.buffer));\n break;\n case 'ArrayBuffer':\n tmp = x.slice(0);\n break;\n default:\n // typed arrays\n if (str.endsWith('Array')) {\n // ArrayBuffer.isView(x)\n // ~> `new` bcuz `Buffer.slice` => ref\n tmp = new x.constructor(x);\n }\n }\n\n if (tmp) {\n for (list = Object.getOwnPropertySymbols(x); i < list.length; i++) {\n set(tmp, list[i], Object.getOwnPropertyDescriptor(x, list[i]));\n }\n\n for (i = 0, list = Object.getOwnPropertyNames(x); i < list.length; i++) {\n if (Object.hasOwnProperty.call(tmp, (k = list[i])) && tmp[k] === x[k]) continue;\n set(tmp, k, Object.getOwnPropertyDescriptor(x, k));\n }\n }\n\n return tmp || x;\n}\n"],"names":["classOf","getGlobalThis","globalThis","structuredClone","_clone","set","obj","key","val","value","enumerable","get","configurable","writable","Object","defineProperty","x","i","k","list","tmp","str","Array","length","create","__proto__","Set","forEach","add","Map","Date","RegExp","source","flags","constructor","buffer","slice","endsWith","getOwnPropertySymbols","getOwnPropertyDescriptor","getOwnPropertyNames","hasOwnProperty","call"],"mappings":"AAAA,qBAAqB,GACrB,SAASA,OAAO,QAAQ,mBAAmB;AAC3C,SAASC,aAAa,QAAQ,kBAAkB;AAEhD,MAAMC,aAAaD;AAEnB;;;;;;;CAOC,GACD,OAAO,MAAME,kBACXD,WAAWC,eAAe,IAAIC,OAAO;AAEvC,SAASC,IAAIC,GAAQ,EAAEC,GAAQ,EAAEC,GAAQ;IACvC,IAAI,OAAOA,IAAIC,KAAK,KAAK,UAAUD,IAAIC,KAAK,GAAGL,OAAOI,IAAIC,KAAK;IAC/D,IAAI,CAACD,IAAIE,UAAU,IAAIF,IAAIG,GAAG,IAAIH,IAAIH,GAAG,IAAI,CAACG,IAAII,YAAY,IAAI,CAACJ,IAAIK,QAAQ,IAAIN,QAAQ,aAAa;QACtGO,OAAOC,cAAc,CAACT,KAAKC,KAAKC;IAClC,OAAOF,GAAG,CAACC,IAAI,GAAGC,IAAIC,KAAK;AAC7B;AAEA;;CAEC,GACD,OAAO,SAASL,OAAOY,CAAM;IAC3B,cAAc;IACd,mGAAmG;IAEnG,IAAI,OAAOA,MAAM,UAAU,OAAOA;IAElC,IAAIC,IAAI;IACR,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,MAAMC,MAAMrB,QAAQgB;IACpB,OAAQK;QACN,KAAK;YACHD,MAAME,MAAMN,EAAEO,MAAM;YACpB;QACF,KAAK;YACHH,MAAMN,OAAOU,MAAM,CAACR,EAAES,SAAS,IAAI;YACnC;QACF,KAAK;YACHL,MAAM,IAAIM;YACVV,EAAEW,OAAO,CAAC,SAAUnB,GAAQ;gBAC1BY,IAAIQ,GAAG,CAACxB,OAAOI;YACjB;YACA;QACF,KAAK;YACHY,MAAM,IAAIS;YACVb,EAAEW,OAAO,CAAC,SAAUnB,GAAQ,EAAED,GAAQ;gBACpCa,IAAIf,GAAG,CAACD,OAAOG,MAAMH,OAAOI;YAC9B;YACA;QACF,KAAK;YACHY,MAAM,IAAIU,KAAK,CAACd;YAChB;QACF,KAAK;YACHI,MAAM,IAAIW,OAAOf,EAAEgB,MAAM,EAAEhB,EAAEiB,KAAK;YAClC;QACF,KAAK;YACHb,MAAM,IAAIJ,EAAEkB,WAAW,CAAC9B,OAAOY,EAAEmB,MAAM;YACvC;QACF,KAAK;YACHf,MAAMJ,EAAEoB,KAAK,CAAC;YACd;QACF;YACE,eAAe;YACf,IAAIf,IAAIgB,QAAQ,CAAC,UAAU;gBACzB,wBAAwB;gBACxB,sCAAsC;gBACtCjB,MAAM,IAAIJ,EAAEkB,WAAW,CAAClB;YAC1B;IACJ;IAEA,IAAII,KAAK;QACP,IAAKD,OAAOL,OAAOwB,qBAAqB,CAACtB,IAAIC,IAAIE,KAAKI,MAAM,EAAEN,IAAK;YACjEZ,IAAIe,KAAKD,IAAI,CAACF,EAAE,EAAEH,OAAOyB,wBAAwB,CAACvB,GAAGG,IAAI,CAACF,EAAE;QAC9D;QAEA,IAAKA,IAAI,GAAGE,OAAOL,OAAO0B,mBAAmB,CAACxB,IAAIC,IAAIE,KAAKI,MAAM,EAAEN,IAAK;YACtE,IAAIH,OAAO2B,cAAc,CAACC,IAAI,CAACtB,KAAMF,IAAIC,IAAI,CAACF,EAAE,KAAMG,GAAG,CAACF,EAAE,KAAKF,CAAC,CAACE,EAAE,EAAE;YACvEb,IAAIe,KAAKF,GAAGJ,OAAOyB,wBAAwB,CAACvB,GAAGE;QACjD;IACF;IAEA,OAAOE,OAAOJ;AAChB"}
1
+ {"version":3,"sources":["../../src/isomorphics/structuredClone.ts"],"sourcesContent":["/* eslint no-proto:0 */\nimport { classOf } from '../langs/classOf';\n\n/**\n * Clone an object using structured cloning algorithm\n *\n * - Chrome 98, Safari 15.4, NodeJS 17\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/structuredClone structuredClone}\n * @see {@link https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/web.structured-clone.js core-js}\n */\nexport const structuredClone: <T>(value: T, options?: StructuredSerializeOptions) => T =\n globalThis.structuredClone || _clone;\n\nfunction set(obj: any, key: any, val: any) {\n if (typeof val.value === 'object') val.value = _clone(val.value);\n if (!val.enumerable || val.get || val.set || !val.configurable || !val.writable || key === '__proto__') {\n Object.defineProperty(obj, key, val);\n } else obj[key] = val.value;\n}\n\n/**\n * @see {@link https://github.com/lukeed/klona/blob/master/src/full.js klona}\n */\nexport function _clone(x: any): any {\n // too complex\n // https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/web.structured-clone.js\n\n if (typeof x !== 'object') return x;\n\n let i = 0;\n let k;\n let list;\n let tmp: any;\n const str = classOf(x);\n switch (str) {\n case 'Array':\n tmp = Array(x.length);\n break;\n case 'Object':\n tmp = Object.create(x.__proto__ || null);\n break;\n case 'Set':\n tmp = new Set();\n x.forEach(function (val: any) {\n tmp.add(_clone(val));\n });\n break;\n case 'Map':\n tmp = new Map();\n x.forEach(function (val: any, key: any) {\n tmp.set(_clone(key), _clone(val));\n });\n break;\n case 'Date':\n tmp = new Date(+x);\n break;\n case 'RegExp':\n tmp = new RegExp(x.source, x.flags);\n break;\n case 'DataView':\n tmp = new x.constructor(_clone(x.buffer));\n break;\n case 'ArrayBuffer':\n tmp = x.slice(0);\n break;\n default:\n // typed arrays\n if (str.endsWith('Array')) {\n // ArrayBuffer.isView(x)\n // ~> `new` bcuz `Buffer.slice` => ref\n tmp = new x.constructor(x);\n }\n }\n\n if (tmp) {\n for (list = Object.getOwnPropertySymbols(x); i < list.length; i++) {\n set(tmp, list[i], Object.getOwnPropertyDescriptor(x, list[i]));\n }\n\n for (i = 0, list = Object.getOwnPropertyNames(x); i < list.length; i++) {\n if (Object.hasOwnProperty.call(tmp, (k = list[i])) && tmp[k] === x[k]) continue;\n set(tmp, k, Object.getOwnPropertyDescriptor(x, k));\n }\n }\n\n return tmp || x;\n}\n"],"names":["classOf","structuredClone","globalThis","_clone","set","obj","key","val","value","enumerable","get","configurable","writable","Object","defineProperty","x","i","k","list","tmp","str","Array","length","create","__proto__","Set","forEach","add","Map","Date","RegExp","source","flags","constructor","buffer","slice","endsWith","getOwnPropertySymbols","getOwnPropertyDescriptor","getOwnPropertyNames","hasOwnProperty","call"],"mappings":"AAAA,qBAAqB,GACrB,SAASA,OAAO,QAAQ,mBAAmB;AAE3C;;;;;;;CAOC,GACD,OAAO,MAAMC,kBACXC,WAAWD,eAAe,IAAIE,OAAO;AAEvC,SAASC,IAAIC,GAAQ,EAAEC,GAAQ,EAAEC,GAAQ;IACvC,IAAI,OAAOA,IAAIC,KAAK,KAAK,UAAUD,IAAIC,KAAK,GAAGL,OAAOI,IAAIC,KAAK;IAC/D,IAAI,CAACD,IAAIE,UAAU,IAAIF,IAAIG,GAAG,IAAIH,IAAIH,GAAG,IAAI,CAACG,IAAII,YAAY,IAAI,CAACJ,IAAIK,QAAQ,IAAIN,QAAQ,aAAa;QACtGO,OAAOC,cAAc,CAACT,KAAKC,KAAKC;IAClC,OAAOF,GAAG,CAACC,IAAI,GAAGC,IAAIC,KAAK;AAC7B;AAEA;;CAEC,GACD,OAAO,SAASL,OAAOY,CAAM;IAC3B,cAAc;IACd,mGAAmG;IAEnG,IAAI,OAAOA,MAAM,UAAU,OAAOA;IAElC,IAAIC,IAAI;IACR,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,MAAMC,MAAMpB,QAAQe;IACpB,OAAQK;QACN,KAAK;YACHD,MAAME,MAAMN,EAAEO,MAAM;YACpB;QACF,KAAK;YACHH,MAAMN,OAAOU,MAAM,CAACR,EAAES,SAAS,IAAI;YACnC;QACF,KAAK;YACHL,MAAM,IAAIM;YACVV,EAAEW,OAAO,CAAC,SAAUnB,GAAQ;gBAC1BY,IAAIQ,GAAG,CAACxB,OAAOI;YACjB;YACA;QACF,KAAK;YACHY,MAAM,IAAIS;YACVb,EAAEW,OAAO,CAAC,SAAUnB,GAAQ,EAAED,GAAQ;gBACpCa,IAAIf,GAAG,CAACD,OAAOG,MAAMH,OAAOI;YAC9B;YACA;QACF,KAAK;YACHY,MAAM,IAAIU,KAAK,CAACd;YAChB;QACF,KAAK;YACHI,MAAM,IAAIW,OAAOf,EAAEgB,MAAM,EAAEhB,EAAEiB,KAAK;YAClC;QACF,KAAK;YACHb,MAAM,IAAIJ,EAAEkB,WAAW,CAAC9B,OAAOY,EAAEmB,MAAM;YACvC;QACF,KAAK;YACHf,MAAMJ,EAAEoB,KAAK,CAAC;YACd;QACF;YACE,eAAe;YACf,IAAIf,IAAIgB,QAAQ,CAAC,UAAU;gBACzB,wBAAwB;gBACxB,sCAAsC;gBACtCjB,MAAM,IAAIJ,EAAEkB,WAAW,CAAClB;YAC1B;IACJ;IAEA,IAAII,KAAK;QACP,IAAKD,OAAOL,OAAOwB,qBAAqB,CAACtB,IAAIC,IAAIE,KAAKI,MAAM,EAAEN,IAAK;YACjEZ,IAAIe,KAAKD,IAAI,CAACF,EAAE,EAAEH,OAAOyB,wBAAwB,CAACvB,GAAGG,IAAI,CAACF,EAAE;QAC9D;QAEA,IAAKA,IAAI,GAAGE,OAAOL,OAAO0B,mBAAmB,CAACxB,IAAIC,IAAIE,KAAKI,MAAM,EAAEN,IAAK;YACtE,IAAIH,OAAO2B,cAAc,CAACC,IAAI,CAACtB,KAAMF,IAAIC,IAAI,CAACF,EAAE,KAAMG,GAAG,CAACF,EAAE,KAAKF,CAAC,CAACE,EAAE,EAAE;YACvEb,IAAIe,KAAKF,GAAGJ,OAAOyB,wBAAwB,CAACvB,GAAGE;QACjD;IACF;IAEA,OAAOE,OAAOJ;AAChB"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @see AsyncDisposableStack
3
+ */ export class AsyncCloser {
4
+ closers = [];
5
+ defer(closer) {
6
+ if (!closer) {
7
+ return;
8
+ }
9
+ this.closers.push(closer);
10
+ }
11
+ add(closer) {
12
+ if (!closer) {
13
+ return closer;
14
+ }
15
+ this.closers.push(closer);
16
+ return closer;
17
+ }
18
+ async [Symbol.asyncDispose]() {
19
+ for (let closer of this.closers){
20
+ let o;
21
+ if (typeof closer === 'function') {
22
+ o = closer();
23
+ } else if (Symbol.asyncDispose in closer) {
24
+ o = closer[Symbol.asyncDispose]();
25
+ } else if (Symbol.dispose in closer) {
26
+ closer[Symbol.dispose]();
27
+ } else {
28
+ o = closer.close();
29
+ }
30
+ if (o && typeof o.then === 'function') {
31
+ await o;
32
+ }
33
+ }
34
+ }
35
+ close() {
36
+ return this[Symbol.asyncDispose]();
37
+ }
38
+ }
39
+
40
+ //# sourceMappingURL=AsyncCloser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/langs/AsyncCloser.ts"],"sourcesContent":["type AsyncClosable = { close(): void | Promise<void> } | (() => void | Promise<void>) | AsyncDisposable | Disposable;\n\n/**\n * @see AsyncDisposableStack\n */\nexport class AsyncCloser implements AsyncDisposable {\n closers: Array<AsyncClosable> = [];\n\n defer(closer: AsyncClosable | null | undefined) {\n if (!closer) {\n return;\n }\n this.closers.push(closer);\n }\n\n add<T extends AsyncClosable | null | undefined>(closer: T): T {\n if (!closer) {\n return closer;\n }\n this.closers.push(closer);\n return closer;\n }\n\n async [Symbol.asyncDispose]() {\n for (let closer of this.closers) {\n let o;\n if (typeof closer === 'function') {\n o = closer();\n } else if (Symbol.asyncDispose in closer) {\n o = closer[Symbol.asyncDispose]();\n } else if (Symbol.dispose in closer) {\n closer[Symbol.dispose]();\n } else {\n o = closer.close();\n }\n if (o && typeof o.then === 'function') {\n await o;\n }\n }\n }\n\n close() {\n return this[Symbol.asyncDispose]();\n }\n}\n"],"names":["AsyncCloser","closers","defer","closer","push","add","Symbol","asyncDispose","o","dispose","close","then"],"mappings":"AAEA;;CAEC,GACD,OAAO,MAAMA;IACXC,UAAgC,EAAE,CAAC;IAEnCC,MAAMC,MAAwC,EAAE;QAC9C,IAAI,CAACA,QAAQ;YACX;QACF;QACA,IAAI,CAACF,OAAO,CAACG,IAAI,CAACD;IACpB;IAEAE,IAAgDF,MAAS,EAAK;QAC5D,IAAI,CAACA,QAAQ;YACX,OAAOA;QACT;QACA,IAAI,CAACF,OAAO,CAACG,IAAI,CAACD;QAClB,OAAOA;IACT;IAEA,MAAM,CAACG,OAAOC,YAAY,CAAC,GAAG;QAC5B,KAAK,IAAIJ,UAAU,IAAI,CAACF,OAAO,CAAE;YAC/B,IAAIO;YACJ,IAAI,OAAOL,WAAW,YAAY;gBAChCK,IAAIL;YACN,OAAO,IAAIG,OAAOC,YAAY,IAAIJ,QAAQ;gBACxCK,IAAIL,MAAM,CAACG,OAAOC,YAAY,CAAC;YACjC,OAAO,IAAID,OAAOG,OAAO,IAAIN,QAAQ;gBACnCA,MAAM,CAACG,OAAOG,OAAO,CAAC;YACxB,OAAO;gBACLD,IAAIL,OAAOO,KAAK;YAClB;YACA,IAAIF,KAAK,OAAOA,EAAEG,IAAI,KAAK,YAAY;gBACrC,MAAMH;YACR;QACF;IACF;IAEAE,QAAQ;QACN,OAAO,IAAI,CAACJ,OAAOC,YAAY,CAAC;IAClC;AACF"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @see DisposableStack
3
+ */ export class Closer {
4
+ closers = [];
5
+ defer(closer) {
6
+ if (!closer) {
7
+ return;
8
+ }
9
+ this.closers.push(closer);
10
+ }
11
+ add(closer) {
12
+ if (!closer) {
13
+ return closer;
14
+ }
15
+ this.closers.push(closer);
16
+ return closer;
17
+ }
18
+ [Symbol.dispose]() {
19
+ for (let closer of this.closers){
20
+ if (typeof closer === 'function') {
21
+ closer();
22
+ } else if (Symbol.dispose in closer) {
23
+ closer[Symbol.dispose]();
24
+ } else {
25
+ closer.close();
26
+ }
27
+ }
28
+ }
29
+ close() {
30
+ this[Symbol.dispose]();
31
+ }
32
+ }
33
+
34
+ //# sourceMappingURL=Closer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/langs/Closer.ts"],"sourcesContent":["type Closable = { close(): void } | (() => void) | Disposable;\n\n/**\n * @see DisposableStack\n */\nexport class Closer implements Disposable {\n closers: Array<Closable> = [];\n\n defer(closer: Closable | null | undefined) {\n if (!closer) {\n return;\n }\n this.closers.push(closer);\n }\n\n add<T extends Closable | null | undefined>(closer: T): T {\n if (!closer) {\n return closer;\n }\n this.closers.push(closer);\n return closer;\n }\n\n [Symbol.dispose]() {\n for (let closer of this.closers) {\n if (typeof closer === 'function') {\n closer();\n } else if (Symbol.dispose in closer) {\n closer[Symbol.dispose]();\n } else {\n closer.close();\n }\n }\n }\n\n close() {\n this[Symbol.dispose]();\n }\n}\n"],"names":["Closer","closers","defer","closer","push","add","Symbol","dispose","close"],"mappings":"AAEA;;CAEC,GACD,OAAO,MAAMA;IACXC,UAA2B,EAAE,CAAC;IAE9BC,MAAMC,MAAmC,EAAE;QACzC,IAAI,CAACA,QAAQ;YACX;QACF;QACA,IAAI,CAACF,OAAO,CAACG,IAAI,CAACD;IACpB;IAEAE,IAA2CF,MAAS,EAAK;QACvD,IAAI,CAACA,QAAQ;YACX,OAAOA;QACT;QACA,IAAI,CAACF,OAAO,CAACG,IAAI,CAACD;QAClB,OAAOA;IACT;IAEA,CAACG,OAAOC,OAAO,CAAC,GAAG;QACjB,KAAK,IAAIJ,UAAU,IAAI,CAACF,OAAO,CAAE;YAC/B,IAAI,OAAOE,WAAW,YAAY;gBAChCA;YACF,OAAO,IAAIG,OAAOC,OAAO,IAAIJ,QAAQ;gBACnCA,MAAM,CAACG,OAAOC,OAAO,CAAC;YACxB,OAAO;gBACLJ,OAAOK,KAAK;YACd;QACF;IACF;IAEAA,QAAQ;QACN,IAAI,CAACF,OAAOC,OAAO,CAAC;IACtB;AACF"}
@@ -1 +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,GACD,WAqBqE"}
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"}
@@ -1 +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","trace","debug","info","warn","error","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","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":"IAEA;UAAKA,KAAK;IAALA,MAAAA,MACHC,WAAAA,MAAAA;IADGD,MAAAA,MAEHE,WAAAA,MAAAA;IAFGF,MAAAA,MAGHG,UAAO,KAAPA;IAHGH,MAAAA,MAIHI,UAAO,KAAPA;IAJGJ,MAAAA,MAKHK,WAAQ,KAARA;GALGL,UAAAA;AA4BL,SAASM,cAAcC,IAItB;IACC,OAAO,CAACC,KAAa,GAAGC;QACtB,MAAMC,MAAM;YACVC,SAASC,OAAOJ;YAChBK,OAAON,KAAKM,KAAK;YACjBC,OAAOC,OAAOC,MAAM,CAAC,CAAC,GAAGT,KAAKO,KAAK;QACrC;QAEA,IAAIL,IAAI,CAAC,EAAE,IAAI,OAAOA,IAAI,CAAC,EAAE,KAAK,UAAU;YAC1CC,IAAII,KAAK,GAAGC,OAAOC,MAAM,CAACN,IAAII,KAAK,EAAEL,IAAI,CAAC,EAAE;QAC9C,OAAO;YACL,IAAK,IAAIQ,IAAI,GAAGA,IAAIR,KAAKS,MAAM,EAAED,KAAK,EAAG;gBACvCP,IAAII,KAAK,CAACF,OAAOH,IAAI,CAACQ,EAAE,EAAE,GAAGR,IAAI,CAACQ,IAAI,EAAE;YAC1C;QACF;QAEAV,KAAKY,QAAQ,CAACT;IAChB;AACF;AAEA,SAASU,UAAUV,GAAc,EAAEH,OAA4B,CAAC,CAAC;IAC/D,MAAMc,KAAK,EAAE;IACb,IAAIX,IAAIY,IAAI,EAAE;QACZD,GAAGE,IAAI,CAACb,IAAIY,IAAI,CAACE,MAAM;IACzB;IACAd,IAAIG,KAAK,IAAIN,KAAKM,KAAK,KAAK,SAASQ,GAAGE,IAAI,CAACb,IAAIG,KAAK,CAACY,WAAW,GAAGC,QAAQ,CAAC,GAAG;IACjFL,GAAGE,IAAI,CAACb,IAAIC,OAAO;IAEnB,IAAID,IAAII,KAAK,EAAE;QACb,KAAK,IAAI,CAACa,KAAKC,MAAM,IAAIb,OAAOc,OAAO,CAACnB,IAAII,KAAK,EAAG;YAClDO,GAAGE,IAAI,CAAC,CAAC,EAAEI,IAAI,CAAC,EAAEG,KAAKV,SAAS,CAACQ,OAAO,CAAC;QAC3C;IACF;IACA,OAAOP,GAAGU,IAAI,CAAC;AACjB;AAEA,OAAO,SAASC,aACdzB,OAAmF,CAAC,CAAC;IAErFA,KAAKe,IAAI,KAAK,OAAOW,WAAW;IAChC,MAAMd,WAAW,CAACe;QAChB,kCAAkC;QAClC,MAAM,EAAEC,SAASH,aAAaG,MAAM,EAAEtB,KAAK,EAAES,IAAI,EAAE,GAAGf;QACtD,IAAIM,OAAO;YACT,IAAIb,KAAK,CAACa,MAAM,GAAGb,KAAK,CAACkC,OAAOrB,KAAK,CAAE,EAAE;gBACvC;YACF;QACF;QACA,IAAIS,MAAM;YACRY,OAAOZ,IAAI,GAAG,IAAIc;QACpB;QACAD,OAAOD;IACT;IACA,OAAO;QACLjC,OAAOK,cAAc;YAAEa;YAAUN,OAAO;QAAQ;QAChDX,OAAOI,cAAc;YAAEa;YAAUN,OAAO;QAAQ;QAChDV,MAAMG,cAAc;YAAEa;YAAUN,OAAO;QAAO;QAC9CT,MAAME,cAAc;YAAEa;YAAUN,OAAO;QAAO;QAC9CR,OAAOC,cAAc;YAAEa;YAAUN,OAAO;QAAQ;IAClD;AACF;AAEAmB,aAAaG,MAAM,GAAG,CAACD;IACrB,MAAM,EAAErB,KAAK,EAAE,GAAGqB;IAClBG,OAAO,CAACxB,SAAS,OAAO,CAACO,UAAUc;AACrC;AAwDA,IAAII,YACF,CAACC,MAAcC,OAAeC,UAAkBF,IAAI,GACpD,CAACG;QACC,IAAIC,SAAS,KAAKD;QAClB,IAAIE,QAAQD,OAAOE,OAAO,CAACL,OAAOD,KAAKrB,MAAM;QAC7C,OAAO,CAAC0B,QAAQL,OAAOO,aAAaH,QAAQH,OAAOC,SAASG,SAASJ,QAAQD,OAAOI,SAASH;IAC/F;AAEF,IAAIM,eAAe,CAACH,QAAgBH,OAAeC,SAAiBG;IAClE,IAAIG,QAAQJ,OAAOK,SAAS,CAAC,GAAGJ,SAASH;IACzC,IAAIQ,MAAMN,OAAOK,SAAS,CAACJ,QAAQJ,MAAMtB,MAAM;IAC/C,IAAIgC,YAAYD,IAAIJ,OAAO,CAACL;IAC5B,OAAO,CAACU,YAAYH,QAAQD,aAAaG,KAAKT,OAAOC,SAASS,aAAaH,QAAQE;AACrF;AAEA,SAASE;IACP,IAAI,OAAOC,YAAY,UAAU;QAC/B,OAAOA,QAAQC,GAAG;IACpB;IACA,OAAO,CAAC;AACV;AAEA,SAASC;IACP,IAAI,OAAOrB,WAAW,UAAU;QAC9B,OAAO;IACT;IACA,MAAMoB,MAAMF;IACZ,IAAI,cAAcE,KAAK;QACrB,OAAO;IACT;IACA,IAAI,iBAAiBA,OAAO,QAAQA,KAAK;QACvC,OAAO;IACT;IACA,OAAO;AACT;AAEA,OAAO,SAASE,oBAAoBC,UAAUF,kBAAkB;IAC9D,OAAO;QACLA,kBAAkBE;QAClBC,OAAOD,UAAU,CAACE,IAAc,CAAC,OAAO,EAAEA,EAAE,OAAO,CAAC,GAAG9C;QACvD+C,MAAMH,UAAUlB,UAAU,WAAW,YAAY,qBAAqB1B;QACtEgD,KAAKJ,UAAUlB,UAAU,WAAW,YAAY,qBAAqB1B;QACrEiD,QAAQL,UAAUlB,UAAU,WAAW,cAAc1B;QACrDkD,WAAWN,UAAUlB,UAAU,WAAW,cAAc1B;QACxDmD,SAASP,UAAUlB,UAAU,WAAW,cAAc1B;QACtDoD,QAAQR,UAAUlB,UAAU,WAAW,cAAc1B;QACrDqD,eAAeT,UAAUlB,UAAU,WAAW,cAAc1B;QAC5DsD,OAAOV,UAAUlB,UAAU,YAAY,cAAc1B;QACrDuD,KAAKX,UAAUlB,UAAU,YAAY,cAAc1B;QACnDwD,OAAOZ,UAAUlB,UAAU,YAAY,cAAc1B;QACrDyD,QAAQb,UAAUlB,UAAU,YAAY,cAAc1B;QACtD0D,MAAMd,UAAUlB,UAAU,YAAY,cAAc1B;QACpD2D,SAASf,UAAUlB,UAAU,YAAY,cAAc1B;QACvD4D,MAAMhB,UAAUlB,UAAU,YAAY,cAAc1B;QACpD6D,OAAOjB,UAAUlB,UAAU,YAAY,cAAc1B;QACrD8D,MAAMlB,UAAUlB,UAAU,YAAY,cAAc1B;QACpD+D,SAASnB,UAAUlB,UAAU,YAAY,cAAc1B;QACvDgE,OAAOpB,UAAUlB,UAAU,YAAY,cAAc1B;QACrDiE,SAASrB,UAAUlB,UAAU,YAAY,cAAc1B;QACvDkE,UAAUtB,UAAUlB,UAAU,YAAY,cAAc1B;QACxDmE,QAAQvB,UAAUlB,UAAU,YAAY,cAAc1B;QACtDoE,WAAWxB,UAAUlB,UAAU,YAAY,cAAc1B;QACzDqE,QAAQzB,UAAUlB,UAAU,YAAY,cAAc1B;QACtDsE,SAAS1B,UAAUlB,UAAU,YAAY,cAAc1B;IACzD;AACF"}
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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"}
@@ -1,3 +1,4 @@
1
+ // https://github.com/TehShrike/deepmerge/blob/master/index.js
1
2
  import { isMergeableObject as defaultIsMergeableObject } from './isMergeableObject.js';
2
3
  function emptyTarget(val) {
3
4
  return Array.isArray(val) ? [] : {};