UNPKG

tslint-lerna-rules

Version:

TSLint rules for Lerna repos

71 lines 5.19 kB
"use strict"; 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=