UNPKG

forest-cli

Version:

The Lumberjacks' toolbelt is the Forest CLI which makes easy to manage your back office application directly from the terminal.

53 lines 5.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.explainApiError = exports.formatPlan = void 0; const types_1 = require("./types"); const OP_PREFIX = { add: '+', remove: '-', replace: '~', test: '?' }; /** Render the plan grouped by domain, with warnings and a final count. */ function formatPlan(ops, warnings) { if (ops.length === 0 && warnings.length === 0) { return '✓ No changes: the remote layout already matches the file.'; } const lines = []; types_1.LAYOUT_DOMAINS.forEach(domain => { const domainOps = ops.filter(op => op.domain === domain); if (domainOps.length === 0) return; lines.push(`${domain} (${domainOps.length} change${domainOps.length > 1 ? 's' : ''})`); domainOps.forEach(op => lines.push(` ${OP_PREFIX[op.op] ?? '·'} ${op.label}`)); }); warnings.forEach(warning => lines.push(` ⚠ ${warning}`)); if (ops.length > 0) { const perDomain = types_1.LAYOUT_DOMAINS.map(domain => ({ count: ops.filter(op => op.domain === domain).length, domain, })) .filter(entry => entry.count > 0) .map(entry => `${entry.count} PATCH /api/${entry.domain}`); lines.push('', `${ops.length} operation${ops.length > 1 ? 's' : ''} to send (${perDomain.join(', ')}).`); } return lines.join('\n'); } exports.formatPlan = formatPlan; /** Map a Forest API error to an actionable message (422 path → JSON key, 403 premium…). */ function explainApiError(error, sentOps) { if (error.status === 422) { const match = error.detail.match(/path:\s*'([^']+)'/); const offending = match ? sentOps.find(op => op.path === match[1]) : undefined; const origin = offending ? `\n → comes from: ${offending.jsonPath}\n Revert this change in the file, or edit it from the UI if you know what you are doing.` : ''; return `The server rejected the patch (422):\n ${error.detail}${origin}`; } if (error.status === 403) { const premium = sentOps.find(op => op.premiumPack); if (premium) { return (`Premium feature required (pack « ${premium.premiumPack} ») for ${premium.jsonPath}.\n` + 'Nothing was applied for this domain (atomic patch).'); } return 'Access denied (403): your role does not allow editing the layout of this environment.'; } return `Server error (${error.status}): ${error.detail}`; } exports.explainApiError = explainApiError; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbi1mb3JtYXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvbGF5b3V0L3BsYW4tZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLG1DQUF5QztBQUV6QyxNQUFNLFNBQVMsR0FBMkIsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFFN0YsMEVBQTBFO0FBQzFFLFNBQWdCLFVBQVUsQ0FBQyxHQUFnQixFQUFFLFFBQWtCO0lBQzdELElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDN0MsT0FBTywyREFBMkQsQ0FBQztLQUNwRTtJQUVELE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUUzQixzQkFBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUM5QixNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQztRQUN6RCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFFbkMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sS0FBSyxTQUFTLENBQUMsTUFBTSxVQUFVLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkYsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLENBQUMsS0FBSyxF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