groupby-typename
Version:
Type-safe and tested utility to easily group an array of GraphQL objects by their typename
33 lines (31 loc) • 910 B
JavaScript
import { legacyGroupByTypename } from "./legacyGroupByTypename.js";
//#region src/groupByTypename.ts
/**
* Groups an array of GraphQL objects by their `__typename` property.
*
* Useful when getting nodes or a union of types from a GraphQL response.
*
* @example
* ```ts
* const data = [{ __typename: 'User' as const }, { __typename: 'Post' as const }];
* const grouped = groupByTypename(data);
* // ^? const grouped: {
* // User?: {
* // __typename: "User";
* // }[];
* // Post?: {
* // __typename: "Post";
* // }[];
* // }
* const users = grouped.User;
* // ^? const users: {
* // __typename: "User";
* // }[]
* ```
*/
function groupByTypename(objects) {
if (!("groupBy" in Object)) return legacyGroupByTypename(objects);
return Object.groupBy(objects, (object) => object.__typename);
}
//#endregion
export { groupByTypename };