textlint
Version:
The pluggable linting tool for text and markdown.
83 lines • 2.73 kB
JavaScript
// LICENSE : MIT
;
import { moduleInterop } from "@textlint/module-interop";
import { normalizeTextlintPresetSubRuleKey } from "@textlint/utils";
import { isPresetRuleKey } from "./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}}
*/
export function createFlatRulesConfigFromRawRulesConfig(rawRulesConfig) {
if (!rawRulesConfig) {
return {};
}
const rulesConfig = {};
Object.keys(rawRulesConfig).forEach((key) => {
if (isPresetRuleKey(key)) {
// <preset>/<rule>
const presetName = key;
const presetRuleConfig = rawRulesConfig[key];
Object.assign(rulesConfig, createFlatPresetRulesConfigFromRawPresetRuleConfig(presetRuleConfig, presetName));
return;
}
rulesConfig[key] = rawRulesConfig[key];
});
return rulesConfig;
}
/**
* create flat `<plugin>/<rule>` option
* @param {Object} [rulesConfig]
* @param {string} presetName
* @returns {Object}
*/
export function createFlatPresetRulesConfigFromRawPresetRuleConfig(rulesConfig, presetName) {
const mapped = {};
// missing "rulesConfig"
if (rulesConfig === undefined || typeof rulesConfig !== "object") {
return mapped;
}
Object.keys(rulesConfig).forEach((ruleName) => {
const normalizedKey = normalizeTextlintPresetSubRuleKey({ preset: presetName, rule: ruleName });
mapped[normalizedKey] = rulesConfig[ruleName];
});
return mapped;
}
const hasOwnProperty = Object.prototype.hasOwnProperty;
/**
*
* @param presetNames
* @param {TextLintModuleResolver} moduleResolver
* @returns {{}}
*/
export function loadRulesConfigFromPresets(presetNames = [], moduleResolver) {
const presetRulesConfig = {};
presetNames.forEach((presetName) => {
const pkgPath = moduleResolver.resolvePresetPackageName(presetName);
const preset = 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;
}
//# sourceMappingURL=preset-loader.js.map