rsshub
Version:
Make RSS Great Again!
29 lines (24 loc) • 1.12 kB
text/typescript
const isObject = (obj: any) => obj && typeof obj === 'object';
const isPlainObject = (obj: any) => isObject(obj) && Object.prototype.toString.call(obj) === '[object Object]' && Object.getPrototypeOf(obj) === Object.prototype;
/**
* A simple camelCase function that only handles strings, but not handling symbol, date, or other complex case.
* If you need to handle more complex cases, please use camelcase-keys package.
*/
export const camelcaseKeys = <T = any>(obj: any): T => {
if (Array.isArray(obj)) {
return obj.map((x) => camelcaseKeys(x)) as any;
}
if (isPlainObject(obj)) {
const result: any = {};
for (const key of Object.keys(obj)) {
const nextKey = isMongoId(key) ? key : camelcase(key);
result[nextKey] = camelcaseKeys(obj[key]);
}
return result as any;
}
return obj;
};
export function camelcase(str: string) {
return str.replace(/^_+/, '').replaceAll(/([_-][a-z])/gi, ($1) => $1.toUpperCase().replace('-', '').replace('_', ''));
}
const isMongoId = (id: string) => id.length === 24 && /^[\dA-Fa-f]{24}$/.test(id);