UNPKG

projen

Version:

CDK for software projects

77 lines 8.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PropertiesFile = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const editor_1 = require("properties-file/editor"); const object_file_1 = require("./object-file"); const util_1 = require("./util"); /** * Represents a Java `.properties` file. * * Properties files consist of key=value pairs, one per line, * with `#` used for comments. This file format is commonly * used by tools like SonarQube, Gradle, and other JVM-based * ecosystem tools. * * The object passed as `obj` can be a nested structure. Nested keys are * flattened into dot-separated property keys on synthesis. For example, * `{ sonar: { sources: "src" } }` produces `sonar.sources=src`. * * This means `addOverride` uses dot notation as a path separator, * consistent with ObjectFile/JsonPatch semantics. * * @example * new PropertiesFile(project, 'sonar-project.properties', { * obj: { * sonar: { * projectKey: 'my-project', * sources: 'src', * }, * }, * }); * * // Produces: * // sonar.projectKey=my-project * // sonar.sources=src */ class PropertiesFile extends object_file_1.ObjectFile { static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.PropertiesFile", version: "0.103.12" }; comment; constructor(scope, filePath, options) { super(scope, filePath, options); this.comment = options.comment; } synthesizeContent(resolver) { const json = super.synthesizeContent(resolver); if (!json) { return undefined; } const obj = JSON.parse(json); // Build the initial content (marker and comments) as a seed string // so the editor doesn't produce a leading blank line. const header = []; if (this.marker) { header.push(`# ${this.marker}`); header.push(""); } if (this.comment && this.comment.length > 0) { for (const line of this.comment) { header.push(`# ${line}`); } header.push(""); } const editor = new editor_1.PropertiesEditor(header.join("\n")); // Insert all flattened key-value pairs const flatEntries = (0, util_1.flattenToDotNotation)(obj); for (const [key, value] of flatEntries) { editor.insert(key, value); } return (editor.format({ separatorChar: "=", separatorLeading: "", separatorTrailing: "", }) + "\n"); } } exports.PropertiesFile = PropertiesFile; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydGllcy1maWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Byb3BlcnRpZXMtZmlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsbURBQTBEO0FBRzFELCtDQUEyQztBQUMzQyxpQ0FBOEM7QUFlOUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Qkc7QUFDSCxNQUFhLGNBQWUsU0FBUSx3QkFBVTs7SUFDM0IsT0FBTyxDQUFZO0lBRXBDLFlBQ0UsS0FBaUIsRUFDakIsUUFBZ0IsRUFDaEIsT0FBOEI7UUFFOUIsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQ2pDLENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxRQUFtQjtRQUM3QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFN0IsbUVBQW1FO1FBQ25FLHNEQUFzRDtRQUN0RCxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFFNUIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEIsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7WUFDM0IsQ0FBQztZQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEIsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLElBQUkseUJBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRXZELHVDQUF1QztRQUN2QyxNQUFNLFdBQVcsR0FBRyxJQUFBLDJCQUFvQixFQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBRUQsT0FBTyxDQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDWixhQUFhLEVBQUUsR0FBRztZQUNsQixnQkFBZ0IsRUFBRSxFQUFFO1lBQ3BCLGlCQUFpQixFQUFFLEVBQUU7U0FDdEIsQ0FBQyxHQUFHLElBQUksQ0FDVixDQUFDO0lBQ0osQ0FBQzs7QUFuREgsd0NBb0RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFByb3BlcnRpZXNFZGl0b3IgfSBmcm9tIFwicHJvcGVydGllcy1maWxlL2VkaXRvclwiO1xuaW1wb3J0IHR5cGUgeyBJUmVzb2x2ZXIgfSBmcm9tIFwiLi9maWxlXCI7XG5pbXBvcnQgdHlwZSB7IE9iamVjdEZpbGVPcHRpb25zIH0gZnJvbSBcIi4vb2JqZWN0LWZpbGVcIjtcbmltcG9ydCB7IE9iamVjdEZpbGUgfSBmcm9tIFwiLi9vYmplY3QtZmlsZVwiO1xuaW1wb3J0IHsgZmxhdHRlblRvRG90Tm90YXRpb24gfSBmcm9tIFwiLi91dGlsXCI7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYFByb3BlcnRpZXNGaWxlYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9wZXJ0aWVzRmlsZU9wdGlvbnMgZXh0ZW5kcyBPYmplY3RGaWxlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBIGNvbW1lbnQgdG8gaW5jbHVkZSBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlIChhZnRlciB0aGUgcHJvamVuIG1hcmtlcixcbiAgICogaWYgZW5hYmxlZCkuIEVhY2ggc3RyaW5nIGluIHRoZSBhcnJheSBiZWNvbWVzIGEgc2VwYXJhdGUgY29tbWVudCBsaW5lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGFkZGl0aW9uYWwgY29tbWVudFxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWVudD86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBKYXZhIGAucHJvcGVydGllc2AgZmlsZS5cbiAqXG4gKiBQcm9wZXJ0aWVzIGZpbGVzIGNvbnNpc3Qgb2Yga2V5PXZhbHVlIHBhaXJzLCBvbmUgcGVyIGxpbmUsXG4gKiB3aXRoIGAjYCB1c2VkIGZvciBjb21tZW50cy4gVGhpcyBmaWxlIGZvcm1hdCBpcyBjb21tb25seVxuICogdXNlZCBieSB0b29scyBsaWtlIFNvbmFyUXViZSwgR3JhZGxlLCBhbmQgb3RoZXIgSlZNLWJhc2VkXG4gKiBlY29zeXN0ZW0gdG9vbHMuXG4gKlxuICogVGhlIG9iamVjdCBwYXNzZWQgYXMgYG9iamAgY2FuIGJlIGEgbmVzdGVkIHN0cnVjdHVyZS4gTmVzdGVkIGtleXMgYXJlXG4gKiBmbGF0dGVuZWQgaW50byBkb3Qtc2VwYXJhdGVkIHByb3BlcnR5IGtleXMgb24gc3ludGhlc2lzLiBGb3IgZXhhbXBsZSxcbiAqIGB7IHNvbmFyOiB7IHNvdXJjZXM6IFwic3JjXCIgfSB9YCBwcm9kdWNlcyBgc29uYXIuc291cmNlcz1zcmNgLlxuICpcbiAqIFRoaXMgbWVhbnMgYGFkZE92ZXJyaWRlYCB1c2VzIGRvdCBub3RhdGlvbiBhcyBhIHBhdGggc2VwYXJhdG9yLFxuICogY29uc2lzdGVudCB3aXRoIE9iamVjdEZpbGUvSnNvblBhdGNoIHNlbWFudGljcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogbmV3IFByb3BlcnRpZXNGaWxlKHByb2plY3QsICdzb25hci1wcm9qZWN0LnByb3BlcnRpZXMnLCB7XG4gKiAgIG9iajoge1xuICogICAgIHNvbmFyOiB7XG4gKiAgICAgICBwcm9qZWN0S2V5OiAnbXktcHJvamVjdCcsXG4gKiAgICAgICBzb3VyY2VzOiAnc3JjJyxcbiAqICAgICB9LFxuICogICB9LFxuICogfSk7XG4gKlxuICogLy8gUHJvZHVjZXM6XG4gKiAvLyBzb25hci5wcm9qZWN0S2V5PW15LXByb2plY3RcbiAqIC8vIHNvbmFyLnNvdXJjZXM9c3JjXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm9wZXJ0aWVzRmlsZSBleHRlbmRzIE9iamVjdEZpbGUge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbW1lbnQ/OiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogSUNvbnN0cnVjdCxcbiAgICBmaWxlUGF0aDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IFByb3BlcnRpZXNGaWxlT3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGZpbGVQYXRoLCBvcHRpb25zKTtcbiAgICB0aGlzLmNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3ludGhlc2l6ZUNvbnRlbnQocmVzb2x2ZXI6IElSZXNvbHZlcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QganNvbiA9IHN1cGVyLnN5bnRoZXNpemVDb250ZW50KHJlc29sdmVyKTtcbiAgICBpZiAoIWpzb24pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3Qgb2JqID0gSlNPTi5wYXJzZShqc29uKTtcblxuICAgIC8vIEJ1aWxkIHRoZSBpbml0aWFsIGNvbnRlbnQgKG1hcmtlciBhbmQgY29tbWVudHMpIGFzIGEgc2VlZCBzdHJpbmdcbiAgICAvLyBzbyB0aGUgZWRpdG9yIGRvZXNuJ3QgcHJvZHVjZSBhIGxlYWRpbmcgYmxhbmsgbGluZS5cbiAgICBjb25zdCBoZWFkZXI6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAodGhpcy5tYXJrZXIpIHtcbiAgICAgIGhlYWRlci5wdXNoKGAjICR7dGhpcy5tYXJrZXJ9YCk7XG4gICAgICBoZWFkZXIucHVzaChcIlwiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb21tZW50ICYmIHRoaXMuY29tbWVudC5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgdGhpcy5jb21tZW50KSB7XG4gICAgICAgIGhlYWRlci5wdXNoKGAjICR7bGluZX1gKTtcbiAgICAgIH1cbiAgICAgIGhlYWRlci5wdXNoKFwiXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGVkaXRvciA9IG5ldyBQcm9wZXJ0aWVzRWRpdG9yKGhlYWRlci5qb2luKFwiXFxuXCIpKTtcblxuICAgIC8vIEluc2VydCBhbGwgZmxhdHRlbmVkIGtleS12YWx1ZSBwYWlyc1xuICAgIGNvbnN0IGZsYXRFbnRyaWVzID0gZmxhdHRlblRvRG90Tm90YXRpb24ob2JqKTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBmbGF0RW50cmllcykge1xuICAgICAgZWRpdG9yLmluc2VydChrZXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgZWRpdG9yLmZvcm1hdCh7XG4gICAgICAgIHNlcGFyYXRvckNoYXI6IFwiPVwiLFxuICAgICAgICBzZXBhcmF0b3JMZWFkaW5nOiBcIlwiLFxuICAgICAgICBzZXBhcmF0b3JUcmFpbGluZzogXCJcIixcbiAgICAgIH0pICsgXCJcXG5cIlxuICAgICk7XG4gIH1cbn1cbiJdfQ==