@utilix-tech/sdk 0.8.0 → 0.9.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/CHANGELOG.md +3 -0
- package/README.md +5 -1
- package/dist/{chunk-V5JKVDBA.js → chunk-LI5AME5R.js} +93 -2
- package/dist/index.cjs +92 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/{network-DwyAjwJS.d.cts → network-Cy02-FIO.d.cts} +40 -2
- package/dist/{network-DwyAjwJS.d.ts → network-Cy02-FIO.d.ts} +40 -2
- package/dist/tools/network.cjs +91 -0
- package/dist/tools/network.d.cts +1 -1
- package/dist/tools/network.d.ts +1 -1
- package/dist/tools/network.js +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
Full release notes for all Utilix surfaces (browser tools, REST API, SDKs, MCP server) live at [utilix.tech/changelog](https://utilix.tech/changelog). This file tracks just this package.
|
|
4
4
|
|
|
5
|
+
## 0.9.0
|
|
6
|
+
- Added Sitemap.xml Validator.
|
|
7
|
+
|
|
5
8
|
## 0.8.0
|
|
6
9
|
- Added ID3 Tag Reader and .env.example Diff Checker.
|
|
7
10
|
|
package/README.md
CHANGED
|
@@ -269,7 +269,7 @@ formatValue(1234567.89, { locale: "en-US", currency: "USD" });
|
|
|
269
269
|
```ts
|
|
270
270
|
import { getStatusCode, isValidIp, isValidIpv4, isValidIpv6,
|
|
271
271
|
searchStatusCodes, buildGeoUrl, countryCodeToFlag,
|
|
272
|
-
parseHar } from "@utilix-tech/sdk/network";
|
|
272
|
+
parseHar, validateSitemap } from "@utilix-tech/sdk/network";
|
|
273
273
|
|
|
274
274
|
getStatusCode(404);
|
|
275
275
|
// { code: 404, text: "Not Found", description: "...", category: "Client Error" }
|
|
@@ -286,6 +286,10 @@ countryCodeToFlag("US"); // "🇺🇸"
|
|
|
286
286
|
const har = await fs.promises.readFile("network.har", "utf-8");
|
|
287
287
|
parseHar(har);
|
|
288
288
|
// { version: "1.2", entries: [...], summary: { totalRequests, totalSize, failedRequests, ... } }
|
|
289
|
+
|
|
290
|
+
// Validate a sitemap.xml (or sitemap index) against the sitemaps.org protocol
|
|
291
|
+
validateSitemap('<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><url><loc>https://example.com/</loc></url></urlset>');
|
|
292
|
+
// { type: "urlset", urlCount: 1, entries: [...], issues: [...], valid: true }
|
|
289
293
|
```
|
|
290
294
|
|
|
291
295
|
---
|
|
@@ -32,7 +32,8 @@ __export(network_exports, {
|
|
|
32
32
|
typeNumberToLabel: () => typeNumberToLabel,
|
|
33
33
|
validateDomain: () => validateDomain,
|
|
34
34
|
validateHeaderName: () => validateHeaderName,
|
|
35
|
-
validateHeaderValue: () => validateHeaderValue
|
|
35
|
+
validateHeaderValue: () => validateHeaderValue,
|
|
36
|
+
validateSitemap: () => validateSitemap
|
|
36
37
|
});
|
|
37
38
|
var DNS_RECORD_TYPES = ["A", "AAAA", "CNAME", "MX", "TXT", "NS", "SOA", "PTR", "SRV", "CAA"];
|
|
38
39
|
function buildDnsQueryUrl(domain, type) {
|
|
@@ -1440,5 +1441,95 @@ function parseHar(input) {
|
|
|
1440
1441
|
summary: { totalRequests, totalSize, totalTime, avgTime, failedRequests, methods, statusCodes }
|
|
1441
1442
|
};
|
|
1442
1443
|
}
|
|
1444
|
+
var VALID_CHANGEFREQ = /* @__PURE__ */ new Set(["always", "hourly", "daily", "weekly", "monthly", "yearly", "never"]);
|
|
1445
|
+
function sitemapLineNumber(xml, index) {
|
|
1446
|
+
let line = 1;
|
|
1447
|
+
for (let i = 0; i < index; i++) {
|
|
1448
|
+
if (xml[i] === "\n") line++;
|
|
1449
|
+
}
|
|
1450
|
+
return line;
|
|
1451
|
+
}
|
|
1452
|
+
function extractSitemapTag(block, tag) {
|
|
1453
|
+
const m = block.match(new RegExp(`<${tag}[^>]*>([\\s\\S]*?)</${tag}>`, "i"));
|
|
1454
|
+
return m ? m[1].trim() : void 0;
|
|
1455
|
+
}
|
|
1456
|
+
function isValidW3CDatetime(s) {
|
|
1457
|
+
return /^\d{4}(-\d{2}(-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2}))?)?)?$/.test(s);
|
|
1458
|
+
}
|
|
1459
|
+
function isAbsoluteHttpUrl(s) {
|
|
1460
|
+
return /^https?:\/\//i.test(s);
|
|
1461
|
+
}
|
|
1462
|
+
function validateSitemap(xml) {
|
|
1463
|
+
if (!xml || !xml.trim()) return { error: "Input is empty" };
|
|
1464
|
+
const trimmed = xml.trim();
|
|
1465
|
+
const issues = [];
|
|
1466
|
+
if (!/^\s*<\?xml/i.test(trimmed)) {
|
|
1467
|
+
issues.push({ severity: "warning", line: 1, message: 'Missing XML declaration (<?xml version="1.0" encoding="UTF-8"?>)' });
|
|
1468
|
+
}
|
|
1469
|
+
const isUrlset = /<urlset[\s>]/i.test(trimmed);
|
|
1470
|
+
const isSitemapIndex = /<sitemapindex[\s>]/i.test(trimmed);
|
|
1471
|
+
if (!isUrlset && !isSitemapIndex) {
|
|
1472
|
+
return { error: "Not a valid sitemap: root element must be <urlset> or <sitemapindex>" };
|
|
1473
|
+
}
|
|
1474
|
+
if (isUrlset && isSitemapIndex) {
|
|
1475
|
+
return { error: "Ambiguous file: contains both <urlset> and <sitemapindex> root elements" };
|
|
1476
|
+
}
|
|
1477
|
+
const type = isUrlset ? "urlset" : "sitemapindex";
|
|
1478
|
+
if (isUrlset && !/xmlns\s*=\s*["']http:\/\/www\.sitemaps\.org\/schemas\/sitemap\/0\.9["']/i.test(trimmed)) {
|
|
1479
|
+
issues.push({ severity: "warning", line: 1, message: "Missing or non-standard xmlns namespace (expected http://www.sitemaps.org/schemas/sitemap/0.9)" });
|
|
1480
|
+
}
|
|
1481
|
+
const blockTag = isUrlset ? "url" : "sitemap";
|
|
1482
|
+
const blockRe = new RegExp(`<${blockTag}>([\\s\\S]*?)</${blockTag}>`, "gi");
|
|
1483
|
+
const seenLocs = /* @__PURE__ */ new Set();
|
|
1484
|
+
const entries = [];
|
|
1485
|
+
let match;
|
|
1486
|
+
while ((match = blockRe.exec(trimmed)) !== null) {
|
|
1487
|
+
const block = match[1];
|
|
1488
|
+
const line = sitemapLineNumber(trimmed, match.index);
|
|
1489
|
+
const loc = extractSitemapTag(block, "loc");
|
|
1490
|
+
if (!loc) {
|
|
1491
|
+
issues.push({ severity: "error", line, message: `<${blockTag}> entry is missing required <loc>` });
|
|
1492
|
+
continue;
|
|
1493
|
+
}
|
|
1494
|
+
if (!isAbsoluteHttpUrl(loc)) {
|
|
1495
|
+
issues.push({ severity: "error", line, message: `<loc>${loc}</loc> must be an absolute URL starting with http:// or https://` });
|
|
1496
|
+
}
|
|
1497
|
+
if (/&(?!amp;|lt;|gt;|apos;|quot;|#\d+;)/.test(loc)) {
|
|
1498
|
+
issues.push({ severity: "error", line, message: `<loc>${loc}</loc> contains an unescaped '&' (use & instead)` });
|
|
1499
|
+
}
|
|
1500
|
+
if (seenLocs.has(loc)) {
|
|
1501
|
+
issues.push({ severity: "warning", line, message: `Duplicate <loc>${loc}</loc>` });
|
|
1502
|
+
}
|
|
1503
|
+
seenLocs.add(loc);
|
|
1504
|
+
const lastmod = extractSitemapTag(block, "lastmod");
|
|
1505
|
+
if (lastmod !== void 0 && !isValidW3CDatetime(lastmod)) {
|
|
1506
|
+
issues.push({ severity: "warning", line, message: `<lastmod>${lastmod}</lastmod> is not a valid W3C datetime` });
|
|
1507
|
+
}
|
|
1508
|
+
if (type === "urlset") {
|
|
1509
|
+
const changefreq = extractSitemapTag(block, "changefreq");
|
|
1510
|
+
if (changefreq !== void 0 && !VALID_CHANGEFREQ.has(changefreq.toLowerCase())) {
|
|
1511
|
+
issues.push({ severity: "error", line, message: `<changefreq>${changefreq}</changefreq> must be one of: ${[...VALID_CHANGEFREQ].join(", ")}` });
|
|
1512
|
+
}
|
|
1513
|
+
const priority = extractSitemapTag(block, "priority");
|
|
1514
|
+
if (priority !== void 0) {
|
|
1515
|
+
const p = Number(priority);
|
|
1516
|
+
if (Number.isNaN(p) || p < 0 || p > 1) {
|
|
1517
|
+
issues.push({ severity: "error", line, message: `<priority>${priority}</priority> must be a number between 0.0 and 1.0` });
|
|
1518
|
+
}
|
|
1519
|
+
}
|
|
1520
|
+
entries.push({ loc, lastmod, changefreq, priority, line });
|
|
1521
|
+
} else {
|
|
1522
|
+
entries.push({ loc, lastmod, line });
|
|
1523
|
+
}
|
|
1524
|
+
}
|
|
1525
|
+
if (entries.length === 0) {
|
|
1526
|
+
issues.push({ severity: "error", line: 1, message: `No <${blockTag}> entries found` });
|
|
1527
|
+
}
|
|
1528
|
+
if (type === "urlset" && entries.length > 5e4) {
|
|
1529
|
+
issues.push({ severity: "error", line: 1, message: `Sitemap contains ${entries.length} URLs, exceeding the 50,000 URL limit per the sitemaps.org spec` });
|
|
1530
|
+
}
|
|
1531
|
+
const valid = !issues.some((i) => i.severity === "error");
|
|
1532
|
+
return { type, urlCount: entries.length, entries, issues, valid };
|
|
1533
|
+
}
|
|
1443
1534
|
|
|
1444
|
-
export { DNS_RECORD_TYPES, HTTP_HEADERS, STATUS_CODES, buildDnsQueryUrl, buildGeoUrl, buildMapUrl, countryCodeToFlag, formatCoordinates, formatTtl, getByCategory, getHeader, getHeadersByCategory, getStatusByCategory, getStatusCode, isClientError, isServerError, isSuccess, isValidIp, isValidIpv4, isValidIpv6, network_exports, parseDnsResponse, parseGeoResponse, parseHar, searchHeaders, searchStatusCodes, statusCodeToText, typeNumberToLabel, validateDomain, validateHeaderName, validateHeaderValue };
|
|
1535
|
+
export { DNS_RECORD_TYPES, HTTP_HEADERS, STATUS_CODES, buildDnsQueryUrl, buildGeoUrl, buildMapUrl, countryCodeToFlag, formatCoordinates, formatTtl, getByCategory, getHeader, getHeadersByCategory, getStatusByCategory, getStatusCode, isClientError, isServerError, isSuccess, isValidIp, isValidIpv4, isValidIpv6, network_exports, parseDnsResponse, parseGeoResponse, parseHar, searchHeaders, searchStatusCodes, statusCodeToText, typeNumberToLabel, validateDomain, validateHeaderName, validateHeaderValue, validateSitemap };
|
package/dist/index.cjs
CHANGED
|
@@ -7530,7 +7530,8 @@ __export(network_exports, {
|
|
|
7530
7530
|
typeNumberToLabel: () => typeNumberToLabel,
|
|
7531
7531
|
validateDomain: () => validateDomain,
|
|
7532
7532
|
validateHeaderName: () => validateHeaderName,
|
|
7533
|
-
validateHeaderValue: () => validateHeaderValue
|
|
7533
|
+
validateHeaderValue: () => validateHeaderValue,
|
|
7534
|
+
validateSitemap: () => validateSitemap
|
|
7534
7535
|
});
|
|
7535
7536
|
var DNS_RECORD_TYPES = ["A", "AAAA", "CNAME", "MX", "TXT", "NS", "SOA", "PTR", "SRV", "CAA"];
|
|
7536
7537
|
function buildDnsQueryUrl(domain, type) {
|
|
@@ -8938,6 +8939,96 @@ function parseHar(input) {
|
|
|
8938
8939
|
summary: { totalRequests, totalSize, totalTime, avgTime, failedRequests, methods, statusCodes }
|
|
8939
8940
|
};
|
|
8940
8941
|
}
|
|
8942
|
+
var VALID_CHANGEFREQ = /* @__PURE__ */ new Set(["always", "hourly", "daily", "weekly", "monthly", "yearly", "never"]);
|
|
8943
|
+
function sitemapLineNumber(xml, index) {
|
|
8944
|
+
let line = 1;
|
|
8945
|
+
for (let i = 0; i < index; i++) {
|
|
8946
|
+
if (xml[i] === "\n") line++;
|
|
8947
|
+
}
|
|
8948
|
+
return line;
|
|
8949
|
+
}
|
|
8950
|
+
function extractSitemapTag(block, tag) {
|
|
8951
|
+
const m = block.match(new RegExp(`<${tag}[^>]*>([\\s\\S]*?)</${tag}>`, "i"));
|
|
8952
|
+
return m ? m[1].trim() : void 0;
|
|
8953
|
+
}
|
|
8954
|
+
function isValidW3CDatetime(s) {
|
|
8955
|
+
return /^\d{4}(-\d{2}(-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2}))?)?)?$/.test(s);
|
|
8956
|
+
}
|
|
8957
|
+
function isAbsoluteHttpUrl(s) {
|
|
8958
|
+
return /^https?:\/\//i.test(s);
|
|
8959
|
+
}
|
|
8960
|
+
function validateSitemap(xml) {
|
|
8961
|
+
if (!xml || !xml.trim()) return { error: "Input is empty" };
|
|
8962
|
+
const trimmed = xml.trim();
|
|
8963
|
+
const issues = [];
|
|
8964
|
+
if (!/^\s*<\?xml/i.test(trimmed)) {
|
|
8965
|
+
issues.push({ severity: "warning", line: 1, message: 'Missing XML declaration (<?xml version="1.0" encoding="UTF-8"?>)' });
|
|
8966
|
+
}
|
|
8967
|
+
const isUrlset = /<urlset[\s>]/i.test(trimmed);
|
|
8968
|
+
const isSitemapIndex = /<sitemapindex[\s>]/i.test(trimmed);
|
|
8969
|
+
if (!isUrlset && !isSitemapIndex) {
|
|
8970
|
+
return { error: "Not a valid sitemap: root element must be <urlset> or <sitemapindex>" };
|
|
8971
|
+
}
|
|
8972
|
+
if (isUrlset && isSitemapIndex) {
|
|
8973
|
+
return { error: "Ambiguous file: contains both <urlset> and <sitemapindex> root elements" };
|
|
8974
|
+
}
|
|
8975
|
+
const type = isUrlset ? "urlset" : "sitemapindex";
|
|
8976
|
+
if (isUrlset && !/xmlns\s*=\s*["']http:\/\/www\.sitemaps\.org\/schemas\/sitemap\/0\.9["']/i.test(trimmed)) {
|
|
8977
|
+
issues.push({ severity: "warning", line: 1, message: "Missing or non-standard xmlns namespace (expected http://www.sitemaps.org/schemas/sitemap/0.9)" });
|
|
8978
|
+
}
|
|
8979
|
+
const blockTag = isUrlset ? "url" : "sitemap";
|
|
8980
|
+
const blockRe = new RegExp(`<${blockTag}>([\\s\\S]*?)</${blockTag}>`, "gi");
|
|
8981
|
+
const seenLocs = /* @__PURE__ */ new Set();
|
|
8982
|
+
const entries = [];
|
|
8983
|
+
let match;
|
|
8984
|
+
while ((match = blockRe.exec(trimmed)) !== null) {
|
|
8985
|
+
const block = match[1];
|
|
8986
|
+
const line = sitemapLineNumber(trimmed, match.index);
|
|
8987
|
+
const loc = extractSitemapTag(block, "loc");
|
|
8988
|
+
if (!loc) {
|
|
8989
|
+
issues.push({ severity: "error", line, message: `<${blockTag}> entry is missing required <loc>` });
|
|
8990
|
+
continue;
|
|
8991
|
+
}
|
|
8992
|
+
if (!isAbsoluteHttpUrl(loc)) {
|
|
8993
|
+
issues.push({ severity: "error", line, message: `<loc>${loc}</loc> must be an absolute URL starting with http:// or https://` });
|
|
8994
|
+
}
|
|
8995
|
+
if (/&(?!amp;|lt;|gt;|apos;|quot;|#\d+;)/.test(loc)) {
|
|
8996
|
+
issues.push({ severity: "error", line, message: `<loc>${loc}</loc> contains an unescaped '&' (use & instead)` });
|
|
8997
|
+
}
|
|
8998
|
+
if (seenLocs.has(loc)) {
|
|
8999
|
+
issues.push({ severity: "warning", line, message: `Duplicate <loc>${loc}</loc>` });
|
|
9000
|
+
}
|
|
9001
|
+
seenLocs.add(loc);
|
|
9002
|
+
const lastmod = extractSitemapTag(block, "lastmod");
|
|
9003
|
+
if (lastmod !== void 0 && !isValidW3CDatetime(lastmod)) {
|
|
9004
|
+
issues.push({ severity: "warning", line, message: `<lastmod>${lastmod}</lastmod> is not a valid W3C datetime` });
|
|
9005
|
+
}
|
|
9006
|
+
if (type === "urlset") {
|
|
9007
|
+
const changefreq = extractSitemapTag(block, "changefreq");
|
|
9008
|
+
if (changefreq !== void 0 && !VALID_CHANGEFREQ.has(changefreq.toLowerCase())) {
|
|
9009
|
+
issues.push({ severity: "error", line, message: `<changefreq>${changefreq}</changefreq> must be one of: ${[...VALID_CHANGEFREQ].join(", ")}` });
|
|
9010
|
+
}
|
|
9011
|
+
const priority = extractSitemapTag(block, "priority");
|
|
9012
|
+
if (priority !== void 0) {
|
|
9013
|
+
const p = Number(priority);
|
|
9014
|
+
if (Number.isNaN(p) || p < 0 || p > 1) {
|
|
9015
|
+
issues.push({ severity: "error", line, message: `<priority>${priority}</priority> must be a number between 0.0 and 1.0` });
|
|
9016
|
+
}
|
|
9017
|
+
}
|
|
9018
|
+
entries.push({ loc, lastmod, changefreq, priority, line });
|
|
9019
|
+
} else {
|
|
9020
|
+
entries.push({ loc, lastmod, line });
|
|
9021
|
+
}
|
|
9022
|
+
}
|
|
9023
|
+
if (entries.length === 0) {
|
|
9024
|
+
issues.push({ severity: "error", line: 1, message: `No <${blockTag}> entries found` });
|
|
9025
|
+
}
|
|
9026
|
+
if (type === "urlset" && entries.length > 5e4) {
|
|
9027
|
+
issues.push({ severity: "error", line: 1, message: `Sitemap contains ${entries.length} URLs, exceeding the 50,000 URL limit per the sitemaps.org spec` });
|
|
9028
|
+
}
|
|
9029
|
+
const valid = !issues.some((i) => i.severity === "error");
|
|
9030
|
+
return { type, urlCount: entries.length, entries, issues, valid };
|
|
9031
|
+
}
|
|
8941
9032
|
|
|
8942
9033
|
// src/tools/api.ts
|
|
8943
9034
|
var api_exports = {};
|
package/dist/index.d.cts
CHANGED
|
@@ -6,7 +6,7 @@ export { d as data } from './data-D8XTI7Du.cjs';
|
|
|
6
6
|
export { g as generators } from './generators-BGtRGpJZ.cjs';
|
|
7
7
|
export { t as time } from './time-DbT8fjaF.cjs';
|
|
8
8
|
export { u as units } from './units-6lwDYBvX.cjs';
|
|
9
|
-
export { n as network } from './network-
|
|
9
|
+
export { n as network } from './network-Cy02-FIO.cjs';
|
|
10
10
|
export { a as api } from './api-Xl7OzIgq.cjs';
|
|
11
11
|
export { c as code } from './code-BUqyaofO.cjs';
|
|
12
12
|
export { c as color } from './color-tPwZCr9H.cjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export { d as data } from './data-D8XTI7Du.js';
|
|
|
6
6
|
export { g as generators } from './generators-BGtRGpJZ.js';
|
|
7
7
|
export { t as time } from './time-DbT8fjaF.js';
|
|
8
8
|
export { u as units } from './units-6lwDYBvX.js';
|
|
9
|
-
export { n as network } from './network-
|
|
9
|
+
export { n as network } from './network-Cy02-FIO.js';
|
|
10
10
|
export { a as api } from './api-Xl7OzIgq.js';
|
|
11
11
|
export { c as code } from './code-BUqyaofO.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-GUUYEIU6.js';
|
|
2
2
|
export { units_exports as units } from './chunk-QJE743LY.js';
|
|
3
|
-
export { network_exports as network } from './chunk-
|
|
3
|
+
export { network_exports as network } from './chunk-LI5AME5R.js';
|
|
4
4
|
export { api_exports as api } from './chunk-Q3B3YWOA.js';
|
|
5
5
|
export { code_exports as code } from './chunk-V5S6OJ4A.js';
|
|
6
6
|
export { color_exports as color } from './chunk-BPVAB4P2.js';
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* - http-status : HTTP status code lookup and search
|
|
9
9
|
* - http-headers : HTTP header reference lookup and validation
|
|
10
10
|
* - har-viewer : parseHar
|
|
11
|
+
* - sitemap-validator: validateSitemap
|
|
11
12
|
*/
|
|
12
13
|
declare const DNS_RECORD_TYPES: readonly ["A", "AAAA", "CNAME", "MX", "TXT", "NS", "SOA", "PTR", "SRV", "CAA"];
|
|
13
14
|
type DnsRecordType = typeof DNS_RECORD_TYPES[number];
|
|
@@ -157,6 +158,38 @@ interface HarParseResult {
|
|
|
157
158
|
declare function parseHar(input: string): HarParseResult | {
|
|
158
159
|
error: string;
|
|
159
160
|
};
|
|
161
|
+
interface SitemapUrlEntry {
|
|
162
|
+
loc: string;
|
|
163
|
+
lastmod?: string;
|
|
164
|
+
changefreq?: string;
|
|
165
|
+
priority?: string;
|
|
166
|
+
line: number;
|
|
167
|
+
}
|
|
168
|
+
interface SitemapIndexEntry {
|
|
169
|
+
loc: string;
|
|
170
|
+
lastmod?: string;
|
|
171
|
+
line: number;
|
|
172
|
+
}
|
|
173
|
+
interface SitemapIssue {
|
|
174
|
+
severity: 'error' | 'warning';
|
|
175
|
+
line: number;
|
|
176
|
+
message: string;
|
|
177
|
+
}
|
|
178
|
+
interface SitemapValidationResult {
|
|
179
|
+
type: 'urlset' | 'sitemapindex';
|
|
180
|
+
urlCount: number;
|
|
181
|
+
entries: SitemapUrlEntry[] | SitemapIndexEntry[];
|
|
182
|
+
issues: SitemapIssue[];
|
|
183
|
+
valid: boolean;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Validate a sitemap.xml (urlset) or sitemap index (sitemapindex) against the
|
|
187
|
+
* sitemaps.org protocol: required <loc>, absolute URLs, valid <changefreq>/
|
|
188
|
+
* <priority>/<lastmod> values, the 50,000-URL limit, and duplicate entries.
|
|
189
|
+
*/
|
|
190
|
+
declare function validateSitemap(xml: string): SitemapValidationResult | {
|
|
191
|
+
error: string;
|
|
192
|
+
};
|
|
160
193
|
|
|
161
194
|
declare const network_DNS_RECORD_TYPES: typeof DNS_RECORD_TYPES;
|
|
162
195
|
type network_DnsRecord = DnsRecord;
|
|
@@ -172,6 +205,10 @@ type network_HttpHeader = HttpHeader;
|
|
|
172
205
|
type network_ParsedDnsResult = ParsedDnsResult;
|
|
173
206
|
type network_ParsedGeoResult = ParsedGeoResult;
|
|
174
207
|
declare const network_STATUS_CODES: typeof STATUS_CODES;
|
|
208
|
+
type network_SitemapIndexEntry = SitemapIndexEntry;
|
|
209
|
+
type network_SitemapIssue = SitemapIssue;
|
|
210
|
+
type network_SitemapUrlEntry = SitemapUrlEntry;
|
|
211
|
+
type network_SitemapValidationResult = SitemapValidationResult;
|
|
175
212
|
type network_StatusCode = StatusCode;
|
|
176
213
|
declare const network_buildDnsQueryUrl: typeof buildDnsQueryUrl;
|
|
177
214
|
declare const network_buildGeoUrl: typeof buildGeoUrl;
|
|
@@ -200,8 +237,9 @@ declare const network_typeNumberToLabel: typeof typeNumberToLabel;
|
|
|
200
237
|
declare const network_validateDomain: typeof validateDomain;
|
|
201
238
|
declare const network_validateHeaderName: typeof validateHeaderName;
|
|
202
239
|
declare const network_validateHeaderValue: typeof validateHeaderValue;
|
|
240
|
+
declare const network_validateSitemap: typeof validateSitemap;
|
|
203
241
|
declare namespace network {
|
|
204
|
-
export { 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_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_ParsedDnsResult as ParsedDnsResult, type network_ParsedGeoResult as ParsedGeoResult, network_STATUS_CODES as STATUS_CODES, type network_StatusCode as StatusCode, network_buildDnsQueryUrl as buildDnsQueryUrl, network_buildGeoUrl as buildGeoUrl, network_buildMapUrl as buildMapUrl, 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_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 };
|
|
242
|
+
export { 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_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_ParsedDnsResult as ParsedDnsResult, type network_ParsedGeoResult as ParsedGeoResult, network_STATUS_CODES as STATUS_CODES, 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, network_buildDnsQueryUrl as buildDnsQueryUrl, network_buildGeoUrl as buildGeoUrl, network_buildMapUrl as buildMapUrl, 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_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_validateSitemap as validateSitemap };
|
|
205
243
|
}
|
|
206
244
|
|
|
207
|
-
export {
|
|
245
|
+
export { isClientError as A, isServerError as B, isSuccess as C, DNS_RECORD_TYPES as D, isValidIp as E, isValidIpv4 as F, type GeoResult as G, HTTP_HEADERS as H, isValidIpv6 as I, parseDnsResponse as J, parseGeoResponse as K, parseHar as L, searchHeaders as M, searchStatusCodes as N, statusCodeToText as O, type ParsedDnsResult as P, typeNumberToLabel as Q, validateDomain as R, STATUS_CODES as S, validateHeaderName as T, validateHeaderValue as U, validateSitemap as V, type DnsRecord as a, type DnsRecordType as b, type DnsResponse as c, type HarEntry as d, type HarParseResult as e, type HarSummary as f, type HeaderCategory as g, type HttpHeader as h, type ParsedGeoResult as i, type SitemapIndexEntry as j, type SitemapIssue as k, type SitemapUrlEntry as l, type SitemapValidationResult as m, network as n, type StatusCode as o, buildDnsQueryUrl as p, buildGeoUrl as q, buildMapUrl as r, countryCodeToFlag as s, formatCoordinates as t, formatTtl as u, getByCategory as v, getHeader as w, getHeadersByCategory as x, getStatusByCategory as y, getStatusCode as z };
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* - http-status : HTTP status code lookup and search
|
|
9
9
|
* - http-headers : HTTP header reference lookup and validation
|
|
10
10
|
* - har-viewer : parseHar
|
|
11
|
+
* - sitemap-validator: validateSitemap
|
|
11
12
|
*/
|
|
12
13
|
declare const DNS_RECORD_TYPES: readonly ["A", "AAAA", "CNAME", "MX", "TXT", "NS", "SOA", "PTR", "SRV", "CAA"];
|
|
13
14
|
type DnsRecordType = typeof DNS_RECORD_TYPES[number];
|
|
@@ -157,6 +158,38 @@ interface HarParseResult {
|
|
|
157
158
|
declare function parseHar(input: string): HarParseResult | {
|
|
158
159
|
error: string;
|
|
159
160
|
};
|
|
161
|
+
interface SitemapUrlEntry {
|
|
162
|
+
loc: string;
|
|
163
|
+
lastmod?: string;
|
|
164
|
+
changefreq?: string;
|
|
165
|
+
priority?: string;
|
|
166
|
+
line: number;
|
|
167
|
+
}
|
|
168
|
+
interface SitemapIndexEntry {
|
|
169
|
+
loc: string;
|
|
170
|
+
lastmod?: string;
|
|
171
|
+
line: number;
|
|
172
|
+
}
|
|
173
|
+
interface SitemapIssue {
|
|
174
|
+
severity: 'error' | 'warning';
|
|
175
|
+
line: number;
|
|
176
|
+
message: string;
|
|
177
|
+
}
|
|
178
|
+
interface SitemapValidationResult {
|
|
179
|
+
type: 'urlset' | 'sitemapindex';
|
|
180
|
+
urlCount: number;
|
|
181
|
+
entries: SitemapUrlEntry[] | SitemapIndexEntry[];
|
|
182
|
+
issues: SitemapIssue[];
|
|
183
|
+
valid: boolean;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Validate a sitemap.xml (urlset) or sitemap index (sitemapindex) against the
|
|
187
|
+
* sitemaps.org protocol: required <loc>, absolute URLs, valid <changefreq>/
|
|
188
|
+
* <priority>/<lastmod> values, the 50,000-URL limit, and duplicate entries.
|
|
189
|
+
*/
|
|
190
|
+
declare function validateSitemap(xml: string): SitemapValidationResult | {
|
|
191
|
+
error: string;
|
|
192
|
+
};
|
|
160
193
|
|
|
161
194
|
declare const network_DNS_RECORD_TYPES: typeof DNS_RECORD_TYPES;
|
|
162
195
|
type network_DnsRecord = DnsRecord;
|
|
@@ -172,6 +205,10 @@ type network_HttpHeader = HttpHeader;
|
|
|
172
205
|
type network_ParsedDnsResult = ParsedDnsResult;
|
|
173
206
|
type network_ParsedGeoResult = ParsedGeoResult;
|
|
174
207
|
declare const network_STATUS_CODES: typeof STATUS_CODES;
|
|
208
|
+
type network_SitemapIndexEntry = SitemapIndexEntry;
|
|
209
|
+
type network_SitemapIssue = SitemapIssue;
|
|
210
|
+
type network_SitemapUrlEntry = SitemapUrlEntry;
|
|
211
|
+
type network_SitemapValidationResult = SitemapValidationResult;
|
|
175
212
|
type network_StatusCode = StatusCode;
|
|
176
213
|
declare const network_buildDnsQueryUrl: typeof buildDnsQueryUrl;
|
|
177
214
|
declare const network_buildGeoUrl: typeof buildGeoUrl;
|
|
@@ -200,8 +237,9 @@ declare const network_typeNumberToLabel: typeof typeNumberToLabel;
|
|
|
200
237
|
declare const network_validateDomain: typeof validateDomain;
|
|
201
238
|
declare const network_validateHeaderName: typeof validateHeaderName;
|
|
202
239
|
declare const network_validateHeaderValue: typeof validateHeaderValue;
|
|
240
|
+
declare const network_validateSitemap: typeof validateSitemap;
|
|
203
241
|
declare namespace network {
|
|
204
|
-
export { 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_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_ParsedDnsResult as ParsedDnsResult, type network_ParsedGeoResult as ParsedGeoResult, network_STATUS_CODES as STATUS_CODES, type network_StatusCode as StatusCode, network_buildDnsQueryUrl as buildDnsQueryUrl, network_buildGeoUrl as buildGeoUrl, network_buildMapUrl as buildMapUrl, 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_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 };
|
|
242
|
+
export { 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_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_ParsedDnsResult as ParsedDnsResult, type network_ParsedGeoResult as ParsedGeoResult, network_STATUS_CODES as STATUS_CODES, 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, network_buildDnsQueryUrl as buildDnsQueryUrl, network_buildGeoUrl as buildGeoUrl, network_buildMapUrl as buildMapUrl, 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_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_validateSitemap as validateSitemap };
|
|
205
243
|
}
|
|
206
244
|
|
|
207
|
-
export {
|
|
245
|
+
export { isClientError as A, isServerError as B, isSuccess as C, DNS_RECORD_TYPES as D, isValidIp as E, isValidIpv4 as F, type GeoResult as G, HTTP_HEADERS as H, isValidIpv6 as I, parseDnsResponse as J, parseGeoResponse as K, parseHar as L, searchHeaders as M, searchStatusCodes as N, statusCodeToText as O, type ParsedDnsResult as P, typeNumberToLabel as Q, validateDomain as R, STATUS_CODES as S, validateHeaderName as T, validateHeaderValue as U, validateSitemap as V, type DnsRecord as a, type DnsRecordType as b, type DnsResponse as c, type HarEntry as d, type HarParseResult as e, type HarSummary as f, type HeaderCategory as g, type HttpHeader as h, type ParsedGeoResult as i, type SitemapIndexEntry as j, type SitemapIssue as k, type SitemapUrlEntry as l, type SitemapValidationResult as m, network as n, type StatusCode as o, buildDnsQueryUrl as p, buildGeoUrl as q, buildMapUrl as r, countryCodeToFlag as s, formatCoordinates as t, formatTtl as u, getByCategory as v, getHeader as w, getHeadersByCategory as x, getStatusByCategory as y, getStatusCode as z };
|
package/dist/tools/network.cjs
CHANGED
|
@@ -1407,6 +1407,96 @@ function parseHar(input) {
|
|
|
1407
1407
|
summary: { totalRequests, totalSize, totalTime, avgTime, failedRequests, methods, statusCodes }
|
|
1408
1408
|
};
|
|
1409
1409
|
}
|
|
1410
|
+
var VALID_CHANGEFREQ = /* @__PURE__ */ new Set(["always", "hourly", "daily", "weekly", "monthly", "yearly", "never"]);
|
|
1411
|
+
function sitemapLineNumber(xml, index) {
|
|
1412
|
+
let line = 1;
|
|
1413
|
+
for (let i = 0; i < index; i++) {
|
|
1414
|
+
if (xml[i] === "\n") line++;
|
|
1415
|
+
}
|
|
1416
|
+
return line;
|
|
1417
|
+
}
|
|
1418
|
+
function extractSitemapTag(block, tag) {
|
|
1419
|
+
const m = block.match(new RegExp(`<${tag}[^>]*>([\\s\\S]*?)</${tag}>`, "i"));
|
|
1420
|
+
return m ? m[1].trim() : void 0;
|
|
1421
|
+
}
|
|
1422
|
+
function isValidW3CDatetime(s) {
|
|
1423
|
+
return /^\d{4}(-\d{2}(-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2}))?)?)?$/.test(s);
|
|
1424
|
+
}
|
|
1425
|
+
function isAbsoluteHttpUrl(s) {
|
|
1426
|
+
return /^https?:\/\//i.test(s);
|
|
1427
|
+
}
|
|
1428
|
+
function validateSitemap(xml) {
|
|
1429
|
+
if (!xml || !xml.trim()) return { error: "Input is empty" };
|
|
1430
|
+
const trimmed = xml.trim();
|
|
1431
|
+
const issues = [];
|
|
1432
|
+
if (!/^\s*<\?xml/i.test(trimmed)) {
|
|
1433
|
+
issues.push({ severity: "warning", line: 1, message: 'Missing XML declaration (<?xml version="1.0" encoding="UTF-8"?>)' });
|
|
1434
|
+
}
|
|
1435
|
+
const isUrlset = /<urlset[\s>]/i.test(trimmed);
|
|
1436
|
+
const isSitemapIndex = /<sitemapindex[\s>]/i.test(trimmed);
|
|
1437
|
+
if (!isUrlset && !isSitemapIndex) {
|
|
1438
|
+
return { error: "Not a valid sitemap: root element must be <urlset> or <sitemapindex>" };
|
|
1439
|
+
}
|
|
1440
|
+
if (isUrlset && isSitemapIndex) {
|
|
1441
|
+
return { error: "Ambiguous file: contains both <urlset> and <sitemapindex> root elements" };
|
|
1442
|
+
}
|
|
1443
|
+
const type = isUrlset ? "urlset" : "sitemapindex";
|
|
1444
|
+
if (isUrlset && !/xmlns\s*=\s*["']http:\/\/www\.sitemaps\.org\/schemas\/sitemap\/0\.9["']/i.test(trimmed)) {
|
|
1445
|
+
issues.push({ severity: "warning", line: 1, message: "Missing or non-standard xmlns namespace (expected http://www.sitemaps.org/schemas/sitemap/0.9)" });
|
|
1446
|
+
}
|
|
1447
|
+
const blockTag = isUrlset ? "url" : "sitemap";
|
|
1448
|
+
const blockRe = new RegExp(`<${blockTag}>([\\s\\S]*?)</${blockTag}>`, "gi");
|
|
1449
|
+
const seenLocs = /* @__PURE__ */ new Set();
|
|
1450
|
+
const entries = [];
|
|
1451
|
+
let match;
|
|
1452
|
+
while ((match = blockRe.exec(trimmed)) !== null) {
|
|
1453
|
+
const block = match[1];
|
|
1454
|
+
const line = sitemapLineNumber(trimmed, match.index);
|
|
1455
|
+
const loc = extractSitemapTag(block, "loc");
|
|
1456
|
+
if (!loc) {
|
|
1457
|
+
issues.push({ severity: "error", line, message: `<${blockTag}> entry is missing required <loc>` });
|
|
1458
|
+
continue;
|
|
1459
|
+
}
|
|
1460
|
+
if (!isAbsoluteHttpUrl(loc)) {
|
|
1461
|
+
issues.push({ severity: "error", line, message: `<loc>${loc}</loc> must be an absolute URL starting with http:// or https://` });
|
|
1462
|
+
}
|
|
1463
|
+
if (/&(?!amp;|lt;|gt;|apos;|quot;|#\d+;)/.test(loc)) {
|
|
1464
|
+
issues.push({ severity: "error", line, message: `<loc>${loc}</loc> contains an unescaped '&' (use & instead)` });
|
|
1465
|
+
}
|
|
1466
|
+
if (seenLocs.has(loc)) {
|
|
1467
|
+
issues.push({ severity: "warning", line, message: `Duplicate <loc>${loc}</loc>` });
|
|
1468
|
+
}
|
|
1469
|
+
seenLocs.add(loc);
|
|
1470
|
+
const lastmod = extractSitemapTag(block, "lastmod");
|
|
1471
|
+
if (lastmod !== void 0 && !isValidW3CDatetime(lastmod)) {
|
|
1472
|
+
issues.push({ severity: "warning", line, message: `<lastmod>${lastmod}</lastmod> is not a valid W3C datetime` });
|
|
1473
|
+
}
|
|
1474
|
+
if (type === "urlset") {
|
|
1475
|
+
const changefreq = extractSitemapTag(block, "changefreq");
|
|
1476
|
+
if (changefreq !== void 0 && !VALID_CHANGEFREQ.has(changefreq.toLowerCase())) {
|
|
1477
|
+
issues.push({ severity: "error", line, message: `<changefreq>${changefreq}</changefreq> must be one of: ${[...VALID_CHANGEFREQ].join(", ")}` });
|
|
1478
|
+
}
|
|
1479
|
+
const priority = extractSitemapTag(block, "priority");
|
|
1480
|
+
if (priority !== void 0) {
|
|
1481
|
+
const p = Number(priority);
|
|
1482
|
+
if (Number.isNaN(p) || p < 0 || p > 1) {
|
|
1483
|
+
issues.push({ severity: "error", line, message: `<priority>${priority}</priority> must be a number between 0.0 and 1.0` });
|
|
1484
|
+
}
|
|
1485
|
+
}
|
|
1486
|
+
entries.push({ loc, lastmod, changefreq, priority, line });
|
|
1487
|
+
} else {
|
|
1488
|
+
entries.push({ loc, lastmod, line });
|
|
1489
|
+
}
|
|
1490
|
+
}
|
|
1491
|
+
if (entries.length === 0) {
|
|
1492
|
+
issues.push({ severity: "error", line: 1, message: `No <${blockTag}> entries found` });
|
|
1493
|
+
}
|
|
1494
|
+
if (type === "urlset" && entries.length > 5e4) {
|
|
1495
|
+
issues.push({ severity: "error", line: 1, message: `Sitemap contains ${entries.length} URLs, exceeding the 50,000 URL limit per the sitemaps.org spec` });
|
|
1496
|
+
}
|
|
1497
|
+
const valid = !issues.some((i) => i.severity === "error");
|
|
1498
|
+
return { type, urlCount: entries.length, entries, issues, valid };
|
|
1499
|
+
}
|
|
1410
1500
|
|
|
1411
1501
|
exports.DNS_RECORD_TYPES = DNS_RECORD_TYPES;
|
|
1412
1502
|
exports.HTTP_HEADERS = HTTP_HEADERS;
|
|
@@ -1438,3 +1528,4 @@ exports.typeNumberToLabel = typeNumberToLabel;
|
|
|
1438
1528
|
exports.validateDomain = validateDomain;
|
|
1439
1529
|
exports.validateHeaderName = validateHeaderName;
|
|
1440
1530
|
exports.validateHeaderValue = validateHeaderValue;
|
|
1531
|
+
exports.validateSitemap = validateSitemap;
|
package/dist/tools/network.d.cts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { D as DNS_RECORD_TYPES, a as DnsRecord, b as DnsRecordType, c as DnsResponse, G as GeoResult, H as HTTP_HEADERS, d as HarEntry, e as HarParseResult, f as HarSummary, g as HeaderCategory, h as HttpHeader, P as ParsedDnsResult, i as ParsedGeoResult, S as STATUS_CODES, j as
|
|
1
|
+
export { D as DNS_RECORD_TYPES, a as DnsRecord, b as DnsRecordType, c as DnsResponse, G as GeoResult, H as HTTP_HEADERS, d as HarEntry, e as HarParseResult, f as HarSummary, g as HeaderCategory, h as HttpHeader, P as ParsedDnsResult, i as ParsedGeoResult, S as STATUS_CODES, j as SitemapIndexEntry, k as SitemapIssue, l as SitemapUrlEntry, m as SitemapValidationResult, o as StatusCode, p as buildDnsQueryUrl, q as buildGeoUrl, r as buildMapUrl, s as countryCodeToFlag, t as formatCoordinates, u as formatTtl, v as getByCategory, w as getHeader, x as getHeadersByCategory, y as getStatusByCategory, z as getStatusCode, A as isClientError, B as isServerError, C as isSuccess, E as isValidIp, F as isValidIpv4, I as isValidIpv6, J as parseDnsResponse, K as parseGeoResponse, L as parseHar, M as searchHeaders, N as searchStatusCodes, O as statusCodeToText, Q as typeNumberToLabel, R as validateDomain, T as validateHeaderName, U as validateHeaderValue, V as validateSitemap } from '../network-Cy02-FIO.cjs';
|
package/dist/tools/network.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { D as DNS_RECORD_TYPES, a as DnsRecord, b as DnsRecordType, c as DnsResponse, G as GeoResult, H as HTTP_HEADERS, d as HarEntry, e as HarParseResult, f as HarSummary, g as HeaderCategory, h as HttpHeader, P as ParsedDnsResult, i as ParsedGeoResult, S as STATUS_CODES, j as
|
|
1
|
+
export { D as DNS_RECORD_TYPES, a as DnsRecord, b as DnsRecordType, c as DnsResponse, G as GeoResult, H as HTTP_HEADERS, d as HarEntry, e as HarParseResult, f as HarSummary, g as HeaderCategory, h as HttpHeader, P as ParsedDnsResult, i as ParsedGeoResult, S as STATUS_CODES, j as SitemapIndexEntry, k as SitemapIssue, l as SitemapUrlEntry, m as SitemapValidationResult, o as StatusCode, p as buildDnsQueryUrl, q as buildGeoUrl, r as buildMapUrl, s as countryCodeToFlag, t as formatCoordinates, u as formatTtl, v as getByCategory, w as getHeader, x as getHeadersByCategory, y as getStatusByCategory, z as getStatusCode, A as isClientError, B as isServerError, C as isSuccess, E as isValidIp, F as isValidIpv4, I as isValidIpv6, J as parseDnsResponse, K as parseGeoResponse, L as parseHar, M as searchHeaders, N as searchStatusCodes, O as statusCodeToText, Q as typeNumberToLabel, R as validateDomain, T as validateHeaderName, U as validateHeaderValue, V as validateSitemap } from '../network-Cy02-FIO.js';
|
package/dist/tools/network.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { DNS_RECORD_TYPES, HTTP_HEADERS, STATUS_CODES, buildDnsQueryUrl, buildGeoUrl, buildMapUrl, countryCodeToFlag, formatCoordinates, formatTtl, getByCategory, getHeader, getHeadersByCategory, getStatusByCategory, getStatusCode, isClientError, isServerError, isSuccess, isValidIp, isValidIpv4, isValidIpv6, parseDnsResponse, parseGeoResponse, parseHar, searchHeaders, searchStatusCodes, statusCodeToText, typeNumberToLabel, validateDomain, validateHeaderName, validateHeaderValue } from '../chunk-
|
|
1
|
+
export { DNS_RECORD_TYPES, HTTP_HEADERS, STATUS_CODES, buildDnsQueryUrl, buildGeoUrl, buildMapUrl, countryCodeToFlag, formatCoordinates, formatTtl, getByCategory, getHeader, getHeadersByCategory, getStatusByCategory, getStatusCode, isClientError, isServerError, isSuccess, isValidIp, isValidIpv4, isValidIpv6, parseDnsResponse, parseGeoResponse, parseHar, searchHeaders, searchStatusCodes, statusCodeToText, typeNumberToLabel, validateDomain, validateHeaderName, validateHeaderValue, validateSitemap } from '../chunk-LI5AME5R.js';
|
|
2
2
|
import '../chunk-MLKGABMK.js';
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@utilix-tech/sdk",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.9.0",
|
|
4
|
+
"description": "154+ developer utility tools for Node.js: JSON, encoding, hashing, color, CSS, network and more. Runs locally, no API key required.",
|
|
5
5
|
"author": "Utilix <hello@utilix.tech>",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"homepage": "https://www.utilix.tech/docs#node-sdk",
|