@utilix-tech/sdk 0.39.0 → 0.41.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.
Files changed (35) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +30 -5
  3. package/dist/{chunk-47RI5V3B.js → chunk-2MTHD2LG.js} +62 -1
  4. package/dist/{chunk-Y4BVU76A.js → chunk-7WSFJTYP.js} +116 -1
  5. package/dist/{chunk-RZUNTYEH.js → chunk-JR354NH4.js} +61 -1
  6. package/dist/{chunk-VEVNIGJ6.js → chunk-PET2CGTH.js} +21 -1
  7. package/dist/{data-BCf3dm-E.d.cts → data-BKpEOcOX.d.cts} +35 -2
  8. package/dist/{data-BCf3dm-E.d.ts → data-BKpEOcOX.d.ts} +35 -2
  9. package/dist/{hashing-Dnj0IAZf.d.cts → hashing-CJjlvqS_.d.cts} +28 -2
  10. package/dist/{hashing-Dnj0IAZf.d.ts → hashing-CJjlvqS_.d.ts} +28 -2
  11. package/dist/index.cjs +256 -0
  12. package/dist/index.d.cts +4 -4
  13. package/dist/index.d.ts +4 -4
  14. package/dist/index.js +4 -4
  15. package/dist/{network-CKPoesdD.d.ts → network-BC8McQOh.d.cts} +60 -2
  16. package/dist/{network-CKPoesdD.d.cts → network-BC8McQOh.d.ts} +60 -2
  17. package/dist/tools/data.cjs +60 -0
  18. package/dist/tools/data.d.cts +1 -1
  19. package/dist/tools/data.d.ts +1 -1
  20. package/dist/tools/data.js +1 -1
  21. package/dist/tools/hashing.cjs +20 -0
  22. package/dist/tools/hashing.d.cts +1 -1
  23. package/dist/tools/hashing.d.ts +1 -1
  24. package/dist/tools/hashing.js +1 -1
  25. package/dist/tools/network.cjs +115 -0
  26. package/dist/tools/network.d.cts +1 -1
  27. package/dist/tools/network.d.ts +1 -1
  28. package/dist/tools/network.js +1 -1
  29. package/dist/tools/units.cjs +61 -0
  30. package/dist/tools/units.d.cts +1 -1
  31. package/dist/tools/units.d.ts +1 -1
  32. package/dist/tools/units.js +1 -1
  33. package/dist/{units-HQrMCiNM.d.ts → units-CzPwRC03.d.cts} +50 -2
  34. package/dist/{units-HQrMCiNM.d.cts → units-CzPwRC03.d.ts} +50 -2
  35. package/package.json +1 -1
@@ -8,6 +8,7 @@
8
8
  * generatePlain, createEntry, parseHtpasswdFile,
9
9
  * generateHtpasswdFile, validateUsername
10
10
  * - sri-hash-generator: generateSri, generateSriAll (SHA-256/384/512 Subresource Integrity hashes)
11
+ * - etag-generator : generateEtag (MD5/SHA-1/SHA-256 content-hash ETag header values)
11
12
  */
12
13
  type HashAlgorithm = 'MD5' | 'SHA-1' | 'SHA-256' | 'SHA-384' | 'SHA-512';
13
14
  declare const HASH_ALGORITHMS: HashAlgorithm[];
@@ -66,8 +67,32 @@ declare function generateSri(content: string, algorithm?: SriAlgorithm): SriResu
66
67
  declare function generateSriAll(content: string): SriResult[] | {
67
68
  error: string;
68
69
  };
70
+ type EtagAlgorithm = 'MD5' | 'SHA-1' | 'SHA-256';
71
+ declare const ETAG_ALGORITHMS: EtagAlgorithm[];
72
+ interface EtagResult {
73
+ algorithm: EtagAlgorithm;
74
+ weak: boolean;
75
+ hash: string;
76
+ etag: string;
77
+ headerName: 'ETag';
78
+ snippet: string;
79
+ }
80
+ /**
81
+ * Compute a content-hash ETag for the given content: digest it with the
82
+ * chosen algorithm, hex-encode it, and quote it into the exact string an
83
+ * ETag response header expects, with an optional weak-validator (W/)
84
+ * prefix. This hashes whatever content you give it; it does not replicate
85
+ * any specific web server's own ETag algorithm, which is often based on
86
+ * file size and modification time instead of content.
87
+ */
88
+ declare function generateEtag(content: string, algorithm?: EtagAlgorithm, weak?: boolean): EtagResult | {
89
+ error: string;
90
+ };
69
91
 
70
92
  type hashing_BcryptResult = BcryptResult;
93
+ declare const hashing_ETAG_ALGORITHMS: typeof ETAG_ALGORITHMS;
94
+ type hashing_EtagAlgorithm = EtagAlgorithm;
95
+ type hashing_EtagResult = EtagResult;
71
96
  declare const hashing_HASH_ALGORITHMS: typeof HASH_ALGORITHMS;
72
97
  declare const hashing_HASH_BITS: typeof HASH_BITS;
73
98
  type hashing_HashAlgorithm = HashAlgorithm;
@@ -80,6 +105,7 @@ type hashing_SriAlgorithm = SriAlgorithm;
80
105
  type hashing_SriResult = SriResult;
81
106
  declare const hashing_createEntry: typeof createEntry;
82
107
  declare const hashing_generateBcryptHash: typeof generateBcryptHash;
108
+ declare const hashing_generateEtag: typeof generateEtag;
83
109
  declare const hashing_generateHtpasswdFile: typeof generateHtpasswdFile;
84
110
  declare const hashing_generateMd5Hash: typeof generateMd5Hash;
85
111
  declare const hashing_generatePlain: typeof generatePlain;
@@ -95,7 +121,7 @@ declare const hashing_validateRounds: typeof validateRounds;
95
121
  declare const hashing_validateUsername: typeof validateUsername;
96
122
  declare const hashing_verifyPassword: typeof verifyPassword;
97
123
  declare namespace hashing {
98
- export { type hashing_BcryptResult as BcryptResult, hashing_HASH_ALGORITHMS as HASH_ALGORITHMS, hashing_HASH_BITS as HASH_BITS, type hashing_HashAlgorithm as HashAlgorithm, type hashing_HashResult as HashResult, type hashing_HtpasswdAlgorithm as HtpasswdAlgorithm, type hashing_HtpasswdEntry as HtpasswdEntry, hashing_ROUND_OPTIONS as ROUND_OPTIONS, hashing_SRI_ALGORITHMS as SRI_ALGORITHMS, type hashing_SriAlgorithm as SriAlgorithm, type hashing_SriResult as SriResult, hashing_createEntry as createEntry, hashing_generateBcryptHash as generateBcryptHash, hashing_generateHtpasswdFile as generateHtpasswdFile, hashing_generateMd5Hash as generateMd5Hash, hashing_generatePlain as generatePlain, hashing_generateSha1Hash as generateSha1Hash, hashing_generateSri as generateSri, hashing_generateSriAll as generateSriAll, hashing_hashAll as hashAll, hashing_hashOne as hashOne, hashing_hashPassword as hashPassword, hashing_hashWithTiming as hashWithTiming, hashing_parseHtpasswdFile as parseHtpasswdFile, hashing_validateRounds as validateRounds, hashing_validateUsername as validateUsername, hashing_verifyPassword as verifyPassword };
124
+ export { type hashing_BcryptResult as BcryptResult, hashing_ETAG_ALGORITHMS as ETAG_ALGORITHMS, type hashing_EtagAlgorithm as EtagAlgorithm, type hashing_EtagResult as EtagResult, hashing_HASH_ALGORITHMS as HASH_ALGORITHMS, hashing_HASH_BITS as HASH_BITS, type hashing_HashAlgorithm as HashAlgorithm, type hashing_HashResult as HashResult, type hashing_HtpasswdAlgorithm as HtpasswdAlgorithm, type hashing_HtpasswdEntry as HtpasswdEntry, hashing_ROUND_OPTIONS as ROUND_OPTIONS, hashing_SRI_ALGORITHMS as SRI_ALGORITHMS, type hashing_SriAlgorithm as SriAlgorithm, type hashing_SriResult as SriResult, hashing_createEntry as createEntry, hashing_generateBcryptHash as generateBcryptHash, hashing_generateEtag as generateEtag, hashing_generateHtpasswdFile as generateHtpasswdFile, hashing_generateMd5Hash as generateMd5Hash, hashing_generatePlain as generatePlain, hashing_generateSha1Hash as generateSha1Hash, hashing_generateSri as generateSri, hashing_generateSriAll as generateSriAll, hashing_hashAll as hashAll, hashing_hashOne as hashOne, hashing_hashPassword as hashPassword, hashing_hashWithTiming as hashWithTiming, hashing_parseHtpasswdFile as parseHtpasswdFile, hashing_validateRounds as validateRounds, hashing_validateUsername as validateUsername, hashing_verifyPassword as verifyPassword };
99
125
  }
