@wener/utils 1.1.50 → 1.1.51

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 (85) hide show
  1. package/lib/asyncs/createAsyncIterator.js.map +1 -1
  2. package/lib/cn/division/DivisionCode.js +21 -15
  3. package/lib/cn/division/DivisionCode.js.map +1 -1
  4. package/lib/crypto/getNodeCrypto.js +1 -1
  5. package/lib/crypto/getNodeCrypto.js.map +1 -1
  6. package/lib/crypto/ulid.js +1 -1
  7. package/lib/crypto/ulid.js.map +1 -1
  8. package/lib/fetch/createFetchWith.js +1 -1
  9. package/lib/fetch/createFetchWith.js.map +1 -1
  10. package/lib/fetch/createFetchWithLogging.js.map +1 -1
  11. package/lib/fetch/createFetchWithRetry.js +1 -1
  12. package/lib/fetch/createFetchWithRetry.js.map +1 -1
  13. package/lib/index.js +9 -7
  14. package/lib/index.js.map +1 -1
  15. package/lib/io/ArrayBuffers.js +1 -1
  16. package/lib/io/ArrayBuffers.js.map +1 -1
  17. package/lib/io/isTransferable.js +1 -1
  18. package/lib/io/isTransferable.js.map +1 -1
  19. package/lib/langs/AsyncCloser.js.map +1 -0
  20. package/lib/langs/Closer.js.map +1 -0
  21. package/lib/langs/getGlobalStates.js +11 -3
  22. package/lib/langs/getGlobalStates.js.map +1 -1
  23. package/lib/langs/ifPresent.js +5 -0
  24. package/lib/langs/ifPresent.js.map +1 -0
  25. package/lib/scripts/getGenerateContext.js +2 -1
  26. package/lib/scripts/getGenerateContext.js.map +1 -1
  27. package/lib/server/fetch/createFetchWithProxyByNodeFetch.js +1 -1
  28. package/lib/server/fetch/createFetchWithProxyByNodeFetch.js.map +1 -1
  29. package/lib/server/fetch/createFetchWithProxyByUndici.js +1 -1
  30. package/lib/server/fetch/createFetchWithProxyByUndici.js.map +1 -1
  31. package/lib/server/polyfill/polyfillCrypto.js +1 -1
  32. package/lib/server/polyfill/polyfillCrypto.js.map +1 -1
  33. package/lib/server/polyfill/polyfillJsDom.js +1 -1
  34. package/lib/server/polyfill/polyfillJsDom.js.map +1 -1
  35. package/lib/server/polyfill/polyfillWebSocket.js +1 -1
  36. package/lib/server/polyfill/polyfillWebSocket.js.map +1 -1
  37. package/lib/web/getGlobalThis.js.map +1 -0
  38. package/lib/{crypto → web}/getRandomValues.js +2 -2
  39. package/lib/web/getRandomValues.js.map +1 -0
  40. package/lib/{crypto → web}/randomUUID.js +1 -1
  41. package/lib/web/randomUUID.js.map +1 -0
  42. package/lib/web/requestIdleCallback.js +13 -0
  43. package/lib/web/requestIdleCallback.js.map +1 -0
  44. package/lib/web/structuredClone.js.map +1 -0
  45. package/package.json +3 -6
  46. package/src/asyncs/createAsyncIterator.ts +1 -1
  47. package/src/cn/division/DivisionCode.ts +25 -7
  48. package/src/cn/division/division.test.ts +18 -2
  49. package/src/crypto/getNodeCrypto.ts +1 -1
  50. package/src/crypto/hashing.test.ts +1 -1
  51. package/src/crypto/ulid.test.ts +1 -1
  52. package/src/crypto/ulid.ts +1 -1
  53. package/src/fetch/createFetchWith.ts +2 -2
  54. package/src/fetch/createFetchWithLogging.ts +1 -1
  55. package/src/fetch/createFetchWithRetry.ts +1 -1
  56. package/src/index.ts +9 -8
  57. package/src/io/ArrayBuffers.ts +1 -1
  58. package/src/io/isTransferable.ts +1 -1
  59. package/src/langs/getGlobalStates.ts +13 -3
  60. package/src/langs/ifPresent.ts +3 -0
  61. package/src/scripts/getGenerateContext.ts +3 -1
  62. package/src/server/fetch/createFetchWithProxyByNodeFetch.ts +2 -2
  63. package/src/server/fetch/createFetchWithProxyByUndici.ts +1 -1
  64. package/src/server/polyfill/polyfillCrypto.ts +1 -1
  65. package/src/server/polyfill/polyfillJsDom.ts +1 -1
  66. package/src/server/polyfill/polyfillWebSocket.ts +1 -1
  67. package/src/validations/isUUID.test.ts +1 -1
  68. package/src/{crypto → web}/getRandomValues.ts +2 -2
  69. package/src/{crypto → web}/randomUUID.ts +1 -1
  70. package/src/web/requestIdleCallback.ts +14 -0
  71. package/lib/crypto/getRandomValues.js.map +0 -1
  72. package/lib/crypto/randomUUID.js.map +0 -1
  73. package/lib/runtime/AsyncCloser.js.map +0 -1
  74. package/lib/runtime/Closer.js.map +0 -1
  75. package/lib/runtime/getGlobalThis.js.map +0 -1
  76. package/lib/runtime/structuredClone.js.map +0 -1
  77. /package/lib/{runtime → langs}/AsyncCloser.js +0 -0
  78. /package/lib/{runtime → langs}/Closer.js +0 -0
  79. /package/lib/{runtime → web}/getGlobalThis.js +0 -0
  80. /package/lib/{runtime → web}/structuredClone.js +0 -0
  81. /package/src/{runtime → langs}/AsyncCloser.ts +0 -0
  82. /package/src/{runtime → langs}/Closer.ts +0 -0
  83. /package/src/{runtime → web}/getGlobalThis.ts +0 -0
  84. /package/src/{runtime → web}/structuredClone.test.ts +0 -0
  85. /package/src/{runtime → web}/structuredClone.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/asyncs/createAsyncIterator.ts"],"sourcesContent":["import { createLazyPromise, type LazyPromise } from './createLazyPromise';\nimport { type MaybePromise } from './MaybePromise';\n\ntype Val<T> = [val: MaybePromise<T> | undefined, done: boolean, err?: any];\n\nexport function createAsyncIterator<T>(\n fn: (next: (val: [MaybePromise<T> | undefined, boolean] | undefined, err?: any) => void) => void,\n): AsyncGenerator<T, void, unknown> {\n const values: Array<Promise<Val<T>>> = [];\n let recv: (val: [MaybePromise<T> | undefined, boolean] | undefined, err?: any) => void;\n {\n let next: LazyPromise<Val<T>>;\n values.push((next = createLazyPromise()));\n recv = (val, err) => {\n if (err !== undefined) {\n next.resolve([undefined, true, err]);\n } else if (val !== undefined) {\n next.resolve(val);\n } else {\n return;\n }\n values.push((next = createLazyPromise()));\n };\n }\n\n fn(recv);\n\n return (async function* () {\n let value: Val<T>[0];\n let err: any;\n for (let i = 0, done = false; !done; i++) {\n let result = await values[i];\n delete values[i];\n [value, done, err] = result;\n if (err) {\n throw err;\n }\n if (value !== undefined) {\n yield value;\n }\n }\n })();\n}\n"],"names":["createLazyPromise","createAsyncIterator","fn","values","recv","next","push","val","err","undefined","resolve","value","i","done","result"],"mappings":"AAAA,SAASA,iBAAiB,QAA0B,sBAAsB;AAK1E,OAAO,SAASC,oBACdC,EAAgG;IAEhG,MAAMC,SAAiC,EAAE;IACzC,IAAIC;IACJ;QACE,IAAIC;QACJF,OAAOG,IAAI,CAAED,OAAOL;QACpBI,OAAO,CAACG,KAAKC;YACX,IAAIA,QAAQC,WAAW;gBACrBJ,KAAKK,OAAO,CAAC;oBAACD;oBAAW;oBAAMD;iBAAI;YACrC,OAAO,IAAID,QAAQE,WAAW;gBAC5BJ,KAAKK,OAAO,CAACH;YACf,OAAO;gBACL;YACF;YACAJ,OAAOG,IAAI,CAAED,OAAOL;QACtB;IACF;IAEAE,GAAGE;IAEH,OAAO,AAAC;QACN,IAAIO;QACJ,IAAIH;QACJ,IAAK,IAAII,IAAI,GAAGC,OAAO,OAAO,CAACA,MAAMD,IAAK;YACxC,IAAIE,SAAS,MAAMX,MAAM,CAACS,EAAE;YAC5B,OAAOT,MAAM,CAACS,EAAE;YAChB,CAACD,OAAOE,MAAML,IAAI,GAAGM;YACrB,IAAIN,KAAK;gBACP,MAAMA;YACR;YACA,IAAIG,UAAUF,WAAW;gBACvB,MAAME;YACR;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/asyncs/createAsyncIterator.ts"],"sourcesContent":["import { createLazyPromise, type LazyPromise } from './createLazyPromise';\nimport type { MaybePromise } from './MaybePromise';\n\ntype Val<T> = [val: MaybePromise<T> | undefined, done: boolean, err?: any];\n\nexport function createAsyncIterator<T>(\n fn: (next: (val: [MaybePromise<T> | undefined, boolean] | undefined, err?: any) => void) => void,\n): AsyncGenerator<T, void, unknown> {\n const values: Array<Promise<Val<T>>> = [];\n let recv: (val: [MaybePromise<T> | undefined, boolean] | undefined, err?: any) => void;\n {\n let next: LazyPromise<Val<T>>;\n values.push((next = createLazyPromise()));\n recv = (val, err) => {\n if (err !== undefined) {\n next.resolve([undefined, true, err]);\n } else if (val !== undefined) {\n next.resolve(val);\n } else {\n return;\n }\n values.push((next = createLazyPromise()));\n };\n }\n\n fn(recv);\n\n return (async function* () {\n let value: Val<T>[0];\n let err: any;\n for (let i = 0, done = false; !done; i++) {\n let result = await values[i];\n delete values[i];\n [value, done, err] = result;\n if (err) {\n throw err;\n }\n if (value !== undefined) {\n yield value;\n }\n }\n })();\n}\n"],"names":["createLazyPromise","createAsyncIterator","fn","values","recv","next","push","val","err","undefined","resolve","value","i","done","result"],"mappings":"AAAA,SAASA,iBAAiB,QAA0B,sBAAsB;AAK1E,OAAO,SAASC,oBACdC,EAAgG;IAEhG,MAAMC,SAAiC,EAAE;IACzC,IAAIC;IACJ;QACE,IAAIC;QACJF,OAAOG,IAAI,CAAED,OAAOL;QACpBI,OAAO,CAACG,KAAKC;YACX,IAAIA,QAAQC,WAAW;gBACrBJ,KAAKK,OAAO,CAAC;oBAACD;oBAAW;oBAAMD;iBAAI;YACrC,OAAO,IAAID,QAAQE,WAAW;gBAC5BJ,KAAKK,OAAO,CAACH;YACf,OAAO;gBACL;YACF;YACAJ,OAAOG,IAAI,CAAED,OAAOL;QACtB;IACF;IAEAE,GAAGE;IAEH,OAAO,AAAC;QACN,IAAIO;QACJ,IAAIH;QACJ,IAAK,IAAII,IAAI,GAAGC,OAAO,OAAO,CAACA,MAAMD,IAAK;YACxC,IAAIE,SAAS,MAAMX,MAAM,CAACS,EAAE;YAC5B,OAAOT,MAAM,CAACS,EAAE;YAChB,CAACD,OAAOE,MAAML,IAAI,GAAGM;YACrB,IAAIN,KAAK;gBACP,MAAMA;YACR;YACA,IAAIG,UAAUF,WAAW;gBACvB,MAAME;YACR;QACF;IACF;AACF"}
@@ -30,16 +30,11 @@ const DivisionCodeLevels = [
30
30
  label: '村'
31
31
  }
32
32
  ];
