Files
2026-07-31 13:12:54 -04:00

61 lines
3.0 KiB
JavaScript

import { z } from 'zod';
import { config } from '../../config.js';
import { hasComposerDependency, readComposerJson } from '../../lib/frameworks/composer.js';
import { runCommand } from '../../lib/runCommand.js';
import { errorResult, jsonResult, toErrorMessage } from '../shared.js';
import { requireCodeIgniter } from './requireCodeIgniter.js';
export function registerGenerateCodeIgniterShieldAuthTool(server) {
server.registerTool('generate_codeigniter_shield_auth', {
title: 'Scaffold CodeIgniter Shield Auth',
description: 'Install/setup CodeIgniter Shield auth helpers. Requires codeigniter4/shield. ' +
'Runs `php spark shield:setup` (and optionally composer require). Requires confirm: true.',
inputSchema: {
installPackage: z
.boolean()
.optional()
.default(false)
.describe('If true and Shield is missing, run composer require codeigniter4/shield first.'),
confirm: z.boolean().optional().describe('Required as true — Shield setup modifies project files.'),
},
}, async ({ installPackage, confirm }) => {
try {
if (confirm !== true) {
return errorResult('generate_codeigniter_shield_auth requires confirm: true.');
}
const ci = requireCodeIgniter();
const composer = readComposerJson(ci.root);
const steps = [];
let hasShield = hasComposerDependency(composer, 'codeigniter4/shield');
if (!hasShield && installPackage) {
const requireResult = await runCommand('composer', ['require', 'codeigniter4/shield', '--no-interaction'], { cwd: ci.root, timeoutMs: config.scaffoldCommandTimeoutMs });
steps.push({
step: 'composer-require',
exitCode: requireResult.exitCode,
failed: requireResult.failed,
output: requireResult.output,
});
if (requireResult.failed) {
return errorResult(`Failed to install codeigniter4/shield:\n${requireResult.output}`);
}
hasShield = true;
}
if (!hasShield) {
return errorResult('codeigniter4/shield is not installed. Pass installPackage: true (with confirm: true) ' +
'or run composer_require with package "codeigniter4/shield" first.');
}
const setup = await runCommand('php', ['spark', 'shield:setup', '--no-interaction'], {
cwd: ci.root,
timeoutMs: config.scaffoldCommandTimeoutMs,
});
steps.push({ step: 'shield:setup', exitCode: setup.exitCode, failed: setup.failed, output: setup.output });
return jsonResult({
package: 'codeigniter4/shield',
steps,
});
}
catch (error) {
return errorResult(toErrorMessage(error));
}
});
}
//# sourceMappingURL=generateShieldAuth.js.map