@svta/cml-utils 1.3.0 → 1.5.0
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.
- package/dist/index.d.ts +55 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +53 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -175,7 +175,7 @@ type DecodeTextOptions = {
|
|
|
175
175
|
* @example
|
|
176
176
|
* {@includeCode ../test/decodeText.test.ts#example}
|
|
177
177
|
*/
|
|
178
|
-
declare function decodeText(data:
|
|
178
|
+
declare function decodeText(data: ArrayBufferLike | ArrayBufferView, options?: DecodeTextOptions): string;
|
|
179
179
|
//#endregion
|
|
180
180
|
//#region src/encodeText.d.ts
|
|
181
181
|
/**
|
|
@@ -202,14 +202,27 @@ type ExclusiveRecord<K extends PropertyKey, V> = { [P in K]: Record<P, V> & Part
|
|
|
202
202
|
//#endregion
|
|
203
203
|
//#region src/ResourceTiming.d.ts
|
|
204
204
|
/**
|
|
205
|
-
* Resource Timing.
|
|
205
|
+
* Resource Timing. This is a subset of the `PerformanceResourceTiming` interface.
|
|
206
|
+
* https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming
|
|
206
207
|
*
|
|
207
208
|
* @public
|
|
208
209
|
*/
|
|
209
210
|
type ResourceTiming = {
|
|
211
|
+
/**
|
|
212
|
+
* A `DOMHighResTimeStamp` for the time a resource fetch started.
|
|
213
|
+
*/
|
|
210
214
|
startTime: number;
|
|
215
|
+
/**
|
|
216
|
+
* The size (in octets) of the payload body before removing any applied content encodings.
|
|
217
|
+
*/
|
|
211
218
|
encodedBodySize: number;
|
|
219
|
+
/**
|
|
220
|
+
* A `DOMHighResTimeStamp` immediately after the browser receives the first byte of the response from the server.
|
|
221
|
+
*/
|
|
212
222
|
responseStart?: number;
|
|
223
|
+
/**
|
|
224
|
+
* The difference (in milliseconds) between the `responseEnd` and the `startTime`.
|
|
225
|
+
*/
|
|
213
226
|
duration: number;
|
|
214
227
|
};
|
|
215
228
|
//#endregion
|
|
@@ -224,6 +237,20 @@ type ResourceTiming = {
|
|
|
224
237
|
*/
|
|
225
238
|
declare function getBandwidthBps(sample: ResourceTiming): number;
|
|
226
239
|
//#endregion
|
|
240
|
+
//#region src/getBaseUrl.d.ts
|
|
241
|
+
/**
|
|
242
|
+
* Get the base URL from a full URL or a URL object.
|
|
243
|
+
*
|
|
244
|
+
* @param fullUrl - The full URL or URL object.
|
|
245
|
+
* @returns The base URL.
|
|
246
|
+
*
|
|
247
|
+
* @public
|
|
248
|
+
*
|
|
249
|
+
* @example
|
|
250
|
+
* {@includeCode ../test/getBaseUrl.test.ts#example}
|
|
251
|
+
*/
|
|
252
|
+
declare function getBaseUrl(fullUrl: string | URL): string;
|
|
253
|
+
//#endregion
|
|
227
254
|
//#region src/hexToArrayBuffer.d.ts
|
|
228
255
|
/**
|
|
229
256
|
* Decodes a hexadecimal string into an ArrayBuffer.
|
|
@@ -238,6 +265,25 @@ declare function getBandwidthBps(sample: ResourceTiming): number;
|
|
|
238
265
|
*/
|
|
239
266
|
declare function hexToArrayBuffer(hex: string): ArrayBuffer;
|
|
240
267
|
//#endregion
|
|
268
|
+
//#region src/isArrayBufferLike.d.ts
|
|
269
|
+
/**
|
|
270
|
+
* Checks if the given value is `ArrayBufferLike` (i.e. an `ArrayBuffer`
|
|
271
|
+
* or a `SharedArrayBuffer`).
|
|
272
|
+
*
|
|
273
|
+
* This function safely handles environments where
|
|
274
|
+
* `SharedArrayBuffer` is not defined, such as non-cross-origin
|
|
275
|
+
* isolated browser contexts.
|
|
276
|
+
*
|
|
277
|
+
* @param value - The value to check.
|
|
278
|
+
* @returns `true` if the value is an `ArrayBuffer` or `SharedArrayBuffer`.
|
|
279
|
+
*
|
|
280
|
+
* @public
|
|
281
|
+
*
|
|
282
|
+
* @example
|
|
283
|
+
* {@includeCode ../test/isArrayBufferLike.test.ts#example}
|
|
284
|
+
*/
|
|
285
|
+
declare function isArrayBufferLike(value: unknown): value is ArrayBufferLike;
|
|
286
|
+
//#endregion
|
|
241
287
|
//#region src/RequestResponseType.d.ts
|
|
242
288
|
/**
|
|
243
289
|
* The response type of the request.
|
|
@@ -408,7 +454,7 @@ declare function roundToEven(value: number, precision: number): number;
|
|
|
408
454
|
* @example
|
|
409
455
|
* {@includeCode ../test/stringToUint16.test.ts#example}
|
|
410
456
|
*/
|
|
411
|
-
declare function stringToUint16(str: string): Uint16Array
|
|
457
|
+
declare function stringToUint16(str: string): Uint16Array;
|
|
412
458
|
//#endregion
|
|
413
459
|
//#region src/TypedResult.d.ts
|
|
414
460
|
/**
|
|
@@ -439,11 +485,16 @@ declare function unescapeHtml(text: string): string;
|
|
|
439
485
|
/**
|
|
440
486
|
* Constructs a relative path from a URL.
|
|
441
487
|
*
|
|
488
|
+
* If `url` is already a relative path, or its origin differs from `base`, it is returned unchanged.
|
|
489
|
+
*
|
|
442
490
|
* @param url - The destination URL
|
|
443
491
|
* @param base - The base URL
|
|
444
492
|
* @returns The relative path
|
|
445
493
|
*
|
|
446
494
|
* @public
|
|
495
|
+
*
|
|
496
|
+
* @example
|
|
497
|
+
* {@includeCode ../test/urlToRelativePath.test.ts#example}
|
|
447
498
|
*/
|
|
448
499
|
declare function urlToRelativePath(url: string, base: string): string;
|
|
449
500
|
//#endregion
|
|
@@ -479,5 +530,5 @@ declare function uuidToArrayBuffer(uuid: string): ArrayBuffer;
|
|
|
479
530
|
*/
|
|
480
531
|
type ValueOrArray<T> = T | T[];
|
|
481
532
|
//#endregion
|
|
482
|
-
export { DecodeTextOptions, Encoding, ExclusiveRecord, HttpRequest, HttpResponse, Request, RequestResponseType, ResourceTiming, ResponseTypeMap, TypedResult, UTF_16, UTF_16_BE, UTF_16_LE, UTF_8, ValueOf, ValueOrArray, XmlNode, arrayBufferToHex, arrayBufferToUuid, base64decode, base64encode, convertUint8ToUint16, decodeBase64, decodeText, encodeBase64, encodeText, getBandwidthBps, hexToArrayBuffer, roundToEven, stringToUint16, unescapeHtml, urlToRelativePath, uuid, uuidToArrayBuffer };
|
|
533
|
+
export { DecodeTextOptions, Encoding, ExclusiveRecord, HttpRequest, HttpResponse, Request, RequestResponseType, ResourceTiming, ResponseTypeMap, TypedResult, UTF_16, UTF_16_BE, UTF_16_LE, UTF_8, ValueOf, ValueOrArray, XmlNode, arrayBufferToHex, arrayBufferToUuid, base64decode, base64encode, convertUint8ToUint16, decodeBase64, decodeText, encodeBase64, encodeText, getBandwidthBps, getBaseUrl, hexToArrayBuffer, isArrayBufferLike, roundToEven, stringToUint16, unescapeHtml, urlToRelativePath, uuid, uuidToArrayBuffer };
|
|
483
534
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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/encodeText.ts","../src/ExclusiveRecord.ts","../src/ResourceTiming.ts","../src/getBandwidthBps.ts","../src/hexToArrayBuffer.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;;;iBGLgB,YAAA,SAAqB;;;AJGrC;;;;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;;;ARP9B;;;;ACMaC,KOSD,QAAA,GAAW,OPTW,CAAA,OOSI,QPTJ,CAAA;;;ALHlC;;;;ACEA;KYNY,iBAAA;;;AXCZ;aWGY;;;;AbAZ;;;;ACEA;;;;ACLA;;;;ACMA;
|
|
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/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;;;iBGLgB,YAAA,SAAqB;;;AJGrC;;;;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;;;ARP9B;;;;ACMaC,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;;;iBaKgB,UAAA,gBAA0B;;;;AfF1C;;;;ACEgB,KeRJ,efQI,WeRsB,0BAC/B,IAAI,OAAO,GAAG,KACpB,QAAQ,OAAO,QAAQ,GAAG,4CACV,IAAI,EAAE,eAErB;;;;AhBCF;;;;ACEA;KgBPY,cAAA;;;AfEZ;;;;ACMA;;;;ACNA;;;;ACMA;;;;;ALHA;;;;ACEA;;;;ACLgB,iBgBEA,eAAA,ChBF2B,MAAA,EgBEH,chBFG,CAAA,EAAA,MAAA;;;;AFG3C;;;;ACEA;;;;ACLA;;iBiBGgB,UAAA,mBAA6B;;;;AnBA7C;;;;ACEA;;;;ACLA;;iBkBGgB,gBAAA,eAA+B;;;;ApBA/C;;;;ACEA;;;;ACLA;;;;ACMA;;;iBkBEgB,iBAAA,2BAA4C;;;ArBL5D;;;;ACEA;;;cqBJa;EpBDb,SAAgB,IAAA,EAAA,MAAA;;;;ECMhB,SAAaD,QAAAA,EAAqB,UAAA;;;;ACNlC;;KkBaY,mBAAA,GAAsB,eAAe;;;AtBVjD;;;;ACEA;KsBNY;;;ArBCZ;;;;ACMA;;;;ACNA;SmBcQ;;;AlBRR;iBkBagB;;;AjBnBhB;YiBwBW;;;AhB3BX;gBgBgCe;;;AfhCf;SeqCQ;;;AdrCR;;;;ACAA;;eagDc;;;;;AvB1Cd;;;;ACEgB,KuBRJ,OAAA,GvBQI;;;cuBLH;EtBAb,UAAgB,EsBCH,OtBDG,EAAA;;;kBsBIC;ArBEjB,CAAA;;;AHHA;;;;ACEA;KwBNY,gDACX,yBACA,4BACA,mBAAmB,OACnB,0BAA0B,cAC1B,uBAAuB,UACvB,qBAAqB;;;;;AxBAtB;;;KyBJY,uBAAuB,cAAc;ExBDjD;;;WwBMU;EvBAV;;;;ECNA;;;;ECMA;;;;ECNA;;;;ECHA;;;;ECAA;;;YkBuCW;EjBvCX;;;SiB4CQ,gBAAgB;EhB5CxB;;;mBgBiDkB;AfjDlB,CAAA;;;AXMA;;;;ACEA;;K0BLY,OAAA,GAAU;;;;A3BGtB;;;;ACEA;;;;ACLA;iB0BEgB,WAAA;;;;A5BChB;;;;ACEA;;;;ACLA;;iB2BGgB,cAAA,eAA6B;;;;A7BA7C;;;;ACEgB,K6BRJ,W7BQI;ECLhB,IAAgB,E4BFT,C5BES;Q4BDT;;;;;A9BIP;;;;ACEA;;;;ACLA;;iB6BKgB,YAAA;;;;A/BFhB;;;;ACEA;;;;ACLA;;;;ACMA;iB6BAgB,iBAAA;;;;AhCHhB;;;;ACEA;;iBgCNgB,IAAA,CAAA;;;;AjCIhB;;;;ACEA;;;;ACLA;;iBgCKgB,iBAAA,gBAAiC;;;;AlCFjD;;;;ACEgB,KkCRJ,YlCQI,CAAA,CAAA,CAAA,GkCRc,ClCQd,GkCRkB,ClCQQ,EAAA"}
|
package/dist/index.js
CHANGED
|
@@ -110,6 +110,28 @@ function convertUint8ToUint16(input) {
|
|
|
110
110
|
return new Uint16Array(input.buffer);
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
+
//#endregion
|
|
114
|
+
//#region src/isArrayBufferLike.ts
|
|
115
|
+
/**
|
|
116
|
+
* Checks if the given value is `ArrayBufferLike` (i.e. an `ArrayBuffer`
|
|
117
|
+
* or a `SharedArrayBuffer`).
|
|
118
|
+
*
|
|
119
|
+
* This function safely handles environments where
|
|
120
|
+
* `SharedArrayBuffer` is not defined, such as non-cross-origin
|
|
121
|
+
* isolated browser contexts.
|
|
122
|
+
*
|
|
123
|
+
* @param value - The value to check.
|
|
124
|
+
* @returns `true` if the value is an `ArrayBuffer` or `SharedArrayBuffer`.
|
|
125
|
+
*
|
|
126
|
+
* @public
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* {@includeCode ../test/isArrayBufferLike.test.ts#example}
|
|
130
|
+
*/
|
|
131
|
+
function isArrayBufferLike(value) {
|
|
132
|
+
return value instanceof ArrayBuffer || typeof SharedArrayBuffer !== "undefined" && value instanceof SharedArrayBuffer;
|
|
133
|
+
}
|
|
134
|
+
|
|
113
135
|
//#endregion
|
|
114
136
|
//#region src/UTF_16.ts
|
|
115
137
|
/**
|
|
@@ -163,7 +185,7 @@ const UTF_8 = "utf-8";
|
|
|
163
185
|
*/
|
|
164
186
|
function decodeText(data, options = {}) {
|
|
165
187
|
let view;
|
|
166
|
-
if (data
|
|
188
|
+
if (isArrayBufferLike(data)) view = new DataView(data);
|
|
167
189
|
else view = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
168
190
|
let byteOffset = 0;
|
|
169
191
|
let { encoding } = options;
|
|
@@ -276,6 +298,24 @@ function getBandwidthBps(sample) {
|
|
|
276
298
|
return sample.encodedBodySize * 8 / durationSeconds;
|
|
277
299
|
}
|
|
278
300
|
|
|
301
|
+
//#endregion
|
|
302
|
+
//#region src/getBaseUrl.ts
|
|
303
|
+
/**
|
|
304
|
+
* Get the base URL from a full URL or a URL object.
|
|
305
|
+
*
|
|
306
|
+
* @param fullUrl - The full URL or URL object.
|
|
307
|
+
* @returns The base URL.
|
|
308
|
+
*
|
|
309
|
+
* @public
|
|
310
|
+
*
|
|
311
|
+
* @example
|
|
312
|
+
* {@includeCode ../test/getBaseUrl.test.ts#example}
|
|
313
|
+
*/
|
|
314
|
+
function getBaseUrl(fullUrl) {
|
|
315
|
+
const url = typeof fullUrl === "string" ? new URL(fullUrl) : fullUrl;
|
|
316
|
+
return url.origin + url.pathname.substring(0, url.pathname.lastIndexOf("/") + 1);
|
|
317
|
+
}
|
|
318
|
+
|
|
279
319
|
//#endregion
|
|
280
320
|
//#region src/hexToArrayBuffer.ts
|
|
281
321
|
/**
|
|
@@ -396,14 +436,24 @@ function unescapeHtml(text) {
|
|
|
396
436
|
/**
|
|
397
437
|
* Constructs a relative path from a URL.
|
|
398
438
|
*
|
|
439
|
+
* If `url` is already a relative path, or its origin differs from `base`, it is returned unchanged.
|
|
440
|
+
*
|
|
399
441
|
* @param url - The destination URL
|
|
400
442
|
* @param base - The base URL
|
|
401
443
|
* @returns The relative path
|
|
402
444
|
*
|
|
403
445
|
* @public
|
|
446
|
+
*
|
|
447
|
+
* @example
|
|
448
|
+
* {@includeCode ../test/urlToRelativePath.test.ts#example}
|
|
404
449
|
*/
|
|
405
450
|
function urlToRelativePath(url, base) {
|
|
406
|
-
|
|
451
|
+
let to;
|
|
452
|
+
try {
|
|
453
|
+
to = new URL(url);
|
|
454
|
+
} catch {
|
|
455
|
+
return url;
|
|
456
|
+
}
|
|
407
457
|
const from = new URL(base);
|
|
408
458
|
if (to.origin !== from.origin) return url;
|
|
409
459
|
const toPath = to.pathname.split("/").slice(1);
|
|
@@ -468,5 +518,5 @@ function uuidToArrayBuffer(uuid$1) {
|
|
|
468
518
|
}
|
|
469
519
|
|
|
470
520
|
//#endregion
|
|
471
|
-
export { Encoding, RequestResponseType, UTF_16, UTF_16_BE, UTF_16_LE, UTF_8, arrayBufferToHex, arrayBufferToUuid, base64decode, base64encode, convertUint8ToUint16, decodeBase64, decodeText, encodeBase64, encodeText, getBandwidthBps, hexToArrayBuffer, roundToEven, stringToUint16, unescapeHtml, urlToRelativePath, uuid, uuidToArrayBuffer };
|
|
521
|
+
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 };
|
|
472
522
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["base64decode: typeof decodeBase64","base64encode: typeof encodeBase64","view: DataView<ArrayBuffer>","char!: number","uuid","error","uuid"],"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/decodeText.ts","../src/encodeText.ts","../src/Encoding.ts","../src/getBandwidthBps.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","/**\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 */\nexport function encodeBase64(binary: Uint8Array): string {\n\treturn btoa(String.fromCharCode(...binary))\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 * 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 { 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. Similar to `TextDecoder.decode`\n * but with a fallback for environments that don't support `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: ArrayBuffer | ArrayBufferView<ArrayBuffer>, options: DecodeTextOptions = {}): string {\n\tlet view: DataView<ArrayBuffer>\n\n\tif (data instanceof ArrayBuffer) {\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. Similar to `TextEncoder.encode`\n * but with a fallback for environments that don't support `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 (bps).\n *\n * @param sample - A ResourceTiming sample\n * @returns\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 * 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 * This implements the rounding procedure described in step 2 of the \"Serializing a Decimal\" specification.\n * This rounding 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<ArrayBuffer> {\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 '&': return '&'\n\t\t\tcase '<': return '<'\n\t\t\tcase '>': return '>'\n\t\t\tcase '"': return '\"'\n\t\t\tcase ''': return '\\''\n\t\t\tcase ' ': return '\\u{a0}'\n\t\t\tcase '‎': return '\\u{200e}'\n\t\t\tcase '‏': 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 * @param url - The destination URL\n * @param base - The base URL\n * @returns The relative path\n *\n * @public\n */\nexport function urlToRelativePath(url: string, base: string): string {\n\tconst to = new URL(url)\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// remove common parents\n\tconst length = Math.min(toPath.length, fromPath.length)\n\n\tfor (let i = 0; i < length; i++) {\n\t\tif (toPath[i] !== fromPath[i]) {\n\t\t\tbreak\n\t\t}\n\n\t\ttoPath.shift()\n\t\tfromPath.shift()\n\t}\n\n\t// add back paths\n\twhile (fromPath.length) {\n\t\tfromPath.shift()\n\t\ttoPath.unshift('..')\n\t}\n\n\tconst relativePath = toPath.join('/')\n\n\t// preserve query parameters and hash of the destination url\n\treturn relativePath + to.search + to.hash\n}\n","/**\n * Generate a random v4 UUID\n *\n * @returns A random v4 UUID\n *\n * @public\n */\nexport function uuid(): string {\n\ttry {\n\t\treturn crypto.randomUUID()\n\t}\n\tcatch (error) {\n\t\ttry {\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\tcatch (error) {\n\t\t\tlet dt = new Date().getTime()\n\t\t\tconst uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n\t\t\t\tconst r = (dt + Math.random() * 16) % 16 | 0\n\t\t\t\tdt = Math.floor(dt / 16)\n\t\t\t\treturn (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16)\n\t\t\t})\n\t\t\treturn uuid\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":";;;;;;;;;;;;AAWA,SAAgB,iBAAiB,QAA6B;AAE7D,QADa,IAAI,WAAW,OAAO,CACvB,QAAQ,QAAQ,SAAS,SAAS,KAAK,SAAS,GAAG,CAAC,SAAS,GAAG,IAAI,EAAE,GAAG;;;;;;;;;;;;;;;;ACAtF,SAAgB,kBAAkB,QAA6B;AAE9D,QADY,iBAAiB,OAAO,CACzB,QAAQ,mCAAmC,iBAAiB;;;;;;;;;;;;;ACPxE,SAAgB,aAAa,KAAyB;AACrD,QAAO,IAAI,WAAW,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,KAAK,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;;;;;;;;;;;;;;;;;ACKlE,MAAaA,eAAoC;;;;;;;;;;;;ACNjD,SAAgB,aAAa,QAA4B;AACxD,QAAO,KAAK,OAAO,aAAa,GAAG,OAAO,CAAC;;;;;;;;;;;;;;;;;ACK5C,MAAaC,eAAoC;;;;;;;;;;;;ACNjD,SAAgB,qBAAqB,OAAgC;AACpE,KAAI,MAAM,SAAS,MAAM,GAAG;EAC3B,MAAM,SAAS,IAAI,WAAW,MAAM,SAAS,EAAE;AAC/C,SAAO,IAAI,MAAM;AACjB,SAAO,IAAI,YAAY,OAAO,OAAO;;AAEtC,QAAO,IAAI,YAAY,MAAM,OAAO;;;;;;;;;;ACTrC,MAAa,SAAS;;;;;;;;;ACAtB,MAAa,YAAY;;;;;;;;;ACAzB,MAAa,YAAY;;;;;;;;;ACAzB,MAAa,QAAQ;;;;;;;;;;;;;;;;;ACcrB,SAAgB,WAAW,MAAkD,UAA6B,EAAE,EAAU;CACrH,IAAIC;AAEJ,KAAI,gBAAgB,YACnB,QAAO,IAAI,SAAS,KAAK;KAGzB,QAAO,IAAI,SAAS,KAAK,QAAQ,KAAK,YAAY,KAAK,WAAW;CAGnE,IAAI,aAAa;CACjB,IAAI,EAAE,aAAa;AAGnB,KAAI,CAAC,UAAU;EACd,MAAM,QAAQ,KAAK,SAAS,EAAE;EAC9B,MAAM,SAAS,KAAK,SAAS,EAAE;AAG/B,MAAI,SAAS,OAAQ,UAAU,OAAQ,KAAK,SAAS,EAAE,IAAI,KAAM;AAChE,cAAW;AACX,gBAAa;aAGL,SAAS,OAAQ,UAAU,KAAM;AACzC,cAAW;AACX,gBAAa;aAGL,SAAS,OAAQ,UAAU,KAAM;AACzC,cAAW;AACX,gBAAa;QAGb,YAAW;;AAIb,KAAI,OAAO,gBAAgB,YAC1B,QAAO,IAAI,YAAY,SAAS,CAAC,OAAO,KAAK;CAG9C,MAAM,EAAE,eAAe;CACvB,MAAM,SAAS,aAAa;CAC5B,IAAI,MAAM;CACV,IAAIC;AAEJ,QAAO,aAAa,YAAY;AAC/B,UAAQ,UAAR;GACC,KAAK;AACJ,WAAO,KAAK,SAAS,WAAW;AAGhC,QAAI,OAAO,IACV;aAGQ,QAAQ,OAAO,QAAQ,IAC/B,KAAI,aAAa,IAAI,YAAY;KAChC,MAAM,QAAQ,KAAK,SAAS,aAAa,EAAE;AAC3C,SAAI,SAAS,OAAO,SAAS,KAAK;AACjC,cAAS,OAAO,OAAS,IAAM,QAAQ;AACvC,oBAAc;WAId;UAKD;aAIO,QAAQ,OAAO,QAAQ,IAC/B,KAAI,aAAa,KAAK,aAAa,GAAG;KACrC,MAAM,QAAQ,KAAK,SAAS,aAAa,EAAE;KAC3C,MAAM,QAAQ,KAAK,SAAS,aAAa,EAAE;AAC3C,SAAI,SAAS,OAAO,SAAS,OAAO,SAAS,OAAO,SAAS,KAAK;AACjE,cAAS,OAAO,OAAS,MAAQ,QAAQ,OAAS,IAAM,QAAQ;AAChE,oBAAc;WAId;UAKD;aAIO,QAAQ,OAAO,QAAQ,IAC/B,KAAI,aAAa,KAAK,aAAa,GAAG;KACrC,MAAM,QAAQ,KAAK,SAAS,aAAa,EAAE;KAC3C,MAAM,QAAQ,KAAK,SAAS,aAAa,EAAE;KAC3C,MAAM,QAAQ,KAAK,SAAS,aAAa,EAAE;AAC3C,SAAI,SAAS,OAAO,SAAS,OAAO,SAAS,OAAO,SAAS,OAAO,SAAS,OAAO,SAAS,KAAK;AACjG,cAAS,OAAO,MAAS,MAAQ,QAAQ,OAAS,MAAQ,QAAQ,OAAS,IAAM,QAAQ;AACzF,oBAAc;WAId;UAKD;QAKD;AAED;GAED,KAAK;GACL,KAAK;GACL,KAAK;AACJ,WAAO,KAAK,UAAU,YAAY,OAAO;AACzC,kBAAc;AACd;;AAGF,SAAO,OAAO,cAAc,KAAK;;AAGlC,QAAO;;;;;;;;;;;;;;;;;ACxIR,SAAgB,WAAW,MAA0B;AACpD,QAAO,IAAI,aAAa,CAAC,OAAO,KAAK;;;;;;;;;;ACHtC,MAAa,WAAW;CACvB,MAAM;CACN,OAAO;CACP,SAAS;CACT,SAAS;CACT;;;;;;;;;;;;ACND,SAAgB,gBAAgB,QAAgC;CAC/D,MAAM,kBAAkB,OAAO,WAAW;AAE1C,QADqB,OAAO,kBAAkB,IAAI;;;;;;;;;;;;;;;;ACDnD,SAAgB,iBAAiB,KAA0B;CAC1D,MAAM,yBAAS,IAAI,YAAY,IAAI,SAAS,EAAE;CAC9C,MAAM,OAAO,IAAI,WAAW,OAAO;AACnC,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,EACpC,MAAK,IAAI,KAAK,SAAS,IAAI,MAAM,GAAG,IAAI,EAAE,EAAE,GAAG;AAEhD,QAAO;;;;;;;;;;;;ACRR,MAAa,sBAAsB;CAClC,MAAM;CACN,MAAM;CACN,MAAM;CACN,cAAc;CACd,UAAU;CACV,QAAQ;CACR;;;;;;;;;;;;;;ACND,SAAgB,YAAY,OAAe,WAA2B;AACrE,KAAI,QAAQ,EACX,QAAO,CAAC,YAAY,CAAC,OAAO,UAAU;CAGvC,MAAM,eAAe,KAAK,IAAI,IAAI,UAAU;AAG5C,KAFsB,KAAK,IAAM,QAAQ,eAAgB,IAAK,GAAI,GAAG,OAAO,SAEzD;EAElB,MAAM,eAAe,KAAK,MAAM,QAAQ,aAAa;AACrD,UAAQ,eAAe,MAAM,IAAI,eAAe,eAAe,KAAK;OAIpE,QAAO,KAAK,MAAM,QAAQ,aAAa,GAAG;;;;;;;;;;;;;;;;ACd5C,SAAgB,eAAe,KAAuC;CACrE,MAAM,yBAAS,IAAI,YAAY,IAAI,SAAS,EAAE;CAC9C,MAAM,OAAO,IAAI,SAAS,OAAO;AAEjC,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,IAC/B,MAAK,UAAU,IAAI,GAAG,IAAI,WAAW,EAAE,EAAE,KAAK;AAG/C,QAAO,IAAI,YAAY,OAAO;;;;;ACnB/B,MAAM,cAAc;;;;;;;;;;;;AAapB,SAAgB,aAAa,MAAsB;AAClD,KAAI,KAAK,QAAQ,IAAI,KAAK,GACzB,QAAO;AAGR,QAAO,KAAK,QAAQ,cAAc,UAAU;AAC3C,UAAQ,OAAR;GACC,KAAK,QAAS,QAAO;GACrB,KAAK,OAAQ,QAAO;GACpB,KAAK,OAAQ,QAAO;GACpB,KAAK,SAAU,QAAO;GACtB,KAAK,SAAU,QAAO;GACtB,KAAK,SAAU,QAAO;GACtB,KAAK,QAAS,QAAO;GACrB,KAAK,QAAS,QAAO;GACrB;AACC,QAAI,MAAM,OAAO,KAAK;KACrB,MAAM,OAAO,MAAM,OAAO,OAAO,MAAM,OAAO,MAAM,SAAS,MAAM,MAAM,EAAE,EAAE,GAAG,GAAG,SAAS,MAAM,MAAM,EAAE,EAAE,GAAG;AAC/G,YAAO,OAAO,cAAc,KAAK;;AAElC,WAAO;;GAGR;;;;;;;;;;;;;;AC3BH,SAAgB,kBAAkB,KAAa,MAAsB;CACpE,MAAM,KAAK,IAAI,IAAI,IAAI;CACvB,MAAM,OAAO,IAAI,IAAI,KAAK;AAE1B,KAAI,GAAG,WAAW,KAAK,OACtB,QAAO;CAGR,MAAM,SAAS,GAAG,SAAS,MAAM,IAAI,CAAC,MAAM,EAAE;CAC9C,MAAM,WAAW,KAAK,SAAS,MAAM,IAAI,CAAC,MAAM,GAAG,GAAG;CAGtD,MAAM,SAAS,KAAK,IAAI,OAAO,QAAQ,SAAS,OAAO;AAEvD,MAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK;AAChC,MAAI,OAAO,OAAO,SAAS,GAC1B;AAGD,SAAO,OAAO;AACd,WAAS,OAAO;;AAIjB,QAAO,SAAS,QAAQ;AACvB,WAAS,OAAO;AAChB,SAAO,QAAQ,KAAK;;AAMrB,QAHqB,OAAO,KAAK,IAAI,GAGf,GAAG,SAAS,GAAG;;;;;;;;;;;;AClCtC,SAAgB,OAAe;AAC9B,KAAI;AACH,SAAO,OAAO,YAAY;UAEpB,OAAO;AACb,MAAI;GACH,MAAM,MAAM,IAAI,gBAAgB,IAAI,MAAM,CAAC;GAC3C,MAAMC,SAAO,IAAI,UAAU;AAC3B,OAAI,gBAAgB,IAAI;AACxB,UAAOA,OAAK,MAAMA,OAAK,YAAY,IAAI,GAAG,EAAE;WAEtCC,SAAO;GACb,IAAI,sBAAK,IAAI,MAAM,EAAC,SAAS;AAM7B,UALa,uCAAuC,QAAQ,UAAU,MAAM;IAC3E,MAAM,KAAK,KAAK,KAAK,QAAQ,GAAG,MAAM,KAAK;AAC3C,SAAK,KAAK,MAAM,KAAK,GAAG;AACxB,YAAQ,KAAK,MAAM,IAAK,IAAI,IAAM,GAAM,SAAS,GAAG;KACnD;;;;;;;;;;;;;;;;;;ACXL,SAAgB,kBAAkB,QAA2B;AAE5D,QAAO,iBADKC,OAAK,QAAQ,MAAM,GAAG,CACN"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["base64decode: typeof decodeBase64","base64encode: typeof encodeBase64","view: DataView","char!: number","to: URL","uuid","error","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","/**\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 */\nexport function encodeBase64(binary: Uint8Array): string {\n\treturn btoa(String.fromCharCode(...binary))\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` (i.e. an `ArrayBuffer`\n * or a `SharedArrayBuffer`).\n *\n * This function safely handles environments where\n * `SharedArrayBuffer` is not defined, such as non-cross-origin\n * isolated browser contexts.\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. Similar to `TextDecoder.decode`\n * but with a fallback for environments that don't support `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. Similar to `TextEncoder.encode`\n * but with a fallback for environments that don't support `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 (bps).\n *\n * @param sample - A ResourceTiming sample\n * @returns\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 * Get 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 * This implements the rounding procedure described in step 2 of the \"Serializing a Decimal\" specification.\n * This rounding 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 '&': return '&'\n\t\t\tcase '<': return '<'\n\t\t\tcase '>': return '>'\n\t\t\tcase '"': return '\"'\n\t\t\tcase ''': return '\\''\n\t\t\tcase ' ': return '\\u{a0}'\n\t\t\tcase '‎': return '\\u{200e}'\n\t\t\tcase '‏': 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 a relative path, or its origin differs from `base`, it is returned 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// remove common parents\n\tconst length = Math.min(toPath.length, fromPath.length)\n\n\tfor (let i = 0; i < length; i++) {\n\t\tif (toPath[i] !== fromPath[i]) {\n\t\t\tbreak\n\t\t}\n\n\t\ttoPath.shift()\n\t\tfromPath.shift()\n\t}\n\n\t// add back paths\n\twhile (fromPath.length) {\n\t\tfromPath.shift()\n\t\ttoPath.unshift('..')\n\t}\n\n\tconst relativePath = toPath.join('/')\n\n\t// preserve query parameters and hash of the destination url\n\treturn relativePath + to.search + to.hash\n}\n","/**\n * Generate a random v4 UUID\n *\n * @returns A random v4 UUID\n *\n * @public\n */\nexport function uuid(): string {\n\ttry {\n\t\treturn crypto.randomUUID()\n\t}\n\tcatch (error) {\n\t\ttry {\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\tcatch (error) {\n\t\t\tlet dt = new Date().getTime()\n\t\t\tconst uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n\t\t\t\tconst r = (dt + Math.random() * 16) % 16 | 0\n\t\t\t\tdt = Math.floor(dt / 16)\n\t\t\t\treturn (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16)\n\t\t\t})\n\t\t\treturn uuid\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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"}
|