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