33
- // String(Number.MAX_SAFE_INTEGER).length=16
34
- // 12 is safe int
35
- /**
36
- * Codes for the administrative divisions of the People's Republic of China
37
- *
38
- * @see https://zh.wikipedia.org/wiki/GB/T_2260 中华人民共和国行政区划代码
39
- */ export class DivisionCodeFormat {
40
- static levels = DivisionCodeLevels;
41
- regex = /^(?<province>\d{2})(?<city>\d{2})?(?<county>\d{2})?(?<town>\d{3})?(?<village>\d{3})?$/;
42
- provinces = [
33
+ export var DivisionCode;
34
+ (function(DivisionCode) {
35
+ DivisionCode.levels = DivisionCodeLevels;
36
+ DivisionCode.regex = /^(?<province>\d{2})(?<city>\d{2})?(?<county>\d{2})?(?<town>\d{3})?(?<village>\d{3})?$/;
37
+ const provinces = [
43
38
  [
44
39
  11,
45
40
  '北京市'
@@ -177,10 +172,9 @@ const DivisionCodeLevels = [
177
172
  '澳门特别行政区'
178
173
  ]
179
174
  ];
180
- parse(code) {
175
+ function parse(code) {
181
176
  if (!code) return;
182
- const { regex } = this;
183
- const match = regex.exec(code);
177
+ const match = DivisionCode.regex.exec(code);
184
178
  if (!match) return;
185
179
  const { province, city, county, town, village } = match.groups ?? {};
186
180
  if (!province) return;
@@ -192,7 +186,17 @@ const DivisionCodeLevels = [
192
186
  village
193
187
  };
194
188
  }
195
- }
189
+ DivisionCode.parse = parse;
190
+ function random(level = 'County') {
191
+ const l = DivisionCodeLevels.find((v)=>v.code === level) || DivisionCodeLevels[2];
192
+ const l1 = randomPick(provinces);
193
+ if (l.level === 1) {
194
+ return String(l1[0]);
195
+ }
196
+ return l1 + String(Math.floor(Math.random() * parseFloat(`1e${l.length - 2}`) - 1));
197
+ }
198
+ DivisionCode.random = random;
199
+ })(DivisionCode || (DivisionCode = {}));
196
200
  // export function getSimpleProvinceLabel(value: string) {
197
201
  // if (!value) {
198
202
  // return;
@@ -204,6 +208,8 @@ const DivisionCodeLevels = [
204
208
  // }
205
209
  // return label.replace(/省|市|(回族|维吾尔|壮族)?自治区|特别行政区$/, '');
206
210
  // }
207
- export const DivisionCode = new DivisionCodeFormat();
211
+ export function randomPick(s) {
212
+ return s[Math.floor(Math.random() * s.length)];
213
+ }
208
214
 
209
215
  //# 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 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"],"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"}
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 namespace DivisionCode {\n export const levels = DivisionCodeLevels;\n\n export const regex = /^(?<province>\\d{2})(?<city>\\d{2})?(?<county>\\d{2})?(?<town>\\d{3})?(?<village>\\d{3})?$/;\n\n const 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 export type ParsedCode = {\n province: string;\n city?: string;\n county?: string;\n town?: string;\n village?: string;\n };\n\n export function parse(code: string): ParsedCode | undefined {\n if (!code) return;\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 export function random(level: DivisionCodeLevel = 'County'): string {\n const l = DivisionCodeLevels.find((v) => v.code === level) || DivisionCodeLevels[2];\n const l1 = randomPick(provinces);\n if (l.level === 1) {\n return String(l1[0]);\n }\n return l1 + String(Math.floor(Math.random() * parseFloat(`1e${l.length - 2}`) - 1));\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 function randomPick<T>(s: T[]) {\n return s[Math.floor(Math.random() * s.length)];\n}\n"],"names":["DivisionCodeLevels","level","code","length","label","DivisionCode","levels","regex","provinces","parse","match","exec","province","city","county","town","village","groups","random","l","find","v","l1","randomPick","String","Math","floor","parseFloat","s"],"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;;UAUgBC;iBACFC,SAASN;iBAETO,QAAQ;IAErB,MAAMC,YAAqC;QACzC;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;IAUM,SAASC,MAAMP,IAAY;QAChC,IAAI,CAACA,MAAM;QACX,MAAMQ,QAAQH,aAAAA,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;iBAdgBP,QAAAA;IAgBT,SAASS,OAAOjB,QAA2B,QAAQ;QACxD,MAAMkB,IAAInB,mBAAmBoB,IAAI,CAAC,CAACC,IAAMA,EAAEnB,IAAI,KAAKD,UAAUD,kBAAkB,CAAC,EAAE;QACnF,MAAMsB,KAAKC,WAAWf;QACtB,IAAIW,EAAElB,KAAK,KAAK,GAAG;YACjB,OAAOuB,OAAOF,EAAE,CAAC,EAAE;QACrB;QACA,OAAOA,KAAKE,OAAOC,KAAKC,KAAK,CAACD,KAAKP,MAAM,KAAKS,WAAW,CAAC,EAAE,EAAER,EAAEhB,MAAM,GAAG,GAAG,IAAI;IAClF;iBAPgBe,SAAAA;AAQlB,GA3EiBb,iBAAAA;AAqHjB,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,SAASkB,WAAcK,CAAM;IAClC,OAAOA,CAAC,CAACH,KAAKC,KAAK,CAACD,KAAKP,MAAM,KAAKU,EAAEzB,MAAM,EAAE;AAChD"}
@@ -1,5 +1,5 @@
1
1
  // import type * as NodeCrypto from 'node:crypto';
2
- import { getGlobalThis } from '../runtime/getGlobalThis.js';
2
+ import { getGlobalThis } from '../web/getGlobalThis.js';
3
3
  let nodeCrypto;
4
4
  // globalThis.process?.release?.name
5
5
  // avoid import node
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/crypto/getNodeCrypto.ts"],"sourcesContent":["// import type * as NodeCrypto from 'node:crypto';\nimport { 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"],"mappings":"AAAA,kDAAkD;AAClD,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"}
1
+ {"version":3,"sources":["../../src/crypto/getNodeCrypto.ts"],"sourcesContent":["// import type * as NodeCrypto from 'node:crypto';\nimport { getGlobalThis } from '../web/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"],"mappings":"AAAA,kDAAkD;AAClD,SAASA,aAAa,QAAQ,uBAAuB;AAErD,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"}
@@ -1,4 +1,4 @@
1
- import { getRandomValues } from './getRandomValues.js';
1
+ import { getRandomValues } from '../web/getRandomValues.js';
2
2
  function createError(message) {
3
3
  const err = new Error(message);
4
4
  err.source = 'ulid';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/crypto/ulid.ts"],"sourcesContent":["import { getRandomValues } from './getRandomValues';\n\ntype PRNG = () => number;\n\n/**\n * Universally Unique Lexicographically Sortable Identifier\n *\n * @see https://github.com/ulid/spec ulid/spec\n */\nexport type ULID = (seedTime?: number) => string;\n\nexport interface ULIDError extends Error {\n source: string;\n}\n\nfunction createError(message: string): ULIDError {\n const err = new Error(message) as ULIDError;\n err.source = 'ulid';\n return err;\n}\n\n// These values should NEVER change. If\n// they do, we're no longer making ulids!\nconst ENCODING = '0123456789ABCDEFGHJKMNPQRSTVWXYZ'; // Crockford's Base32\nconst ENCODING_LEN = ENCODING.length;\nconst TIME_MAX = Math.pow(2, 48) - 1;\nconst TIME_LEN = 10;\nconst RANDOM_LEN = 16;\n\n/**\n * check give {@link str} is a valid ulid\n */\nexport function isULID(str: string | undefined | null): boolean {\n if (!str) {\n return false;\n }\n // ttttttttttrrrrrrrrrrrrrrrr\n return str.length === 26 && /^[0-9A-HJKMNP-TV-Z]{26}$/i.test(str);\n}\n\nfunction replaceCharAt(str: string, index: number, char: string) {\n if (index > str.length - 1) {\n return str;\n }\n return str.substr(0, index) + char + str.substr(index + 1);\n}\n\nfunction incrementBase32(str: string): string {\n let done;\n let index = str.length;\n let char;\n let charIndex;\n const maxCharIndex = ENCODING_LEN - 1;\n while (!done && index-- >= 0) {\n char = str[index];\n charIndex = ENCODING.indexOf(char);\n if (charIndex === -1) {\n throw createError('incorrectly encoded string');\n }\n if (charIndex === maxCharIndex) {\n str = replaceCharAt(str, index, ENCODING[0]);\n continue;\n }\n done = replaceCharAt(str, index, ENCODING[charIndex + 1]);\n }\n if (typeof done === 'string') {\n return done;\n }\n throw createError('cannot increment this string');\n}\n\nfunction randomChar(prng: PRNG): string {\n let rand = Math.floor(prng() * ENCODING_LEN);\n if (rand === ENCODING_LEN) {\n rand = ENCODING_LEN - 1;\n }\n return ENCODING.charAt(rand);\n}\n\nfunction encodeTime(now: number, len: number): string {\n if (isNaN(now)) {\n throw new Error(`${now} must be a number`);\n }\n if (now > TIME_MAX) {\n throw createError(`cannot encode time greater than ${TIME_MAX}`);\n }\n if (now < 0) {\n throw createError('time must be positive');\n }\n if (!Number.isInteger(now)) {\n throw createError('time must be an integer');\n }\n let mod;\n let str = '';\n for (; len > 0; len--) {\n mod = now % ENCODING_LEN;\n str = ENCODING.charAt(mod) + str;\n now = (now - mod) / ENCODING_LEN;\n }\n return str;\n}\n\nfunction encodeRandom(len: number, prng: PRNG): string {\n let str = '';\n for (; len > 0; len--) {\n str = randomChar(prng) + str;\n }\n return str;\n}\n\n/**\n * extract time & random from ulid\n *\n * @throws ULIDError\n */\nexport function parseULID(id: string): { timestamp: number; random: string } {\n if (id.length !== TIME_LEN + RANDOM_LEN) {\n throw createError('malformed ulid');\n }\n const time = id\n .substr(0, TIME_LEN)\n .split('')\n .reverse()\n .reduce((carry, char, index) => {\n const encodingIndex = ENCODING.indexOf(char);\n if (encodingIndex === -1) {\n throw createError('invalid character found: ' + char);\n }\n return (carry += encodingIndex * Math.pow(ENCODING_LEN, index));\n }, 0);\n if (time > TIME_MAX) {\n throw createError('malformed ulid, timestamp too large');\n }\n return { timestamp: time, random: id.substring(TIME_LEN) };\n}\n\nfunction createPrng(): PRNG {\n return () => {\n const buffer = new Uint8Array(1);\n getRandomValues(buffer);\n return buffer[0] / 0xff;\n };\n}\n\n/**\n * create a ulid generator\n */\nexport function createULID({\n monotonic = true,\n random = createPrng(),\n now = Date.now,\n}: { monotonic?: boolean; now?: () => number; random?: () => number } = {}) {\n if (!monotonic) {\n return function ulid(seedTime?: number): string {\n seedTime ||= now();\n return encodeTime(seedTime, TIME_LEN) + encodeRandom(RANDOM_LEN, random);\n };\n }\n\n let lastTime: number = 0;\n let lastRandom: string;\n return function ulid(seedTime?: number): string {\n seedTime ||= now();\n if (seedTime <= lastTime && lastRandom) {\n const incrementedRandom = (lastRandom = incrementBase32(lastRandom));\n return encodeTime(lastTime, TIME_LEN) + incrementedRandom;\n }\n lastTime = seedTime;\n const newRandom = (lastRandom = encodeRandom(RANDOM_LEN, random));\n return encodeTime(seedTime, TIME_LEN) + newRandom;\n };\n}\n\n/**\n * default monotonic ulid generator\n */\nexport let ulid: ULID = (...args) => {\n if (_real) {\n return _real(...args);\n }\n // delay initialize crypto\n _real = createULID();\n ulid = _real;\n return _real(...args);\n};\nlet _real: ULID;\n"],"names":["getRandomValues","createError","message","err","Error","source","ENCODING","ENCODING_LEN","length","TIME_MAX","Math","pow","TIME_LEN","RANDOM_LEN","isULID","str","test","replaceCharAt","index","char","substr","incrementBase32","done","charIndex","maxCharIndex","indexOf","randomChar","prng","rand","floor","charAt","encodeTime","now","len","isNaN","Number","isInteger","mod","encodeRandom","parseULID","id","time","split","reverse","reduce","carry","encodingIndex","timestamp","random","substring","createPrng","buffer","Uint8Array","createULID","monotonic","Date","ulid","seedTime","lastTime","lastRandom","incrementedRandom","newRandom","args","_real"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/crypto/ulid.ts"],"sourcesContent":["import { getRandomValues } from '../web/getRandomValues';\n\ntype PRNG = () => number;\n\n/**\n * Universally Unique Lexicographically Sortable Identifier\n *\n * @see https://github.com/ulid/spec ulid/spec\n */\nexport type ULID = (seedTime?: number) => string;\n\nexport interface ULIDError extends Error {\n source: string;\n}\n\nfunction createError(message: string): ULIDError {\n const err = new Error(message) as ULIDError;\n err.source = 'ulid';\n return err;\n}\n\n// These values should NEVER change. If\n// they do, we're no longer making ulids!\nconst ENCODING = '0123456789ABCDEFGHJKMNPQRSTVWXYZ'; // Crockford's Base32\nconst ENCODING_LEN = ENCODING.length;\nconst TIME_MAX = Math.pow(2, 48) - 1;\nconst TIME_LEN = 10;\nconst RANDOM_LEN = 16;\n\n/**\n * check give {@link str} is a valid ulid\n */\nexport function isULID(str: string | undefined | null): boolean {\n if (!str) {\n return false;\n }\n // ttttttttttrrrrrrrrrrrrrrrr\n return str.length === 26 && /^[0-9A-HJKMNP-TV-Z]{26}$/i.test(str);\n}\n\nfunction replaceCharAt(str: string, index: number, char: string) {\n if (index > str.length - 1) {\n return str;\n }\n return str.substr(0, index) + char + str.substr(index + 1);\n}\n\nfunction incrementBase32(str: string): string {\n let done;\n let index = str.length;\n let char;\n let charIndex;\n const maxCharIndex = ENCODING_LEN - 1;\n while (!done && index-- >= 0) {\n char = str[index];\n charIndex = ENCODING.indexOf(char);\n if (charIndex === -1) {\n throw createError('incorrectly encoded string');\n }\n if (charIndex === maxCharIndex) {\n str = replaceCharAt(str, index, ENCODING[0]);\n continue;\n }\n done = replaceCharAt(str, index, ENCODING[charIndex + 1]);\n }\n if (typeof done === 'string') {\n return done;\n }\n throw createError('cannot increment this string');\n}\n\nfunction randomChar(prng: PRNG): string {\n let rand = Math.floor(prng() * ENCODING_LEN);\n if (rand === ENCODING_LEN) {\n rand = ENCODING_LEN - 1;\n }\n return ENCODING.charAt(rand);\n}\n\nfunction encodeTime(now: number, len: number): string {\n if (isNaN(now)) {\n throw new Error(`${now} must be a number`);\n }\n if (now > TIME_MAX) {\n throw createError(`cannot encode time greater than ${TIME_MAX}`);\n }\n if (now < 0) {\n throw createError('time must be positive');\n }\n if (!Number.isInteger(now)) {\n throw createError('time must be an integer');\n }\n let mod;\n let str = '';\n for (; len > 0; len--) {\n mod = now % ENCODING_LEN;\n str = ENCODING.charAt(mod) + str;\n now = (now - mod) / ENCODING_LEN;\n }\n return str;\n}\n\nfunction encodeRandom(len: number, prng: PRNG): string {\n let str = '';\n for (; len > 0; len--) {\n str = randomChar(prng) + str;\n }\n return str;\n}\n\n/**\n * extract time & random from ulid\n *\n * @throws ULIDError\n */\nexport function parseULID(id: string): { timestamp: number; random: string } {\n if (id.length !== TIME_LEN + RANDOM_LEN) {\n throw createError('malformed ulid');\n }\n const time = id\n .substr(0, TIME_LEN)\n .split('')\n .reverse()\n .reduce((carry, char, index) => {\n const encodingIndex = ENCODING.indexOf(char);\n if (encodingIndex === -1) {\n throw createError('invalid character found: ' + char);\n }\n return (carry += encodingIndex * Math.pow(ENCODING_LEN, index));\n }, 0);\n if (time > TIME_MAX) {\n throw createError('malformed ulid, timestamp too large');\n }\n return { timestamp: time, random: id.substring(TIME_LEN) };\n}\n\nfunction createPrng(): PRNG {\n return () => {\n const buffer = new Uint8Array(1);\n getRandomValues(buffer);\n return buffer[0] / 0xff;\n };\n}\n\n/**\n * create a ulid generator\n */\nexport function createULID({\n monotonic = true,\n random = createPrng(),\n now = Date.now,\n}: { monotonic?: boolean; now?: () => number; random?: () => number } = {}) {\n if (!monotonic) {\n return function ulid(seedTime?: number): string {\n seedTime ||= now();\n return encodeTime(seedTime, TIME_LEN) + encodeRandom(RANDOM_LEN, random);\n };\n }\n\n let lastTime: number = 0;\n let lastRandom: string;\n return function ulid(seedTime?: number): string {\n seedTime ||= now();\n if (seedTime <= lastTime && lastRandom) {\n const incrementedRandom = (lastRandom = incrementBase32(lastRandom));\n return encodeTime(lastTime, TIME_LEN) + incrementedRandom;\n }\n lastTime = seedTime;\n const newRandom = (lastRandom = encodeRandom(RANDOM_LEN, random));\n return encodeTime(seedTime, TIME_LEN) + newRandom;\n };\n}\n\n/**\n * default monotonic ulid generator\n */\nexport let ulid: ULID = (...args) => {\n if (_real) {\n return _real(...args);\n }\n // delay initialize crypto\n _real = createULID();\n ulid = _real;\n return _real(...args);\n};\nlet _real: ULID;\n"],"names":["getRandomValues","createError","message","err","Error","source","ENCODING","ENCODING_LEN","length","TIME_MAX","Math","pow","TIME_LEN","RANDOM_LEN","isULID","str","test","replaceCharAt","index","char","substr","incrementBase32","done","charIndex","maxCharIndex","indexOf","randomChar","prng","rand","floor","charAt","encodeTime","now","len","isNaN","Number","isInteger","mod","encodeRandom","parseULID","id","time","split","reverse","reduce","carry","encodingIndex","timestamp","random","substring","createPrng","buffer","Uint8Array","createULID","monotonic","Date","ulid","seedTime","lastTime","lastRandom","incrementedRandom","newRandom","args","_real"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { getGlobalThis } from '../runtime/getGlobalThis.js';
1
+ import { getGlobalThis } from '../web/getGlobalThis.js';
2
2
  export function createFetchWith({ fetch = getGlobalThis().fetch, onRequest = (ctx)=>ctx.next(ctx.url, ctx.req), onResponse = (ctx)=>ctx.res }) {
3
3
  return async (urlOrRequest, init)=>{
4
4
  const url = String(urlOrRequest);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/fetch/createFetchWith.ts"],"sourcesContent":["import type { MaybePromise } from '../asyncs/MaybePromise';\nimport { getGlobalThis } from '../runtime/getGlobalThis';\nimport { type FetchLike } from './types';\n\nexport function createFetchWith({\n fetch = getGlobalThis().fetch,\n onRequest = (ctx) => ctx.next(ctx.url, ctx.req),\n onResponse = (ctx) => ctx.res,\n}: {\n fetch?: FetchLike;\n onRequest?: (ctx: {\n url: string;\n req: RequestInit;\n next: (url: string, req: RequestInit) => Promise<Response>;\n }) => MaybePromise<Response | void>;\n onResponse?: (ctx: { url: string; req: RequestInit; res: Response }) => MaybePromise<Response>;\n}) {\n return async (urlOrRequest: string | URL | Request, init?: RequestInit & { fetch?: FetchLike }) => {\n const url = String(urlOrRequest);\n let req = init || {};\n const nextFetch = req.fetch || fetch;\n const res =\n (await onRequest({\n url,\n req,\n next: (url, init) => {\n req = init;\n return nextFetch(url, init);\n },\n })) ?? (await nextFetch(url, init));\n return onResponse({ url, req, res });\n };\n}\n"],"names":["getGlobalThis","createFetchWith","fetch","onRequest","ctx","next","url","req","onResponse","res","urlOrRequest","init","String","nextFetch"],"mappings":"AACA,SAASA,aAAa,QAAQ,2BAA2B;AAGzD,OAAO,SAASC,gBAAgB,EAC9BC,QAAQF,gBAAgBE,KAAK,EAC7BC,YAAY,CAACC,MAAQA,IAAIC,IAAI,CAACD,IAAIE,GAAG,EAAEF,IAAIG,GAAG,CAAC,EAC/CC,aAAa,CAACJ,MAAQA,IAAIK,GAAG,EAS9B;IACC,OAAO,OAAOC,cAAsCC;QAClD,MAAML,MAAMM,OAAOF;QACnB,IAAIH,MAAMI,QAAQ,CAAC;QACnB,MAAME,YAAYN,IAAIL,KAAK,IAAIA;QAC/B,MAAMO,MACJ,AAAC,MAAMN,UAAU;YACfG;YACAC;YACAF,MAAM,CAACC,KAAKK;gBACVJ,MAAMI;gBACN,OAAOE,UAAUP,KAAKK;YACxB;QACF,MAAQ,MAAME,UAAUP,KAAKK;QAC/B,OAAOH,WAAW;YAAEF;YAAKC;YAAKE;QAAI;IACpC;AACF"}
1
+ {"version":3,"sources":["../../src/fetch/createFetchWith.ts"],"sourcesContent":["import type { MaybePromise } from '../asyncs/MaybePromise';\nimport { getGlobalThis } from '../web/getGlobalThis';\nimport type { FetchLike } from './types';\n\nexport function createFetchWith({\n fetch = getGlobalThis().fetch,\n onRequest = (ctx) => ctx.next(ctx.url, ctx.req),\n onResponse = (ctx) => ctx.res,\n}: {\n fetch?: FetchLike;\n onRequest?: (ctx: {\n url: string;\n req: RequestInit;\n next: (url: string, req: RequestInit) => Promise<Response>;\n }) => MaybePromise<Response | void>;\n onResponse?: (ctx: { url: string; req: RequestInit; res: Response }) => MaybePromise<Response>;\n}) {\n return async (urlOrRequest: string | URL | Request, init?: RequestInit & { fetch?: FetchLike }) => {\n const url = String(urlOrRequest);\n let req = init || {};\n const nextFetch = req.fetch || fetch;\n const res =\n (await onRequest({\n url,\n req,\n next: (url, init) => {\n req = init;\n return nextFetch(url, init);\n },\n })) ?? (await nextFetch(url, init));\n return onResponse({ url, req, res });\n };\n}\n"],"names":["getGlobalThis","createFetchWith","fetch","onRequest","ctx","next","url","req","onResponse","res","urlOrRequest","init","String","nextFetch"],"mappings":"AACA,SAASA,aAAa,QAAQ,uBAAuB;AAGrD,OAAO,SAASC,gBAAgB,EAC9BC,QAAQF,gBAAgBE,KAAK,EAC7BC,YAAY,CAACC,MAAQA,IAAIC,IAAI,CAACD,IAAIE,GAAG,EAAEF,IAAIG,GAAG,CAAC,EAC/CC,aAAa,CAACJ,MAAQA,IAAIK,GAAG,EAS9B;IACC,OAAO,OAAOC,cAAsCC;QAClD,MAAML,MAAMM,OAAOF;QACnB,IAAIH,MAAMI,QAAQ,CAAC;QACnB,MAAME,YAAYN,IAAIL,KAAK,IAAIA;QAC/B,MAAMO,MACJ,AAAC,MAAMN,UAAU;YACfG;YACAC;YACAF,MAAM,CAACC,KAAKK;gBACVJ,MAAMI;gBACN,OAAOE,UAAUP,KAAKK;YACxB;QACF,MAAQ,MAAME,UAAUP,KAAKK;QAC/B,OAAOH,WAAW;YAAEF;YAAKC;YAAKE;QAAI;IACpC;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/fetch/createFetchWithLogging.ts"],"sourcesContent":["import { createFetchWith } from './createFetchWith';\nimport { dumpRequest } from './dumpRequest';\nimport { dumpResponse } from './dumpResponse';\nimport { type FetchLike } from './types';\n\nexport function createFetchWithLogging({\n fetch,\n log = console.log,\n}: {\n fetch?: FetchLike;\n log?: (s: string) => void;\n} = {}): FetchLike {\n return createFetchWith({\n fetch,\n onRequest: ({ url, req }) => {\n void dumpRequest({ url, req, log });\n },\n onResponse: ({ url, req, res }) => {\n return dumpResponse({ url, req, res, log });\n },\n });\n}\n"],"names":["createFetchWith","dumpRequest","dumpResponse","createFetchWithLogging","fetch","log","console","onRequest","url","req","onResponse","res"],"mappings":"AAAA,SAASA,eAAe,QAAQ,oBAAoB;AACpD,SAASC,WAAW,QAAQ,gBAAgB;AAC5C,SAASC,YAAY,QAAQ,iBAAiB;AAG9C,OAAO,SAASC,uBAAuB,EACrCC,KAAK,EACLC,MAAMC,QAAQD,GAAG,EAIlB,GAAG,CAAC,CAAC;IACJ,OAAOL,gBAAgB;QACrBI;QACAG,WAAW,CAAC,EAAEC,GAAG,EAAEC,GAAG,EAAE;YACtB,KAAKR,YAAY;gBAAEO;gBAAKC;gBAAKJ;YAAI;QACnC;QACAK,YAAY,CAAC,EAAEF,GAAG,EAAEC,GAAG,EAAEE,GAAG,EAAE;YAC5B,OAAOT,aAAa;gBAAEM;gBAAKC;gBAAKE;gBAAKN;YAAI;QAC3C;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/fetch/createFetchWithLogging.ts"],"sourcesContent":["import { createFetchWith } from './createFetchWith';\nimport { dumpRequest } from './dumpRequest';\nimport { dumpResponse } from './dumpResponse';\nimport type { FetchLike } from './types';\n\nexport function createFetchWithLogging({\n fetch,\n log = console.log,\n}: {\n fetch?: FetchLike;\n log?: (s: string) => void;\n} = {}): FetchLike {\n return createFetchWith({\n fetch,\n onRequest: ({ url, req }) => {\n void dumpRequest({ url, req, log });\n },\n onResponse: ({ url, req, res }) => {\n return dumpResponse({ url, req, res, log });\n },\n });\n}\n"],"names":["createFetchWith","dumpRequest","dumpResponse","createFetchWithLogging","fetch","log","console","onRequest","url","req","onResponse","res"],"mappings":"AAAA,SAASA,eAAe,QAAQ,oBAAoB;AACpD,SAASC,WAAW,QAAQ,gBAAgB;AAC5C,SAASC,YAAY,QAAQ,iBAAiB;AAG9C,OAAO,SAASC,uBAAuB,EACrCC,KAAK,EACLC,MAAMC,QAAQD,GAAG,EAIlB,GAAG,CAAC,CAAC;IACJ,OAAOL,gBAAgB;QACrBI;QACAG,WAAW,CAAC,EAAEC,GAAG,EAAEC,GAAG,EAAE;YACtB,KAAKR,YAAY;gBAAEO;gBAAKC;gBAAKJ;YAAI;QACnC;QACAK,YAAY,CAAC,EAAEF,GAAG,EAAEC,GAAG,EAAEE,GAAG,EAAE;YAC5B,OAAOT,aAAa;gBAAEM;gBAAKC;gBAAKE;gBAAKN;YAAI;QAC3C;IACF;AACF"}
@@ -1,4 +1,4 @@
1
- import { getGlobalThis } from '../runtime/getGlobalThis.js';
1
+ import { getGlobalThis } from '../web/getGlobalThis.js';
2
2
  export function createFetchWithRetry({ fetch = getGlobalThis().fetch, retries = 3, retryDelay = 1000, retryOn = [] } = {}) {
3
3
  // https://github.com/jonbern/fetch-retry/blob/master/index.js
4
4
  return function fetchRetry(input, init) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/fetch/createFetchWithRetry.ts"],"sourcesContent":["import { getGlobalThis } from '../runtime/getGlobalThis';\nimport type { FetchLike } from './types';\n\ntype RequestDelayFunction = (attempt: number, error: Error | null, response: Response | null) => number;\ntype RequestRetryOnFunction = (\n attempt: number,\n error: Error | null,\n response: Response | null,\n) => boolean | Promise<boolean>;\n\nexport interface FetchWithRetryOptions {\n fetch?: FetchLike;\n retries?: number;\n retryDelay?: number | RequestDelayFunction;\n retryOn?: number[] | RequestRetryOnFunction;\n}\n\nexport function createFetchWithRetry({\n fetch = getGlobalThis().fetch,\n retries = 3,\n retryDelay = 1000,\n retryOn = [],\n}: FetchWithRetryOptions = {}): FetchLike {\n // https://github.com/jonbern/fetch-retry/blob/master/index.js\n\n return function fetchRetry(input: string | URL | Request, init?: RequestInit) {\n return new Promise(function (resolve, reject) {\n var wrappedFetch = function (attempt: number) {\n // As of node 18, this is no longer needed since node comes with native support for fetch:\n /* istanbul ignore next */\n var _input = typeof Request !== 'undefined' && input instanceof Request ? input.clone() : input;\n fetch(_input, init)\n .then(function (response) {\n if (Array.isArray(retryOn) && retryOn.indexOf(response.status) === -1) {\n resolve(response);\n } else if (typeof retryOn === 'function') {\n try {\n return Promise.resolve(retryOn(attempt, null, response))\n .then(function (retryOnResponse) {\n if (retryOnResponse) {\n retry(attempt, null, response);\n } else {\n resolve(response);\n }\n })\n .catch(reject);\n } catch (error) {\n reject(error);\n }\n } else {\n if (attempt < retries) {\n retry(attempt, null, response);\n } else {\n resolve(response);\n }\n }\n return;\n })\n .catch(function (error) {\n if (typeof retryOn === 'function') {\n try {\n // eslint-disable-next-line no-undef\n Promise.resolve(retryOn(attempt, error, null))\n .then(function (retryOnResponse) {\n if (retryOnResponse) {\n retry(attempt, error, null);\n } else {\n reject(error);\n }\n })\n .catch(function (error) {\n reject(error);\n });\n } catch (error) {\n reject(error);\n }\n } else if (attempt < retries) {\n retry(attempt, error, null);\n } else {\n reject(error);\n }\n });\n };\n\n function retry(attempt: number, error: any, response: Response | null) {\n let delay = typeof retryDelay === 'function' ? retryDelay(attempt, error, response) : retryDelay;\n setTimeout(function () {\n wrappedFetch(++attempt);\n }, delay);\n }\n\n wrappedFetch(0);\n });\n };\n}\n"],"names":["getGlobalThis","createFetchWithRetry","fetch","retries","retryDelay","retryOn","fetchRetry","input","init","Promise","resolve","reject","wrappedFetch","attempt","_input","Request","clone","then","response","Array","isArray","indexOf","status","retryOnResponse","retry","catch","error","delay","setTimeout"],"mappings":"AAAA,SAASA,aAAa,QAAQ,2BAA2B;AAiBzD,OAAO,SAASC,qBAAqB,EACnCC,QAAQF,gBAAgBE,KAAK,EAC7BC,UAAU,CAAC,EACXC,aAAa,IAAI,EACjBC,UAAU,EAAE,EACU,GAAG,CAAC,CAAC;IAC3B,8DAA8D;IAE9D,OAAO,SAASC,WAAWC,KAA6B,EAAEC,IAAkB;QAC1E,OAAO,IAAIC,QAAQ,SAAUC,OAAO,EAAEC,MAAM;YAC1C,IAAIC,eAAe,SAAUC,OAAe;gBAC1C,0FAA0F;gBAC1F,wBAAwB,GACxB,IAAIC,SAAS,OAAOC,YAAY,eAAeR,iBAAiBQ,UAAUR,MAAMS,KAAK,KAAKT;gBAC1FL,MAAMY,QAAQN,MACXS,IAAI,CAAC,SAAUC,QAAQ;oBACtB,IAAIC,MAAMC,OAAO,CAACf,YAAYA,QAAQgB,OAAO,CAACH,SAASI,MAAM,MAAM,CAAC,GAAG;wBACrEZ,QAAQQ;oBACV,OAAO,IAAI,OAAOb,YAAY,YAAY;wBACxC,IAAI;4BACF,OAAOI,QAAQC,OAAO,CAACL,QAAQQ,SAAS,MAAMK,WAC3CD,IAAI,CAAC,SAAUM,eAAe;gCAC7B,IAAIA,iBAAiB;oCACnBC,MAAMX,SAAS,MAAMK;gCACvB,OAAO;oCACLR,QAAQQ;gCACV;4BACF,GACCO,KAAK,CAACd;wBACX,EAAE,OAAOe,OAAO;4BACdf,OAAOe;wBACT;oBACF,OAAO;wBACL,IAAIb,UAAUV,SAAS;4BACrBqB,MAAMX,SAAS,MAAMK;wBACvB,OAAO;4BACLR,QAAQQ;wBACV;oBACF;oBACA;gBACF,GACCO,KAAK,CAAC,SAAUC,KAAK;oBACpB,IAAI,OAAOrB,YAAY,YAAY;wBACjC,IAAI;4BACF,oCAAoC;4BACpCI,QAAQC,OAAO,CAACL,QAAQQ,SAASa,OAAO,OACrCT,IAAI,CAAC,SAAUM,eAAe;gCAC7B,IAAIA,iBAAiB;oCACnBC,MAAMX,SAASa,OAAO;gCACxB,OAAO;oCACLf,OAAOe;gCACT;4BACF,GACCD,KAAK,CAAC,SAAUC,KAAK;gCACpBf,OAAOe;4BACT;wBACJ,EAAE,OAAOA,OAAO;4BACdf,OAAOe;wBACT;oBACF,OAAO,IAAIb,UAAUV,SAAS;wBAC5BqB,MAAMX,SAASa,OAAO;oBACxB,OAAO;wBACLf,OAAOe;oBACT;gBACF;YACJ;YAEA,SAASF,MAAMX,OAAe,EAAEa,KAAU,EAAER,QAAyB;gBACnE,IAAIS,QAAQ,OAAOvB,eAAe,aAAaA,WAAWS,SAASa,OAAOR,YAAYd;gBACtFwB,WAAW;oBACThB,aAAa,EAAEC;gBACjB,GAAGc;YACL;YAEAf,aAAa;QACf;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/fetch/createFetchWithRetry.ts"],"sourcesContent":["import { getGlobalThis } from '../web/getGlobalThis';\nimport type { FetchLike } from './types';\n\ntype RequestDelayFunction = (attempt: number, error: Error | null, response: Response | null) => number;\ntype RequestRetryOnFunction = (\n attempt: number,\n error: Error | null,\n response: Response | null,\n) => boolean | Promise<boolean>;\n\nexport interface FetchWithRetryOptions {\n fetch?: FetchLike;\n retries?: number;\n retryDelay?: number | RequestDelayFunction;\n retryOn?: number[] | RequestRetryOnFunction;\n}\n\nexport function createFetchWithRetry({\n fetch = getGlobalThis().fetch,\n retries = 3,\n retryDelay = 1000,\n retryOn = [],\n}: FetchWithRetryOptions = {}): FetchLike {\n // https://github.com/jonbern/fetch-retry/blob/master/index.js\n\n return function fetchRetry(input: string | URL | Request, init?: RequestInit) {\n return new Promise(function (resolve, reject) {\n var wrappedFetch = function (attempt: number) {\n // As of node 18, this is no longer needed since node comes with native support for fetch:\n /* istanbul ignore next */\n var _input = typeof Request !== 'undefined' && input instanceof Request ? input.clone() : input;\n fetch(_input, init)\n .then(function (response) {\n if (Array.isArray(retryOn) && retryOn.indexOf(response.status) === -1) {\n resolve(response);\n } else if (typeof retryOn === 'function') {\n try {\n return Promise.resolve(retryOn(attempt, null, response))\n .then(function (retryOnResponse) {\n if (retryOnResponse) {\n retry(attempt, null, response);\n } else {\n resolve(response);\n }\n })\n .catch(reject);\n } catch (error) {\n reject(error);\n }\n } else {\n if (attempt < retries) {\n retry(attempt, null, response);\n } else {\n resolve(response);\n }\n }\n return;\n })\n .catch(function (error) {\n if (typeof retryOn === 'function') {\n try {\n // eslint-disable-next-line no-undef\n Promise.resolve(retryOn(attempt, error, null))\n .then(function (retryOnResponse) {\n if (retryOnResponse) {\n retry(attempt, error, null);\n } else {\n reject(error);\n }\n })\n .catch(function (error) {\n reject(error);\n });\n } catch (error) {\n reject(error);\n }\n } else if (attempt < retries) {\n retry(attempt, error, null);\n } else {\n reject(error);\n }\n });\n };\n\n function retry(attempt: number, error: any, response: Response | null) {\n let delay = typeof retryDelay === 'function' ? retryDelay(attempt, error, response) : retryDelay;\n setTimeout(function () {\n wrappedFetch(++attempt);\n }, delay);\n }\n\n wrappedFetch(0);\n });\n };\n}\n"],"names":["getGlobalThis","createFetchWithRetry","fetch","retries","retryDelay","retryOn","fetchRetry","input","init","Promise","resolve","reject","wrappedFetch","attempt","_input","Request","clone","then","response","Array","isArray","indexOf","status","retryOnResponse","retry","catch","error","delay","setTimeout"],"mappings":"AAAA,SAASA,aAAa,QAAQ,uBAAuB;AAiBrD,OAAO,SAASC,qBAAqB,EACnCC,QAAQF,gBAAgBE,KAAK,EAC7BC,UAAU,CAAC,EACXC,aAAa,IAAI,EACjBC,UAAU,EAAE,EACU,GAAG,CAAC,CAAC;IAC3B,8DAA8D;IAE9D,OAAO,SAASC,WAAWC,KAA6B,EAAEC,IAAkB;QAC1E,OAAO,IAAIC,QAAQ,SAAUC,OAAO,EAAEC,MAAM;YAC1C,IAAIC,eAAe,SAAUC,OAAe;gBAC1C,0FAA0F;gBAC1F,wBAAwB,GACxB,IAAIC,SAAS,OAAOC,YAAY,eAAeR,iBAAiBQ,UAAUR,MAAMS,KAAK,KAAKT;gBAC1FL,MAAMY,QAAQN,MACXS,IAAI,CAAC,SAAUC,QAAQ;oBACtB,IAAIC,MAAMC,OAAO,CAACf,YAAYA,QAAQgB,OAAO,CAACH,SAASI,MAAM,MAAM,CAAC,GAAG;wBACrEZ,QAAQQ;oBACV,OAAO,IAAI,OAAOb,YAAY,YAAY;wBACxC,IAAI;4BACF,OAAOI,QAAQC,OAAO,CAACL,QAAQQ,SAAS,MAAMK,WAC3CD,IAAI,CAAC,SAAUM,eAAe;gCAC7B,IAAIA,iBAAiB;oCACnBC,MAAMX,SAAS,MAAMK;gCACvB,OAAO;oCACLR,QAAQQ;gCACV;4BACF,GACCO,KAAK,CAACd;wBACX,EAAE,OAAOe,OAAO;4BACdf,OAAOe;wBACT;oBACF,OAAO;wBACL,IAAIb,UAAUV,SAAS;4BACrBqB,MAAMX,SAAS,MAAMK;wBACvB,OAAO;4BACLR,QAAQQ;wBACV;oBACF;oBACA;gBACF,GACCO,KAAK,CAAC,SAAUC,KAAK;oBACpB,IAAI,OAAOrB,YAAY,YAAY;wBACjC,IAAI;4BACF,oCAAoC;4BACpCI,QAAQC,OAAO,CAACL,QAAQQ,SAASa,OAAO,OACrCT,IAAI,CAAC,SAAUM,eAAe;gCAC7B,IAAIA,iBAAiB;oCACnBC,MAAMX,SAASa,OAAO;gCACxB,OAAO;oCACLf,OAAOe;gCACT;4BACF,GACCD,KAAK,CAAC,SAAUC,KAAK;gCACpBf,OAAOe;4BACT;wBACJ,EAAE,OAAOA,OAAO;4BACdf,OAAOe;wBACT;oBACF,OAAO,IAAIb,UAAUV,SAAS;wBAC5BqB,MAAMX,SAASa,OAAO;oBACxB,OAAO;wBACLf,OAAOe;oBACT;gBACF;YACJ;YAEA,SAASF,MAAMX,OAAe,EAAEa,KAAU,EAAER,QAAyB;gBACnE,IAAIS,QAAQ,OAAOvB,eAAe,aAAaA,WAAWS,SAASa,OAAOR,YAAYd;gBACtFwB,WAAW;oBACThB,aAAa,EAAEC;gBACjB,GAAGc;YACL;YAEAf,aAAa;QACf;IACF;AACF"}
package/lib/index.js CHANGED
@@ -30,14 +30,15 @@ export { isClass } from './langs/isClass.js';
30
30
  export { isDefined } from './langs/isDefined.js';
31
31
  export { isEmptyObject } from './langs/isEmptyObject.js';
32
32
  export { isPlainObject } from './langs/isPlainObject.js';
33
+ export { ifPresent } from './langs/ifPresent.js';
33
34
  export { parseBoolean } from './langs/parseBoolean.js';
34
35
  export { maybeFunction } from './langs/MaybeFunction.js';
35
36
  export { memoize } from './langs/memoize.js';
36
37
  export { mixin } from './langs/mixin.js';
37
38
  export { getObjectId } from './langs/getObjectId.js';
38
39
  export { getGlobalStates, setGlobalStates } from './langs/getGlobalStates.js';
39
- export { AsyncCloser } from './runtime/AsyncCloser.js';
40
- export { Closer } from './runtime/Closer.js';
40
+ export { AsyncCloser } from './langs/AsyncCloser.js';
41
+ export { Closer } from './langs/Closer.js';
41
42
  export { isUUID } from './validations/isUUID.js';
42
43
  export { parseTimestamp } from './validations/parseTimestamp.js';
43
44
  // modules
@@ -65,12 +66,13 @@ export { copy } from './browsers/copy.js';
65
66
  export { download } from './browsers/download.js';
66
67
  export { loadScripts, loadStyles } from './browsers/loaders.js';
67
68
  export { getFileFromDataTransfer } from './browsers/getFileFromDataTransfer.js';
68
- // polyfills
69
- export { getGlobalThis } from './runtime/getGlobalThis.js';
70
- export { structuredClone } from './runtime/structuredClone.js';
69
+ // web & spec
70
+ export { requestIdleCallback, cancelIdleCallback } from './web/requestIdleCallback.js';
71
+ export { randomUUID } from './web/randomUUID.js';
72
+ export { getRandomValues } from './web/getRandomValues.js';
73
+ export { getGlobalThis } from './web/getGlobalThis.js';
74
+ export { structuredClone } from './web/structuredClone.js';
71
75
  // crypto
72
- export { randomUUID } from './crypto/randomUUID.js';
73
- export { getRandomValues } from './crypto/getRandomValues.js';
74
76
  export { sha1, sha256, sha384, sha512, hmac } from './crypto/hashing.js';
75
77
  export { md5 } from './crypto/md5.js';
76
78
  export { hex } from './crypto/base.js';
package/lib/index.js.map CHANGED
@@ -1 +1 @@
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';\nexport { getObjectId } from './langs/getObjectId';\nexport { getGlobalStates, setGlobalStates } from './langs/getGlobalStates';\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","getObjectId","getGlobalStates","setGlobalStates","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"],"mappings":"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"}
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 { ifPresent } from './langs/ifPresent';\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';\nexport { getObjectId } from './langs/getObjectId';\nexport { getGlobalStates, setGlobalStates } from './langs/getGlobalStates';\n\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 { 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// web & spec\nexport { requestIdleCallback, cancelIdleCallback } from './web/requestIdleCallback';\nexport { randomUUID } from './web/randomUUID';\nexport { getRandomValues } from './web/getRandomValues';\nexport { getGlobalThis } from './web/getGlobalThis';\nexport { structuredClone } from './web/structuredClone';\n\n// crypto\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","ifPresent","parseBoolean","maybeFunction","memoize","mixin","getObjectId","getGlobalStates","setGlobalStates","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","requestIdleCallback","cancelIdleCallback","randomUUID","getRandomValues","getGlobalThis","structuredClone","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,5 +1,5 @@
1
1
  import { classOf } from '../langs/classOf.js';
2
- import { getGlobalThis } from '../runtime/getGlobalThis.js';
2
+ import { getGlobalThis } from '../web/getGlobalThis.js';
3
3
  import { decodeBase64ToUint8Array, encodeArrayBufferToBase64 } from './base64.js';
4
4
  import { isBuffer } from './isBuffer.js';
5
5
  export var ArrayBuffers;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/io/ArrayBuffers.ts"],"sourcesContent":["import { classOf } from '../langs/classOf';\nimport { getGlobalThis } from '../runtime/getGlobalThis';\nimport { decodeBase64ToUint8Array, encodeArrayBufferToBase64 } from './base64';\nimport { isBuffer } from './isBuffer';\n\n/**\n * Various utils to work with {@link ArrayBuffer}\n *\n * @see https://github.com/tc39/proposal-resizablearraybuffer\n */\nexport namespace ArrayBuffers {\n /*\nUint8Array to/from base64 and hex\nStage 3\nUint8Array.fromBase64, Uint8Array.prototype.toBase64\nUint8Array.fromHex, Uint8Array.prototype.toHex\nhttps://github.com/tc39/proposal-arraybuffer-base64\n */\n\n /*\nIn-Place Resizable and Growable ArrayBuffers\nStage 4\nChrome 111, Nodejs 20, Safari 16.4\n\nSharedArrayBuffer & ArrayBuffer\nconstructor(byteLength, {maxByteLength})\nprototype.resize(newByteLength)\nprototype.slice(start, end)\nprototype.{resizable,maxByteLength}\nhttps://github.com/tc39/proposal-resizablearraybuffer\n */\n\n export type BinaryStringEncoding =\n | 'ascii'\n | 'utf16le'\n // | 'utf-16le'\n | 'ucs2'\n | 'ucs-2'\n | 'base64'\n | 'base64url'\n | 'latin1'\n | 'binary'\n | 'utf8'\n | 'utf-8'\n | 'hex';\n\n let nativeBufferAllowed: boolean = true;\n let isBufferAvailable: undefined | boolean;\n\n /**\n * isNativeBufferAvailable check if the native {@link Buffer} is available\n */\n export function isNativeBufferAvailable(): boolean {\n // eslint-disable-next-line no-return-assign\n return (isBufferAvailable ??= !(getGlobalThis().Buffer as any)?.isPollyfill?.());\n }\n\n export function isNativeBufferAllowed(): boolean {\n return Boolean(nativeBufferAllowed && isBufferAvailable);\n }\n\n export function setNativeBufferAllowed(v: boolean): void {\n nativeBufferAllowed = v;\n }\n\n /**\n * isArrayBuffer check if the given value is an {@link ArrayBuffer}\n */\n export function isArrayBuffer(v: any): v is ArrayBuffer {\n return v instanceof ArrayBuffer;\n }\n\n /**\n * slice the given view with the given offset and length, will handle the {@link Buffer} as well\n *\n * @see {@link https://nodejs.org/api/buffer.html#bufslicestart-end Buffer.slice}\n */\n export function slice<T extends TypedArray>(o: T, start?: number, end?: number): T {\n // NodeJS Buffer slice is not the same as UInt8Array slice\n // https://nodejs.org/api/buffer.html#bufslicestart-end\n if (isBuffer(o)) {\n return Uint8Array.prototype.slice.call(o, start, end) as T;\n }\n return o.slice(start, end) as T;\n }\n\n /**\n * asView convert the given value to given {@link TypedArray} view\n *\n * TypedArray can be {@link Buffer}, will avoid copy\n */\n export function asView<C extends ArrayBufferViewConstructor<unknown>>(\n TypedArray: C,\n v: BufferSource,\n byteOffset?: number,\n byteLength?: number,\n ): InstanceType<C> {\n if (v instanceof TypedArray && (byteOffset ?? 0) === 0 && byteLength === undefined) {\n return v as InstanceType<C>;\n }\n if (ArrayBuffer.isView(v) || isBuffer(v)) {\n if (isNativeBufferAllowed() && (TypedArray as any) === Buffer) {\n // new Buffer() is deprecated\n return Buffer.from(v.buffer, byteOffset, byteLength) as InstanceType<C>;\n }\n return new TypedArray(v.buffer, v.byteOffset + (byteOffset ?? 0), byteLength ?? v.byteLength) as InstanceType<C>;\n }\n return new TypedArray(v, byteOffset, byteLength) as InstanceType<C>;\n }\n\n /**\n * toString convert the given {@link BufferSource} to string\n */\n export function toString(source: BufferSource | string, encoding: BinaryStringEncoding = 'utf8'): string {\n // 'ascii' 'utf16le' | 'ucs2' | 'ucs-2' | 'base64' | 'base64url' | 'latin1' | 'binary' | 'hex'\n if (typeof source === 'string') {\n switch (encoding) {\n case 'base64':\n return btoa(source);\n case 'utf-8':\n case 'utf8':\n return source;\n default:\n throw new Error(`[ArrayBuffers.toString] Unsupported encoding for string: ${encoding}`);\n }\n }\n let u8 = asView(Uint8Array, source);\n if (isNativeBufferAllowed()) {\n return Buffer.from(u8).toString(encoding);\n }\n // reference\n // https://github.com/feross/buffer/blob/master/index.js\n switch (encoding) {\n case 'hex': {\n return [...u8].map((b) => hexLookupTable[b]).join('');\n }\n case 'base64': {\n return encodeArrayBufferToBase64(u8);\n }\n case 'utf8':\n // falls through\n case 'utf-8':\n return new TextDecoder().decode(source);\n case 'ascii': {\n return String.fromCharCode(...u8.map((v) => v & 0x7f));\n }\n case 'latin1':\n // falls through\n case 'binary': {\n return String.fromCharCode(...u8);\n }\n case 'ucs2':\n // falls through\n case 'ucs-2':\n // case 'utf-16le':\n // falls through\n case 'utf16le': {\n let res = '';\n // If length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < u8.length - 1; i += 2) {\n res += String.fromCharCode(u8[i] + u8[i + 1] * 256);\n }\n return res;\n }\n default:\n throw new Error(`[ArrayBuffers.toString] Unknown encoding: ${encoding}`);\n }\n }\n\n function normalizeEncoding(encoding: string | undefined) {\n switch (encoding?.toLowerCase()) {\n case 'utf-8':\n case 'utf8':\n return 'utf8';\n case 'utf-16le':\n case 'ucs2':\n case 'ucs-2':\n return 'utf16le';\n case 'hex':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'utf16le':\n return encoding;\n default:\n return undefined;\n }\n }\n\n /**\n * Returns true if encoding is the name of a supported character encoding, or false otherwise.\n */\n export function isEncoding(v?: string): v is BinaryStringEncoding {\n return normalizeEncoding(v) !== undefined;\n }\n\n export function toJSON<T = any>(v: BufferSource | string, reviver?: (this: any, key: string, value: any) => any): T {\n return JSON.parse(toString(v), reviver);\n }\n\n /**\n * from convert the given value to {@link ArrayBuffer} like\n */\n export function from(\n src: string | BufferSource | Array<number> | Iterable<number>,\n encoding?: BinaryStringEncoding,\n ): ArrayBuffer | TypedArray;\n /**\n * from convert the given value to {@link TypedArray}\n */\n export function from<C extends ArrayBufferViewConstructor<unknown>>(\n src: string | BufferSource | Array<number> | Iterable<number>,\n encoding: BinaryStringEncoding,\n TypedArray: C,\n ): InstanceType<C>;\n export function from(\n src: string | BufferSource | Array<number> | Iterable<number>,\n encoding: BinaryStringEncoding = 'utf8',\n view?: any,\n ): any {\n if (!src) {\n return new (view || ArrayBuffer)(0);\n }\n if (isBufferSource(src)) {\n return view ? asView(view, src) : src;\n }\n // Array<number> | Iterable<number>\n if ((typeof src !== 'string' && isIterable(src)) || Array.isArray(src)) {\n return (view || Uint8Array).from(src);\n }\n if (view) {\n return asView(view, from(src, encoding));\n }\n if (typeof src === 'string') {\n // is string\n if (isNativeBufferAllowed()) {\n return Buffer.from(src, encoding);\n }\n switch (encoding) {\n case 'utf-8':\n // falls through\n case 'utf8':\n return new TextEncoder().encode(src).buffer;\n case 'base64':\n // replaceAll need higher version of nodejs\n // return decodeBase64ToArrayBuffer(v.replace(/[^0-9a-zA-Z=+/_]/g, ''));\n return fromBase64(src);\n case 'hex':\n // return new Uint8Array(v.match(/.{1,2}/g)!.map((byte) => parseInt(byte, 16))).buffer;\n return fromHex(src);\n default:\n throw new Error(`ArrayBuffers.from unsupported encoding: ${encoding}`);\n }\n }\n\n const type = classOf(src);\n throw new TypeError(`ArrayBuffers.from unsupported type ${type}`);\n }\n\n /**\n * concat the given {@link BufferSource} to a new {@link ArrayBuffer}\n */\n export function concat(buffers: Array<BufferSource>, result?: ArrayBuffer, offset = 0): ArrayBuffer {\n // https://stackoverflow.com/questions/10786128/appending-arraybuffers\n\n const length = buffers.reduce((a, b) => a + b.byteLength, 0);\n const r = result ? new Uint8Array(result) : new Uint8Array(length);\n for (const buffer of buffers) {\n if (!buffer?.byteLength) continue;\n let n: Uint8Array;\n if (buffer instanceof ArrayBuffer) {\n n = new Uint8Array(buffer);\n } else if (ArrayBuffer.isView(buffer)) {\n n = new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n } else {\n throw new Error(`ArrayBuffers.concat unsupported type ${classOf(buffer)}`);\n }\n r.set(n, offset);\n offset += buffer.byteLength;\n }\n return r.buffer;\n }\n\n export function fromBase64(v: string): Uint8Array {\n if ('fromBase64' in Uint8Array) {\n return Uint8Array.fromBase64(v);\n }\n if (isNativeBufferAllowed()) {\n return Buffer.from(v, 'base64');\n }\n return decodeBase64ToUint8Array(v.replace(/[^0-9a-zA-Z=+/_]/g, ''));\n }\n\n export function fromHex(v: string): Uint8Array {\n if ('fromHex' in Uint8Array) {\n return Uint8Array.fromHex(v);\n }\n if (isNativeBufferAllowed()) {\n return Buffer.from(v, 'hex');\n }\n return new Uint8Array(v.match(/.{1,2}/g)!.map((byte) => parseInt(byte, 16)));\n }\n\n /**\n * toBase64 convert the given {@link BufferSource} to base64 string\n * @param source if string, will be encoded as utf8\n */\n export function toBase64(source: BufferSource | string): string {\n if (typeof source === 'string') {\n source = new TextEncoder().encode(source);\n }\n if ('toBase64' in Uint8Array.prototype) {\n return toUint8Array(source).toBase64();\n }\n if (isNativeBufferAllowed()) {\n return Buffer.from(asView(Uint8Array, source)).toString('base64');\n }\n return encodeArrayBufferToBase64(toArrayBuffer(source));\n }\n\n export function toHex(v: BufferSource): string {\n if ('toHex' in Uint8Array.prototype) {\n return toUint8Array(v).toHex();\n }\n if (isNativeBufferAllowed()) {\n return Buffer.from(asView(Uint8Array, v)).toString('hex');\n }\n return toString(v, 'hex');\n }\n\n export function resize(v: ArrayBuffer, newByteLength?: number, maxByteLength?: number): ArrayBuffer {\n if (newByteLength === undefined || newByteLength === null) {\n return v;\n }\n\n // Chrome 111, Nodejs 20\n if ('resize' in v && typeof v.resize === 'function') {\n if ('resizable' in v && v.resizable) {\n if ('maxByteLength' in v && typeof v.maxByteLength === 'number' && v.maxByteLength >= newByteLength) {\n v.resize(newByteLength);\n return v as ArrayBuffer;\n }\n }\n }\n\n const old = v;\n const newBuf = new ArrayBuffer(newByteLength, { maxByteLength: maxByteLength });\n const oldView = new Uint8Array(old);\n const newView = new Uint8Array(newBuf);\n newView.set(oldView);\n return newBuf;\n }\n\n export function toArrayBuffer(v: BufferSource): ArrayBuffer {\n if (v instanceof ArrayBuffer) {\n return v;\n }\n if (ArrayBuffer.isView(v)) {\n if (v.byteOffset > 0) {\n throw new Error('ArrayBuffers.toArrayBuffer do not support view with offset');\n }\n return v.buffer;\n }\n throw new Error(`ArrayBuffers.toArrayBuffer unsupported type ${classOf(v)}`);\n }\n\n export function toUint8Array(v: BufferSource): Uint8Array {\n return asView(Uint8Array, v);\n }\n\n export function alloc(size: number, fill?: string | number, encoding?: BinaryStringEncoding): ArrayBuffer {\n if (fill !== undefined) {\n if (typeof fill === 'number') {\n return new Uint8Array(size).fill(fill);\n }\n // as cast\n // https://stackoverflow.com/questions/73994091\n return asView(Uint8Array, from(fill, encoding)).slice(0, size);\n }\n return new ArrayBuffer(size);\n }\n}\n\nexport type TypedArray =\n | Uint8Array\n | Uint8ClampedArray\n | Uint16Array\n | Uint32Array\n | Int8Array\n | Int16Array\n | Int32Array\n | BigUint64Array\n | BigInt64Array\n | Float32Array\n | Float64Array;\n\ntype ArrayBufferViewConstructor<T> = new (buffer: ArrayBufferLike, byteOffset?: number, byteLength?: number) => T;\n\nconst hexLookupTable = (function () {\n const alphabet = '0123456789abcdef';\n const table = new Array(256);\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16;\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j];\n }\n }\n return table;\n})();\n\ndeclare global {\n interface ArrayBuffer {\n resize?: (newByteLength: number) => void;\n resizable?: boolean;\n }\n\n interface ArrayBufferConstructor {\n new (byteLength: number, opts?: { maxByteLength?: number }): ArrayBuffer;\n }\n\n interface SharedArrayBuffer {\n resize?: (newByteLength: number) => void;\n resizable?: boolean;\n }\n\n interface Uint8Array {\n toBase64(): string;\n\n toHex(): string;\n }\n\n interface Uint8ArrayConstructor {\n fromBase64(v: string): Uint8Array;\n\n fromHex(v: string): Uint8Array;\n }\n}\n\nfunction isIterable(obj: any): obj is Iterable<any> {\n return typeof obj?.[Symbol.iterator] === 'function';\n}\n\nfunction isBufferSource(v: any): v is BufferSource {\n return ArrayBuffer.isView(v) || v instanceof ArrayBuffer;\n}\n"],"names":["classOf","getGlobalThis","decodeBase64ToUint8Array","encodeArrayBufferToBase64","isBuffer","ArrayBuffers","nativeBufferAllowed","isBufferAvailable","isNativeBufferAvailable","Buffer","isPollyfill","isNativeBufferAllowed","Boolean","setNativeBufferAllowed","v","isArrayBuffer","ArrayBuffer","slice","o","start","end","Uint8Array","prototype","call","asView","TypedArray","byteOffset","byteLength","undefined","isView","from","buffer","toString","source","encoding","btoa","Error","u8","map","b","hexLookupTable","join","TextDecoder","decode","String","fromCharCode","res","i","length","normalizeEncoding","toLowerCase","isEncoding","toJSON","reviver","JSON","parse","src","view","isBufferSource","isIterable","Array","isArray","TextEncoder","encode","fromBase64","fromHex","type","TypeError","concat","buffers","result","offset","reduce","a","r","n","set","replace","match","byte","parseInt","toBase64","toUint8Array","toArrayBuffer","toHex","resize","newByteLength","maxByteLength","resizable","old","newBuf","oldView","newView","alloc","size","fill","alphabet","table","i16","j","obj","Symbol","iterator"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/io/ArrayBuffers.ts"],"sourcesContent":["import { classOf } from '../langs/classOf';\nimport { getGlobalThis } from '../web/getGlobalThis';\nimport { decodeBase64ToUint8Array, encodeArrayBufferToBase64 } from './base64';\nimport { isBuffer } from './isBuffer';\n\n/**\n * Various utils to work with {@link ArrayBuffer}\n *\n * @see https://github.com/tc39/proposal-resizablearraybuffer\n */\nexport namespace ArrayBuffers {\n /*\nUint8Array to/from base64 and hex\nStage 3\nUint8Array.fromBase64, Uint8Array.prototype.toBase64\nUint8Array.fromHex, Uint8Array.prototype.toHex\nhttps://github.com/tc39/proposal-arraybuffer-base64\n */\n\n /*\nIn-Place Resizable and Growable ArrayBuffers\nStage 4\nChrome 111, Nodejs 20, Safari 16.4\n\nSharedArrayBuffer & ArrayBuffer\nconstructor(byteLength, {maxByteLength})\nprototype.resize(newByteLength)\nprototype.slice(start, end)\nprototype.{resizable,maxByteLength}\nhttps://github.com/tc39/proposal-resizablearraybuffer\n */\n\n export type BinaryStringEncoding =\n | 'ascii'\n | 'utf16le'\n // | 'utf-16le'\n | 'ucs2'\n | 'ucs-2'\n | 'base64'\n | 'base64url'\n | 'latin1'\n | 'binary'\n | 'utf8'\n | 'utf-8'\n | 'hex';\n\n let nativeBufferAllowed: boolean = true;\n let isBufferAvailable: undefined | boolean;\n\n /**\n * isNativeBufferAvailable check if the native {@link Buffer} is available\n */\n export function isNativeBufferAvailable(): boolean {\n // eslint-disable-next-line no-return-assign\n return (isBufferAvailable ??= !(getGlobalThis().Buffer as any)?.isPollyfill?.());\n }\n\n export function isNativeBufferAllowed(): boolean {\n return Boolean(nativeBufferAllowed && isBufferAvailable);\n }\n\n export function setNativeBufferAllowed(v: boolean): void {\n nativeBufferAllowed = v;\n }\n\n /**\n * isArrayBuffer check if the given value is an {@link ArrayBuffer}\n */\n export function isArrayBuffer(v: any): v is ArrayBuffer {\n return v instanceof ArrayBuffer;\n }\n\n /**\n * slice the given view with the given offset and length, will handle the {@link Buffer} as well\n *\n * @see {@link https://nodejs.org/api/buffer.html#bufslicestart-end Buffer.slice}\n */\n export function slice<T extends TypedArray>(o: T, start?: number, end?: number): T {\n // NodeJS Buffer slice is not the same as UInt8Array slice\n // https://nodejs.org/api/buffer.html#bufslicestart-end\n if (isBuffer(o)) {\n return Uint8Array.prototype.slice.call(o, start, end) as T;\n }\n return o.slice(start, end) as T;\n }\n\n /**\n * asView convert the given value to given {@link TypedArray} view\n *\n * TypedArray can be {@link Buffer}, will avoid copy\n */\n export function asView<C extends ArrayBufferViewConstructor<unknown>>(\n TypedArray: C,\n v: BufferSource,\n byteOffset?: number,\n byteLength?: number,\n ): InstanceType<C> {\n if (v instanceof TypedArray && (byteOffset ?? 0) === 0 && byteLength === undefined) {\n return v as InstanceType<C>;\n }\n if (ArrayBuffer.isView(v) || isBuffer(v)) {\n if (isNativeBufferAllowed() && (TypedArray as any) === Buffer) {\n // new Buffer() is deprecated\n return Buffer.from(v.buffer, byteOffset, byteLength) as InstanceType<C>;\n }\n return new TypedArray(v.buffer, v.byteOffset + (byteOffset ?? 0), byteLength ?? v.byteLength) as InstanceType<C>;\n }\n return new TypedArray(v, byteOffset, byteLength) as InstanceType<C>;\n }\n\n /**\n * toString convert the given {@link BufferSource} to string\n */\n export function toString(source: BufferSource | string, encoding: BinaryStringEncoding = 'utf8'): string {\n // 'ascii' 'utf16le' | 'ucs2' | 'ucs-2' | 'base64' | 'base64url' | 'latin1' | 'binary' | 'hex'\n if (typeof source === 'string') {\n switch (encoding) {\n case 'base64':\n return btoa(source);\n case 'utf-8':\n case 'utf8':\n return source;\n default:\n throw new Error(`[ArrayBuffers.toString] Unsupported encoding for string: ${encoding}`);\n }\n }\n let u8 = asView(Uint8Array, source);\n if (isNativeBufferAllowed()) {\n return Buffer.from(u8).toString(encoding);\n }\n // reference\n // https://github.com/feross/buffer/blob/master/index.js\n switch (encoding) {\n case 'hex': {\n return [...u8].map((b) => hexLookupTable[b]).join('');\n }\n case 'base64': {\n return encodeArrayBufferToBase64(u8);\n }\n case 'utf8':\n // falls through\n case 'utf-8':\n return new TextDecoder().decode(source);\n case 'ascii': {\n return String.fromCharCode(...u8.map((v) => v & 0x7f));\n }\n case 'latin1':\n // falls through\n case 'binary': {\n return String.fromCharCode(...u8);\n }\n case 'ucs2':\n // falls through\n case 'ucs-2':\n // case 'utf-16le':\n // falls through\n case 'utf16le': {\n let res = '';\n // If length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < u8.length - 1; i += 2) {\n res += String.fromCharCode(u8[i] + u8[i + 1] * 256);\n }\n return res;\n }\n default:\n throw new Error(`[ArrayBuffers.toString] Unknown encoding: ${encoding}`);\n }\n }\n\n function normalizeEncoding(encoding: string | undefined) {\n switch (encoding?.toLowerCase()) {\n case 'utf-8':\n case 'utf8':\n return 'utf8';\n case 'utf-16le':\n case 'ucs2':\n case 'ucs-2':\n return 'utf16le';\n case 'hex':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'utf16le':\n return encoding;\n default:\n return undefined;\n }\n }\n\n /**\n * Returns true if encoding is the name of a supported character encoding, or false otherwise.\n */\n export function isEncoding(v?: string): v is BinaryStringEncoding {\n return normalizeEncoding(v) !== undefined;\n }\n\n export function toJSON<T = any>(v: BufferSource | string, reviver?: (this: any, key: string, value: any) => any): T {\n return JSON.parse(toString(v), reviver);\n }\n\n /**\n * from convert the given value to {@link ArrayBuffer} like\n */\n export function from(\n src: string | BufferSource | Array<number> | Iterable<number>,\n encoding?: BinaryStringEncoding,\n ): ArrayBuffer | TypedArray;\n /**\n * from convert the given value to {@link TypedArray}\n */\n export function from<C extends ArrayBufferViewConstructor<unknown>>(\n src: string | BufferSource | Array<number> | Iterable<number>,\n encoding: BinaryStringEncoding,\n TypedArray: C,\n ): InstanceType<C>;\n export function from(\n src: string | BufferSource | Array<number> | Iterable<number>,\n encoding: BinaryStringEncoding = 'utf8',\n view?: any,\n ): any {\n if (!src) {\n return new (view || ArrayBuffer)(0);\n }\n if (isBufferSource(src)) {\n return view ? asView(view, src) : src;\n }\n // Array<number> | Iterable<number>\n if ((typeof src !== 'string' && isIterable(src)) || Array.isArray(src)) {\n return (view || Uint8Array).from(src);\n }\n if (view) {\n return asView(view, from(src, encoding));\n }\n if (typeof src === 'string') {\n // is string\n if (isNativeBufferAllowed()) {\n return Buffer.from(src, encoding);\n }\n switch (encoding) {\n case 'utf-8':\n // falls through\n case 'utf8':\n return new TextEncoder().encode(src).buffer;\n case 'base64':\n // replaceAll need higher version of nodejs\n // return decodeBase64ToArrayBuffer(v.replace(/[^0-9a-zA-Z=+/_]/g, ''));\n return fromBase64(src);\n case 'hex':\n // return new Uint8Array(v.match(/.{1,2}/g)!.map((byte) => parseInt(byte, 16))).buffer;\n return fromHex(src);\n default:\n throw new Error(`ArrayBuffers.from unsupported encoding: ${encoding}`);\n }\n }\n\n const type = classOf(src);\n throw new TypeError(`ArrayBuffers.from unsupported type ${type}`);\n }\n\n /**\n * concat the given {@link BufferSource} to a new {@link ArrayBuffer}\n */\n export function concat(buffers: Array<BufferSource>, result?: ArrayBuffer, offset = 0): ArrayBuffer {\n // https://stackoverflow.com/questions/10786128/appending-arraybuffers\n\n const length = buffers.reduce((a, b) => a + b.byteLength, 0);\n const r = result ? new Uint8Array(result) : new Uint8Array(length);\n for (const buffer of buffers) {\n if (!buffer?.byteLength) continue;\n let n: Uint8Array;\n if (buffer instanceof ArrayBuffer) {\n n = new Uint8Array(buffer);\n } else if (ArrayBuffer.isView(buffer)) {\n n = new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n } else {\n throw new Error(`ArrayBuffers.concat unsupported type ${classOf(buffer)}`);\n }\n r.set(n, offset);\n offset += buffer.byteLength;\n }\n return r.buffer;\n }\n\n export function fromBase64(v: string): Uint8Array {\n if ('fromBase64' in Uint8Array) {\n return Uint8Array.fromBase64(v);\n }\n if (isNativeBufferAllowed()) {\n return Buffer.from(v, 'base64');\n }\n return decodeBase64ToUint8Array(v.replace(/[^0-9a-zA-Z=+/_]/g, ''));\n }\n\n export function fromHex(v: string): Uint8Array {\n if ('fromHex' in Uint8Array) {\n return Uint8Array.fromHex(v);\n }\n if (isNativeBufferAllowed()) {\n return Buffer.from(v, 'hex');\n }\n return new Uint8Array(v.match(/.{1,2}/g)!.map((byte) => parseInt(byte, 16)));\n }\n\n /**\n * toBase64 convert the given {@link BufferSource} to base64 string\n * @param source if string, will be encoded as utf8\n */\n export function toBase64(source: BufferSource | string): string {\n if (typeof source === 'string') {\n source = new TextEncoder().encode(source);\n }\n if ('toBase64' in Uint8Array.prototype) {\n return toUint8Array(source).toBase64();\n }\n if (isNativeBufferAllowed()) {\n return Buffer.from(asView(Uint8Array, source)).toString('base64');\n }\n return encodeArrayBufferToBase64(toArrayBuffer(source));\n }\n\n export function toHex(v: BufferSource): string {\n if ('toHex' in Uint8Array.prototype) {\n return toUint8Array(v).toHex();\n }\n if (isNativeBufferAllowed()) {\n return Buffer.from(asView(Uint8Array, v)).toString('hex');\n }\n return toString(v, 'hex');\n }\n\n export function resize(v: ArrayBuffer, newByteLength?: number, maxByteLength?: number): ArrayBuffer {\n if (newByteLength === undefined || newByteLength === null) {\n return v;\n }\n\n // Chrome 111, Nodejs 20\n if ('resize' in v && typeof v.resize === 'function') {\n if ('resizable' in v && v.resizable) {\n if ('maxByteLength' in v && typeof v.maxByteLength === 'number' && v.maxByteLength >= newByteLength) {\n v.resize(newByteLength);\n return v as ArrayBuffer;\n }\n }\n }\n\n const old = v;\n const newBuf = new ArrayBuffer(newByteLength, { maxByteLength: maxByteLength });\n const oldView = new Uint8Array(old);\n const newView = new Uint8Array(newBuf);\n newView.set(oldView);\n return newBuf;\n }\n\n export function toArrayBuffer(v: BufferSource): ArrayBuffer {\n if (v instanceof ArrayBuffer) {\n return v;\n }\n if (ArrayBuffer.isView(v)) {\n if (v.byteOffset > 0) {\n throw new Error('ArrayBuffers.toArrayBuffer do not support view with offset');\n }\n return v.buffer;\n }\n throw new Error(`ArrayBuffers.toArrayBuffer unsupported type ${classOf(v)}`);\n }\n\n export function toUint8Array(v: BufferSource): Uint8Array {\n return asView(Uint8Array, v);\n }\n\n export function alloc(size: number, fill?: string | number, encoding?: BinaryStringEncoding): ArrayBuffer {\n if (fill !== undefined) {\n if (typeof fill === 'number') {\n return new Uint8Array(size).fill(fill);\n }\n // as cast\n // https://stackoverflow.com/questions/73994091\n return asView(Uint8Array, from(fill, encoding)).slice(0, size);\n }\n return new ArrayBuffer(size);\n }\n}\n\nexport type TypedArray =\n | Uint8Array\n | Uint8ClampedArray\n | Uint16Array\n | Uint32Array\n | Int8Array\n | Int16Array\n | Int32Array\n | BigUint64Array\n | BigInt64Array\n | Float32Array\n | Float64Array;\n\ntype ArrayBufferViewConstructor<T> = new (buffer: ArrayBufferLike, byteOffset?: number, byteLength?: number) => T;\n\nconst hexLookupTable = (function () {\n const alphabet = '0123456789abcdef';\n const table = new Array(256);\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16;\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j];\n }\n }\n return table;\n})();\n\ndeclare global {\n interface ArrayBuffer {\n resize?: (newByteLength: number) => void;\n resizable?: boolean;\n }\n\n interface ArrayBufferConstructor {\n new (byteLength: number, opts?: { maxByteLength?: number }): ArrayBuffer;\n }\n\n interface SharedArrayBuffer {\n resize?: (newByteLength: number) => void;\n resizable?: boolean;\n }\n\n interface Uint8Array {\n toBase64(): string;\n\n toHex(): string;\n }\n\n interface Uint8ArrayConstructor {\n fromBase64(v: string): Uint8Array;\n\n fromHex(v: string): Uint8Array;\n }\n}\n\nfunction isIterable(obj: any): obj is Iterable<any> {\n return typeof obj?.[Symbol.iterator] === 'function';\n}\n\nfunction isBufferSource(v: any): v is BufferSource {\n return ArrayBuffer.isView(v) || v instanceof ArrayBuffer;\n}\n"],"names":["classOf","getGlobalThis","decodeBase64ToUint8Array","encodeArrayBufferToBase64","isBuffer","ArrayBuffers","nativeBufferAllowed","isBufferAvailable","isNativeBufferAvailable","Buffer","isPollyfill","isNativeBufferAllowed","Boolean","setNativeBufferAllowed","v","isArrayBuffer","ArrayBuffer","slice","o","start","end","Uint8Array","prototype","call","asView","TypedArray","byteOffset","byteLength","undefined","isView","from","buffer","toString","source","encoding","btoa","Error","u8","map","b","hexLookupTable","join","TextDecoder","decode","String","fromCharCode","res","i","length","normalizeEncoding","toLowerCase","isEncoding","toJSON","reviver","JSON","parse","src","view","isBufferSource","isIterable","Array","isArray","TextEncoder","encode","fromBase64","fromHex","type","TypeError","concat","buffers","result","offset","reduce","a","r","n","set","replace","match","byte","parseInt","toBase64","toUint8Array","toArrayBuffer","toHex","resize","newByteLength","maxByteLength","resizable","old","newBuf","oldView","newView","alloc","size","fill","alphabet","table","i16","j","obj","Symbol","iterator"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { getGlobalThis } from '../runtime/getGlobalThis.js';
1
+ import { getGlobalThis } from '../web/getGlobalThis.js';
2
2
  const globalThis = getGlobalThis();
3
3
  /**
4
4
  * transferable object pass between workers, can work with structuredClone
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/io/isTransferable.ts"],"sourcesContent":["import { getGlobalThis } from '../runtime/getGlobalThis';\n\nconst globalThis = getGlobalThis();\n\n/**\n * transferable object pass between workers, can work with structuredClone\n *\n * - Chrome 87, FF 103, Safari X, NodeJS X\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Glossary/Transferable_objects | Transferable objects}\n */\nexport function isTransferable(v: any): v is TransferableObject {\n _ctors ||= ctors();\n return _ctors.some((ctor) => v instanceof ctor);\n}\n\nlet _ctors: any[];\n\nfunction ctors() {\n const o: any = globalThis.window || globalThis || global;\n return [\n o.ArrayBuffer,\n o.MessagePort,\n o.ReadableStream,\n o.WritableStream,\n o.TransformStream,\n o.AudioData,\n o.ImageBitmap,\n o.VideoFrame,\n o.OffscreenCanvas,\n o.RTCDataChannel,\n ].filter(Boolean);\n}\n\nexport type TransferableObject =\n | Transferable\n | ArrayBuffer\n | MessagePort\n | ReadableStream\n | WritableStream\n | TransformStream\n | AudioData\n | ImageBitmap\n | VideoFrame\n | OffscreenCanvas\n | RTCDataChannel;\n\ndeclare global {\n interface OffscreenCanvas {}\n\n interface VideoFrame {}\n\n interface AudioData {}\n}\n"],"names":["getGlobalThis","globalThis","isTransferable","v","_ctors","ctors","some","ctor","o","window","global","ArrayBuffer","MessagePort","ReadableStream","WritableStream","TransformStream","AudioData","ImageBitmap","VideoFrame","OffscreenCanvas","RTCDataChannel","filter","Boolean"],"mappings":"AAAA,SAASA,aAAa,QAAQ,2BAA2B;AAEzD,MAAMC,aAAaD;AAEnB;;;;;;CAMC,GACD,OAAO,SAASE,eAAeC,CAAM;IACnCC,WAAWC;IACX,OAAOD,OAAOE,IAAI,CAAC,CAACC,OAASJ,aAAaI;AAC5C;AAEA,IAAIH;AAEJ,SAASC;IACP,MAAMG,IAASP,WAAWQ,MAAM,IAAIR,cAAcS;IAClD,OAAO;QACLF,EAAEG,WAAW;QACbH,EAAEI,WAAW;QACbJ,EAAEK,cAAc;QAChBL,EAAEM,cAAc;QAChBN,EAAEO,eAAe;QACjBP,EAAEQ,SAAS;QACXR,EAAES,WAAW;QACbT,EAAEU,UAAU;QACZV,EAAEW,eAAe;QACjBX,EAAEY,cAAc;KACjB,CAACC,MAAM,CAACC;AACX"}
1
+ {"version":3,"sources":["../../src/io/isTransferable.ts"],"sourcesContent":["import { getGlobalThis } from '../web/getGlobalThis';\n\nconst globalThis = getGlobalThis();\n\n/**\n * transferable object pass between workers, can work with structuredClone\n *\n * - Chrome 87, FF 103, Safari X, NodeJS X\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Glossary/Transferable_objects | Transferable objects}\n */\nexport function isTransferable(v: any): v is TransferableObject {\n _ctors ||= ctors();\n return _ctors.some((ctor) => v instanceof ctor);\n}\n\nlet _ctors: any[];\n\nfunction ctors() {\n const o: any = globalThis.window || globalThis || global;\n return [\n o.ArrayBuffer,\n o.MessagePort,\n o.ReadableStream,\n o.WritableStream,\n o.TransformStream,\n o.AudioData,\n o.ImageBitmap,\n o.VideoFrame,\n o.OffscreenCanvas,\n o.RTCDataChannel,\n ].filter(Boolean);\n}\n\nexport type TransferableObject =\n | Transferable\n | ArrayBuffer\n | MessagePort\n | ReadableStream\n | WritableStream\n | TransformStream\n | AudioData\n | ImageBitmap\n | VideoFrame\n | OffscreenCanvas\n | RTCDataChannel;\n\ndeclare global {\n interface OffscreenCanvas {}\n\n interface VideoFrame {}\n\n interface AudioData {}\n}\n"],"names":["getGlobalThis","globalThis","isTransferable","v","_ctors","ctors","some","ctor","o","window","global","ArrayBuffer","MessagePort","ReadableStream","WritableStream","TransformStream","AudioData","ImageBitmap","VideoFrame","OffscreenCanvas","RTCDataChannel","filter","Boolean"],"mappings":"AAAA,SAASA,aAAa,QAAQ,uBAAuB;AAErD,MAAMC,aAAaD;AAEnB;;;;;;CAMC,GACD,OAAO,SAASE,eAAeC,CAAM;IACnCC,WAAWC;IACX,OAAOD,OAAOE,IAAI,CAAC,CAACC,OAASJ,aAAaI;AAC5C;AAEA,IAAIH;AAEJ,SAASC;IACP,MAAMG,IAASP,WAAWQ,MAAM,IAAIR,cAAcS;IAClD,OAAO;QACLF,EAAEG,WAAW;QACbH,EAAEI,WAAW;QACbJ,EAAEK,cAAc;QAChBL,EAAEM,cAAc;QAChBN,EAAEO,eAAe;QACjBP,EAAEQ,SAAS;QACXR,EAAES,WAAW;QACbT,EAAEU,UAAU;QACZV,EAAEW,eAAe;QACjBX,EAAEY,cAAc;KACjB,CAACC,MAAM,CAACC;AACX"}
@@ -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 @@
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,7 +1,15 @@
1
- import { computeIfAbsent, getGlobalThis } from '@wener/utils';
1
+ import { computeIfAbsent } from '../objects/computeIfAbsent.js';
2
+ import { getGlobalThis } from '../web/getGlobalThis.js';
2
3
  let _holder;
3
- export function setGlobalStates(states) {
4
- _holder = states;
4
+ export function setGlobalStates(a, b) {
5
+ if (typeof a === 'string') {
6
+ let s = getGlobalStates();
7
+ const last = s[a];
8
+ s[a] = b;
9
+ return last;
10
+ } else if (typeof a === 'object') {
11
+ _holder = a;
12
+ }
5
13
  }
6
14
  export function getGlobalStates(key, create) {
7
15
  _holder ||= getGlobalThis().__GLOBAL_STATES__ ||= {};
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/langs/getGlobalStates.ts"],"sourcesContent":["import { computeIfAbsent, getGlobalThis } from '@wener/utils';\n\nlet _holder: any;\n\nexport function setGlobalStates(states: Record<string, any>) {\n _holder = states;\n}\n\nexport function getGlobalStates(): Record<string, any>;\nexport function getGlobalStates<T>(key: string, create: () => T): T;\nexport function getGlobalStates<T>(key: string): T | undefined;\nexport function getGlobalStates(key?: string, create?: () => any): any {\n _holder ||= (getGlobalThis() as any).__GLOBAL_STATES__ ||= {};\n if (key) {\n if (!create) {\n return _holder[key];\n }\n return computeIfAbsent(_holder, key, create);\n }\n return _holder;\n}\n"],"names":["computeIfAbsent","getGlobalThis","_holder","setGlobalStates","states","getGlobalStates","key","create","__GLOBAL_STATES__"],"mappings":"AAAA,SAASA,eAAe,EAAEC,aAAa,QAAQ,eAAe;AAE9D,IAAIC;AAEJ,OAAO,SAASC,gBAAgBC,MAA2B;IACzDF,UAAUE;AACZ;AAKA,OAAO,SAASC,gBAAgBC,GAAY,EAAEC,MAAkB;IAC9DL,YAAY,AAACD,gBAAwBO,iBAAiB,KAAK,CAAC;IAC5D,IAAIF,KAAK;QACP,IAAI,CAACC,QAAQ;YACX,OAAOL,OAAO,CAACI,IAAI;QACrB;QACA,OAAON,gBAAgBE,SAASI,KAAKC;IACvC;IACA,OAAOL;AACT"}
1
+ {"version":3,"sources":["../../src/langs/getGlobalStates.ts"],"sourcesContent":["import { computeIfAbsent } from '../objects/computeIfAbsent';\nimport { getGlobalThis } from '../web/getGlobalThis';\n\nlet _holder: any;\n\nexport function setGlobalStates(states: Record<string, any>): Record<string, any>;\nexport function setGlobalStates<V = any>(key: string, value: V): V | undefined;\nexport function setGlobalStates(a: any, b?: any) {\n if (typeof a === 'string') {\n let s = getGlobalStates();\n const last = s[a];\n s[a] = b;\n return last;\n } else if (typeof a === 'object') {\n _holder = a;\n }\n}\n\nexport function getGlobalStates(): Record<string, any>;\nexport function getGlobalStates<T>(key: string, create: () => T): T;\nexport function getGlobalStates<T>(key: string): T | undefined;\nexport function getGlobalStates(key?: string, create?: () => any): any {\n _holder ||= (getGlobalThis() as any).__GLOBAL_STATES__ ||= {};\n if (key) {\n if (!create) {\n return _holder[key];\n }\n return computeIfAbsent(_holder, key, create);\n }\n return _holder;\n}\n"],"names":["computeIfAbsent","getGlobalThis","_holder","setGlobalStates","a","b","s","getGlobalStates","last","key","create","__GLOBAL_STATES__"],"mappings":"AAAA,SAASA,eAAe,QAAQ,6BAA6B;AAC7D,SAASC,aAAa,QAAQ,uBAAuB;AAErD,IAAIC;AAIJ,OAAO,SAASC,gBAAgBC,CAAM,EAAEC,CAAO;IAC7C,IAAI,OAAOD,MAAM,UAAU;QACzB,IAAIE,IAAIC;QACR,MAAMC,OAAOF,CAAC,CAACF,EAAE;QACjBE,CAAC,CAACF,EAAE,GAAGC;QACP,OAAOG;IACT,OAAO,IAAI,OAAOJ,MAAM,UAAU;QAChCF,UAAUE;IACZ;AACF;AAKA,OAAO,SAASG,gBAAgBE,GAAY,EAAEC,MAAkB;IAC9DR,YAAY,AAACD,gBAAwBU,iBAAiB,KAAK,CAAC;IAC5D,IAAIF,KAAK;QACP,IAAI,CAACC,QAAQ;YACX,OAAOR,OAAO,CAACO,IAAI;QACrB;QACA,OAAOT,gBAAgBE,SAASO,KAAKC;IACvC;IACA,OAAOR;AACT"}
@@ -0,0 +1,5 @@
1
+ export function ifPresent(value, fn) {
2
+ return value ? fn(value) : undefined;
3
+ }
4
+
5
+ //# sourceMappingURL=ifPresent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/langs/ifPresent.ts"],"sourcesContent":["export function ifPresent<T, R>(value: T, fn: (v: T) => R): R | undefined {\n return value ? fn(value) : undefined;\n}\n"],"names":["ifPresent","value","fn","undefined"],"mappings":"AAAA,OAAO,SAASA,UAAgBC,KAAQ,EAAEC,EAAe;IACvD,OAAOD,QAAQC,GAAGD,SAASE;AAC7B"}
@@ -1,7 +1,8 @@
1
1
  import fs from 'node:fs/promises';
2
2
  import path from 'node:path';
3
- import { Errors, formatBytes } from '@wener/utils';
3
+ import { Errors } from '../errors/Errors.js';
4
4
  import { getPackageDir } from '../server/index.js';
5
+ import { formatBytes } from '../strings/formatBytes.js';
5
6
  let _root;
6
7
  async function cache(dir, url) {
7
8
  const key = path.basename(url);