mirror of
https://github.com/fofolee/uTools-quickcommand.git
synced 2025-09-24 13:03:30 +08:00
编排新增url/dns/buffer/zlib,新增arrayEditor组件,优化parseFunction
This commit is contained in:
106
plugin/lib/quickcomposer/network/dns.js
Normal file
106
plugin/lib/quickcomposer/network/dns.js
Normal 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,
|
||||
};
|
4
plugin/lib/quickcomposer/network/index.js
Normal file
4
plugin/lib/quickcomposer/network/index.js
Normal file
@@ -0,0 +1,4 @@
|
||||
module.exports = {
|
||||
url: require("./url"),
|
||||
dns: require("./dns"),
|
||||
};
|
98
plugin/lib/quickcomposer/network/url.js
Normal file
98
plugin/lib/quickcomposer/network/url.js
Normal 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,
|
||||
};
|
Reference in New Issue
Block a user