studiocms
Version:
Astro Native CMS for AstroDB. Built from the ground up by the Astro community.
127 lines (126 loc) • 4.61 kB
JavaScript
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
};