UNPKG

@imeaces/mcping-tool

Version:
74 lines 2.33 kB
/** * 创建一个待定状态的 {@link Promise},还有为此 Promise 设置结果的函数。 */ export function createPendingPromise() { let resolve, reject; const promise = new Promise((re, rj) => { //此处同步调用 resolve = re; reject = rj; }); return { resolve, reject, promise }; } import * as dns from "node:dns"; // because I'd experienced something... :( /** * 解析指定域名的 A 记录。 * @param name 要解析的域名。 * @param timeout 超时时间,单位为毫秒。 * @returns 解析结果(一个长度不为0的数组),或者空。 */ export function dnsResolve4(name, timeout = 5000) { const pendingPromise = createPendingPromise(); setTimeout(() => { pendingPromise.resolve(null); }, timeout); dns.resolve4(name, (e, r) => { if (e || r.length === 0) pendingPromise.resolve(null); else pendingPromise.resolve(r); }); return pendingPromise.promise; } /** * 解析指定域名的 AAAA 记录。 * @param name 要解析的域名。 * @param timeout 超时时间,单位为毫秒。 * @returns 解析结果(一个长度不为0的数组),或者空。 */ export function dnsResolve6(name, timeout = 5000) { const pendingPromise = createPendingPromise(); setTimeout(() => { pendingPromise.resolve(null); }, timeout); dns.resolve6(name, (e, r) => { if (e || r.length === 0) pendingPromise.resolve(null); else pendingPromise.resolve(r); }); return pendingPromise.promise; } /** * 解析指定的域名。 * @param name 要解析的域名。 * @param timeout 超时时间,单位为毫秒。 * @returns 解析结果(一个长度不为0的数组),或者空。 */ export function dnsLookup(name, timeout = 5000) { const pendingPromise = createPendingPromise(); setTimeout(() => { pendingPromise.reject(new Error("socket timeout")); }, timeout); dns.lookup(name, { all: true }, (e, r) => { if (e) pendingPromise.reject(e); else if (r.length === 0) pendingPromise.reject(new Error("no dns data")); else pendingPromise.resolve(r); }); return pendingPromise.promise; } //# sourceMappingURL=lib.js.map