59 lines
1.6 KiB
JavaScript
Raw Normal View History

const _ = require('lodash');
const createErrorMessage = (
modelA,
modelB
) => `Duplicated collection name: \`${modelA.model.collectionName}\`.
The same collection name can't be used for two different models.
First found in ${modelA.origin} \`${modelA.apiOrPluginName}\`, model \`${modelA.modelName}\`.
Second found in ${modelB.origin} \`${modelB.apiOrPluginName}\`, model \`${modelB.modelName}\`.`;
// Check if all collection names are unique
const checkDuplicatedTableNames = strapi => {
const modelsWithInfo = [];
_.forIn(strapi.admin.models, (model, modelName) => {
modelsWithInfo.push({
origin: 'Strapi internal',
model,
apiOrPluginName: 'admin',
modelName,
});
});
_.forIn(strapi.api, (api, apiName) => {
_.forIn(api.models, (model, modelName) => {
modelsWithInfo.push({
origin: 'API',
model,
apiOrPluginName: apiName,
modelName,
});
});
});
_.forIn(strapi.plugins, (plugin, pluginName) => {
_.forIn(plugin.models, (model, modelName) => {
modelsWithInfo.push({
origin: 'Plugin',
model,
apiOrPluginName: pluginName,
modelName,
});
});
});
modelsWithInfo.forEach(modelA => {
const similarModelFound = modelsWithInfo.find(
modelB =>
modelB.model.collectionName === modelA.model.collectionName &&
modelB.model.uid !== modelA.model.uid
);
if (similarModelFound) {
strapi.stopWithError(new Error(createErrorMessage(modelA, similarModelFound)));
}
});
};
module.exports = checkDuplicatedTableNames;