projen
Version:
CDK for software projects
64 lines • 6.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SourceCode = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const component_1 = require("./component");
const textfile_1 = require("./textfile");
/**
* Represents a source file.
*/
class SourceCode extends component_1.Component {
filePath;
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SourceCode", version: "0.103.12" };
file;
indentLevel = 0;
indent;
constructor(project, filePath, options = {}) {
super(project);
this.filePath = filePath;
this.indent = options.indent ?? 2;
this.file = new textfile_1.TextFile(project, filePath, {
readonly: options.readonly ?? true,
executable: options.executable,
});
}
get marker() {
return this.file.marker;
}
/**
* Emit a line of code.
* @param code The contents, if not specified, just adds a newline
*/
line(code) {
const spaces = this.indent * this.indentLevel;
const prefix = " ".repeat(spaces);
this.file.addLine((prefix + (code ?? "")).trimEnd());
}
/**
* Opens a code block and increases the indentation level.
*
* @param code The code before the block starts (e.g. `export class {`).
*/
open(code) {
if (code) {
this.line(code);
}
this.indentLevel++;
}
/**
* Decreases the indentation level and closes a code block.
*
* @param code The code after the block is closed (e.g. `}`).
*/
close(code) {
if (this.indentLevel === 0) {
throw new Error("Cannot decrease indent level below zero");
}
this.indentLevel--;
if (code) {
this.line(code);
}
}
}
exports.SourceCode = SourceCode;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLWNvZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc291cmNlLWNvZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDJDQUF3QztBQUV4Qyx5Q0FBc0M7QUEyQnRDOztHQUVHO0FBQ0gsTUFBYSxVQUFXLFNBQVEscUJBQVM7SUFPckI7O0lBTkQsSUFBSSxDQUFXO0lBQ3hCLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDUCxNQUFNLENBQVM7SUFFaEMsWUFDRSxPQUFnQixFQUNBLFFBQWdCLEVBQ2hDLFVBQTZCLEVBQUU7UUFFL0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBSEMsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUloQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxtQkFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUU7WUFDMUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSTtZQUNsQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7U0FDL0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLElBQUksQ0FBQyxJQUFhO1FBQ3ZCLE1BQU0sTUFBTSxHQUFXLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUN0RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLElBQUksQ0FBQyxJQUFhO1FBQ3ZCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsSUFBYTtRQUN4QixJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFbkIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7O0FBM0RILGdDQTREQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSBcIi4vcHJvamVjdFwiO1xuaW1wb3J0IHsgVGV4dEZpbGUgfSBmcm9tIFwiLi90ZXh0ZmlsZVwiO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBTb3VyY2VDb2RlRmlsZWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU291cmNlQ29kZU9wdGlvbnMge1xuICAvKipcbiAgICogSW5kZW50YXRpb24gc2l6ZS5cbiAgICogQGRlZmF1bHQgMlxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBnZW5lcmF0ZWQgZmlsZSBzaG91bGQgYmUgcmVhZG9ubHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRvbmx5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZ2VuZXJhdGVkIGZpbGUgc2hvdWxkIGJlIG1hcmtlZCBhcyBleGVjdXRhYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhlY3V0YWJsZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHNvdXJjZSBmaWxlLlxuICovXG5leHBvcnQgY2xhc3MgU291cmNlQ29kZSBleHRlbmRzIENvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsZTogVGV4dEZpbGU7XG4gIHByaXZhdGUgaW5kZW50TGV2ZWwgPSAwO1xuICBwcml2YXRlIHJlYWRvbmx5IGluZGVudDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb2plY3Q6IFByb2plY3QsXG4gICAgcHVibGljIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9uczogU291cmNlQ29kZU9wdGlvbnMgPSB7fSxcbiAgKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG4gICAgdGhpcy5pbmRlbnQgPSBvcHRpb25zLmluZGVudCA/PyAyO1xuICAgIHRoaXMuZmlsZSA9IG5ldyBUZXh0RmlsZShwcm9qZWN0LCBmaWxlUGF0aCwge1xuICAgICAgcmVhZG9ubHk6IG9wdGlvbnMucmVhZG9ubHkgPz8gdHJ1ZSxcbiAgICAgIGV4ZWN1dGFibGU6IG9wdGlvbnMuZXhlY3V0YWJsZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWFya2VyKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZS5tYXJrZXI7XG4gIH1cblxuICAvKipcbiAgICogRW1pdCBhIGxpbmUgb2YgY29kZS5cbiAgICogQHBhcmFtIGNvZGUgVGhlIGNvbnRlbnRzLCBpZiBub3Qgc3BlY2lmaWVkLCBqdXN0IGFkZHMgYSBuZXdsaW5lXG4gICAqL1xuICBwdWJsaWMgbGluZShjb2RlPzogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3BhY2VzOiBudW1iZXIgPSB0aGlzLmluZGVudCAqIHRoaXMuaW5kZW50TGV2ZWw7XG4gICAgY29uc3QgcHJlZml4ID0gXCIgXCIucmVwZWF0KHNwYWNlcyk7XG4gICAgdGhpcy5maWxlLmFkZExpbmUoKHByZWZpeCArIChjb2RlID8/IFwiXCIpKS50cmltRW5kKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIGEgY29kZSBibG9jayBhbmQgaW5jcmVhc2VzIHRoZSBpbmRlbnRhdGlvbiBsZXZlbC5cbiAgICpcbiAgICogQHBhcmFtIGNvZGUgVGhlIGNvZGUgYmVmb3JlIHRoZSBibG9jayBzdGFydHMgKGUuZy4gYGV4cG9ydCBjbGFzcyB7YCkuXG4gICAqL1xuICBwdWJsaWMgb3Blbihjb2RlPzogc3RyaW5nKSB7XG4gICAgaWYgKGNvZGUpIHtcbiAgICAgIHRoaXMubGluZShjb2RlKTtcbiAgICB9XG5cbiAgICB0aGlzLmluZGVudExldmVsKys7XG4gIH1cblxuICAvKipcbiAgICogRGVjcmVhc2VzIHRoZSBpbmRlbnRhdGlvbiBsZXZlbCBhbmQgY2xvc2VzIGEgY29kZSBibG9jay5cbiAgICpcbiAgICogQHBhcmFtIGNvZGUgVGhlIGNvZGUgYWZ0ZXIgdGhlIGJsb2NrIGlzIGNsb3NlZCAoZS5nLiBgfWApLlxuICAgKi9cbiAgcHVibGljIGNsb3NlKGNvZGU/OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5pbmRlbnRMZXZlbCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGRlY3JlYXNlIGluZGVudCBsZXZlbCBiZWxvdyB6ZXJvXCIpO1xuICAgIH1cbiAgICB0aGlzLmluZGVudExldmVsLS07XG5cbiAgICBpZiAoY29kZSkge1xuICAgICAgdGhpcy5saW5lKGNvZGUpO1xuICAgIH1cbiAgfVxufVxuIl19