projen
Version:
CDK for software projects
77 lines • 8.52 kB
JavaScript
;
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==