graphql-dataloader-mongoose
Version:
graphql dataloader generator based on mongoose model
56 lines (55 loc) • 2.19 kB
JavaScript
;
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;