@graphql-codegen/typescript-mongodb
Version:
GraphQL Code Generator plugin for generting a ready-to-use ORM types for MongoDB
31 lines (30 loc) • 900 B
JavaScript
import set from 'lodash/set.js';
import { indent } from '@graphql-codegen/visitor-plugin-common';
export class FieldsTree {
constructor() {
this._fields = {};
}
addField(path, type) {
if (type === undefined) {
throw new Error('Did not expect type to be undefined');
}
set(this._fields, path, type);
}
_getInnerField(root, level = 1) {
if (typeof root === 'string') {
return root;
}
const fields = Object.keys(root).map(fieldName => {
const fieldValue = root[fieldName];
return indent(`${fieldName}: ${this._getInnerField(fieldValue, level + 1)},`, level);
});
return level === 1
? fields.join('\n')
: `{
${fields.join('\n')}
${indent('}', level - 1)}`;
}
get string() {
return this._getInnerField(this._fields);
}
}