@wener/utils 1.1.46 → 1.1.48

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 (67) hide show
  1. package/README.md +9 -1
  2. package/lib/asyncs/Promises.js +46 -0
  3. package/lib/asyncs/Promises.js.map +1 -0
  4. package/lib/asyncs/isPromise.js +2 -3
  5. package/lib/asyncs/isPromise.js.map +1 -1
  6. package/lib/cn/division/DivisionCode.js +30 -17
  7. package/lib/cn/division/DivisionCode.js.map +1 -1
  8. package/lib/cn/id/{Mod11Checksum.js → Mod11.js} +3 -6
  9. package/lib/cn/id/Mod11.js.map +1 -0
  10. package/lib/cn/id/ResidentIdNumber.js +10 -12
  11. package/lib/cn/id/ResidentIdNumber.js.map +1 -1
  12. package/lib/cn/uscc/{Mod31Checksum.js → Mod31.js} +3 -6
  13. package/lib/cn/uscc/Mod31.js.map +1 -0
  14. package/lib/cn/uscc/USCC.js +6 -9
  15. package/lib/cn/uscc/USCC.js.map +1 -1
  16. package/lib/cn/uscc/isUSCC.js +1 -1
  17. package/lib/cn/uscc/isUSCC.js.map +1 -1
  18. package/lib/crypto/getNodeCrypto.js +13 -10
  19. package/lib/crypto/getNodeCrypto.js.map +1 -1
  20. package/lib/crypto/getRandomValues.js +5 -1
  21. package/lib/crypto/getRandomValues.js.map +1 -1
  22. package/lib/emitter/types.js +3 -0
  23. package/lib/emitter/types.js.map +1 -0
  24. package/lib/fetch/http.types.js +4 -0
  25. package/lib/fetch/http.types.js.map +1 -0
  26. package/lib/index.js +4 -3
  27. package/lib/index.js.map +1 -1
  28. package/lib/io/ArrayBuffers.js +12 -5
  29. package/lib/io/ArrayBuffers.js.map +1 -1
  30. package/lib/io/ByteBuffer.js +4 -13
  31. package/lib/io/ByteBuffer.js.map +1 -1
  32. package/lib/maths/random.js.map +1 -1
  33. package/lib/mitt/index.js +77 -0
  34. package/lib/mitt/index.js.map +1 -0
  35. package/lib/objects/computeIfAbsent.js +1 -1
  36. package/lib/objects/computeIfAbsent.js.map +1 -1
  37. package/package.json +6 -14
  38. package/src/asyncs/Promises.ts +52 -0
  39. package/src/asyncs/isPromise.ts +3 -3
  40. package/src/cn/division/DivisionCode.ts +61 -8
  41. package/src/cn/division/division.test.ts +6 -0
  42. package/src/cn/id/{Mod11Checksum.ts → Mod11.ts} +3 -6
  43. package/src/cn/id/ResidentIdNumber.ts +11 -13
  44. package/src/cn/id/id.test.ts +5 -5
  45. package/src/cn/scripts/gen.test.ts +2 -1
  46. package/src/cn/uscc/{Mod31Checksum.ts → Mod31.ts} +3 -7
  47. package/src/cn/uscc/USCC.ts +7 -11
  48. package/src/cn/uscc/isUSCC.ts +1 -1
  49. package/src/cn/uscc/uscc.test.ts +4 -4
  50. package/src/crypto/getNodeCrypto.ts +15 -11
  51. package/src/crypto/getRandomValues.ts +6 -1
  52. package/src/emitter/types.ts +18 -0
  53. package/src/fetch/http.types.ts +46 -0
  54. package/src/index.ts +5 -3
  55. package/src/io/ArrayBuffers.ts +10 -5
  56. package/src/io/ByteBuffer.test.ts +30 -9
  57. package/src/io/ByteBuffer.ts +4 -13
  58. package/src/langs/mixin.test.ts +39 -0
  59. package/src/maths/random.ts +1 -1
  60. package/src/mitt/README.md +1 -0
  61. package/src/mitt/index.ts +114 -0
  62. package/src/objects/computeIfAbsent.ts +3 -2
  63. package/lib/asyncs/sleep.js +0 -3
  64. package/lib/asyncs/sleep.js.map +0 -1
  65. package/lib/cn/id/Mod11Checksum.js.map +0 -1
  66. package/lib/cn/uscc/Mod31Checksum.js.map +0 -1
  67. package/src/asyncs/sleep.ts +0 -1
package/README.md CHANGED
@@ -22,7 +22,7 @@
22
22
  - 默认 0 依赖
23
23
  - 默认 ESM
24
24
  - 面向 bundler
25
- - 又 bundler 来做 tree shaking
25
+ - 又 bundler 来做 tree shaking
26
26
  - 目前不提供 bundle 的 dist js
27
27
  - 提供 中国 相关的工具
28
28
  - 身份证解析 解析/校验/生成
@@ -41,6 +41,14 @@
41
41
  - rosetta
42
42
  - camelcase
43
43
 
