UNPKG

projen

Version:

CDK for software projects

64 lines 6.52 kB
"use strict"; 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