convex
Version:
Client for the Convex Cloud
69 lines (68 loc) • 2.62 kB
JavaScript
;
import { Command, Option } from "@commander-js/extra-typings";
import { oneoffContext } from "../bundler/context.js";
import { logFinishedStep, logMessage, showSpinner } from "../bundler/log.js";
import { chalkStderr } from "chalk";
import { createProject } from "./lib/api.js";
import { ensureAuthCanCreateDeployment } from "./lib/deploymentSelection.js";
import { validateOrSelectTeam } from "./lib/utils/utils.js";
import { promptString } from "./lib/utils/prompts.js";
import { projectDashboardUrl } from "./lib/dashboard.js";
async function runProjectCreate(nameArg, options) {
const ctx = await oneoffContext({
url: void 0,
adminKey: void 0,
envFile: void 0
});
await ensureAuthCanCreateDeployment(ctx);
const { team } = await validateOrSelectTeam(ctx, options.team, "Team:");
let projectName = nameArg;
if (!projectName) {
if (!process.stdin.isTTY) {
return await ctx.crash({
exitCode: 1,
errorType: "fatal",
printedMessage: "Specify a project name:\n `npx convex project create my-app`"
});
}
projectName = await promptString(ctx, {
message: "Project name:"
});
}
showSpinner(`Creating project ${projectName}...`);
const { projectSlug } = await createProject(ctx, {
teamId: team.id,
projectName,
deploymentToProvision: null
});
logFinishedStep(
`Created project ${chalkStderr.bold(projectSlug)} in team ${chalkStderr.bold(team.slug)}, manage it at ${chalkStderr.bold(
projectDashboardUrl(team.slug, projectSlug)
)}`
);
logMessage(
chalkStderr.gray(
`Next, add a deployment with \`npx convex deployment create ${team.slug}:${projectSlug}:dev --type dev\` (pass \`--region us\` to choose a region).`
)
);
}
export const projectCreate = new Command("create").summary("Create a new project").description(
[
"Create a new project.",
"",
"Provisioning a deployment is a separate step \u2014 after creating the",
"project, run `npx convex deployment create` to add one.",
"",
"\u2022 Create a project in your only team: `npx convex project create my-app`",
"\u2022 Pick the team: `npx convex project create my-app --team my-team`"
].join("\n")
).allowExcessArguments(false).argument(
"[name]",
"The name of the new project. Prompted for when omitted in an interactive terminal; required otherwise."
).addOption(
new Option(
"--team <team_slug>",
"The team to create the project in. Defaults to your only team, or prompts when you belong to several."
)
).action(runProjectCreate);
//# sourceMappingURL=projectCreate.js.map