UNPKG

t-graphql

Version:

typed GraphQL - end-to-end type-safe GraphQL for TypeScript. Think tRPC, but GraphQL

149 lines 6.49 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateQueryString = generateQueryString; exports.generateParamInputString = generateParamInputString; var assert_never_1 = __importDefault(require("assert-never")); var EnumValueType_1 = require("../EnumValueType"); var InputObjectType_1 = require("../inputs/InputObjectType"); var VariableInput_1 = require("../inputs/VariableInput"); var ObjectQueryType_1 = require("../queries/ObjectQueryType"); var ScalarQueryType_1 = require("../queries/ScalarQueryType"); var UnionQueryType_1 = require("../queries/UnionQueryType"); var schema_generator_1 = require("./schema-generator"); function generateQueryString(queryType) { var _a = generateQueryTypeString(queryType), hoisted = _a.hoisted, inline = _a.inline; return __spreadArray([ joinParts(' ', [ queryType.opType, joinParts('', [queryType.name, generateQueryVariableListString(queryType)]), inline, ]) ], Object.values(hoisted), true).join('\n\n'); } function generateQueryVariableListString(queryType) { var variableEntries = Object.entries(queryType.variables); if (variableEntries.length === 0) { return ''; } return [ '(', variableEntries .map(function (_a) { var key = _a[0], fieldDesc = _a[1]; return "$".concat(key, ": ").concat((0, schema_generator_1.generateSchemaPart)(fieldDesc.type).inline).concat(fieldDesc.optional ? '' : '!').concat(typeof fieldDesc.defaultValue === 'undefined' ? '' : ' = ' + (0, schema_generator_1.generateParamValue)(fieldDesc.defaultValue)); }) .join(', '), ')', ].join(''); } function generateParamInputString(type) { if (type instanceof EnumValueType_1.EnumValueType || type instanceof InputObjectType_1.InputObjectType) { return (0, schema_generator_1.generateSchemaPart)(type).inline; } if (type instanceof VariableInput_1.VariableInput) { return "$".concat(type.name); } if (typeof type === 'string') { return "\"".concat(String(type).replace(/"/g, '\\"'), "\""); } if (typeof type === 'number') { return String(type); } if (typeof type === 'boolean') { return String(type); } (0, assert_never_1.default)(type); } function generateQueryFieldParamInputListString(paramInputs) { var paramInputEntries = Object.entries(paramInputs); if (paramInputEntries.length === 0) { return ''; } return [ '(', paramInputEntries .map(function (_a) { var key = _a[0], fieldDesc = _a[1]; return "".concat(key, ": ").concat(fieldDesc instanceof VariableInput_1.VariableInput ? "$".concat(fieldDesc.name) : generateParamInputString(fieldDesc)); }) .join(', '), ')', ].join(''); } function generateQueryTypeString(queryType) { if (Array.isArray(queryType)) { return generateQueryTypeString(queryType[0]); } if (queryType instanceof UnionQueryType_1.UnionQueryType) { var hoisted_1 = {}; var unionCases = Object.entries(queryType.queries).map(function (_a) { var typename = _a[0], subqueryType = _a[1]; var _b = generateQueryTypeString(subqueryType), hoistedParts = _b.hoisted, inline = _b.inline; Object.assign(hoisted_1, hoistedParts); return ["... on ".concat(typename), inline.trim()].join(' '); }); return { hoisted: hoisted_1, inline: __spreadArray(__spreadArray(['{'], unionCases.map(function (unionCase) { return unionCase.replace(/^/gm, ' '); }), true), ['}'], false).join('\n') }; } if (queryType instanceof ObjectQueryType_1.ObjectQueryType) { return generateObjectQueryTypeString(queryType); } if (queryType instanceof ScalarQueryType_1.ScalarQueryType) { return { hoisted: {}, inline: '' }; } throw new Error('Unknown query'); } function generateQueryFragmentTypeString(fragmentType) { var _a; var _b = generateObjectQueryTypeString(fragmentType.query), hoisted = _b.hoisted, inline = _b.inline; return { hoisted: __assign(__assign({}, hoisted), (_a = {}, _a[fragmentType.name] = ['fragment', fragmentType.name, 'on', fragmentType.query.resolverType.typename, inline].join(' '), _a)), inline: "...".concat(fragmentType.name), }; } function generateObjectQueryTypeString(queryType) { var hoisted = {}; var fragments = queryType.fragments.map(function (fragment) { var _a = generateQueryFragmentTypeString(fragment), hoistedParts = _a.hoisted, inline = _a.inline; Object.assign(hoisted, hoistedParts); return inline; }); var fields = Object.entries(queryType.schema).map(function (_a) { var key = _a[0], subqueryType = _a[1]; var _b = generateQueryTypeString(subqueryType.query), hoistedParts = _b.hoisted, inline = _b.inline; Object.assign(hoisted, hoistedParts); return "".concat(key).concat(generateQueryFieldParamInputListString(subqueryType.paramInputs), " ").concat(inline .replace(/^/gm, ' ') .trim()).trim(); }); return { hoisted: hoisted, inline: __spreadArray(__spreadArray(__spreadArray(['{'], fragments, true), fields.map(function (key) { return " ".concat(key); }), true), ['}'], false).join('\n'), }; } function joinParts(separator, parts) { return parts.filter(Boolean).join(separator); } //# sourceMappingURL=query-generator.js.map