UNPKG

convex

Version:

Client for the Convex Cloud

134 lines (133 loc) 3.91 kB
"use strict"; import chalk from "chalk"; import inquirer from "inquirer"; import path from "path"; import { logFailure, logFinishedStep, logMessage, logWarning, showSpinner } from "../../bundler/context.js"; import { projectDashboardUrl } from "../dashboard.js"; import { createProjectProvisioningDevOrProd } from "./api.js"; import { doCodegen, doInitCodegen } from "./codegen.js"; import { configFilepath, readProjectConfig, upgradeOldAuthInfoToAuthConfig, writeProjectConfig } from "./config.js"; import { writeDeploymentEnvVar } from "./deployment.js"; import { writeConvexUrlToEnvFile } from "./envvars.js"; import { functionsDir, logAndHandleAxiosError, validateOrSelectTeam } from "./utils.js"; const cwd = path.basename(process.cwd()); export async function init(ctx, deploymentType = "prod", config) { const configPath = await configFilepath(ctx); const { teamSlug: selectedTeam, chosen: didChooseBetweenTeams } = await validateOrSelectTeam(ctx, config.team, "Team:"); let projectName = config.project || cwd; if (process.stdin.isTTY && !config.project) { projectName = (await inquirer.prompt([ { type: "input", name: "project", message: "Project name:", default: cwd } ])).project; } showSpinner(ctx, "Creating new Convex project..."); let projectSlug, teamSlug, deploymentName, url, adminKey, projectsRemaining; try { ({ projectSlug, teamSlug, deploymentName, url, adminKey, projectsRemaining } = await createProjectProvisioningDevOrProd( ctx, { teamSlug: selectedTeam, projectName }, deploymentType )); } catch (err) { logFailure(ctx, "Unable to create project."); return await logAndHandleAxiosError(ctx, err); } const teamMessage = didChooseBetweenTeams ? " in team " + chalk.bold(teamSlug) : ""; logFinishedStep( ctx, `Created project ${chalk.bold( projectSlug )}${teamMessage}, manage it at ${chalk.bold( projectDashboardUrl(teamSlug, projectSlug) )}` ); if (projectsRemaining <= 2) { logWarning( ctx, chalk.yellow.bold( `Your account now has ${projectsRemaining} project${projectsRemaining === 1 ? "" : "s"} remaining.` ) ); } const { projectConfig: existingProjectConfig } = await readProjectConfig(ctx); const functionsPath = functionsDir(configPath, existingProjectConfig); const { wroteToGitIgnore } = await writeDeploymentEnvVar( ctx, deploymentType, { team: teamSlug, project: projectSlug, deploymentName } ); const projectConfig = await upgradeOldAuthInfoToAuthConfig( ctx, existingProjectConfig, functionsPath ); await writeProjectConfig(ctx, projectConfig); await doInitCodegen(ctx, functionsPath, true); await doCodegen(ctx, functionsPath, "disable"); await finalizeConfiguration( ctx, functionsPath, deploymentType, url, wroteToGitIgnore ); return { deploymentName, adminKey, url }; } export async function finalizeConfiguration(ctx, functionsPath, deploymentType, url, wroteToGitIgnore) { const envVarWrite = await writeConvexUrlToEnvFile(ctx, url); if (envVarWrite !== null) { logFinishedStep( ctx, `Provisioned a ${deploymentType} deployment and saved its: name as CONVEX_DEPLOYMENT to .env.local URL as ${envVarWrite.envVar} to ${envVarWrite.envFile}` ); } else { logFinishedStep( ctx, `Provisioned ${deploymentType} deployment and saved its name as CONVEX_DEPLOYMENT to .env.local` ); } if (wroteToGitIgnore) { logMessage(ctx, chalk.gray(` Added ".env.local" to .gitignore`)); } logMessage( ctx, ` Write your Convex functions in ${chalk.bold(functionsPath)} Give us feedback at https://convex.dev/community or support@convex.dev ` ); } //# sourceMappingURL=init.js.map