UNPKG

projen

Version:

CDK for software projects

111 lines • 12.9 kB
"use strict"; 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