projen
Version:
CDK for software projects
48 lines • 5.45 kB
JavaScript
;
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 {
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.ProjectTree", version: "0.103.12" };
file;
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;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC10cmVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Byb2plY3QtdHJlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsMkNBQXdDO0FBQ3hDLGlDQUFrQztBQUdsQzs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQWEsV0FBWSxTQUFRLHFCQUFTOztJQUNqQyxJQUFJLENBQVc7SUFFdEIsWUFBbUIsT0FBZ0I7UUFDakMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxlQUFRLENBQUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFO1lBQ3JELFFBQVEsRUFBRSxJQUFJO1lBQ2QsTUFBTSxFQUFFLEtBQUs7WUFDYixHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDVixDQUFDLElBQUksQ0FBQyxFQUNKLHNFQUFzRTtnQkFDeEUsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDO2FBQzVCLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDOztBQWZILGtDQWdCQztBQVNELFNBQVMsZUFBZSxDQUFDLFNBQXFCO0lBQzVDLE9BQU87UUFDTCxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDbkIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQzFCLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUM5RDtZQUNELEtBQUssRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO2dCQUNuQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUM1QixDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ2IsR0FBRyxLQUFLO29CQUNSLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQztpQkFDdEIsQ0FBQyxFQUNGLEVBQUUsQ0FDSDtnQkFDSCxDQUFDLENBQUMsU0FBUztTQUNkO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50XCI7XG5pbXBvcnQgeyBKc29uRmlsZSB9IGZyb20gXCIuL2pzb25cIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCB9IGZyb20gXCIuL3Byb2plY3RcIjtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBgLnByb2plbi90cmVlLmpzb25gIGZpbGUgdGhhdCBwcm92aWRlcyBhIHNuYXBzaG90IG9mIHlvdXJcbiAqIHByb2plY3QncyBjb21wb25lbnQgaGllcmFyY2h5LiBUaGlzIGZpbGUgaW5jbHVkZXMgbWV0YWRhdGEgYWJvdXQgZWFjaFxuICogY29tcG9uZW50IHN1Y2ggYXMgZmlsZSBwYXRocywgdHlwZXMsIGFuZCB0aGUgcHJvamVuIHZlcnNpb24gdXNlZC5cbiAqXG4gKiBUaGUgdHJlZSBmaWxlIGlzIGhlbHBmdWwgZm9yOlxuICogLSBVbmRlcnN0YW5kaW5nIGhvdyB5b3VyIHByb2plY3QgaXMgc3RydWN0dXJlZFxuICogLSBEZWJ1Z2dpbmcgY29tcG9uZW50IHJlbGF0aW9uc2hpcHNcbiAqIC0gVmVyaWZ5aW5nIHdoaWNoIHZlcnNpb25zIHN5bnRoZXNpemVkIHRoZSBwcm9qZWN0XG4gKlxuICogQHN0YWJpbGl0eSBleHBlcmltZW50YWxcbiAqL1xuZXhwb3J0IGNsYXNzIFByb2plY3RUcmVlIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcHVibGljIGZpbGU6IEpzb25GaWxlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0KSB7XG4gICAgc3VwZXIocHJvamVjdCwgbmV3LnRhcmdldC5uYW1lKTtcblxuICAgIHRoaXMuZmlsZSA9IG5ldyBKc29uRmlsZShwcm9qZWN0LCBcIi5wcm9qZW4vdHJlZS5qc29uXCIsIHtcbiAgICAgIHJlYWRvbmx5OiB0cnVlLFxuICAgICAgbWFya2VyOiBmYWxzZSxcbiAgICAgIG9iajogKCkgPT4gKHtcbiAgICAgICAgW1wiLy9cIl06XG4gICAgICAgICAgXCJFeHBlcmltZW50YWwuIEV4cGVjdCBmcmVxdWVudCBjaGFuZ2VzIHRvIHRoZSBzdHJ1Y3R1cmUgb2YgdGhpcyBmaWxlLlwiLFxuICAgICAgICAuLi5yZW5kZXJDb25zdHJ1Y3QocHJvamVjdCksXG4gICAgICB9KSxcbiAgICB9KTtcbiAgfVxufVxuXG50eXBlIENvbnN0cnVjdFRyZWUgPSBSZWNvcmQ8c3RyaW5nLCBDb25zdHJ1Y3RMZWFmPjtcblxuaW50ZXJmYWNlIENvbnN0cnVjdExlYWYge1xuICBtZXRhZGF0YTogYW55O1xuICBub2Rlcz86IENvbnN0cnVjdFRyZWU7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckNvbnN0cnVjdChjb25zdHJ1Y3Q6IElDb25zdHJ1Y3QpOiBDb25zdHJ1Y3RUcmVlIHtcbiAgcmV0dXJuIHtcbiAgICBbY29uc3RydWN0Lm5vZGUuaWRdOiB7XG4gICAgICBtZXRhZGF0YTogT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBjb25zdHJ1Y3Qubm9kZS5tZXRhZGF0YS5tYXAoKHsgdHlwZSwgZGF0YSB9KSA9PiBbdHlwZSwgZGF0YV0pLFxuICAgICAgKSxcbiAgICAgIG5vZGVzOiBjb25zdHJ1Y3Qubm9kZS5jaGlsZHJlbi5sZW5ndGhcbiAgICAgICAgPyBjb25zdHJ1Y3Qubm9kZS5jaGlsZHJlbi5yZWR1Y2UoXG4gICAgICAgICAgICAobm9kZXMsIGMpID0+ICh7XG4gICAgICAgICAgICAgIC4uLm5vZGVzLFxuICAgICAgICAgICAgICAuLi5yZW5kZXJDb25zdHJ1Y3QoYyksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgIClcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==