61 lines
3.0 KiB
JavaScript
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
|