100
126
 
101
- export { type BcryptResult as B, HASH_ALGORITHMS as H, ROUND_OPTIONS as R, SRI_ALGORITHMS as S, HASH_BITS as a, type HashAlgorithm as b, type HashResult as c, type HtpasswdAlgorithm as d, type HtpasswdEntry as e, type SriAlgorithm as f, type SriResult as g, hashing as h, createEntry as i, generateBcryptHash as j, generateHtpasswdFile as k, generateMd5Hash as l, generatePlain as m, generateSha1Hash as n, generateSri as o, generateSriAll as p, hashAll as q, hashOne as r, hashPassword as s, hashWithTiming as t, parseHtpasswdFile as u, validateRounds as v, validateUsername as w, verifyPassword as x };
127
+ export { verifyPassword as A, type BcryptResult as B, ETAG_ALGORITHMS as E, HASH_ALGORITHMS as H, ROUND_OPTIONS as R, SRI_ALGORITHMS as S, type EtagAlgorithm as a, type EtagResult as b, HASH_BITS as c, type HashAlgorithm as d, type HashResult as e, type HtpasswdAlgorithm as f, type HtpasswdEntry as g, hashing as h, type SriAlgorithm as i, type SriResult as j, createEntry as k, generateBcryptHash as l, generateEtag as m, generateHtpasswdFile as n, generateMd5Hash as o, generatePlain as p, generateSha1Hash as q, generateSri as r, generateSriAll as s, hashAll as t, hashOne as u, hashPassword as v, hashWithTiming as w, parseHtpasswdFile as x, validateRounds as y, validateUsername as z };
@@ -8,6 +8,7 @@
8
8
  * generatePlain, createEntry, parseHtpasswdFile,
9
9
  * generateHtpasswdFile, validateUsername
10
10
  * - sri-hash-generator: generateSri, generateSriAll (SHA-256/384/512 Subresource Integrity hashes)
11
+ * - etag-generator : generateEtag (MD5/SHA-1/SHA-256 content-hash ETag header values)
11
12
  */
12
13
  type HashAlgorithm = 'MD5' | 'SHA-1' | 'SHA-256' | 'SHA-384' | 'SHA-512';
13
14
  declare const HASH_ALGORITHMS: HashAlgorithm[];
@@ -66,8 +67,32 @@ declare function generateSri(content: string, algorithm?: SriAlgorithm): SriResu
66
67
  declare function generateSriAll(content: string): SriResult[] | {
67
68
  error: string;
68
69
  };
70
+ type EtagAlgorithm = 'MD5' | 'SHA-1' | 'SHA-256';
71
+ declare const ETAG_ALGORITHMS: EtagAlgorithm[];
72
+ interface EtagResult {
73
+ algorithm: EtagAlgorithm;
74
+ weak: boolean;
75
+ hash: string;
76
+ etag: string;
77
+ headerName: 'ETag';
78
+ snippet: string;
79
+ }
80
+ /**
81
+ * Compute a content-hash ETag for the given content: digest it with the
82
+ * chosen algorithm, hex-encode it, and quote it into the exact string an
83
+ * ETag response header expects, with an optional weak-validator (W/)
84
+ * prefix. This hashes whatever content you give it; it does not replicate
85
+ * any specific web server's own ETag algorithm, which is often based on
86
+ * file size and modification time instead of content.
87
+ */
88
+ declare function generateEtag(content: string, algorithm?: EtagAlgorithm, weak?: boolean): EtagResult | {
89
+ error: string;
90
+ };
69
91
 
70
92
  type hashing_BcryptResult = BcryptResult;
93
+ declare const hashing_ETAG_ALGORITHMS: typeof ETAG_ALGORITHMS;
94
+ type hashing_EtagAlgorithm = EtagAlgorithm;
95
+ type hashing_EtagResult = EtagResult;
71
96
  declare const hashing_HASH_ALGORITHMS: typeof HASH_ALGORITHMS;
72
97
  declare const hashing_HASH_BITS: typeof HASH_BITS;
73
98
  type hashing_HashAlgorithm = HashAlgorithm;
@@ -80,6 +105,7 @@ type hashing_SriAlgorithm = SriAlgorithm;
80
105
  type hashing_SriResult = SriResult;
81
106
  declare const hashing_createEntry: typeof createEntry;
82
107
  declare const hashing_generateBcryptHash: typeof generateBcryptHash;
108
+ declare const hashing_generateEtag: typeof generateEtag;
83
109
  declare const hashing_generateHtpasswdFile: typeof generateHtpasswdFile;
84
110
  declare const hashing_generateMd5Hash: typeof generateMd5Hash;
85
111
  declare const hashing_generatePlain: typeof generatePlain;
@@ -95,7 +121,7 @@ declare const hashing_validateRounds: typeof validateRounds;
95
121
  declare const hashing_validateUsername: typeof validateUsername;
96
122
  declare const hashing_verifyPassword: typeof verifyPassword;
