projen
Version:
CDK for software projects
83 lines • 9.37 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.tryProcessMacro = tryProcessMacro;
const path = require("path");
const util_1 = require("../util");
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 = (0, util_1.execOrUndefined)("git 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 ((0, util_1.execOrUndefined)(`git config --get --includes ${key}`, { cwd }) ??
(0, util_1.execOrUndefined)(`git 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjcm9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS9tYWNyb3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSwwQ0E4QkM7QUFqQ0QsNkJBQTZCO0FBQzdCLGtDQUFnRTtBQUVoRSxTQUFnQixlQUFlLENBQUMsR0FBVyxFQUFFLEtBQWE7SUFDeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMzQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVuQyxRQUFRLEtBQUssRUFBRSxDQUFDO1FBQ2QsS0FBSyxVQUFVO1lBQ2IsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxhQUFhO1lBQ2hCLE1BQU0sTUFBTSxHQUFHLElBQUEsc0JBQWUsRUFBQywyQkFBMkIsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDckUsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1lBQ0QsTUFBTSxJQUFJLEdBQ1IsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUUsT0FBTyxzQkFBc0IsSUFBSSxJQUFJLE9BQU8sTUFBTSxDQUFDO1FBRXJELEtBQUssZ0JBQWdCO1lBQ25CLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxJQUFJLE1BQU0sQ0FBQztRQUN0RCxLQUFLLGlCQUFpQjtZQUNwQixPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixLQUFLLHFCQUFxQjtZQUN4QixPQUFPLElBQUEsMkJBQW9CLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsS0FBSyxrQkFBa0I7WUFDckIsT0FBTyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFXLEVBQUUsR0FBVztJQUNoRCxPQUFPLENBQ0wsSUFBQSxzQkFBZSxFQUFDLCtCQUErQixHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzlELElBQUEsc0JBQWUsRUFBQyx3Q0FBd0MsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUN4RSxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLEdBQVc7SUFDL0IsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLElBQUksaUJBQWlCLENBQUM7QUFDbEUsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxvQkFBb0I7SUFDM0IsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsSUFBSSxFQUFFLENBQUM7SUFDMUQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMvQyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1YsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNwQixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO1FBQzVELENBQUM7UUFDRCxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNwQixPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQ0QsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDbkIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDbkIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELCtCQUErQjtJQUMvQixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7SUFDaEQsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDOUIsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzlCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM3QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBleGVjT3JVbmRlZmluZWQsIGZvcm1hdEFzUHl0aG9uTW9kdWxlIH0gZnJvbSBcIi4uL3V0aWxcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHRyeVByb2Nlc3NNYWNybyhjd2Q6IHN0cmluZywgbWFjcm86IHN0cmluZykge1xuICBpZiAoIW1hY3JvLnN0YXJ0c1dpdGgoXCIkXCIpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGJhc2VkaXIgPSBwYXRoLmJhc2VuYW1lKGN3ZCk7XG5cbiAgc3dpdGNoIChtYWNybykge1xuICAgIGNhc2UgXCIkQkFTRURJUlwiOlxuICAgICAgcmV0dXJuIGJhc2VkaXI7XG4gICAgY2FzZSBcIiRHSVRfUkVNT1RFXCI6XG4gICAgICBjb25zdCBvcmlnaW4gPSBleGVjT3JVbmRlZmluZWQoXCJnaXQgcmVtb3RlIGdldC11cmwgb3JpZ2luXCIsIHsgY3dkIH0pO1xuICAgICAgaWYgKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gb3JpZ2luO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2x1ZyA9XG4gICAgICAgIGdldEZyb21HaXRDb25maWcoY3dkLCBcImdpdGh1Yi51c2VyXCIpID8/IHJlc29sdmVFbWFpbChjd2QpLnNwbGl0KFwiQFwiKVswXTtcbiAgICAgIHJldHVybiBgaHR0cHM6Ly9naXRodWIuY29tLyR7c2x1Z30vJHtiYXNlZGlyfS5naXRgO1xuXG4gICAgY2FzZSBcIiRHSVRfVVNFUl9OQU1FXCI6XG4gICAgICByZXR1cm4gZ2V0RnJvbUdpdENvbmZpZyhjd2QsIFwidXNlci5uYW1lXCIpID8/IFwidXNlclwiO1xuICAgIGNhc2UgXCIkR0lUX1VTRVJfRU1BSUxcIjpcbiAgICAgIHJldHVybiByZXNvbHZlRW1haWwoY3dkKTtcbiAgICBjYXNlIFwiJFBZVEhPTl9NT0RVTEVfTkFNRVwiOlxuICAgICAgcmV0dXJuIGZvcm1hdEFzUHl0aG9uTW9kdWxlKGJhc2VkaXIpO1xuICAgIGNhc2UgXCIkUEFDS0FHRV9NQU5BR0VSXCI6XG4gICAgICByZXR1cm4gZGV0ZWN0UGFja2FnZU1hbmFnZXIoKTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHZhbHVlIGZyb20gZ2l0IGNvbmZpZy4gU2VhcmNoZXMgbG9jYWwgYW5kIHRoZW4gZ2xvYmFsIGdpdCBjb25maWcuXG4gKiBAcGFyYW0ga2V5IHRoZSBjb25maWcga2V5XG4gKi9cbmZ1bmN0aW9uIGdldEZyb21HaXRDb25maWcoY3dkOiBzdHJpbmcsIGtleTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIChcbiAgICBleGVjT3JVbmRlZmluZWQoYGdpdCBjb25maWcgLS1nZXQgLS1pbmNsdWRlcyAke2tleX1gLCB7IGN3ZCB9KSA/P1xuICAgIGV4ZWNPclVuZGVmaW5lZChgZ2l0IGNvbmZpZyAtLWdldCAtLWdsb2JhbCAtLWluY2x1ZGVzICR7a2V5fWAsIHsgY3dkIH0pXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVFbWFpbChjd2Q6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRGcm9tR2l0Q29uZmlnKGN3ZCwgXCJ1c2VyLmVtYWlsXCIpID8/IFwidXNlckBkb21haW4uY29tXCI7XG59XG5cbi8qKlxuICogRGV0ZWN0cyB0aGUgcGFja2FnZSBtYW5hZ2VyIHVzZWQgdG8gcnVuIGBwcm9qZW4gbmV3YC5cbiAqXG4gKiBVc2VzIGBucG1fY29uZmlnX3VzZXJfYWdlbnRgIChlLmcuIFwieWFybi80LjEuMCBucG0vPyBub2RlL3YyMC4wLjBcIikgdG9cbiAqIGlkZW50aWZ5IHRoZSBwYWNrYWdlIG1hbmFnZXIgYW5kIHZlcnNpb24uIEZhbGxzIGJhY2sgdG8gYG5wbV9leGVjcGF0aGAgaWZcbiAqIHRoZSB1c2VyIGFnZW50IGlzIG5vdCBzZXQuIERlZmF1bHRzIHRvIGBucG1gIHdoZW4gZGV0ZWN0aW9uIGZhaWxzLlxuICpcbiAqIEZvciB5YXJuLCB0aGUgdmVyc2lvbiBkZXRlcm1pbmVzIGNsYXNzaWMgKDEueCkgdnMgYmVycnkgKD49MikuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdFBhY2thZ2VNYW5hZ2VyKCk6IHN0cmluZyB7XG4gIGNvbnN0IHVzZXJBZ2VudCA9IHByb2Nlc3MuZW52Lm5wbV9jb25maWdfdXNlcl9hZ2VudCA/PyBcIlwiO1xuICBjb25zdCBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvXihcXHcrKVxcLyhcXGQrKS8pO1xuICBpZiAobWF0Y2gpIHtcbiAgICBjb25zdCBbLCBuYW1lLCBtYWpvcl0gPSBtYXRjaDtcbiAgICBpZiAobmFtZSA9PT0gXCJ5YXJuXCIpIHtcbiAgICAgIHJldHVybiBOdW1iZXIobWFqb3IpID49IDIgPyBcInlhcm5fYmVycnlcIiA6IFwieWFybl9jbGFzc2ljXCI7XG4gICAgfVxuICAgIGlmIChuYW1lID09PSBcInBucG1cIikge1xuICAgICAgcmV0dXJuIFwicG5wbVwiO1xuICAgIH1cbiAgICBpZiAobmFtZSA9PT0gXCJidW5cIikge1xuICAgICAgcmV0dXJuIFwiYnVuXCI7XG4gICAgfVxuICAgIGlmIChuYW1lID09PSBcIm5wbVwiKSB7XG4gICAgICByZXR1cm4gXCJucG1cIjtcbiAgICB9XG4gIH1cblxuICAvLyBGYWxsYmFjazogY2hlY2sgbnBtX2V4ZWNwYXRoXG4gIGNvbnN0IGV4ZWNQYXRoID0gcHJvY2Vzcy5lbnYubnBtX2V4ZWNwYXRoID8/IFwiXCI7XG4gIGlmIChleGVjUGF0aC5pbmNsdWRlcyhcInlhcm5cIikpIHtcbiAgICByZXR1cm4gXCJ5YXJuX2NsYXNzaWNcIjtcbiAgfVxuICBpZiAoZXhlY1BhdGguaW5jbHVkZXMoXCJwbnBtXCIpKSB7XG4gICAgcmV0dXJuIFwicG5wbVwiO1xuICB9XG4gIGlmIChleGVjUGF0aC5pbmNsdWRlcyhcImJ1blwiKSkge1xuICAgIHJldHVybiBcImJ1blwiO1xuICB9XG4gIHJldHVybiBcIm5wbVwiO1xufVxuIl19