UNPKG

projen

Version:

CDK for software projects

106 lines • 14.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ProjenrcTs = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const fs_1 = require("fs"); const path_1 = require("path"); const javascript_1 = require("../javascript"); const typescript_runner_1 = require("./typescript-runner"); const render_options_1 = require("../javascript/render-options"); const projenrc_1 = require("../projenrc"); const DEFAULT_FILENAME = ".projenrc.ts"; /** * A projenrc file written in TypeScript * * This component can be instantiated in any type of project * and has no expectations around the project's main language. */ class ProjenrcTs extends projenrc_1.ProjenrcFile { static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.ProjenrcTs", version: "0.103.12" }; /** * TypeScript configuration file used to compile projen source files */ tsconfig; filePath; _projenCodeDir; _runner; constructor(project, options = {}) { super(project); this.filePath = options.filename ?? DEFAULT_FILENAME; this._projenCodeDir = options.projenCodeDir ?? "projenrc"; project.addPackageIgnore(`/${this.filePath}`); // Create a dedicated tsconfig for projen source files this.tsconfig = new javascript_1.TypescriptConfig(project, { fileName: options.tsconfigFileName ?? "tsconfig.projen.json", compilerOptions: {}, }); // A runner is a future component, make sure it is attached this._runner = this.getRunner(options).tryAttach(project); // Build the run config const { dependencies, steps } = this._runner.configFor(this.filePath); // If the runner has dependencies, run each step through an `npx` shell // (`npx -y -p <deps> -c "<command>"`) to make them available without install. if (dependencies.length > 0) { const shell = [ "npx", "-y", ...dependencies.flatMap((d) => [ "-p", d.version ? `${d.name}@${d.version}` : d.name, ]), "-c", ]; for (const step of steps) { project.defaultTask?.addSteps({ ...step, shell }); } } else { project.defaultTask?.addSteps(...steps); } } projectCreation(initProject) { this.generateProjenrc(initProject); } getRunner(options) { // use a provide runner as is if (options.runner) { return options.runner; } // use a default runner with the correct tsconfig and type-checking enabled return typescript_runner_1.TypeScriptRunner.tsNode({ tsconfig: this.tsconfig.fileName, typeCheck: true, }); } preSynthesize() { super.preSynthesize(); this.tsconfig.addInclude(this.filePath); this.tsconfig.addInclude(`${this._projenCodeDir}/**/*.ts`); } generateProjenrc(bootstrap) { const rcfile = (0, path_1.resolve)(this.project.outdir, this.filePath); if ((0, fs_1.existsSync)(rcfile)) { return; // already exists } const parts = bootstrap.fqn.split("."); const moduleName = parts[0]; const importName = parts[1]; const className = parts.slice(1).join("."); const { renderedOptions, imports } = (0, render_options_1.renderJavaScriptOptions)({ args: bootstrap.args, type: bootstrap.type, comments: bootstrap.comments, }); imports.add(moduleName, importName); const lines = new Array(); lines.push(...imports.asEsmImports()); lines.push(); lines.push(`const project = new ${className}(${renderedOptions});`); lines.push(); lines.push("project.synth();"); (0, fs_1.writeFileSync)(rcfile, lines.join("\n")); this.project.logger.info(`Project definition file was created at ${rcfile}`); } } exports.ProjenrcTs = ProjenrcTs; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVucmMtdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXNjcmlwdC9wcm9qZW5yYy10cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsMkJBQStDO0FBQy9DLCtCQUErQjtBQUUvQiw4Q0FBaUQ7QUFDakQsMkRBQXVEO0FBQ3ZELGlFQUF1RTtBQUV2RSwwQ0FBMkM7QUFrQzNDLE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDO0FBRXhDOzs7OztHQUtHO0FBQ0gsTUFBYSxVQUFXLFNBQVEsdUJBQVk7O0lBQzFDOztPQUVHO0lBQ2EsUUFBUSxDQUFtQjtJQUMzQixRQUFRLENBQVM7SUFFaEIsY0FBYyxDQUFTO0lBQ3ZCLE9BQU8sQ0FBbUI7SUFFM0MsWUFBWSxPQUFnQixFQUFFLFVBQTZCLEVBQUU7UUFDM0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWYsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxJQUFJLGdCQUFnQixDQUFDO1FBQ3JELElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxVQUFVLENBQUM7UUFFMUQsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFOUMsc0RBQXNEO1FBQ3RELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSw2QkFBZ0IsQ0FBQyxPQUFPLEVBQUU7WUFDNUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxzQkFBc0I7WUFDNUQsZUFBZSxFQUFFLEVBQUU7U0FDcEIsQ0FBQyxDQUFDO1FBRUgsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFMUQsdUJBQXVCO1FBQ3ZCLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEdBQUcs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O1FBQ2xDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUN0QyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDYixLQUFLLENBQUMsSUFBSSxDQUFDLHVCQUF1QixTQUFTLElBQUksZUFBZSxJQUFJLENBQUMsQ0FBQztRQUNwRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDYixLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFL0IsSUFBQSxrQkFBYSxFQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUN0QiwwQ0FBMEMsTUFBTSxFQUFFLENBQ25ELENBQUM7SUFDSixDQUFDOztBQXhHSCxnQ0F5R0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB0eXBlIHsgSW52ZW50b3J5UHJvamVjdFR5cGUgfSBmcm9tIFwiLi4vaW52ZW50b3J5XCI7XG5pbXBvcnQgeyBUeXBlc2NyaXB0Q29uZmlnIH0gZnJvbSBcIi4uL2phdmFzY3JpcHRcIjtcbmltcG9ydCB7IFR5cGVTY3JpcHRSdW5uZXIgfSBmcm9tIFwiLi90eXBlc2NyaXB0LXJ1bm5lclwiO1xuaW1wb3J0IHsgcmVuZGVySmF2YVNjcmlwdE9wdGlvbnMgfSBmcm9tIFwiLi4vamF2YXNjcmlwdC9yZW5kZXItb3B0aW9uc1wiO1xuaW1wb3J0IHR5cGUgeyBJbml0UHJvamVjdCwgUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0XCI7XG5pbXBvcnQgeyBQcm9qZW5yY0ZpbGUgfSBmcm9tIFwiLi4vcHJvamVucmNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBQcm9qZW5yY1RzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvamVucmMgZmlsZS5cbiAgICogQGRlZmF1bHQgXCIucHJvamVucmMudHNcIlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZW5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZGlyZWN0b3J5IHRyZWUgdGhhdCBtYXkgY29udGFpbiAqLnRzIGZpbGVzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZnJvbVxuICAgKiB5b3VyIHByb2plbnJjIHR5cGVzY3JpcHQgZmlsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJwcm9qZW5yY1wiXG4gICAqL1xuICByZWFkb25seSBwcm9qZW5Db2RlRGlyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdHNjb25maWcgZmlsZSB0aGF0IHdpbGwgYmUgdXNlZCBieSB0aGUgcnVubmVyXG4gICAqIHdoZW4gY29tcGlsaW5nIHByb2plbiBzb3VyY2UgZmlsZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwidHNjb25maWcucHJvamVuLmpzb25cIlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHJ1bm5lcmAgdG8gY29uZmlndXJlIHRoZSB0c2NvbmZpZ0ZpbGVOYW1lIGRpcmVjdGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgdHNjb25maWdGaWxlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJ1bm5lciB0byB1c2UgZm9yIGV4ZWN1dGluZyBUeXBlU2NyaXB0IGZpbGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBUeXBlU2NyaXB0UnVubmVyLnRzTm9kZSgpXG4gICAqL1xuICByZWFkb25seSBydW5uZXI/OiBUeXBlU2NyaXB0UnVubmVyO1xufVxuXG5jb25zdCBERUZBVUxUX0ZJTEVOQU1FID0gXCIucHJvamVucmMudHNcIjtcblxuLyoqXG4gKiBBIHByb2plbnJjIGZpbGUgd3JpdHRlbiBpbiBUeXBlU2NyaXB0XG4gKlxuICogVGhpcyBjb21wb25lbnQgY2FuIGJlIGluc3RhbnRpYXRlZCBpbiBhbnkgdHlwZSBvZiBwcm9qZWN0XG4gKiBhbmQgaGFzIG5vIGV4cGVjdGF0aW9ucyBhcm91bmQgdGhlIHByb2plY3QncyBtYWluIGxhbmd1YWdlLlxuICovXG5leHBvcnQgY2xhc3MgUHJvamVucmNUcyBleHRlbmRzIFByb2plbnJjRmlsZSB7XG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IGNvbmZpZ3VyYXRpb24gZmlsZSB1c2VkIHRvIGNvbXBpbGUgcHJvamVuIHNvdXJjZSBmaWxlc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRzY29uZmlnOiBUeXBlc2NyaXB0Q29uZmlnO1xuICBwdWJsaWMgcmVhZG9ubHkgZmlsZVBhdGg6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IF9wcm9qZW5Db2RlRGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J1bm5lcjogVHlwZVNjcmlwdFJ1bm5lcjtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBQcm9qZW5yY1RzT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICB0aGlzLmZpbGVQYXRoID0gb3B0aW9ucy5maWxlbmFtZSA/PyBERUZBVUxUX0ZJTEVOQU1FO1xuICAgIHRoaXMuX3Byb2plbkNvZGVEaXIgPSBvcHRpb25zLnByb2plbkNvZGVEaXIgPz8gXCJwcm9qZW5yY1wiO1xuXG4gICAgcHJvamVjdC5hZGRQYWNrYWdlSWdub3JlKGAvJHt0aGlzLmZpbGVQYXRofWApO1xuXG4gICAgLy8gQ3JlYXRlIGEgZGVkaWNhdGVkIHRzY29uZmlnIGZvciBwcm9qZW4gc291cmNlIGZpbGVzXG4gICAgdGhpcy50c2NvbmZpZyA9IG5ldyBUeXBlc2NyaXB0Q29uZmlnKHByb2plY3QsIHtcbiAgICAgIGZpbGVOYW1lOiBvcHRpb25zLnRzY29uZmlnRmlsZU5hbWUgPz8gXCJ0c2NvbmZpZy5wcm9qZW4uanNvblwiLFxuICAgICAgY29tcGlsZXJPcHRpb25zOiB7fSxcbiAgICB9KTtcblxuICAgIC8vIEEgcnVubmVyIGlzIGEgZnV0dXJlIGNvbXBvbmVudCwgbWFrZSBzdXJlIGl0IGlzIGF0dGFjaGVkXG4gICAgdGhpcy5fcnVubmVyID0gdGhpcy5nZXRSdW5uZXIob3B0aW9ucykudHJ5QXR0YWNoKHByb2plY3QpO1xuXG4gICAgLy8gQnVpbGQgdGhlIHJ1biBjb25maWdcbiAgICBjb25zdCB7IGRlcGVuZGVuY2llcywgc3RlcHMgfSA9IHRoaXMuX3J1bm5lci5jb25maWdGb3IodGhpcy5maWxlUGF0aCk7XG5cbiAgICAvLyBJZiB0aGUgcnVubmVyIGhhcyBkZXBlbmRlbmNpZXMsIHJ1biBlYWNoIHN0ZXAgdGhyb3VnaCBhbiBgbnB4YCBzaGVsbFxuICAgIC8vIChgbnB4IC15IC1wIDxkZXBzPiAtYyBcIjxjb21tYW5kPlwiYCkgdG8gbWFrZSB0aGVtIGF2YWlsYWJsZSB3aXRob3V0IGluc3RhbGwuXG4gICAgaWYgKGRlcGVuZGVuY2llcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzaGVsbCA9IFtcbiAgICAgICAgXCJucHhcIixcbiAgICAgICAgXCIteVwiLFxuICAgICAgICAuLi5kZXBlbmRlbmNpZXMuZmxhdE1hcCgoZCkgPT4gW1xuICAgICAgICAgIFwiLXBcIixcbiAgICAgICAgICBkLnZlcnNpb24gPyBgJHtkLm5hbWV9QCR7ZC52ZXJzaW9ufWAgOiBkLm5hbWUsXG4gICAgICAgIF0pLFxuICAgICAgICBcIi1jXCIsXG4gICAgICBdO1xuICAgICAgZm9yIChjb25zdCBzdGVwIG9mIHN0ZXBzKSB7XG4gICAgICAgIHByb2plY3QuZGVmYXVsdFRhc2s/LmFkZFN0ZXBzKHsgLi4uc3RlcCwgc2hlbGwgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2plY3QuZGVmYXVsdFRhc2s/LmFkZFN0ZXBzKC4uLnN0ZXBzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcHJvamVjdENyZWF0aW9uKGluaXRQcm9qZWN0OiBJbml0UHJvamVjdCkge1xuICAgIHRoaXMuZ2VuZXJhdGVQcm9qZW5yYyhpbml0UHJvamVjdCk7XG4gIH1cblxuICBwcml2YXRlIGdldFJ1bm5lcihvcHRpb25zOiBQcm9qZW5yY1RzT3B0aW9ucyk6IFR5cGVTY3JpcHRSdW5uZXIge1xuICAgIC8vIHVzZSBhIHByb3ZpZGUgcnVubmVyIGFzIGlzXG4gICAgaWYgKG9wdGlvbnMucnVubmVyKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5ydW5uZXI7XG4gICAgfVxuXG4gICAgLy8gdXNlIGEgZGVmYXVsdCBydW5uZXIgd2l0aCB0aGUgY29ycmVjdCB0c2NvbmZpZyBhbmQgdHlwZS1jaGVja2luZyBlbmFibGVkXG4gICAgcmV0dXJuIFR5cGVTY3JpcHRSdW5uZXIudHNOb2RlKHtcbiAgICAgIHRzY29uZmlnOiB0aGlzLnRzY29uZmlnLmZpbGVOYW1lLFxuICAgICAgdHlwZUNoZWNrOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIHByZVN5bnRoZXNpemUoKTogdm9pZCB7XG4gICAgc3VwZXIucHJlU3ludGhlc2l6ZSgpO1xuXG4gICAgdGhpcy50c2NvbmZpZy5hZGRJbmNsdWRlKHRoaXMuZmlsZVBhdGgpO1xuICAgIHRoaXMudHNjb25maWcuYWRkSW5jbHVkZShgJHt0aGlzLl9wcm9qZW5Db2RlRGlyfS8qKi8qLnRzYCk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlUHJvamVucmMoYm9vdHN0cmFwOiBJbml0UHJvamVjdCkge1xuICAgIGNvbnN0IHJjZmlsZSA9IHJlc29sdmUodGhpcy5wcm9qZWN0Lm91dGRpciwgdGhpcy5maWxlUGF0aCk7XG4gICAgaWYgKGV4aXN0c1N5bmMocmNmaWxlKSkge1xuICAgICAgcmV0dXJuOyAvLyBhbHJlYWR5IGV4aXN0c1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnRzID0gYm9vdHN0cmFwLmZxbi5zcGxpdChcIi5cIik7XG4gICAgY29uc3QgbW9kdWxlTmFtZSA9IHBhcnRzWzBdO1xuICAgIGNvbnN0IGltcG9ydE5hbWUgPSBwYXJ0c1sxXTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBwYXJ0cy5zbGljZSgxKS5qb2luKFwiLlwiKTtcblxuICAgIGNvbnN0IHsgcmVuZGVyZWRPcHRpb25zLCBpbXBvcnRzIH0gPSByZW5kZXJKYXZhU2NyaXB0T3B0aW9ucyh7XG4gICAgICBhcmdzOiBib290c3RyYXAuYXJncyxcbiAgICAgIHR5cGU6IGJvb3RzdHJhcC50eXBlIGFzIEludmVudG9yeVByb2plY3RUeXBlLFxuICAgICAgY29tbWVudHM6IGJvb3RzdHJhcC5jb21tZW50cyxcbiAgICB9KTtcblxuICAgIGltcG9ydHMuYWRkKG1vZHVsZU5hbWUsIGltcG9ydE5hbWUpO1xuXG4gICAgY29uc3QgbGluZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGxpbmVzLnB1c2goLi4uaW1wb3J0cy5hc0VzbUltcG9ydHMoKSk7XG4gICAgbGluZXMucHVzaCgpO1xuICAgIGxpbmVzLnB1c2goYGNvbnN0IHByb2plY3QgPSBuZXcgJHtjbGFzc05hbWV9KCR7cmVuZGVyZWRPcHRpb25zfSk7YCk7XG4gICAgbGluZXMucHVzaCgpO1xuICAgIGxpbmVzLnB1c2goXCJwcm9qZWN0LnN5bnRoKCk7XCIpO1xuXG4gICAgd3JpdGVGaWxlU3luYyhyY2ZpbGUsIGxpbmVzLmpvaW4oXCJcXG5cIikpO1xuICAgIHRoaXMucHJvamVjdC5sb2dnZXIuaW5mbyhcbiAgICAgIGBQcm9qZWN0IGRlZmluaXRpb24gZmlsZSB3YXMgY3JlYXRlZCBhdCAke3JjZmlsZX1gLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==