UNPKG

el-bot

Version:

A quick qq bot framework for mirai.

84 lines (73 loc) 1.84 kB
import fs from 'fs-extra' import yaml from 'js-yaml' /** * 单纯 typeof [] 会返回 object * @deprecated * @param item */ function isObject(item: any) { return typeof item === 'object' && !Array.isArray(item) } /** * https://www.npmjs.com/package/js-yaml * @param path 配置文件名 */ export function parseYaml(path: string) { return yaml.load(fs.readFileSync(path, 'utf8')) } /** * 合并配置 * @deprecated * @param target 目标配置 * @param source 源配置 */ export function merge(target: any, source: any): any { for (const key in source) { if (isObject(target[key]) && isObject(source[key])) merge(target[key], source[key]) else target[key] = source[key] } return target } function mergeConfigRecursively( defaults: Record<string, any>, overrides: Record<string, any>, rootPath: string, ) { const merged: Record<string, any> = { ...defaults } for (const key in overrides) { const value = overrides[key] if (value == null) continue const existing = merged[key] if (existing == null) { merged[key] = value continue } if (Array.isArray(existing) || Array.isArray(value)) { merged[key] = [...arraify(existing ?? []), ...arraify(value ?? [])] continue } if (isObject(existing) && isObject(value)) { merged[key] = mergeConfigRecursively( existing, value, rootPath ? `${rootPath}.${key}` : key, ) continue } merged[key] = value } return merged } export function mergeConfig( defaults: Record<string, any>, overrides: Record<string, any>, isRoot = true, ): Record<string, any> { return mergeConfigRecursively(defaults, overrides, isRoot ? '' : '.') } function arraify<T>(target: T | T[]): T[] { return Array.isArray(target) ? target : [target] }