UNPKG

graphql-dataloader-mongoose

Version:

graphql dataloader generator based on mongoose model

56 lines (55 loc) 2.19 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.MongooseDataloaderFactory = exports.MongooseDataloader = void 0; /** * graphql-dataloader-mongoose * Copyright (c) 2019-present NAVER Corp. * MIT license */ var lodash_1 = __importDefault(require("lodash")); var dataloader_1 = __importDefault(require("dataloader")); var MongooseDataloader = /** @class */ (function () { function MongooseDataloader(mongooseModel) { this.mongooseModel = mongooseModel; this.loaderMap = new Map(); } MongooseDataloader.prototype.dataloader = function (key) { var loader = this.loaderMap.get(key); if (loader) return loader; var newLoader = this.createLoader(key); this.loaderMap.set(key, newLoader); return newLoader; }; MongooseDataloader.prototype.createLoader = function (key) { var _this = this; return new dataloader_1.default(function (ids) { var _a; return _this.mongooseModel.find((_a = {}, _a[key] = { $in: ids }, _a)).then(function (list) { var listByKey = lodash_1.default.keyBy(list, key); return ids.map(function (id) { return lodash_1.default.get(listByKey, id, null); }); }); }); }; return MongooseDataloader; }()); exports.MongooseDataloader = MongooseDataloader; var MongooseDataloaderFactory = /** @class */ (function () { function MongooseDataloaderFactory() { this.loaderMap = new Map(); } MongooseDataloaderFactory.prototype.mongooseLoader = function (model) { var modelKey = model.modelName; var mongooseLoader = this.loaderMap.get(modelKey); if (mongooseLoader) return mongooseLoader; var newMongooseDataloader = new MongooseDataloader(model); this.loaderMap.set(modelKey, newMongooseDataloader); return newMongooseDataloader; }; return MongooseDataloaderFactory; }()); exports.MongooseDataloaderFactory = MongooseDataloaderFactory;