fix: recursive config sanitization
parent
5e1e2a6386
commit
8ef3217f5f
|
@ -109,7 +109,10 @@ const ConfigType = class ConfigType {
|
||||||
if (softImport && !force) return false;
|
if (softImport && !force) return false;
|
||||||
|
|
||||||
// Format JSON fields.
|
// Format JSON fields.
|
||||||
configContent = sanitizeConfig(configContent);
|
configContent = sanitizeConfig({
|
||||||
|
config: configContent,
|
||||||
|
configName,
|
||||||
|
});
|
||||||
const query = { ...configContent };
|
const query = { ...configContent };
|
||||||
this.jsonFields.map((field) => query[field] = JSON.stringify(configContent[field]));
|
this.jsonFields.map((field) => query[field] = JSON.stringify(configContent[field]));
|
||||||
|
|
||||||
|
@ -120,8 +123,8 @@ const ConfigType = class ConfigType {
|
||||||
// Delete/create relations.
|
// Delete/create relations.
|
||||||
await Promise.all(this.relations.map(async ({ queryString, relationName, parentName, relationSortFields }) => {
|
await Promise.all(this.relations.map(async ({ queryString, relationName, parentName, relationSortFields }) => {
|
||||||
const relationQueryApi = strapi.query(queryString);
|
const relationQueryApi = strapi.query(queryString);
|
||||||
existingConfig = sanitizeConfig(existingConfig, relationName, relationSortFields);
|
existingConfig = sanitizeConfig({ config: existingConfig, configName, relation: relationName, relationSortFields });
|
||||||
configContent = sanitizeConfig(configContent, relationName, relationSortFields);
|
configContent = sanitizeConfig({ config: configContent, configName, relation: relationName, relationSortFields });
|
||||||
|
|
||||||
const configToAdd = difference(configContent[relationName], existingConfig[relationName], relationSortFields);
|
const configToAdd = difference(configContent[relationName], existingConfig[relationName], relationSortFields);
|
||||||
const configToDelete = difference(existingConfig[relationName], configContent[relationName], relationSortFields);
|
const configToDelete = difference(existingConfig[relationName], configContent[relationName], relationSortFields);
|
||||||
|
@ -201,7 +204,7 @@ const ConfigType = class ConfigType {
|
||||||
});
|
});
|
||||||
const configs = {};
|
const configs = {};
|
||||||
|
|
||||||
await Promise.all(Object.values(AllConfig).map(async (config) => {
|
await Promise.all(Object.entries(AllConfig).map(async ([configName, config]) => {
|
||||||
const combinedUid = getCombinedUid(this.uidKeys, config);
|
const combinedUid = getCombinedUid(this.uidKeys, config);
|
||||||
const combinedUidWhereFilter = getCombinedUidWhereFilter(this.uidKeys, config);
|
const combinedUidWhereFilter = getCombinedUidWhereFilter(this.uidKeys, config);
|
||||||
|
|
||||||
|
@ -214,13 +217,13 @@ const ConfigType = class ConfigType {
|
||||||
const shouldExclude = !isEmpty(strapi.config.get('plugin::config-sync.excludedConfig').filter((option) => `${this.configPrefix}.${combinedUid}`.startsWith(option)));
|
const shouldExclude = !isEmpty(strapi.config.get('plugin::config-sync.excludedConfig').filter((option) => `${this.configPrefix}.${combinedUid}`.startsWith(option)));
|
||||||
if (shouldExclude) return;
|
if (shouldExclude) return;
|
||||||
|
|
||||||
const formattedConfig = { ...sanitizeConfig(config) };
|
const formattedConfig = { ...sanitizeConfig({ config, configName }) };
|
||||||
await Promise.all(this.relations.map(async ({ queryString, relationName, relationSortFields, parentName }) => {
|
await Promise.all(this.relations.map(async ({ queryString, relationName, relationSortFields, parentName }) => {
|
||||||
const relations = await noLimit(strapi.query(queryString), {
|
const relations = await noLimit(strapi.query(queryString), {
|
||||||
where: { [parentName]: combinedUidWhereFilter },
|
where: { [parentName]: combinedUidWhereFilter },
|
||||||
});
|
});
|
||||||
|
|
||||||
relations.map((relation) => sanitizeConfig(relation));
|
relations.map((relation) => sanitizeConfig({ config: relation, configName: relationName }));
|
||||||
relationSortFields.map((sortField) => {
|
relationSortFields.map((sortField) => {
|
||||||
relations.sort(dynamicSort(sortField));
|
relations.sort(dynamicSort(sortField));
|
||||||
});
|
});
|
||||||
|
|
|
@ -46,7 +46,12 @@ const dynamicSort = (property) => {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const sanitizeConfig = (config, relation, relationSortFields) => {
|
const sanitizeConfig = ({
|
||||||
|
config,
|
||||||
|
relation,
|
||||||
|
relationSortFields,
|
||||||
|
configName,
|
||||||
|
}) => {
|
||||||
delete config._id;
|
delete config._id;
|
||||||
delete config.id;
|
delete config.id;
|
||||||
delete config.updatedAt;
|
delete config.updatedAt;
|
||||||
|
@ -76,6 +81,26 @@ const sanitizeConfig = (config, relation, relationSortFields) => {
|
||||||
config[relation] = formattedRelations;
|
config[relation] = formattedRelations;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We recursively sanitize the config to remove environment specific data.
|
||||||
|
// Except for the plugin_content_manager_configuration.
|
||||||
|
// This is because that stores the "edit the view" data which includes only configuration, not content.
|
||||||
|
if (configName && !configName.startsWith('plugin_content_manager_configuration_')) {
|
||||||
|
const recursiveSanitizeConfig = (recursivedSanitizedConfig) => {
|
||||||
|
delete recursivedSanitizedConfig._id;
|
||||||
|
delete recursivedSanitizedConfig.id;
|
||||||
|
delete recursivedSanitizedConfig.updatedAt;
|
||||||
|
delete recursivedSanitizedConfig.createdAt;
|
||||||
|
|
||||||
|
Object.keys(recursivedSanitizedConfig).map((key, index) => {
|
||||||
|
if (recursivedSanitizedConfig[key] && typeof recursivedSanitizedConfig[key] === "object") {
|
||||||
|
recursiveSanitizeConfig(recursivedSanitizedConfig[key]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
recursiveSanitizeConfig(config);
|
||||||
|
}
|
||||||
|
|
||||||
return config;
|
return config;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue