UNPKG

studiocms

Version:

Astro Native CMS for AstroDB. Built from the ground up by the Astro community.

127 lines (126 loc) 4.61 kB
import { StudioCMSColorwayBg } from "@withstudiocms/cli-kit/colors"; import { label } from "@withstudiocms/cli-kit/messages"; import { intro, log, select, tasks } from "@withstudiocms/effect/clack"; import { Cli, Effect, genLogger } from "../../effect.js"; import { checkRequiredEnvVarsEffect } from "../utils/checkRequiredEnvVars.js"; import { CliContext, genContext, parseDebug } from "../utils/context.js"; import { intro as SCMS_Intro } from "../utils/intro.js"; import { buildDebugLogger } from "../utils/logger.js"; import { libsqlCreateUsers } from "./steps/libsql/createUsers.js"; import { libsqlModifyUsers } from "./steps/libsql/modifyUsers.js"; import { next } from "./steps/next.js"; const debug = Cli.Options.boolean("debug").pipe( Cli.Options.optional, Cli.Options.withDefault(false), Cli.Options.withDescription("Enable debug mode") ); const dryRun = Cli.Options.boolean("dry-run").pipe( Cli.Options.optional, Cli.Options.withAlias("d"), Cli.Options.withDescription("Dry run mode") ); const exitIfEmpty = Effect.fn(function* (context, items, itemType) { if (items.length === 0) { yield* log.error(`No ${itemType} selected, exiting...`); yield* context.exit(0); } }); var DBOptionsType = /* @__PURE__ */ ((DBOptionsType2) => { DBOptionsType2["libsql"] = "libsql"; return DBOptionsType2; })(DBOptionsType || {}); var DBEditOptions = /* @__PURE__ */ ((DBEditOptions2) => { DBEditOptions2["create"] = "create"; DBEditOptions2["modify"] = "modify"; return DBEditOptions2; })(DBEditOptions || {}); const SelectToStepMap = { ["libsql" /* libsql */]: { default: Effect.fn(function* (context, val) { yield* log.error("No valid option selected, exiting..."); return yield* context.pCancel(val); }), ["create" /* create */]: libsqlCreateUsers, ["modify" /* modify */]: libsqlModifyUsers } }; const OptionsMap = { default: Effect.fn(function* (context, val) { yield* log.error("No valid option selected, exiting..."); return yield* context.pCancel(val); }), ["libsql" /* libsql */]: Effect.fn(function* (steps, context) { const libsqlAction = yield* select({ message: "What would you like to do?", options: [ { value: "create" /* create */, label: "Create new user" }, { value: "modify" /* modify */, label: "Modify an existing user" } ] }); switch (libsqlAction) { case "create" /* create */: case "modify" /* modify */: { steps.push(SelectToStepMap["libsql" /* libsql */][libsqlAction]); break; } default: { return yield* SelectToStepMap["libsql" /* libsql */].default(context, libsqlAction); } } }) }; const usersCMD = Cli.Command.make( "users", { debug, dryRun }, ({ debug: rawDebug, dryRun: rawDryRun }) => genLogger("studiocms/cli/users")(function* () { const [dry, context, debug2] = yield* Effect.all([ rawDryRun, genContext, parseDebug(rawDebug) ]); const debugLogger = yield* buildDebugLogger(debug2); const cliContext = CliContext.makeProvide(context); yield* Effect.all([ debugLogger(`Context: ${JSON.stringify(context, null, 2)}`), intro( `${label("StudioCMS", StudioCMSColorwayBg, context.chalk.black)} Interactive CLI - initializing...` ), checkRequiredEnvVarsEffect([ "ASTRO_DB_REMOTE_URL", "ASTRO_DB_APP_TOKEN", "CMS_ENCRYPTION_KEY" ]) ]); yield* SCMS_Intro(debug2).pipe(cliContext); const steps = []; const options = yield* select({ message: "What kind of Database are you using?", options: [{ value: "libsql" /* libsql */, label: "libSQL Remote" }] }); switch (options) { case "libsql" /* libsql */: { yield* OptionsMap["libsql" /* libsql */](steps, context); break; } default: yield* OptionsMap.default(context, options); return; } yield* exitIfEmpty(context, steps, "steps"); yield* Effect.all([ debugLogger("Running steps..."), Effect.forEach(steps, (step) => step(context, debug2, dry)) ]); yield* exitIfEmpty(context, context.tasks, "tasks"); yield* Effect.all([debugLogger("Running tasks..."), tasks(context.tasks)]); yield* Effect.all([debugLogger("Running next steps..."), next(debug2).pipe(cliContext)]); yield* Effect.all([debugLogger("Interactive CLI completed, exiting..."), context.exit(0)]); }) ).pipe(Cli.Command.withDescription("Utilities for Tweaking Users in StudioCMS")); export { DBEditOptions, DBOptionsType, debug, dryRun, usersCMD };