constatic
Version:
Constatic is a CLI for creating and managing modern TypeScript projects, providing an organized structure and features that streamline development.
53 lines (52 loc) • 2.06 kB
JavaScript
// src/menus/main/presets/scripts/menu-edit.ts
import { copy, divider, uiMessage } from "#helpers";
import { menus } from "#menus";
import { withDefaults } from "../../../../helpers/prompts.js";
import { search } from "@inquirer/prompts";
import { rm } from "node:fs/promises";
import path from "node:path";
import { formatPresets } from "./actions/format.js";
import { modifyScriptPresetMenu } from "./actions/modify.js";
async function presetsScriptsEditMenu(cli, presets) {
const selected = await search(withDefaults({
message: uiMessage({
"en-US": "Select the presets you want to edit",
"pt-BR": "Selecione as predefinições que deseja editar"
}),
async source(term) {
if (!term)
return formatPresets(presets);
return formatPresets(presets.filter((preset2) => {
const name = preset2.name.toLowerCase();
return name.startsWith(term.toLowerCase()) || name.includes(term.toLowerCase());
}));
}
}));
divider();
if (selected === "back") {
menus.presets.scripts.main(cli);
return;
}
const index = presets.findIndex((preset2) => preset2.id === selected);
const original = presets[index];
if (!original) {
menus.presets.scripts.edit(cli, presets);
return;
}
const preset = { ...original };
const status = await modifyScriptPresetMenu(cli, preset, true);
if (status === "cancel") {
menus.presets.scripts.edit(cli, presets);
return;
}
const removed = original.files.filter((file) => preset.files.some((f) => f.path === file.path));
const presetPath = path.join(cli.config.dirname, "presets/scripts", preset.id);
await Promise.all(removed.map((file) => rm(path.join(presetPath, file.path), { force: true }).catch(() => null)));
await Promise.all(preset.files.map(({ path: filepath, dist = filepath }) => copy(path.join(process.cwd(), filepath), path.join(presetPath, dist)).catch(() => null)));
presets[index] = preset;
cli.config.set("presets.scripts", presets);
menus.presets.scripts.main(cli);
}
export {
presetsScriptsEditMenu
};