@@ -27042,6 +27042,9 @@ var Schema = /** @class */ (function () {
27042
27042
return (Schema.getTypeNameOfField(field).endsWith('TypeConnection'));
27043
27043
};
27044
27044
Schema.getTypeNameOfField = function (field) {
27045
+ if (field.type.kind === 'LIST') {
27046
+ return "[" + field.type.ofType.name + "]";
27047
+ }
27045
27048
var name = field.type.name ||
27046
27049
field.type.ofType.name ||
27047
27050
field.type.ofType.ofType.name ||
@@ -27089,7 +27092,7 @@ var __generator$1 = (undefined && undefined.__generator) || function (thisArg, b
27089
27092
}
27090
27093
};
27091
27094
var inflection$2 = require('inflection');
27092
- var introspectionQuery = "\nquery Introspection {\n __schema {\n types {\n name\n description\n\n fields(includeDeprecated: true) {\n name\n description\n args {\n name\n description\n type {\n name\n kind\n\n ofType {\n kind\n\n name\n ofType {\n kind\n name\n\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n\n type {\n name\n kind\n\n ofType {\n kind\n\n name\n ofType {\n kind\n name\n\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n\n inputFields {\n name\n description\n\n type {\n name\n kind\n\n ofType {\n kind\n\n name\n ofType {\n kind\n name\n\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n }\n }\n}\n";
27095
+ var introspectionQuery = "\nquery Introspection {\n __schema {\n types {\n name\n description\n fields(includeDeprecated: true) {\n name\n description\n args {\n name\n description\n type {\n name\n kind\n\n ofType {\n kind\n\n name\n ofType {\n kind\n name\n\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n\n type {\n name\n kind\n\n ofType {\n kind\n\n name\n ofType {\n kind\n name\n\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n\n inputFields {\n name\n description\n type {\n name\n kind\n\n ofType {\n kind\n\n name\n ofType {\n kind\n name\n\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n }\n }\n}\n";
27093
27096
/**
27094
27097
* Internal context of the plugin. This class contains all information, the models, database, logger and so on.
27095
27098
*
@@ -27275,11 +27278,13 @@ var QueryBuilder = /** @class */ (function () {
27275
27278
if (allowIdFields === void 0) { allowIdFields = false; }
27276
27279
var context = Context.getInstance();
27277
27280
model = context.getModel(model);
27278
- var params = this.buildArguments(model, args, false, filter, allowIdFields);
27281
+ name = name ? name : model.pluralName;
27282
+ var field = context.schema.getMutation(name, true) || context.schema.getQuery(name, true);
27283
+ var params = this.buildArguments(model, args, false, filter, allowIdFields, field);
27279
27284
path = path.length === 0 ? [model.singularName] : path;
27280
27285
var fields = "\n " + model.getQueryFields().join(' ') + "\n " + this.buildRelationsQuery(model, path) + "\n ";
27281
27286
if (multiple) {
27282
- var header = "" + ( name ? name : model.pluralName) + params;
27287
+ var header = "" + name + params;
27283
27288
if (context.connectionQueryMode === 'nodes') {
27284
27289
return "\n " + header + " {\n nodes {\n " + fields + "\n }\n }\n ";
27285
27290
}
@@ -27325,8 +27330,10 @@ var QueryBuilder = /** @class */ (function () {
27325
27330
// name
27326
27331
if (!name)
27327
27332
name = (multiple ? model.pluralName : model.singularName);
27333
+ // field
27334
+ var field = context.schema.getMutation(name, true) || context.schema.getQuery(name, true);
27328
27335
// build query
27329
- var query = type + " " + upcaseFirstLetter(name) + this.buildArguments(model, args, true, filter) + " {\n" +
27336
+ var query = type + " " + upcaseFirstLetter(name) + this.buildArguments(model, args, true, filter, true, field ) + " {\n" +
27330
27337
(" " + this.buildField(model, multiple, args, [], name, filter, true) + "\n") +
27331
27338
"}";
27332
27339
return src(query);
@@ -27353,13 +27360,15 @@ var QueryBuilder = /** @class */ (function () {
27353
27360
* @param {boolean} signature When true, then this method generates a query signature instead of key/value pairs
27354
27361
* @param filter
27355
27362
* @param {boolean} allowIdFields If true, ID fields will be included in the arguments list
27363
+ * @param {GraphQLField} field Optional. The GraphQL mutation or query field
27356
27364
* @returns {String}
27357
27365
*/
27358
- QueryBuilder.buildArguments = function (model, args, signature, filter, allowIdFields) {
27366
+ QueryBuilder.buildArguments = function (model, args, signature, filter, allowIdFields, field ) {
27359
27367
var _this = this;
27360
27368
if (signature === void 0) { signature = false; }
27361
27369
if (filter === void 0) { filter = false; }
27362
27370
if (allowIdFields === void 0) { allowIdFields = true; }
27371
+ if (field === void 0) { field = null; }
27363
27372
if (args === undefined)
27364
27373
return '';
27365
27374
var returnValue = '';
@@ -27369,17 +27378,24 @@ var QueryBuilder = /** @class */ (function () {
27369
27378
var value = args[key];
27370
27379
var isForeignKey = model.skipField(key);
27371
27380
var skipFieldDueId = (key === 'id' || isForeignKey) && !allowIdFields;
27381
+ var schema = Context.getInstance().schema;
27382
+ var type = schema.getType(model.singularName + (filter ? 'Filter' : ''));
27383
+ var schemaField = (filter ? type.inputFields : type.fields).find(function (f) { return f.name === key; });
27384
+ var isConnectionField = schemaField && Schema.getTypeNameOfField(schemaField).endsWith('TypeConnection');
27372
27385
// Ignore null fields, ids and connections
27373
- if (value && !(value instanceof Array || skipFieldDueId) ) {
27386
+ if (value && !skipFieldDueId && !isConnectionField ) {
27374
27387
var typeOrValue = '';
27375
27388
if (signature) {
27376
- var schema = Context.getInstance().schema;
27377
- var type = schema.getType(model.singularName + (filter ? 'Filter' : ''));
27378
- var schemaField = (filter ? type.inputFields : type.fields).find(function (f) { return f.name === key; });
27379
27389
if (undefined(value) && value.__type) {
27380
27390
// Case 2 (User!)
27381
27391
typeOrValue = value.__type + 'Input!';
27382
27392
}
27393
+ else if (undefined(value) && field) {
27394
+ var arg = field.args.find(function (f) { return f.name === key; });
27395
+ if (!arg)
27396
+ throw new Error("A argument is of type array but it's not possible to determine the type");
27397
+ typeOrValue = Schema.getTypeNameOfField(arg) + '!';
27398
+ }
27383
27399
else if (schemaField && Schema.getTypeNameOfField(schemaField)) {
27384
27400
// Case 1, 3 and 4
27385
27401
typeOrValue = Schema.getTypeNameOfField(schemaField) + '!';
0 commit comments