tslint-lerna-rules
Version:
TSLint rules for Lerna repos
71 lines • 5.19 kB
JavaScript
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
}
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var Lint = require("tslint");
var tsutils_1 = require("tsutils");
var Fs = require("fs");
var Path = require("path");
var resolveFrom = require("resolve-from");
var Rule = (function (_super) {
__extends(Rule, _super);
function Rule() {
return _super !== null && _super.apply(this, arguments) || this;
}
Rule.prototype.apply = function (sourceFile) {
return this.applyWithFunction(sourceFile, walk, this.ruleArguments);
};
return Rule;
}(Lint.Rules.AbstractRule));
exports.Rule = Rule;
function walk(ctx) {
var fileBase = Path.resolve(Path.dirname(ctx.sourceFile.fileName));
var base = findPackageBase(fileBase);
for (var _i = 0, _a = tsutils_1.findImports(ctx.sourceFile, 63); _i < _a.length; _i++) {
var name = _a[_i];
var target = resolveFrom.silent(fileBase, name.text);
if (target === null) {
continue;
}
var isAbsolute = !name.text.startsWith('.') && !name.text.startsWith('/');
if (isAbsolute) {
continue;
}
if (isSubDirectory(target, base)) {
continue;
}
ctx.addFailure(name.getStart(ctx.sourceFile) + 1, name.end - 1, "Imports reaching out of of package root \"" + base + "\" are forbidden");
}
}
function findPackageBase(current) {
var prev;
do {
var fileName = Path.join(current, "package.json");
if (Fs.existsSync(fileName)) {
return Path.dirname(fileName);
}
prev = current;
current = Path.dirname(current);
} while (prev !== current);
return Path.dirname(current);
}
function isSubDirectory(candidate, parent) {
if (candidate === parent) {
return false;
}
var fragments = candidate.split(Path.sep);
return parent.split(Path.sep).every(function (t, i) { return fragments[i] === t; });
}
exports.isSubDirectory = isSubDirectory;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9SZWxhdGl2ZUltcG9ydFJ1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbm9SZWxhdGl2ZUltcG9ydFJ1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkJBQStCO0FBQy9CLG1DQUFrRDtBQUVsRCx1QkFBeUI7QUFDekIsMkJBQTZCO0FBQzdCLDBDQUE0QztBQUU1QztJQUEwQix3QkFBdUI7SUFBakQ7O0lBSUEsQ0FBQztJQUhRLG9CQUFLLEdBQVosVUFBYSxVQUF5QjtRQUNwQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0gsV0FBQztBQUFELENBQUMsQUFKRCxDQUEwQixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FJaEQ7QUFKWSxvQkFBSTtBQU1qQixTQUFTLElBQUksQ0FBQyxHQUErQjtJQUMzQyxJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLElBQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUV2QyxLQUFtQixVQUEyQyxFQUEzQyxLQUFBLHFCQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsS0FBaUIsRUFBM0MsY0FBMkMsRUFBM0MsSUFBMkMsRUFBRTtRQUEzRCxJQUFNLElBQUksU0FBQTtRQUNiLElBQU0sTUFBTSxHQUFJLFdBQW1CLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFaEUsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFO1lBQ25CLFNBQVM7U0FDVjtRQUVELElBQU0sVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU1RSxJQUFJLFVBQVUsRUFBRTtZQUNkLFNBQVM7U0FDVjtRQUVELElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNoQyxTQUFTO1NBQ1Y7UUFFRCxHQUFHLENBQUMsVUFBVSxDQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFDakMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQ1osK0NBQTRDLElBQUkscUJBQWlCLENBQ2xFLENBQUM7S0FDSDtBQUNILENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxPQUFlO0lBQ3RDLElBQUksSUFBWSxDQUFDO0lBQ2pCLEdBQUc7UUFDRCxJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNwRCxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDM0IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsSUFBSSxHQUFHLE9BQU8sQ0FBQztRQUNmLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ2pDLFFBQVEsSUFBSSxLQUFLLE9BQU8sRUFBRTtJQUUzQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxTQUFpQixFQUFFLE1BQWM7SUFDOUQsSUFBSSxTQUFTLEtBQUssTUFBTSxFQUFFO1FBQ3hCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxJQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFDLENBQUMsRUFBRSxDQUFDLElBQUssT0FBQSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFsQixDQUFrQixDQUFDLENBQUE7QUFDbkUsQ0FBQztBQVBELHdDQU9DIn0=
;