dependency-cruiser
Version:
Validate and visualize dependencies. With your rules. JavaScript, TypeScript, CoffeeScript. ES6, CommonJS, AMD.
217 lines (215 loc) • 9.94 kB
JSON
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "dependency-cruiser rule set",
"description": "A set of properties describing what dependencies are forbidden and what dependencies are allowed.",
"type": "object",
"additionalProperties": false,
"properties": {
"forbidden": {
"type": "array",
"description": "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.",
"items": {
"$ref": "#/definitions/ForiddenRuleType"
}
},
"allowed": {
"type": "array",
"description": "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 meet one of them.",
"items": {
"$ref" :"#/definitions/RuleType"
}
},
"allowedSeverity": {
"$ref": "#/definitions/SeverityType",
"description": "Severity to use when a dependency is not in the 'allowed' set of rules. Defaults to 'warn'"
},
"options": {
"type": "object",
"description": "Runtime configuration options",
"additionalProperties": false,
"properties": {
"doNotFollow": {
"type": "string",
"description": "a regular expression for modules to include, but not follow further"
},
"exclude": {
"type": "string",
"description": "a regular expression for excluding modules"
},
"moduleSystems": {
"type": "array",
"description": "list of module systems to cruise. Defaults to [amd, cjs, es6]",
"items": {
"type": "string",
"enum": [
"amd",
"cjs",
"es6",
"tsd"
]
}
},
"prefix": {
"type": "string"
},
"tsPreCompilationDeps": {
"type": "boolean",
"description": "if true detect dependencies that only exist before typescript-to-javascript compilation."
},
"preserveSymlinks": {
"type": "boolean",
"description": "if true leave symlinks untouched, otherwise use the realpath. Defaults to `false` (which is also nodejs's default behavior since version 6)"
},
"webpackConfig": {
"type": "object",
"additionalProperties": false,
"description": "Webpack configuration to use to get resolve options from",
"properties": {
"fileName": {
"type": "string",
"description": "The webpack conf file to use (typically something like 'webpack.conf.js')"
},
"env": {
"description": "Environment to pass if your config file returns a function",
"oneOf": [{
"type": "object"
}, {
"type": "string"
}]
},
"arguments": {
"type": "object",
"description": "Arguments to pass if your config file returns a function. E.g. {mode: 'production'} if you want to use webpack 4's 'mode' feature"
}
}
}
}
}
},
"definitions": {
"RuleType": {
"type": "object",
"required": [ "from", "to" ],
"additionalProperties": false,
"properties": {
"comment" : {
"type": "string"
},
"from": {
"$ref": "#/definitions/FromRestrictionType"
},
"to": {
"$ref": "#/definitions/ToRestrictionType"
}
}
},
"ForiddenRuleType": {
"type": "object",
"required": [ "from", "to" ],
"additionalProperties": false,
"properties": {
"name": {
"type": "string",
"description": "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."
},
"severity": { "$ref": "#/definitions/SeverityType"},
"comment": {
"type": "string",
"description": "You can use this field to document why the rule is there."
},
"from": {
"$ref": "#/definitions/FromRestrictionType"
},
"to": {
"$ref": "#/definitions/ToRestrictionType"
}
}
},
"FromRestrictionType": {
"type": "object",
"description": "Criteria an end of a dependency should match to be caught by this rule. Leave it empty if you want any module to be matched.",
"additionalProperties": false,
"properties": {
"path": {
"type": "string",
"description": "A regular expression an end of a dependency should match to be catched by this rule."
},
"pathNot": {
"type": "string",
"description": "A regular expression an end of a dependency should NOT match to be catched by this rule."
},
"orphan": {
"type": "boolean",
"description": "Whether or not to match when the module is an orphan (= has no incoming or outgoing dependencies). When this property it is part of a rule, dependency-cruiser will ignore the 'to' part."
}
}
},
"ToRestrictionType": {
"type": "object",
"description": "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.",
"additionalProperties": false,
"properties" : {
"path": {
"type": "string",
"description": "A regular expression an end of a dependency should match to be catched by this rule."
},
"pathNot": {
"type": "string",
"description": "A regular expression an end of a dependency should NOT match to be catched by this rule."
},
"couldNotResolve": {
"type": "boolean",
"description": "Whether or not to match modules dependency-cruiser could not resolve (and probably aren't on disk). For this one too: leave out if you don't care either way."
},
"circular": {
"type": "boolean",
"description": "Whether or not to match when following to the to will ultimately end up in the from."
},
"dependencyTypes": {
"type": "array",
"description": "Whether or not to match modules of any of these types (leaving out matches any of them)",
"items": { "$ref": "#/definitions/DependencyType" }
},
"moreThanOneDependencyType": {
"type": "boolean",
"description": "If true matches dependencies with more than one dependency type (e.g. defined in _both_ npm and npm-dev)"
},
"license": {
"type": "string",
"description": "Whether or not to match modules that were released under one of the mentioned licenses. E.g. to flag GPL-1.0, GPL-2.0 licensed modules (e.g. because your app is not compatible with the GPL) use \"GPL\""
},
"licenseNot": {
"type": "string",
"description": "Whether or not to match modules that were NOT released under one of the mentioned licenses. E.g. to flag everyting non MIT use \"MIT\" here"
}
}
},
"SeverityType": {
"type": "string",
"description": "How severe a violation of a 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.",
"enum": [
"error",
"warn",
"info"
]
},
"DependencyType": {
"type": "string",
"enum": [
"aliased",
"core",
"deprecated",
"local",
"npm",
"npm-bundled",
"npm-dev",
"npm-no-pkg",
"npm-optional",
"npm-peer",
"npm-unknown",
"undetermined",
"unknown"
]
}
}
}