eslint-plugin-sql
Version:
SQL linting rules for ESLint.
77 lines (76 loc) • 3.3 kB
JavaScript
;
/**
* @file This script is used to inline assertions into the README.md documents.
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const glob_1 = require("glob");
const lodash_1 = __importDefault(require("lodash"));
const node_fs_1 = __importDefault(require("node:fs"));
const node_path_1 = __importDefault(require("node:path"));
const formatCodeSnippet = (setup) => {
const paragraphs = [];
paragraphs.push(setup.code);
if (setup.options) {
paragraphs.push('// Options: ' + JSON.stringify(setup.options));
}
if (setup.errors) {
for (const message of setup.errors) {
paragraphs.push('// Message: ' + message.message);
}
}
if (setup.output) {
paragraphs.push('// Fixed code: \n// ' + setup.output.split('\n').join('\n// '));
}
return paragraphs.join('\n');
};
const getAssertions = () => {
const assertionFiles = glob_1.glob.sync(node_path_1.default.resolve(__dirname, '../../src/rules/*.test.ts'));
const assertionNames = lodash_1.default.map(assertionFiles, (filePath) => {
return node_path_1.default.basename(filePath, '.test.ts');
});
const assertionCodes = lodash_1.default.map(assertionFiles, (filePath) => {
// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
const codes = require(filePath);
return {
invalid: lodash_1.default.map(codes.default.testCases.invalid, formatCodeSnippet),
valid: lodash_1.default.map(codes.default.testCases.valid, formatCodeSnippet),
};
});
return lodash_1.default.zipObject(assertionNames, assertionCodes);
};
const updateDocuments = (assertions) => {
const readmeDocumentPath = node_path_1.default.join(__dirname, '../../README.md');
let documentBody = node_fs_1.default.readFileSync(readmeDocumentPath, 'utf8');
documentBody = documentBody.replaceAll(
// eslint-disable-next-line regexp/no-unused-capturing-group
/<!-- assertions ([a-z]+) -->/giu, (assertionsBlock) => {
var _a;
let exampleBody = '';
const ruleName = (_a = /assertions ([a-z]+)/iu.exec(assertionsBlock)) === null || _a === void 0 ? void 0 : _a[1];
if (!ruleName) {
throw new Error('Rule name not found.');
}
const ruleAssertions = assertions[ruleName];
if (!ruleAssertions) {
throw new Error('No assertions available for rule "' + ruleName + '".');
}
if (ruleAssertions.invalid.length) {
exampleBody +=
'The following patterns are considered problems:\n\n```js\n' +
ruleAssertions.invalid.join('\n\n') +
'\n```\n\n';
}
if (ruleAssertions.valid.length) {
exampleBody +=
'The following patterns are not considered problems:\n\n```js\n' +
ruleAssertions.valid.join('\n\n') +
'\n```\n\n';
}
return exampleBody;
});
node_fs_1.default.writeFileSync(readmeDocumentPath, documentBody);
};
updateDocuments(getAssertions());