UNPKG

@giraphql/plugin-dataloader

Version:

A GiraphQL plugin for attaching dataloader to object types

45 lines 1.68 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.dataloaderGetter = exports.loadAndSort = exports.rejectErrors = void 0; const dataloader_1 = __importDefault(require("dataloader")); const core_1 = require("@giraphql/core"); function rejectErrors(val) { if ((0, core_1.isThenable)(val)) { return val.then(rejectErrors); } return val.map((item) => (item instanceof Error ? Promise.reject(item) : item)); } exports.rejectErrors = rejectErrors; 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; }; } exports.loadAndSort = loadAndSort; function dataloaderGetter(loaderOptions, load, toKey, sort) { const loader = (sort ? loadAndSort(load, typeof sort === 'function' ? sort : toKey) : load); return (0, core_1.createContextCache)((context) => new dataloader_1.default((keys) => loader(keys, context), loaderOptions)); } exports.dataloaderGetter = dataloaderGetter; //# sourceMappingURL=util.js.map