projen
Version:
CDK for software projects
111 lines • 12.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.IgnoreFile = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const file_1 = require("./file");
const util_1 = require("./util");
class IgnoreFile extends file_1.FileBase {
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.IgnoreFile", version: "0.103.12" };
_patterns;
filterCommentLines;
filterEmptyLines;
/**
*
* @param project The project to tie this file to.
* @param filePath - the relative path in the project to put the file
* @param minify - whether comments/blank lines should be filtered
*/
constructor(project, filePath, options) {
super(project, filePath, { editGitignore: filePath !== ".gitignore" });
this.filterCommentLines = options?.filterCommentLines ?? true;
this.filterEmptyLines = options?.filterEmptyLines ?? true;
this._patterns = options?.ignorePatterns ?? [];
}
/**
* Add ignore patterns. Files that match this pattern will be ignored. If the
* pattern starts with a negation mark `!`, files that match will _not_ be
* ignored.
*
* Comment lines (start with `#`) and blank lines ("") are filtered by default
* but can be included using options specified when instantiating the component.
*
* @param patterns Ignore patterns.
*/
addPatterns(...patterns) {
for (const pattern of patterns) {
const isComment = pattern.startsWith("#");
const isEmptyLine = Boolean(pattern.trim().length === 0);
if (isComment && this.filterCommentLines) {
continue;
}
if (isEmptyLine && this.filterEmptyLines) {
continue;
}
if (!isComment && !isEmptyLine) {
this.normalizePatterns(pattern);
}
const normalizedPattern = (0, util_1.normalizePersistedPath)(pattern);
this._patterns.push(normalizedPattern);
}
}
normalizePatterns(pattern) {
const opposite = pattern.startsWith("!") ? pattern.slice(1) : "!" + pattern;
remove(this._patterns, pattern); // prevent duplicates
remove(this._patterns, opposite);
if (pattern.endsWith("/")) {
const prefix = opposite;
for (const p of [...this._patterns]) {
if (p.startsWith(prefix)) {
remove(this._patterns, p);
}
}
}
}
/**
* Removes patterns previously added from the ignore file.
*
* If `addPattern()` is called after this, the pattern will be added again.
*
* @param patterns patters to remove.
*/
removePatterns(...patterns) {
for (const p of patterns) {
remove(this._patterns, p);
}
}
/**
* Ignore the files that match these patterns.
* @param patterns The patterns to match.
*/
exclude(...patterns) {
return this.addPatterns(...patterns);
}
/**
* Always include the specified file patterns.
* @param patterns Patterns to include in git commits.
*/
include(...patterns) {
for (let pattern of patterns) {
if (!pattern.startsWith("!")) {
pattern = "!" + pattern;
}
this.addPatterns(pattern);
}
}
synthesizeContent(resolver) {
const lines = [
...(this.marker ? [`# ${this.marker}`] : []),
...this._patterns,
];
return `${resolver.resolve(lines).join("\n")}\n`;
}
}
exports.IgnoreFile = IgnoreFile;
// O(n) hooray!
function remove(arr, value) {
const idx = arr.indexOf(value);
if (idx >= 0) {
arr.splice(idx, 1);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWdub3JlLWZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaWdub3JlLWZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLGlDQUFrQztBQUVsQyxpQ0FBZ0Q7QUF5QmhELE1BQWEsVUFBVyxTQUFRLGVBQVE7O0lBQ3JCLFNBQVMsQ0FBVztJQUNyQixrQkFBa0IsQ0FBVTtJQUM1QixnQkFBZ0IsQ0FBVTtJQUUxQzs7Ozs7T0FLRztJQUNILFlBQVksT0FBZ0IsRUFBRSxRQUFnQixFQUFFLE9BQTJCO1FBQ3pFLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsYUFBYSxFQUFFLFFBQVEsS0FBSyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLEVBQUUsa0JBQWtCLElBQUksSUFBSSxDQUFDO1FBQzlELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLEVBQUUsZ0JBQWdCLElBQUksSUFBSSxDQUFDO1FBQzFELElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxFQUFFLGNBQWMsSUFBSSxFQUFFLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLFdBQVcsQ0FBQyxHQUFHLFFBQWtCO1FBQ3RDLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7WUFDL0IsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN6RCxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDekMsU0FBUztZQUNYLENBQUM7WUFDRCxJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDekMsU0FBUztZQUNYLENB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bnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBJUmVzb2x2ZXIgfSBmcm9tIFwiLi9maWxlXCI7XG5pbXBvcnQgeyBGaWxlQmFzZSB9IGZyb20gXCIuL2ZpbGVcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCB9IGZyb20gXCIuL3Byb2plY3RcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZVBlcnNpc3RlZFBhdGggfSBmcm9tIFwiLi91dGlsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWdub3JlRmlsZU9wdGlvbnMge1xuICAvKipcbiAgICogRmlsdGVyIG91dCBjb21tZW50IGxpbmVzP1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBmaWx0ZXJDb21tZW50TGluZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBGaWx0ZXIgb3V0IGJsYW5rL2VtcHR5IGxpbmVzP1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBmaWx0ZXJFbXB0eUxpbmVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUGF0dGVybnMgdG8gYWRkIHRvIHRoZSBpZ25vcmUgZmlsZVxuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlUGF0dGVybnM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNsYXNzIElnbm9yZUZpbGUgZXh0ZW5kcyBGaWxlQmFzZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhdHRlcm5zOiBzdHJpbmdbXTtcbiAgcHVibGljIHJlYWRvbmx5IGZpbHRlckNvbW1lbnRMaW5lczogYm9vbGVhbjtcbiAgcHVibGljIHJlYWRvbmx5IGZpbHRlckVtcHR5TGluZXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0IHRvIHRpZSB0aGlzIGZpbGUgdG8uXG4gICAqIEBwYXJhbSBmaWxlUGF0aCAtIHRoZSByZWxhdGl2ZSBwYXRoIGluIHRoZSBwcm9qZWN0IHRvIHB1dCB0aGUgZmlsZVxuICAgKiBAcGFyYW0gbWluaWZ5IC0gd2hldGhlciBjb21tZW50cy9ibGFuayBsaW5lcyBzaG91bGQgYmUgZmlsdGVyZWRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIGZpbGVQYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiBJZ25vcmVGaWxlT3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QsIGZpbGVQYXRoLCB7IGVkaXRHaXRpZ25vcmU6IGZpbGVQYXRoICE9PSBcIi5naXRpZ25vcmVcIiB9KTtcbiAgICB0aGlzLmZpbHRlckNvbW1lbnRMaW5lcyA9IG9wdGlvbnM/LmZpbHRlckNvbW1lbnRMaW5lcyA/PyB0cnVlO1xuICAgIHRoaXMuZmlsdGVyRW1wdHlMaW5lcyA9IG9wdGlvbnM/LmZpbHRlckVtcHR5TGluZXMgPz8gdHJ1ZTtcbiAgICB0aGlzLl9wYXR0ZXJucyA9IG9wdGlvbnM/Lmlnbm9yZVBhdHRlcm5zID8/IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBpZ25vcmUgcGF0dGVybnMuIEZpbGVzIHRoYXQgbWF0Y2ggdGhpcyBwYXR0ZXJuIHdpbGwgYmUgaWdub3JlZC4gSWYgdGhlXG4gICAqIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBuZWdhdGlvbiBtYXJrIGAhYCwgZmlsZXMgdGhhdCBtYXRjaCB3aWxsIF9ub3RfIGJlXG4gICAqIGlnbm9yZWQuXG4gICAqXG4gICAqIENvbW1lbnQgbGluZXMgKHN0YXJ0IHdpdGggYCNgKSBhbmQgYmxhbmsgbGluZXMgKFwiXCIpIGFyZSBmaWx0ZXJlZCBieSBkZWZhdWx0XG4gICAqIGJ1dCBjYW4gYmUgaW5jbHVkZWQgdXNpbmcgb3B0aW9ucyBzcGVjaWZpZWQgd2hlbiBpbnN0YW50aWF0aW5nIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXR0ZXJucyBJZ25vcmUgcGF0dGVybnMuXG4gICAqL1xuICBwdWJsaWMgYWRkUGF0dGVybnMoLi4ucGF0dGVybnM6IHN0cmluZ1tdKSB7XG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgICBjb25zdCBpc0NvbW1lbnQgPSBwYXR0ZXJuLnN0YXJ0c1dpdGgoXCIjXCIpO1xuICAgICAgY29uc3QgaXNFbXB0eUxpbmUgPSBCb29sZWFuKHBhdHRlcm4udHJpbSgpLmxlbmd0aCA9PT0gMCk7XG4gICAgICBpZiAoaXNDb21tZW50ICYmIHRoaXMuZmlsdGVyQ29tbWVudExpbmVzKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzRW1wdHlMaW5lICYmIHRoaXMuZmlsdGVyRW1wdHlMaW5lcykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNDb21tZW50ICYmICFpc0VtcHR5TGluZSkge1xuICAgICAgICB0aGlzLm5vcm1hbGl6ZVBhdHRlcm5zKHBhdHRlcm4pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkUGF0dGVybiA9IG5vcm1hbGl6ZVBlcnNpc3RlZFBhdGgocGF0dGVybik7XG5cbiAgICAgIHRoaXMuX3BhdHRlcm5zLnB1c2gobm9ybWFsaXplZFBhdHRlcm4pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplUGF0dGVybnMocGF0dGVybjogc3RyaW5nKSB7XG4gICAgY29uc3Qgb3Bwb3NpdGUgPSBwYXR0ZXJuLnN0YXJ0c1dpdGgoXCIhXCIpID8gcGF0dGVybi5zbGljZSgxKSA6IFwiIVwiICsgcGF0dGVybjtcbiAgICByZW1vdmUodGhpcy5fcGF0dGVybnMsIHBhdHRlcm4pOyAvLyBwcmV2ZW50IGR1cGxpY2F0ZXNcbiAgICByZW1vdmUodGhpcy5fcGF0dGVybnMsIG9wcG9zaXRlKTtcblxuICAgIGlmIChwYXR0ZXJuLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgICAgY29uc3QgcHJlZml4ID0gb3Bwb3NpdGU7XG4gICAgICBmb3IgKGNvbnN0IHAgb2YgWy4uLnRoaXMuX3BhdHRlcm5zXSkge1xuICAgICAgICBpZiAocC5zdGFydHNXaXRoKHByZWZpeCkpIHtcbiAgICAgICAgICByZW1vdmUodGhpcy5fcGF0dGVybnMsIHApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgcGF0dGVybnMgcHJldmlvdXNseSBhZGRlZCBmcm9tIHRoZSBpZ25vcmUgZmlsZS5cbiAgICpcbiAgICogSWYgYGFkZFBhdHRlcm4oKWAgaXMgY2FsbGVkIGFmdGVyIHRoaXMsIHRoZSBwYXR0ZXJuIHdpbGwgYmUgYWRkZWQgYWdhaW4uXG4gICAqXG4gICAqIEBwYXJhbSBwYXR0ZXJucyBwYXR0ZXJzIHRvIHJlbW92ZS5cbiAgICovXG4gIHB1YmxpYyByZW1vdmVQYXR0ZXJucyguLi5wYXR0ZXJuczogc3RyaW5nW10pIHtcbiAgICBmb3IgKGNvbnN0IHAgb2YgcGF0dGVybnMpIHtcbiAgICAgIHJlbW92ZSh0aGlzLl9wYXR0ZXJucywgcCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElnbm9yZSB0aGUgZmlsZXMgdGhhdCBtYXRjaCB0aGVzZSBwYXR0ZXJucy5cbiAgICogQHBhcmFtIHBhdHRlcm5zIFRoZSBwYXR0ZXJucyB0byBtYXRjaC5cbiAgICovXG4gIHB1YmxpYyBleGNsdWRlKC4uLnBhdHRlcm5zOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiB0aGlzLmFkZFBhdHRlcm5zKC4uLnBhdHRlcm5zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbHdheXMgaW5jbHVkZSB0aGUgc3BlY2lmaWVkIGZpbGUgcGF0dGVybnMuXG4gICAqIEBwYXJhbSBwYXR0ZXJucyBQYXR0ZXJucyB0byBpbmNsdWRlIGluIGdpdCBjb21taXRzLlxuICAgKi9cbiAgcHVibGljIGluY2x1ZGUoLi4ucGF0dGVybnM6IHN0cmluZ1tdKSB7XG4gICAgZm9yIChsZXQgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgICAgaWYgKCFwYXR0ZXJuLnN0YXJ0c1dpdGgoXCIhXCIpKSB7XG4gICAgICAgIHBhdHRlcm4gPSBcIiFcIiArIHBhdHRlcm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWRkUGF0dGVybnMocGF0dGVybik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHN5bnRoZXNpemVDb250ZW50KHJlc29sdmVyOiBJUmVzb2x2ZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgLi4uKHRoaXMubWFya2VyID8gW2AjICR7dGhpcy5tYXJrZXJ9YF0gOiBbXSksXG4gICAgICAuLi50aGlzLl9wYXR0ZXJucyxcbiAgICBdO1xuXG4gICAgcmV0dXJuIGAke3Jlc29sdmVyLnJlc29sdmUobGluZXMpLmpvaW4oXCJcXG5cIil9XFxuYDtcbiAgfVxufVxuXG4vLyBPKG4pIGhvb3JheSFcbmZ1bmN0aW9uIHJlbW92ZTxUPihhcnI6IFRbXSwgdmFsdWU6IGFueSkge1xuICBjb25zdCBpZHggPSBhcnIuaW5kZXhPZih2YWx1ZSk7XG4gIGlmIChpZHggPj0gMCkge1xuICAgIGFyci5zcGxpY2UoaWR4LCAxKTtcbiAgfVxufVxuIl19