@svta/cml-utils 1.6.1 → 1.6.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":["base64decode: typeof decodeBase64","base64encode: typeof encodeBase64"],"sources":["../src/arrayBufferToHex.ts","../src/arrayBufferToUuid.ts","../src/decodeBase64.ts","../src/base64decode.ts","../src/encodeBase64.ts","../src/base64encode.ts","../src/convertUint8ToUint16.ts","../src/UTF_16.ts","../src/UTF_16_BE.ts","../src/UTF_16_LE.ts","../src/UTF_8.ts","../src/ValueOf.ts","../src/Encoding.ts","../src/DecodeTextOptions.ts","../src/decodeText.ts","../src/DeepReadonly.ts","../src/encodeText.ts","../src/ExclusiveRecord.ts","../src/ResourceTiming.ts","../src/getBandwidthBps.ts","../src/getBaseUrl.ts","../src/hexToArrayBuffer.ts","../src/isArrayBufferLike.ts","../src/RequestResponseType.ts","../src/HttpRequest.ts","../src/XmlNode.ts","../src/ResponseTypeMap.ts","../src/HttpResponse.ts","../src/Request.ts","../src/roundToEven.ts","../src/stringToUint16.ts","../src/TypedResult.ts","../src/unescapeHtml.ts","../src/urlToRelativePath.ts","../src/uuid.ts","../src/uuidToArrayBuffer.ts","../src/ValueOrArray.ts"],"sourcesContent":[],"mappings":";;AAWA;;;;ACEA;;;;ACLA;;iBFGgB,gBAAA,SAAyB;;;;AAAzC;;;;ACEA;;;;ACLA;;iBDKgB,iBAAA,SAA0B;;;;ADF1C;;;;ACEA;;;iBCLgB,YAAA,eAA2B;;;AFG3C;;;;ACEA;;;;ACLA;;;;ACMaA,cAAAA,YAAqB,EAAA,OAAA,YAAA;;;;AHHlC;;;;ACEA;;;;ACLA;;iBEKgB,YAAA,SAAqB;;;AJFrC;;;;ACEA;;;;ACLA;;;;ACMaA,cEAAC,YFAqB,EAAA,OEAA,YFAA;;;;AHHlC;;;;ACEA;;;iBKLgB,oBAAA,QAA4B,aAAa;;;;ANGzD;;;;ACEgB,cMRH,MAAA,GNQG,QAA0B;;;;ADF1C;;;;ACEgB,cORH,SAAA,GPQG,UAA0B;;;;ADF1C;;;;ACEgB,cQRH,SAAA,GRQG,UAA0B;;;;ADF1C;;;;ACEgB,cSRH,KAAA,GTQG,OAA0B;;;;ADF1C;;;;ACEgB,KURJ,OVQI,CAAA,CAAA,CAAA,GURS,CVQT,CAAA,MURiB,CVQjB,CAA0B;;;AAA1C;;;;ACLA;cUGa;wBACU;yBACE;ETCzB,SAAaD,OAAAA,EAAqB,OSAJ,STAI;2BSCJ;;;ARF9B;;;;ACCaC,KOSD,QAAA,GAAW,OPTW,CAAA,OOSI,QPTJ,CAAA;;;ALHlC;;;;ACEA;KYNY,iBAAA;;;AXCZ;aWGY;;;;AbAZ;;;;ACEA;;;;ACLA;;;;ACMA;iBWMgB,UAAA,OAAiB,kBAAkB,2BAA0B;;;;AdT7E;;;;ACEA;;;;ACLA;;;;ACMA;;;;ACDA;KWKY,kBAAkB,4CAA0C,IACrE,0CAA0C,aAAa,OACvD,0CAA0C,IAAI,aAAa,EAAE,QAC7D;;;;AfVH;;;;ACEA;;;;ACLA;;;iBcKgB,UAAA,gBAA0B;;;;AhBF1C;;;;ACEgB,KgBRJ,ehBQI,WgBRsB,0BAC/B,IAAI,OAAO,GAAG,KACpB,QAAQ,OAAO,QAAQ,GAAG,4CACV,IAAI,EAAE,eAErB;;;;AjBCF;;;;ACEA;KiBPY,cAAA;;;AhBEZ;;;;ACMA;;;;ACDA;;;;ACCA;;;;;ALHA;;;;ACEA;;;;ACLgB,iBiBEA,eAAA,CjBF2B,MAAA,EiBEH,cjBFG,CAAA,EAAA,MAAA;;;;AFG3C;;;;ACEA;;;;ACLA;;iBkBGgB,UAAA,mBAA6B;;;;ApBA7C;;;;ACEA;;;;ACLA;;iBmBGgB,gBAAA,eAA+B;;;;ArBA/C;;;;ACEA;;;;ACLA;;;;ACMA;;iBmBCgB,iBAAA,2BAA4C;;;AtBJ5D;;;;ACEA;;;csBJa;ErBDb,SAAgB,IAAA,EAAA,MAAA;;;;ECMhB,SAAaD,QAAAA,EAAqB,UAAA;;;;ACDlC;;KmBQY,mBAAA,GAAsB,eAAe;;;AvBVjD;;;;ACEA;KuBNY;;;AtBCZ;;;;ACMA;;;;ACDA;SoBSQ;;;AnBRR;iBmBagB;;;AlBnBhB;YkBwBW;;;AjB3BX;gBiBgCe;;;AhBhCf;SgBqCQ;;;AfrCR;;;;ACAA;;ecgDc;;;;;AxB1Cd;;;;ACEgB,KwBRJ,OAAA,GxBQI;;;cwBLH;EvBAb,UAAgB,EuBCH,OvBDG,EAAA;;;kBuBIC;AtBEjB,CAAA;;;AHHA;;;;ACEA;KyBNY,gDACX,yBACA,4BACA,mBAAmB,OACnB,0BAA0B,cAC1B,uBAAuB,UACvB,qBAAqB;;;;;AzBAtB;;;K0BJY,uBAAuB,cAAc;EzBDjD;;;WyBMU;ExBAV;;;;ECDA;;;;ECCA;;;;ECNA;;;;ECHA;;;;ECAA;;;YmBuCW;ElBvCX;;;SkB4CQ,gBAAgB;EjB5CxB;;;mBiBiDkB;AhBjDlB,CAAA;;;AXMA;;;;ACEA;;K2BLY,OAAA,GAAU;;;;A5BGtB;;;;ACEA;;;;ACLA;iB2BEgB,WAAA;;;;A7BChB;;;;ACEA;;;;ACLA;;iB4BGgB,cAAA,eAA6B;;;;A9BA7C;;;;ACEgB,K8BRJ,W9BQI;ECLhB,IAAgB,E6BFT,C7BES;Q6BDT;;;;;A/BIP;;;;ACEA;;;;ACLA;;iB8BKgB,YAAA;;;;AhCFhB;;;;ACEA;;;;ACLA;;;;ACMA;iB8BAgB,iBAAA;;;;AjCHhB;;;;ACEA;;;;ACLA;iBgCIgB,IAAA,CAAA;;;;AlCDhB;;;;ACEA;;;;ACLA;;iBiCKgB,iBAAA,gBAAiC;;;;AnCFjD;;;;ACEgB,KmCRJ,YnCQI,CAAA,CAAA,CAAA,GmCRc,CnCQd,GmCRkB,CnCQQ,EAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/arrayBufferToHex.ts","../src/arrayBufferToUuid.ts","../src/decodeBase64.ts","../src/base64decode.ts","../src/encodeBase64.ts","../src/base64encode.ts","../src/convertUint8ToUint16.ts","../src/UTF_16.ts","../src/UTF_16_BE.ts","../src/UTF_16_LE.ts","../src/UTF_8.ts","../src/ValueOf.ts","../src/Encoding.ts","../src/DecodeTextOptions.ts","../src/decodeText.ts","../src/DeepReadonly.ts","../src/encodeText.ts","../src/ExclusiveRecord.ts","../src/ResourceTiming.ts","../src/getBandwidthBps.ts","../src/getBaseUrl.ts","../src/hexToArrayBuffer.ts","../src/isArrayBufferLike.ts","../src/RequestResponseType.ts","../src/HttpRequest.ts","../src/XmlNode.ts","../src/ResponseTypeMap.ts","../src/HttpResponse.ts","../src/Request.ts","../src/roundToEven.ts","../src/stringToUint16.ts","../src/TypedResult.ts","../src/unescapeHtml.ts","../src/urlToRelativePath.ts","../src/uuid.ts","../src/uuidToArrayBuffer.ts","../src/ValueOrArray.ts"],"mappings":";;;;;;;;;;;;wBAWgB,iBAAiB,QAAQ;;;;;;;;;;;;;;wBCEzB,kBAAkB,QAAQ;;;;;;;;;;;wBCL1B,aAAa,cAAc;;;;;;;;;;;;;;;qBCM9B,qBAAqB;;;;;;;;;;;;;;wBCDlB,aAAa,QAAQ;;;;;;;;;;;;;;;qBCCxB,qBAAqB;;;;;;;;;;;wBCNlB,qBAAqB,OAAO,aAAa;;;;;;;;qBCH5C;;;;;;;;qBCAA;;;;;;;;qBCAA;;;;;;;;qBCAA;;;;;;;;YCAD,QAAQ,KAAK,QAAQ;;;;;;;;qBCMpB;WACZ,aAAsB;WACtB,cAAwB;WACxB,gBAA6B;WAC7B,gBAA6B;;;;;;;YAQlB,WAAW,eAAe;;;;;;;;YChB1B;;;;EAIX,WAAW;;;;;;;;;;;;;;;;;wBCSI,WAAW,MAAM,kBAAkB,iBAAiB,UAAS;;;;;;;;;;;;;;;;;;;;;KCFjE,aAAa,KAAK,eAAc,6BAA4B,IACrE,0BAA0B,gBAAgB,aAAa,OACvD,+BAA+B,WAAW,IAAI,aAAa,EAAE,SAC7D;;;;;;;;;;;;;;;wBCRa,WAAW,eAAe;;;;;;;;YCR9B,gBAAgB,UAAU,aAAa,QACjD,KAAK,IAAI,OAAO,GAAG,KACpB,QAAQ,OAAO,QAAQ,GAAG,2BAA0B,QAC/C,WAAW,IAAI,EAAE,iBAErB;;;;;;;;;YCJU;;;;EAIX;;;;EAKA;;;;EAKA;;;;EAKA;;;;;;;;;;;;wBCfe,gBAAgB,QAAQ;;;;;;;;;;;;;;wBCCxB,WAAW,kBAAkB;;;;;;;;;;;;;;wBCA7B,iBAAiB,cAAc;;;;;;;;;;;;;;;;;;wBCI/B,kBAAkB,iBAAiB,SAAS;;;;;;;;;;qBCN/C;WACZ;WACA;WACA;WACA;WACA;WACA;;;;;YAMW,sBAAsB,eAAe;;;;;;;;YCdrC,YAAY;;;;EAKvB;;;;EAKA;;;;EAKA,OAAO;;;;EAKP,eAAe;;;;EAKf,UAAU;;;;EAKV,cAAc;;;;EAKd,OAAO;;;;;EAMP;;;;EAKA,aAAa;;;;;;;;;KChDF;EACX;EACA;EACA,YAAY;EACZ,YAAY;EACZ;EACA;EACA,gBAAgB;;;;;;;;;KCLL,gBAAgB,gCAC3B,yBACA,4BACA,mBAAmB,OACnB,0BAA0B,cAC1B,uBAAuB,UACvB,qBAAqB;;;;;;;;YCJV,aAAa,UAAU,cAAc;;;;EAKhD,SAAS;;;;EAKT;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA,UAAU;;;;EAKV,OAAO,gBAAgB;;;;EAKvB,iBAAiB;;;;;;;;;;KC9CN,UAAU;;;;;;;;;;;;;wBCEN,YAAY,eAAe;;;;;;;;;;;;;;wBCC3B,eAAe,cAAc;;;;;;;;YCNjC,YAAY,GAAG;EAC1B,MAAM;EACN,MAAM;;;;;;;;;;;;;;;wBCMS,aAAa;;;;;;;;;;;;;;;;;wBCKb,kBAAkB,aAAa;;;;;;;;;;;;;wBCN/B;;;;;;;;;;;;;;wBCCA,kBAAkB,eAAe;;;;;;;;YCRrC,aAAa,KAAK,IAAI"}
package/dist/index.js CHANGED
@@ -13,7 +13,6 @@
13
13
  function arrayBufferToHex(buffer) {
14
14
  return new Uint8Array(buffer).reduce((result, byte) => result + byte.toString(16).padStart(2, "0"), "");
15
15
  }
