projen
Version:
CDK for software projects
128 lines • 14.3 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Biome = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const fast_json_patch_1 = require("fast-json-patch");
const component_1 = require("../../component");
const json_1 = require("../../json");
const util_1 = require("../../util");
/**
* Enabling VCS configuration by default.
*
* Note that this differs from `biome init`, as projen can be presumed to use version control
*/
const DEFAULT_CONFIG = {
vcs: {
clientKind: "git",
enabled: true,
useIgnoreFile: true,
},
files: {
ignoreUnknown: false,
},
};
/**
* Default linting configuration if linter is enabled.
*
* Ignores by default following patterns: '*.js', '*.d.ts', 'node_modules/', '*.generated.ts', 'coverage'.
*/
const DEFAULT_LINTER = {
linter: {
enabled: true,
rules: {
recommended: true,
},
// Default ignore's from Projen
ignore: [
"**/*.js",
"**/*.d.ts",
"**/node_modules/",
"**/*.generated.ts",
"**/coverage",
],
},
};
/**
* Default formatting configuration if formatter is enabled.
*/
const DEFAULT_FORMATTER = {
formatter: {
enabled: true,
indentStyle: "tab",
},
javascript: {
formatter: {
quoteStyle: "double",
},
},
};
/**
* Default formatting configuration if organize imports is enabled.
*/
const DEFAULT_ORGANIZE_IMPORTS = {
organizeImports: {
enabled: true,
},
};
class Biome extends component_1.Component {
static of(project) {
const isBiome = (c) => c instanceof Biome;
return project.components.find(isBiome);
}
constructor(project, options = {}) {
super(project);
this.biomeCommand = "biome check --write";
project.addDevDeps(`@biomejs/biome@${options.version ?? "^1"}`);
const defaultConfig = {
...DEFAULT_CONFIG,
...(options.linter ?? true ? DEFAULT_LINTER : {}),
...(options.formatter ?? false ? DEFAULT_FORMATTER : {}),
...(options.organizeImports ?? false ? DEFAULT_ORGANIZE_IMPORTS : {}),
};
this.biomeConfiguration = (0, util_1.deepMerge)([(0, fast_json_patch_1.deepClone)(defaultConfig), (0, fast_json_patch_1.deepClone)(options.biomeConfig ?? {})], { mergeArrays: options.mergeArraysInConfiguration ?? true });
this.file = new json_1.JsonFile(this, "biome.jsonc", {
obj: this.biomeConfiguration,
allowComments: true,
marker: true,
});
this._lintPatterns = new Set([]);
this.task = this.createLocalBiomeTask();
project.testTask.spawn(this.task);
}
/**
* Update the task with the current list of lint patterns and file extensions
*/
updateTask() {
const args = new Set();
for (const arg of this._lintPatterns) {
args.add(arg);
}
this.task.reset([
this.biomeCommand,
// Allow also external arguments
"$@",
...args,
].join(" "), {
args: this.task.steps[0].args,
});
}
addLintPattern(pattern) {
this._lintPatterns.add(pattern);
this.updateTask();
}
createLocalBiomeTask() {
return this.project.addTask("biome", {
description: "Runs Biome against the codebase",
steps: [
{
exec: this.biomeCommand,
},
],
});
}
}
exports.Biome = Biome;
_a = JSII_RTTI_SYMBOL_1;
Biome[_a] = { fqn: "projen.javascript.Biome", version: "0.93.0" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlvbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvamF2YXNjcmlwdC9iaW9tZS9iaW9tZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFEQUE0QztBQUU1QywrQ0FBNEM7QUFFNUMscUNBQXNDO0FBR3RDLHFDQUF1QztBQUV2Qzs7OztHQUlHO0FBQ0gsTUFBTSxjQUFjLEdBQTBDO0lBQzVELEdBQUcsRUFBRTtRQUNILFVBQVUsRUFBRSxLQUFLO1FBQ2pCLE9BQU8sRUFBRSxJQUFJO1FBQ2IsYUFBYSxFQUFFLElBQUk7S0FDcEI7SUFDRCxLQUFLLEVBQUU7UUFDTCxhQUFhLEVBQUUsS0FBSztLQUNyQjtDQUNGLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSxjQUFjLEdBQW1DO0lBQ3JELE1BQU0sRUFBRTtRQUNOLE9BQU8sRUFBRSxJQUFJO1FBQ2IsS0FBSyxFQUFFO1lBQ0wsV0FBVyxFQUFFLElBQUk7U0FDbEI7UUFDRCwrQkFBK0I7UUFDL0IsTUFBTSxFQUFFO1lBQ04sU0FBUztZQUNULFdBQVc7WUFDWCxrQkFBa0I7WUFDbEIsbUJBQW1CO1lBQ25CLGFBQWE7U0FDZDtLQUNGO0NBQ0YsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBcUQ7SUFDMUUsU0FBUyxFQUFFO1FBQ1QsT0FBTyxFQUFFLElBQUk7UUFDYixXQUFXLEVBQUUsS0FBSztLQUNuQjtJQUNELFVBQVUsRUFBRTtRQUNWLFNBQVMsRUFBRTtZQUNULFVBQVUsRUFBRSxRQUFRO1NBQ3JCO0tBQ0Y7Q0FDRixDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLHdCQUF3QixHQUE0QztJQUN4RSxlQUFlLEVBQUU7UUFDZixPQUFPLEVBQUUsSUFBSTtLQUNkO0NBQ0YsQ0FBQztBQTJDRixNQUFhLEtBQU0sU0FBUSxxQkFBUztJQUMzQixNQUFNLENBQUMsRUFBRSxDQUFDLE9BQWdCO1FBQy9CLE1BQU0sT0FBTyxHQUFHLENBQUMs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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVlcENsb25lIH0gZnJvbSBcImZhc3QtanNvbi1wYXRjaFwiO1xuaW1wb3J0IHR5cGUgeyBJQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuL2Jpb21lLWNvbmZpZ1wiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBOb2RlUHJvamVjdCB9IGZyb20gXCIuLi8uLi9qYXZhc2NyaXB0L25vZGUtcHJvamVjdFwiO1xuaW1wb3J0IHsgSnNvbkZpbGUgfSBmcm9tIFwiLi4vLi4vanNvblwiO1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSBcIi4uLy4uL3Byb2plY3RcIjtcbmltcG9ydCB0eXBlIHsgVGFzayB9IGZyb20gXCIuLi8uLi90YXNrXCI7XG5pbXBvcnQgeyBkZWVwTWVyZ2UgfSBmcm9tIFwiLi4vLi4vdXRpbFwiO1xuXG4vKipcbiAqIEVuYWJsaW5nIFZDUyBjb25maWd1cmF0aW9uIGJ5IGRlZmF1bHQuXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgZGlmZmVycyBmcm9tIGBiaW9tZSBpbml0YCwgYXMgcHJvamVuIGNhbiBiZSBwcmVzdW1lZCB0byB1c2UgdmVyc2lvbiBjb250cm9sXG4gKi9cbmNvbnN0IERFRkFVTFRfQ09ORklHOiBQaWNrPElDb25maWd1cmF0aW9uLCBcInZjc1wiIHwgXCJmaWxlc1wiPiA9IHtcbiAgdmNzOiB7XG4gICAgY2xpZW50S2luZDogXCJnaXRcIixcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIHVzZUlnbm9yZUZpbGU6IHRydWUsXG4gIH0sXG4gIGZpbGVzOiB7XG4gICAgaWdub3JlVW5rbm93bjogZmFsc2UsXG4gIH0sXG59O1xuXG4vKipcbiAqIERlZmF1bHQgbGludGluZyBjb25maWd1cmF0aW9uIGlmIGxpbnRlciBpcyBlbmFibGVkLlxuICpcbiAqIElnbm9yZXMgYnkgZGVmYXVsdCBmb2xsb3dpbmcgcGF0dGVybnM6ICcqLmpzJywgJyouZC50cycsICdub2RlX21vZHVsZXMvJywgJyouZ2VuZXJhdGVkLnRzJywgJ2NvdmVyYWdlJy5cbiAqL1xuY29uc3QgREVGQVVMVF9MSU5URVI6IFBpY2s8SUNvbmZpZ3VyYXRpb24sIFwibGludGVyXCI+ID0ge1xuICBsaW50ZXI6IHtcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIHJ1bGVzOiB7XG4gICAgICByZWNvbW1lbmRlZDogdHJ1ZSxcbiAgICB9LFxuICAgIC8vIERlZmF1bHQgaWdub3JlJ3MgZnJvbSBQcm9qZW5cbiAgICBpZ25vcmU6IFtcbiAgICAgIFwiKiovKi5qc1wiLFxuICAgICAgXCIqKi8qLmQudHNcIixcbiAgICAgIFwiKiovbm9kZV9tb2R1bGVzL1wiLFxuICAgICAgXCIqKi8qLmdlbmVyYXRlZC50c1wiLFxuICAgICAgXCIqKi9jb3ZlcmFnZVwiLFxuICAgIF0sXG4gIH0sXG59O1xuXG4vKipcbiAqIERlZmF1bHQgZm9ybWF0dGluZyBjb25maWd1cmF0aW9uIGlmIGZvcm1hdHRlciBpcyBlbmFibGVkLlxuICovXG5jb25zdCBERUZBVUxUX0ZPUk1BVFRFUjogUGljazxJQ29uZmlndXJhdGlvbiwgXCJmb3JtYXR0ZXJcIiB8IFwiamF2YXNjcmlwdFwiPiA9IHtcbiAgZm9ybWF0dGVyOiB7XG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBpbmRlbnRTdHlsZTogXCJ0YWJcIixcbiAgfSxcbiAgamF2YXNjcmlwdDoge1xuICAgIGZvcm1hdHRlcjoge1xuICAgICAgcXVvdGVTdHlsZTogXCJkb3VibGVcIixcbiAgICB9LFxuICB9LFxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGZvcm1hdHRpbmcgY29uZmlndXJhdGlvbiBpZiBvcmdhbml6ZSBpbXBvcnRzIGlzIGVuYWJsZWQuXG4gKi9cbmNvbnN0IERFRkFVTFRfT1JHQU5JWkVfSU1QT1JUUzogUGljazxJQ29uZmlndXJhdGlvbiwgXCJvcmdhbml6ZUltcG9ydHNcIj4gPSB7XG4gIG9yZ2FuaXplSW1wb3J0czoge1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gIH0sXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEJpb21lT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBWZXJzaW9uIG9mIEJpb21lIHRvIHVzZVxuICAgKlxuICAgKiBAZGVmYXVsdCBcIl4xXCJcbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBFbmFibGUgbGludGluZy4gUmVwbGFjZXMgRXNsaW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBib29sZWFuO1xuICAvKipcbiAgICogRW5hYmxlIGNvZGUgZm9ybWF0dGVyLiBSZXBsYWNlcyBtYWlubHkgUHJldHRpZXJcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdHRlcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBFbmFibGUgaW1wb3J0IHNvcnRpbmcvb3JnYW5pemluZy4gUmVwbGFjZXMgbWFpbmx5IFByZXR0aWVyXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6ZUltcG9ydHM/OiBib29sZWFuO1xuICAvKipcbiAgICogU2hvdWxkIGFycmF5cyBiZSBtZXJnZWQgb3Igb3ZlcndyaXR0ZW4gd2hlbiBjcmVhdGluZyBCaW9tZSBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQgYXJyYXlzIGFyZSBtZXJnZWQgYW5kIGR1cGxpY2F0ZSB2YWx1ZXMgYXJlIHJlbW92ZWRcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbWVyZ2VBcnJheXNJbkNvbmZpZ3VyYXRpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogRnVsbCBCaW9tZSBjb25maWd1cmF0aW9uLiBOb3RlIHRoYXQgdGhpcyBjb25maWd1cmF0aW9uIGRpY3RhdGVzIHRoZSBmaW5hbCBvdXRjb21lIGlmIHZhbHVlIGlzIHNldC5cbiAgICpcbiAgICogQGV4YW1wbGUgaWYgbGludGVyIGlzIGRpc2FibGVkIG9uIG1haW4gbGV2ZWwsIGl0IGNhbiBiZSBlbmFibGVkIG9uIGZ1bGxDb25maWd1cmF0aW9uLmZvcm1hdHRlci5lbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYmlvbWVDb25maWc/OiBJQ29uZmlndXJhdGlvbjtcbn1cblxuZXhwb3J0IGNsYXNzIEJpb21lIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcHVibGljIHN0YXRpYyBvZihwcm9qZWN0OiBQcm9qZWN0KTogQmlvbWUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGlzQmlvbWUgPSAoYzogQ29tcG9uZW50KTogYyBpcyBCaW9tZSA9PiBjIGluc3RhbmNlb2YgQmlvbWU7XG4gICAgcmV0dXJuIHByb2plY3QuY29tcG9uZW50cy5maW5kKGlzQmlvbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBiaW9tZUNvbmZpZ3VyYXRpb246IElDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IF9saW50UGF0dGVybnM6IFNldDxzdHJpbmc+O1xuICBwcml2YXRlIHJlYWRvbmx5IGJpb21lQ29tbWFuZCA9IFwiYmlvbWUgY2hlY2sgLS13cml0ZVwiO1xuICAvKipcbiAgICogQmlvbWUgdGFzay5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YXNrOiBUYXNrO1xuICAvKipcbiAgICogQmlvbWUgY29uZmlndXJhdGlvbiBmaWxlIGNvbnRlbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmaWxlOiBKc29uRmlsZTtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBOb2RlUHJvamVjdCwgb3B0aW9uczogQmlvbWVPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcbiAgICBwcm9qZWN0LmFkZERldkRlcHMoYEBiaW9tZWpzL2Jpb21lQCR7b3B0aW9ucy52ZXJzaW9uID8/IFwiXjFcIn1gKTtcblxuICAgIGNvbnN0IGRlZmF1bHRDb25maWc6IElDb25maWd1cmF0aW9uID0ge1xuICAgICAgLi4uREVGQVVMVF9DT05GSUcsXG4gICAgICAuLi4ob3B0aW9ucy5saW50ZXIgPz8gdHJ1ZSA/IERFRkFVTFRfTElOVEVSIDoge30pLFxuICAgICAgLi4uKG9wdGlvbnMuZm9ybWF0dGVyID8/IGZhbHNlID8gREVGQVVMVF9GT1JNQVRURVIgOiB7fSksXG4gICAgICAuLi4ob3B0aW9ucy5vcmdhbml6ZUltcG9ydHMgPz8gZmFsc2UgPyBERUZBVUxUX09SR0FOSVpFX0lNUE9SVFMgOiB7fSksXG4gICAgfTtcblxuICAgIHRoaXMuYmlvbWVDb25maWd1cmF0aW9uID0gZGVlcE1lcmdlKFxuICAgICAgW2RlZXBDbG9uZShkZWZhdWx0Q29uZmlnKSwgZGVlcENsb25lKG9wdGlvbnMuYmlvbWVDb25maWcgPz8ge30pXSxcbiAgICAgIHsgbWVyZ2VBcnJheXM6IG9wdGlvbnMubWVyZ2VBcnJheXNJbkNvbmZpZ3VyYXRpb24gPz8gdHJ1ZSB9XG4gICAgKTtcblxuICAgIHRoaXMuZmlsZSA9IG5ldyBKc29uRmlsZSh0aGlzLCBcImJpb21lLmpzb25jXCIsIHtcbiAgICAgIG9iajogdGhpcy5iaW9tZUNvbmZpZ3VyYXRpb24sXG4gICAgICBhbGxvd0NvbW1lbnRzOiB0cnVlLFxuICAgICAgbWFya2VyOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbGludFBhdHRlcm5zID0gbmV3IFNldChbXSk7XG5cbiAgICB0aGlzLnRhc2sgPSB0aGlzLmNyZWF0ZUxvY2FsQmlvbWVUYXNrKCk7XG4gICAgcHJvamVjdC50ZXN0VGFzay5zcGF3bih0aGlzLnRhc2spO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgdGFzayB3aXRoIHRoZSBjdXJyZW50IGxpc3Qgb2YgbGludCBwYXR0ZXJucyBhbmQgZmlsZSBleHRlbnNpb25zXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVRhc2soKSB7XG4gICAgY29uc3QgYXJncyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCBhcmcgb2YgdGhpcy5fbGludFBhdHRlcm5zKSB7XG4gICAgICBhcmdzLmFkZChhcmcpO1xuICAgIH1cblxuICAgIHRoaXMudGFzay5yZXNldChcbiAgICAgIFtcbiAgICAgICAgdGhpcy5iaW9tZUNvbW1hbmQsXG4gICAgICAgIC8vIEFsbG93IGFsc28gZXh0ZXJuYWwgYXJndW1lbnRzXG4gICAgICAgIFwiJEBcIixcbiAgICAgICAgLi4uYXJncyxcbiAgICAgIF0uam9pbihcIiBcIiksXG4gICAgICB7XG4gICAgICAgIGFyZ3M6IHRoaXMudGFzay5zdGVwc1swXS5hcmdzLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYWRkTGludFBhdHRlcm4ocGF0dGVybjogc3RyaW5nKSB7XG4gICAgdGhpcy5fbGludFBhdHRlcm5zLmFkZChwYXR0ZXJuKTtcbiAgICB0aGlzLnVwZGF0ZVRhc2soKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTG9jYWxCaW9tZVRhc2soKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvamVjdC5hZGRUYXNrKFwiYmlvbWVcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiUnVucyBCaW9tZSBhZ2FpbnN0IHRoZSBjb2RlYmFzZVwiLFxuICAgICAgc3RlcHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGV4ZWM6IHRoaXMuYmlvbWVDb21tYW5kLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxufVxuIl19