textlint
Version:
The pluggable linting tool for natural language.
115 lines • 4.42 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 node_fs_1 = __importDefault(require("node:fs"));
const node_path_1 = __importDefault(require("node:path"));
const logger_js_1 = require("../util/logger.js");
const isFile = (filePath) => {
try {
return node_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 = async (dir) => {
const { readPackageUp } = await import("read-package-up");
return readPackageUp({
cwd: dir
})
.then((result) => {
var _a, _b;
const pkg = result === null || result === void 0 ? void 0 : result.packageJson;
const dependencies = (_a = pkg === null || pkg === void 0 ? void 0 : pkg.dependencies) !== null && _a !== void 0 ? _a : {};
const devDependencies = (_b = pkg === null || pkg === void 0 ? void 0 : pkg.devDependencies) !== null && _b !== void 0 ? _b : {};
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}
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const arrayToObject = (array, defaultValue) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
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 = async (options) => {
const dir = options.dir;
return getTextlintDependencyNames(dir).then((pkgNames) => {
const rcFile = `.textlintrc.json`;
const filePath = node_path_1.default.resolve(dir, rcFile);
if (isFile(filePath)) {
logger_js_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);
node_fs_1.default.writeFileSync(filePath, output);
if (options.verbose) {
logger_js_1.Logger.log(`${rcFile} is created.`);
}
return Promise.resolve(0);
});
};
exports.createConfigFile = createConfigFile;
//# sourceMappingURL=config-initializer.js.map