scripts/generateClientTypesMap/getClientTypesMapWithKeysRemovedFromValues.ts (26 lines of code) (raw):
import { hasKeyReferenceInClientTypesMap } from "./hasKeyReferenceInClientTypesMap";
import { hasKeyReferenceInValue } from "./hasKeyReferenceinValue";
/**
* Checks if any of the values have reference to key, and replaces them recursively.
*/
export const getClientTypesMapWithKeysRemovedFromValues = (
clientTypesMap: Record<string, string>
) => {
if (!hasKeyReferenceInClientTypesMap(clientTypesMap)) {
return clientTypesMap;
}
const newClientTypeMap = {};
const keys = Object.keys(clientTypesMap);
for (const [key, value] of Object.entries(clientTypesMap)) {
const refs = keys.filter((key) => hasKeyReferenceInValue(key, value));
if (refs.length === 0) {
newClientTypeMap[key] = value;
} else {
newClientTypeMap[key] = refs.reduce(
(acc, ref) =>
acc
.replace(`Array<${ref}>`, `Array<${clientTypesMap[ref]}>`)
.replace(`Record<string, ${ref}>`, `Record<string, ${clientTypesMap[ref]}>`),
value
);
}
}
return getClientTypesMapWithKeysRemovedFromValues(newClientTypeMap);
};