"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const Lint = require("tslint"); const sprintf_js_1 = require("sprintf-js"); const walkerFactory_1 = require("codelyzer/walkerFactory/walkerFactory"); const walkerFn_1 = require("codelyzer/walkerFactory/walkerFn"); const function_1 = require("codelyzer/util/function"); class Rule extends Lint.Rules.AbstractRule { static invalidName(className) { var whiteList = ['ActivitiContentComponent', 'ActivitiForm']; var classNameReg = /^(alfresco|activiti|adf|activity)/ig; var classNameMatch = classNameReg.exec(className); var isWhiteListName = whiteList.find((currentWhiteListName) => { return currentWhiteListName === className; }); if (classNameMatch && !isWhiteListName) { return true; } return false; } apply(sourceFile) { return this.applyWithWalker(Rule.walkerBuilder(sourceFile, this.getOptions())); } } Rule.metadata = { ruleName: 'adf-class-name', type: 'maintainability', description: `Enforce consistent name avoid prefix`, descriptionDetails: `See more at https://angular.io/styleguide#style-05-13.`, rationale: `Consistent conventions make it easy to quickly identify class when you search with autocomplete.`, options: null, optionsDescription: "Not configurable.", typescriptOnly: true, }; Rule.FAILURE_STRING = 'The name of the class should not start with ADF Alfresco or Activiti prefix '; Rule.walkerBuilder = walkerFn_1.all(walkerFn_1.validateComponent((meta, suffixList) => function_1.Maybe.lift(meta.controller) .fmap(controller => controller.name) .fmap(name => { const className = name.text; if (Rule.invalidName(className)) { return [new walkerFactory_1.Failure(name, sprintf_js_1.sprintf(Rule.FAILURE_STRING + className, className, suffixList))]; } }))); exports.Rule = Rule;