Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 10 additions & 9 deletions src/loaders/node-loader.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import path from 'path';
import { logger } from '../utils/logger';

export interface LoadedNode {
packageName: string;
Expand All @@ -17,14 +18,14 @@ export class N8nNodeLoader {

for (const pkg of this.CORE_PACKAGES) {
try {
console.log(`\n📦 Loading package: ${pkg.name} from ${pkg.path}`);
logger.info(`Loading package: ${pkg.name} from ${pkg.path}`);
// Use the path property to locate the package
const packageJson = require(`${pkg.path}/package.json`);
console.log(` Found ${Object.keys(packageJson.n8n?.nodes || {}).length} nodes in package.json`);
logger.info(`Found ${Object.keys(packageJson.n8n?.nodes || {}).length} nodes in package.json`);
const nodes = await this.loadPackageNodes(pkg.name, pkg.path, packageJson);
results.push(...nodes);
} catch (error) {
console.error(`Failed to load ${pkg.name}:`, error);
logger.error(`Failed to load ${pkg.name}: ${error}`);
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

loadAllNodes() catch block interpolates the caught error into the message (${error}), which can degrade diagnostics (e.g., [object Object]) and drop stack traces. Since the project logger supports variadic args, pass the error as a separate argument (or log error instanceof Error ? error.message/stack : String(error)) so stack/metadata is preserved (see similar logger.error(msg, error) usage in src/http-server.ts).

Suggested change
logger.error(`Failed to load ${pkg.name}: ${error}`);
logger.error(`Failed to load ${pkg.name}`, error);

Copilot uses AI. Check for mistakes.
}
}

Expand Down Expand Up @@ -73,12 +74,12 @@ export class N8nNodeLoader {
const NodeClass = nodeModule.default || nodeModule[nodeName] || Object.values(nodeModule)[0];
if (NodeClass) {
nodes.push({ packageName, nodeName, NodeClass });
console.log(` ✓ Loaded ${nodeName} from ${packageName}`);
logger.debug(`Loaded ${nodeName} from ${packageName}`);
} else {
console.warn(`No valid export found for ${nodeName} in ${packageName}`);
logger.warn(`No valid export found for ${nodeName} in ${packageName}`);
}
} catch (error) {
console.error(`Failed to load node from ${packageName}/${nodePath}:`, (error as Error).message);
logger.error(`Failed to load node from ${packageName}/${nodePath}: ${(error as Error).message}`);
}
}
} else {
Expand All @@ -92,12 +93,12 @@ export class N8nNodeLoader {
const NodeClass = nodeModule.default || nodeModule[nodeName] || Object.values(nodeModule)[0];
if (NodeClass) {
nodes.push({ packageName, nodeName, NodeClass });
console.log(` ✓ Loaded ${nodeName} from ${packageName}`);
logger.debug(`Loaded ${nodeName} from ${packageName}`);
} else {
console.warn(`No valid export found for ${nodeName} in ${packageName}`);
logger.warn(`No valid export found for ${nodeName} in ${packageName}`);
}
} catch (error) {
console.error(`Failed to load node ${nodeName} from ${packageName}:`, (error as Error).message);
logger.error(`Failed to load node ${nodeName} from ${packageName}: ${(error as Error).message}`);
}
}
}
Expand Down
9 changes: 5 additions & 4 deletions src/mappers/docs-mapper.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { promises as fs } from 'fs';
import path from 'path';
import { logger } from '../utils/logger';

export class DocsMapper {
private docsPath = path.join(process.cwd(), 'n8n-docs');
Expand All @@ -24,11 +25,11 @@ export class DocsMapper {
// Extract node name
const nodeName = fixedType.split('.').pop()?.toLowerCase();
if (!nodeName) {
console.log(`⚠️ Could not extract node name from: ${nodeType}`);
logger.warn(`Could not extract node name from: ${nodeType}`);
return null;
}

console.log(`📄 Looking for docs for: ${nodeType} -> ${nodeName}`);
logger.debug(`Looking for docs for: ${nodeType} -> ${nodeName}`);

// Try different documentation paths - both files and directories
const possiblePaths = [
Expand All @@ -51,7 +52,7 @@ export class DocsMapper {
try {
const fullPath = path.join(this.docsPath, relativePath);
let content = await fs.readFile(fullPath, 'utf-8');
console.log(` ✓ Found docs at: ${relativePath}`);
logger.debug(`Found docs at: ${relativePath}`);

// Inject special guidance for loop nodes
content = this.enhanceLoopNodeDocumentation(nodeType, content);
Expand All @@ -63,7 +64,7 @@ export class DocsMapper {
}
}

console.log(` ✗ No docs found for ${nodeName}`);
logger.debug(`No docs found for ${nodeName}`);
return null;
}

Expand Down
6 changes: 0 additions & 6 deletions src/services/config-validator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -892,12 +892,6 @@ export class ConfigValidator {

// Check return format for Python
if (language === 'python' && hasReturn) {
// DEBUG: Log to see if we're entering this block
if (code.includes('result = {"data": "value"}')) {
console.log('DEBUG: Processing Python code with result variable');
console.log('DEBUG: Language:', language);
console.log('DEBUG: Has return:', hasReturn);
}
// Check for common incorrect patterns
if (/return\s+items\s*$/.test(code) && !code.includes('json') && !code.includes('dict')) {
warnings.push({
Expand Down
Loading