UNPKG

projen

Version:

CDK for software projects

65 lines 8.16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.JsonFile = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const object_file_1 = require("./object-file"); /** * Represents a JSON file. */ class JsonFile extends object_file_1.ObjectFile { static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.JsonFile", version: "0.103.12" }; newline; allowComments = true; /** * Indicates if the files supports comments. */ get supportsComments() { return this.allowComments; } constructor(scope, filePath, options) { super(scope, filePath, options); this.newline = options.newline ?? true; this.configureComments(options.allowComments ?? (filePath.toLowerCase().endsWith("json5") || filePath.toLowerCase().endsWith("jsonc"))); if (!options.obj) { throw new Error('"obj" cannot be undefined'); } } /** * Helper to enable/disable supportsComments from other parts of the codebase. */ configureComments(allowed) { this.allowComments = allowed; // Add linguist-language=JSON-with-Comments attribute for files that support comments // This helps GitHub render them correctly with syntax highlighting if (this.committed) { if (allowed) { this.project.gitattributes.addAttributes(`/${this.path}`, "linguist-language=JSON-with-Comments"); } else { this.project.gitattributes.removeAttributes(`/${this.path}`, "linguist-language=JSON-with-Comments"); } } } synthesizeContent(resolver) { const json = super.synthesizeContent(resolver); if (!json) { return undefined; } const sanitized = JSON.parse(json); if (this.marker && !this.supportsComments) { sanitized["//"] = this.marker; } let content = JSON.stringify(sanitized, undefined, 2); if (this.marker && this.supportsComments) { content = `// ${this.marker}\n${content}`; } if (this.newline) { content += "\n"; } return content; } } exports.JsonFile = JsonFile; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9qc29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFHQSwrQ0FBMkM7QUFtQjNDOztHQUVHO0FBQ0gsTUFBYSxRQUFTLFNBQVEsd0JBQVU7O0lBQ3JCLE9BQU8sQ0FBVTtJQUMxQixhQUFhLEdBQVksSUFBSSxDQUFDO0lBRXRDOztPQUVHO0lBQ0gsSUFBVyxnQkFBZ0I7UUFDekIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxZQUFZLEtBQWlCLEVBQUUsUUFBZ0IsRUFBRSxPQUF3QjtRQUN2RSxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVoQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsT0FBTyxDQUFDLGFBQWE7WUFDbkIsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztnQkFDdkMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUM5QyxDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDL0MsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGlCQUFpQixDQUFDLE9BQWdCO1FBQ3hDLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDO1FBRTdCLHFGQUFxRjtRQUNyRixtRUFBbUU7UUFDbkUsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQ3RDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxFQUNmLHNDQUFzQyxDQUN2QyxDQUFDO1lBQ0osQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUN6QyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFDZixzQ0FBc0MsQ0FDdkMsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVTLGlCQUFpQixDQUFDLFFBQW1CO1FBQzdDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVuQyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNoQyxDQUFDO1FBRUQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN6QyxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzVDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixPQUFPLElBQUksSUFBSSxDQUFDO1FBQ2xCLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDOztBQXZFSCw0QkF3RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHR5cGUgeyBJUmVzb2x2ZXIgfSBmcm9tIFwiLi9maWxlXCI7XG5pbXBvcnQgdHlwZSB7IE9iamVjdEZpbGVPcHRpb25zIH0gZnJvbSBcIi4vb2JqZWN0LWZpbGVcIjtcbmltcG9ydCB7IE9iamVjdEZpbGUgfSBmcm9tIFwiLi9vYmplY3QtZmlsZVwiO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBKc29uRmlsZWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkZpbGVPcHRpb25zIGV4dGVuZHMgT2JqZWN0RmlsZU9wdGlvbnMge1xuICAvKipcbiAgICogQWRkcyBhIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbmV3bGluZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFsbG93IHRoZSB1c2Ugb2YgY29tbWVudHMgaW4gdGhpcyBmaWxlLlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlIGZvciAuanNvbiBmaWxlcywgdHJ1ZSBmb3IgLmpzb241IGFuZCAuanNvbmMgZmlsZXNcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93Q29tbWVudHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBKU09OIGZpbGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBKc29uRmlsZSBleHRlbmRzIE9iamVjdEZpbGUge1xuICBwcml2YXRlIHJlYWRvbmx5IG5ld2xpbmU6IGJvb2xlYW47XG4gIHByaXZhdGUgYWxsb3dDb21tZW50czogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgZmlsZXMgc3VwcG9ydHMgY29tbWVudHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN1cHBvcnRzQ29tbWVudHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWxsb3dDb21tZW50cztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBJQ29uc3RydWN0LCBmaWxlUGF0aDogc3RyaW5nLCBvcHRpb25zOiBKc29uRmlsZU9wdGlvbnMpIHtcbiAgICBzdXBlcihzY29wZSwgZmlsZVBhdGgsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5uZXdsaW5lID0gb3B0aW9ucy5uZXdsaW5lID8/IHRydWU7XG4gICAgdGhpcy5jb25maWd1cmVDb21tZW50cyhcbiAgICAgIG9wdGlvbnMuYWxsb3dDb21tZW50cyA/P1xuICAgICAgICAoZmlsZVBhdGgudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChcImpzb241XCIpIHx8XG4gICAgICAgICAgZmlsZVBhdGgudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChcImpzb25jXCIpKSxcbiAgICApO1xuXG4gICAgaWYgKCFvcHRpb25zLm9iaikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIm9ialwiIGNhbm5vdCBiZSB1bmRlZmluZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIHRvIGVuYWJsZS9kaXNhYmxlIHN1cHBvcnRzQ29tbWVudHMgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZWJhc2UuXG4gICAqL1xuICBwcml2YXRlIGNvbmZpZ3VyZUNvbW1lbnRzKGFsbG93ZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmFsbG93Q29tbWVudHMgPSBhbGxvd2VkO1xuXG4gICAgLy8gQWRkIGxpbmd1aXN0LWxhbmd1YWdlPUpTT04td2l0aC1Db21tZW50cyBhdHRyaWJ1dGUgZm9yIGZpbGVzIHRoYXQgc3VwcG9ydCBjb21tZW50c1xuICAgIC8vIFRoaXMgaGVscHMgR2l0SHViIHJlbmRlciB0aGVtIGNvcnJlY3RseSB3aXRoIHN5bnRheCBoaWdobGlnaHRpbmdcbiAgICBpZiAodGhpcy5jb21taXR0ZWQpIHtcbiAgICAgIGlmIChhbGxvd2VkKSB7XG4gICAgICAgIHRoaXMucHJvamVjdC5naXRhdHRyaWJ1dGVzLmFkZEF0dHJpYnV0ZXMoXG4gICAgICAgICAgYC8ke3RoaXMucGF0aH1gLFxuICAgICAgICAgIFwibGluZ3Vpc3QtbGFuZ3VhZ2U9SlNPTi13aXRoLUNvbW1lbnRzXCIsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByb2plY3QuZ2l0YXR0cmlidXRlcy5yZW1vdmVBdHRyaWJ1dGVzKFxuICAgICAgICAgIGAvJHt0aGlzLnBhdGh9YCxcbiAgICAgICAgICBcImxpbmd1aXN0LWxhbmd1YWdlPUpTT04td2l0aC1Db21tZW50c1wiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzeW50aGVzaXplQ29udGVudChyZXNvbHZlcjogSVJlc29sdmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBqc29uID0gc3VwZXIuc3ludGhlc2l6ZUNvbnRlbnQocmVzb2x2ZXIpO1xuICAgIGlmICghanNvbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBzYW5pdGl6ZWQgPSBKU09OLnBhcnNlKGpzb24pO1xuXG4gICAgaWYgKHRoaXMubWFya2VyICYmICF0aGlzLnN1cHBvcnRzQ29tbWVudHMpIHtcbiAgICAgIHNhbml0aXplZFtcIi8vXCJdID0gdGhpcy5tYXJrZXI7XG4gICAgfVxuXG4gICAgbGV0IGNvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShzYW5pdGl6ZWQsIHVuZGVmaW5lZCwgMik7XG4gICAgaWYgKHRoaXMubWFya2VyICYmIHRoaXMuc3VwcG9ydHNDb21tZW50cykge1xuICAgICAgY29udGVudCA9IGAvLyAke3RoaXMubWFya2VyfVxcbiR7Y29udGVudH1gO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm5ld2xpbmUpIHtcbiAgICAgIGNvbnRlbnQgKz0gXCJcXG5cIjtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxufVxuIl19