init project
This commit is contained in:
Vendored
+47
@@ -0,0 +1,47 @@
|
||||
import { z } from 'zod';
|
||||
import { config } from '../../config.js';
|
||||
import { runCommand } from '../../lib/runCommand.js';
|
||||
import { errorResult, jsonResult, toErrorMessage } from '../shared.js';
|
||||
import { requireLaravel } from './requireLaravel.js';
|
||||
/**
|
||||
* Heuristic: treat an expression as a write if it contains common Eloquent /
|
||||
* DB mutation method names. Read-only inspections (find, get, all, count,
|
||||
* toArray, …) do not require confirm.
|
||||
*/
|
||||
const WRITE_PATTERN = /\b(save|create|update|delete|destroy|forceDelete|insert|upsert|truncate|updateOrCreate|firstOrCreate|push|attach|detach|sync|restore|increment|decrement)\s*\(/i;
|
||||
export function registerTinkerEvalTool(server) {
|
||||
server.registerTool('laravel_tinker_eval', {
|
||||
title: 'Laravel Tinker Eval',
|
||||
description: 'Evaluate a short PHP expression/snippet via `php artisan tinker --execute` for quick data/model inspection. ' +
|
||||
'Read-only by convention. Expressions that appear to mutate data (save/create/update/delete/…) require confirm: true.',
|
||||
inputSchema: {
|
||||
code: z
|
||||
.string()
|
||||
.min(1)
|
||||
.max(4000)
|
||||
.describe('PHP expression to evaluate, e.g. "\\\\App\\\\Models\\\\User::count()" or "config(\'app.name\')".'),
|
||||
confirm: z
|
||||
.boolean()
|
||||
.optional()
|
||||
.describe('Required as true when the expression appears to perform a write/mutation.'),
|
||||
},
|
||||
}, async ({ code, confirm }) => {
|
||||
try {
|
||||
if (WRITE_PATTERN.test(code) && confirm !== true) {
|
||||
return errorResult('This expression looks like it mutates data (save/create/update/delete/…). ' +
|
||||
'Re-run with confirm: true if you intentionally want to write.');
|
||||
}
|
||||
const laravel = requireLaravel();
|
||||
// --execute runs the snippet non-interactively and prints the result.
|
||||
const result = await runCommand('php', ['artisan', 'tinker', `--execute=${code}`], {
|
||||
cwd: laravel.root,
|
||||
timeoutMs: config.defaultCommandTimeoutMs,
|
||||
});
|
||||
return jsonResult({ code, writeDetected: WRITE_PATTERN.test(code), ...result });
|
||||
}
|
||||
catch (error) {
|
||||
return errorResult(toErrorMessage(error));
|
||||
}
|
||||
});
|
||||
}
|
||||
//# sourceMappingURL=tinkerEval.js.map
|
||||
Reference in New Issue
Block a user