16
-
17
16
  //#endregion
18
17
  //#region src/arrayBufferToUuid.ts
19
18
  /**
@@ -30,7 +29,6 @@ function arrayBufferToHex(buffer) {
30
29
  function arrayBufferToUuid(buffer) {
31
30
  return arrayBufferToHex(buffer).replace(/(.{8})(.{4})(.{4})(.{4})(.{12})/, "$1-$2-$3-$4-$5");
32
31
  }
33
-
34
32
  //#endregion
35
33
  //#region src/decodeBase64.ts
36
34
  /**
@@ -44,7 +42,6 @@ function arrayBufferToUuid(buffer) {
44
42
  function decodeBase64(str) {
45
43
  return new Uint8Array([...atob(str)].map((a) => a.charCodeAt(0)));
46
44
  }
47
-
48
45
  //#endregion
49
46
  //#region src/base64decode.ts
50
47
  /**
@@ -60,7 +57,6 @@ function decodeBase64(str) {
60
57
  * @see {@link decodeBase64}
61
58
  */
62
59
  const base64decode = decodeBase64;
63
-
64
60
  //#endregion
65
61
  //#region src/encodeBase64.ts
66
62
  const CHUNK_SIZE = 32768;
@@ -83,7 +79,6 @@ function encodeBase64(binary) {
83
79
  }
84
80
  return btoa(text);
85
81
  }
86
-
87
82
  //#endregion
88
83
  //#region src/base64encode.ts
89
84
  /**
@@ -99,7 +94,6 @@ function encodeBase64(binary) {
99
94
  * @see {@link encodeBase64}
100
95
  */
101
96
  const base64encode = encodeBase64;
102
-
103
97
  //#endregion
104
98
  //#region src/convertUint8ToUint16.ts
105
99
  /**
@@ -118,7 +112,6 @@ function convertUint8ToUint16(input) {
118
112
  }
119
113
  return new Uint16Array(input.buffer);
120
114
  }
121
-
122
115
  //#endregion
123
116
  //#region src/isArrayBufferLike.ts
124
117
  /**
@@ -139,7 +132,6 @@ function convertUint8ToUint16(input) {
139
132
  function isArrayBufferLike(value) {
140
133
  return value instanceof ArrayBuffer || typeof SharedArrayBuffer !== "undefined" && value instanceof SharedArrayBuffer;
141
134
  }
142
-
143
135
  //#endregion
144
136
  //#region src/UTF_16.ts
145
137
  /**
@@ -148,7 +140,6 @@ function isArrayBufferLike(value) {
148
140
  * @public
149
141
  */
150
142
  const UTF_16 = "utf-16";
151
-
152
143
  //#endregion
153
144
  //#region src/UTF_16_BE.ts
154
145
  /**
@@ -157,7 +148,6 @@ const UTF_16 = "utf-16";
157
148
  * @public
158
149
  */
159
150
  const UTF_16_BE = "utf-16be";
160
-
161
151
  //#endregion
162
152
  //#region src/UTF_16_LE.ts
163
153
  /**
@@ -166,7 +156,6 @@ const UTF_16_BE = "utf-16be";
166
156
  * @public
167
157
  */
168
158
  const UTF_16_LE = "utf-16le";
169
-
170
159
  //#endregion
171
160
  //#region src/UTF_8.ts
172
161
  /**
@@ -175,7 +164,6 @@ const UTF_16_LE = "utf-16le";
175
164
  * @public
176
165
  */
177
166
  const UTF_8 = "utf-8";
178
-
179
167
  //#endregion
180
168
  //#region src/decodeText.ts
