projen
Version:
CDK for software projects
110 lines • 12.7 kB
JavaScript
;
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.95.2" };
// O(n) hooray!
function remove(arr, value) {
const idx = arr.indexOf(value);
if (idx >= 0) {
arr.splice(idx, 1);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWdub3JlLWZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaWdub3JlLWZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpQ0FBNkM7QUFFN0MsaUNBQWdEO0FBeUJoRCxNQUFhLFVBQVcsU0FBUSxlQUFRO0lBS3RDOzs7OztPQUtHO0lBQ0gsWUFBWSxPQUFnQixFQUFFLFFBQWdCLEVBQUUsT0FBMkI7UUFDekUsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxhQUFhLEVBQUUsUUFBUSxLQUFLLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE9BQU8sRUFBRSxrQkFBa0IsSUFBSSxJQUFJLENBQUM7UUFDOUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxJQUFJLENBQUM7UUFDMUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksV0FBVyxDQUFDLEdBQUcsUUFBa0I7UUFDdEMsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUMvQixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3pELElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUN6QyxTQUFTO1lBQ1gsQ0FBQztZQUNELElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN6QyxTQUFTO1lBQ1gsQ0FBQztZQUNELElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFD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aWxlXCI7XG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSBcIi4vcHJvamVjdFwiO1xuaW1wb3J0IHsgbm9ybWFsaXplUGVyc2lzdGVkUGF0aCB9IGZyb20gXCIuL3V0aWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJZ25vcmVGaWxlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBGaWx0ZXIgb3V0IGNvbW1lbnQgbGluZXM/XG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGZpbHRlckNvbW1lbnRMaW5lcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZpbHRlciBvdXQgYmxhbmsvZW1wdHkgbGluZXM/XG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGZpbHRlckVtcHR5TGluZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBQYXR0ZXJucyB0byBhZGQgdG8gdGhlIGlnbm9yZSBmaWxlXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVQYXR0ZXJucz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY2xhc3MgSWdub3JlRmlsZSBleHRlbmRzIEZpbGVCYXNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGF0dGVybnM6IHN0cmluZ1tdO1xuICBwdWJsaWMgcmVhZG9ubHkgZmlsdGVyQ29tbWVudExpbmVzOiBib29sZWFuO1xuICBwdWJsaWMgcmVhZG9ubHkgZmlsdGVyRW1wdHlMaW5lczogYm9vbGVhbjtcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHByb2plY3QgVGhlIHByb2plY3QgdG8gdGllIHRoaXMgZmlsZSB0by5cbiAgICogQHBhcmFtIGZpbGVQYXRoIC0gdGhlIHJlbGF0aXZlIHBhdGggaW4gdGhlIHByb2plY3QgdG8gcHV0IHRoZSBmaWxlXG4gICAqIEBwYXJhbSBtaW5pZnkgLSB3aGV0aGVyIGNvbW1lbnRzL2JsYW5rIGxpbmVzIHNob3VsZCBiZSBmaWx0ZXJlZFxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgZmlsZVBhdGg6IHN0cmluZywgb3B0aW9ucz86IElnbm9yZUZpbGVPcHRpb25zKSB7XG4gICAgc3VwZXIocHJvamVjdCwgZmlsZVBhdGgsIHsgZWRpdEdpdGlnbm9yZTogZmlsZVBhdGggIT09IFwiLmdpdGlnbm9yZVwiIH0pO1xuICAgIHRoaXMuZmlsdGVyQ29tbWVudExpbmVzID0gb3B0aW9ucz8uZmlsdGVyQ29tbWVudExpbmVzID8/IHRydWU7XG4gICAgdGhpcy5maWx0ZXJFbXB0eUxpbmVzID0gb3B0aW9ucz8uZmlsdGVyRW1wdHlMaW5lcyA/PyB0cnVlO1xuICAgIHRoaXMuX3BhdHRlcm5zID0gb3B0aW9ucz8uaWdub3JlUGF0dGVybnMgPz8gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGlnbm9yZSBwYXR0ZXJucy4gRmlsZXMgdGhhdCBtYXRjaCB0aGlzIHBhdHRlcm4gd2lsbCBiZSBpZ25vcmVkLiBJZiB0aGVcbiAgICogcGF0dGVybiBzdGFydHMgd2l0aCBhIG5lZ2F0aW9uIG1hcmsgYCFgLCBmaWxlcyB0aGF0IG1hdGNoIHdpbGwgX25vdF8gYmVcbiAgICogaWdub3JlZC5cbiAgICpcbiAgICogQ29tbWVudCBsaW5lcyAoc3RhcnQgd2l0aCBgI2ApIGFuZCBibGFuayBsaW5lcyAoXCJcIikgYXJlIGZpbHRlcmVkIGJ5IGRlZmF1bHRcbiAgICogYnV0IGNhbiBiZSBpbmNsdWRlZCB1c2luZyBvcHRpb25zIHNwZWNpZmllZCB3aGVuIGluc3RhbnRpYXRpbmcgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHBhdHRlcm5zIElnbm9yZSBwYXR0ZXJucy5cbiAgICovXG4gIHB1YmxpYyBhZGRQYXR0ZXJucyguLi5wYXR0ZXJuczogc3RyaW5nW10pIHtcbiAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgIGNvbnN0IGlzQ29tbWVudCA9IHBhdHRlcm4uc3RhcnRzV2l0aChcIiNcIik7XG4gICAgICBjb25zdCBpc0VtcHR5TGluZSA9IEJvb2xlYW4ocGF0dGVybi50cmltKCkubGVuZ3RoID09PSAwKTtcbiAgICAgIGlmIChpc0NvbW1lbnQgJiYgdGhpcy5maWx0ZXJDb21tZW50TGluZXMpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNFbXB0eUxpbmUgJiYgdGhpcy5maWx0ZXJFbXB0eUxpbmVzKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0NvbW1lbnQgJiYgIWlzRW1wdHlMaW5lKSB7XG4gICAgICAgIHRoaXMubm9ybWFsaXplUGF0dGVybnMocGF0dGVybik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXR0ZXJuID0gbm9ybWFsaXplUGVyc2lzdGVkUGF0aChwYXR0ZXJuKTtcblxuICAgICAgdGhpcy5fcGF0dGVybnMucHVzaChub3JtYWxpemVkUGF0dGVybik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVQYXR0ZXJucyhwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICBjb25zdCBvcHBvc2l0ZSA9IHBhdHRlcm4uc3RhcnRzV2l0aChcIiFcIikgPyBwYXR0ZXJuLnNsaWNlKDEpIDogXCIhXCIgKyBwYXR0ZXJuO1xuICAgIHJlbW92ZSh0aGlzLl9wYXR0ZXJucywgcGF0dGVybik7IC8vIHByZXZlbnQgZHVwbGljYXRlc1xuICAgIHJlbW92ZSh0aGlzLl9wYXR0ZXJucywgb3Bwb3NpdGUpO1xuXG4gICAgaWYgKHBhdHRlcm4uZW5kc1dpdGgoXCIvXCIpKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSBvcHBvc2l0ZTtcbiAgICAgIGZvciAoY29uc3QgcCBvZiBbLi4udGhpcy5fcGF0dGVybnNdKSB7XG4gICAgICAgIGlmIChwLnN0YXJ0c1dpdGgocHJlZml4KSkge1xuICAgICAgICAgIHJlbW92ZSh0aGlzLl9wYXR0ZXJucywgcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBwYXR0ZXJucyBwcmV2aW91c2x5IGFkZGVkIGZyb20gdGhlIGlnbm9yZSBmaWxlLlxuICAgKlxuICAgKiBJZiBgYWRkUGF0dGVybigpYCBpcyBjYWxsZWQgYWZ0ZXIgdGhpcywgdGhlIHBhdHRlcm4gd2lsbCBiZSBhZGRlZCBhZ2Fpbi5cbiAgICpcbiAgICogQHBhcmFtIHBhdHRlcm5zIHBhdHRlcnMgdG8gcmVtb3ZlLlxuICAgKi9cbiAgcHVibGljIHJlbW92ZVBhdHRlcm5zKC4uLnBhdHRlcm5zOiBzdHJpbmdbXSkge1xuICAgIGZvciAoY29uc3QgcCBvZiBwYXR0ZXJucykge1xuICAgICAgcmVtb3ZlKHRoaXMuX3BhdHRlcm5zLCBwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWdub3JlIHRoZSBmaWxlcyB0aGF0IG1hdGNoIHRoZXNlIHBhdHRlcm5zLlxuICAgKiBAcGFyYW0gcGF0dGVybnMgVGhlIHBhdHRlcm5zIHRvIG1hdGNoLlxuICAgKi9cbiAgcHVibGljIGV4Y2x1ZGUoLi4ucGF0dGVybnM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHRoaXMuYWRkUGF0dGVybnMoLi4ucGF0dGVybnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsd2F5cyBpbmNsdWRlIHRoZSBzcGVjaWZpZWQgZmlsZSBwYXR0ZXJucy5cbiAgICogQHBhcmFtIHBhdHRlcm5zIFBhdHRlcm5zIHRvIGluY2x1ZGUgaW4gZ2l0IGNvbW1pdHMuXG4gICAqL1xuICBwdWJsaWMgaW5jbHVkZSguLi5wYXR0ZXJuczogc3RyaW5nW10pIHtcbiAgICBmb3IgKGxldCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgICBpZiAoIXBhdHRlcm4uc3RhcnRzV2l0aChcIiFcIikpIHtcbiAgICAgICAgcGF0dGVybiA9IFwiIVwiICsgcGF0dGVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hZGRQYXR0ZXJucyhwYXR0ZXJuKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc3ludGhlc2l6ZUNvbnRlbnQocmVzb2x2ZXI6IElSZXNvbHZlcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbGluZXMgPSBbXG4gICAgICAuLi4odGhpcy5tYXJrZXIgPyBbYCMgJHt0aGlzLm1hcmtlcn1gXSA6IFtdKSxcbiAgICAgIC4uLnRoaXMuX3BhdHRlcm5zLFxuICAgIF07XG5cbiAgICByZXR1cm4gYCR7cmVzb2x2ZXIucmVzb2x2ZShsaW5lcykuam9pbihcIlxcblwiKX1cXG5gO1xuICB9XG59XG5cbi8vIE8obikgaG9vcmF5IVxuZnVuY3Rpb24gcmVtb3ZlPFQ+KGFycjogVFtdLCB2YWx1ZTogYW55KSB7XG4gIGNvbnN0IGlkeCA9IGFyci5pbmRleE9mKHZhbHVlKTtcbiAgaWYgKGlkeCA+PSAwKSB7XG4gICAgYXJyLnNwbGljZShpZHgsIDEpO1xuICB9XG59XG4iXX0=