graphql-compose-mongoose
Version:
Plugin for `graphql-compose` which derive a graphql types from a mongoose model.
74 lines • 3.04 kB
JavaScript
;
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