UNPKG

graphql-compose-mongoose

Version:

Plugin for `graphql-compose` which derive a graphql types from a mongoose model.

74 lines 3.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.toMongoDottedObject = toMongoDottedObject; exports.toMongoFilterDottedObject = toMongoFilterDottedObject; const mongoose_1 = require("mongoose"); const graphql_compose_1 = require("graphql-compose"); const primitives = [mongoose_1.Types.ObjectId, Date, String, Number, Boolean, mongoose_1.Types.Decimal128]; const operatorsWithExpression = ['$or', '$and', '$not', '$nor']; function isPrimitive(value) { return primitives.some((p) => value instanceof p); } function _toMongoDottedObject(obj, aliases, target = {}, prefix = '', collapseArray = false) { if ((!(0, graphql_compose_1.isObject)(obj) && !Array.isArray(obj)) || isPrimitive(obj)) { if (prefix) target[prefix] = obj; return obj; } const objKeys = Object.keys(obj); objKeys.forEach((key) => { let newKey; if (aliases && (aliases === null || aliases === void 0 ? void 0 : aliases[key])) { const alias = aliases === null || aliases === void 0 ? void 0 : aliases[key]; let aliasValue; if (typeof alias === 'string') { aliasValue = alias; } else if ((0, graphql_compose_1.isObject)(alias)) { aliasValue = alias === null || alias === void 0 ? void 0 : alias.__selfAlias; } newKey = aliasValue || key; } else { newKey = key; } if (prefix) { newKey = `${prefix}.${newKey}`; } if (key.startsWith('$')) { let val; if (operatorsWithExpression.includes(key)) { val = Array.isArray(obj[key]) ? obj[key].map((v) => _toMongoDottedObject(v, aliases, {}, '', collapseArray)) : _toMongoDottedObject(obj[key], aliases, {}, '', collapseArray); } else { val = obj[key]; } if (!prefix) { target[key] = val; } else { target[prefix] = Object.assign(Object.assign({}, target[prefix]), { [key]: val }); } } else if (Object(obj[key]) === obj[key] && !isPrimitive(obj[key])) { const subAliases = aliases === null || aliases === void 0 ? void 0 : aliases[key]; _toMongoDottedObject(obj[key], (0, graphql_compose_1.isObject)(subAliases) ? subAliases : undefined, target, Array.isArray(obj) && collapseArray ? prefix : newKey, collapseArray); } else { target[newKey] = obj[key]; } }); if (objKeys.length === 0) { target[prefix] = obj; } return target; } function toMongoDottedObject(obj, aliases, target = {}) { return _toMongoDottedObject(obj, aliases, target, ''); } function toMongoFilterDottedObject(obj, aliases, target = {}, prefix = '') { return _toMongoDottedObject(obj, aliases, target, prefix, true); } //# sourceMappingURL=toMongoDottedObject.js.map