44
+ ## References
45
+
46
+ - Events
47
+ - [mitt](https://github.com/developit/mitt) MIT
48
+ - < 200b - 因此功能有限
49
+ - .once https://github.com/developit/mitt/issues/136
50
+ - https://nodejs.org/api/events.html
51
+
44
52
  <!-- LINK:BEGIN -->
45
53
 
46
54
  # Links
@@ -0,0 +1,46 @@
1
+ /**
2
+ * A collection of utility functions for working with Promises.
3
+ */ export class Promises {
4
+ /**
5
+ * Creates a new Promise and returns it in an object, along with its resolve and reject functions.
6
+ * @returns An object with the properties `promise`, `resolve`, and `reject`.
7
+ *
8
+ * ```ts
9
+ * const { promise, resolve, reject } = Promise.withResolvers<T>();
10
+ * ```
11
+ *
12
+ * - Chrome 119, Safari 17.4
13
+ *
14
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolvers
15
+ */ static withResolvers() {
16
+ if ('withResolvers' in Promise) {
17
+ return Promise['withResolvers']();
18
+ }
19
+ let resolve;
20
+ let reject;
21
+ // @ts-ignore
22
+ const promise = new Promise((res, rej)=>{
23
+ resolve = res;
24
+ reject = rej;
25
+ });
26
+ return {
27
+ promise,
28
+ resolve: resolve,
29
+ reject: reject
30
+ };
31
+ }
32
+ /**
33
+ * Creates a new Promise and returns it in an object, along with its resolve and reject functions.
34
+ * @param ms The number of milliseconds to wait before rejecting the promise.
35
+ */ static sleep(ms) {
36
+ return new Promise((resolve)=>setTimeout(resolve, ms));
37
+ }
38
+ /**
39
+ * Returns `true` if the given value is a Promise.
40
+ * @param v The value to check.
41
+ */ static isPromise(v) {
42
+ return v && (v instanceof Promise || v.then && v.catch);
43
+ }
44
+ }
45
+
46
+ //# sourceMappingURL=Promises.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/asyncs/Promises.ts"],"sourcesContent":["/**\n * A collection of utility functions for working with Promises.\n */\nexport class Promises {\n /**\n * Creates a new Promise and returns it in an object, along with its resolve and reject functions.\n * @returns An object with the properties `promise`, `resolve`, and `reject`.\n *\n * ```ts\n * const { promise, resolve, reject } = Promise.withResolvers<T>();\n * ```\n *\n * - Chrome 119, Safari 17.4\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolvers\n */\n static withResolvers<T>(): PromiseWithResolvers<T> {\n if ('withResolvers' in Promise) {\n return Promise['withResolvers']() as any;\n }\n let resolve: (value: T | PromiseLike<T>) => void;\n let reject: (reason?: any) => void;\n // @ts-ignore\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve: resolve!, reject: reject! };\n }\n\n /**\n * Creates a new Promise and returns it in an object, along with its resolve and reject functions.\n * @param ms The number of milliseconds to wait before rejecting the promise.\n */\n static sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n /**\n * Returns `true` if the given value is a Promise.\n * @param v The value to check.\n */\n static isPromise<T>(v: any): v is Promise<T> {\n return v && (v instanceof Promise || (v.then && v.catch));\n }\n}\n\ninterface PromiseWithResolvers<T> {\n promise: Promise<T>;\n resolve: (value: T | PromiseLike<T>) => void;\n reject: (reason?: any) => void;\n}\n"],"names":["Promises","withResolvers","Promise","resolve","reject","promise","res","rej","sleep","ms","setTimeout","isPromise","v","then","catch"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;;CAEC,GACD,OAAO,MAAMA;IACX;;;;;;;;;;;GAWC,GACD,OAAOC,gBAA4C;QACjD,IAAI,mBAAmBC,SAAS;YAC9B,OAAOA,OAAO,CAAC,gBAAgB;QACjC;QACA,IAAIC;QACJ,IAAIC;QACJ,aAAa;QACb,MAAMC,UAAU,IAAIH,QAAW,CAACI,KAAKC;YACnCJ,UAAUG;YACVF,SAASG;QACX;QACA,OAAO;YAAEF;YAASF,SAASA;YAAUC,QAAQA;QAAQ;IACvD;IAEA;;;GAGC,GACD,OAAOI,MAAMC,EAAU,EAAiB;QACtC,OAAO,IAAIP,QAAQ,CAACC,UAAYO,WAAWP,SAASM;IACtD;IAEA;;;GAGC,GACD,OAAOE,UAAaC,CAAM,EAAmB;QAC3C,OAAOA,KAAMA,CAAAA,aAAaV,WAAYU,EAAEC,IAAI,IAAID,EAAEE,KAAK;IACzD;AACF"}
@@ -1,5 +1,4 @@
1
- export function isPromise(v) {
2
- return v && (v instanceof Promise || v.then && v.catch);
3
- }
1
+ import { Promises } from './Promises.js';
2
+ export const isPromise = Promises.isPromise;
4
3
 
5
4
  //# sourceMappingURL=isPromise.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/asyncs/isPromise.ts"],"sourcesContent":["export function isPromise<T>(v: any): v is Promise<T> {\n return v && (v instanceof Promise || (v.then && v.catch));\n}\n"],"names":["isPromise","v","Promise","then","catch"],"rangeMappings":";;","mappings":"AAAA,OAAO,SAASA,UAAaC,CAAM;IACjC,OAAOA,KAAMA,CAAAA,aAAaC,WAAYD,EAAEE,IAAI,IAAIF,EAAEG,KAAK;AACzD"}
1
+ {"version":3,"sources":["../../src/asyncs/isPromise.ts"],"sourcesContent":["import { Promises } from './Promises';\n\nexport const isPromise = Promises.isPromise;\n"],"names":["Promises","isPromise"],"rangeMappings":";","mappings":"AAAA,SAASA,QAAQ,QAAQ,aAAa;AAEtC,OAAO,MAAMC,YAAYD,SAASC,SAAS,CAAC"}
@@ -36,12 +36,8 @@ const DivisionCodeLevels = [
36
36
  * Codes for the administrative divisions of the People's Republic of China
37
37
  *
38
38
  * @see https://zh.wikipedia.org/wiki/GB/T_2260 中华人民共和国行政区划代码
39
- */ export class DivisionCode {
40
- static Levels = DivisionCodeLevels;
41
- static instance;
42
- static get() {
43
- return this.instance || (this.instance = new DivisionCode());
44
- }
39
+ */ export class DivisionCodeFormat {
40
+ static levels = DivisionCodeLevels;
45
41
  regex = /^(?<province>\d{2})(?<city>\d{2})?(?<county>\d{2})?(?<town>\d{3})?(?<village>\d{3})?$/;
46
42
  provinces = [
47
43
  [
@@ -181,16 +177,33 @@ const DivisionCodeLevels = [
181
177
  '澳门特别行政区'
182
178
  ]
183
179
  ];
184
- } // export function getSimpleProvinceLabel(value: string) {
185
- // if (!value) {
186
- // return;
187
- // }
188
- // let label = value;
189
- // if (/[0-9]/.test(label)) {
190
- // label = label.slice(0, 2);
191
- // label = options.find((v) => v.value === label)?.label || label;
192
- // }
193
- // return label.replace(/省|市|(回族|维吾尔|壮族)?自治区|特别行政区$/, '');
194
- // }
180
+ parse(code) {
181
+ if (!code) return;
182
+ const { regex } = this;
183
+ const match = regex.exec(code);
184
+ if (!match) return;
185
+ const { province, city, county, town, village } = match.groups ?? {};
186
+ if (!province) return;
187
+ return {
188
+ province,
189
+ city,
190
+ county,
191
+ town,
192
+ village
193
+ };
194
+ }
195
+ }
196
+ // export function getSimpleProvinceLabel(value: string) {
197
+ // if (!value) {
198
+ // return;
199
+ // }
200
+ // let label = value;
201
+ // if (/[0-9]/.test(label)) {
202
+ // label = label.slice(0, 2);
203
+ // label = options.find((v) => v.value === label)?.label || label;
204
+ // }
205
+ // return label.replace(/省|市|(回族|维吾尔|壮族)?自治区|特别行政区$/, '');
206
+ // }
207
+ export const DivisionCode = new DivisionCodeFormat();
195
208
 
196
209
  //# sourceMappingURL=DivisionCode.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cn/division/DivisionCode.ts"],"sourcesContent":["const DivisionCodeLevels = [\n {\n level: 1,\n code: 'Province',\n length: 2,\n label: '省',\n },\n {\n level: 2,\n code: 'City',\n length: 4,\n label: '市',\n },\n {\n level: 3,\n code: 'County',\n length: 6,\n label: '区县',\n },\n {\n level: 4,\n code: 'Town',\n length: 9,\n label: '乡镇',\n },\n {\n level: 5,\n code: 'Village',\n length: 12,\n label: '村',\n },\n] as const;\n\n// String(Number.MAX_SAFE_INTEGER).length=16\n// 12 is safe int\n\n/**\n * Codes for the administrative divisions of the People's Republic of China\n *\n * @see https://zh.wikipedia.org/wiki/GB/T_2260 中华人民共和国行政区划代码\n */\nexport class DivisionCode {\n static Levels = DivisionCodeLevels;\n\n private static instance: DivisionCode;\n\n static get() {\n return this.instance || (this.instance = new DivisionCode());\n }\n\n regex = /^(?<province>\\d{2})(?<city>\\d{2})?(?<county>\\d{2})?(?<town>\\d{3})?(?<village>\\d{3})?$/;\n\n provinces: Array<[number, string]> = [\n [11, '北京市'],\n [12, '天津市'],\n [13, '河北省'],\n [14, '山西省'],\n [15, '内蒙古自治区'],\n [21, '辽宁省'],\n [22, '吉林省'],\n [23, '黑龙江省'],\n [31, '上海市'],\n [32, '江苏省'],\n [33, '浙江省'],\n [34, '安徽省'],\n [35, '福建省'],\n [36, '江西省'],\n [37, '山东省'],\n [41, '河南省'],\n [42, '湖北省'],\n [43, '湖南省'],\n [44, '广东省'],\n [45, '广西壮族自治区'],\n [46, '海南省'],\n [50, '重庆市'],\n [51, '四川省'],\n [52, '贵州省'],\n [53, '云南省'],\n [54, '西藏自治区'],\n [61, '陕西省'],\n [62, '甘肃省'],\n [63, '青海省'],\n [64, '宁夏回族自治区'],\n [65, '新疆维吾尔自治区'],\n [71, '台湾省'],\n [81, '香港特别行政区'],\n [82, '澳门特别行政区'],\n // 9 国外\n ];\n}\n\n// export function getSimpleProvinceLabel(value: string) {\n// if (!value) {\n// return;\n// }\n// let label = value;\n// if (/[0-9]/.test(label)) {\n// label = label.slice(0, 2);\n// label = options.find((v) => v.value === label)?.label || label;\n// }\n// return label.replace(/省|市|(回族|维吾尔|壮族)?自治区|特别行政区$/, '');\n// }\n"],"names":["DivisionCodeLevels","level","code","length","label","DivisionCode","Levels","instance","get","regex","provinces"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,MAAMA,qBAAqB;IACzB;QACEC,OAAO;QACPC,MAAM;QACNC,QAAQ;QACRC,OAAO;IACT;IACA;QACEH,OAAO;QACPC,MAAM;QACNC,QAAQ;QACRC,OAAO;IACT;IACA;QACEH,OAAO;QACPC,MAAM;QACNC,QAAQ;QACRC,OAAO;IACT;IACA;QACEH,OAAO;QACPC,MAAM;QACNC,QAAQ;QACRC,OAAO;IACT;IACA;QACEH,OAAO;QACPC,MAAM;QACNC,QAAQ;QACRC,OAAO;IACT;CACD;AAED,4CAA4C;AAC5C,iBAAiB;AAEjB;;;;CAIC,GACD,OAAO,MAAMC;IACX,OAAOC,SAASN,mBAAmB;IAEnC,OAAeO,SAAuB;IAEtC,OAAOC,MAAM;QACX,OAAO,IAAI,CAACD,QAAQ,IAAK,CAAA,IAAI,CAACA,QAAQ,GAAG,IAAIF,cAAa;IAC5D;IAEAI,QAAQ,wFAAwF;IAEhGC,YAAqC;QACnC;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAS;QACd;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAO;QACZ;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAU;QACf;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAQ;QACb;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAU;QACf;YAAC;YAAI;SAAW;QAChB;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAU;QACf;YAAC;YAAI;SAAU;KAEhB,CAAC;AACJ,EAEA,0DAA0D;CAC1D,kBAAkB;CAClB,cAAc;CACd,MAAM;CACN,uBAAuB;CACvB,+BAA+B;CAC/B,iCAAiC;CACjC,sEAAsE;CACtE,MAAM;CACN,4DAA4D;CAC5D,IAAI"}
1
+ {"version":3,"sources":["../../../src/cn/division/DivisionCode.ts"],"sourcesContent":["const DivisionCodeLevels = [\n {\n level: 1,\n code: 'Province',\n length: 2,\n label: '省',\n },\n {\n level: 2,\n code: 'City',\n length: 4,\n label: '市',\n },\n {\n level: 3,\n code: 'County',\n length: 6,\n label: '区县',\n },\n {\n level: 4,\n code: 'Town',\n length: 9,\n label: '乡镇',\n },\n {\n level: 5,\n code: 'Village',\n length: 12,\n label: '村',\n },\n] as const;\n\n// String(Number.MAX_SAFE_INTEGER).length=16\n// 12 is safe int\n\n/**\n * Codes for the administrative divisions of the People's Republic of China\n *\n * @see https://zh.wikipedia.org/wiki/GB/T_2260 中华人民共和国行政区划代码\n */\nexport class DivisionCodeFormat {\n static levels = DivisionCodeLevels;\n\n regex = /^(?<province>\\d{2})(?<city>\\d{2})?(?<county>\\d{2})?(?<town>\\d{3})?(?<village>\\d{3})?$/;\n\n provinces: Array<[number, string]> = [\n [11, '北京市'],\n [12, '天津市'],\n [13, '河北省'],\n [14, '山西省'],\n [15, '内蒙古自治区'],\n [21, '辽宁省'],\n [22, '吉林省'],\n [23, '黑龙江省'],\n [31, '上海市'],\n [32, '江苏省'],\n [33, '浙江省'],\n [34, '安徽省'],\n [35, '福建省'],\n [36, '江西省'],\n [37, '山东省'],\n [41, '河南省'],\n [42, '湖北省'],\n [43, '湖南省'],\n [44, '广东省'],\n [45, '广西壮族自治区'],\n [46, '海南省'],\n [50, '重庆市'],\n [51, '四川省'],\n [52, '贵州省'],\n [53, '云南省'],\n [54, '西藏自治区'],\n [61, '陕西省'],\n [62, '甘肃省'],\n [63, '青海省'],\n [64, '宁夏回族自治区'],\n [65, '新疆维吾尔自治区'],\n [71, '台湾省'],\n [81, '香港特别行政区'],\n [82, '澳门特别行政区'],\n // 9 国外\n ];\n\n parse(code: string) {\n if (!code) return;\n const { regex } = this;\n const match = regex.exec(code);\n if (!match) return;\n const { province, city, county, town, village } = match.groups ?? {};\n if (!province) return;\n\n return {\n province,\n city,\n county,\n town,\n village,\n };\n }\n}\n\ninterface DivisionTreeNode {\n sub: string; // sub code\n children?: Record<string, DivisionTreeNode>;\n\n code: string; // full code\n name?: string; // name of division\n}\n\nexport type DivisionCodeLevel = 'Village' | 'Town' | 'County' | 'City' | 'Province';\n\nexport interface ParsedDivisionCode {\n level: DivisionCodeLevel;\n code: string;\n name?: string;\n fullName?: string;\n names: string[];\n // 村级(村委会、居委会)\n // 12 位\n village?: CodeName;\n // 乡级(乡镇、街道)\n // 9 位\n town?: CodeName;\n // 县级(区县)\n // 6 位 - 常用 - 2985 个\n county?: CodeName;\n // 地级(城市)\n // 4 位 - 343 个\n city?: CodeName;\n // 省级(省份、直辖市、自治区)\n // 2 位 - 32 个\n province: CodeName;\n\n children?: Array<{ code: string; name?: string }>;\n}\n\nexport interface CodeName {\n code: string;\n name: string;\n}\n\n// export function getSimpleProvinceLabel(value: string) {\n// if (!value) {\n// return;\n// }\n// let label = value;\n// if (/[0-9]/.test(label)) {\n// label = label.slice(0, 2);\n// label = options.find((v) => v.value === label)?.label || label;\n// }\n// return label.replace(/省|市|(回族|维吾尔|壮族)?自治区|特别行政区$/, '');\n// }\n\nexport const DivisionCode = new DivisionCodeFormat();\n"],"names":["DivisionCodeLevels","level","code","length","label","DivisionCodeFormat","levels","regex","provinces","parse","match","exec","province","city","county","town","village","groups","DivisionCode"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,MAAMA,qBAAqB;IACzB;QACEC,OAAO;QACPC,MAAM;QACNC,QAAQ;QACRC,OAAO;IACT;IACA;QACEH,OAAO;QACPC,MAAM;QACNC,QAAQ;QACRC,OAAO;IACT;IACA;QACEH,OAAO;QACPC,MAAM;QACNC,QAAQ;QACRC,OAAO;IACT;IACA;QACEH,OAAO;QACPC,MAAM;QACNC,QAAQ;QACRC,OAAO;IACT;IACA;QACEH,OAAO;QACPC,MAAM;QACNC,QAAQ;QACRC,OAAO;IACT;CACD;AAED,4CAA4C;AAC5C,iBAAiB;AAEjB;;;;CAIC,GACD,OAAO,MAAMC;IACX,OAAOC,SAASN,mBAAmB;IAEnCO,QAAQ,wFAAwF;IAEhGC,YAAqC;QACnC;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAS;QACd;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAO;QACZ;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAU;QACf;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAQ;QACb;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAU;QACf;YAAC;YAAI;SAAW;QAChB;YAAC;YAAI;SAAM;QACX;YAAC;YAAI;SAAU;QACf;YAAC;YAAI;SAAU;KAEhB,CAAC;IAEFC,MAAMP,IAAY,EAAE;QAClB,IAAI,CAACA,MAAM;QACX,MAAM,EAAEK,KAAK,EAAE,GAAG,IAAI;QACtB,MAAMG,QAAQH,MAAMI,IAAI,CAACT;QACzB,IAAI,CAACQ,OAAO;QACZ,MAAM,EAAEE,QAAQ,EAAEC,IAAI,EAAEC,MAAM,EAAEC,IAAI,EAAEC,OAAO,EAAE,GAAGN,MAAMO,MAAM,IAAI,CAAC;QACnE,IAAI,CAACL,UAAU;QAEf,OAAO;YACLA;YACAC;YACAC;YACAC;YACAC;QACF;IACF;AACF;AA0CA,0DAA0D;AAC1D,kBAAkB;AAClB,cAAc;AACd,MAAM;AACN,uBAAuB;AACvB,+BAA+B;AAC/B,iCAAiC;AACjC,sEAAsE;AACtE,MAAM;AACN,4DAA4D;AAC5D,IAAI;AAEJ,OAAO,MAAME,eAAe,IAAIb,qBAAqB"}
@@ -21,11 +21,7 @@
21
21
  2,
22
22
  1
23
23
  ];
24
- static instance;
25
- static get() {
26
- return this.instance || (this.instance = new Mod11Checksum());
27
- }
28
- verify(s) {
24
+ validate(s) {
29
25
  return s.at(-1) === this.generate(s.slice(0, s.length - 1));
30
26
  }
31
27
  generate(s) {
@@ -42,5 +38,6 @@
42
38
  }
43
39
  }
44
40
  }
41
+ export const Mod11 = new Mod11Checksum();
45
42
 
46
- //# sourceMappingURL=Mod11Checksum.js.map
43
+ //# sourceMappingURL=Mod11.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/cn/id/Mod11.ts"],"sourcesContent":["/**\n * ISO 7064:1983, MOD 11-2.\n */\nexport class Mod11Checksum {\n weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1];\n\n validate(s: string) {\n return s.at(-1) === this.generate(s.slice(0, s.length - 1));\n }\n\n generate(s: string) {\n const { weights } = this;\n let sum = 0;\n for (let i = 0; i < s.length; i++) {\n sum += parseInt(s[i]) * weights[i];\n }\n const num = (12 - (sum % 11)) % 11;\n if (num < 10) {\n return num.toString();\n } else {\n return 'X';\n }\n }\n}\n\nexport const Mod11 = new Mod11Checksum();\n"],"names":["Mod11Checksum","weights","validate","s","at","generate","slice","length","sum","i","parseInt","num","toString","Mod11"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;;CAEC,GACD,OAAO,MAAMA;IACXC,UAAU;QAAC;QAAG;QAAG;QAAI;QAAG;QAAG;QAAG;QAAG;QAAG;QAAG;QAAG;QAAG;QAAG;QAAI;QAAG;QAAG;QAAG;QAAG;KAAE,CAAC;IAEnEC,SAASC,CAAS,EAAE;QAClB,OAAOA,EAAEC,EAAE,CAAC,CAAC,OAAO,IAAI,CAACC,QAAQ,CAACF,EAAEG,KAAK,CAAC,GAAGH,EAAEI,MAAM,GAAG;IAC1D;IAEAF,SAASF,CAAS,EAAE;QAClB,MAAM,EAAEF,OAAO,EAAE,GAAG,IAAI;QACxB,IAAIO,MAAM;QACV,IAAK,IAAIC,IAAI,GAAGA,IAAIN,EAAEI,MAAM,EAAEE,IAAK;YACjCD,OAAOE,SAASP,CAAC,CAACM,EAAE,IAAIR,OAAO,CAACQ,EAAE;QACpC;QACA,MAAME,MAAM,AAAC,CAAA,KAAMH,MAAM,EAAE,IAAK;QAChC,IAAIG,MAAM,IAAI;YACZ,OAAOA,IAAIC,QAAQ;QACrB,OAAO;YACL,OAAO;QACT;IACF;AACF;AAEA,OAAO,MAAMC,QAAQ,IAAIb,gBAAgB"}
@@ -1,21 +1,18 @@
1
- import { Mod11Checksum } from './Mod11Checksum.js';
2
- export class ResidentIdNumber {
3
- checksum = Mod11Checksum.get();
1
+ import { Mod11 } from './Mod11.js';
2
+ let ResidentIdNumberFormat = class ResidentIdNumberFormat {
3
+ checksum = Mod11;
4
4
  // 9 https://zh.wikipedia.org/wiki/中华人民共和国外国人永久居留身份证
5
5
  // 9 标识码
6
6
  // 申领地代码 - 2 位行政区划
7
7
  // 国籍国代码 - 3 位数字 https://zh.wikipedia.org/wiki/ISO_3166-1数字代码
8
8
  regex = /^(?<division>[1-9]\d{5})(?<year>18|19|20)\d{2}(?<month>0[1-9]|1[0-2])(?<day>0[1-9]|[12]\d|3[01])(?<sequence>\d{3})(?<checksum>[0-9Xx])$/;
9
- static instance;
10
- static get() {
11
- return this.instance ||= new ResidentIdNumber();
12
- }
13
- verify(s) {
9
+ validate(s) {
14
10
  if (!s) return false;
15
- return this.regex.test(s) && this.checksum.verify(s.toUpperCase());
11
+ return this.regex.test(s) && this.checksum.validate(s.toUpperCase());
16
12
  }
13
+ generate(opts) {}
17
14
  parse(s) {
18
- if (!this.verify(s)) {
15
+ if (!this.validate(s)) {
19
16
  return;
20
17
  }
21
18
  let date = s.slice(6, 14);
@@ -25,7 +22,7 @@ export class ResidentIdNumber {
25
22
  return new IdNumber(s.slice(0, 6), // new Date(`${y}-${m}-${d}`), // YYYYMMDD
26
23
  new Date(Date.UTC(y, m - 1, d)), parseInt(s.slice(14, 17)), s.slice(17, 18).toUpperCase());
27
24
  }
28
- }
25
+ };
29
26
  let IdNumber = class IdNumber {
30
27
  division;
31
28
  birthDate;
@@ -58,7 +55,7 @@ let IdNumber = class IdNumber {
58
55
  };
59
56
  }
60
57
  get valid() {
61
- return ResidentIdNumber.get().verify(this.toString());
58
+ return ResidentIdNumber.validate(this.toString());
62
59
  }
63
60
  get male() {
64
61
  return this.sequence % 2 === 1;
@@ -96,5 +93,6 @@ function formatDate(date, format = 'YYYYMMDD') {
96
93
  throw new Error(`Invalid format`);
97
94
  }
98
95
  }
96
+ export const ResidentIdNumber = new ResidentIdNumberFormat();
99
97
 
100
98
  //# sourceMappingURL=ResidentIdNumber.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cn/id/ResidentIdNumber.ts"],"sourcesContent":["import { Mod11Checksum } from './Mod11Checksum';\n\nexport class ResidentIdNumber {\n checksum = Mod11Checksum.get();\n\n // 9 https://zh.wikipedia.org/wiki/中华人民共和国外国人永久居留身份证\n // 9 标识码\n // 申领地代码 - 2 位行政区划\n // 国籍国代码 - 3 位数字 https://zh.wikipedia.org/wiki/ISO_3166-1数字代码\n\n regex =\n /^(?<division>[1-9]\\d{5})(?<year>18|19|20)\\d{2}(?<month>0[1-9]|1[0-2])(?<day>0[1-9]|[12]\\d|3[01])(?<sequence>\\d{3})(?<checksum>[0-9Xx])$/;\n\n private static instance: ResidentIdNumber;\n\n static get() {\n return (this.instance ||= new ResidentIdNumber());\n }\n\n verify(s: string) {\n if (!s) return false;\n return this.regex.test(s) && this.checksum.verify(s.toUpperCase());\n }\n\n parse(s: string): IdNumber | undefined {\n if (!this.verify(s)) {\n return;\n }\n\n let date = s.slice(6, 14);\n let y = parseInt(date.slice(0, 4));\n let m = parseInt(date.slice(4, 6));\n let d = parseInt(date.slice(6));\n return new IdNumber(\n s.slice(0, 6),\n // new Date(`${y}-${m}-${d}`), // YYYYMMDD\n new Date(Date.UTC(y, m - 1, d)), // 避免时区问题\n parseInt(s.slice(14, 17)),\n s.slice(17, 18).toUpperCase(),\n );\n }\n}\n\ninterface ParseResidentIdNumberResult {\n division: string;\n birthDate: Date;\n sequence: number;\n checksum: string;\n\n valid: boolean;\n male: boolean;\n female: boolean;\n sex: 'Male' | 'Female';\n age: number;\n}\n\nclass IdNumber {\n constructor(\n public division: string,\n public birthDate: Date,\n public sequence: number,\n public checksum: string,\n ) {}\n\n toString() {\n return this.base + this.checksum;\n }\n\n toJSON() {\n return this.toString();\n }\n\n toObject(): ParseResidentIdNumberResult {\n const { division, birthDate, sequence, checksum, age, valid, male, female, sex } = this;\n return {\n division,\n birthDate,\n sequence,\n checksum,\n age,\n valid,\n male,\n female,\n sex,\n };\n }\n\n get valid() {\n return ResidentIdNumber.get().verify(this.toString());\n }\n\n get male() {\n return this.sequence % 2 === 1;\n }\n\n get female() {\n return this.sequence % 2 === 0;\n }\n\n get age() {\n return new Date().getFullYear() - this.birthDate.getFullYear();\n }\n\n get sex(): 'Male' | 'Female' {\n return this.sequence % 2 === 1 ? 'Male' : 'Female';\n }\n\n /**\n * base for checksum\n * @private\n */\n private get base() {\n return [this.division, formatDate(this.birthDate, 'YYYYMMDD'), this.sequence.toString().padStart(3, '0')].join('');\n }\n}\n\nfunction formatDate(date: Date, format = 'YYYYMMDD') {\n switch (format) {\n case 'YYYYMMDD': {\n const year = date.getFullYear();\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n return `${year}${month}${day}`;\n }\n default:\n throw new Error(`Invalid format`);\n }\n}\n"],"names":["Mod11Checksum","ResidentIdNumber","checksum","get","regex","instance","verify","s","test","toUpperCase","parse","date","slice","y","parseInt","m","d","IdNumber","Date","UTC","constructor","division","birthDate","sequence","toString","base","toJSON","toObject","age","valid","male","female","sex","getFullYear","formatDate","padStart","join","format","year","month","getMonth","day","getDate","Error"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,aAAa,QAAQ,kBAAkB;AAEhD,OAAO,MAAMC;IACXC,WAAWF,cAAcG,GAAG,GAAG;IAE/B,oDAAoD;IACpD,QAAQ;IACR,kBAAkB;IAClB,6DAA6D;IAE7DC,QACE,0IAA0I;IAE5I,OAAeC,SAA2B;IAE1C,OAAOF,MAAM;QACX,OAAQ,IAAI,CAACE,QAAQ,KAAK,IAAIJ;IAChC;IAEAK,OAAOC,CAAS,EAAE;QAChB,IAAI,CAACA,GAAG,OAAO;QACf,OAAO,IAAI,CAACH,KAAK,CAACI,IAAI,CAACD,MAAM,IAAI,CAACL,QAAQ,CAACI,MAAM,CAACC,EAAEE,WAAW;IACjE;IAEAC,MAAMH,CAAS,EAAwB;QACrC,IAAI,CAAC,IAAI,CAACD,MAAM,CAACC,IAAI;YACnB;QACF;QAEA,IAAII,OAAOJ,EAAEK,KAAK,CAAC,GAAG;QACtB,IAAIC,IAAIC,SAASH,KAAKC,KAAK,CAAC,GAAG;QAC/B,IAAIG,IAAID,SAASH,KAAKC,KAAK,CAAC,GAAG;QAC/B,IAAII,IAAIF,SAASH,KAAKC,KAAK,CAAC;QAC5B,OAAO,IAAIK,SACTV,EAAEK,KAAK,CAAC,GAAG,IACX,0CAA0C;QAC1C,IAAIM,KAAKA,KAAKC,GAAG,CAACN,GAAGE,IAAI,GAAGC,KAC5BF,SAASP,EAAEK,KAAK,CAAC,IAAI,MACrBL,EAAEK,KAAK,CAAC,IAAI,IAAIH,WAAW;IAE/B;AACF;AAeA,IAAA,AAAMQ,WAAN,MAAMA;;;;;IACJG,YACE,AAAOC,QAAgB,EACvB,AAAOC,SAAe,EACtB,AAAOC,QAAgB,EACvB,AAAOrB,QAAgB,CACvB;aAJOmB,WAAAA;aACAC,YAAAA;aACAC,WAAAA;aACArB,WAAAA;IACN;IAEHsB,WAAW;QACT,OAAO,IAAI,CAACC,IAAI,GAAG,IAAI,CAACvB,QAAQ;IAClC;IAEAwB,SAAS;QACP,OAAO,IAAI,CAACF,QAAQ;IACtB;IAEAG,WAAwC;QACtC,MAAM,EAAEN,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,EAAErB,QAAQ,EAAE0B,GAAG,EAAEC,KAAK,EAAEC,IAAI,EAAEC,MAAM,EAAEC,GAAG,EAAE,GAAG,IAAI;QACvF,OAAO;YACLX;YACAC;YACAC;YACArB;YACA0B;YACAC;YACAC;YACAC;YACAC;QACF;IACF;IAEA,IAAIH,QAAQ;QACV,OAAO5B,iBAAiBE,GAAG,GAAGG,MAAM,CAAC,IAAI,CAACkB,QAAQ;IACpD;IAEA,IAAIM,OAAO;QACT,OAAO,IAAI,CAACP,QAAQ,GAAG,MAAM;IAC/B;IAEA,IAAIQ,SAAS;QACX,OAAO,IAAI,CAACR,QAAQ,GAAG,MAAM;IAC/B;IAEA,IAAIK,MAAM;QACR,OAAO,IAAIV,OAAOe,WAAW,KAAK,IAAI,CAACX,SAAS,CAACW,WAAW;IAC9D;IAEA,IAAID,MAAyB;QAC3B,OAAO,IAAI,CAACT,QAAQ,GAAG,MAAM,IAAI,SAAS;IAC5C;IAEA;;;GAGC,GACD,IAAYE,OAAO;QACjB,OAAO;YAAC,IAAI,CAACJ,QAAQ;YAAEa,WAAW,IAAI,CAACZ,SAAS,EAAE;YAAa,IAAI,CAACC,QAAQ,CAACC,QAAQ,GAAGW,QAAQ,CAAC,GAAG;SAAK,CAACC,IAAI,CAAC;IACjH;AACF;AAEA,SAASF,WAAWvB,IAAU,EAAE0B,SAAS,UAAU;IACjD,OAAQA;QACN,KAAK;YAAY;gBACf,MAAMC,OAAO3B,KAAKsB,WAAW;gBAC7B,MAAMM,QAAQ,AAAC5B,CAAAA,KAAK6B,QAAQ,KAAK,CAAA,EAAGhB,QAAQ,GAAGW,QAAQ,CAAC,GAAG;gBAC3D,MAAMM,MAAM9B,KAAK+B,OAAO,GAAGlB,QAAQ,GAAGW,QAAQ,CAAC,GAAG;gBAClD,OAAO,CAAC,EAAEG,KAAK,EAAEC,MAAM,EAAEE,IAAI,CAAC;YAChC;QACA;YACE,MAAM,IAAIE,MAAM,CAAC,cAAc,CAAC;IACpC;AACF"}
1
+ {"version":3,"sources":["../../../src/cn/id/ResidentIdNumber.ts"],"sourcesContent":["import { Mod11 } from './Mod11';\n\nclass ResidentIdNumberFormat {\n checksum = Mod11;\n\n // 9 https://zh.wikipedia.org/wiki/中华人民共和国外国人永久居留身份证\n // 9 标识码\n // 申领地代码 - 2 位行政区划\n // 国籍国代码 - 3 位数字 https://zh.wikipedia.org/wiki/ISO_3166-1数字代码\n\n regex =\n /^(?<division>[1-9]\\d{5})(?<year>18|19|20)\\d{2}(?<month>0[1-9]|1[0-2])(?<day>0[1-9]|[12]\\d|3[01])(?<sequence>\\d{3})(?<checksum>[0-9Xx])$/;\n\n validate(s: string) {\n if (!s) return false;\n return this.regex.test(s) && this.checksum.validate(s.toUpperCase());\n }\n\n generate(opts: { sex?: 'Male' | 'Female'; age?: number; birthDate?: Date; division?: string }) {}\n\n parse(s: string): IdNumber | undefined {\n if (!this.validate(s)) {\n return;\n }\n\n let date = s.slice(6, 14);\n let y = parseInt(date.slice(0, 4));\n let m = parseInt(date.slice(4, 6));\n let d = parseInt(date.slice(6));\n return new IdNumber(\n s.slice(0, 6),\n // new Date(`${y}-${m}-${d}`), // YYYYMMDD\n new Date(Date.UTC(y, m - 1, d)), // 避免时区问题\n parseInt(s.slice(14, 17)),\n s.slice(17, 18).toUpperCase(),\n );\n }\n}\n\ninterface ParseResidentIdNumberResult {\n division: string;\n birthDate: Date;\n sequence: number;\n checksum: string;\n\n valid: boolean;\n male: boolean;\n female: boolean;\n sex: 'Male' | 'Female';\n age: number;\n}\n\nclass IdNumber {\n constructor(\n public division: string,\n public birthDate: Date,\n public sequence: number,\n public checksum: string,\n ) {}\n\n toString() {\n return this.base + this.checksum;\n }\n\n toJSON() {\n return this.toString();\n }\n\n toObject(): ParseResidentIdNumberResult {\n const { division, birthDate, sequence, checksum, age, valid, male, female, sex } = this;\n return {\n division,\n birthDate,\n sequence,\n checksum,\n age,\n valid,\n male,\n female,\n sex,\n };\n }\n\n get valid() {\n return ResidentIdNumber.validate(this.toString());\n }\n\n get male() {\n return this.sequence % 2 === 1;\n }\n\n get female() {\n return this.sequence % 2 === 0;\n }\n\n get age() {\n return new Date().getFullYear() - this.birthDate.getFullYear();\n }\n\n get sex(): 'Male' | 'Female' {\n return this.sequence % 2 === 1 ? 'Male' : 'Female';\n }\n\n /**\n * base for checksum\n * @private\n */\n private get base() {\n return [this.division, formatDate(this.birthDate, 'YYYYMMDD'), this.sequence.toString().padStart(3, '0')].join('');\n }\n}\n\nfunction formatDate(date: Date, format = 'YYYYMMDD') {\n switch (format) {\n case 'YYYYMMDD': {\n const year = date.getFullYear();\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n return `${year}${month}${day}`;\n }\n default:\n throw new Error(`Invalid format`);\n }\n}\n\nexport const ResidentIdNumber = new ResidentIdNumberFormat();\n"],"names":["Mod11","ResidentIdNumberFormat","checksum","regex","validate","s","test","toUpperCase","generate","opts","parse","date","slice","y","parseInt","m","d","IdNumber","Date","UTC","constructor","division","birthDate","sequence","toString","base","toJSON","toObject","age","valid","male","female","sex","ResidentIdNumber","getFullYear","formatDate","padStart","join","format","year","month","getMonth","day","getDate","Error"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -27,17 +27,13 @@
27
27
  acc[cur] = i;
28
28
  return acc;
29
29
  }, {});
30
- static instance;
31
- static get() {
32
- return this.instance || (this.instance = new Mod31Checksum());
33
- }
34
30
  toChar(n) {
35
31
  return this.chars[n];
36
32
  }
37
33
  toNumber(c) {
38
34
  return this.numbers[c];
39
35
  }
40
- verify(s) {
36
+ validate(s) {
41
37
  return s.at(-1) === this.generate(s.slice(0, s.length - 1));
42
38
  }
43
39
  generate(s) {
@@ -48,5 +44,6 @@
48
44
  return this.toChar(31 - sum % 31);
49
45
  }
50
46
  }
47
+ export const Mod31 = new Mod31Checksum();
51
48
 
52
- //# sourceMappingURL=Mod31Checksum.js.map
49
+ //# sourceMappingURL=Mod31.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/cn/uscc/Mod31.ts"],"sourcesContent":["/**\n * GB/T 17710(采ISO 7064)的模31校验码\n *\n * Mod31-3\n */\nexport class Mod31Checksum {\n weights = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28];\n chars = '0123456789ABCDEFGHJKLMNPQRTUWXY';\n numbers: Record<string, number> = this.chars.split('').reduce(\n (acc, cur, i) => {\n acc[cur] = i;\n return acc;\n },\n {} as Record<string, number>,\n );\n\n toChar(n: number) {\n return this.chars[n];\n }\n\n toNumber(c: string) {\n return this.numbers[c];\n }\n\n validate(s: string) {\n return s.at(-1) === this.generate(s.slice(0, s.length - 1));\n }\n\n generate(s: string) {\n let sum = 0;\n for (let i = 0; i < s.length; i++) {\n sum += this.numbers[s[i]] * this.weights[i];\n }\n return this.toChar(31 - (sum % 31));\n }\n}\n\nexport const Mod31 = new Mod31Checksum();\n"],"names":["Mod31Checksum","weights","chars","numbers","split","reduce","acc","cur","i","toChar","n","toNumber","c","validate","s","at","generate","slice","length","sum","Mod31"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;;;;CAIC,GACD,OAAO,MAAMA;IACXC,UAAU;QAAC;QAAG;QAAG;QAAG;QAAI;QAAI;QAAI;QAAI;QAAI;QAAI;QAAI;QAAI;QAAI;QAAG;QAAI;QAAI;QAAI;KAAG,CAAC;IAC3EC,QAAQ,kCAAkC;IAC1CC,UAAkC,IAAI,CAACD,KAAK,CAACE,KAAK,CAAC,IAAIC,MAAM,CAC3D,CAACC,KAAKC,KAAKC;QACTF,GAAG,CAACC,IAAI,GAAGC;QACX,OAAOF;IACT,GACA,CAAC,GACD;IAEFG,OAAOC,CAAS,EAAE;QAChB,OAAO,IAAI,CAACR,KAAK,CAACQ,EAAE;IACtB;IAEAC,SAASC,CAAS,EAAE;QAClB,OAAO,IAAI,CAACT,OAAO,CAACS,EAAE;IACxB;IAEAC,SAASC,CAAS,EAAE;QAClB,OAAOA,EAAEC,EAAE,CAAC,CAAC,OAAO,IAAI,CAACC,QAAQ,CAACF,EAAEG,KAAK,CAAC,GAAGH,EAAEI,MAAM,GAAG;IAC1D;IAEAF,SAASF,CAAS,EAAE;QAClB,IAAIK,MAAM;QACV,IAAK,IAAIX,IAAI,GAAGA,IAAIM,EAAEI,MAAM,EAAEV,IAAK;YACjCW,OAAO,IAAI,CAAChB,OAAO,CAACW,CAAC,CAACN,EAAE,CAAC,GAAG,IAAI,CAACP,OAAO,CAACO,EAAE;QAC7C;QACA,OAAO,IAAI,CAACC,MAAM,CAAC,KAAMU,MAAM;IACjC;AACF;AAEA,OAAO,MAAMC,QAAQ,IAAIpB,gBAAgB"}
@@ -1,4 +1,4 @@
1
- import { Mod31Checksum } from './Mod31Checksum.js';
1
+ import { Mod31 } from './Mod31.js';
2
2
  /**
3
3
  * - GB 32100-2015 法人和其他组织统一社会信用代码编码规则
4
4
  * - USCI -> UnifiedSocialCreditIdentifier
@@ -6,7 +6,7 @@ import { Mod31Checksum } from './Mod31Checksum.js';
6
6
  * - Business License
7
7
  *
8
8
  * @see https://en.wikipedia.org/wiki/Unified_Social_Credit_Identifier
9
- */ export class USCC {
9
+ */ export class UnifiedSocialCreditCodeFormat {
10
10
  registryCodeLabels = {
11
11
  1: {
12
12
  label: '机构编制',
@@ -69,11 +69,7 @@ import { Mod31Checksum } from './Mod31Checksum.js';
69
69
  }
70
70
  };
71
71
  /* 16 位 */ regex = /^([159][1239]|Y1)[0-9]{6}[0-9A-HJ-NP-RTUWXY]{10}$/;
72
- checksum = Mod31Checksum.get();
73
- static instance;
74
- static get() {
75
- return this.instance ||= new USCC();
76
- }
72
+ checksum = Mod31;
77
73
  parse(s) {
78
74
  let registryCode = s[0];
79
75
  let l1 = this.registryCodeLabels[registryCode];
@@ -89,9 +85,10 @@ import { Mod31Checksum } from './Mod31Checksum.js';
89
85
  checksum: s.slice(17, 18)
90
86
  };
91
87
  }
92
- verify(s) {
93
- return this.regex.test(s) && this.checksum.verify(s);
88
+ validate(s) {
89
+ return this.regex.test(s) && this.checksum.validate(s);
94
90
  }
95
91
  }
92
+ export const USCC = new UnifiedSocialCreditCodeFormat();
96
93
 
97
94
  //# sourceMappingURL=USCC.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cn/uscc/USCC.ts"],"sourcesContent":["import { Mod31Checksum } from './Mod31Checksum';\n\n/**\n * - GB 32100-2015 法人和其他组织统一社会信用代码编码规则\n * - USCI -> UnifiedSocialCreditIdentifier\n * - USCC -> Unified Social Credit Code - 官方叫法\n * - Business License\n *\n * @see https://en.wikipedia.org/wiki/Unified_Social_Credit_Identifier\n */\nexport class USCC {\n registryCodeLabels: Record<string, Code> = {\n 1: {\n label: '机构编制',\n children: {\n 1: { label: '机关' },\n 2: { label: '事业单位' },\n 3: { label: '中央编办直接管理机构编制的群众团体' },\n 9: { label: '其他' },\n },\n },\n 5: {\n label: '民政',\n children: {\n 1: { label: '社会团体' },\n 2: { label: '民办非企业单位' },\n 3: { label: '基金会' },\n 9: { label: '其他' },\n },\n },\n 9: {\n label: '工商',\n children: {\n 1: { label: '企业' },\n 2: { label: '个体工商户' },\n 3: { label: '农民专业合作社' },\n 9: { label: '其他' },\n },\n },\n Y: {\n label: '其他',\n children: {\n 1: { label: '其他' },\n },\n },\n };\n\n /* 16 位 */\n regex = /^([159][1239]|Y1)[0-9]{6}[0-9A-HJ-NP-RTUWXY]{10}$/; // 无 I O Z S V\n checksum = Mod31Checksum.get();\n\n static instance: USCC;\n\n static get() {\n return (this.instance ||= new USCC());\n }\n\n parse(s: string): ParsedUSCC {\n let registryCode = s[0];\n let l1 = this.registryCodeLabels[registryCode];\n let organizationTypeCode = s[1];\n return {\n registryAuthorityCode: registryCode,\n registryAuthorityCodeLabel: l1?.label,\n organizationTypeCode,\n organizationTypeLabel: l1?.children?.[organizationTypeCode]?.label,\n registryDivisionCode: s.slice(3, 6),\n // GB 11714-1997 全国组织机构代码编制规则\n subject: s.slice(6, 15),\n checksum: s.slice(17, 18),\n };\n }\n\n verify(s: string) {\n return this.regex.test(s) && this.checksum.verify(s);\n }\n}\n\ninterface Code {\n label: string;\n children?: Record<string, Code>;\n}\n\ninterface ParsedUSCC {\n // 登记管理部门码\n registryAuthorityCode: string;\n registryAuthorityCodeLabel?: string;\n // 机构类别代码\n organizationTypeCode: string;\n organizationTypeLabel?: string;\n // 登记管理机关行政区划代码\n registryDivisionCode: string;\n registryDivisionLabel?: string;\n // 主体标识码\n subject: string;\n // 校验码\n checksum: string;\n}\n"],"names":["Mod31Checksum","USCC","registryCodeLabels","label","children","Y","regex","checksum","get","instance","parse","s","registryCode","l1","organizationTypeCode","registryAuthorityCode","registryAuthorityCodeLabel","organizationTypeLabel","registryDivisionCode","slice","subject","verify","test"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,aAAa,QAAQ,kBAAkB;AAEhD;;;;;;;CAOC,GACD,OAAO,MAAMC;IACXC,qBAA2C;QACzC,GAAG;YACDC,OAAO;YACPC,UAAU;gBACR,GAAG;oBAAED,OAAO;gBAAK;gBACjB,GAAG;oBAAEA,OAAO;gBAAO;gBACnB,GAAG;oBAAEA,OAAO;gBAAoB;gBAChC,GAAG;oBAAEA,OAAO;gBAAK;YACnB;QACF;QACA,GAAG;YACDA,OAAO;YACPC,UAAU;gBACR,GAAG;oBAAED,OAAO;gBAAO;gBACnB,GAAG;oBAAEA,OAAO;gBAAU;gBACtB,GAAG;oBAAEA,OAAO;gBAAM;gBAClB,GAAG;oBAAEA,OAAO;gBAAK;YACnB;QACF;QACA,GAAG;YACDA,OAAO;YACPC,UAAU;gBACR,GAAG;oBAAED,OAAO;gBAAK;gBACjB,GAAG;oBAAEA,OAAO;gBAAQ;gBACpB,GAAG;oBAAEA,OAAO;gBAAU;gBACtB,GAAG;oBAAEA,OAAO;gBAAK;YACnB;QACF;QACAE,GAAG;YACDF,OAAO;YACPC,UAAU;gBACR,GAAG;oBAAED,OAAO;gBAAK;YACnB;QACF;IACF,EAAE;IAEF,QAAQ,GACRG,QAAQ,oDAAoD;IAC5DC,WAAWP,cAAcQ,GAAG,GAAG;IAE/B,OAAOC,SAAe;IAEtB,OAAOD,MAAM;QACX,OAAQ,IAAI,CAACC,QAAQ,KAAK,IAAIR;IAChC;IAEAS,MAAMC,CAAS,EAAc;QAC3B,IAAIC,eAAeD,CAAC,CAAC,EAAE;QACvB,IAAIE,KAAK,IAAI,CAACX,kBAAkB,CAACU,aAAa;QAC9C,IAAIE,uBAAuBH,CAAC,CAAC,EAAE;QAC/B,OAAO;YACLI,uBAAuBH;YACvBI,4BAA4BH,IAAIV;YAChCW;YACAG,uBAAuBJ,IAAIT,UAAU,CAACU,qBAAqB,EAAEX;YAC7De,sBAAsBP,EAAEQ,KAAK,CAAC,GAAG;YACjC,6BAA6B;YAC7BC,SAAST,EAAEQ,KAAK,CAAC,GAAG;YACpBZ,UAAUI,EAAEQ,KAAK,CAAC,IAAI;QACxB;IACF;IAEAE,OAAOV,CAAS,EAAE;QAChB,OAAO,IAAI,CAACL,KAAK,CAACgB,IAAI,CAACX,MAAM,IAAI,CAACJ,QAAQ,CAACc,MAAM,CAACV;IACpD;AACF"}
1
+ {"version":3,"sources":["../../../src/cn/uscc/USCC.ts"],"sourcesContent":["import { Mod31 } from './Mod31';\n\n/**\n * - GB 32100-2015 法人和其他组织统一社会信用代码编码规则\n * - USCI -> UnifiedSocialCreditIdentifier\n * - USCC -> Unified Social Credit Code - 官方叫法\n * - Business License\n *\n * @see https://en.wikipedia.org/wiki/Unified_Social_Credit_Identifier\n */\nexport class UnifiedSocialCreditCodeFormat {\n registryCodeLabels: Record<string, Code> = {\n 1: {\n label: '机构编制',\n children: {\n 1: { label: '机关' },\n 2: { label: '事业单位' },\n 3: { label: '中央编办直接管理机构编制的群众团体' },\n 9: { label: '其他' },\n },\n },\n 5: {\n label: '民政',\n children: {\n 1: { label: '社会团体' },\n 2: { label: '民办非企业单位' },\n 3: { label: '基金会' },\n 9: { label: '其他' },\n },\n },\n 9: {\n label: '工商',\n children: {\n 1: { label: '企业' },\n 2: { label: '个体工商户' },\n 3: { label: '农民专业合作社' },\n 9: { label: '其他' },\n },\n },\n Y: {\n label: '其他',\n children: {\n 1: { label: '其他' },\n },\n },\n };\n\n /* 16 位 */\n regex = /^([159][1239]|Y1)[0-9]{6}[0-9A-HJ-NP-RTUWXY]{10}$/; // 无 I O Z S V\n checksum = Mod31;\n\n parse(s: string): ParsedUSCC {\n let registryCode = s[0];\n let l1 = this.registryCodeLabels[registryCode];\n let organizationTypeCode = s[1];\n return {\n registryAuthorityCode: registryCode,\n registryAuthorityCodeLabel: l1?.label,\n organizationTypeCode,\n organizationTypeLabel: l1?.children?.[organizationTypeCode]?.label,\n registryDivisionCode: s.slice(3, 6),\n // GB 11714-1997 全国组织机构代码编制规则\n subject: s.slice(6, 15),\n checksum: s.slice(17, 18),\n };\n }\n\n validate(s: string) {\n return this.regex.test(s) && this.checksum.validate(s);\n }\n}\n\ninterface Code {\n label: string;\n children?: Record<string, Code>;\n}\n\ninterface ParsedUSCC {\n // 登记管理部门码\n registryAuthorityCode: string;\n registryAuthorityCodeLabel?: string;\n // 机构类别代码\n organizationTypeCode: string;\n organizationTypeLabel?: string;\n // 登记管理机关行政区划代码\n registryDivisionCode: string;\n registryDivisionLabel?: string;\n // 主体标识码\n subject: string;\n // 校验码\n checksum: string;\n}\n\nexport const USCC = new UnifiedSocialCreditCodeFormat();\n"],"names":["Mod31","UnifiedSocialCreditCodeFormat","registryCodeLabels","label","children","Y","regex","checksum","parse","s","registryCode","l1","organizationTypeCode","registryAuthorityCode","registryAuthorityCodeLabel","organizationTypeLabel","registryDivisionCode","slice","subject","validate","test","USCC"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,KAAK,QAAQ,UAAU;AAEhC;;;;;;;CAOC,GACD,OAAO,MAAMC;IACXC,qBAA2C;QACzC,GAAG;YACDC,OAAO;YACPC,UAAU;gBACR,GAAG;oBAAED,OAAO;gBAAK;gBACjB,GAAG;oBAAEA,OAAO;gBAAO;gBACnB,GAAG;oBAAEA,OAAO;gBAAoB;gBAChC,GAAG;oBAAEA,OAAO;gBAAK;YACnB;QACF;QACA,GAAG;YACDA,OAAO;YACPC,UAAU;gBACR,GAAG;oBAAED,OAAO;gBAAO;gBACnB,GAAG;oBAAEA,OAAO;gBAAU;gBACtB,GAAG;oBAAEA,OAAO;gBAAM;gBAClB,GAAG;oBAAEA,OAAO;gBAAK;YACnB;QACF;QACA,GAAG;YACDA,OAAO;YACPC,UAAU;gBACR,GAAG;oBAAED,OAAO;gBAAK;gBACjB,GAAG;oBAAEA,OAAO;gBAAQ;gBACpB,GAAG;oBAAEA,OAAO;gBAAU;gBACtB,GAAG;oBAAEA,OAAO;gBAAK;YACnB;QACF;QACAE,GAAG;YACDF,OAAO;YACPC,UAAU;gBACR,GAAG;oBAAED,OAAO;gBAAK;YACnB;QACF;IACF,EAAE;IAEF,QAAQ,GACRG,QAAQ,oDAAoD;IAC5DC,WAAWP,MAAM;IAEjBQ,MAAMC,CAAS,EAAc;QAC3B,IAAIC,eAAeD,CAAC,CAAC,EAAE;QACvB,IAAIE,KAAK,IAAI,CAACT,kBAAkB,CAACQ,aAAa;QAC9C,IAAIE,uBAAuBH,CAAC,CAAC,EAAE;QAC/B,OAAO;YACLI,uBAAuBH;YACvBI,4BAA4BH,IAAIR;YAChCS;YACAG,uBAAuBJ,IAAIP,UAAU,CAACQ,qBAAqB,EAAET;YAC7Da,sBAAsBP,EAAEQ,KAAK,CAAC,GAAG;YACjC,6BAA6B;YAC7BC,SAAST,EAAEQ,KAAK,CAAC,GAAG;YACpBV,UAAUE,EAAEQ,KAAK,CAAC,IAAI;QACxB;IACF;IAEAE,SAASV,CAAS,EAAE;QAClB,OAAO,IAAI,CAACH,KAAK,CAACc,IAAI,CAACX,MAAM,IAAI,CAACF,QAAQ,CAACY,QAAQ,CAACV;IACtD;AACF;AAuBA,OAAO,MAAMY,OAAO,IAAIpB,gCAAgC"}
@@ -2,7 +2,7 @@ import { USCC } from './USCC.js';
2
2
  /**
3
3
  * USCC - 统一社会信用代码
4
4
  */ export function isUSCC(s) {
5
- return USCC.get().verify(s);
5
+ return USCC.validate(s);
6
6
  }
7
7
 
8
8
  //# sourceMappingURL=isUSCC.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cn/uscc/isUSCC.ts"],"sourcesContent":["import { USCC } from './USCC';\n\n/**\n * USCC - 统一社会信用代码\n */\nexport function isUSCC(s: string) {\n return USCC.get().verify(s);\n}\n"],"names":["USCC","isUSCC","s","get","verify"],"rangeMappings":";;;;;","mappings":"AAAA,SAASA,IAAI,QAAQ,SAAS;AAE9B;;CAEC,GACD,OAAO,SAASC,OAAOC,CAAS;IAC9B,OAAOF,KAAKG,GAAG,GAAGC,MAAM,CAACF;AAC3B"}
1
+ {"version":3,"sources":["../../../src/cn/uscc/isUSCC.ts"],"sourcesContent":["import { USCC } from './USCC';\n\n/**\n * USCC - 统一社会信用代码\n */\nexport function isUSCC(s: string) {\n return USCC.validate(s);\n}\n"],"names":["USCC","isUSCC","s","validate"],"rangeMappings":";;;;;","mappings":"AAAA,SAASA,IAAI,QAAQ,SAAS;AAE9B;;CAEC,GACD,OAAO,SAASC,OAAOC,CAAS;IAC9B,OAAOF,KAAKG,QAAQ,CAACD;AACvB"}
@@ -1,17 +1,20 @@
1
+ import { getGlobalThis } from '../runtime/getGlobalThis.js';
1
2
  let nodeCrypto;
2
3
  // globalThis.process?.release?.name
4
+ // avoid import node
3
5
  // avoid process.browser
4
- if (typeof window === 'undefined') {
5
- try {
6
- // avoid `node:` UnhandledSchemeError https://github.com/vercel/next.js/issues/28774
7
- if (typeof require === 'undefined') {
8
- void import('crypto').then((v)=>nodeCrypto = v.default);
9
- } else {
10
- nodeCrypto = require('crypto');
11
- }
12
- } catch (e) {}
13
- }
6
+ // if (typeof window === 'undefined') {
7
+ // try {
8
+ // // avoid `node:` UnhandledSchemeError https://github.com/vercel/next.js/issues/28774
9
+ // if (typeof require === 'undefined') {
10
+ // void import('crypto').then((v) => (nodeCrypto = v.default));
11
+ // } else {
12
+ // nodeCrypto = require('crypto');
13
+ // }
14
+ // } catch (e) {}
15
+ // }
14
16
  export function getNodeCrypto() {
17
+ nodeCrypto ||= getGlobalThis().crypto;
15
18
  return nodeCrypto;
16
19
  }
17
20
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/crypto/getNodeCrypto.ts"],"sourcesContent":["let nodeCrypto: Awaited<typeof import('node:crypto')>;\n// globalThis.process?.release?.name\n\n// avoid process.browser\nif (typeof window === 'undefined') {\n try {\n // avoid `node:` UnhandledSchemeError https://github.com/vercel/next.js/issues/28774\n if (typeof require === 'undefined') {\n void import('crypto').then((v) => (nodeCrypto = v.default));\n } else {\n nodeCrypto = require('crypto');\n }\n } catch (e) {}\n}\nexport function getNodeCrypto() {\n return nodeCrypto;\n}\n"],"names":["nodeCrypto","window","require","then","v","default","e","getNodeCrypto"],"rangeMappings":";;;;;;;;;;;;;;;","mappings":"AAAA,IAAIA;AACJ,oCAAoC;AAEpC,wBAAwB;AACxB,IAAI,OAAOC,WAAW,aAAa;IACjC,IAAI;QACF,oFAAoF;QACpF,IAAI,OAAOC,YAAY,aAAa;YAClC,KAAK,MAAM,CAAC,UAAUC,IAAI,CAAC,CAACC,IAAOJ,aAAaI,EAAEC,OAAO;QAC3D,OAAO;YACLL,aAAaE,QAAQ;QACvB;IACF,EAAE,OAAOI,GAAG,CAAC;AACf;AACA,OAAO,SAASC;IACd,OAAOP;AACT"}
1
+ {"version":3,"sources":["../../src/crypto/getNodeCrypto.ts"],"sourcesContent":["import { getGlobalThis } from '../runtime/getGlobalThis';\n\nlet nodeCrypto;\n// globalThis.process?.release?.name\n\n// avoid import node\n// avoid process.browser\n// if (typeof window === 'undefined') {\n// try {\n// // avoid `node:` UnhandledSchemeError https://github.com/vercel/next.js/issues/28774\n// if (typeof require === 'undefined') {\n// void import('crypto').then((v) => (nodeCrypto = v.default));\n// } else {\n// nodeCrypto = require('crypto');\n// }\n// } catch (e) {}\n// }\nexport function getNodeCrypto() {\n nodeCrypto ||= getGlobalThis().crypto;\n return nodeCrypto;\n}\n"],"names":["getGlobalThis","nodeCrypto","getNodeCrypto","crypto"],"rangeMappings":";;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,aAAa,QAAQ,2BAA2B;AAEzD,IAAIC;AACJ,oCAAoC;AAEpC,oBAAoB;AACpB,wBAAwB;AACxB,uCAAuC;AACvC,UAAU;AACV,2FAA2F;AAC3F,4CAA4C;AAC5C,qEAAqE;AACrE,eAAe;AACf,wCAAwC;AACxC,QAAQ;AACR,mBAAmB;AACnB,IAAI;AACJ,OAAO,SAASC;IACdD,eAAeD,gBAAgBG,MAAM;IACrC,OAAOF;AACT"}
@@ -2,7 +2,11 @@
2
2
  import { getGlobalThis } from '../runtime/getGlobalThis.js';
3
3
  import { getNodeCrypto } from './getNodeCrypto.js';
4
4
  const globalThis = getGlobalThis();
5
- export let getRandomValues = globalThis.crypto?.getRandomValues?.bind(globalThis.crypto) || globalThis.msCrypto?.getRandomValues?.bind(globalThis.msCrypto) || _getRandomValues;
5
+ // chrome 11+, safari 5+, nodejs 17.4+
6
+ // https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues
7
+ export let getRandomValues = globalThis.crypto?.getRandomValues?.bind(globalThis.crypto) || globalThis.msCrypto?.getRandomValues?.bind(globalThis.msCrypto) || (()=>{
8
+ throw new Error('[getRandomValues]: No secure random number generator available.');
9
+ });
6
10
  function _getRandomValues(buf) {
7
11
  const nodeCrypto = getNodeCrypto();
8
12
  // avoid type error
@@ -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 '../runtime/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"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,sEAAsE;AAEtE,SAASA,aAAa,QAAQ,2BAA2B;AACzD,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"}
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 '../runtime/getGlobalThis';\nimport { getNodeCrypto } from './getNodeCrypto';\n\nconst globalThis = getGlobalThis();\n\n// chrome 11+, safari 5+, nodejs 17.4+\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\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 (() => {\n throw new Error('[getRandomValues]: No secure random number generator available.');\n });\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","Error","_getRandomValues","buf","nodeCrypto","wc","webcrypto","randomBytes","Uint8Array","TypeError","length","e","code","message","name","bytes","set"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,sEAAsE;AAEtE,SAASA,aAAa,QAAQ,2BAA2B;AACzD,SAASC,aAAa,QAAQ,kBAAkB;AAEhD,MAAMC,aAAaF;AAEnB,sCAAsC;AACtC,0EAA0E;AAC1E,OAAO,IAAIG,kBACTD,WAAWE,MAAM,EAAED,iBAAiBE,KAAKH,WAAWE,MAAM,KAC1D,AAACF,WAAmBI,QAAQ,EAAEH,iBAAiBE,KAAK,AAACH,WAAmBI,QAAQ,KAC/E,CAAA;IACC,MAAM,IAAIC,MAAM;AAClB,CAAA,EAAG;AAEL,SAASC,iBAA6EC,GAAM;IAC1F,MAAMC,aAAaT;IACnB,mBAAmB;IACnB,IAAIU,KAAKD,YAAYE;IACrB,IAAID,IAAIR,iBAAiB;QACvBA,kBAAkBQ,GAAGR,eAAe,EAAEE,KAAKK,YAAYE;QACvD,OAAOD,GAAGR,eAAe,CAACM;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,IAAIV;YACnBU,EAAEC,IAAI,GAAG;YACTD,EAAEE,OAAO,GAAG,CAAC,oFAAoF,EAAEV,IAAIO,MAAM,CAAC,wEAAwE,CAAC;YACvLC,EAAEG,IAAI,GAAG;YACT,MAAMH;QACR;QACA,MAAMI,QAAQX,WAAWG,WAAW,CAACJ,IAAIO,MAAM;QAC/CP,IAAIa,GAAG,CAACD;QACR,OAAOZ;IACT;IACA,MAAM,IAAIF,MAAM;AAClB"}
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/emitter/types.ts"],"sourcesContent":["export type EventType = string | symbol;\n\nexport type Handler<E extends keyof T, T = Record<string, unknown>> = (evt: { type: E; payload: T[E] }) => void;\nexport type WildcardHandler<T = Record<string, unknown>> = <E extends keyof T>(evt: { type: E; payload: T[E] }) => void;\n\nexport interface Emitter<Events extends Record<EventType, unknown>> {\n on<Key extends keyof Events>(type: Key, handler: Handler<Key, Events>): void;\n\n on(type: '*', handler: WildcardHandler<Events>): void;\n\n off<Key extends keyof Events>(type: Key, handler?: Handler<Key, Events>): void;\n\n off(type: '*', handler: WildcardHandler<Events>): void;\n\n emit<Key extends keyof Events>(type: Key, event: Events[Key]): void;\n\n emit<Key extends keyof Events>(type: undefined extends Events[Key] ? Key : never): void;\n}\n"],"names":[],"rangeMappings":"","mappings":"AAKA,WAYC"}
@@ -0,0 +1,4 @@
1
+ // from hono
2
+ export { };
3
+
4
+ //# sourceMappingURL=http.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/fetch/http.types.ts"],"sourcesContent":["// from hono\n\nexport type InfoStatusCode = 100 | 101 | 102 | 103;\nexport type SuccessStatusCode = 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 226;\nexport type DeprecatedStatusCode = 305 | 306;\nexport type RedirectStatusCode = 300 | 301 | 302 | 303 | 304 | DeprecatedStatusCode | 307 | 308;\nexport type ClientErrorStatusCode =\n | 400\n | 401\n | 402\n | 403\n | 404\n | 405\n | 406\n | 407\n | 408\n | 409\n | 410\n | 411\n | 412\n | 413\n | 414\n | 415\n | 416\n | 417\n | 418\n | 421\n | 422\n | 423\n | 424\n | 425\n | 426\n | 428\n | 429\n | 431\n | 451;\nexport type ServerErrorStatusCode = 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511;\n\nexport type UnofficialStatusCode = -1;\nexport type StatusCode =\n | InfoStatusCode\n | SuccessStatusCode\n | RedirectStatusCode\n | ClientErrorStatusCode\n | ServerErrorStatusCode\n | UnofficialStatusCode;\n"],"names":[],"rangeMappings":";","mappings":"AAAA,YAAY;AAuCZ,WAMyB"}
package/lib/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { Promises } from './asyncs/Promises.js';
1
2
  // arrays
2
3
  export { firstOfMaybeArray, lastOfMaybeArray, arrayOfMaybeArray, objectOfMaybeArray } from './arrays/MaybeArray.js';
3
4
  export { arrayFromAsync } from './arrays/arrayFromAsync.js';
@@ -15,10 +16,10 @@ export { createAsyncIterator } from './asyncs/createAsyncIterator.js';
15
16
  export { firstOfAsyncIterator } from './asyncs/firstOfAsyncIterator.js';
16
17
  export { nextOfAsyncIterator } from './asyncs/nextOfAsyncIterator.js';
17
18
  export { isIterator } from './asyncs/isIterator.js';
18
- export { sleep } from './asyncs/sleep.js';
19
+ export { Promises } from './asyncs/Promises.js';
20
+ export const sleep = Promises.sleep;
21
+ export const isPromise = Promises.isPromise;
19
22
  export { timeout, TimeoutError } from './asyncs/timeout.js';
20
- export { isPromise } from './asyncs/isPromise.js';
21
- // export * from './async/promiseOfCallback';
22
23
  // langs
23
24
  export { shallowEqual } from './langs/shallowEqual.js';
24
25
  export { deepEqual } from './langs/deepEqual.js';
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 { computeIfAbsent } from './objects/computeIfAbsent';\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 { mixin } from './langs/mixin';\nexport type { MixinFunction, MixinInstance, MixinReturnValue } from './langs/mixin';\n\nexport { AsyncCloser } from './runtime/AsyncCloser';\nexport { Closer } from './runtime/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 { ByteBuffer } from './io/ByteBuffer';\nexport { fromHexDump, toHexDump } from './io/dump';\nexport { Buffer } from './io/Buffer';\nexport { parseDataUri, type ParsedDataUri } from './io/parseDataUri';\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 './runtime/getGlobalThis';\nexport { structuredClone } from './runtime/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 './fetch/HttpStatus';\n\nexport type * from './types';\n"],"names":["firstOfMaybeArray","lastOfMaybeArray","arrayOfMaybeArray","objectOfMaybeArray","arrayFromAsync","get","set","parseObjectPath","computeIfAbsent","merge","createLazyPromise","setAsyncInterval","clearAsyncInterval","createAsyncIterator","firstOfAsyncIterator","nextOfAsyncIterator","isIterator","sleep","timeout","TimeoutError","isPromise","shallowEqual","deepEqual","deepFreeze","classOf","shallowClone","isClass","isDefined","isEmptyObject","isPlainObject","parseBoolean","maybeFunction","memoize","mixin","AsyncCloser","Closer","isUUID","parseTimestamp","parseModuleId","isModule","createLogger","createNoopLogger","createChildLogger","pascalCase","camelCase","renderTemplate","formatBytes","createTranslate","isBuffer","isTransferable","ArrayBuffers","ByteBuffer","fromHexDump","toHexDump","Buffer","parseDataUri","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"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAAS;AACT,SACEA,iBAAiB,EACjBC,gBAAgB,EAChBC,iBAAiB,EACjBC,kBAAkB,QAEb,sBAAsB;AAC7B,SAASC,cAAc,QAAQ,0BAA0B;AAEzD,SAAS;AACT,SAASC,GAAG,QAAQ,gBAAgB;AACpC,SAASC,GAAG,QAAQ,gBAAgB;AACpC,SAASC,eAAe,QAAQ,4BAA4B;AAC5D,SAASC,eAAe,QAAQ,4BAA4B;AAC5D,SAASC,KAAK,QAA2B,kBAAkB;AAE3D,QAAQ;AACR,SAASC,iBAAiB,QAA0B,6BAA6B;AACjF,SAASC,gBAAgB,EAAEC,kBAAkB,QAAQ,yBAAyB;AAE9E,mBAAmB;AACnB,SAASC,mBAAmB,QAAQ,+BAA+B;AACnE,SAASC,oBAAoB,QAAQ,gCAAgC;AACrE,SAASC,mBAAmB,QAAQ,+BAA+B;AACnE,SAASC,UAAU,QAAQ,sBAAsB;AAEjD,SAASC,KAAK,QAAQ,iBAAiB;AACvC,SAASC,OAAO,EAAEC,YAAY,QAAQ,mBAAmB;AACzD,SAASC,SAAS,QAAQ,qBAAqB;AAC/C,6CAA6C;AAE7C,QAAQ;AACR,SAASC,YAAY,QAAQ,uBAAuB;AACpD,SAASC,SAAS,QAAQ,oBAAoB;AAC9C,SAASC,UAAU,QAAQ,qBAAqB;AAChD,SAASC,OAAO,QAAQ,kBAAkB;AAC1C,SAASC,YAAY,QAAQ,uBAAuB;AACpD,SAASC,OAAO,QAAQ,kBAAkB;AAC1C,SAASC,SAAS,QAAQ,oBAAoB;AAC9C,SAASC,aAAa,QAAQ,wBAAwB;AACtD,SAASC,aAAa,QAAQ,wBAAwB;AACtD,SAASC,YAAY,QAAQ,uBAAuB;AACpD,SAASC,aAAa,QAA4B,wBAAwB;AAC1E,SAASC,OAAO,QAAQ,kBAAkB;AAC1C,SAASC,KAAK,QAAQ,gBAAgB;AAGtC,SAASC,WAAW,QAAQ,wBAAwB;AACpD,SAASC,MAAM,QAAQ,mBAAmB;AAE1C,SAASC,MAAM,QAAQ,uBAAuB;AAC9C,SAASC,cAAc,QAAQ,+BAA+B;AAE9D,UAAU;AACV,SAASC,aAAa,QAA6B,0BAA0B;AAC7E,SAASC,QAAQ,QAAqB,qBAAqB;AAI3D,SAASC,YAAY,QAAQ,yBAAyB;AACtD,SAASC,gBAAgB,QAAQ,6BAA6B;AAC9D,SAASC,iBAAiB,QAAQ,8BAA8B;AAEhE,UAAU;AACV,SAASC,UAAU,EAAEC,SAAS,QAAQ,sBAAsB;AAC5D,SAASC,cAAc,QAAQ,2BAA2B;AAC1D,SAASC,WAAW,QAAQ,wBAAwB;AAEpD,OAAO;AACP,SAASC,eAAe,QAAQ,yBAAyB;AAEzD,KAAK;AACL,SAASC,QAAQ,QAAQ,gBAAgB;AACzC,SAASC,cAAc,QAAQ,sBAAsB;AACrD,SAASC,YAAY,QAAQ,oBAAoB;AACjD,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,WAAW,EAAEC,SAAS,QAAQ,YAAY;AACnD,SAASC,MAAM,QAAQ,cAAc;AACrC,SAASC,YAAY,QAA4B,oBAAoB;AAGrE,UAAU;AACV,SAASC,IAAI,QAAQ,kBAAkB;AACvC,SAASC,QAAQ,QAAQ,sBAAsB;AAC/C,SAASC,WAAW,EAAEC,UAAU,QAAQ,qBAAqB;AAC7D,SAASC,uBAAuB,QAAQ,qCAAqC;AAE7E,YAAY;AACZ,SAASC,aAAa,QAAQ,0BAA0B;AACxD,SAASC,eAAe,QAAQ,4BAA4B;AAE5D,SAAS;AACT,SAASC,UAAU,QAAQ,sBAAsB;AACjD,SAASC,eAAe,QAAQ,2BAA2B;AAC3D,SAASC,IAAI,EAAEC,MAAM,EAAEC,MAAM,EAAEC,MAAM,EAAEC,IAAI,QAA4B,mBAAmB;AAC1F,SAASC,GAAG,QAAQ,eAAe;AACnC,SAASC,GAAG,QAAQ,gBAAgB;AACpC,SAASC,MAAM,EAAEC,UAAU,EAAEC,IAAI,EAAEC,SAAS,QAAQ,gBAAgB;AACpE,SAASC,GAAG,QAAQ,mBAAmB;AAEvC,OAAO;AACP,SAASC,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,KAAK,QAAQ,gBAAgB;AAEtC,UAAU;AACV,SAEEC,eAAe,EACfC,sBAAsB,EACtBC,YAAY,EACZC,WAAW,EACXC,oBAAoB,QAEf,UAAU;AAEjB,UAAU;AACV,SAASC,WAAWC,EAAE,QAAQ,YAAY;AAE1C,QAAQ;AACR,SAASC,MAAM,EAAEC,WAAW,QAAgD,kBAAkB;AAC9F,OAAO;AACP,SAASC,iBAAiB,EAAEC,qBAAqB,QAAQ,qBAAqB"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { Promises } from './asyncs/Promises';\n\n// 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 { computeIfAbsent } from './objects/computeIfAbsent';\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 { Promises } from './asyncs/Promises';\nexport const sleep = Promises.sleep;\nexport const isPromise = Promises.isPromise;\nexport { timeout, TimeoutError } from './asyncs/timeout';\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 { mixin } from './langs/mixin';\nexport type { MixinFunction, MixinInstance, MixinReturnValue } from './langs/mixin';\n\nexport { AsyncCloser } from './runtime/AsyncCloser';\nexport { Closer } from './runtime/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 { ByteBuffer } from './io/ByteBuffer';\nexport { fromHexDump, toHexDump } from './io/dump';\nexport { Buffer } from './io/Buffer';\nexport { parseDataUri, type ParsedDataUri } from './io/parseDataUri';\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 './runtime/getGlobalThis';\nexport { structuredClone } from './runtime/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 './fetch/HttpStatus';\n\nexport type * from './types';\n"],"names":["Promises","firstOfMaybeArray","lastOfMaybeArray","arrayOfMaybeArray","objectOfMaybeArray","arrayFromAsync","get","set","parseObjectPath","computeIfAbsent","merge","createLazyPromise","setAsyncInterval","clearAsyncInterval","createAsyncIterator","firstOfAsyncIterator","nextOfAsyncIterator","isIterator","sleep","isPromise","timeout","TimeoutError","shallowEqual","deepEqual","deepFreeze","classOf","shallowClone","isClass","isDefined","isEmptyObject","isPlainObject","parseBoolean","maybeFunction","memoize","mixin","AsyncCloser","Closer","isUUID","parseTimestamp","parseModuleId","isModule","createLogger","createNoopLogger","createChildLogger","pascalCase","camelCase","renderTemplate","formatBytes","createTranslate","isBuffer","isTransferable","ArrayBuffers","ByteBuffer","fromHexDump","toHexDump","Buffer","parseDataUri","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"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}