@grapi/server
Version:
Grapi Schema Generator For GraphQL Server
74 lines (73 loc) • 2.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MutationFactory = exports.PluginMutation = void 0;
const __1 = require("..");
const lodash_1 = require("../lodash");
const mutationWithoutArrayField = (originPayload) => {
const payload = { ...originPayload };
return {
getData: () => payload,
addField: (name, value) => { payload[name] = value; },
getArrayOperations: () => [],
};
};
class PluginMutation {
payload;
arrayFields;
constructor(payload, arrayFields) {
this.payload = { ...payload };
this.arrayFields = arrayFields;
}
getData = () => {
return (0, lodash_1.omit)(this.payload, this.arrayFields);
};
addField = (name, value) => {
this.payload[name] = value;
};
getArrayOperations = () => {
const arrayFieldData = (0, lodash_1.pick)(this.payload, this.arrayFields);
const operations = [];
(0, lodash_1.forEach)(arrayFieldData, (operationValue, fieldName) => {
const setValue = operationValue[__1.ArrayOperator.set];
if (setValue) {
operations.push({
fieldName,
operator: __1.ArrayOperator.set,
value: setValue,
});
}
const addValue = operationValue[__1.ArrayOperator.add];
if (addValue) {
operations.push({
fieldName,
operator: __1.ArrayOperator.add,
value: addValue,
});
}
const removeValue = operationValue[__1.ArrayOperator.remove];
if (removeValue) {
operations.push({
fieldName,
operator: __1.ArrayOperator.remove,
value: removeValue,
});
}
});
return operations;
};
}
exports.PluginMutation = PluginMutation;
class MutationFactory {
arrayFieldMarks = {};
markArrayField = (field) => {
this.arrayFieldMarks[field] = true;
};
createMutation = (payload) => {
if ((0, lodash_1.isEmpty)(this.arrayFieldMarks)) {
return mutationWithoutArrayField(payload);
}
const arrayFields = Object.keys(this.arrayFieldMarks);
return new PluginMutation(payload, arrayFields);
};
}
exports.MutationFactory = MutationFactory;