@giraphql/plugin-dataloader
Version:
A GiraphQL plugin for attaching dataloader to object types
45 lines • 1.68 kB
JavaScript
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
;