UNPKG

@omnigraph/json-schema

Version:

This package generates GraphQL Schema from JSON Schema and sample JSON request and responses. You can define your root field endpoints like below in your GraphQL Config for example;

69 lines (68 loc) 2.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getTypeResolverFromOutputTCs = void 0; const utils_1 = require("@graphql-tools/utils"); function getTypeResolverFromOutputTCs(possibleTypes, discriminatorField, statusCodeTypeNameMap) { return function resolveType(data) { if (data.__typename) { return data.__typename; } else if (discriminatorField != null && data[discriminatorField]) { return data[discriminatorField]; } if (data.$statusCode && statusCodeTypeNameMap) { const typeName = statusCodeTypeNameMap[data.$statusCode.toString()] || statusCodeTypeNameMap.default; if (typeName) { return typeName; } } // const validationErrors: Record<string, ErrorObject[]> = {}; const dataKeys = typeof data === 'object' ? Object.keys(data) // Remove metadata fields used to pass data .filter(property => !property.toString().startsWith('$')) : null; for (const possibleType of possibleTypes) { const typeName = possibleType.name; if (dataKeys != null) { const typeFields = Object.keys(possibleType.getFields()); if (dataKeys.length <= typeFields.length && dataKeys.every(property => typeFields.includes(property.toString()))) { return typeName; } } /* else { const validateFn = possibleType.extensions.validateWithJSONSchema as ValidateFunction; if (validateFn) { const isValid = validateFn(data); if (isValid) { return typeName; } validationErrors[typeName] = ajv.errors || validateFn.errors; } } */ } if (data.$response) { const error = (0, utils_1.createGraphQLError)(`HTTP Error: ${data.$statusCode}`, { extensions: { http: { status: data.$statusCode, headers: data.$response.header, }, request: { url: data.$url, method: data.$method, }, responseJson: data.$response, }, }); return error; } /* const error = new GraphQLError(`Received data doesn't met the union`, null, null, null, null, null, { validationErrors, }); return error; */ }; } exports.getTypeResolverFromOutputTCs = getTypeResolverFromOutputTCs;