projen
Version:
CDK for software projects
117 lines • 11 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.tryProcessMacro = tryProcessMacro;
const path = __importStar(require("path"));
const util_1 = require("../util");
const exec_1 = require("../util/exec");
function tryProcessMacro(cwd, macro) {
if (!macro.startsWith("$")) {
return undefined;
}
const basedir = path.basename(cwd);
switch (macro) {
case "$BASEDIR":
return basedir;
case "$GIT_REMOTE":
const origin = exec_1.git.tryCapture(["remote", "get-url", "origin"], { cwd });
if (origin) {
return origin;
}
const slug = getFromGitConfig(cwd, "github.user") ?? resolveEmail(cwd).split("@")[0];
return `https://github.com/${slug}/${basedir}.git`;
case "$GIT_USER_NAME":
return getFromGitConfig(cwd, "user.name") ?? "user";
case "$GIT_USER_EMAIL":
return resolveEmail(cwd);
case "$PYTHON_MODULE_NAME":
return (0, util_1.formatAsPythonModule)(basedir);
case "$PACKAGE_MANAGER":
return detectPackageManager();
}
return undefined;
}
/**
* Returns a value from git config. Searches local and then global git config.
* @param key the config key
*/
function getFromGitConfig(cwd, key) {
return (exec_1.git.tryCapture(["config", "--get", "--includes", key], { cwd }) ??
exec_1.git.tryCapture(["config", "--get", "--global", "--includes", key], { cwd }));
}
function resolveEmail(cwd) {
return getFromGitConfig(cwd, "user.email") ?? "user@domain.com";
}
/**
* Detects the package manager used to run `projen new`.
*
* Uses `npm_config_user_agent` (e.g. "yarn/4.1.0 npm/? node/v20.0.0") to
* identify the package manager and version. Falls back to `npm_execpath` if
* the user agent is not set. Defaults to `npm` when detection fails.
*
* For yarn, the version determines classic (1.x) vs berry (>=2).
*/
function detectPackageManager() {
const userAgent = process.env.npm_config_user_agent ?? "";
const match = userAgent.match(/^(\w+)\/(\d+)/);
if (match) {
const [, name, major] = match;
if (name === "yarn") {
return Number(major) >= 2 ? "yarn_berry" : "yarn_classic";
}
if (name === "pnpm") {
return "pnpm";
}
if (name === "bun") {
return "bun";
}
if (name === "npm") {
return "npm";
}
}
// Fallback: check npm_execpath
const execPath = process.env.npm_execpath ?? "";
if (execPath.includes("yarn")) {
return "yarn_classic";
}
if (execPath.includes("pnpm")) {
return "pnpm";
}
if (execPath.includes("bun")) {
return "bun";
}
return "npm";
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjcm9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS9tYWNyb3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJQSwwQ0E4QkM7QUFsQ0QsMkNBQTZCO0FBQzdCLGtDQUErQztBQUMvQyx1Q0FBbUM7QUFFbkMsU0FBZ0IsZUFBZSxDQUFDLEdBQVcsRUFBRSxLQUFhO0lBQ3hELElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDM0IsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFbkMsUUFBUSxLQUFLLEVBQUUsQ0FBQztRQUNkLEtBQUssVUFBVTtZQUNiLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLEtBQUssYUFBYTtZQUNoQixNQUFNLE1BQU0sR0FBRyxVQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDeEUsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1lBQ0QsTUFBTSxJQUFJLEdBQ1IsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUUsT0FBTyxzQkFBc0IsSUFBSSxJQUFJLE9BQU8sTUFBTSxDQUFDO1FBRXJELEtBQUssZ0JBQWdCO1lBQ25CLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxJQUFJLE1BQU0sQ0FBQztRQUN0RCxLQUFLLGlCQUFpQjtZQUNwQixPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixLQUFLLHFCQUFxQjtZQUN4QixPQUFPLElBQUEsMkJBQW9CLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsS0FBSyxrQkFBa0I7WUFDckIsT0FBTyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFXLEVBQUUsR0FBVztJQUNoRCxPQUFPLENBQ0wsVUFBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDL0QsVUFBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQzVFLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsR0FBVztJQUMvQixPQUFPLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsSUFBSSxpQkFBaUIsQ0FBQztBQUNsRSxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLG9CQUFvQjtJQUMzQixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixJQUFJLEVBQUUsQ0FBQztJQUMxRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQy9DLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3BCLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFDNUQsQ0FBQztRQUNELElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3BCLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNuQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNuQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsK0JBQStCO0lBQy9CLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztJQUNoRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUM5QixPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDOUIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzdCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGZvcm1hdEFzUHl0aG9uTW9kdWxlIH0gZnJvbSBcIi4uL3V0aWxcIjtcbmltcG9ydCB7IGdpdCB9IGZyb20gXCIuLi91dGlsL2V4ZWNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHRyeVByb2Nlc3NNYWNybyhjd2Q6IHN0cmluZywgbWFjcm86IHN0cmluZykge1xuICBpZiAoIW1hY3JvLnN0YXJ0c1dpdGgoXCIkXCIpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGJhc2VkaXIgPSBwYXRoLmJhc2VuYW1lKGN3ZCk7XG5cbiAgc3dpdGNoIChtYWNybykge1xuICAgIGNhc2UgXCIkQkFTRURJUlwiOlxuICAgICAgcmV0dXJuIGJhc2VkaXI7XG4gICAgY2FzZSBcIiRHSVRfUkVNT1RFXCI6XG4gICAgICBjb25zdCBvcmlnaW4gPSBnaXQudHJ5Q2FwdHVyZShbXCJyZW1vdGVcIiwgXCJnZXQtdXJsXCIsIFwib3JpZ2luXCJdLCB7IGN3ZCB9KTtcbiAgICAgIGlmIChvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpbjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNsdWcgPVxuICAgICAgICBnZXRGcm9tR2l0Q29uZmlnKGN3ZCwgXCJnaXRodWIudXNlclwiKSA/PyByZXNvbHZlRW1haWwoY3dkKS5zcGxpdChcIkBcIilbMF07XG4gICAgICByZXR1cm4gYGh0dHBzOi8vZ2l0aHViLmNvbS8ke3NsdWd9LyR7YmFzZWRpcn0uZ2l0YDtcblxuICAgIGNhc2UgXCIkR0lUX1VTRVJfTkFNRVwiOlxuICAgICAgcmV0dXJuIGdldEZyb21HaXRDb25maWcoY3dkLCBcInVzZXIubmFtZVwiKSA/PyBcInVzZXJcIjtcbiAgICBjYXNlIFwiJEdJVF9VU0VSX0VNQUlMXCI6XG4gICAgICByZXR1cm4gcmVzb2x2ZUVtYWlsKGN3ZCk7XG4gICAgY2FzZSBcIiRQWVRIT05fTU9EVUxFX05BTUVcIjpcbiAgICAgIHJldHVybiBmb3JtYXRBc1B5dGhvbk1vZHVsZShiYXNlZGlyKTtcbiAgICBjYXNlIFwiJFBBQ0tBR0VfTUFOQUdFUlwiOlxuICAgICAgcmV0dXJuIGRldGVjdFBhY2thZ2VNYW5hZ2VyKCk7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSB2YWx1ZSBmcm9tIGdpdCBjb25maWcuIFNlYXJjaGVzIGxvY2FsIGFuZCB0aGVuIGdsb2JhbCBnaXQgY29uZmlnLlxuICogQHBhcmFtIGtleSB0aGUgY29uZmlnIGtleVxuICovXG5mdW5jdGlvbiBnZXRGcm9tR2l0Q29uZmlnKGN3ZDogc3RyaW5nLCBrZXk6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiAoXG4gICAgZ2l0LnRyeUNhcHR1cmUoW1wiY29uZmlnXCIsIFwiLS1nZXRcIiwgXCItLWluY2x1ZGVzXCIsIGtleV0sIHsgY3dkIH0pID8/XG4gICAgZ2l0LnRyeUNhcHR1cmUoW1wiY29uZmlnXCIsIFwiLS1nZXRcIiwgXCItLWdsb2JhbFwiLCBcIi0taW5jbHVkZXNcIiwga2V5XSwgeyBjd2QgfSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUVtYWlsKGN3ZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldEZyb21HaXRDb25maWcoY3dkLCBcInVzZXIuZW1haWxcIikgPz8gXCJ1c2VyQGRvbWFpbi5jb21cIjtcbn1cblxuLyoqXG4gKiBEZXRlY3RzIHRoZSBwYWNrYWdlIG1hbmFnZXIgdXNlZCB0byBydW4gYHByb2plbiBuZXdgLlxuICpcbiAqIFVzZXMgYG5wbV9jb25maWdfdXNlcl9hZ2VudGAgKGUuZy4gXCJ5YXJuLzQuMS4wIG5wbS8/IG5vZGUvdjIwLjAuMFwiKSB0b1xuICogaWRlbnRpZnkgdGhlIHBhY2thZ2UgbWFuYWdlciBhbmQgdmVyc2lvbi4gRmFsbHMgYmFjayB0byBgbnBtX2V4ZWNwYXRoYCBpZlxuICogdGhlIHVzZXIgYWdlbnQgaXMgbm90IHNldC4gRGVmYXVsdHMgdG8gYG5wbWAgd2hlbiBkZXRlY3Rpb24gZmFpbHMuXG4gKlxuICogRm9yIHlhcm4sIHRoZSB2ZXJzaW9uIGRldGVybWluZXMgY2xhc3NpYyAoMS54KSB2cyBiZXJyeSAoPj0yKS5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0UGFja2FnZU1hbmFnZXIoKTogc3RyaW5nIHtcbiAgY29uc3QgdXNlckFnZW50ID0gcHJvY2Vzcy5lbnYubnBtX2NvbmZpZ191c2VyX2FnZW50ID8/IFwiXCI7XG4gIGNvbnN0IG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9eKFxcdyspXFwvKFxcZCspLyk7XG4gIGlmIChtYXRjaCkge1xuICAgIGNvbnN0IFssIG5hbWUsIG1ham9yXSA9IG1hdGNoO1xuICAgIGlmIChuYW1lID09PSBcInlhcm5cIikge1xuICAgICAgcmV0dXJuIE51bWJlcihtYWpvcikgPj0gMiA/IFwieWFybl9iZXJyeVwiIDogXCJ5YXJuX2NsYXNzaWNcIjtcbiAgICB9XG4gICAgaWYgKG5hbWUgPT09IFwicG5wbVwiKSB7XG4gICAgICByZXR1cm4gXCJwbnBtXCI7XG4gICAgfVxuICAgIGlmIChuYW1lID09PSBcImJ1blwiKSB7XG4gICAgICByZXR1cm4gXCJidW5cIjtcbiAgICB9XG4gICAgaWYgKG5hbWUgPT09IFwibnBtXCIpIHtcbiAgICAgIHJldHVybiBcIm5wbVwiO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZhbGxiYWNrOiBjaGVjayBucG1fZXhlY3BhdGhcbiAgY29uc3QgZXhlY1BhdGggPSBwcm9jZXNzLmVudi5ucG1fZXhlY3BhdGggPz8gXCJcIjtcbiAgaWYgKGV4ZWNQYXRoLmluY2x1ZGVzKFwieWFyblwiKSkge1xuICAgIHJldHVybiBcInlhcm5fY2xhc3NpY1wiO1xuICB9XG4gIGlmIChleGVjUGF0aC5pbmNsdWRlcyhcInBucG1cIikpIHtcbiAgICByZXR1cm4gXCJwbnBtXCI7XG4gIH1cbiAgaWYgKGV4ZWNQYXRoLmluY2x1ZGVzKFwiYnVuXCIpKSB7XG4gICAgcmV0dXJuIFwiYnVuXCI7XG4gIH1cbiAgcmV0dXJuIFwibnBtXCI7XG59XG4iXX0=