bananas-commerce
Version:
A client for bananas-commerce with support for TypeScript
21 lines (20 loc) • 768 B
JavaScript
import { casedString } from "./casedString.js";
/** Converts the keys (or deeply nested keys) of an {@link object} to the specified {@link casing}. */
export const casedObjectKeys = (object, casing) => {
if (typeof object !== "object" || object === null) {
return object;
}
else if (Array.isArray(object)) {
return object.map((element) => casedObjectKeys(element, casing));
}
const cased = {};
Object.keys(object).forEach((key) => {
cased[casedString(key, casing)] = casedObjectKeys(object[key], casing);
});
return cased;
};
const objectCasers = {
snake: (object) => casedObjectKeys(object, "snake"),
camel: (object) => casedObjectKeys(object, "camel"),
};
Object.assign(casedObjectKeys, objectCasers);