graphql-composer-typeorm
Version:
TypeORM plugin for graphql-composer-decorators
94 lines • 4.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ArgsFactory = exports.NumberArgument = exports.StringArgument = exports.Orders = void 0;
const graphql_composer_decorators_1 = require("graphql-composer-decorators");
const graphql_composer_1 = require("graphql-composer");
const Parser_1 = require("./Parser");
var Orders;
(function (Orders) {
Orders["ASC"] = "ASC";
Orders["DESC"] = "DESC";
})(Orders = exports.Orders || (exports.Orders = {}));
class StringArgument {
}
exports.StringArgument = StringArgument;
class NumberArgument {
}
exports.NumberArgument = NumberArgument;
class ArgsFactory {
constructor() { }
static get types() {
return [
this.stringArgument,
this.numberArgument,
this.orderEnum,
...this._types.map((t) => t[1]),
];
}
static convertFieldIntoArgField(field) {
const isArray = Array.isArray(field.type);
const newField = graphql_composer_1.InputField.create(field.name, graphql_composer_1.N(field.type));
const type = Parser_1.Parser.unwrapModifiedType(field.type);
switch (type) {
case String:
newField.setType(graphql_composer_1.N(ArgsFactory.stringArgument));
break;
case Number:
newField.setType(graphql_composer_1.N(ArgsFactory.numberArgument));
break;
}
if (type instanceof graphql_composer_1.InputType) {
const t = ArgsFactory._types.find((t) => t[0].name === type.name);
if (t) {
newField.setType(graphql_composer_1.N(t[1]));
}
else {
const argsType = ArgsFactory.createArgs(type.classType, `${type.classType.name}Args`);
newField.setType(graphql_composer_1.N(argsType));
}
}
if (isArray) {
newField.setType(graphql_composer_1.N([newField.type]));
}
return newField;
}
static createArgs(classType, name) {
const input = graphql_composer_decorators_1.MetadataStorage.instance.classTypeMap.get(classType).input;
if (!input) {
return;
}
const existing = this._types.find((t) => {
return t[1].name === name;
});
if (existing) {
return existing[1];
}
const newInput = input.copy().setName(name).setClassType(classType);
ArgsFactory._types.push([input, newInput]);
newInput.setFields(...input.fields.map(ArgsFactory.convertFieldIntoArgField));
return newInput;
}
static create(classType, name) {
const finalName = name || `${classType.name}Args`;
const t = () => {
const newInput = this.createArgs(classType, finalName);
const args = graphql_composer_1.InputType.create("")
.addFields(graphql_composer_1.InputField.create("where", graphql_composer_1.N(newInput)), graphql_composer_1.InputField.create("order", graphql_composer_1.N([ArgsFactory.orderEnum])), graphql_composer_1.InputField.create("limit", graphql_composer_1.N(Number)), graphql_composer_1.InputField.create("skip", graphql_composer_1.N(Number)))
.setExtensions({
decoratorInfos: {
params: {
hidden: true,
},
},
});
return args;
};
return t;
}
}
exports.ArgsFactory = ArgsFactory;
ArgsFactory._types = [];
ArgsFactory.stringArgument = graphql_composer_1.InputType.create(StringArgument).addFields(graphql_composer_1.InputField.create("eq", graphql_composer_1.N(String)), graphql_composer_1.InputField.create("like", graphql_composer_1.N(String)));
ArgsFactory.numberArgument = graphql_composer_1.InputType.create(NumberArgument).addFields(graphql_composer_1.InputField.create("eq", graphql_composer_1.N(Number)), graphql_composer_1.InputField.create("gt", graphql_composer_1.N(Number)), graphql_composer_1.InputField.create("gte", graphql_composer_1.N(Number)), graphql_composer_1.InputField.create("lt", graphql_composer_1.N(Number)), graphql_composer_1.InputField.create("lte", graphql_composer_1.N(Number)));
ArgsFactory.orderEnum = graphql_composer_1.EnumType.create("Orders", Orders);
//# sourceMappingURL=ArgsFactory.js.map