@kaspersky/dev-tools
Version:
Development tools and configs for Babel, ESLint and TypeScript
109 lines (108 loc) • 4.45 kB
JavaScript
;
const { extractArgValue, isFormExcludet, isFromAlreadyMigrated, message, migrationList } = require('./helpers');
const COMPONENT_LIBRARY = 'v6';
const typesWithSubElements = [
...['control-group', 20],
...['data-table', 31]
];
const updateProductSectionElement = el => {
return {
...el,
componentLibraryNext: COMPONENT_LIBRARY,
elements: Array.isArray(el.elements) && typesWithSubElements.includes(el.type)
? el.elements.map(updateProductSectionElement)
: el.elements,
gridItems: el.gridItems && Array.isArray(el.gridItems)
? el.gridItems.map(gridItem => ({
...gridItem,
innerComponents: Array.isArray(gridItem.innerComponents)
? gridItem.innerComponents.map(updateProductSectionElement)
: gridItem.innerComponents
}))
: el.gridItems
};
};
const updateBuilderSectionElement = el => {
if (!el || !el.state) {
return el;
}
const elements = el.state.elements;
const gridItems = el.state.gridItems;
return {
...el,
state: {
...el.state,
componentLibraryNext: {
slct: COMPONENT_LIBRARY
},
elements: Array.isArray(elements) && typesWithSubElements.includes(el.type)
? elements.map(updateBuilderSectionElement)
: elements,
gridItems: gridItems && gridItems.items && Array.isArray(gridItems.items)
? {
...gridItems,
items: gridItems.items.map(gridItem => ({
...gridItem,
innerComponents: Array.isArray(gridItem.innerComponents)
? gridItem.innerComponents.map(updateBuilderSectionElement)
: gridItem.innerComponents
}))
}
: gridItems
}
};
};
const setUiComponentV6lib = ({ fs, path }) => {
const UI_FORMS_PATH = path.join('./client/ui/');
const FILE_EXT = '.json';
const specificFormArray = extractArgValue('--only') || [];
const excludeArray = extractArgValue('--exclude');
return new Promise((resolve) => {
const formNames = fs.readdirSync(UI_FORMS_PATH)
.filter(file => path.extname(file) === FILE_EXT);
const resolvedFormNames = specificFormArray.length
? formNames.filter(file => specificFormArray.includes(file.replace(FILE_EXT, '')))
: formNames;
// eslint-disable-next-line no-console
console.log(`${message.startingPatchV6} ${UI_FORMS_PATH}
`);
resolvedFormNames.forEach(file => {
if (isFormExcludet({ file, excludeArray })) {
// eslint-disable-next-line no-console
console.log(`${message.skipped} ${file}`);
return;
}
// eslint-disable-next-line no-console
console.log(`${message.reading} ${file}`);
const json = JSON.parse(fs.readFileSync(`${UI_FORMS_PATH}${file}`));
if (isFromAlreadyMigrated(json, migrationList.offsets)) {
// eslint-disable-next-line no-console
console.log(`${message.alreadyMigrated} ${file}`);
return;
}
const currentMigrationInfo = json.state.migrationInfo || [];
const migrationSet = new Set([...currentMigrationInfo, migrationList.v6]);
const updatedJSON = {
...json,
state: {
...json.state,
migrationInfo: [...migrationSet]
},
elements: json.elements.map(updateBuilderSectionElement),
json: {
...json.json,
elements: json.json.elements.map(updateProductSectionElement)
}
};
if (Object.keys(updatedJSON).length) {
fs.writeFileSync(`${UI_FORMS_PATH}${file}`, JSON.stringify(updatedJSON, null, 2), { encoding: 'utf-8' });
// eslint-disable-next-line no-console
console.log(`${message.updated} ${file}`);
}
});
// eslint-disable-next-line no-console
console.log(message.donePatchV6);
resolve();
});
};
module.exports = setUiComponentV6lib;