| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- "use strict";
- var fs = require("fs");
- var path = require("path");
- var underscore_string_1 = require("underscore.string");
- var configuration_1 = require("./configuration");
- var moduleDirectory = path.dirname(module.filename);
- var CORE_RULES_DIRECTORY = path.resolve(moduleDirectory, ".", "rules");
- function loadRules(ruleConfiguration, enableDisableRuleMap, rulesDirectories) {
- var rules = [];
- for (var ruleName in ruleConfiguration) {
- if (ruleConfiguration.hasOwnProperty(ruleName)) {
- var ruleValue = ruleConfiguration[ruleName];
- var Rule = findRule(ruleName, rulesDirectories);
- if (Rule !== undefined) {
- var all = "all";
- var allList = (all in enableDisableRuleMap ? enableDisableRuleMap[all] : []);
- var ruleSpecificList = (ruleName in enableDisableRuleMap ? enableDisableRuleMap[ruleName] : []);
- var disabledIntervals = buildDisabledIntervalsFromSwitches(ruleSpecificList, allList);
- rules.push(new Rule(ruleName, ruleValue, disabledIntervals));
- }
- }
- }
- return rules;
- }
- exports.loadRules = loadRules;
- function findRule(name, rulesDirectories) {
- var camelizedName = transformName(name);
- var Rule = loadRule(CORE_RULES_DIRECTORY, camelizedName);
- if (Rule != null) {
- return Rule;
- }
- var directories = configuration_1.getRulesDirectories(rulesDirectories);
- for (var _i = 0, directories_1 = directories; _i < directories_1.length; _i++) {
- var rulesDirectory = directories_1[_i];
- if (rulesDirectory != null) {
- Rule = loadRule(rulesDirectory, camelizedName);
- if (Rule != null) {
- return Rule;
- }
- var subDirectory = underscore_string_1.strLeft(rulesDirectory, "-");
- var ruleName = underscore_string_1.strRight(rulesDirectory, "-");
- if (subDirectory !== rulesDirectory && ruleName !== rulesDirectory) {
- camelizedName = transformName(ruleName);
- Rule = loadRule(rulesDirectory, subDirectory, camelizedName);
- if (Rule != null) {
- return Rule;
- }
- }
- }
- }
- return undefined;
- }
- exports.findRule = findRule;
- function transformName(name) {
- var nameMatch = name.match(/^([-_]*)(.*?)([-_]*)$/);
- if (nameMatch == null) {
- return name + "Rule";
- }
- return nameMatch[1] + underscore_string_1.camelize(nameMatch[2]) + nameMatch[3] + "Rule";
- }
- function loadRule() {
- var paths = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- paths[_i - 0] = arguments[_i];
- }
- var rulePath = paths.reduce(function (p, c) { return path.join(p, c); }, "");
- var fullPath = path.resolve(moduleDirectory, rulePath);
- if (fs.existsSync(fullPath + ".js")) {
- var ruleModule = require(fullPath);
- if (ruleModule && ruleModule.Rule) {
- return ruleModule.Rule;
- }
- }
- return undefined;
- }
- function buildDisabledIntervalsFromSwitches(ruleSpecificList, allList) {
- var isCurrentlyDisabled = false;
- var disabledStartPosition;
- var disabledIntervalList = [];
- var i = 0;
- var j = 0;
- while (i < ruleSpecificList.length || j < allList.length) {
- var ruleSpecificTopPositon = (i < ruleSpecificList.length ? ruleSpecificList[i].position : Infinity);
- var allTopPositon = (j < allList.length ? allList[j].position : Infinity);
- var newPositionToCheck = void 0;
- if (ruleSpecificTopPositon < allTopPositon) {
- newPositionToCheck = ruleSpecificList[i];
- i++;
- }
- else {
- newPositionToCheck = allList[j];
- j++;
- }
- if (newPositionToCheck.isEnabled === isCurrentlyDisabled) {
- if (!isCurrentlyDisabled) {
- disabledStartPosition = newPositionToCheck.position;
- isCurrentlyDisabled = true;
- }
- else {
- disabledIntervalList.push({
- endPosition: newPositionToCheck.position,
- startPosition: disabledStartPosition
- });
- isCurrentlyDisabled = false;
- }
- }
- }
- if (isCurrentlyDisabled) {
- disabledIntervalList.push({
- endPosition: Infinity,
- startPosition: disabledStartPosition
- });
- }
- return disabledIntervalList;
- }
|