mirror of
https://github.com/czlonkowski/n8n-mcp.git
synced 2026-01-30 06:22:04 +00:00
perf: implement validator instance caching to avoid redundant initialization
- Add module-level cached WorkflowValidator instance - Create getValidator() helper to reuse validator across mutations - Update pre/post mutation validation to use cached instance - Avoids redundant NodeSimilarityService initialization on every mutation Conceived by Romuald Członkowski - https://www.aiadvisors.pl/en 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -17,6 +17,20 @@ import { WorkflowVersioningService } from '../services/workflow-versioning-servi
|
|||||||
import { WorkflowValidator } from '../services/workflow-validator';
|
import { WorkflowValidator } from '../services/workflow-validator';
|
||||||
import { EnhancedConfigValidator } from '../services/enhanced-config-validator';
|
import { EnhancedConfigValidator } from '../services/enhanced-config-validator';
|
||||||
|
|
||||||
|
// Cached validator instance to avoid recreating on every mutation
|
||||||
|
let cachedValidator: WorkflowValidator | null = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get or create cached workflow validator instance
|
||||||
|
* Reuses the same validator to avoid redundant NodeSimilarityService initialization
|
||||||
|
*/
|
||||||
|
function getValidator(repository: NodeRepository): WorkflowValidator {
|
||||||
|
if (!cachedValidator) {
|
||||||
|
cachedValidator = new WorkflowValidator(repository, EnhancedConfigValidator);
|
||||||
|
}
|
||||||
|
return cachedValidator;
|
||||||
|
}
|
||||||
|
|
||||||
// Zod schema for the diff request
|
// Zod schema for the diff request
|
||||||
const workflowDiffSchema = z.object({
|
const workflowDiffSchema = z.object({
|
||||||
id: z.string(),
|
id: z.string(),
|
||||||
@@ -99,7 +113,7 @@ export async function handleUpdatePartialWorkflow(
|
|||||||
|
|
||||||
// Validate workflow BEFORE mutation (for telemetry)
|
// Validate workflow BEFORE mutation (for telemetry)
|
||||||
try {
|
try {
|
||||||
const validator = new WorkflowValidator(repository, EnhancedConfigValidator);
|
const validator = getValidator(repository);
|
||||||
validationBefore = await validator.validateWorkflow(workflowBefore, {
|
validationBefore = await validator.validateWorkflow(workflowBefore, {
|
||||||
validateNodes: true,
|
validateNodes: true,
|
||||||
validateConnections: true,
|
validateConnections: true,
|
||||||
@@ -281,7 +295,7 @@ export async function handleUpdatePartialWorkflow(
|
|||||||
|
|
||||||
// Validate workflow AFTER mutation (for telemetry)
|
// Validate workflow AFTER mutation (for telemetry)
|
||||||
try {
|
try {
|
||||||
const validator = new WorkflowValidator(repository, EnhancedConfigValidator);
|
const validator = getValidator(repository);
|
||||||
validationAfter = await validator.validateWorkflow(finalWorkflow, {
|
validationAfter = await validator.validateWorkflow(finalWorkflow, {
|
||||||
validateNodes: true,
|
validateNodes: true,
|
||||||
validateConnections: true,
|
validateConnections: true,
|
||||||
|
|||||||
Reference in New Issue
Block a user