textlint
Version:
The pluggable linting tool for text and markdown.
88 lines • 3.23 kB
JavaScript
// LICENSE : MIT
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.loadRulesConfigFromPresets = exports.createFlatPresetRulesConfigFromRawPresetRuleConfig = exports.createFlatRulesConfigFromRawRulesConfig = void 0;
const module_interop_1 = require("@textlint/module-interop");
const utils_1 = require("@textlint/utils");
const config_util_1 = require("./config-util");
/**
* Convert config of preset to rawRulesConfig flat path format.
*
* This function convert Preset nesting rule to flat path
* ```
* {
* "x" : true
* "preset-a" : { "rule-name": "value" }
* }
* ```
* =>
* ```
* { "x": true }
* { "a/rule-name": "value" }
* ```
*
* @param rawRulesConfig
* @returns {{string: string}}
*/
function createFlatRulesConfigFromRawRulesConfig(rawRulesConfig) {
if (!rawRulesConfig) {
return {};
}
const rulesConfig = {};
Object.keys(rawRulesConfig).forEach((key) => {
if ((0, config_util_1.isPresetRuleKey)(key)) {
// <preset>/<rule>
const presetName = key;
const presetRuleConfig = rawRulesConfig[key];
Object.assign(rulesConfig, createFlatPresetRulesConfigFromRawPresetRuleConfig(presetRuleConfig, presetName));
return;
}
rulesConfig[key] = rawRulesConfig[key];
});
return rulesConfig;
}
exports.createFlatRulesConfigFromRawRulesConfig = createFlatRulesConfigFromRawRulesConfig;
/**
* create flat `<plugin>/<rule>` option
* @param {Object} [rulesConfig]
* @param {string} presetName
* @returns {Object}
*/
function createFlatPresetRulesConfigFromRawPresetRuleConfig(rulesConfig, presetName) {
const mapped = {};
// missing "rulesConfig"
if (rulesConfig === undefined || typeof rulesConfig !== "object") {
return mapped;
}
Object.keys(rulesConfig).forEach((ruleName) => {
const normalizedKey = (0, utils_1.normalizeTextlintPresetSubRuleKey)({ preset: presetName, rule: ruleName });
mapped[normalizedKey] = rulesConfig[ruleName];
});
return mapped;
}
exports.createFlatPresetRulesConfigFromRawPresetRuleConfig = createFlatPresetRulesConfigFromRawPresetRuleConfig;
const hasOwnProperty = Object.prototype.hasOwnProperty;
/**
*
* @param presetNames
* @param {TextLintModuleResolver} moduleResolver
* @returns {{}}
*/
function loadRulesConfigFromPresets(presetNames = [], moduleResolver) {
const presetRulesConfig = {};
presetNames.forEach((presetName) => {
const pkgPath = moduleResolver.resolvePresetPackageName(presetName);
const preset = (0, module_interop_1.moduleInterop)(require(pkgPath));
if (!hasOwnProperty.call(preset, "rules")) {
throw new Error(`${presetName} has not rules`);
}
if (!hasOwnProperty.call(preset, "rulesConfig")) {
throw new Error(`${presetName} has not rulesConfig`);
}
// set config of <rule> to "<preset>/<rule>"
Object.assign(presetRulesConfig, createFlatPresetRulesConfigFromRawPresetRuleConfig(preset.rulesConfig, presetName));
});
return presetRulesConfig;
}
exports.loadRulesConfigFromPresets = loadRulesConfigFromPresets;
//# sourceMappingURL=preset-loader.js.map