97
123
  declare namespace hashing {
98
- export { type hashing_BcryptResult as BcryptResult, hashing_HASH_ALGORITHMS as HASH_ALGORITHMS, hashing_HASH_BITS as HASH_BITS, type hashing_HashAlgorithm as HashAlgorithm, type hashing_HashResult as HashResult, type hashing_HtpasswdAlgorithm as HtpasswdAlgorithm, type hashing_HtpasswdEntry as HtpasswdEntry, hashing_ROUND_OPTIONS as ROUND_OPTIONS, hashing_SRI_ALGORITHMS as SRI_ALGORITHMS, type hashing_SriAlgorithm as SriAlgorithm, type hashing_SriResult as SriResult, hashing_createEntry as createEntry, hashing_generateBcryptHash as generateBcryptHash, hashing_generateHtpasswdFile as generateHtpasswdFile, hashing_generateMd5Hash as generateMd5Hash, hashing_generatePlain as generatePlain, hashing_generateSha1Hash as generateSha1Hash, hashing_generateSri as generateSri, hashing_generateSriAll as generateSriAll, hashing_hashAll as hashAll, hashing_hashOne as hashOne, hashing_hashPassword as hashPassword, hashing_hashWithTiming as hashWithTiming, hashing_parseHtpasswdFile as parseHtpasswdFile, hashing_validateRounds as validateRounds, hashing_validateUsername as validateUsername, hashing_verifyPassword as verifyPassword };
124
+ export { type hashing_BcryptResult as BcryptResult, hashing_ETAG_ALGORITHMS as ETAG_ALGORITHMS, type hashing_EtagAlgorithm as EtagAlgorithm, type hashing_EtagResult as EtagResult, hashing_HASH_ALGORITHMS as HASH_ALGORITHMS, hashing_HASH_BITS as HASH_BITS, type hashing_HashAlgorithm as HashAlgorithm, type hashing_HashResult as HashResult, type hashing_HtpasswdAlgorithm as HtpasswdAlgorithm, type hashing_HtpasswdEntry as HtpasswdEntry, hashing_ROUND_OPTIONS as ROUND_OPTIONS, hashing_SRI_ALGORITHMS as SRI_ALGORITHMS, type hashing_SriAlgorithm as SriAlgorithm, type hashing_SriResult as SriResult, hashing_createEntry as createEntry, hashing_generateBcryptHash as generateBcryptHash, hashing_generateEtag as generateEtag, hashing_generateHtpasswdFile as generateHtpasswdFile, hashing_generateMd5Hash as generateMd5Hash, hashing_generatePlain as generatePlain, hashing_generateSha1Hash as generateSha1Hash, hashing_generateSri as generateSri, hashing_generateSriAll as generateSriAll, hashing_hashAll as hashAll, hashing_hashOne as hashOne, hashing_hashPassword as hashPassword, hashing_hashWithTiming as hashWithTiming, hashing_parseHtpasswdFile as parseHtpasswdFile, hashing_validateRounds as validateRounds, hashing_validateUsername as validateUsername, hashing_verifyPassword as verifyPassword };
99
125
  }
100
126
 
