UNPKG

@unly/ra-data-graphql-prisma

Version:
182 lines 8.28 kB
"use strict"; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; var __spreadArrays = (this && this.__spreadArrays) || function () { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); var graphql_1 = require("graphql"); var ra_core_1 = require("ra-core"); var ra_data_graphql_1 = require("ra-data-graphql"); var getFinalType_1 = __importDefault(require("./utils/getFinalType")); var gqlTypes = __importStar(require("./utils/gqlTypes")); var isList_1 = __importDefault(require("./utils/isList")); var isRequired_1 = __importDefault(require("./utils/isRequired")); exports.buildFields = function (introspectionResults) { return function (fields) { return fields.reduce(function (acc, field) { var type = getFinalType_1.default(field.type); if (type.name.startsWith('_')) { return acc; } if (type.kind !== graphql_1.TypeKind.OBJECT) { return __spreadArrays(acc, [gqlTypes.field(gqlTypes.name(field.name))]); } var linkedResource = introspectionResults.resources.find(function (r) { return r.type.name === type.name; }); if (linkedResource) { return __spreadArrays(acc, [ gqlTypes.field(gqlTypes.name(field.name), { selectionSet: gqlTypes.selectionSet([ gqlTypes.field(gqlTypes.name('id')), ]), }), ]); } var linkedType = introspectionResults.types.find(function (t) { return t.name === type.name; }); if (linkedType) { return __spreadArrays(acc, [ gqlTypes.field(gqlTypes.name(field.name), { selectionSet: gqlTypes.selectionSet(exports.buildFields(introspectionResults)(linkedType.fields)), }), ]); } return acc; }, []); }; }; exports.getArgType = function (arg) { var type = getFinalType_1.default(arg.type); var required = isRequired_1.default(arg.type); var list = isList_1.default(arg.type); if (list) { if (required) { return gqlTypes.listType(gqlTypes.nonNullType(gqlTypes.namedType(gqlTypes.name(type.name)))); } return gqlTypes.listType(gqlTypes.namedType(gqlTypes.name(type.name))); } if (required) { return gqlTypes.nonNullType(gqlTypes.namedType(gqlTypes.name(type.name))); } return gqlTypes.namedType(gqlTypes.name(type.name)); }; exports.buildArgs = function (query, variables) { if (variables === void 0) { variables = {}; } if (query.args.length === 0) { return []; } var validVariables = Object.keys(variables).filter(function (k) { return typeof variables[k] !== 'undefined'; }); return query.args .filter(function (arg) { return validVariables.includes(arg.name); }) .reduce(function (acc, arg) { return __spreadArrays(acc, [ gqlTypes.argument(gqlTypes.name(arg.name), gqlTypes.variable(gqlTypes.name(arg.name))), ]); }, []); }; exports.buildApolloArgs = function (query, variables) { if (variables === void 0) { variables = {}; } if (query.args.length === 0) { return []; } var validVariables = Object.keys(variables).filter(function (k) { return typeof variables[k] !== 'undefined'; }); return query.args .filter(function (arg) { return validVariables.includes(arg.name); }) .reduce(function (acc, arg) { return __spreadArrays(acc, [ gqlTypes.variableDefinition(gqlTypes.variable(gqlTypes.name(arg.name)), exports.getArgType(arg)), ]); }, []); }; var buildFieldsFromFragment = function (fragment, resourceName, fetchType) { var parsedFragment = {}; if (typeof fragment === 'object' && fragment.kind && fragment.kind === 'Document') { parsedFragment = fragment; } if (typeof fragment === 'string') { if (!fragment.startsWith('fragment')) { fragment = "fragment tmp on " + resourceName + " " + fragment; } try { parsedFragment = graphql_1.parse(fragment); } catch (e) { throw new Error("Invalid fragment given for resource '" + resourceName + "' and fetchType '" + fetchType + "' (" + e.message + ")."); } } return parsedFragment.definitions[0].selectionSet.selections; }; exports.default = (function (introspectionResults) { return function (resource, aorFetchType, queryType, variables, fragment) { var orderBy = variables.orderBy, skip = variables.skip, first = variables.first, countVariables = __rest(variables, ["orderBy", "skip", "first"]); var apolloArgs = exports.buildApolloArgs(queryType, variables); var args = exports.buildArgs(queryType, variables); var countArgs = exports.buildArgs(queryType, countVariables); var fields = !!fragment ? buildFieldsFromFragment(fragment, resource.type.name, aorFetchType) : exports.buildFields(introspectionResults)(resource.type.fields); if (aorFetchType === ra_core_1.GET_LIST || aorFetchType === ra_core_1.GET_MANY || aorFetchType === ra_core_1.GET_MANY_REFERENCE) { return gqlTypes.document([ gqlTypes.operationDefinition('query', gqlTypes.selectionSet([ gqlTypes.field(gqlTypes.name(queryType.name), { alias: gqlTypes.name('items'), arguments: args, selectionSet: gqlTypes.selectionSet(fields), }), gqlTypes.field(gqlTypes.name(queryType.name + "Connection"), { alias: gqlTypes.name('total'), arguments: countArgs, selectionSet: gqlTypes.selectionSet([ gqlTypes.field(gqlTypes.name('aggregate'), { selectionSet: gqlTypes.selectionSet([ gqlTypes.field(gqlTypes.name('count')), ]), }), ]), }), ]), gqlTypes.name(queryType.name), apolloArgs), ]); } if (aorFetchType === ra_core_1.DELETE) { return gqlTypes.document([ gqlTypes.operationDefinition('mutation', gqlTypes.selectionSet([ gqlTypes.field(gqlTypes.name(queryType.name), { alias: gqlTypes.name('data'), arguments: args, selectionSet: gqlTypes.selectionSet([ gqlTypes.field(gqlTypes.name('id')), ]), }), ]), gqlTypes.name(queryType.name), apolloArgs), ]); } return gqlTypes.document([ gqlTypes.operationDefinition(ra_data_graphql_1.QUERY_TYPES.includes(aorFetchType) ? 'query' : 'mutation', gqlTypes.selectionSet([ gqlTypes.field(gqlTypes.name(queryType.name), { alias: gqlTypes.name('data'), arguments: args, selectionSet: gqlTypes.selectionSet(fields), }), ]), gqlTypes.name(queryType.name), apolloArgs), ]); }; }); //# sourceMappingURL=buildGqlQuery.js.map