convex
Version:
Client for the Convex Cloud
212 lines (211 loc) • 7.83 kB
JavaScript
;
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var deployment_exports = {};
__export(deployment_exports, {
CONVEX_DEPLOYMENT_VAR_NAME: () => CONVEX_DEPLOYMENT_VAR_NAME,
changesToEnvVarFile: () => changesToEnvVarFile,
changesToGitIgnore: () => changesToGitIgnore,
deploymentNameFromAdminKeyOrCrash: () => deploymentNameFromAdminKeyOrCrash,
deploymentTypeFromAdminKey: () => deploymentTypeFromAdminKey,
eraseDeploymentEnvVar: () => eraseDeploymentEnvVar,
getConfiguredDeploymentFromEnvVar: () => getConfiguredDeploymentFromEnvVar,
getDeploymentNameFromAdminKey: () => getDeploymentNameFromAdminKey,
getTargetDeploymentName: () => getTargetDeploymentName,
getTeamAndProjectFromPreviewAdminKey: () => getTeamAndProjectFromPreviewAdminKey,
isPreviewDeployKey: () => isPreviewDeployKey,
stripDeploymentTypePrefix: () => stripDeploymentTypePrefix,
writeDeploymentEnvVar: () => writeDeploymentEnvVar
});
module.exports = __toCommonJS(deployment_exports);
var dotenv = __toESM(require("dotenv"), 1);
var import_envvars = require("./envvars.js");
var import_utils = require("./utils/utils.js");
const ENV_VAR_FILE_PATH = ".env.local";
const CONVEX_DEPLOYMENT_VAR_NAME = "CONVEX_DEPLOYMENT";
function getTargetDeploymentName() {
return getDeploymentNameFromAdminKey() ?? getConfiguredDeploymentFromEnvVar().name;
}
function getConfiguredDeploymentFromEnvVar() {
dotenv.config({ path: ENV_VAR_FILE_PATH });
dotenv.config();
const raw = process.env[CONVEX_DEPLOYMENT_VAR_NAME] ?? null;
if (raw === null || raw === "") {
return { type: null, name: null };
}
const name = stripDeploymentTypePrefix(raw);
const type = getDeploymentTypeFromConfiguredDeployment(raw);
return { type, name };
}
function stripDeploymentTypePrefix(deployment) {
return deployment.split(":").at(-1);
}
function getDeploymentTypeFromConfiguredDeployment(raw) {
const typeRaw = raw.split(":")[0];
const type = typeRaw === "prod" || typeRaw === "dev" || typeRaw === "preview" ? typeRaw : null;
return type;
}
async function writeDeploymentEnvVar(ctx, deploymentType, deployment) {
const existingFile = ctx.fs.exists(ENV_VAR_FILE_PATH) ? ctx.fs.readUtf8File(ENV_VAR_FILE_PATH) : null;
const changedFile = changesToEnvVarFile(
existingFile,
deploymentType,
deployment
);
const existingValue = process.env[CONVEX_DEPLOYMENT_VAR_NAME];
const deploymentEnvVarValue = deploymentType + ":" + deployment.deploymentName;
process.env[CONVEX_DEPLOYMENT_VAR_NAME] = deploymentEnvVarValue;
if (changedFile !== null) {
ctx.fs.writeUtf8File(ENV_VAR_FILE_PATH, changedFile);
return {
wroteToGitIgnore: await gitIgnoreEnvVarFile(ctx),
changedDeploymentEnvVar: existingValue !== deploymentEnvVarValue
};
}
return {
wroteToGitIgnore: false,
changedDeploymentEnvVar: existingValue !== deploymentEnvVarValue
};
}
async function eraseDeploymentEnvVar(ctx) {
const existingFile = ctx.fs.exists(ENV_VAR_FILE_PATH) ? ctx.fs.readUtf8File(ENV_VAR_FILE_PATH) : null;
if (existingFile === null) {
return false;
}
const config = dotenv.parse(existingFile);
const existing = config[CONVEX_DEPLOYMENT_VAR_NAME];
if (existing === void 0) {
return false;
}
const changedFile = existingFile.replace(
(0, import_envvars.getEnvVarRegex)(CONVEX_DEPLOYMENT_VAR_NAME),
""
);
ctx.fs.writeUtf8File(ENV_VAR_FILE_PATH, changedFile);
return true;
}
async function gitIgnoreEnvVarFile(ctx) {
const gitIgnorePath = ".gitignore";
const gitIgnoreContents = ctx.fs.exists(gitIgnorePath) ? ctx.fs.readUtf8File(gitIgnorePath) : "";
const changedGitIgnore = changesToGitIgnore(gitIgnoreContents);
if (changedGitIgnore !== null) {
ctx.fs.writeUtf8File(gitIgnorePath, changedGitIgnore);
return true;
}
return false;
}
function changesToEnvVarFile(existingFile, deploymentType, {
team,
project,
deploymentName
}) {
const deploymentValue = deploymentType + ":" + deploymentName;
const commentOnPreviousLine = "# Deployment used by `npx convex dev`";
const commentAfterValue = `team: ${team}, project: ${project}`;
return (0, import_envvars.changedEnvVarFile)(
existingFile,
CONVEX_DEPLOYMENT_VAR_NAME,
deploymentValue,
commentAfterValue,
commentOnPreviousLine
);
}
function changesToGitIgnore(existingFile) {
if (existingFile === null) {
return `${ENV_VAR_FILE_PATH}
`;
}
const gitIgnoreLines = existingFile.split("\n");
const envVarFileIgnored = gitIgnoreLines.some(
(line) => line === ".env.local" || line === ".env.*" || line === ".env*" || line === "*.local" || line === ".env*.local"
);
if (!envVarFileIgnored) {
return `${existingFile}
${ENV_VAR_FILE_PATH}
`;
} else {
return null;
}
}
function getDeploymentNameFromAdminKey() {
const adminKey = (0, import_utils.readAdminKeyFromEnvVar)();
if (adminKey === void 0) {
return null;
}
return deploymentNameFromAdminKey(adminKey);
}
async function deploymentNameFromAdminKeyOrCrash(ctx, adminKey) {
const deploymentName = deploymentNameFromAdminKey(adminKey);
if (deploymentName === null) {
return await ctx.crash({
exitCode: 1,
errorType: "fatal",
printedMessage: `Please set ${import_utils.CONVEX_DEPLOY_KEY_ENV_VAR_NAME} to a new key which you can find on your Convex dashboard.`
});
}
return deploymentName;
}
function deploymentNameFromAdminKey(adminKey) {
const parts = adminKey.split("|");
if (parts.length === 1) {
return null;
}
if (isPreviewDeployKey(adminKey)) {
return null;
}
return stripDeploymentTypePrefix(parts[0]);
}
function isPreviewDeployKey(adminKey) {
const parts = adminKey.split("|");
if (parts.length === 1) {
return false;
}
const [prefix] = parts;
const prefixParts = prefix.split(":");
return prefixParts[0] === "preview" && prefixParts.length === 3;
}
function deploymentTypeFromAdminKey(adminKey) {
const parts = adminKey.split(":");
if (parts.length === 1) {
return "prod";
}
return parts.at(0);
}
async function getTeamAndProjectFromPreviewAdminKey(ctx, adminKey) {
const parts = adminKey.split("|")[0].split(":");
if (parts.length !== 3) {
return await ctx.crash({
exitCode: 1,
errorType: "fatal",
printedMessage: "Malformed preview CONVEX_DEPLOY_KEY, get a new key from Project Settings."
});
}
const [_preview, teamSlug, projectSlug] = parts;
return { teamSlug, projectSlug };
}
//# sourceMappingURL=deployment.js.map