UNPKG

convex

Version:

Client for the Convex Cloud

212 lines (211 loc) 7.83 kB
"use strict"; 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