101
- export { type BcryptResult as B, HASH_ALGORITHMS as H, ROUND_OPTIONS as R, SRI_ALGORITHMS as S, HASH_BITS as a, type HashAlgorithm as b, type HashResult as c, type HtpasswdAlgorithm as d, type HtpasswdEntry as e, type SriAlgorithm as f, type SriResult as g, hashing as h, createEntry as i, generateBcryptHash as j, generateHtpasswdFile as k, generateMd5Hash as l, generatePlain as m, generateSha1Hash as n, generateSri as o, generateSriAll as p, hashAll as q, hashOne as r, hashPassword as s, hashWithTiming as t, parseHtpasswdFile as u, validateRounds as v, validateUsername as w, verifyPassword as x };
127
+ export { verifyPassword as A, type BcryptResult as B, ETAG_ALGORITHMS as E, HASH_ALGORITHMS as H, ROUND_OPTIONS as R, SRI_ALGORITHMS as S, type EtagAlgorithm as a, type EtagResult as b, HASH_BITS as c, type HashAlgorithm as d, type HashResult as e, type HtpasswdAlgorithm as f, type HtpasswdEntry as g, hashing as h, type SriAlgorithm as i, type SriResult as j, createEntry as k, generateBcryptHash as l, generateEtag as m, generateHtpasswdFile as n, generateMd5Hash as o, generatePlain as p, generateSha1Hash as q, generateSri as r, generateSriAll as s, hashAll as t, hashOne as u, hashPassword as v, hashWithTiming as w, parseHtpasswdFile as x, validateRounds as y, validateUsername as z };
package/dist/index.cjs CHANGED
@@ -1766,12 +1766,14 @@ function base62Decode(input) {
1766
1766
  // src/tools/hashing.ts
1767
1767
  var hashing_exports = {};
1768
1768
  __export(hashing_exports, {
1769
+ ETAG_ALGORITHMS: () => ETAG_ALGORITHMS,
1769
1770
  HASH_ALGORITHMS: () => HASH_ALGORITHMS,
1770
1771
  HASH_BITS: () => HASH_BITS,
1771
1772
  ROUND_OPTIONS: () => ROUND_OPTIONS,
1772
1773
  SRI_ALGORITHMS: () => SRI_ALGORITHMS,
1773
1774
  createEntry: () => createEntry,
1774
1775
  generateBcryptHash: () => generateBcryptHash,
1776
+ generateEtag: () => generateEtag,
1775
1777
  generateHtpasswdFile: () => generateHtpasswdFile,
1776
1778
  generateMd5Hash: () => generateMd5Hash,
1777
1779
  generatePlain: () => generatePlain,
@@ -2032,6 +2034,24 @@ function generateSriAll(content) {
2032
2034
  }
2033
2035
  return SRI_ALGORITHMS.map((alg) => generateSri(content, alg));
2034
2036
  }
2037
+ var ETAG_ALGORITHMS = ["MD5", "SHA-1", "SHA-256"];
2038
+ var ETAG_NODE_ALG_MAP = {
2039
+ "MD5": "md5",
2040
+ "SHA-1": "sha1",
2041
+ "SHA-256": "sha256"
2042
+ };
2043
+ function generateEtag(content, algorithm = "SHA-1", weak = false) {
2044
+ if (typeof content !== "string" || content.length === 0) {
2045
+ return { error: "Content is required" };
2046
+ }
2047
+ if (!ETAG_ALGORITHMS.includes(algorithm)) {
2048
+ return { error: `Unknown algorithm: ${algorithm}. Must be one of ${ETAG_ALGORITHMS.join(", ")}` };
2049
+ }
2050
+ const hash = crypto.createHash(ETAG_NODE_ALG_MAP[algorithm]).update(content, "utf8").digest("hex");
2051
+ const quoted = `"${hash}"`;
2052
+ const etag = weak ? `W/${quoted}` : quoted;
2053
+ return { algorithm, weak, hash, etag, headerName: "ETag", snippet: `ETag: ${etag}` };
2054
+ }
2035
2055
 
2036
2056
  // src/tools/text.ts
2037
2057
  var text_exports = {};
@@ -5013,6 +5033,7 @@ __export(data_exports, {
5013
5033
  diffEnvExample: () => diffEnvExample,
5014
5034
  envToExport: () => envToExport,
5015
5035
  envToJson: () => envToJson,
5036
+ findCsvDuplicateRows: () => findCsvDuplicateRows,
5016
5037
  formatNdjson: () => formatNdjson,
5017
5038
  formatSubtitleTimestamp: () => formatSubtitleTimestamp,
5018
5039
  formatToml: () => formatToml,
@@ -6500,6 +6521,65 @@ function csvToSqlInsert(input, options) {
6500
6521
  columns
6501
6522
  };
6502
6523
  }
6524
+ function _normalizeDuplicateValue(value, caseSensitive, trimWhitespace) {
6525
+ let v = value;
6526
+ if (trimWhitespace) v = v.trim();
6527
+ if (!caseSensitive) v = v.toLowerCase();
6528
+ return v;
6529
+ }
6530
+ function findCsvDuplicateRows(input, options) {
6531
+ const parsed = parseCsv(input, {
6532
+ delimiter: options?.delimiter ?? ",",
6533
+ hasHeader: options?.hasHeader !== false,
6534
+ trimWhitespace: false
6535
+ });
6536
+ if ("error" in parsed) return parsed;
6537
+ if (parsed.rows.length === 0) return { error: "No data rows found" };
6538
+ const caseSensitive = options?.caseSensitive !== false;
6539
+ const trimWhitespace = options?.trimWhitespace !== false;
6540
+ let keyIndexes;
6541
+ if (options?.keyColumns && options.keyColumns.length > 0) {
6542
+ keyIndexes = [];
6543
+ for (const col of options.keyColumns) {
6544
+ const idx = parsed.headers.indexOf(col);
6545
+ if (idx === -1) {
6546
+ return { error: `Column "${col}" not found. Available columns: ${parsed.headers.join(", ")}` };
6547
+ }
6548
+ keyIndexes.push(idx);
6549
+ }
6550
+ } else {
6551
+ keyIndexes = parsed.headers.map((_, idx) => idx);
6552
+ }
6553
+ const groups = /* @__PURE__ */ new Map();
6554
+ parsed.rows.forEach((row, i) => {
6555
+ const key = keyIndexes.map((idx) => row[idx] ?? "");
6556
+ const normalizedKey = keyIndexes.map((idx) => _normalizeDuplicateValue(row[idx] ?? "", caseSensitive, trimWhitespace));
6557
+ const mapKey = JSON.stringify(normalizedKey);
6558
+ const rowNumber = i + 1;
6559
+ const existing = groups.get(mapKey);
6560
+ if (existing) {
6561
+ existing.rowNumbers.push(rowNumber);
6562
+ } else {
6563
+ groups.set(mapKey, { key, rowNumbers: [rowNumber] });
6564
+ }
6565
+ });
6566
+ const duplicateGroups = [];
6567
+ let duplicateRowCount = 0;
6568
+ for (const group of groups.values()) {
6569
+ if (group.rowNumbers.length > 1) {
6570
+ duplicateGroups.push({ key: group.key, rowNumbers: group.rowNumbers, count: group.rowNumbers.length });
6571
+ duplicateRowCount += group.rowNumbers.length;
6572
+ }
6573
+ }
6574
+ duplicateGroups.sort((a, b) => b.count - a.count);
6575
+ return {
6576
+ headers: parsed.headers,
6577
+ totalRows: parsed.rows.length,
6578
+ duplicateGroups,
6579
+ duplicateRowCount,
6580
+ uniqueRowCount: parsed.rows.length - duplicateRowCount + duplicateGroups.length
6581
+ };
6582
+ }
6503
6583
 
6504
6584
  // src/tools/generators.ts
6505
6585
  var generators_exports = {};
@@ -7911,12 +7991,15 @@ __export(units_exports, {
7911
7991
  COMMON_TAX_RATES: () => COMMON_TAX_RATES,
7912
7992
  COMMON_TIP_PERCENTAGES: () => COMMON_TIP_PERCENTAGES,
7913
7993
  COMMON_VIEWPORTS: () => COMMON_VIEWPORTS,
7994
+ USD_DENOMINATIONS: () => USD_DENOMINATIONS,
7914
7995
  applySuccessiveDiscounts: () => applySuccessiveDiscounts,
7915
7996
  autoFormat: () => autoFormat,
7916
7997
  bumpVersion: () => bumpVersion,
7917
7998
  calcAspectRatio: () => calcAspectRatio,
7918
7999
  calcSubnet: () => calcSubnet,
7919
8000
  calculateBreakEven: () => calculateBreakEven,
8001
+ calculateCashBreakdown: () => calculateCashBreakdown,
8002
+ calculateChange: () => calculateChange,
7920
8003
  calculateCompoundInterest: () => calculateCompoundInterest,
7921
8004
  calculateDiscount: () => calculateDiscount,
7922
8005
  calculateEmi: () => calculateEmi,
@@ -9764,6 +9847,64 @@ function compareUnitPrices(items) {
9764
9847
  const bestLabel = results.find((r) => r.isBest).label;
9765
9848
  return { items: results, bestLabel };
9766
9849
  }
9850
+ var USD_DENOMINATIONS = [100, 50, 20, 10, 5, 1, 0.25, 0.1, 0.05, 0.01];
9851
+ function _cashToCents(n) {
9852
+ return Math.round(n * 100);
9853
+ }
9854
+ function calculateCashBreakdown(amount, denominations) {
9855
+ if (!Number.isFinite(amount) || amount < 0) return { error: "Amount must be zero or a positive number" };
9856
+ if (!Array.isArray(denominations) || denominations.length === 0) {
9857
+ return { error: "At least one denomination is required" };
9858
+ }
9859
+ for (const d of denominations) {
9860
+ if (typeof d !== "number" || !Number.isFinite(d) || d <= 0) {
9861
+ return { error: "Each denomination must be a positive number" };
9862
+ }
9863
+ }
9864
+ const round23 = (n) => Math.round(n * 100) / 100;
9865
+ const sorted = Array.from(new Set(denominations)).sort((a, b) => b - a);
9866
+ let remainingCents = _cashToCents(amount);
9867
+ const breakdown = [];
9868
+ let totalCount = 0;
9869
+ for (const d of sorted) {
9870
+ const dCents = _cashToCents(d);
9871
+ const count = Math.floor(remainingCents / dCents);
9872
+ if (count > 0) {
9873
+ breakdown.push({ denomination: d, count, subtotal: round23(count * d) });
9874
+ remainingCents -= count * dCents;
9875
+ totalCount += count;
9876
+ }
9877
+ }
9878
+ return {
9879
+ amount: round23(amount),
9880
+ denominations: sorted,
9881
+ breakdown,
9882
+ totalCount,
9883
+ remainder: round23(remainingCents / 100)
9884
+ };
9885
+ }
9886
+ function calculateChange(amountDue, amountTendered, denominations) {
9887
+ if (!Number.isFinite(amountDue) || amountDue < 0) return { error: "Amount due must be zero or a positive number" };
9888
+ if (!Number.isFinite(amountTendered) || amountTendered < 0) {
9889
+ return { error: "Amount tendered must be zero or a positive number" };
9890
+ }
9891
+ if (_cashToCents(amountTendered) < _cashToCents(amountDue)) {
9892
+ return { error: "Amount tendered must be greater than or equal to the amount due" };
9893
+ }
9894
+ const round23 = (n) => Math.round(n * 100) / 100;
9895
+ const changeDue = round23(amountTendered - amountDue);
9896
+ const breakdown = calculateCashBreakdown(changeDue, denominations);
9897
+ if ("error" in breakdown) return breakdown;
9898
+ return {
9899
+ amountDue: round23(amountDue),
9900
+ amountTendered: round23(amountTendered),
9901
+ changeDue,
9902
+ denominations: breakdown.denominations,
9903
+ breakdown: breakdown.breakdown,
9904
+ totalCount: breakdown.totalCount,
9905
+ remainder: breakdown.remainder
9906
+ };
9907
+ }
9767
9908
 
9768
9909
  // src/tools/network.ts
9769
9910
  var network_exports = {};
@@ -9779,6 +9920,7 @@ __export(network_exports, {
9779
9920
  buildGeoUrl: () => buildGeoUrl,
9780
9921
  buildLinkHeader: () => buildLinkHeader,
9781
9922
  buildMapUrl: () => buildMapUrl,
9923
+ buildRangeHeader: () => buildRangeHeader,
9782
9924
  buildReferrerPolicy: () => buildReferrerPolicy,
9783
9925
  checkSetCookieHeader: () => checkSetCookieHeader,
9784
9926
  countryCodeToFlag: () => countryCodeToFlag,
@@ -9795,6 +9937,7 @@ __export(network_exports, {
9795
9937
  isValidIp: () => isValidIp2,
9796
9938
  isValidIpv4: () => isValidIpv42,
9797
9939
  isValidIpv6: () => isValidIpv6,
9940
+ parseContentRangeHeader: () => parseContentRangeHeader,
9798
9941
  parseDnsResponse: () => parseDnsResponse,
9799
9942
  parseGeoResponse: () => parseGeoResponse,
9800
9943
  parseHar: () => parseHar,
@@ -11974,6 +12117,119 @@ function analyzeEmailHeaders(raw) {
11974
12117
  warnings
11975
12118
  };
11976
12119
  }
12120
+ function _round2(n) {
12121
+ return Math.round(n * 100) / 100;
12122
+ }
12123
+ function buildRangeHeader(entries, options) {
12124
+ if (!Array.isArray(entries) || entries.length === 0) {
12125
+ return { error: "At least one range is required" };
12126
+ }
12127
+ const unit = options?.unit?.trim() || "bytes";
12128
+ const totalSize = typeof options?.totalSize === "number" && Number.isFinite(options.totalSize) ? options.totalSize : void 0;
12129
+ if (totalSize !== void 0 && totalSize <= 0) {
12130
+ return { error: "totalSize must be a positive number when provided" };
12131
+ }
12132
+ const parsed = [];
12133
+ for (const entry of entries) {
12134
+ if (entry.suffixLength !== void 0) {
12135
+ if (!Number.isFinite(entry.suffixLength) || entry.suffixLength <= 0) {
12136
+ return { error: "suffixLength must be a positive number" };
12137
+ }
12138
+ const suffixLength = Math.floor(entry.suffixLength);
12139
+ const byteLength = totalSize !== void 0 ? Math.min(suffixLength, totalSize) : suffixLength;
12140
+ parsed.push({
12141
+ spec: `-${suffixLength}`,
12142
+ start: null,
12143
+ end: null,
12144
+ suffixLength,
12145
+ byteLength,
12146
+ percentOfTotal: totalSize !== void 0 ? _round2(byteLength / totalSize * 100) : null
12147
+ });
12148
+ continue;
12149
+ }
12150
+ if (entry.start === void 0) {
12151
+ return { error: "Each range requires either a start byte or a suffixLength" };
12152
+ }
12153
+ if (!Number.isFinite(entry.start) || entry.start < 0) {
12154
+ return { error: "start must be a non-negative number" };
12155
+ }
12156
+ const start = Math.floor(entry.start);
12157
+ if (totalSize !== void 0 && start >= totalSize) {
12158
+ return { error: `start byte ${start} is beyond totalSize (${totalSize})` };
12159
+ }
12160
+ if (entry.end !== void 0) {
12161
+ if (!Number.isFinite(entry.end) || entry.end < 0) {
12162
+ return { error: "end must be a non-negative number" };
12163
+ }
12164
+ const end = Math.floor(entry.end);
12165
+ if (end < start) {
12166
+ return { error: `range end (${end}) must be >= start (${start})` };
12167
+ }
12168
+ if (totalSize !== void 0 && end >= totalSize) {
12169
+ return { error: `end byte ${end} is beyond totalSize (${totalSize})` };
12170
+ }
12171
+ const byteLength = end - start + 1;
12172
+ parsed.push({
12173
+ spec: `${start}-${end}`,
12174
+ start,
12175
+ end,
12176
+ suffixLength: null,
12177
+ byteLength,
12178
+ percentOfTotal: totalSize !== void 0 ? _round2(byteLength / totalSize * 100) : null
12179
+ });
12180
+ } else {
12181
+ const byteLength = totalSize !== void 0 ? totalSize - start : null;
12182
+ parsed.push({
12183
+ spec: `${start}-`,
12184
+ start,
12185
+ end: null,
12186
+ suffixLength: null,
12187
+ byteLength,
12188
+ percentOfTotal: byteLength !== null && totalSize !== void 0 ? _round2(byteLength / totalSize * 100) : null
12189
+ });
12190
+ }
12191
+ }
12192
+ const warnings = [];
12193
+ const resolvable = parsed.map((r, i) => ({ i, start: r.start ?? (totalSize !== void 0 && r.suffixLength !== null ? totalSize - Math.min(r.suffixLength, totalSize) : null), end: r.end ?? (totalSize !== void 0 ? totalSize - 1 : null) })).filter((r) => r.start !== null && r.end !== null).sort((a, b) => a.start - b.start);
12194
+ for (let i = 1; i < resolvable.length; i++) {
12195
+ if (resolvable[i].start <= resolvable[i - 1].end) {
12196
+ warnings.push(`ranges "${parsed[resolvable[i - 1].i].spec}" and "${parsed[resolvable[i].i].spec}" overlap - servers may reject overlapping multi-range requests`);
12197
+ }
12198
+ }
12199
+ if (parsed.length > 1 && parsed.some((r) => r.byteLength === null)) {
12200
+ warnings.push("totalSize was not provided, so open-ended ranges cannot be checked for overlap or total byte count");
12201
+ }
12202
+ const totalBytesRequested = parsed.every((r) => r.byteLength !== null) ? parsed.reduce((sum, r) => sum + (r.byteLength ?? 0), 0) : null;
12203
+ const headerValue = `${unit}=${parsed.map((r) => r.spec).join(",")}`;
12204
+ return {
12205
+ header: `Range: ${headerValue}`,
12206
+ headerValue,
12207
+ ranges: parsed,
12208
+ totalBytesRequested,
12209
+ warnings
12210
+ };
12211
+ }
12212
+ function parseContentRangeHeader(header) {
12213
+ if (!header || header.trim() === "") return { error: "Input is empty" };
12214
+ const match = header.trim().match(/^(\S+)\s+(\*|\d+-\d+)\/(\*|\d+)$/);
12215
+ if (!match) {
12216
+ return { error: 'Could not parse Content-Range header. Expected a format like "bytes 200-1000/67589" or "bytes */67589"' };
12217
+ }
12218
+ const [, unit, range, totalRaw] = match;
12219
+ const isUnsatisfiable = range === "*";
12220
+ const isTotalUnknown = totalRaw === "*";
12221
+ const total = isTotalUnknown ? null : Number(totalRaw);
12222
+ if (isUnsatisfiable) {
12223
+ return { unit, start: null, end: null, total, isUnsatisfiable, isTotalUnknown, byteLength: null };
12224
+ }
12225
+ const [startRaw, endRaw] = range.split("-");
12226
+ const start = Number(startRaw);
12227
+ const end = Number(endRaw);
12228
+ if (end < start) {
12229
+ return { error: `Invalid range: end (${end}) is before start (${start})` };
12230
+ }
12231
+ return { unit, start, end, total, isUnsatisfiable, isTotalUnknown, byteLength: end - start + 1 };
12232
+ }
11977
12233
 
11978
12234
  // src/tools/api.ts
11979
12235
  var api_exports = {};
package/dist/index.d.cts CHANGED
@@ -1,12 +1,12 @@
1
1
  export { j as json } from './json-Ta9JykSB.cjs';
2
2
  export { e as encoding } from './encoding-Dk3wpmb3.cjs';
3
- export { h as hashing } from './hashing-Dnj0IAZf.cjs';
3
+ export { h as hashing } from './hashing-CJjlvqS_.cjs';
4
4
  export { t as text } from './text-kHkT9VtT.cjs';
5
- export { d as data } from './data-BCf3dm-E.cjs';
5
+ export { d as data } from './data-BKpEOcOX.cjs';
6
6
  export { g as generators } from './generators-Du8cBesn.cjs';
7
7
  export { t as time } from './time-KqJjdqII.cjs';
8
- export { u as units } from './units-HQrMCiNM.cjs';
9
- export { n as network } from './network-CKPoesdD.cjs';
8
+ export { u as units } from './units-CzPwRC03.cjs';
9
+ export { n as network } from './network-BC8McQOh.cjs';
10
10
  export { a as api } from './api-DmTNE4c1.cjs';
11
11
  export { c as code } from './code-KXoRsHtl.cjs';
12
12
  export { c as color } from './color-tPwZCr9H.cjs';
package/dist/index.d.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  export { j as json } from './json-Ta9JykSB.js';
2
2
  export { e as encoding } from './encoding-Dk3wpmb3.js';
3
- export { h as hashing } from './hashing-Dnj0IAZf.js';
3
+ export { h as hashing } from './hashing-CJjlvqS_.js';
4
4
  export { t as text } from './text-kHkT9VtT.js';
5
- export { d as data } from './data-BCf3dm-E.js';
5
+ export { d as data } from './data-BKpEOcOX.js';
6
6
  export { g as generators } from './generators-Du8cBesn.js';
7
7
  export { t as time } from './time-KqJjdqII.js';
8
- export { u as units } from './units-HQrMCiNM.js';
9
- export { n as network } from './network-CKPoesdD.js';
8
+ export { u as units } from './units-CzPwRC03.js';
9
+ export { n as network } from './network-BC8McQOh.js';
10
10
  export { a as api } from './api-DmTNE4c1.js';
11
11
  export { c as code } from './code-KXoRsHtl.js';
12
12
  export { c as color } from './color-tPwZCr9H.js';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export { media_exports as media } from './chunk-L6V4W4SU.js';
2
- export { units_exports as units } from './chunk-47RI5V3B.js';
3
- export { network_exports as network } from './chunk-Y4BVU76A.js';
2
+ export { units_exports as units } from './chunk-2MTHD2LG.js';
3
+ export { network_exports as network } from './chunk-7WSFJTYP.js';
4
4
  export { api_exports as api } from './chunk-52ZDKSIX.js';
5
5
  export { code_exports as code } from './chunk-JL7YTXRB.js';
6
6
  export { color_exports as color } from './chunk-BPVAB4P2.js';
@@ -9,9 +9,9 @@ export { misc_exports as misc } from './chunk-GX7H6TAX.js';
9
9
  export { ai_agent_exports as ai_agent } from './chunk-W3J7GZVQ.js';
10
10
  export { json_exports as json } from './chunk-WVEKRKGU.js';
11
11
  export { encoding_exports as encoding } from './chunk-DOWQZUTP.js';
12
- export { hashing_exports as hashing } from './chunk-VEVNIGJ6.js';
12
+ export { hashing_exports as hashing } from './chunk-PET2CGTH.js';
13
13
  export { text_exports as text } from './chunk-F2CEN226.js';
14
- export { data_exports as data } from './chunk-RZUNTYEH.js';
14
+ export { data_exports as data } from './chunk-JR354NH4.js';
15
15
  export { generators_exports as generators } from './chunk-3TYWIX3B.js';
16
16
  export { time_exports as time } from './chunk-IEPWZERQ.js';
17
17
  import './chunk-MLKGABMK.js';
@@ -17,6 +17,7 @@
17
17
  * - link-header-builder: buildLinkHeader
18
18
  * - same-site-cookie-checker: checkSetCookieHeader
19
19
  * - email-header-analyzer: analyzeEmailHeaders
20
+ * - http-range-header-builder: buildRangeHeader, parseContentRangeHeader
20
21
  */
21
22
  declare const DNS_RECORD_TYPES: readonly ["A", "AAAA", "CNAME", "MX", "TXT", "NS", "SOA", "PTR", "SRV", "CAA"];
22
23
  type DnsRecordType = typeof DNS_RECORD_TYPES[number];
@@ -447,11 +448,63 @@ interface EmailHeaderAnalysis {
447
448
  declare function analyzeEmailHeaders(raw: string): EmailHeaderAnalysis | {
448
449
  error: string;
449
450
  };
451
+ interface RangeEntryInput {
452
+ start?: number;
453
+ end?: number;
454
+ suffixLength?: number;
455
+ }
456
+ interface RangeEntry {
457
+ spec: string;
458
+ start: number | null;
459
+ end: number | null;
460
+ suffixLength: number | null;
461
+ byteLength: number | null;
462
+ percentOfTotal: number | null;
463
+ }
464
+ interface RangeHeaderResult {
465
+ header: string;
466
+ headerValue: string;
467
+ ranges: RangeEntry[];
468
+ totalBytesRequested: number | null;
469
+ warnings: string[];
470
+ }
471
+ interface BuildRangeHeaderOptions {
472
+ totalSize?: number;
473
+ unit?: string;
474
+ }
475
+ /**
476
+ * Build an HTTP `Range` request header from a list of byte ranges. Each
477
+ * entry is either `{ start, end? }` (an explicit or open-ended range) or
478
+ * `{ suffixLength }` (the last N bytes). Pass `totalSize` to resolve
479
+ * open-ended/suffix byte lengths and get overlap warnings.
480
+ */
481
+ declare function buildRangeHeader(entries: RangeEntryInput[], options?: BuildRangeHeaderOptions): RangeHeaderResult | {
482
+ error: string;
483
+ };
484
+ interface ContentRangeResult {
485
+ unit: string;
486
+ start: number | null;
487
+ end: number | null;
488
+ total: number | null;
489
+ isUnsatisfiable: boolean;
490
+ isTotalUnknown: boolean;
491
+ byteLength: number | null;
492
+ }
493
+ /**
494
+ * Parse a `Content-Range` response header (e.g. `bytes 200-1000/67589` or
495
+ * `bytes *\/67589` for an unsatisfiable range) into its unit, byte bounds,
496
+ * and total resource size.
497
+ */
498
+ declare function parseContentRangeHeader(header: string): ContentRangeResult | {
499
+ error: string;
500
+ };
450
501
 
451
502
  type network_AuthResultEntry = AuthResultEntry;
503
+ type network_BuildRangeHeaderOptions = BuildRangeHeaderOptions;
452
504
  type network_CacheControlDirective = CacheControlDirective;
453
505
  type network_CacheControlOptions = CacheControlOptions;
454
506
  type network_CacheControlResult = CacheControlResult;
507
+ type network_ContentRangeResult = ContentRangeResult;
455
508
  type network_CookieAttributes = CookieAttributes;
456
509
  type network_CookieCheckResult = CookieCheckResult;
457
510
  declare const network_DNS_RECORD_TYPES: typeof DNS_RECORD_TYPES;
@@ -477,6 +530,9 @@ type network_LinkRel = LinkRel;
477
530
  type network_ParsedDnsResult = ParsedDnsResult;
478
531
  type network_ParsedGeoResult = ParsedGeoResult;
479
532
  declare const network_REFERRER_POLICY_VALUES: typeof REFERRER_POLICY_VALUES;
533
+ type network_RangeEntry = RangeEntry;
534
+ type network_RangeEntryInput = RangeEntryInput;
535
+ type network_RangeHeaderResult = RangeHeaderResult;
480
536
  type network_ReceivedHop = ReceivedHop;
481
537
  type network_ReferrerPolicyEntry = ReferrerPolicyEntry;
482
538
  type network_ReferrerPolicyResult = ReferrerPolicyResult;
@@ -500,6 +556,7 @@ declare const network_buildDnsQueryUrl: typeof buildDnsQueryUrl;
500
556
  declare const network_buildGeoUrl: typeof buildGeoUrl;
501
557
  declare const network_buildLinkHeader: typeof buildLinkHeader;
502
558
  declare const network_buildMapUrl: typeof buildMapUrl;
559
+ declare const network_buildRangeHeader: typeof buildRangeHeader;
503
560
  declare const network_buildReferrerPolicy: typeof buildReferrerPolicy;
504
561
  declare const network_checkSetCookieHeader: typeof checkSetCookieHeader;
505
562
  declare const network_countryCodeToFlag: typeof countryCodeToFlag;
@@ -516,6 +573,7 @@ declare const network_isSuccess: typeof isSuccess;
516
573
  declare const network_isValidIp: typeof isValidIp;
517
574
  declare const network_isValidIpv4: typeof isValidIpv4;
518
575
  declare const network_isValidIpv6: typeof isValidIpv6;
576
+ declare const network_parseContentRangeHeader: typeof parseContentRangeHeader;
519
577
  declare const network_parseDnsResponse: typeof parseDnsResponse;
520
578
  declare const network_parseGeoResponse: typeof parseGeoResponse;
521
579
  declare const network_parseHar: typeof parseHar;
@@ -531,7 +589,7 @@ declare const network_validateHeaderValue: typeof validateHeaderValue;
531
589
  declare const network_validateRobotsTxt: typeof validateRobotsTxt;
532
590
  declare const network_validateSitemap: typeof validateSitemap;
533
591
  declare namespace network {
534
- export { type network_AuthResultEntry as AuthResultEntry, type network_CacheControlDirective as CacheControlDirective, type network_CacheControlOptions as CacheControlOptions, type network_CacheControlResult as CacheControlResult, type network_CookieAttributes as CookieAttributes, type network_CookieCheckResult as CookieCheckResult, network_DNS_RECORD_TYPES as DNS_RECORD_TYPES, type network_DnsRecord as DnsRecord, type network_DnsRecordType as DnsRecordType, type network_DnsResponse as DnsResponse, type network_EmailHeaderAnalysis as EmailHeaderAnalysis, type network_EmailHeaderField as EmailHeaderField, type network_GeoResult as GeoResult, network_HTTP_HEADERS as HTTP_HEADERS, type network_HarEntry as HarEntry, type network_HarParseResult as HarParseResult, type network_HarSummary as HarSummary, type network_HeaderCategory as HeaderCategory, type network_HttpHeader as HttpHeader, type network_Ipv6AddressType as Ipv6AddressType, type network_Ipv6ParseResult as Ipv6ParseResult, network_LINK_REL_VALUES as LINK_REL_VALUES, type network_LinkHeaderEntry as LinkHeaderEntry, type network_LinkHeaderEntryInput as LinkHeaderEntryInput, type network_LinkHeaderResult as LinkHeaderResult, type network_LinkRel as LinkRel, type network_ParsedDnsResult as ParsedDnsResult, type network_ParsedGeoResult as ParsedGeoResult, network_REFERRER_POLICY_VALUES as REFERRER_POLICY_VALUES, type network_ReceivedHop as ReceivedHop, type network_ReferrerPolicyEntry as ReferrerPolicyEntry, type network_ReferrerPolicyResult as ReferrerPolicyResult, type network_ReferrerPolicyValue as ReferrerPolicyValue, type network_RobotsGroup as RobotsGroup, type network_RobotsIssue as RobotsIssue, type network_RobotsRule as RobotsRule, type network_RobotsValidationResult as RobotsValidationResult, network_STATUS_CODES as STATUS_CODES, type network_SameSiteValue as SameSiteValue, type network_SitemapIndexEntry as SitemapIndexEntry, type network_SitemapIssue as SitemapIssue, type network_SitemapUrlEntry as SitemapUrlEntry, type network_SitemapValidationResult as SitemapValidationResult, type network_StatusCode as StatusCode, type network_UaDeviceType as UaDeviceType, type network_UserAgentInfo as UserAgentInfo, network_analyzeEmailHeaders as analyzeEmailHeaders, network_buildCacheControl as buildCacheControl, network_buildDnsQueryUrl as buildDnsQueryUrl, network_buildGeoUrl as buildGeoUrl, network_buildLinkHeader as buildLinkHeader, network_buildMapUrl as buildMapUrl, network_buildReferrerPolicy as buildReferrerPolicy, network_checkSetCookieHeader as checkSetCookieHeader, network_countryCodeToFlag as countryCodeToFlag, network_formatCoordinates as formatCoordinates, network_formatTtl as formatTtl, network_getByCategory as getByCategory, network_getHeader as getHeader, network_getHeadersByCategory as getHeadersByCategory, network_getStatusByCategory as getStatusByCategory, network_getStatusCode as getStatusCode, network_isClientError as isClientError, network_isServerError as isServerError, network_isSuccess as isSuccess, network_isValidIp as isValidIp, network_isValidIpv4 as isValidIpv4, network_isValidIpv6 as isValidIpv6, network_parseDnsResponse as parseDnsResponse, network_parseGeoResponse as parseGeoResponse, network_parseHar as parseHar, network_parseIpv6Address as parseIpv6Address, network_parseUserAgent as parseUserAgent, network_searchHeaders as searchHeaders, network_searchStatusCodes as searchStatusCodes, network_statusCodeToText as statusCodeToText, network_typeNumberToLabel as typeNumberToLabel, network_validateDomain as validateDomain, network_validateHeaderName as validateHeaderName, network_validateHeaderValue as validateHeaderValue, network_validateRobotsTxt as validateRobotsTxt, network_validateSitemap as validateSitemap };
592
+ export { type network_AuthResultEntry as AuthResultEntry, type network_BuildRangeHeaderOptions as BuildRangeHeaderOptions, type network_CacheControlDirective as CacheControlDirective, type network_CacheControlOptions as CacheControlOptions, type network_CacheControlResult as CacheControlResult, type network_ContentRangeResult as ContentRangeResult, type network_CookieAttributes as CookieAttributes, type network_CookieCheckResult as CookieCheckResult, network_DNS_RECORD_TYPES as DNS_RECORD_TYPES, type network_DnsRecord as DnsRecord, type network_DnsRecordType as DnsRecordType, type network_DnsResponse as DnsResponse, type network_EmailHeaderAnalysis as EmailHeaderAnalysis, type network_EmailHeaderField as EmailHeaderField, type network_GeoResult as GeoResult, network_HTTP_HEADERS as HTTP_HEADERS, type network_HarEntry as HarEntry, type network_HarParseResult as HarParseResult, type network_HarSummary as HarSummary, type network_HeaderCategory as HeaderCategory, type network_HttpHeader as HttpHeader, type network_Ipv6AddressType as Ipv6AddressType, type network_Ipv6ParseResult as Ipv6ParseResult, network_LINK_REL_VALUES as LINK_REL_VALUES, type network_LinkHeaderEntry as LinkHeaderEntry, type network_LinkHeaderEntryInput as LinkHeaderEntryInput, type network_LinkHeaderResult as LinkHeaderResult, type network_LinkRel as LinkRel, type network_ParsedDnsResult as ParsedDnsResult, type network_ParsedGeoResult as ParsedGeoResult, network_REFERRER_POLICY_VALUES as REFERRER_POLICY_VALUES, type network_RangeEntry as RangeEntry, type network_RangeEntryInput as RangeEntryInput, type network_RangeHeaderResult as RangeHeaderResult, type network_ReceivedHop as ReceivedHop, type network_ReferrerPolicyEntry as ReferrerPolicyEntry, type network_ReferrerPolicyResult as ReferrerPolicyResult, type network_ReferrerPolicyValue as ReferrerPolicyValue, type network_RobotsGroup as RobotsGroup, type network_RobotsIssue as RobotsIssue, type network_RobotsRule as RobotsRule, type network_RobotsValidationResult as RobotsValidationResult, network_STATUS_CODES as STATUS_CODES, type network_SameSiteValue as SameSiteValue, type network_SitemapIndexEntry as SitemapIndexEntry, type network_SitemapIssue as SitemapIssue, type network_SitemapUrlEntry as SitemapUrlEntry, type network_SitemapValidationResult as SitemapValidationResult, type network_StatusCode as StatusCode, type network_UaDeviceType as UaDeviceType, type network_UserAgentInfo as UserAgentInfo, network_analyzeEmailHeaders as analyzeEmailHeaders, network_buildCacheControl as buildCacheControl, network_buildDnsQueryUrl as buildDnsQueryUrl, network_buildGeoUrl as buildGeoUrl, network_buildLinkHeader as buildLinkHeader, network_buildMapUrl as buildMapUrl, network_buildRangeHeader as buildRangeHeader, network_buildReferrerPolicy as buildReferrerPolicy, network_checkSetCookieHeader as checkSetCookieHeader, network_countryCodeToFlag as countryCodeToFlag, network_formatCoordinates as formatCoordinates, network_formatTtl as formatTtl, network_getByCategory as getByCategory, network_getHeader as getHeader, network_getHeadersByCategory as getHeadersByCategory, network_getStatusByCategory as getStatusByCategory, network_getStatusCode as getStatusCode, network_isClientError as isClientError, network_isServerError as isServerError, network_isSuccess as isSuccess, network_isValidIp as isValidIp, network_isValidIpv4 as isValidIpv4, network_isValidIpv6 as isValidIpv6, network_parseContentRangeHeader as parseContentRangeHeader, network_parseDnsResponse as parseDnsResponse, network_parseGeoResponse as parseGeoResponse, network_parseHar as parseHar, network_parseIpv6Address as parseIpv6Address, network_parseUserAgent as parseUserAgent, network_searchHeaders as searchHeaders, network_searchStatusCodes as searchStatusCodes, network_statusCodeToText as statusCodeToText, network_typeNumberToLabel as typeNumberToLabel, network_validateDomain as validateDomain, network_validateHeaderName as validateHeaderName, network_validateHeaderValue as validateHeaderValue, network_validateRobotsTxt as validateRobotsTxt, network_validateSitemap as validateSitemap };
535
593
  }
536
594
 
537
- export { buildReferrerPolicy as $, type AuthResultEntry as A, type RobotsRule as B, type CacheControlDirective as C, DNS_RECORD_TYPES as D, type EmailHeaderAnalysis as E, type RobotsValidationResult as F, type GeoResult as G, HTTP_HEADERS as H, type Ipv6AddressType as I, type SameSiteValue as J, type SitemapIndexEntry as K, LINK_REL_VALUES as L, type SitemapIssue as M, type SitemapUrlEntry as N, type SitemapValidationResult as O, type ParsedDnsResult as P, type StatusCode as Q, REFERRER_POLICY_VALUES as R, STATUS_CODES as S, type UserAgentInfo as T, type UaDeviceType as U, analyzeEmailHeaders as V, buildCacheControl as W, buildDnsQueryUrl as X, buildGeoUrl as Y, buildLinkHeader as Z, buildMapUrl as _, type CacheControlOptions as a, checkSetCookieHeader as a0, countryCodeToFlag as a1, formatCoordinates as a2, formatTtl as a3, getByCategory as a4, getHeader as a5, getHeadersByCategory as a6, getStatusByCategory as a7, getStatusCode as a8, isClientError as a9, isServerError as aa, isSuccess as ab, isValidIp as ac, isValidIpv4 as ad, isValidIpv6 as ae, parseDnsResponse as af, parseGeoResponse as ag, parseHar as ah, parseIpv6Address as ai, parseUserAgent as aj, searchHeaders as ak, searchStatusCodes as al, statusCodeToText as am, typeNumberToLabel as an, validateDomain as ao, validateHeaderName as ap, validateHeaderValue as aq, validateRobotsTxt as ar, validateSitemap as as, type CacheControlResult as b, type CookieAttributes as c, type CookieCheckResult as d, type DnsRecord as e, type DnsRecordType as f, type DnsResponse as g, type EmailHeaderField as h, type HarEntry as i, type HarParseResult as j, type HarSummary as k, type HeaderCategory as l, type HttpHeader as m, network as n, type Ipv6ParseResult as o, type LinkHeaderEntry as p, type LinkHeaderEntryInput as q, type LinkHeaderResult as r, type LinkRel as s, type ParsedGeoResult as t, type ReceivedHop as u, type ReferrerPolicyEntry as v, type ReferrerPolicyResult as w, type ReferrerPolicyValue as x, type RobotsGroup as y, type RobotsIssue as z };
595
+ export { buildCacheControl as $, type AuthResultEntry as A, type BuildRangeHeaderOptions as B, type CacheControlDirective as C, DNS_RECORD_TYPES as D, type EmailHeaderAnalysis as E, type ReferrerPolicyResult as F, type GeoResult as G, HTTP_HEADERS as H, type Ipv6AddressType as I, type ReferrerPolicyValue as J, type RobotsGroup as K, LINK_REL_VALUES as L, type RobotsIssue as M, type RobotsRule as N, type RobotsValidationResult as O, type ParsedDnsResult as P, type SameSiteValue as Q, REFERRER_POLICY_VALUES as R, STATUS_CODES as S, type SitemapIndexEntry as T, type SitemapIssue as U, type SitemapUrlEntry as V, type SitemapValidationResult as W, type StatusCode as X, type UaDeviceType as Y, type UserAgentInfo as Z, analyzeEmailHeaders as _, type CacheControlOptions as a, buildDnsQueryUrl as a0, buildGeoUrl as a1, buildLinkHeader as a2, buildMapUrl as a3, buildRangeHeader as a4, buildReferrerPolicy as a5, checkSetCookieHeader as a6, countryCodeToFlag as a7, formatCoordinates as a8, formatTtl as a9, getByCategory as aa, getHeader as ab, getHeadersByCategory as ac, getStatusByCategory as ad, getStatusCode as ae, isClientError as af, isServerError as ag, isSuccess as ah, isValidIp as ai, isValidIpv4 as aj, isValidIpv6 as ak, parseContentRangeHeader as al, parseDnsResponse as am, parseGeoResponse as an, parseHar as ao, parseIpv6Address as ap, parseUserAgent as aq, searchHeaders as ar, searchStatusCodes as as, statusCodeToText as at, typeNumberToLabel as au, validateDomain as av, validateHeaderName as aw, validateHeaderValue as ax, validateRobotsTxt as ay, validateSitemap as az, type CacheControlResult as b, type ContentRangeResult as c, type CookieAttributes as d, type CookieCheckResult as e, type DnsRecord as f, type DnsRecordType as g, type DnsResponse as h, type EmailHeaderField as i, type HarEntry as j, type HarParseResult as k, type HarSummary as l, type HeaderCategory as m, network as n, type HttpHeader as o, type Ipv6ParseResult as p, type LinkHeaderEntry as q, type LinkHeaderEntryInput as r, type LinkHeaderResult as s, type LinkRel as t, type ParsedGeoResult as u, type RangeEntry as v, type RangeEntryInput as w, type RangeHeaderResult as x, type ReceivedHop as y, type ReferrerPolicyEntry as z };