编排新增url/dns/buffer/zlib,新增arrayEditor组件,优化parseFunction

This commit is contained in:
fofolee
2025-01-05 22:50:21 +08:00
parent 54bb43dcc8
commit a6cc1c8737
30 changed files with 3214 additions and 243 deletions

View File

@@ -0,0 +1,106 @@
const dns = require("dns");
const { promisify } = require("util");
// 将回调函数转换为 Promise
const lookup = promisify(dns.lookup);
const resolve = promisify(dns.resolve);
const resolve4 = promisify(dns.resolve4);
const resolve6 = promisify(dns.resolve6);
const resolveMx = promisify(dns.resolveMx);
const resolveTxt = promisify(dns.resolveTxt);
const resolveNs = promisify(dns.resolveNs);
const resolveCname = promisify(dns.resolveCname);
const reverse = promisify(dns.reverse);
// 解析主机名
async function lookupHost(hostname, options = {}) {
try {
return await lookup(hostname, options);
} catch (error) {
throw new Error(`DNS查询失败: ${error.message}`);
}
}
// 解析所有记录
async function resolveAll(hostname) {
try {
return await resolve(hostname);
} catch (error) {
throw new Error(`DNS解析失败: ${error.message}`);
}
}
// 解析 IPv4 地址
async function resolveIpv4(hostname) {
try {
return await resolve4(hostname);
} catch (error) {
throw new Error(`IPv4解析失败: ${error.message}`);
}
}
// 解析 IPv6 地址
async function resolveIpv6(hostname) {
try {
return await resolve6(hostname);
} catch (error) {
throw new Error(`IPv6解析失败: ${error.message}`);
}
}
// 解析 MX 记录
async function resolveMxRecords(hostname) {
try {
return await resolveMx(hostname);
} catch (error) {
throw new Error(`MX记录解析失败: ${error.message}`);
}
}
// 解析 TXT 记录
async function resolveTxtRecords(hostname) {
try {
return await resolveTxt(hostname);
} catch (error) {
throw new Error(`TXT记录解析失败: ${error.message}`);
}
}
// 解析 NS 记录
async function resolveNsRecords(hostname) {
try {
return await resolveNs(hostname);
} catch (error) {
throw new Error(`NS记录解析失败: ${error.message}`);
}
}
// 解析 CNAME 记录
async function resolveCnameRecords(hostname) {
try {
return await resolveCname(hostname);
} catch (error) {
throw new Error(`CNAME记录解析失败: ${error.message}`);
}
}
// 反向解析 IP 地址
async function reverseResolve(ip) {
try {
return await reverse(ip);
} catch (error) {
throw new Error(`反向解析失败: ${error.message}`);
}
}
module.exports = {
lookupHost,
resolveAll,
resolveIpv4,
resolveIpv6,
resolveMxRecords,
resolveTxtRecords,
resolveNsRecords,
resolveCnameRecords,
reverseResolve,
};

View File

@@ -0,0 +1,4 @@
module.exports = {
url: require("./url"),
dns: require("./dns"),
};

View File

@@ -0,0 +1,98 @@
const url = require("url");
// URL 解析
function parse(urlString, parseQueryString = false) {
return url.parse(urlString, parseQueryString);
}
// URL 格式化
function format(urlObject) {
return url.format(urlObject);
}
// 解析查询字符串
function parseQuery(query) {
const searchParams = new URLSearchParams(query);
const result = {};
for (const [key, value] of searchParams) {
result[key] = value;
}
return result;
}
// 格式化查询字符串
function formatQuery(queryObject) {
const searchParams = new URLSearchParams();
for (const [key, value] of Object.entries(queryObject)) {
searchParams.append(key, value);
}
return searchParams.toString();
}
// 解析路径名
function parsePath(path) {
return url.parse(path);
}
// 解析主机名
function parseHost(host) {
const { hostname, port } = url.parse(`http://${host}`);
return { hostname, port };
}
// 解析 URL 参数
function getQueryParam(urlString, param) {
const { query } = url.parse(urlString, true);
return query[param];
}
// 添加 URL 参数
function addQueryParam(urlString, param, value) {
const parsedUrl = url.parse(urlString, true);
parsedUrl.query[param] = value;
parsedUrl.search = null; // 清除 search以便 format 时使用 query
return url.format(parsedUrl);
}
// 移除 URL 参数
function removeQueryParam(urlString, param) {
const parsedUrl = url.parse(urlString, true);
delete parsedUrl.query[param];
parsedUrl.search = null;
return url.format(parsedUrl);
}
// 检查是否是绝对 URL
function isAbsolute(urlString) {
return url.parse(urlString).protocol !== null;
}
// 解析 URL 的各个部分
function parseComponents(urlString) {
const { protocol, auth, hostname, port, pathname, search, hash } =
url.parse(urlString);
return {
protocol: protocol?.replace(":", ""),
auth,
hostname,
port,
pathname,
search: search?.replace("?", ""),
hash: hash?.replace("#", ""),
};
}
module.exports = {
parse,
format,
parseQuery,
formatQuery,
parsePath,
parseHost,
getQueryParam,
addQueryParam,
removeQueryParam,
isAbsolute,
parseComponents,
};