UNPKG

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
// 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 };