181
169
  /**
@@ -221,44 +209,45 @@ function decodeText(data, options = {}) {
221
209
  case UTF_8:
222
210
  char = view.getUint8(byteOffset);
223
211
  if (char < 128) byteOffset++;
224
- else if (char >= 194 && char <= 223) if (byteOffset + 1 < byteLength) {
225
- const byte2 = view.getUint8(byteOffset + 1);
226
- if (byte2 >= 128 && byte2 <= 191) {
227
- char = (char & 31) << 6 | byte2 & 63;
228
- byteOffset += 2;
212
+ else if (char >= 194 && char <= 223) {
213
+ if (byteOffset + 1 < byteLength) {
214
+ const byte2 = view.getUint8(byteOffset + 1);
215
+ if (byte2 >= 128 && byte2 <= 191) {
216
+ char = (char & 31) << 6 | byte2 & 63;
217
+ byteOffset += 2;
218
+ } else byteOffset++;
229
219
  } else byteOffset++;
230
- } else byteOffset++;
231
- else if (char >= 224 && char <= 239) if (byteOffset + 2 <= byteLength - 1) {
232
- const byte2 = view.getUint8(byteOffset + 1);
233
- const byte3 = view.getUint8(byteOffset + 2);
234
- if (byte2 >= 128 && byte2 <= 191 && byte3 >= 128 && byte3 <= 191) {
235
- char = (char & 15) << 12 | (byte2 & 63) << 6 | byte3 & 63;
236
- byteOffset += 3;
220
+ } else if (char >= 224 && char <= 239) {
221
+ if (byteOffset + 2 <= byteLength - 1) {
222
+ const byte2 = view.getUint8(byteOffset + 1);
223
+ const byte3 = view.getUint8(byteOffset + 2);
224
+ if (byte2 >= 128 && byte2 <= 191 && byte3 >= 128 && byte3 <= 191) {
225
+ char = (char & 15) << 12 | (byte2 & 63) << 6 | byte3 & 63;
226
+ byteOffset += 3;
227
+ } else byteOffset++;
237
228
  } else byteOffset++;
238
- } else byteOffset++;
239
- else if (char >= 240 && char <= 244) if (byteOffset + 3 <= byteLength - 1) {
240
- const byte2 = view.getUint8(byteOffset + 1);
241
- const byte3 = view.getUint8(byteOffset + 2);
242
- const byte4 = view.getUint8(byteOffset + 3);
243
- if (byte2 >= 128 && byte2 <= 191 && byte3 >= 128 && byte3 <= 191 && byte4 >= 128 && byte4 <= 191) {
244
- char = (char & 7) << 18 | (byte2 & 63) << 12 | (byte3 & 63) << 6 | byte4 & 63;
245
- byteOffset += 4;
229
+ } else if (char >= 240 && char <= 244) {
230
+ if (byteOffset + 3 <= byteLength - 1) {
231
+ const byte2 = view.getUint8(byteOffset + 1);
232
+ const byte3 = view.getUint8(byteOffset + 2);
233
+ const byte4 = view.getUint8(byteOffset + 3);
234
+ if (byte2 >= 128 && byte2 <= 191 && byte3 >= 128 && byte3 <= 191 && byte4 >= 128 && byte4 <= 191) {
235
+ char = (char & 7) << 18 | (byte2 & 63) << 12 | (byte3 & 63) << 6 | byte4 & 63;
236
+ byteOffset += 4;
237
+ } else byteOffset++;
246
238
  } else byteOffset++;
247
239
  } else byteOffset++;
248
- else byteOffset++;
249
240
  break;
250
241
  case UTF_16_BE:
251
242
  case UTF_16:
252
243
  case UTF_16_LE:
253
244
  char = view.getUint16(byteOffset, endian);
254
245
  byteOffset += 2;
255
- break;
256
246
  }
257
247
  str += String.fromCodePoint(char);
258
248
  }
259
249
  return str;
260
250
  }
261
-
262
251
  //#endregion
263
252
  //#region src/encodeText.ts
264
253
  /**
@@ -276,7 +265,6 @@ function decodeText(data, options = {}) {
276
265
  function encodeText(data) {
277
266
  return new TextEncoder().encode(data);
278
267
  }
279
-
280
268
  //#endregion
281
269
  //#region src/Encoding.ts
282
270
  /**
@@ -290,7 +278,6 @@ const Encoding = {
290
278
  UTF16BE: UTF_16_BE,
291
279
  UTF16LE: UTF_16_LE
292
280
  };
293
-
294
281
  //#endregion
295
282
  //#region src/getBandwidthBps.ts
296
283
  /**
@@ -305,7 +292,6 @@ function getBandwidthBps(sample) {
305
292
  const durationSeconds = sample.duration / 1e3;
306
293
  return sample.encodedBodySize * 8 / durationSeconds;
307
294
  }
308
-
309
295
  //#endregion
310
296
  //#region src/getBaseUrl.ts
311
297
  /**
@@ -323,7 +309,6 @@ function getBaseUrl(fullUrl) {
323
309
  const url = typeof fullUrl === "string" ? new URL(fullUrl) : fullUrl;
324
310
  return url.origin + url.pathname.substring(0, url.pathname.lastIndexOf("/") + 1);
325
311
  }
326
-
327
312
  //#endregion
328
313
  //#region src/hexToArrayBuffer.ts
329
314
  /**
@@ -343,7 +328,6 @@ function hexToArrayBuffer(hex) {
343
328
  for (let i = 0; i < hex.length; i += 2) view[i / 2] = parseInt(hex.slice(i, i + 2), 16);
344
329
  return buffer;
345
330
  }
346
-
347
331
  //#endregion
348
332
  //#region src/RequestResponseType.ts
349
333
  /**
@@ -361,7 +345,6 @@ const RequestResponseType = {
361
345
  DOCUMENT: "document",
362
346
  STREAM: "stream"
363
347
  };
364
-
365
348
  //#endregion
366
349
  //#region src/roundToEven.ts
367
350
  /**
@@ -382,7 +365,6 @@ function roundToEven(value, precision) {
382
365
  return (flooredValue % 2 === 0 ? flooredValue : flooredValue + 1) / decimalShift;
383
366
  } else return Math.round(value * decimalShift) / decimalShift;
384
367
  }
385
-
386
368
  //#endregion
387
369
  //#region src/stringToUint16.ts
388
370
  /**
@@ -402,7 +384,6 @@ function stringToUint16(str) {
402
384
  for (let i = 0; i < str.length; i++) view.setUint16(i * 2, str.charCodeAt(i), true);
403
385
  return new Uint16Array(buffer);
404
386
  }
405
-
406
387
  //#endregion
407
388
  //#region src/unescapeHtml.ts
408
389
  const escapedHtml = /&(?:amp|lt|gt|quot|apos|nbsp|lrm|rlm|#[xX]?[0-9a-fA-F]+);/g;
@@ -438,9 +419,9 @@ function unescapeHtml(text) {
438
419
  }
439
420
  });
440
421
  }
441
-
442
422
  //#endregion
443
423
  //#region src/urlToRelativePath.ts
424
+ const SCHEME_REGEX = /^[\0-\x20]*[a-z][a-z0-9+.\t\n\r-]*:/i;
444
425
  /**
445
426
  * Constructs a relative path from a URL.
446
427
  *
@@ -456,6 +437,7 @@ function unescapeHtml(text) {
456
437
  * {@includeCode ../test/urlToRelativePath.test.ts#example}
457
438
  */
