graphql-compose
Version:
GraphQL schema builder from different data sources with middleware extensions.
76 lines • 2.93 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.getSortMethodFromOption = exports.fnPrintSortByType = exports.printSortAlpha = void 0;
const ScalarTypeComposer_1 = require("../ScalarTypeComposer");
const EnumTypeComposer_1 = require("../EnumTypeComposer");
const InterfaceTypeComposer_1 = require("../InterfaceTypeComposer");
const InputTypeComposer_1 = require("../InputTypeComposer");
const ObjectTypeComposer_1 = require("../ObjectTypeComposer");
const UnionTypeComposer_1 = require("../UnionTypeComposer");
const is_1 = require("./is");
const rootOrderDefault = ['Query', 'Mutation', 'Subscription'];
function printSortAlpha(tc1, tc2) {
const comp = tc1.getTypeName().localeCompare(tc2.getTypeName());
return comp;
}
exports.printSortAlpha = printSortAlpha;
function sortGetPositionOfType(tc, rootTypes = []) {
switch (true) {
case tc instanceof ScalarTypeComposer_1.ScalarTypeComposer:
return [2];
case tc instanceof EnumTypeComposer_1.EnumTypeComposer:
return [3];
case tc instanceof UnionTypeComposer_1.UnionTypeComposer:
return [4];
case tc instanceof InterfaceTypeComposer_1.InterfaceTypeComposer:
return [5];
case tc instanceof ObjectTypeComposer_1.ObjectTypeComposer:
const rootPos = rootTypes.indexOf(tc.getTypeName());
if (rootPos !== -1) {
return [1, rootPos];
}
else {
return [6];
}
case tc instanceof InputTypeComposer_1.InputTypeComposer:
return [7];
}
throw new Error(`Unknown kind of type ${tc.getTypeName()}`);
}
function comparePositionLists(p1, p2) {
const common = Math.min(p1.length, p2.length);
for (let i = 0; i < common; i++) {
if (p1[i] < p2[i])
return -1;
if (p1[i] > p2[i])
return +1;
}
return 0;
}
function fnPrintSortByType(opt) {
const rootTypes = (opt === null || opt === void 0 ? void 0 : opt.include) || rootOrderDefault;
return function (tc1, tc2) {
const pos1 = sortGetPositionOfType(tc1, rootTypes);
const pos2 = sortGetPositionOfType(tc2, rootTypes);
const diff = comparePositionLists(pos1, pos2);
return diff || printSortAlpha(tc1, tc2);
};
}
exports.fnPrintSortByType = fnPrintSortByType;
function getSortMethodFromOption(sortOption, printFilter) {
if (sortOption === undefined ||
sortOption === null ||
sortOption === true ||
sortOption === 'ALPHABETIC') {
return printSortAlpha;
}
else if (sortOption === 'GROUP_BY_TYPE') {
return fnPrintSortByType(printFilter);
}
else if ((0, is_1.isFunction)(sortOption)) {
return sortOption;
}
return;
}
exports.getSortMethodFromOption = getSortMethodFromOption;
//# sourceMappingURL=schemaPrinterSortTypes.js.map
;