@aws-amplify/graphql-model-transformer
Version:
Amplify graphql @model transformer
129 lines • 6.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeMutationConditionInput = exports.makeCreateInputField = exports.makeDeleteInputField = exports.makeUpdateInputField = void 0;
const graphql_transformer_common_1 = require("graphql-transformer-common");
const graphql_transformer_core_1 = require("@aws-amplify/graphql-transformer-core");
const common_1 = require("./common");
const makeUpdateInputField = (obj, modelDirectiveConfig, knownModelTypes, document, isSyncEnabled) => {
var _a;
const objectWrapped = new graphql_transformer_core_1.ObjectDefinitionWrapper(obj);
const typeName = objectWrapped.name;
const name = (0, graphql_transformer_common_1.toPascalCase)(['Update', typeName, 'Input']);
const hasIdField = objectWrapped.hasField('id');
const fieldsToRemove = objectWrapped
.fields.filter((field) => {
if (knownModelTypes.has(field.getTypeName())) {
return true;
}
return false;
})
.map((field) => field.name);
const objectTypeDefinition = {
...obj,
fields: (_a = obj.fields) === null || _a === void 0 ? void 0 : _a.filter((f) => !fieldsToRemove.includes(f.name.value)),
};
const input = graphql_transformer_core_1.InputObjectDefinitionWrapper.fromObject(name, objectTypeDefinition, document);
input.fields.forEach((f) => f.makeNullable());
if (!hasIdField) {
input.addField(graphql_transformer_core_1.InputFieldWrapper.create('id', 'ID', false));
}
else {
const idField = input.fields.find((f) => f.name === 'id');
if (idField) {
idField.makeNonNullable();
}
}
Object.values((modelDirectiveConfig === null || modelDirectiveConfig === void 0 ? void 0 : modelDirectiveConfig.timestamps) || {}).forEach((timeStampFieldName) => {
if (input.hasField(timeStampFieldName)) {
const timestampField = input.getField(timeStampFieldName);
if (['String', 'AWSDateTime'].includes(timestampField.getTypeName())) {
timestampField.makeNullable();
}
}
});
if (isSyncEnabled) {
input.addField(graphql_transformer_core_1.InputFieldWrapper.create('_version', 'Int', true));
}
return input.serialize();
};
exports.makeUpdateInputField = makeUpdateInputField;
const makeDeleteInputField = (type, isSyncEnabled) => {
const name = (0, graphql_transformer_common_1.toPascalCase)(['Delete', type.name.value, 'input']);
const inputField = graphql_transformer_core_1.InputObjectDefinitionWrapper.create(name);
const idField = graphql_transformer_core_1.InputFieldWrapper.create('id', 'ID', false, false);
inputField.addField(idField);
if (isSyncEnabled) {
inputField.addField(graphql_transformer_core_1.InputFieldWrapper.create('_version', 'Int', true));
}
return inputField.serialize();
};
exports.makeDeleteInputField = makeDeleteInputField;
const makeCreateInputField = (obj, modelDirectiveConfig, knownModelTypes, document, isSyncEnabled) => {
var _a;
const objectWrapped = new graphql_transformer_core_1.ObjectDefinitionWrapper(obj);
const typeName = objectWrapped.name;
const name = graphql_transformer_common_1.ModelResourceIDs.ModelCreateInputObjectName(typeName);
const idFieldName = 'id';
const hasIdField = objectWrapped.hasField(idFieldName);
let shouldAutogenerateIdField = false;
if (hasIdField) {
const idField = objectWrapped.getField(idFieldName);
const idBaseType = (0, graphql_transformer_common_1.getBaseType)(idField.type);
shouldAutogenerateIdField = idBaseType === 'ID' || idBaseType === 'String';
}
const fieldsToRemove = objectWrapped
.fields.filter((field) => {
if (knownModelTypes.has(field.getTypeName())) {
return true;
}
return false;
})
.map((field) => field.name);
const objectTypeDefinition = {
...obj,
fields: (_a = obj.fields) === null || _a === void 0 ? void 0 : _a.filter((f) => !fieldsToRemove.includes(f.name.value)),
};
const input = graphql_transformer_core_1.InputObjectDefinitionWrapper.fromObject(name, objectTypeDefinition, document);
if (!hasIdField) {
input.addField(graphql_transformer_core_1.InputFieldWrapper.create('id', 'ID', true));
}
else {
const idField = input.fields.find((f) => f.name === 'id');
if (idField && shouldAutogenerateIdField) {
idField.makeNullable();
}
}
Object.values((modelDirectiveConfig === null || modelDirectiveConfig === void 0 ? void 0 : modelDirectiveConfig.timestamps) || {}).forEach((timeStampFieldName) => {
if (input.hasField(timeStampFieldName)) {
const timestampField = input.getField(timeStampFieldName);
if (['String', 'AWSDateTime'].includes(timestampField.getTypeName())) {
timestampField.makeNullable();
}
}
});
if (isSyncEnabled) {
input.addField(graphql_transformer_core_1.InputFieldWrapper.create('_version', 'Int', true));
}
return input.serialize();
};
exports.makeCreateInputField = makeCreateInputField;
const makeMutationConditionInput = (ctx, name, object, modelDirectiveConfig) => {
const input = (0, common_1.makeConditionFilterInput)(ctx, name, object);
const idField = input.fields.find((f) => f.name === 'id' && f.getTypeName() === 'ModelIDInput');
if (idField) {
input.removeField(idField);
}
if ((0, graphql_transformer_core_1.isDynamoDbModel)(ctx, object.name.value)) {
if (!((modelDirectiveConfig === null || modelDirectiveConfig === void 0 ? void 0 : modelDirectiveConfig.timestamps) === null)) {
Object.values({ createdAt: 'createdAt', updatedAt: 'updatedAt', ...((modelDirectiveConfig === null || modelDirectiveConfig === void 0 ? void 0 : modelDirectiveConfig.timestamps) || {}) }).forEach((timeStampFieldName) => {
if (!!timeStampFieldName && !input.hasField(timeStampFieldName)) {
const field = graphql_transformer_core_1.InputFieldWrapper.create(timeStampFieldName, 'ModelStringInput', true);
input.addField(field);
}
});
}
}
return input.serialize();
};
exports.makeMutationConditionInput = makeMutationConditionInput;
//# sourceMappingURL=mutation.js.map