458
439
  function urlToRelativePath(url, base) {
440
+ if (!SCHEME_REGEX.test(url)) return url;
459
441
  let to;
460
442
  try {
461
443
  to = new URL(url);
@@ -473,7 +455,6 @@ function urlToRelativePath(url, base) {
473
455
  if (ups === 0 && (relativePath === "" || relativePath.startsWith("/") || toPath[common].includes(":"))) relativePath = "./" + relativePath;
474
456
  return relativePath + to.search + to.hash;
475
457
  }
476
-
477
458
  //#endregion
478
459
  //#region src/uuid.ts
479
460
  /**
@@ -491,19 +472,18 @@ function uuid() {
491
472
  return crypto.randomUUID();
492
473
  } catch (error) {
493
474
  try {
494
- const bytes = crypto.getRandomValues(new Uint8Array(16));
475
+ const bytes = crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(16));
495
476
  bytes[6] = bytes[6] & 15 | 64;
496
477
  bytes[8] = bytes[8] & 63 | 128;
497
478
  return arrayBufferToUuid(bytes.buffer);
498
- } catch (error$1) {
479
+ } catch (error) {
499
480
  const url = URL.createObjectURL(new Blob());
500
- const uuid$1 = url.toString();
481
+ const uuid = url.toString();
501
482
  URL.revokeObjectURL(url);
502
- return uuid$1.slice(uuid$1.lastIndexOf("/") + 1);
483
+ return uuid.slice(uuid.lastIndexOf("/") + 1);
503
484
  }
504
485
  }
505
486
  }
506
-
507
487
  //#endregion
508
488
  //#region src/uuidToArrayBuffer.ts
509
489
  /**
@@ -517,10 +497,10 @@ function uuid() {
517
497
  * @example
518
498
  * {@includeCode ../test/uuidToArrayBuffer.test.ts#example}
519
499
  */
520
- function uuidToArrayBuffer(uuid$1) {
521
- return hexToArrayBuffer(uuid$1.replace(/-/g, ""));
500
+ function uuidToArrayBuffer(uuid) {
501
+ return hexToArrayBuffer(uuid.replace(/-/g, ""));
522
502
  }
523
-
524
503
  //#endregion
525
504
  export { Encoding, RequestResponseType, UTF_16, UTF_16_BE, UTF_16_LE, UTF_8, arrayBufferToHex, arrayBufferToUuid, base64decode, base64encode, convertUint8ToUint16, decodeBase64, decodeText, encodeBase64, encodeText, getBandwidthBps, getBaseUrl, hexToArrayBuffer, isArrayBufferLike, roundToEven, stringToUint16, unescapeHtml, urlToRelativePath, uuid, uuidToArrayBuffer };
505
+
526
506
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["base64decode: typeof decodeBase64","chunk: ArrayLike<number>","base64encode: typeof encodeBase64","view: DataView","char!: number","to: URL","error","uuid","uuid"],"sources":["../src/arrayBufferToHex.ts","../src/arrayBufferToUuid.ts","../src/decodeBase64.ts","../src/base64decode.ts","../src/encodeBase64.ts","../src/base64encode.ts","../src/convertUint8ToUint16.ts","../src/isArrayBufferLike.ts","../src/UTF_16.ts","../src/UTF_16_BE.ts","../src/UTF_16_LE.ts","../src/UTF_8.ts","../src/decodeText.ts","../src/encodeText.ts","../src/Encoding.ts","../src/getBandwidthBps.ts","../src/getBaseUrl.ts","../src/hexToArrayBuffer.ts","../src/RequestResponseType.ts","../src/roundToEven.ts","../src/stringToUint16.ts","../src/unescapeHtml.ts","../src/urlToRelativePath.ts","../src/uuid.ts","../src/uuidToArrayBuffer.ts"],"sourcesContent":["/**\n * Encodes an ArrayBuffer as a hexadecimal string.\n *\n * @param buffer - The ArrayBuffer to encode.\n * @returns The hexadecimal string representation.\n *\n * @public\n *\n * @example\n * {@includeCode ../test/arrayBufferToHex.test.ts#example}\n */\nexport function arrayBufferToHex(buffer: ArrayBuffer): string {\n\tconst view = new Uint8Array(buffer)\n\treturn view.reduce((result, byte) => result + byte.toString(16).padStart(2, '0'), '')\n}\n","import { arrayBufferToHex } from './arrayBufferToHex.ts'\n\n/**\n * Converts an ArrayBuffer to a UUID string.\n *\n * @param buffer - The ArrayBuffer to convert.\n * @returns The UUID string representation.\n *\n * @public\n *\n * @example\n * {@includeCode ../test/arrayBufferToUuid.test.ts#example}\n */\nexport function arrayBufferToUuid(buffer: ArrayBuffer): string {\n\tconst hex = arrayBufferToHex(buffer)\n\treturn hex.replace(/(.{8})(.{4})(.{4})(.{4})(.{12})/, '$1-$2-$3-$4-$5')\n}\n","/**\n * Decodes a base64 encoded string into binary data\n *\n * @param str - The base64 encoded string to decode\n * @returns The decoded binary data\n *\n * @public\n */\nexport function decodeBase64(str: string): Uint8Array {\n\treturn new Uint8Array([...atob(str)].map((a) => a.charCodeAt(0)))\n}\n","import { decodeBase64 } from './decodeBase64.ts'\n\n/**\n * Decodes a base64 encoded string into binary data\n *\n * @param str - The base64 encoded string to decode\n * @returns The decoded binary data\n *\n * @public\n *\n * @deprecated Use {@link decodeBase64} instead.\n *\n * @see {@link decodeBase64}\n */\nexport const base64decode: typeof decodeBase64 = decodeBase64\n","const CHUNK_SIZE = 0x8000\n\n/**\n * Encodes binary data to base64\n *\n * @param binary - The binary data to encode\n * @returns The base64 encoded string\n *\n * @public\n *\n * @example\n * {@includeCode ../test/encodeBase64.test.ts#example}\n */\nexport function encodeBase64(binary: Uint8Array): string {\n\tlet text = ''\n\n\tfor (let i = 0; i < binary.length; i += CHUNK_SIZE) {\n\t\tconst chunk: ArrayLike<number> = binary.subarray(i, i + CHUNK_SIZE)\n\t\ttext += String.fromCharCode.apply(null, chunk as number[])\n\t}\n\n\treturn btoa(text)\n}\n","import { encodeBase64 } from './encodeBase64.ts'\n\n/**\n * Encodes binary data to base64\n *\n * @param binary - The binary data to encode\n * @returns The base64 encoded string\n *\n * @public\n *\n * @deprecated Use {@link encodeBase64} instead.\n *\n * @see {@link encodeBase64}\n */\nexport const base64encode: typeof encodeBase64 = encodeBase64\n","/**\n * Converts a Uint8Array to a Uint16Array by aligning its buffer.\n *\n * @param input - The Uint8Array to convert\n * @returns A properly aligned Uint16Array\n *\n * @public\n */\nexport function convertUint8ToUint16(input: Uint8Array): Uint16Array {\n\tif (input.length % 2 !== 0) {\n\t\tconst padded = new Uint8Array(input.length + 1)\n\t\tpadded.set(input)\n\t\treturn new Uint16Array(padded.buffer)\n\t}\n\treturn new Uint16Array(input.buffer)\n}\n","/**\n * Checks if the given value is `ArrayBufferLike`: an `ArrayBuffer` or a\n * `SharedArrayBuffer`.\n *\n * The function also works where `SharedArrayBuffer` is not defined, such as\n * browser contexts without cross-origin isolation.\n *\n * @param value - The value to check.\n * @returns `true` if the value is an `ArrayBuffer` or `SharedArrayBuffer`.\n *\n * @public\n *\n * @example\n * {@includeCode ../test/isArrayBufferLike.test.ts#example}\n */\nexport function isArrayBufferLike(value: unknown): value is ArrayBufferLike {\n\treturn value instanceof ArrayBuffer\n\t\t|| (typeof SharedArrayBuffer !== 'undefined' && value instanceof SharedArrayBuffer)\n}\n","/**\n * UTF-16 Encoding.\n *\n * @public\n */\nexport const UTF_16 = 'utf-16'\n","/**\n * UTF-16 Big Endian Encoding.\n *\n * @public\n */\nexport const UTF_16_BE = 'utf-16be'\n","/**\n * UTF-16 Little Endian Encoding.\n *\n * @public\n */\nexport const UTF_16_LE = 'utf-16le'\n","/**\n * UTF-8 Encoding.\n *\n * @public\n */\nexport const UTF_8 = 'utf-8'\n","import type { DecodeTextOptions } from './DecodeTextOptions.ts'\nimport { isArrayBufferLike } from './isArrayBufferLike.ts'\nimport { UTF_16 } from './UTF_16.ts'\nimport { UTF_16_BE } from './UTF_16_BE.ts'\nimport { UTF_16_LE } from './UTF_16_LE.ts'\nimport { UTF_8 } from './UTF_8.ts'\n\n/**\n * Converts an ArrayBuffer or ArrayBufferView to a string. The function works like\n * `TextDecoder.decode` and also supports environments without `TextDecoder`.\n *\n * @param data - The data to decode.\n * @param options - The options for the decoding.\n * @returns The string representation of the ArrayBuffer.\n *\n * @public\n *\n * @example\n * {@includeCode ../test/decodeText.test.ts#example}\n */\nexport function decodeText(data: ArrayBufferLike | ArrayBufferView, options: DecodeTextOptions = {}): string {\n\tlet view: DataView\n\n\tif (isArrayBufferLike(data)) {\n\t\tview = new DataView(data)\n\t}\n\telse {\n\t\tview = new DataView(data.buffer, data.byteOffset, data.byteLength)\n\t}\n\n\tlet byteOffset = 0\n\tlet { encoding } = options\n\n\t// If no encoding is provided, try to detect it from the BOM\n\tif (!encoding) {\n\t\tconst first = view.getUint8(0)\n\t\tconst second = view.getUint8(1)\n\n\t\t// UTF-8 BOM\n\t\tif (first == 0xef && second == 0xbb && view.getUint8(2) == 0xbf) {\n\t\t\tencoding = UTF_8\n\t\t\tbyteOffset = 3\n\t\t}\n\t\t// UTF-16 BE BOM\n\t\telse if (first == 0xfe && second == 0xff) {\n\t\t\tencoding = UTF_16_BE\n\t\t\tbyteOffset = 2\n\t\t}\n\t\t// UTF-16 LE BOM\n\t\telse if (first == 0xff && second == 0xfe) {\n\t\t\tencoding = UTF_16_LE\n\t\t\tbyteOffset = 2\n\t\t}\n\t\telse {\n\t\t\tencoding = UTF_8\n\t\t}\n\t}\n\n\tif (typeof TextDecoder !== 'undefined') {\n\t\treturn new TextDecoder(encoding).decode(view)\n\t}\n\n\tconst { byteLength } = view\n\tconst endian = encoding !== UTF_16_BE\n\tlet str = ''\n\tlet char!: number\n\n\twhile (byteOffset < byteLength) {\n\t\tswitch (encoding) {\n\t\t\tcase UTF_8:\n\t\t\t\tchar = view.getUint8(byteOffset)\n\n\t\t\t\t// Single byte (ASCII)\n\t\t\t\tif (char < 128) {\n\t\t\t\t\tbyteOffset++\n\t\t\t\t}\n\t\t\t\t// 2-byte sequence\n\t\t\t\telse if (char >= 194 && char <= 223) {\n\t\t\t\t\tif (byteOffset + 1 < byteLength) {\n\t\t\t\t\t\tconst byte2 = view.getUint8(byteOffset + 1)\n\t\t\t\t\t\tif (byte2 >= 128 && byte2 <= 191) {\n\t\t\t\t\t\t\tchar = ((char & 0x1F) << 6) | (byte2 & 0x3F)\n\t\t\t\t\t\t\tbyteOffset += 2\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// Invalid sequence, skip\n\t\t\t\t\t\t\tbyteOffset++\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Incomplete sequence, skip\n\t\t\t\t\t\tbyteOffset++\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// 3-byte sequence\n\t\t\t\telse if (char >= 224 && char <= 239) {\n\t\t\t\t\tif (byteOffset + 2 <= byteLength - 1) {\n\t\t\t\t\t\tconst byte2 = view.getUint8(byteOffset + 1)\n\t\t\t\t\t\tconst byte3 = view.getUint8(byteOffset + 2)\n\t\t\t\t\t\tif (byte2 >= 128 && byte2 <= 191 && byte3 >= 128 && byte3 <= 191) {\n\t\t\t\t\t\t\tchar = ((char & 0x0F) << 12) | ((byte2 & 0x3F) << 6) | (byte3 & 0x3F)\n\t\t\t\t\t\t\tbyteOffset += 3\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// Invalid sequence, skip\n\t\t\t\t\t\t\tbyteOffset++\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Incomplete sequence, skip\n\t\t\t\t\t\tbyteOffset++\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// 4-byte sequence\n\t\t\t\telse if (char >= 240 && char <= 244) {\n\t\t\t\t\tif (byteOffset + 3 <= byteLength - 1) {\n\t\t\t\t\t\tconst byte2 = view.getUint8(byteOffset + 1)\n\t\t\t\t\t\tconst byte3 = view.getUint8(byteOffset + 2)\n\t\t\t\t\t\tconst byte4 = view.getUint8(byteOffset + 3)\n\t\t\t\t\t\tif (byte2 >= 128 && byte2 <= 191 && byte3 >= 128 && byte3 <= 191 && byte4 >= 128 && byte4 <= 191) {\n\t\t\t\t\t\t\tchar = ((char & 0x07) << 18) | ((byte2 & 0x3F) << 12) | ((byte3 & 0x3F) << 6) | (byte4 & 0x3F)\n\t\t\t\t\t\t\tbyteOffset += 4\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// Invalid sequence, skip\n\t\t\t\t\t\t\tbyteOffset++\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Incomplete sequence, skip\n\t\t\t\t\t\tbyteOffset++\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Invalid byte, skip\n\t\t\t\telse {\n\t\t\t\t\tbyteOffset++\n\t\t\t\t}\n\t\t\t\tbreak\n\n\t\t\tcase UTF_16_BE:\n\t\t\tcase UTF_16:\n\t\t\tcase UTF_16_LE:\n\t\t\t\tchar = view.getUint16(byteOffset, endian)\n\t\t\t\tbyteOffset += 2\n\t\t\t\tbreak\n\t\t}\n\n\t\tstr += String.fromCodePoint(char)\n\t}\n\n\treturn str\n}\n","\n/**\n * Converts a string to a Uint8Array. The function works like\n * `TextEncoder.encode` and also supports environments without `TextEncoder`.\n *\n * @param data - The string to encode.\n * @returns The Uint8Array representation of the string.\n *\n * @public\n *\n * @example\n * {@includeCode ../test/encodeText.test.ts#example}\n */\nexport function encodeText(data: string): Uint8Array {\n\treturn new TextEncoder().encode(data)\n}\n","import { UTF_16 } from './UTF_16.ts'\nimport { UTF_16_BE } from './UTF_16_BE.ts'\nimport { UTF_16_LE } from './UTF_16_LE.ts'\nimport { UTF_8 } from './UTF_8.ts'\nimport type { ValueOf } from './ValueOf.ts'\n\n/**\n * Text encoding types.\n *\n * @public\n */\nexport const Encoding = {\n\tUTF8: UTF_8 as typeof UTF_8,\n\tUTF16: UTF_16 as typeof UTF_16,\n\tUTF16BE: UTF_16_BE as typeof UTF_16_BE,\n\tUTF16LE: UTF_16_LE as typeof UTF_16_LE,\n} as const\n\n/**\n * Text encoding types.\n *\n * @public\n */\nexport type Encoding = ValueOf<typeof Encoding>;\n","import type { ResourceTiming } from './ResourceTiming.ts'\n\n/**\n * Converts a ResourceTiming sample to bandwidth in bits per second.\n *\n * @param sample - A ResourceTiming sample\n * @returns The bandwidth in bits per second.\n *\n * @public\n */\nexport function getBandwidthBps(sample: ResourceTiming): number {\n\tconst durationSeconds = sample.duration / 1000\n\tconst bandwidthBps = sample.encodedBodySize * 8 / durationSeconds\n\treturn bandwidthBps\n}\n","/**\n * Gets the base URL from a full URL or a URL object.\n *\n * @param fullUrl - The full URL or URL object.\n * @returns The base URL.\n *\n * @public\n *\n * @example\n * {@includeCode ../test/getBaseUrl.test.ts#example}\n */\nexport function getBaseUrl(fullUrl: string | URL): string {\n\tconst url = typeof fullUrl === 'string' ? new URL(fullUrl) : fullUrl\n\treturn url.origin + url.pathname.substring(0, url.pathname.lastIndexOf('/') + 1)\n}\n","/**\n * Decodes a hexadecimal string into an ArrayBuffer.\n *\n * @param hex - The hexadecimal string to decode.\n * @returns The decoded ArrayBuffer.\n *\n * @public\n *\n * @example\n * {@includeCode ../test/hexToArrayBuffer.test.ts#example}\n */\nexport function hexToArrayBuffer(hex: string): ArrayBuffer {\n\tconst buffer = new ArrayBuffer(hex.length / 2)\n\tconst view = new Uint8Array(buffer)\n\tfor (let i = 0; i < hex.length; i += 2) {\n\t\tview[i / 2] = parseInt(hex.slice(i, i + 2), 16)\n\t}\n\treturn buffer\n}\n","import type { ValueOf } from './ValueOf.ts'\n\n/**\n * The response type of the request.\n *\n * @enum\n *\n * @public\n */\nexport const RequestResponseType = {\n\tTEXT: 'text' as const,\n\tJSON: 'json' as const,\n\tBLOB: 'blob' as const,\n\tARRAY_BUFFER: 'arrayBuffer' as const,\n\tDOCUMENT: 'document' as const,\n\tSTREAM: 'stream' as const,\n} as const\n\n/**\n * @public\n */\nexport type RequestResponseType = ValueOf<typeof RequestResponseType>;\n","/**\n * Rounds a value with the procedure from step 2 of the \"Serializing a Decimal\" specification.\n * The style is known as \"even rounding\", \"banker's rounding\", or \"commercial rounding\".\n *\n * @param value - The value to round\n * @param precision - The number of decimal places to round to\n * @returns The rounded value\n *\n * @public\n */\nexport function roundToEven(value: number, precision: number): number {\n\tif (value < 0) {\n\t\treturn -roundToEven(-value, precision)\n\t}\n\n\tconst decimalShift = Math.pow(10, precision)\n\tconst isEquidistant = Math.abs(((value * decimalShift) % 1) - 0.5) < Number.EPSILON\n\n\tif (isEquidistant) {\n\t\t// If the tail of the decimal place is 'equidistant' we round to the nearest even value\n\t\tconst flooredValue = Math.floor(value * decimalShift)\n\t\treturn (flooredValue % 2 === 0 ? flooredValue : flooredValue + 1) / decimalShift\n\t}\n\telse {\n\t\t// Otherwise, proceed as normal\n\t\treturn Math.round(value * decimalShift) / decimalShift\n\t}\n}\n","/**\n * Converts a string to a Uint16Array.\n *\n * @param str - The string to convert\n * @returns A Uint16Array representation of the string\n *\n * @public\n *\n * @example\n * {@includeCode ../test/stringToUint16.test.ts#example}\n */\nexport function stringToUint16(str: string): Uint16Array {\n\tconst buffer = new ArrayBuffer(str.length * 2)\n\tconst view = new DataView(buffer)\n\n\tfor (let i = 0; i < str.length; i++) {\n\t\tview.setUint16(i * 2, str.charCodeAt(i), true) // true for little-endian\n\t}\n\n\treturn new Uint16Array(buffer)\n}\n","const escapedHtml = /&(?:amp|lt|gt|quot|apos|nbsp|lrm|rlm|#[xX]?[0-9a-fA-F]+);/g\n\n/**\n * Unescapes HTML entities\n *\n * @param text - The text to unescape\n * @returns The unescaped text\n *\n * @public\n *\n * @example\n * {@includeCode ../test/unescapeHtml.test.ts#example}\n */\nexport function unescapeHtml(text: string): string {\n\tif (text.indexOf('&') === -1) {\n\t\treturn text\n\t}\n\n\treturn text.replace(escapedHtml, (match) => {\n\t\tswitch (match) {\n\t\t\tcase '&amp;': return '&'\n\t\t\tcase '&lt;': return '<'\n\t\t\tcase '&gt;': return '>'\n\t\t\tcase '&quot;': return '\"'\n\t\t\tcase '&apos;': return '\\''\n\t\t\tcase '&nbsp;': return '\\u{a0}'\n\t\t\tcase '&lrm;': return '\\u{200e}'\n\t\t\tcase '&rlm;': return '\\u{200f}'\n\t\t\tdefault: {\n\t\t\t\tif (match[1] === '#') {\n\t\t\t\t\tconst code = match[2] === 'x' || match[2] === 'X' ? parseInt(match.slice(3), 16) : parseInt(match.slice(2), 10)\n\t\t\t\t\treturn String.fromCodePoint(code)\n\t\t\t\t}\n\t\t\t\treturn match\n\t\t\t}\n\t\t}\n\t})\n}\n","/**\n * Constructs a relative path from a URL.\n *\n * If `url` is already relative, or its origin differs from `base`, the function returns `url` unchanged.\n *\n * @param url - The destination URL\n * @param base - The base URL\n * @returns The relative path\n *\n * @public\n *\n * @example\n * {@includeCode ../test/urlToRelativePath.test.ts#example}\n */\nexport function urlToRelativePath(url: string, base: string): string {\n\tlet to: URL\n\ttry {\n\t\tto = new URL(url)\n\t}\n\tcatch {\n\t\treturn url\n\t}\n\n\tconst from = new URL(base)\n\n\tif (to.origin !== from.origin) {\n\t\treturn url\n\t}\n\n\tconst toPath = to.pathname.split('/').slice(1)\n\tconst fromPath = from.pathname.split('/').slice(1, -1)\n\n\t// count common parents, stopping before the destination file\n\tlet common = 0\n\n\twhile (common < toPath.length - 1 && common < fromPath.length && toPath[common] === fromPath[common]) {\n\t\tcommon++\n\t}\n\n\t// add back paths\n\tconst ups = fromPath.length - common\n\tlet relativePath = '../'.repeat(ups) + toPath.slice(common).join('/')\n\n\t// RFC 3986 section 4.2: a relative-path reference cannot be empty, start with \"/\", or have \":\" in its first segment\n\tif (ups === 0 && (relativePath === '' || relativePath.startsWith('/') || toPath[common].includes(':'))) {\n\t\trelativePath = './' + relativePath\n\t}\n\n\t// preserve query parameters and hash of the destination url\n\treturn relativePath + to.search + to.hash\n}\n","import { arrayBufferToUuid } from './arrayBufferToUuid.ts'\n\n/**\n * Generates a random v4 UUID\n *\n * @returns A random v4 UUID\n *\n * @public\n *\n * @example\n * {@includeCode ../test/uuid.test.ts#example}\n */\nexport function uuid(): string {\n\ttry {\n\t\treturn crypto.randomUUID()\n\t}\n\tcatch (error) {\n\t\ttry {\n\t\t\tconst bytes = crypto.getRandomValues(new Uint8Array(16))\n\n\t\t\t// Set the version (4) and variant (RFC 4122) bits\n\t\t\tbytes[6] = (bytes[6] & 0x0f) | 0x40\n\t\t\tbytes[8] = (bytes[8] & 0x3f) | 0x80\n\n\t\t\treturn arrayBufferToUuid(bytes.buffer)\n\t\t}\n\t\tcatch (error) {\n\t\t\tconst url = URL.createObjectURL(new Blob())\n\t\t\tconst uuid = url.toString()\n\t\t\tURL.revokeObjectURL(url)\n\t\t\treturn uuid.slice(uuid.lastIndexOf('/') + 1)\n\t\t}\n\t}\n}\n","import { hexToArrayBuffer } from './hexToArrayBuffer.ts'\n\n/**\n * Converts a UUID string to an ArrayBuffer.\n *\n * @param uuid - The UUID string to convert.\n * @returns The ArrayBuffer representation.\n *\n * @public\n *\n * @example\n * {@includeCode ../test/uuidToArrayBuffer.test.ts#example}\n */\nexport function uuidToArrayBuffer(uuid: string): ArrayBuffer {\n\tconst hex = uuid.replace(/-/g, '')\n\treturn hexToArrayBuffer(hex)\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/arrayBufferToHex.ts","../src/arrayBufferToUuid.ts","../src/decodeBase64.ts","../src/base64decode.ts","../src/encodeBase64.ts","../src/base64encode.ts","../src/convertUint8ToUint16.ts","../src/isArrayBufferLike.ts","../src/UTF_16.ts","../src/UTF_16_BE.ts","../src/UTF_16_LE.ts","../src/UTF_8.ts","../src/decodeText.ts","../src/encodeText.ts","../src/Encoding.ts","../src/getBandwidthBps.ts","../src/getBaseUrl.ts","../src/hexToArrayBuffer.ts","../src/RequestResponseType.ts","../src/roundToEven.ts","../src/stringToUint16.ts","../src/unescapeHtml.ts","../src/urlToRelativePath.ts","../src/uuid.ts","../src/uuidToArrayBuffer.ts"],"sourcesContent":["/**\n * Encodes an ArrayBuffer as a hexadecimal string.\n *\n * @param buffer - The ArrayBuffer to encode.\n * @returns The hexadecimal string representation.\n *\n * @public\n *\n * @example\n * {@includeCode ../test/arrayBufferToHex.test.ts#example}\n */\nexport function arrayBufferToHex(buffer: ArrayBuffer): string {\n\tconst view = new Uint8Array(buffer)\n\treturn view.reduce((result, byte) => result + byte.toString(16).padStart(2, '0'), '')\n}\n","import { arrayBufferToHex } from './arrayBufferToHex.ts'\n\n/**\n * Converts an ArrayBuffer to a UUID string.\n *\n * @param buffer - The ArrayBuffer to convert.\n * @returns The UUID string representation.\n *\n * @public\n *\n * @example\n * {@includeCode ../test/arrayBufferToUuid.test.ts#example}\n */\nexport function arrayBufferToUuid(buffer: ArrayBuffer): string {\n\tconst hex = arrayBufferToHex(buffer)\n\treturn hex.replace(/(.{8})(.{4})(.{4})(.{4})(.{12})/, '$1-$2-$3-$4-$5')\n}\n","/**\n * Decodes a base64 encoded string into binary data\n *\n * @param str - The base64 encoded string to decode\n * @returns The decoded binary data\n *\n * @public\n */\nexport function decodeBase64(str: string): Uint8Array {\n\treturn new Uint8Array([...atob(str)].map((a) => a.charCodeAt(0)))\n}\n","import { decodeBase64 } from './decodeBase64.ts'\n\n/**\n * Decodes a base64 encoded string into binary data\n *\n * @param str - The base64 encoded string to decode\n * @returns The decoded binary data\n *\n * @public\n *\n * @deprecated Use {@link decodeBase64} instead.\n *\n * @see {@link decodeBase64}\n */\nexport const base64decode: typeof decodeBase64 = decodeBase64\n","const CHUNK_SIZE = 0x8000\n\n/**\n * Encodes binary data to base64\n *\n * @param binary - The binary data to encode\n * @returns The base64 encoded string\n *\n * @public\n *\n * @example\n * {@includeCode ../test/encodeBase64.test.ts#example}\n */\nexport function encodeBase64(binary: Uint8Array): string {\n\tlet text = ''\n\n\tfor (let i = 0; i < binary.length; i += CHUNK_SIZE) {\n\t\tconst chunk: ArrayLike<number> = binary.subarray(i, i + CHUNK_SIZE)\n\t\ttext += String.fromCharCode.apply(null, chunk as number[])\n\t}\n\n\treturn btoa(text)\n}\n","import { encodeBase64 } from './encodeBase64.ts'\n\n/**\n * Encodes binary data to base64\n *\n * @param binary - The binary data to encode\n * @returns The base64 encoded string\n *\n * @public\n *\n * @deprecated Use {@link encodeBase64} instead.\n *\n * @see {@link encodeBase64}\n */\nexport const base64encode: typeof encodeBase64 = encodeBase64\n","/**\n * Converts a Uint8Array to a Uint16Array by aligning its buffer.\n *\n * @param input - The Uint8Array to convert\n * @returns A properly aligned Uint16Array\n *\n * @public\n */\nexport function convertUint8ToUint16(input: Uint8Array): Uint16Array {\n\tif (input.length % 2 !== 0) {\n\t\tconst padded = new Uint8Array(input.length + 1)\n\t\tpadded.set(input)\n\t\treturn new Uint16Array(padded.buffer)\n\t}\n\treturn new Uint16Array(input.buffer)\n}\n","/**\n * Checks if the given value is `ArrayBufferLike`: an `ArrayBuffer` or a\n * `SharedArrayBuffer`.\n *\n * The function also works where `SharedArrayBuffer` is not defined, such as\n * browser contexts without cross-origin isolation.\n *\n * @param value - The value to check.\n * @returns `true` if the value is an `ArrayBuffer` or `SharedArrayBuffer`.\n *\n * @public\n *\n * @example\n * {@includeCode ../test/isArrayBufferLike.test.ts#example}\n */\nexport function isArrayBufferLike(value: unknown): value is ArrayBufferLike {\n\treturn value instanceof ArrayBuffer\n\t\t|| (typeof SharedArrayBuffer !== 'undefined' && value instanceof SharedArrayBuffer)\n}\n","/**\n * UTF-16 Encoding.\n *\n * @public\n */\nexport const UTF_16 = 'utf-16'\n","/**\n * UTF-16 Big Endian Encoding.\n *\n * @public\n */\nexport const UTF_16_BE = 'utf-16be'\n","/**\n * UTF-16 Little Endian Encoding.\n *\n * @public\n */\nexport const UTF_16_LE = 'utf-16le'\n","/**\n * UTF-8 Encoding.\n *\n * @public\n */\nexport const UTF_8 = 'utf-8'\n","import type { DecodeTextOptions } from './DecodeTextOptions.ts'\nimport { isArrayBufferLike } from './isArrayBufferLike.ts'\nimport { UTF_16 } from './UTF_16.ts'\nimport { UTF_16_BE } from './UTF_16_BE.ts'\nimport { UTF_16_LE } from './UTF_16_LE.ts'\nimport { UTF_8 } from './UTF_8.ts'\n\n/**\n * Converts an ArrayBuffer or ArrayBufferView to a string. The function works like\n * `TextDecoder.decode` and also supports environments without `TextDecoder`.\n *\n * @param data - The data to decode.\n * @param options - The options for the decoding.\n * @returns The string representation of the ArrayBuffer.\n *\n * @public\n *\n * @example\n * {@includeCode ../test/decodeText.test.ts#example}\n */\nexport function decodeText(data: ArrayBufferLike | ArrayBufferView, options: DecodeTextOptions = {}): string {\n\tlet view: DataView\n\n\tif (isArrayBufferLike(data)) {\n\t\tview = new DataView(data)\n\t}\n\telse {\n\t\tview = new DataView(data.buffer, data.byteOffset, data.byteLength)\n\t}\n\n\tlet byteOffset = 0\n\tlet { encoding } = options\n\n\t// If no encoding is provided, try to detect it from the BOM\n\tif (!encoding) {\n\t\tconst first = view.getUint8(0)\n\t\tconst second = view.getUint8(1)\n\n\t\t// UTF-8 BOM\n\t\tif (first == 0xef && second == 0xbb && view.getUint8(2) == 0xbf) {\n\t\t\tencoding = UTF_8\n\t\t\tbyteOffset = 3\n\t\t}\n\t\t// UTF-16 BE BOM\n\t\telse if (first == 0xfe && second == 0xff) {\n\t\t\tencoding = UTF_16_BE\n\t\t\tbyteOffset = 2\n\t\t}\n\t\t// UTF-16 LE BOM\n\t\telse if (first == 0xff && second == 0xfe) {\n\t\t\tencoding = UTF_16_LE\n\t\t\tbyteOffset = 2\n\t\t}\n\t\telse {\n\t\t\tencoding = UTF_8\n\t\t}\n\t}\n\n\tif (typeof TextDecoder !== 'undefined') {\n\t\treturn new TextDecoder(encoding).decode(view)\n\t}\n\n\tconst { byteLength } = view\n\tconst endian = encoding !== UTF_16_BE\n\tlet str = ''\n\tlet char!: number\n\n\twhile (byteOffset < byteLength) {\n\t\tswitch (encoding) {\n\t\t\tcase UTF_8:\n\t\t\t\tchar = view.getUint8(byteOffset)\n\n\t\t\t\t// Single byte (ASCII)\n\t\t\t\tif (char < 128) {\n\t\t\t\t\tbyteOffset++\n\t\t\t\t}\n\t\t\t\t// 2-byte sequence\n\t\t\t\telse if (char >= 194 && char <= 223) {\n\t\t\t\t\tif (byteOffset + 1 < byteLength) {\n\t\t\t\t\t\tconst byte2 = view.getUint8(byteOffset + 1)\n\t\t\t\t\t\tif (byte2 >= 128 && byte2 <= 191) {\n\t\t\t\t\t\t\tchar = ((char & 0x1F) << 6) | (byte2 & 0x3F)\n\t\t\t\t\t\t\tbyteOffset += 2\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// Invalid sequence, skip\n\t\t\t\t\t\t\tbyteOffset++\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Incomplete sequence, skip\n\t\t\t\t\t\tbyteOffset++\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// 3-byte sequence\n\t\t\t\telse if (char >= 224 && char <= 239) {\n\t\t\t\t\tif (byteOffset + 2 <= byteLength - 1) {\n\t\t\t\t\t\tconst byte2 = view.getUint8(byteOffset + 1)\n\t\t\t\t\t\tconst byte3 = view.getUint8(byteOffset + 2)\n\t\t\t\t\t\tif (byte2 >= 128 && byte2 <= 191 && byte3 >= 128 && byte3 <= 191) {\n\t\t\t\t\t\t\tchar = ((char & 0x0F) << 12) | ((byte2 & 0x3F) << 6) | (byte3 & 0x3F)\n\t\t\t\t\t\t\tbyteOffset += 3\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// Invalid sequence, skip\n\t\t\t\t\t\t\tbyteOffset++\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Incomplete sequence, skip\n\t\t\t\t\t\tbyteOffset++\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// 4-byte sequence\n\t\t\t\telse if (char >= 240 && char <= 244) {\n\t\t\t\t\tif (byteOffset + 3 <= byteLength - 1) {\n\t\t\t\t\t\tconst byte2 = view.getUint8(byteOffset + 1)\n\t\t\t\t\t\tconst byte3 = view.getUint8(byteOffset + 2)\n\t\t\t\t\t\tconst byte4 = view.getUint8(byteOffset + 3)\n\t\t\t\t\t\tif (byte2 >= 128 && byte2 <= 191 && byte3 >= 128 && byte3 <= 191 && byte4 >= 128 && byte4 <= 191) {\n\t\t\t\t\t\t\tchar = ((char & 0x07) << 18) | ((byte2 & 0x3F) << 12) | ((byte3 & 0x3F) << 6) | (byte4 & 0x3F)\n\t\t\t\t\t\t\tbyteOffset += 4\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// Invalid sequence, skip\n\t\t\t\t\t\t\tbyteOffset++\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Incomplete sequence, skip\n\t\t\t\t\t\tbyteOffset++\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Invalid byte, skip\n\t\t\t\telse {\n\t\t\t\t\tbyteOffset++\n\t\t\t\t}\n\t\t\t\tbreak\n\n\t\t\tcase UTF_16_BE:\n\t\t\tcase UTF_16:\n\t\t\tcase UTF_16_LE:\n\t\t\t\tchar = view.getUint16(byteOffset, endian)\n\t\t\t\tbyteOffset += 2\n\t\t\t\tbreak\n\t\t}\n\n\t\tstr += String.fromCodePoint(char)\n\t}\n\n\treturn str\n}\n","\n/**\n * Converts a string to a Uint8Array. The function works like\n * `TextEncoder.encode` and also supports environments without `TextEncoder`.\n *\n * @param data - The string to encode.\n * @returns The Uint8Array representation of the string.\n *\n * @public\n *\n * @example\n * {@includeCode ../test/encodeText.test.ts#example}\n */\nexport function encodeText(data: string): Uint8Array {\n\treturn new TextEncoder().encode(data)\n}\n","import { UTF_16 } from './UTF_16.ts'\nimport { UTF_16_BE } from './UTF_16_BE.ts'\nimport { UTF_16_LE } from './UTF_16_LE.ts'\nimport { UTF_8 } from './UTF_8.ts'\nimport type { ValueOf } from './ValueOf.ts'\n\n/**\n * Text encoding types.\n *\n * @public\n */\nexport const Encoding = {\n\tUTF8: UTF_8 as typeof UTF_8,\n\tUTF16: UTF_16 as typeof UTF_16,\n\tUTF16BE: UTF_16_BE as typeof UTF_16_BE,\n\tUTF16LE: UTF_16_LE as typeof UTF_16_LE,\n} as const\n\n/**\n * Text encoding types.\n *\n * @public\n */\nexport type Encoding = ValueOf<typeof Encoding>;\n","import type { ResourceTiming } from './ResourceTiming.ts'\n\n/**\n * Converts a ResourceTiming sample to bandwidth in bits per second.\n *\n * @param sample - A ResourceTiming sample\n * @returns The bandwidth in bits per second.\n *\n * @public\n */\nexport function getBandwidthBps(sample: ResourceTiming): number {\n\tconst durationSeconds = sample.duration / 1000\n\tconst bandwidthBps = sample.encodedBodySize * 8 / durationSeconds\n\treturn bandwidthBps\n}\n","/**\n * Gets the base URL from a full URL or a URL object.\n *\n * @param fullUrl - The full URL or URL object.\n * @returns The base URL.\n *\n * @public\n *\n * @example\n * {@includeCode ../test/getBaseUrl.test.ts#example}\n */\nexport function getBaseUrl(fullUrl: string | URL): string {\n\tconst url = typeof fullUrl === 'string' ? new URL(fullUrl) : fullUrl\n\treturn url.origin + url.pathname.substring(0, url.pathname.lastIndexOf('/') + 1)\n}\n","/**\n * Decodes a hexadecimal string into an ArrayBuffer.\n *\n * @param hex - The hexadecimal string to decode.\n * @returns The decoded ArrayBuffer.\n *\n * @public\n *\n * @example\n * {@includeCode ../test/hexToArrayBuffer.test.ts#example}\n */\nexport function hexToArrayBuffer(hex: string): ArrayBuffer {\n\tconst buffer = new ArrayBuffer(hex.length / 2)\n\tconst view = new Uint8Array(buffer)\n\tfor (let i = 0; i < hex.length; i += 2) {\n\t\tview[i / 2] = parseInt(hex.slice(i, i + 2), 16)\n\t}\n\treturn buffer\n}\n","import type { ValueOf } from './ValueOf.ts'\n\n/**\n * The response type of the request.\n *\n * @enum\n *\n * @public\n */\nexport const RequestResponseType = {\n\tTEXT: 'text' as const,\n\tJSON: 'json' as const,\n\tBLOB: 'blob' as const,\n\tARRAY_BUFFER: 'arrayBuffer' as const,\n\tDOCUMENT: 'document' as const,\n\tSTREAM: 'stream' as const,\n} as const\n\n/**\n * @public\n */\nexport type RequestResponseType = ValueOf<typeof RequestResponseType>;\n","/**\n * Rounds a value with the procedure from step 2 of the \"Serializing a Decimal\" specification.\n * The style is known as \"even rounding\", \"banker's rounding\", or \"commercial rounding\".\n *\n * @param value - The value to round\n * @param precision - The number of decimal places to round to\n * @returns The rounded value\n *\n * @public\n */\nexport function roundToEven(value: number, precision: number): number {\n\tif (value < 0) {\n\t\treturn -roundToEven(-value, precision)\n\t}\n\n\tconst decimalShift = Math.pow(10, precision)\n\tconst isEquidistant = Math.abs(((value * decimalShift) % 1) - 0.5) < Number.EPSILON\n\n\tif (isEquidistant) {\n\t\t// If the tail of the decimal place is 'equidistant' we round to the nearest even value\n\t\tconst flooredValue = Math.floor(value * decimalShift)\n\t\treturn (flooredValue % 2 === 0 ? flooredValue : flooredValue + 1) / decimalShift\n\t}\n\telse {\n\t\t// Otherwise, proceed as normal\n\t\treturn Math.round(value * decimalShift) / decimalShift\n\t}\n}\n","/**\n * Converts a string to a Uint16Array.\n *\n * @param str - The string to convert\n * @returns A Uint16Array representation of the string\n *\n * @public\n *\n * @example\n * {@includeCode ../test/stringToUint16.test.ts#example}\n */\nexport function stringToUint16(str: string): Uint16Array {\n\tconst buffer = new ArrayBuffer(str.length * 2)\n\tconst view = new DataView(buffer)\n\n\tfor (let i = 0; i < str.length; i++) {\n\t\tview.setUint16(i * 2, str.charCodeAt(i), true) // true for little-endian\n\t}\n\n\treturn new Uint16Array(buffer)\n}\n","const escapedHtml = /&(?:amp|lt|gt|quot|apos|nbsp|lrm|rlm|#[xX]?[0-9a-fA-F]+);/g\n\n/**\n * Unescapes HTML entities\n *\n * @param text - The text to unescape\n * @returns The unescaped text\n *\n * @public\n *\n * @example\n * {@includeCode ../test/unescapeHtml.test.ts#example}\n */\nexport function unescapeHtml(text: string): string {\n\tif (text.indexOf('&') === -1) {\n\t\treturn text\n\t}\n\n\treturn text.replace(escapedHtml, (match) => {\n\t\tswitch (match) {\n\t\t\tcase '&amp;': return '&'\n\t\t\tcase '&lt;': return '<'\n\t\t\tcase '&gt;': return '>'\n\t\t\tcase '&quot;': return '\"'\n\t\t\tcase '&apos;': return '\\''\n\t\t\tcase '&nbsp;': return '\\u{a0}'\n\t\t\tcase '&lrm;': return '\\u{200e}'\n\t\t\tcase '&rlm;': return '\\u{200f}'\n\t\t\tdefault: {\n\t\t\t\tif (match[1] === '#') {\n\t\t\t\t\tconst code = match[2] === 'x' || match[2] === 'X' ? parseInt(match.slice(3), 16) : parseInt(match.slice(2), 10)\n\t\t\t\t\treturn String.fromCodePoint(code)\n\t\t\t\t}\n\t\t\t\treturn match\n\t\t\t}\n\t\t}\n\t})\n}\n","// RFC 3986 section 3.1 scheme and \":\".\n// The WHATWG URL parser first removes leading C0 control or space and every ASCII tab or newline.\nconst SCHEME_REGEX = /^[\\0-\\x20]*[a-z][a-z0-9+.\\t\\n\\r-]*:/i\n\n/**\n * Constructs a relative path from a URL.\n *\n * If `url` is already relative, or its origin differs from `base`, the function returns `url` unchanged.\n *\n * @param url - The destination URL\n * @param base - The base URL\n * @returns The relative path\n *\n * @public\n *\n * @example\n * {@includeCode ../test/urlToRelativePath.test.ts#example}\n */\nexport function urlToRelativePath(url: string, base: string): string {\n\tif (!SCHEME_REGEX.test(url)) {\n\t\treturn url\n\t}\n\n\tlet to: URL\n\ttry {\n\t\tto = new URL(url)\n\t}\n\tcatch {\n\t\treturn url\n\t}\n\n\tconst from = new URL(base)\n\n\tif (to.origin !== from.origin) {\n\t\treturn url\n\t}\n\n\tconst toPath = to.pathname.split('/').slice(1)\n\tconst fromPath = from.pathname.split('/').slice(1, -1)\n\n\t// count common parents, stopping before the destination file\n\tlet common = 0\n\n\twhile (common < toPath.length - 1 && common < fromPath.length && toPath[common] === fromPath[common]) {\n\t\tcommon++\n\t}\n\n\t// add back paths\n\tconst ups = fromPath.length - common\n\tlet relativePath = '../'.repeat(ups) + toPath.slice(common).join('/')\n\n\t// RFC 3986 section 4.2: a relative-path reference cannot be empty, start with \"/\", or have \":\" in its first segment\n\tif (ups === 0 && (relativePath === '' || relativePath.startsWith('/') || toPath[common].includes(':'))) {\n\t\trelativePath = './' + relativePath\n\t}\n\n\t// preserve query parameters and hash of the destination url\n\treturn relativePath + to.search + to.hash\n}\n","import { arrayBufferToUuid } from './arrayBufferToUuid.ts'\n\n/**\n * Generates a random v4 UUID\n *\n * @returns A random v4 UUID\n *\n * @public\n *\n * @example\n * {@includeCode ../test/uuid.test.ts#example}\n */\nexport function uuid(): string {\n\ttry {\n\t\treturn crypto.randomUUID()\n\t}\n\tcatch (error) {\n\t\ttry {\n\t\t\tconst bytes = crypto.getRandomValues(new Uint8Array(16))\n\n\t\t\t// Set the version (4) and variant (RFC 4122) bits\n\t\t\tbytes[6] = (bytes[6] & 0x0f) | 0x40\n\t\t\tbytes[8] = (bytes[8] & 0x3f) | 0x80\n\n\t\t\treturn arrayBufferToUuid(bytes.buffer)\n\t\t}\n\t\tcatch (error) {\n\t\t\tconst url = URL.createObjectURL(new Blob())\n\t\t\tconst uuid = url.toString()\n\t\t\tURL.revokeObjectURL(url)\n\t\t\treturn uuid.slice(uuid.lastIndexOf('/') + 1)\n\t\t}\n\t}\n}\n","import { hexToArrayBuffer } from './hexToArrayBuffer.ts'\n\n/**\n * Converts a UUID string to an ArrayBuffer.\n *\n * @param uuid - The UUID string to convert.\n * @returns The ArrayBuffer representation.\n *\n * @public\n *\n * @example\n * {@includeCode ../test/uuidToArrayBuffer.test.ts#example}\n */\nexport function uuidToArrayBuffer(uuid: string): ArrayBuffer {\n\tconst hex = uuid.replace(/-/g, '')\n\treturn hexToArrayBuffer(hex)\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@svta/cml-utils",
3
- "version": "1.6.1",
3
+ "version": "1.6.2",
4
4
  "description": "Common utility functions for media processing",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",