UNPKG

@giraphql/plugin-dataloader

Version:

A GiraphQL plugin for attaching dataloader to object types

37 lines (36 loc) 1.26 kB
import DataLoader from 'dataloader'; import { createContextCache, isThenable } from '@giraphql/core'; export function rejectErrors(val) { if (isThenable(val)) { return val.then(rejectErrors); } return val.map((item) => (item instanceof Error ? Promise.reject(item) : item)); } export function loadAndSort(load, toKey) { if (!toKey) { return load; } return async (keys, context) => { var _a; const list = await load(keys, context); const map = new Map(); const results = new Array(); for (const val of list) { if (val instanceof Error) { throw val; } if (val != null) { map.set(toKey(val), val); } } for (let i = 0; i < list.length; i += 1) { results[i] = (_a = map.get(keys[i])) !== null && _a !== void 0 ? _a : null; } return results; }; } export function dataloaderGetter(loaderOptions, load, toKey, sort) { const loader = (sort ? loadAndSort(load, typeof sort === "function" ? sort : toKey) : load); return createContextCache((context) => new DataLoader((keys) => loader(keys, context), loaderOptions)); } //# sourceMappingURL=util.js.map