UNPKG

@infctr/eslint-docs

Version:

Keep your rule names and descriptions up-to-date across your repo

116 lines (109 loc) 5.17 kB
'use strict'; var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = undefined && undefined.__importDefault || function (mod) { return mod && mod.__esModule ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const fs_1 = __importDefault(require("mz/fs")); const path_1 = __importDefault(require("path")); const chalk_1 = __importDefault(require("chalk")); const flags_1 = require("./flags"); const project_root_1 = __importDefault(require("./project-root")); const try_fs_1 = require("./try-fs"); const paths_1 = require("./paths"); const abort_1 = require("./abort"); const spinner_1 = __importDefault(require("./spinner")); const diff_1 = __importDefault(require("./diff")); const read_rule_1 = __importDefault(require("./actions/read-rule")); const update_readme_1 = __importDefault(require("./actions/update-readme")); exports.default = abort_1.unabort((projectRoot = project_root_1.default) => __awaiter(undefined, void 0, void 0, function* () { const isTTY = process.stdout.isTTY && !process.env.CI; const project = paths_1.register((yield projectRoot)); const rulesDir = project.rulesDir, readmePath = project.readmePath, docsDir = project.docsDir; projectRoot = project.projectRoot; if (isTTY) spinner_1.default.start('Reading rules...'); const rulePaths = (yield fs_1.default.readdir(rulesDir)).map(name => path_1.default.resolve(rulesDir, name)); const ruleMeta = []; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = rulePaths[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { const rulePath = _step.value; if (isTTY) spinner_1.default.start(`${flags_1.verb} rule ${rulePaths.indexOf(rulePath) + 1} of ${rulePaths.length}...`); const rule = require(rulePath); const name = path_1.default.basename(rulePath, path_1.default.extname(rulePath)); const docPath = path_1.default.resolve(docsDir, name + '.md'); const friendlyDocPath = path_1.default.relative(projectRoot, docPath).replace(name, chalk_1.default.bold(name)); const docs = yield try_fs_1.read(null, chalk_1.default`Could not read the docs for {bold ${name}} at ${friendlyDocPath}`, docPath); if (docs) { var _read_rule_1$default = read_rule_1.default({ rule, docs, friendlyDocPath }, name); const meta = _read_rule_1$default.meta, newDocs = _read_rule_1$default.newDocs; ruleMeta.push(meta); if (!flags_1.isChecking) { yield try_fs_1.write(`${friendlyDocPath} is up-to-date`, `Could not update the docs for {bold ${name}} at ${friendlyDocPath}`, docPath, newDocs); } } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } if (isTTY) spinner_1.default.start(`${flags_1.verb} README...`); const readme = yield try_fs_1.read(null, `Could not read the README`, readmePath); const updatedReadme = update_readme_1.default(readme, ruleMeta, project); if (updatedReadme !== readme) { const patch = diff_1.default({ name: 'README.md', content: readme }, { name: 'generated', content: updatedReadme }); if (flags_1.isChecking) { spinner_1.default.fail('The README is not correctly formatted. Please update it:'); if (!flags_1.noDiffs) console.error(patch); process.exitCode = 1; } else { spinner_1.default.info('Updating README:'); if (!flags_1.noDiffs) console.log(patch); yield try_fs_1.write('README.md is up-to-date', `Could not update the README`, readmePath, updatedReadme); } } else { if (flags_1.isChecking) { spinner_1.default.succeed('The README is valid'); } else { spinner_1.default.succeed('The README is up-to-date'); } } }));