UNPKG

dependency-cruiser

Version:

Validate and visualize dependencies. With your rules. JavaScript, TypeScript, CoffeeScript. ES6, CommonJS, AMD.

166 lines (154 loc) 5.14 kB
import type { SeverityType, RuleScopeType } from "./shared-types.mjs"; import type { IBaseRestrictionType, IFromRestriction, IToRestriction, IReachabilityToRestrictionType, IRequiredToRestrictionType, IDependentsModuleRestrictionType, } from "./restrictions.mjs"; interface IBaseRuleType { /** * A short name for the rule - will appear in reporters to enable customers to * quickly identify a violated rule. Try to keep them short, eslint style. * E.g. 'not-to-core' for a rule forbidding dependencies on core modules, or * 'not-to-unresolvable' for one that prevents dependencies on modules that * probably don't exist. */ name?: string; /** * How severe a violation of the rule is. The 'error' severity will make some * reporters return a non-zero exit code, so if you want e.g. a build to stop * when there's a rule violated: use that. */ severity?: SeverityType; /** * You can use this field to document why the rule is there. */ comment?: string; } export interface IRegularForbiddenRuleType extends IBaseRuleType { /** * Criteria the 'from' end of a dependency should match to be caught by this * rule. Leave it empty if you want any module to be matched. */ from: IFromRestriction; /** * Criteria the 'to' end of a dependency should match to be caught by this * rule. Leave it empty if you want any module to be matched. */ to: IToRestriction; /** * What to apply the rule to - modules (the default) or folders. Switching * the scope to 'folder' can be useful in rules where this makes a difference * like those regarding circular dependencies or instability. * Only the to.moreUnstable, to.circular, and path (both from and to) * attributes work at the moment. Other attributes will follow suit in later * releases (depending on demand). */ scope?: RuleScopeType; } export interface IReachabilityForbiddenRuleType extends IBaseRuleType { /** * Criteria the 'from' end of a dependency should match to be caught by this * rule. Leave it empty if you want any module to be matched. */ from: IBaseRestrictionType; /** * Criteria the 'to' end of a dependency should match to be caught by this * rule. Leave it empty if you want any module to be matched. */ to: IReachabilityToRestrictionType; } export interface IDependentsForbiddenRuleType extends IBaseRuleType { /** * Criteria to select the module(s) this restriction should apply to */ module: IDependentsModuleRestrictionType; /** * Criteria at least one dependency of each matching module must * adhere to. */ from: IBaseRestrictionType; } export interface IReachabilityAllowedRuleType { /** * You can use this field to document why the rule is there. */ comment?: string; /** * Criteria the 'from' end of a dependency should match to be caught by this rule. * Leave it empty if you want any module to be matched. */ from: IBaseRestrictionType; /** * Criteria the 'to' end of a dependency should match to be caught by this rule. * Leave it empty if you want any module to be matched. */ to: IReachabilityToRestrictionType; } export type IForbiddenRuleType = | IRegularForbiddenRuleType | IReachabilityForbiddenRuleType | IDependentsForbiddenRuleType; export interface IRequiredRuleType extends IBaseRuleType { /** * Criteria to select the module(s) this restriction should apply to */ module: IBaseRestrictionType; /** * Criteria at least one dependency of each matching module must * adhere to. */ to: IRequiredToRestrictionType; } export interface IRegularAllowedRuleType { /** * You can use this field to document why the rule is there. */ comment?: string; /** * Criteria the 'from' end of a dependency should match to be caught by this rule. * Leave it empty if you want any module to be matched. */ from: IFromRestriction; /** * Criteria the 'to' end of a dependency should match to be caught by this rule. * Leave it empty if you want any module to be matched. */ to: IToRestriction; } export type IAllowedRuleType = | IRegularAllowedRuleType | IReachabilityAllowedRuleType; export type IAnyRuleType = | IForbiddenRuleType | IAllowedRuleType | IRequiredRuleType; export interface IFlattenedRuleSet { /** * A list of rules that describe dependencies that are not allowed. * dependency-cruiser will emit a separate error (warning/ informational) * messages for each violated rule. */ forbidden?: IForbiddenRuleType[]; /** * A list of rules that describe dependencies that are allowed. * dependency-cruiser will emit the warning message 'not-in-allowed' for * each dependency that does not at least one of them. */ allowed?: IAllowedRuleType[]; /** * Severity to use when a dependency is not in the 'allowed' set of rules. * Defaults to 'warn' */ allowedSeverity?: SeverityType; /** * A list of rules that describe what dependencies modules _must_ have. * E.g. * - every controller needs to (directly) depend on a base controller. * - each source file should be the dependency of a spec file with the same * base name */ required?: IRequiredRuleType[]; }