contentful-migration
Version:
Migration tooling for contentful
76 lines • 2.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateAnnotations = void 0;
const __1 = require("..");
const annotation_1 = require("../../interfaces/annotation");
function validateFieldAssignments(contentTypeFieldAssignments, contentType) {
const errors = [];
const assignments = Object.entries(contentTypeFieldAssignments);
for (const [fieldId, fieldAssignments] of assignments) {
// check if field exists first
const fieldDefinition = contentType.fields.find((field) => field.id === fieldId);
if (!fieldDefinition) {
// TODO: collect the errors
errors.push({
type: 'InvalidPayload',
message: `Invalid annotation assignment, Field "${fieldId}" not found`
});
continue;
}
for (const [, assignmentPayload] of fieldAssignments.entries()) {
const { sys: { id: annotationId } } = assignmentPayload;
const assignment = {
annotationId,
target: {
type: 'ContentTypeField',
data: fieldDefinition
}
};
const error = (0, annotation_1.validateAnnotationAssignment)(assignment);
if (error) {
errors.push(error);
}
}
}
return errors;
}
function validateContentTypeAssignment(contentTypeAssignments, contentType) {
const errors = [];
for (const assignmentPayload of contentTypeAssignments.values()) {
const { sys: { id: annotationId } } = assignmentPayload;
const assignment = {
annotationId,
target: {
type: 'ContentType',
data: contentType
}
};
const error = (0, annotation_1.validateAnnotationAssignment)(assignment);
if (error) {
errors.push(error);
}
}
return errors;
}
function validateAnnotations(contentType) {
var _a;
if (!((_a = contentType === null || contentType === void 0 ? void 0 : contentType.metadata) === null || _a === void 0 ? void 0 : _a.annotations)) {
return;
}
const { ContentType: contentTypeAssignments = [], ContentTypeField: contentTypeFieldAssignments = {} } = contentType.metadata.annotations;
return [
...validateContentTypeAssignment(contentTypeAssignments, contentType),
...validateFieldAssignments(contentTypeFieldAssignments, contentType)
].filter((e) => Boolean(e));
}
exports.validateAnnotations = validateAnnotations;
class AnnotationsValidator {
constructor() {
this.hooks = [__1.ApiHook.SaveContentType];
}
validate({ contentType }) {
return validateAnnotations(contentType.toAPI());
}
}
exports.default = AnnotationsValidator;
//# sourceMappingURL=annotations.js.map