projen
Version:
CDK for software projects
49 lines • 5.42 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProjectTree = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const component_1 = require("./component");
const json_1 = require("./json");
/**
* Generates a `.projen/tree.json` file that provides a snapshot of your
* project's component hierarchy. This file includes metadata about each
* component such as file paths, types, and the projen version used.
*
* The tree file is helpful for:
* - Understanding how your project is structured
* - Debugging component relationships
* - Verifying which versions synthesized the project
*
* @stability experimental
*/
class ProjectTree extends component_1.Component {
constructor(project) {
super(project, new.target.name);
this.file = new json_1.JsonFile(project, ".projen/tree.json", {
readonly: true,
marker: false,
obj: () => ({
["//"]: "Experimental. Expect frequent changes to the structure of this file.",
...renderConstruct(project),
}),
});
}
}
exports.ProjectTree = ProjectTree;
_a = JSII_RTTI_SYMBOL_1;
ProjectTree[_a] = { fqn: "projen.ProjectTree", version: "0.99.3" };
function renderConstruct(construct) {
return {
[construct.node.id]: {
metadata: Object.fromEntries(construct.node.metadata.map(({ type, data }) => [type, data])),
nodes: construct.node.children.length
? construct.node.children.reduce((nodes, c) => ({
...nodes,
...renderConstruct(c),
}), {})
: undefined,
},
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC10cmVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Byb2plY3QtdHJlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLDJDQUF3QztBQUN4QyxpQ0FBa0M7QUFHbEM7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFhLFdBQVksU0FBUSxxQkFBUztJQUd4QyxZQUFtQixPQUFnQjtRQUNqQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFaEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLGVBQVEsQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUU7WUFDckQsUUFBUSxFQUFFLElBQUk7WUFDZCxNQUFNLEVBQUUsS0FBSztZQUNiLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUNWLENBQUMsSUFBSSxDQUFDLEVBQ0osc0VBQXNFO2dCQUN4RSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUM7YUFDNUIsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7O0FBZkgsa0NBZ0JDOzs7QUFTRCxTQUFTLGVBQWUsQ0FBQyxTQUFxQjtJQUM1QyxPQUFPO1FBQ0wsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ25CLFFBQVEsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUMxQixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FDOUQ7WUFDRCxLQUFLLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtnQkFDbkMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDNUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNiLEdBQUcsS0FBSztvQkFDUixHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUM7aUJBQ3RCLENBQUMsRUFDRixFQUFFLENBQ0g7Z0JBQ0gsQ0FBQyxDQUFDLFNBQVM7U0FDZDtLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUNvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRcIjtcbmltcG9ydCB7IEpzb25GaWxlIH0gZnJvbSBcIi4vanNvblwiO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gXCIuL3Byb2plY3RcIjtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBgLnByb2plbi90cmVlLmpzb25gIGZpbGUgdGhhdCBwcm92aWRlcyBhIHNuYXBzaG90IG9mIHlvdXJcbiAqIHByb2plY3QncyBjb21wb25lbnQgaGllcmFyY2h5LiBUaGlzIGZpbGUgaW5jbHVkZXMgbWV0YWRhdGEgYWJvdXQgZWFjaFxuICogY29tcG9uZW50IHN1Y2ggYXMgZmlsZSBwYXRocywgdHlwZXMsIGFuZCB0aGUgcHJvamVuIHZlcnNpb24gdXNlZC5cbiAqXG4gKiBUaGUgdHJlZSBmaWxlIGlzIGhlbHBmdWwgZm9yOlxuICogLSBVbmRlcnN0YW5kaW5nIGhvdyB5b3VyIHByb2plY3QgaXMgc3RydWN0dXJlZFxuICogLSBEZWJ1Z2dpbmcgY29tcG9uZW50IHJlbGF0aW9uc2hpcHNcbiAqIC0gVmVyaWZ5aW5nIHdoaWNoIHZlcnNpb25zIHN5bnRoZXNpemVkIHRoZSBwcm9qZWN0XG4gKlxuICogQHN0YWJpbGl0eSBleHBlcmltZW50YWxcbiAqL1xuZXhwb3J0IGNsYXNzIFByb2plY3RUcmVlIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcHVibGljIGZpbGU6IEpzb25GaWxlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0KSB7XG4gICAgc3VwZXIocHJvamVjdCwgbmV3LnRhcmdldC5uYW1lKTtcblxuICAgIHRoaXMuZmlsZSA9IG5ldyBKc29uRmlsZShwcm9qZWN0LCBcIi5wcm9qZW4vdHJlZS5qc29uXCIsIHtcbiAgICAgIHJlYWRvbmx5OiB0cnVlLFxuICAgICAgbWFya2VyOiBmYWxzZSxcbiAgICAgIG9iajogKCkgPT4gKHtcbiAgICAgICAgW1wiLy9cIl06XG4gICAgICAgICAgXCJFeHBlcmltZW50YWwuIEV4cGVjdCBmcmVxdWVudCBjaGFuZ2VzIHRvIHRoZSBzdHJ1Y3R1cmUgb2YgdGhpcyBmaWxlLlwiLFxuICAgICAgICAuLi5yZW5kZXJDb25zdHJ1Y3QocHJvamVjdCksXG4gICAgICB9KSxcbiAgICB9KTtcbiAgfVxufVxuXG50eXBlIENvbnN0cnVjdFRyZWUgPSBSZWNvcmQ8c3RyaW5nLCBDb25zdHJ1Y3RMZWFmPjtcblxuaW50ZXJmYWNlIENvbnN0cnVjdExlYWYge1xuICBtZXRhZGF0YTogYW55O1xuICBub2Rlcz86IENvbnN0cnVjdFRyZWU7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckNvbnN0cnVjdChjb25zdHJ1Y3Q6IElDb25zdHJ1Y3QpOiBDb25zdHJ1Y3RUcmVlIHtcbiAgcmV0dXJuIHtcbiAgICBbY29uc3RydWN0Lm5vZGUuaWRdOiB7XG4gICAgICBtZXRhZGF0YTogT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBjb25zdHJ1Y3Qubm9kZS5tZXRhZGF0YS5tYXAoKHsgdHlwZSwgZGF0YSB9KSA9PiBbdHlwZSwgZGF0YV0pXG4gICAgICApLFxuICAgICAgbm9kZXM6IGNvbnN0cnVjdC5ub2RlLmNoaWxkcmVuLmxlbmd0aFxuICAgICAgICA/IGNvbnN0cnVjdC5ub2RlLmNoaWxkcmVuLnJlZHVjZShcbiAgICAgICAgICAgIChub2RlcywgYykgPT4gKHtcbiAgICAgICAgICAgICAgLi4ubm9kZXMsXG4gICAgICAgICAgICAgIC4uLnJlbmRlckNvbnN0cnVjdChjKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0sXG4gIH07XG59XG4iXX0=