UNPKG

projen

Version:

CDK for software projects

110 lines 12.8 kB
"use strict"; var _a; 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 { /** * * @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; _a = JSII_RTTI_SYMBOL_1; IgnoreFile[_a] = { fqn: "projen.IgnoreFile", version: "0.99.51" }; // O(n) hooray! function remove(arr, value) { const idx = arr.indexOf(value); if (idx >= 0) { arr.splice(idx, 1); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWdub3JlLWZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaWdub3JlLWZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxpQ0FBa0M7QUFFbEMsaUNBQWdEO0FBeUJoRCxNQUFhLFVBQVcsU0FBUSxlQUFRO0lBS3RDOzs7OztPQUtHO0lBQ0gsWUFBWSxPQUFnQixFQUFFLFFBQWdCLEVBQUUsT0FBMkI7UUFDekUsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxhQUFhLEVBQUUsUUFBUSxLQUFLLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE9BQU8sRUFBRSxrQkFBa0IsSUFBSSxJQUFJLENBQUM7UUFDOUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxJQUFJLENBQUM7UUFDMUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksV0FBVyxDQUFDLEdBQUcsUUFBa0I7UUFDdEMsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUMvQixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3pELElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUN6QyxTQUFTO1lBQ1gsQ0FBQztZQUNELElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN6QyxTQUFTO1lBQ1gsQ0FBQztZQUNELElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFD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O1xuaW1wb3J0IHsgRmlsZUJhc2UgfSBmcm9tIFwiLi9maWxlXCI7XG5pbXBvcnQgdHlwZSB7IFByb2plY3QgfSBmcm9tIFwiLi9wcm9qZWN0XCI7XG5pbXBvcnQgeyBub3JtYWxpemVQZXJzaXN0ZWRQYXRoIH0gZnJvbSBcIi4vdXRpbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElnbm9yZUZpbGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIEZpbHRlciBvdXQgY29tbWVudCBsaW5lcz9cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyQ29tbWVudExpbmVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRmlsdGVyIG91dCBibGFuay9lbXB0eSBsaW5lcz9cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyRW1wdHlMaW5lcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBhdHRlcm5zIHRvIGFkZCB0byB0aGUgaWdub3JlIGZpbGVcbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZVBhdHRlcm5zPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBJZ25vcmVGaWxlIGV4dGVuZHMgRmlsZUJhc2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYXR0ZXJuczogc3RyaW5nW107XG4gIHB1YmxpYyByZWFkb25seSBmaWx0ZXJDb21tZW50TGluZXM6IGJvb2xlYW47XG4gIHB1YmxpYyByZWFkb25seSBmaWx0ZXJFbXB0eUxpbmVzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdCB0byB0aWUgdGhpcyBmaWxlIHRvLlxuICAgKiBAcGFyYW0gZmlsZVBhdGggLSB0aGUgcmVsYXRpdmUgcGF0aCBpbiB0aGUgcHJvamVjdCB0byBwdXQgdGhlIGZpbGVcbiAgICogQHBhcmFtIG1pbmlmeSAtIHdoZXRoZXIgY29tbWVudHMvYmxhbmsgbGluZXMgc2hvdWxkIGJlIGZpbHRlcmVkXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBmaWxlUGF0aDogc3RyaW5nLCBvcHRpb25zPzogSWdub3JlRmlsZU9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0LCBmaWxlUGF0aCwgeyBlZGl0R2l0aWdub3JlOiBmaWxlUGF0aCAhPT0gXCIuZ2l0aWdub3JlXCIgfSk7XG4gICAgdGhpcy5maWx0ZXJDb21tZW50TGluZXMgPSBvcHRpb25zPy5maWx0ZXJDb21tZW50TGluZXMgPz8gdHJ1ZTtcbiAgICB0aGlzLmZpbHRlckVtcHR5TGluZXMgPSBvcHRpb25zPy5maWx0ZXJFbXB0eUxpbmVzID8/IHRydWU7XG4gICAgdGhpcy5fcGF0dGVybnMgPSBvcHRpb25zPy5pZ25vcmVQYXR0ZXJucyA/PyBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgaWdub3JlIHBhdHRlcm5zLiBGaWxlcyB0aGF0IG1hdGNoIHRoaXMgcGF0dGVybiB3aWxsIGJlIGlnbm9yZWQuIElmIHRoZVxuICAgKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEgbmVnYXRpb24gbWFyayBgIWAsIGZpbGVzIHRoYXQgbWF0Y2ggd2lsbCBfbm90XyBiZVxuICAgKiBpZ25vcmVkLlxuICAgKlxuICAgKiBDb21tZW50IGxpbmVzIChzdGFydCB3aXRoIGAjYCkgYW5kIGJsYW5rIGxpbmVzIChcIlwiKSBhcmUgZmlsdGVyZWQgYnkgZGVmYXVsdFxuICAgKiBidXQgY2FuIGJlIGluY2x1ZGVkIHVzaW5nIG9wdGlvbnMgc3BlY2lmaWVkIHdoZW4gaW5zdGFudGlhdGluZyB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGF0dGVybnMgSWdub3JlIHBhdHRlcm5zLlxuICAgKi9cbiAgcHVibGljIGFkZFBhdHRlcm5zKC4uLnBhdHRlcm5zOiBzdHJpbmdbXSkge1xuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgICAgY29uc3QgaXNDb21tZW50ID0gcGF0dGVybi5zdGFydHNXaXRoKFwiI1wiKTtcbiAgICAgIGNvbnN0IGlzRW1wdHlMaW5lID0gQm9vbGVhbihwYXR0ZXJuLnRyaW0oKS5sZW5ndGggPT09IDApO1xuICAgICAgaWYgKGlzQ29tbWVudCAmJiB0aGlzLmZpbHRlckNvbW1lbnRMaW5lcykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0VtcHR5TGluZSAmJiB0aGlzLmZpbHRlckVtcHR5TGluZXMpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQ29tbWVudCAmJiAhaXNFbXB0eUxpbmUpIHtcbiAgICAgICAgdGhpcy5ub3JtYWxpemVQYXR0ZXJucyhwYXR0ZXJuKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdHRlcm4gPSBub3JtYWxpemVQZXJzaXN0ZWRQYXRoKHBhdHRlcm4pO1xuXG4gICAgICB0aGlzLl9wYXR0ZXJucy5wdXNoKG5vcm1hbGl6ZWRQYXR0ZXJuKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVBhdHRlcm5zKHBhdHRlcm46IHN0cmluZykge1xuICAgIGNvbnN0IG9wcG9zaXRlID0gcGF0dGVybi5zdGFydHNXaXRoKFwiIVwiKSA/IHBhdHRlcm4uc2xpY2UoMSkgOiBcIiFcIiArIHBhdHRlcm47XG4gICAgcmVtb3ZlKHRoaXMuX3BhdHRlcm5zLCBwYXR0ZXJuKTsgLy8gcHJldmVudCBkdXBsaWNhdGVzXG4gICAgcmVtb3ZlKHRoaXMuX3BhdHRlcm5zLCBvcHBvc2l0ZSk7XG5cbiAgICBpZiAocGF0dGVybi5lbmRzV2l0aChcIi9cIikpIHtcbiAgICAgIGNvbnN0IHByZWZpeCA9IG9wcG9zaXRlO1xuICAgICAgZm9yIChjb25zdCBwIG9mIFsuLi50aGlzLl9wYXR0ZXJuc10pIHtcbiAgICAgICAgaWYgKHAuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgICAgcmVtb3ZlKHRoaXMuX3BhdHRlcm5zLCBwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHBhdHRlcm5zIHByZXZpb3VzbHkgYWRkZWQgZnJvbSB0aGUgaWdub3JlIGZpbGUuXG4gICAqXG4gICAqIElmIGBhZGRQYXR0ZXJuKClgIGlzIGNhbGxlZCBhZnRlciB0aGlzLCB0aGUgcGF0dGVybiB3aWxsIGJlIGFkZGVkIGFnYWluLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0dGVybnMgcGF0dGVycyB0byByZW1vdmUuXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlUGF0dGVybnMoLi4ucGF0dGVybnM6IHN0cmluZ1tdKSB7XG4gICAgZm9yIChjb25zdCBwIG9mIHBhdHRlcm5zKSB7XG4gICAgICByZW1vdmUodGhpcy5fcGF0dGVybnMsIHApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZ25vcmUgdGhlIGZpbGVzIHRoYXQgbWF0Y2ggdGhlc2UgcGF0dGVybnMuXG4gICAqIEBwYXJhbSBwYXR0ZXJucyBUaGUgcGF0dGVybnMgdG8gbWF0Y2guXG4gICAqL1xuICBwdWJsaWMgZXhjbHVkZSguLi5wYXR0ZXJuczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gdGhpcy5hZGRQYXR0ZXJucyguLi5wYXR0ZXJucyk7XG4gIH1cblxuICAvKipcbiAgICogQWx3YXlzIGluY2x1ZGUgdGhlIHNwZWNpZmllZCBmaWxlIHBhdHRlcm5zLlxuICAgKiBAcGFyYW0gcGF0dGVybnMgUGF0dGVybnMgdG8gaW5jbHVkZSBpbiBnaXQgY29tbWl0cy5cbiAgICovXG4gIHB1YmxpYyBpbmNsdWRlKC4uLnBhdHRlcm5zOiBzdHJpbmdbXSkge1xuICAgIGZvciAobGV0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgIGlmICghcGF0dGVybi5zdGFydHNXaXRoKFwiIVwiKSkge1xuICAgICAgICBwYXR0ZXJuID0gXCIhXCIgKyBwYXR0ZXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFkZFBhdHRlcm5zKHBhdHRlcm4pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzeW50aGVzaXplQ29udGVudChyZXNvbHZlcjogSVJlc29sdmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBsaW5lcyA9IFtcbiAgICAgIC4uLih0aGlzLm1hcmtlciA/IFtgIyAke3RoaXMubWFya2VyfWBdIDogW10pLFxuICAgICAgLi4udGhpcy5fcGF0dGVybnMsXG4gICAgXTtcblxuICAgIHJldHVybiBgJHtyZXNvbHZlci5yZXNvbHZlKGxpbmVzKS5qb2luKFwiXFxuXCIpfVxcbmA7XG4gIH1cbn1cblxuLy8gTyhuKSBob29yYXkhXG5mdW5jdGlvbiByZW1vdmU8VD4oYXJyOiBUW10sIHZhbHVlOiBhbnkpIHtcbiAgY29uc3QgaWR4ID0gYXJyLmluZGV4T2YodmFsdWUpO1xuICBpZiAoaWR4ID49IDApIHtcbiAgICBhcnIuc3BsaWNlKGlkeCwgMSk7XG4gIH1cbn1cbiJdfQ==