t-graphql
Version:
typed GraphQL - end-to-end type-safe GraphQL for TypeScript. Think tRPC, but GraphQL
149 lines • 6.49 kB
JavaScript
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
;