api-interface
Version:
90 lines (89 loc) • 3.07 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.throwUrlError = exports.isNumber = exports.isUrl = exports.isHttp = exports.isQQ = exports.getRequest = exports.getRedirectUrl = exports.stringify = void 0;
const https_1 = __importDefault(require("https"));
function stringify(data, format) {
return format ? JSON.stringify(data, null, 2) : JSON.stringify(data);
}
exports.stringify = stringify;
function getRedirectUrl(url) {
// eslint-disable-next-line no-unused-vars
return new Promise((resolve, reject) => {
https_1.default
.get(url, async (res) => {
// 处理重定向
if (res.statusCode && res.statusCode >= 300 && res.statusCode < 400) {
resolve(res.headers.location);
}
})
.on('error', (e) => {
reject(e);
});
});
}
exports.getRedirectUrl = getRedirectUrl;
function getRequest(url, responseType) {
// eslint-disable-next-line no-unused-vars
return new Promise((resolve, reject) => {
https_1.default
.get(url, async (res) => {
// 处理重定向
if (res.statusCode && res.statusCode >= 300) {
const result = await getRequest(res.headers.location);
resolve(result);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const data = [];
res.on('data', (chunk) => {
data.push(chunk);
});
res.on('end', () => {
if (responseType === 'arraybuffer')
return resolve({ buffer: data[0] });
const raw = Buffer.concat(data).toString();
try {
resolve(JSON.parse(raw));
}
catch (error) {
resolve({ raw });
}
});
})
.on('error', (e) => {
reject(e);
});
});
}
exports.getRequest = getRequest;
function isQQ(qq) {
return qq.length >= 5 && qq.length <= 10;
}
exports.isQQ = isQQ;
function isHttp(url) {
return /^(https?:)?\/\//g.test(url);
}
exports.isHttp = isHttp;
function isUrl(str) {
try {
const url = new URL(str);
if (/^https?:\/\//.test(str) && /([A-Za-z\d]{1,30}\.)+[A-Za-z\d]{2,5}$/.test(url.hostname)) {
return true;
}
// eslint-disable-next-line no-empty
}
catch (error) { }
return false;
}
exports.isUrl = isUrl;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function isNumber(value) {
return !isNaN(parseFloat(value)) && isFinite(value);
}
exports.isNumber = isNumber;
function throwUrlError() {
throw new Error('"url" parameter is not legal');
}
exports.throwUrlError = throwUrlError;