@gqlts/runtime
Version:
Gqlts runtime client
95 lines • 4.07 kB
JavaScript
;
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