textlint
Version:
The pluggable linting tool for text and markdown.
110 lines • 3.98 kB
JavaScript
// LICENSE : MIT
;
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