62 lines
1.7 KiB
JavaScript
Raw Normal View History

'use strict';
const { isArray } = require('lodash/fp');
const traverseEntity = require('../traverse-entity');
const { getNonWritableAttributes } = require('../content-types');
const { pipeAsync } = require('../async');
2021-11-04 16:43:27 +01:00
const visitors = require('./visitors');
2021-11-10 17:08:54 +01:00
const sanitizers = require('./sanitizers');
module.exports = {
contentAPI: {
input(data, schema, { auth } = {}) {
if (isArray(data)) {
2022-08-08 23:33:39 +02:00
return Promise.all(data.map((entry) => this.input(entry, schema, { auth })));
}
const nonWritableAttributes = getNonWritableAttributes(schema);
const transforms = [
// Remove non writable attributes
traverseEntity(visitors.restrictedFields(nonWritableAttributes), { schema }),
];
if (auth) {
// Remove restricted relations
transforms.push(traverseEntity(visitors.removeRestrictedRelations(auth), { schema }));
}
// Apply sanitizers from registry if exists
strapi.sanitizers
.get('content-api.input')
2022-08-08 23:33:39 +02:00
.forEach((sanitizer) => transforms.push(sanitizer(schema)));
2021-11-04 16:43:27 +01:00
return pipeAsync(...transforms)(data);
},
output(data, schema, { auth } = {}) {
if (isArray(data)) {
2022-08-08 23:33:39 +02:00
return Promise.all(data.map((entry) => this.output(entry, schema, { auth })));
}
const transforms = [sanitizers.defaultSanitizeOutput(schema)];
if (auth) {
transforms.push(traverseEntity(visitors.removeRestrictedRelations(auth), { schema }));
}
// Apply sanitizers from registry if exists
strapi.sanitizers
.get('content-api.output')
2022-08-08 23:33:39 +02:00
.forEach((sanitizer) => transforms.push(sanitizer(schema)));
2021-11-04 16:43:27 +01:00
return pipeAsync(...transforms)(data);
},
},
2021-11-10 17:08:54 +01:00
sanitizers,
visitors,
};