UNPKG

@gqlts/runtime

Version:

Gqlts runtime client

95 lines 4.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.resolveConcreteTypes = void 0; exports.linkTypeMap = linkTypeMap; const tslib_1 = require("tslib"); const lodash_assign_1 = tslib_1.__importDefault(require("lodash.assign")); function linkTypeMap(typeMap) { const indexToName = (0, lodash_assign_1.default)({}, ...Object.keys(typeMap.types).map((k, i) => ({ [i]: k }))); // add the name value let intermediaryTypeMap = (0, lodash_assign_1.default)({}, ...Object.keys(typeMap.types || {}).map((k) => { const type = typeMap.types[k]; const fields = type || {}; // processFields(fields, indexToName) return { [k]: { name: k, // type scalar properties scalar: Object.keys(fields).filter((f) => { const [type] = fields[f] ?? []; if (!type && type !== 0) { return false; } return typeMap.scalars.includes(type); }), // fields with corresponding `type` and `args` fields: (0, lodash_assign_1.default)({}, ...Object.keys(fields).map((f) => { const [typeIndex, args] = fields[f] ?? []; if (!typeIndex && typeIndex !== 0) { return {}; } return { [f]: { // replace index with type name type: indexToName[typeIndex], args: (0, lodash_assign_1.default)({}, ...Object.keys(args ?? {}).map((k) => { if (!args || !args[k]) { return {}; } // if argTypeString == argTypeName, argTypeString is missing, need to read it const [argTypeName, argTypeString] = args[k] ?? []; if (!argTypeName && argTypeName !== 0) { return {}; } return { [k]: [indexToName[argTypeName], argTypeString || indexToName[argTypeName]], }; })), }, }; })), }, }; })); const res = (0, exports.resolveConcreteTypes)(intermediaryTypeMap); return res; } // replace typename with concrete type const resolveConcreteTypes = (linkedTypeMap) => { Object.keys(linkedTypeMap).forEach((typeNameFromKey) => { const type = linkedTypeMap[typeNameFromKey]; // type.name = typeNameFromKey if (!type?.fields) { return; } const fields = type.fields; Object.keys(fields).forEach((f) => { const field = fields[f]; if (field?.args) { const args = field.args; Object.keys(args).forEach((key) => { const arg = args[key]; if (arg) { const [typeName] = arg; if (typeof typeName === 'string') { if (!linkedTypeMap[typeName]) { linkedTypeMap[typeName] = { name: typeName }; } arg[0] = linkedTypeMap[typeName]; } } }); } const typeName = field?.type; if (field?.type && typeof typeName === 'string') { if (!linkedTypeMap[typeName]) { linkedTypeMap[typeName] = { name: typeName }; } field.type = linkedTypeMap[typeName]; } }); }); return linkedTypeMap; }; exports.resolveConcreteTypes = resolveConcreteTypes; //# sourceMappingURL=linkTypeMap.js.map