in transforms/sort-comp.js [31:102]
module.exports = function(fileInfo, api, options) {
const j = api.jscodeshift;
const ReactUtils = require('./utils/ReactUtils')(j);
const printOptions = options.printOptions || {
quote: 'single',
trailingComma: true
};
const methodsOrder = getMethodsOrder(fileInfo, options); // eslint-disable-line no-use-before-define
const root = j(fileInfo.source);
const propertyComparator = (a, b) => {
const nameA = a.key.name;
const nameB = b.key.name;
const indexA = getCorrectIndex(methodsOrder, a); // eslint-disable-line no-use-before-define
const indexB = getCorrectIndex(methodsOrder, b); // eslint-disable-line no-use-before-define
const sameLocation = indexA === indexB;
if (sameLocation) {
// compare lexically
return +(nameA > nameB) || +(nameA === nameB) - 1;
} else {
// compare by index
return indexA - indexB;
}
};
const sortComponentProperties = classPath => {
const spec = ReactUtils.getReactCreateClassSpec(classPath);
if (spec) {
spec.properties.sort(propertyComparator);
}
};
const sortClassProperties = classPath => {
const spec = ReactUtils.getClassExtendReactSpec(classPath);
if (spec) {
spec.body.sort(propertyComparator);
}
};
if (options['explicit-require'] === false || ReactUtils.hasReact(root)) {
const createClassSortCandidates = ReactUtils.findReactCreateClass(root);
const es6ClassSortCandidates = ReactUtils.findReactES6ClassDeclaration(
root
);
if (createClassSortCandidates.size() > 0) {
createClassSortCandidates.forEach(sortComponentProperties);
}
if (es6ClassSortCandidates.size() > 0) {
es6ClassSortCandidates.forEach(sortClassProperties);
}
if (
createClassSortCandidates.size() > 0 ||
es6ClassSortCandidates.size() > 0
) {
return root.toSource(printOptions);
}
}
return null;
};