UNPKG

@t1mmen/srtd

Version:

Supabase Repeatable Template Definitions (srtd): 🪄 Live-reloading SQL templates for Supabase DX. Make your database changes reviewable and migrations maintainable! 🚀

203 lines • 8.27 kB
var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { if (value !== null && value !== void 0) { if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); var dispose, inner; if (async) { if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); dispose = value[Symbol.asyncDispose]; } if (dispose === void 0) { if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); dispose = value[Symbol.dispose]; if (async) inner = dispose; } if (typeof dispose !== "function") throw new TypeError("Object not disposable."); if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } }; env.stack.push({ value: value, dispose: dispose, async: async }); } else if (async) { env.stack.push({ async: true }); } return value; }; var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) { return function (env) { function fail(e) { env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; env.hasError = true; } var r, s = 0; function next() { while (r = env.stack.pop()) { try { if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next); if (r.dispose) { var result = r.dispose.call(r.value); if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); } else s |= 1; } catch (e) { fail(e); } } if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve(); if (env.hasError) throw env.error; } return next(); }; })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { var e = new Error(message); return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; }); // src/commands/clear.ts import { select } from '@inquirer/prompts'; import chalk from 'chalk'; import { Command } from 'commander'; import figures from 'figures'; import { createBaseJsonOutput, writeJson } from '../output/index.js'; import { Orchestrator } from '../services/Orchestrator.js'; import { createSpinner, renderBranding } from '../ui/index.js'; import { getConfig, resetConfig } from '../utils/config.js'; import { findProjectRoot } from '../utils/findProjectRoot.js'; import { getErrorMessage, isPromptExit } from '../utils/getErrorMessage.js'; function formatClearJsonOutput(success, error) { return { ...createBaseJsonOutput('clear', success, error), cleared: success, }; } const clearOptions = [ { name: 'Clear local build logs', value: 'local' }, { name: 'Clear shared build logs', value: 'shared' }, { name: 'Reset config and logs to initial defaults', value: 'full_reset' }, ]; async function handleClearAction(value, projectRoot, jsonMode = false) { const spinner = jsonMode ? null : createSpinner('').start(); try { const env_1 = { stack: [], error: void 0, hasError: false }; try { const { config } = await getConfig(projectRoot); const orchestrator = __addDisposableResource(env_1, await Orchestrator.create(projectRoot, config, { silent: true }), true); switch (value) { case 'local': await orchestrator.clearBuildLogs('local'); if (spinner) spinner.succeed('Cleared local build logs'); break; case 'shared': await orchestrator.clearBuildLogs('shared'); if (spinner) spinner.succeed('Cleared shared build logs'); break; case 'full_reset': await resetConfig(projectRoot); await orchestrator.clearBuildLogs('both'); if (spinner) spinner.succeed('Reset config and cleared all build logs'); break; default: throw new Error('Invalid option'); } return { exitCode: 0 }; } catch (e_1) { env_1.error = e_1; env_1.hasError = true; } finally { const result_1 = __disposeResources(env_1); if (result_1) await result_1; } } catch (err) { const errorMsg = getErrorMessage(err); if (spinner) { spinner.fail('Failed to clear'); console.log(chalk.red(`${figures.cross} ${errorMsg}`)); } return { exitCode: 1, error: errorMsg }; } } export const clearCommand = new Command('clear') .description('Clear build logs or reset configuration') .option('--local', 'Clear local build logs (non-interactive)') .option('--shared', 'Clear shared build logs (non-interactive)') .option('--reset', 'Reset config and logs to initial defaults (non-interactive)') .option('--json', 'Output results as JSON') .action(async (options) => { let exitCode = 0; let errorMsg; try { // Skip branding in JSON mode if (!options.json) { await renderBranding({ subtitle: 'Maintenance' }); } const projectRoot = await findProjectRoot(); // Non-interactive mode via flags if (options.local) { const res = await handleClearAction('local', projectRoot, options.json); exitCode = res.exitCode; errorMsg = res.error; } else if (options.shared) { const res = await handleClearAction('shared', projectRoot, options.json); exitCode = res.exitCode; errorMsg = res.error; } else if (options.reset) { const res = await handleClearAction('full_reset', projectRoot, options.json); exitCode = res.exitCode; errorMsg = res.error; } else if (options.json) { // JSON mode requires explicit flag errorMsg = 'JSON mode requires --local, --shared, or --reset flag.'; exitCode = 1; } else if (!process.stdin.isTTY) { // Interactive mode requires TTY console.log(chalk.red(`${figures.cross} Interactive mode requires a TTY.`)); console.log(chalk.dim('Use --local, --shared, or --reset flags for non-interactive mode.')); exitCode = 1; } else { // Show interactive selection const answer = await select({ message: 'Select what to clear:', choices: clearOptions, }); const res = await handleClearAction(answer, projectRoot); exitCode = res.exitCode; errorMsg = res.error; } // Output JSON if in JSON mode if (options.json) { const jsonOutput = formatClearJsonOutput(exitCode === 0, errorMsg); writeJson(jsonOutput); } } catch (error) { // Handle Ctrl+C gracefully if (isPromptExit(error)) { exitCode = 0; } else { const errMsg = getErrorMessage(error); if (options.json) { const jsonOutput = formatClearJsonOutput(false, errMsg); writeJson(jsonOutput); } else { console.log(); console.log(chalk.red(`${figures.cross} Error accessing project:`)); console.log(chalk.red(errMsg)); } exitCode = 1; } } // Exit AFTER the await using block has completed, ensuring dispose() runs process.exit(exitCode); }); //# sourceMappingURL=clear.js.map