UNPKG

graphql-compose-mongoose

Version:

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

102 lines 4.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.prepareAliases = prepareAliases; exports.prepareAliasesReverse = prepareAliasesReverse; exports.replaceAliases = replaceAliases; exports.prepareNestedAliases = prepareNestedAliases; const graphql_compose_1 = require("graphql-compose"); function prepareAliases(model) { var _a; const aliases = ((_a = model === null || model === void 0 ? void 0 : model.schema) === null || _a === void 0 ? void 0 : _a.aliases) || {}; if (model.discriminators) { Object.keys(model.discriminators).forEach((subModelName) => { var _a; const subModel = model.discriminators[subModelName]; Object.assign(aliases, (_a = subModel === null || subModel === void 0 ? void 0 : subModel.schema) === null || _a === void 0 ? void 0 : _a.aliases); }); } if (Object.keys(aliases).length > 0) { return aliases; } return false; } function prepareAliasesReverse(schema) { const aliases = schema === null || schema === void 0 ? void 0 : schema.aliases; const keys = Object.keys(aliases); if (keys.length > 0) { const r = {}; keys.forEach((k) => { r[aliases[k]] = k; }); return r; } return false; } function replaceAliases(data, aliases) { if (aliases) { const res = Object.assign({}, data); Object.keys(data).forEach((key) => { if (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; } res[aliasValue || key] = (0, graphql_compose_1.isObject)(res[key]) ? replaceAliases(res[key], (0, graphql_compose_1.isObject)(alias) ? alias : undefined) : res[key]; if (aliasValue) { delete res[key]; } } }); return res; } return data; } function prepareNestedAliases(schema, preparedAliases = new Map()) { if (preparedAliases.has(schema)) { return preparedAliases.get(schema); } const aliases = {}; preparedAliases.set(schema, aliases); const discriminators = schema.discriminators; if (discriminators) { Object.keys(discriminators).forEach((discSchemaName) => { const discSchema = discriminators[discSchemaName]; const additionalAliases = prepareNestedAliases(discSchema, preparedAliases); Object.assign(aliases, additionalAliases); }); } Object.keys(schema.paths).forEach((path) => { var _a, _b; const field = schema.paths[path]; let fieldName = path; if ((_a = field === null || field === void 0 ? void 0 : field.options) === null || _a === void 0 ? void 0 : _a.alias) { fieldName = (_b = field === null || field === void 0 ? void 0 : field.options) === null || _b === void 0 ? void 0 : _b.alias; aliases[fieldName] = path; } if (field === null || field === void 0 ? void 0 : field.schema) { const nestedSchema = field === null || field === void 0 ? void 0 : field.schema; const nestedAliases = prepareNestedAliases(nestedSchema, preparedAliases); if (nestedAliases) { const topKey = aliases[fieldName]; if (topKey && typeof topKey === 'string') { aliases[fieldName] = { __selfAlias: topKey, }; } aliases[fieldName] = Object.assign(aliases[fieldName] || {}, nestedAliases); } } }); if (!Object.keys(aliases).length) { preparedAliases.set(schema, undefined); return undefined; } return aliases; } //# sourceMappingURL=aliases.js.map