amesu
Version:
Node.js SDK for QQ Bot.
78 lines (77 loc) • 2.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseError = exports.sleep = exports.objectToString = exports.parseBody = exports.objectToParams = exports.deepAssign = void 0;
/**
* 对象深合并,用法与 `Object.assign()` 保持一致。
*
* @param target - 目标对象,接收源对象属性的对象,也是修改后的返回值。
* @param sources - 源对象,包含将被合并的属性。
* @returns 目标对象。
*/
function deepAssign(target, ...sources) {
for (let i = 0; i < sources.length; i++) {
const source = sources[i];
if (!source || typeof source !== `object`) {
return target;
}
Object.entries(source).forEach(([key, value]) => {
if (!value || typeof value !== `object`) {
target[key] = value;
return;
}
if (Array.isArray(value)) {
target[key] = [];
}
if (typeof target[key] !== `object` || !target[key]) {
target[key] = {};
}
deepAssign(target[key], value);
});
}
return target;
}
exports.deepAssign = deepAssign;
function objectToParams(object) {
const params = new URLSearchParams();
const keys = Object.keys(object);
for (let index = 0; index < keys.length; index++) {
const key = keys[index];
const value = Reflect.get(object, key);
params.append(key, value);
}
return params.toString();
}
exports.objectToParams = objectToParams;
function parseBody(params) {
if (!params) {
return;
}
const has_blob = Object.entries(params).some(([_, value]) => value instanceof Blob);
if (has_blob) {
const formData = new FormData();
const keys = Object.keys(params);
for (let index = 0; index < keys.length; index++) {
const key = keys[index];
const value = Reflect.get(params, key);
formData.append(key, value);
}
return formData;
}
return JSON.stringify(params);
}
exports.parseBody = parseBody;
function objectToString(value) {
if (typeof value === 'string') {
return value;
}
return JSON.stringify(value, null, 2);
}
exports.objectToString = objectToString;
async function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
exports.sleep = sleep;
function parseError(error) {
return error instanceof Error ? error.message : objectToString(error);
}
exports.parseError = parseError;