gqty
Version:
The No-GraphQL Client for TypeScript
81 lines (74 loc) • 2.45 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
const get = require('just-safe-get');
const set = require('just-safe-set');
require('../Utils/hash.js');
const object = require('../Utils/object.js');
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
const get__default = /*#__PURE__*/_interopDefault(get);
const set__default = /*#__PURE__*/_interopDefault(set);
function selectFields(accessor, fields = "*", recursionDepth = 1) {
if (accessor == null) return accessor;
if (Array.isArray(accessor)) {
return accessor.map(
(value) => selectFields(value, fields, recursionDepth)
);
} else if (!object.isObject(accessor)) {
return accessor;
} else {
Reflect.get(accessor, "__typename");
}
if (fields.length === 0) {
return {};
}
if (typeof fields === "string") {
if (recursionDepth > 0) {
const allAccessorKeys = Object.keys(accessor);
return allAccessorKeys.reduce((acum, fieldName) => {
const fieldValue = get__default["default"](accessor, fieldName);
if (Array.isArray(fieldValue)) {
set__default["default"](
acum,
fieldName,
fieldValue.map((value) => {
return selectFields(value, "*", recursionDepth - 1);
})
);
} else if (object.isObject(fieldValue)) {
set__default["default"](
acum,
fieldName,
selectFields(fieldValue, "*", recursionDepth - 1)
);
} else {
set__default["default"](acum, fieldName, fieldValue);
}
return acum;
}, {});
} else {
return null;
}
}
return fields.reduce((acum, fieldName) => {
if (typeof fieldName === "number") {
fieldName = fieldName.toString();
}
const fieldValue = get__default["default"](accessor, fieldName);
if (fieldValue === void 0) return acum;
if (Array.isArray(fieldValue)) {
set__default["default"](
acum,
fieldName,
fieldValue.map((value) => {
return selectFields(value, "*", recursionDepth);
})
);
} else if (object.isObject(fieldValue)) {
set__default["default"](acum, fieldName, selectFields(fieldValue, "*", recursionDepth));
} else {
set__default["default"](acum, fieldName, fieldValue);
}
return acum;
}, {});
}
exports.selectFields = selectFields;