@textlint/kernel
Version:
textlint kernel is core logic by pure JavaScript.
120 lines (119 loc) • 3.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.hasLinter = hasLinter;
exports.getLinter = getLinter;
exports.hasFixer = hasFixer;
exports.getFixer = getFixer;
exports.isRuleModule = isRuleModule;
exports.assertRuleShape = assertRuleShape;
exports.getFilter = getFilter;
// Type guards
function isObjectWithProperty(obj, property) {
return typeof obj === "object" && obj !== null && property in obj;
}
function hasLinterProperty(obj) {
return isObjectWithProperty(obj, "linter");
}
function hasFixerProperty(obj) {
return isObjectWithProperty(obj, "fixer");
}
/**
* detect that ruleCreator has linter function
* @param {*} ruleCreator
* @returns {boolean}
*/
function hasLinter(ruleCreator) {
if (hasLinterProperty(ruleCreator) && typeof ruleCreator.linter === "function") {
return true;
}
if (typeof ruleCreator === "function") {
return true;
}
return false;
}
/**
* get linter function from ruleCreator
* if not found, throw error
* @param {((...args: any[]) => any)|Object|any} ruleCreator
* @returns {(...args: any[]) => any} linter function
* @throws
*/
function getLinter(ruleCreator) {
if (hasLinterProperty(ruleCreator) && typeof ruleCreator.linter === "function") {
return ruleCreator.linter;
}
if (typeof ruleCreator === "function") {
return ruleCreator;
}
throw new Error("Not found linter function in the ruleCreator");
}
/**
* detect that ruleCreator has fixer function
* @param {*} ruleCreator
* @returns {boolean}
*/
function hasFixer(ruleCreator) {
return hasFixerProperty(ruleCreator) && typeof ruleCreator.fixer === "function" && hasLinter(ruleCreator);
}
/**
* get fixer function from ruleCreator
* if not found, throw error
* @param {((...args: any[]) => any)|Object|any} ruleCreator
* @returns {(...args: any[]) => any} fixer function
* @throws
*/
function getFixer(ruleCreator) {
if (!hasLinter(ruleCreator)) {
throw new Error("fixer module should have also linter function.");
}
if (hasFixerProperty(ruleCreator) && typeof ruleCreator.fixer === "function") {
return ruleCreator.fixer;
}
throw new Error("Not found fixer function in the ruleCreator");
}
/**
* RuleModule should has either linter or fixer.
* @param {*} ruleCreator
* @returns {boolean}
**/
function isRuleModule(ruleCreator) {
return hasLinter(ruleCreator) || hasFixer(ruleCreator);
}
/**
* Validate rule module.
* if invalid throw error
* @param {*} ruleModule
* @param {string} [key]
* @throws
*/
function assertRuleShape(ruleModule, key = "") {
if (ruleModule === undefined) {
throw new Error(`Definition of rule '${key}' was not found.`);
}
/*
Check old rule function
module.exports = function(context){
}
*/
if (!isRuleModule(ruleModule)) {
throw new Error(`Definition of rule '${key}' was not rule module.
Rule should export function:
module.exports = function(context){
// Your rule
};`);
}
}
/**
* get linter function from ruleCreator
* if not found, throw error
* @param {*} ruleCreator
* @returns {(...args: any[]) => any} linter function
* @throws
*/
function getFilter(ruleCreator) {
if (typeof ruleCreator === "function") {
return ruleCreator;
}
throw new Error("Not found filter function in the ruleCreator");
}
//# sourceMappingURL=rule-creator-helper.js.map