eslint-config-galex
Version:
personal ESLint ruleset of galex
67 lines (66 loc) • 3.21 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.mergeSortOverrides = exports.dropOverrideType = exports.storybookOverrideType = exports.tsOverrideType = exports.reactOverrideType = exports.jestConfigOverrideType = exports.jestOverrideType = void 0;
const lodash_merge_1 = __importDefault(require("lodash.merge"));
const createOverrideType = (type) => `eslint-config-galex/${type}`;
exports.jestOverrideType = createOverrideType('jest');
exports.jestConfigOverrideType = createOverrideType('jest-config');
exports.reactOverrideType = createOverrideType('react');
exports.tsOverrideType = createOverrideType('typescript');
exports.storybookOverrideType = createOverrideType('storybook');
const dropOverrideType = (override) => {
const copy = { ...override };
delete copy.overrideType;
return copy;
};
exports.dropOverrideType = dropOverrideType;
/**
* the lower number, the higher the priority of the override is
*/
const overrideOrder = {
[exports.jestOverrideType]: 0,
[exports.jestConfigOverrideType]: 0,
[exports.storybookOverrideType]: 0,
[exports.tsOverrideType]: 1,
[exports.reactOverrideType]: 2,
};
/**
* @param {object[]} overrides
*/
const mergeSortOverrides = (overrides) => {
return [...overrides]
.reduce((carry, override) => {
const isInternalOverride = !!override.overrideType;
if (isInternalOverride) {
const previousDefaultOverrideTypeIndex = carry.findIndex(o => o.overrideType === override.overrideType);
if (previousDefaultOverrideTypeIndex > -1) {
const previousOverride = carry[previousDefaultOverrideTypeIndex];
/* istanbul ignore next previousOverride must be present here */
const previousDefaultOverrideTypeFiles = previousOverride
? [...new Set(previousOverride.files)]
: [];
const nextDefaultOverrideTypeFiles = new Set(override.files);
const hasIdenticalFilesArr = previousDefaultOverrideTypeFiles.every(file => nextDefaultOverrideTypeFiles.has(file));
if (!hasIdenticalFilesArr) {
return [...carry, override];
}
return carry.map((dataset, index) => index === previousDefaultOverrideTypeIndex
? (0, lodash_merge_1.default)(dataset, override)
: dataset);
}
}
return [...carry, override];
}, [])
.sort((a, b) => {
/* istanbul ignore next dumb conditionals to satisfy TS, don't have to test */
const priorityA = a.overrideType ? overrideOrder[a.overrideType] : -1;
/* istanbul ignore next dumb conditionals to satisfy TS, don't have to test */
const priorityB = b.overrideType ? overrideOrder[b.overrideType] : -1;
/* istanbul ignore next dumb conditionals to satisfy TS, don't have to test */
return (priorityB ?? -1) - (priorityA ?? -1);
});
};
exports.mergeSortOverrides = mergeSortOverrides;
;