Extend __typename stripper to fix interface config saving (#1929)

This commit is contained in:
InfiniteTF
2021-11-01 01:15:03 +01:00
committed by GitHub
parent 07a1cdd9f7
commit 0d24af4cb4

View File

@@ -5,7 +5,28 @@ interface ITypename {
__typename?: string;
}
export function withoutTypename<T extends ITypename>(o: T) {
const { __typename, ...ret } = o;
return ret;
const hasTypename = (value: unknown): value is ITypename =>
!!(value as ITypename)?.__typename;
const processNoneObjValue = (value: unknown): unknown =>
Array.isArray(value)
? value.map((v) =>
hasTypename(v) ? withoutTypename(v) : processNoneObjValue(v)
)
: value;
export function withoutTypename<T extends ITypename>(
o: T
): Omit<T, "__typename"> {
const { __typename, ...data } = o;
return Object.entries(data).reduce(
(ret, [key, value]) => ({
...ret,
[key]: hasTypename(value)
? withoutTypename(value)
: processNoneObjValue(value),
}),
{} as Omit<T, "__typename">
);
}