UNPKG

textlint

Version:

The pluggable linting tool for text and markdown.

110 lines 3.98 kB
// LICENSE : MIT "use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createConfigFile = void 0; const utils_1 = require("@textlint/utils"); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); // @ts-expect-error no types const read_pkg_1 = __importDefault(require("read-pkg")); const logger_1 = require("../util/logger"); const isFile = (filePath) => { try { return fs_1.default.statSync(filePath).isFile(); } catch (error) { return false; } }; /** * read package.json if found it * @param {string} dir * @returns {Promise.<Array.<String>>} */ const getTextlintDependencyNames = (dir) => { return (0, read_pkg_1.default)(dir) .then((pkg) => { const dependencies = pkg.dependencies || {}; const devDependencies = pkg.devDependencies || {}; const mergedDependencies = Object.assign({}, dependencies, devDependencies); const pkgNames = Object.keys(mergedDependencies); return pkgNames.filter((pkgName) => { const ruleOrFilterOrPlugin = pkgName.indexOf(utils_1.TextlintPackageNamePrefix.filterRule) !== -1 || pkgName.indexOf(utils_1.TextlintPackageNamePrefix.rule) !== -1 || pkgName.indexOf(utils_1.TextlintPackageNamePrefix.plugin) !== -1; if (pkgName === "textlint-rule-helper") { return false; } return ruleOrFilterOrPlugin; }); }) .catch(() => { return []; }); }; /** * create object that fill with `defaultValue` * @param {Array} array * @param {*} defaultValue * @returns {Object} */ const arrayToObject = (array, defaultValue) => { const object = {}; array.forEach((item) => { object[item] = defaultValue; }); return object; }; /** * Create .textlintrc file * @params {string} dir The directory of .textlintrc file * @returns {Promise.<number>} The exit code for the operation. */ const createConfigFile = (options) => { const dir = options.dir; return getTextlintDependencyNames(dir).then((pkgNames) => { const rcFile = `.textlintrc.json`; const filePath = path_1.default.resolve(dir, rcFile); if (isFile(filePath)) { logger_1.Logger.error(`${rcFile} is already existed.`); return Promise.resolve(1); } const filters = pkgNames .filter((pkgName) => { return pkgName.indexOf(utils_1.TextlintPackageNamePrefix.filterRule) !== -1; }) .map((filterName) => { return filterName.replace(utils_1.TextlintPackageNamePrefix.filterRule, ""); }); const rules = pkgNames .filter((pkgName) => { return pkgName.indexOf(utils_1.TextlintPackageNamePrefix.rule) !== -1; }) .map((filterName) => { return filterName.replace(utils_1.TextlintPackageNamePrefix.rule, ""); }); const plugins = pkgNames .filter((pkgName) => { return pkgName.indexOf(utils_1.TextlintPackageNamePrefix.plugin) !== -1; }) .map((filterName) => { return filterName.replace(utils_1.TextlintPackageNamePrefix.plugin, ""); }); const defaultTextlintRc = { plugins: arrayToObject(plugins, true), filters: arrayToObject(filters, true), rules: arrayToObject(rules, true) }; const output = JSON.stringify(defaultTextlintRc, null, 2); fs_1.default.writeFileSync(filePath, output); if (options.verbose) { logger_1.Logger.log(`${rcFile} is created.`); } return Promise.resolve(0); }); }; exports.createConfigFile = createConfigFile; //# sourceMappingURL=config-initializer.js.map