UNPKG

projen

Version:

CDK for software projects

63 lines 6.46 kB
"use strict"; var _a; 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 { constructor(project, filePath, options = {}) { super(project); this.filePath = filePath; this.indentLevel = 0; 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; _a = JSII_RTTI_SYMBOL_1; SourceCode[_a] = { fqn: "projen.SourceCode", version: "0.99.51" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLWNvZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc291cmNlLWNvZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FBd0M7QUFFeEMseUNBQXNDO0FBMkJ0Qzs7R0FFRztBQUNILE1BQWEsVUFBVyxTQUFRLHFCQUFTO0lBS3ZDLFlBQ0UsT0FBZ0IsRUFDQSxRQUFnQixFQUNoQyxVQUE2QixFQUFFO1FBRS9CLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUhDLGFBQVEsR0FBUixRQUFRLENBQVE7UUFMMUIsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFTdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksbUJBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFO1lBQzFDLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUk7WUFDbEMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1NBQy9CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDZixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxJQUFJLENBQUMsSUFBYTtRQUN2QixNQUFNLE1BQU0sR0FBVyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDdEQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxJQUFJLENBQUMsSUFBYTtRQUN2QixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLElBQWE7UUFDeEIsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRW5CLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDOztBQTNESCxnQ0E0REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCB9IGZyb20gXCIuL3Byb2plY3RcIjtcbmltcG9ydCB7IFRleHRGaWxlIH0gZnJvbSBcIi4vdGV4dGZpbGVcIjtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBgU291cmNlQ29kZUZpbGVgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvdXJjZUNvZGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIEluZGVudGF0aW9uIHNpemUuXG4gICAqIEBkZWZhdWx0IDJcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudD86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZ2VuZXJhdGVkIGZpbGUgc2hvdWxkIGJlIHJlYWRvbmx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSByZWFkb25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGdlbmVyYXRlZCBmaWxlIHNob3VsZCBiZSBtYXJrZWQgYXMgZXhlY3V0YWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGFibGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBzb3VyY2UgZmlsZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNvdXJjZUNvZGUgZXh0ZW5kcyBDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGZpbGU6IFRleHRGaWxlO1xuICBwcml2YXRlIGluZGVudExldmVsID0gMDtcbiAgcHJpdmF0ZSByZWFkb25seSBpbmRlbnQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm9qZWN0OiBQcm9qZWN0LFxuICAgIHB1YmxpYyByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IFNvdXJjZUNvZGVPcHRpb25zID0ge30sXG4gICkge1xuICAgIHN1cGVyKHByb2plY3QpO1xuICAgIHRoaXMuaW5kZW50ID0gb3B0aW9ucy5pbmRlbnQgPz8gMjtcbiAgICB0aGlzLmZpbGUgPSBuZXcgVGV4dEZpbGUocHJvamVjdCwgZmlsZVBhdGgsIHtcbiAgICAgIHJlYWRvbmx5OiBvcHRpb25zLnJlYWRvbmx5ID8/IHRydWUsXG4gICAgICBleGVjdXRhYmxlOiBvcHRpb25zLmV4ZWN1dGFibGUsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1hcmtlcigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZpbGUubWFya2VyO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXQgYSBsaW5lIG9mIGNvZGUuXG4gICAqIEBwYXJhbSBjb2RlIFRoZSBjb250ZW50cywgaWYgbm90IHNwZWNpZmllZCwganVzdCBhZGRzIGEgbmV3bGluZVxuICAgKi9cbiAgcHVibGljIGxpbmUoY29kZT86IHN0cmluZykge1xuICAgIGNvbnN0IHNwYWNlczogbnVtYmVyID0gdGhpcy5pbmRlbnQgKiB0aGlzLmluZGVudExldmVsO1xuICAgIGNvbnN0IHByZWZpeCA9IFwiIFwiLnJlcGVhdChzcGFjZXMpO1xuICAgIHRoaXMuZmlsZS5hZGRMaW5lKChwcmVmaXggKyAoY29kZSA/PyBcIlwiKSkudHJpbUVuZCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyBhIGNvZGUgYmxvY2sgYW5kIGluY3JlYXNlcyB0aGUgaW5kZW50YXRpb24gbGV2ZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjb2RlIFRoZSBjb2RlIGJlZm9yZSB0aGUgYmxvY2sgc3RhcnRzIChlLmcuIGBleHBvcnQgY2xhc3Mge2ApLlxuICAgKi9cbiAgcHVibGljIG9wZW4oY29kZT86IHN0cmluZykge1xuICAgIGlmIChjb2RlKSB7XG4gICAgICB0aGlzLmxpbmUoY29kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5pbmRlbnRMZXZlbCsrO1xuICB9XG5cbiAgLyoqXG4gICAqIERlY3JlYXNlcyB0aGUgaW5kZW50YXRpb24gbGV2ZWwgYW5kIGNsb3NlcyBhIGNvZGUgYmxvY2suXG4gICAqXG4gICAqIEBwYXJhbSBjb2RlIFRoZSBjb2RlIGFmdGVyIHRoZSBibG9jayBpcyBjbG9zZWQgKGUuZy4gYH1gKS5cbiAgICovXG4gIHB1YmxpYyBjbG9zZShjb2RlPzogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuaW5kZW50TGV2ZWwgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBkZWNyZWFzZSBpbmRlbnQgbGV2ZWwgYmVsb3cgemVyb1wiKTtcbiAgICB9XG4gICAgdGhpcy5pbmRlbnRMZXZlbC0tO1xuXG4gICAgaWYgKGNvZGUpIHtcbiAgICAgIHRoaXMubGluZShjb2RlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==