validateEditTool.ts
utils/settings/validateEditTool.ts
46
Lines
1695
Bytes
1
Exports
3
Imports
10
Keywords
What this is
This page documents one file from the repository and includes its full source so you can read it without leaving the docs site.
Beginner explanation
This file is one piece of the larger system. Its name, directory, imports, and exports show where it fits. Start by reading the exports and related files first.
How it is used
Start from the exports list and related files. Those are the easiest clues for where this file fits into the system.
Expert explanation
Architecturally, this file intersects with tool-system. It contains 46 lines, 3 detected imports, and 1 detected exports.
Important relationships
Detected exports
validateInputForSettingsFileEdit
Keywords
validationfileresultbeforeaftervalidationvalidatesettingsfilecontentsettingseditsparamfilepath
Detected imports
src/Tool.js../permissions/filesystem.js./validation.js
Source notes
This page embeds the full file contents. Small or leaf files are still indexed honestly instead of being over-explained.
Full source
import type { ValidationResult } from 'src/Tool.js'
import { isClaudeSettingsPath } from '../permissions/filesystem.js'
import { validateSettingsFileContent } from './validation.js'
/**
* Validates settings file edits to ensure the result conforms to SettingsSchema.
* This is used by FileEditTool to avoid code duplication.
*
* @param filePath - The file path being edited
* @param originalContent - The original file content before edits
* @param getUpdatedContent - A closure that returns the content after applying edits
* @returns Validation result with error details if validation fails
*/
export function validateInputForSettingsFileEdit(
filePath: string,
originalContent: string,
getUpdatedContent: () => string,
): Extract<ValidationResult, { result: false }> | null {
// Only validate Claude settings files
if (!isClaudeSettingsPath(filePath)) {
return null
}
// Check if the current file (before edit) conforms to the schema
const beforeValidation = validateSettingsFileContent(originalContent)
if (!beforeValidation.isValid) {
// If the before version is invalid, allow the edit (don't block it)
return null
}
// If the before version is valid, ensure the after version is also valid
const updatedContent = getUpdatedContent()
const afterValidation = validateSettingsFileContent(updatedContent)
if (!afterValidation.isValid) {
return {
result: false,
message: `Claude Code settings.json validation failed after edit:\n${afterValidation.error}\n\nFull schema:\n${afterValidation.fullSchema}\nIMPORTANT: Do not update the env unless explicitly instructed to do so.`,
errorCode: 10,
}
}
return null
}