UNPKG

convex

Version:

Client for the Convex Cloud

174 lines (173 loc) 5.35 kB
"use strict"; import chalk from "chalk"; import boxen from "boxen"; import { pullConfig, writeProjectConfig, configFilepath, readProjectConfig } from "./config.js"; import { fatalServerErr, functionsDir, validateOrSelectTeam, bigBrainAPI, loadPackageJson } from "./utils.js"; import inquirer from "inquirer"; import ora from "ora"; import path from "path"; import { doCodegen, doInitCodegen } from "./codegen"; const cwd = path.basename(process.cwd()); export async function init(ctx, project, team) { { const configPath = await configFilepath(ctx); if (ctx.fs.exists(configPath)) { console.error( chalk.green(`Found existing project config "${configPath}"`) ); return; } const shouldContinue = await optins(ctx); if (!shouldContinue) { return await ctx.fatalError(1, void 0); } const selectedTeam = await validateOrSelectTeam( ctx, team, "Choose which team to create this project in:" ); let projectName = project || cwd; if (process.stdin.isTTY && !project) { projectName = (await inquirer.prompt([ { type: "input", name: "project", message: "Enter a name for your project:", default: cwd } ])).project; } const spinner = ctx.spinner = ora({ text: "Creating new Convex project...\n", stream: process.stdout }).start(); let projectSlug, teamSlug, prodUrl, adminKey, projectsRemaining, projectConfig, modules; try { ({ projectSlug, teamSlug, prodUrl, adminKey, projectsRemaining } = await create_project(ctx, selectedTeam, projectName)); ({ projectConfig, modules } = await pullConfig( ctx, projectSlug, teamSlug, prodUrl, adminKey )); } catch (err) { spinner.fail("Unable to create project."); return await fatalServerErr(ctx, err); } spinner.succeed(`Successfully created project!`); console.log( chalk.green( `Your account now has ${projectsRemaining} projects remaining.` ) ); if (modules.length > 0) { console.error(chalk.red("Error: Unexpected modules in new project")); return await ctx.fatalError(1, void 0); } const packages = await loadPackageJson(ctx); const isCreateReactApp = !!packages.filter( ({ name }) => name === "react-scripts" ).length; if (isCreateReactApp) { projectConfig.functions = `src/${projectConfig.functions}`; } await writeProjectConfig(ctx, projectConfig); await doInitCodegen( ctx, functionsDir(configPath, projectConfig), true ); { const { projectConfig: projectConfig2, configPath: configPath2 } = await readProjectConfig(ctx); await doCodegen({ ctx, projectConfig: projectConfig2, configPath: configPath2, deploymentType: "dev", typeCheckMode: "disable", quiet: true }); } const boxedText = chalk.white("Project ready:\n") + chalk.whiteBright.bold(projectName) + "\n" + chalk.whiteBright(projectConfig.project); const boxenOptions = { padding: 1, margin: 1, borderColor: "green", backgroundColor: "#555555" }; console.log(boxen(boxedText, boxenOptions)); console.log( chalk.green("Write your Convex functions in"), chalk.green.bold(functionsDir(configPath, projectConfig)) ); console.log("Configuration settings written to", chalk.bold(configPath)); console.log(chalk.bold("\nWe would love feedback at either:")); console.log("- https://convex.dev/community"); console.log("- support@convex.dev"); console.log( "\nSee documentation at", chalk.bold("https://docs.convex.dev"), "for next steps." ); } } async function create_project(ctx, team, projectName) { const provisioningArgs = { team, backendVersionOverride: process.env.CONVEX_BACKEND_VERSION_OVERRIDE, projectName }; const data = await bigBrainAPI( ctx, "POST", "create_project", provisioningArgs ); const projectSlug = data.projectSlug; const teamSlug = data.teamSlug; const prodUrl = data.prodUrl; const adminKey = data.adminKey; const projectsRemaining = data.projectsRemaining; if (projectSlug === void 0 || teamSlug == void 0 || prodUrl === void 0 || adminKey === void 0 || projectsRemaining === void 0) { throw new Error( "Unknown error during provisioning: " + JSON.stringify(data) ); } return { projectSlug, teamSlug, prodUrl, adminKey, projectsRemaining }; } export async function optins(ctx) { const data = await bigBrainAPI(ctx, "POST", "check_opt_ins", {}); if (data.optInsToAccept.length == 0) { return true; } for (const optInToAccept of data.optInsToAccept) { const confirmed = (await inquirer.prompt([ { type: "confirm", name: "confirmed", message: optInToAccept.message } ])).confirmed; if (!confirmed) { console.log("Please accept the Terms of Service to use Convex."); return Promise.resolve(false); } } const optInsAccepted = data.optInsToAccept.map((o) => o.optIn); const args = { optInsAccepted }; await bigBrainAPI(ctx, "POST", "accept_opt_ins", args); return true; } //# sourceMappingURL=init.js.map