simple-icons/scripts/lint.js
Eric Cornelissen a4ca74602f
Minor improvements (#4708)
* Remove .travis.yml reference from .gitattributes

* Minor refactoring of .svglintrc.js

- Remove unused variables
- Fix missing semi-colons
- Remove unneeded indentation

* Prevent error in clean command due to missing files

* Fix indentations

* Further improvements to Editorconfig and indentation

* Format YAML files

- Update indentation for array notation
- Normalize use of newlines
2021-01-15 21:47:00 +01:00

67 lines
2.1 KiB
JavaScript

#!/usr/bin/env node
/**
* @fileoverview Lints for the package that can't be implemented in the existing linters (e.g. jsonlint/svglint)
*/
const fs = require("fs");
const path = require("path");
const { diffLinesUnified } = require("jest-diff");
const simpleIconsData = require("../_data/simple-icons.json");
const simpleIconsDataFile = path.resolve(
__dirname, "..", "_data", "simple-icons.json");
/**
* Contains our tests so they can be isolated from eachother; I don't think each test is worth its own file
* @type {{[k:string]: () => (string|undefined)}}
*/
const TESTS = {
/* Tests whether our icons are in alphabetical order */
alphabetical: function() {
const collector = (invalidEntries, icon, index, array) => {
if (index > 0) {
const prev = array[index - 1];
if (icon.title.localeCompare(prev.title) < 0) {
invalidEntries.push(icon);
}
}
return invalidEntries;
};
const invalids = simpleIconsData.icons.reduce(collector, []);
if (invalids.length) {
return `Some icons aren't in alphabetical order:
${invalids.map(icon => icon.title).join(", ")}`;
}
},
/* Check the prettification of the data file */
prettified: function() {
const simpleIconsDataString = fs.readFileSync(
simpleIconsDataFile, "utf8").replace(/\r\n/g, '\n');
const simpleIconsDataPretty = `${JSON.stringify(simpleIconsData, null, " ")}\n`;
if (simpleIconsDataString !== simpleIconsDataPretty) {
const dataDiff = diffLinesUnified(simpleIconsDataString.split("\n"),
simpleIconsDataPretty.split("\n"),
{
expand: false,
omitAnnotationLines: true
});
return `Data file is not prettified:\n\n${dataDiff}`;
}
}
};
// execute all tests and log potential errors
const errors = Object.keys(TESTS)
.map(k => TESTS[k]())
.filter(Boolean);
if (errors.length) {
errors.forEach(error => {
console.error(`\u001b[31m${error}\u001b[0m`);
});
process.exit(1);
}