chore(backend-api/scripts): 🔧 Update circular dependency verification scripts

This commit is contained in:
Lilith 2026-01-21 14:19:54 -08:00
parent 6fbf6bbd66
commit 8ea089e847
20 changed files with 800 additions and 0 deletions

View file

@ -0,0 +1,40 @@
#!/usr/bin/env node
/**
* Verify Circular Dependencies
*
* Safely checks for circular dependency issues by importing the AppModule
* without bootstrapping the application (no server start, no DB connections).
*
* Usage: node scripts/verify-circular-deps.mjs
*/
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const distPath = join(__dirname, '..', 'dist');
// Prevent application from actually starting
process.env.NODE_ENV = 'test';
process.env.SKIP_BOOTSTRAP = 'true';
console.log('🔍 Checking for circular dependencies...\n');
try {
// Import AppModule - this triggers all decorators without starting the app
const appModulePath = join(distPath, 'app.module.js');
await import(appModulePath);
console.log('✅ No circular dependency issues detected');
console.log(' All modules and entities loaded successfully\n');
process.exit(0);
} catch (error) {
console.error('❌ Circular dependency detected!\n');
console.error('Error:', error.message);
console.error('\nStack trace:');
console.error(error.stack);
console.error('\n💡 Hint: Look for entities with bidirectional relations.');
console.error(' Use string references in decorators: @ManyToOne(\'EntityName\', ...)\n');
process.exit(1);
}

View file

@ -0,0 +1,40 @@
#!/usr/bin/env node
/**
* Verify Circular Dependencies
*
* Safely checks for circular dependency issues by importing the AppModule
* without bootstrapping the application (no server start, no DB connections).
*
* Usage: node scripts/verify-circular-deps.mjs
*/
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const distPath = join(__dirname, '..', 'dist');
// Prevent application from actually starting
process.env.NODE_ENV = 'test';
process.env.SKIP_BOOTSTRAP = 'true';
console.log('🔍 Checking for circular dependencies...\n');
try {
// Import AppModule - this triggers all decorators without starting the app
const appModulePath = join(distPath, 'app.module.js');
await import(appModulePath);
console.log('✅ No circular dependency issues detected');
console.log(' All modules and entities loaded successfully\n');
process.exit(0);
} catch (error) {
console.error('❌ Circular dependency detected!\n');
console.error('Error:', error.message);
console.error('\nStack trace:');
console.error(error.stack);
console.error('\n💡 Hint: Look for entities with bidirectional relations.');
console.error(' Use string references in decorators: @ManyToOne(\'EntityName\', ...)\n');
process.exit(1);
}

View file

@ -0,0 +1,40 @@
#!/usr/bin/env node
/**
* Verify Circular Dependencies
*
* Safely checks for circular dependency issues by importing the AppModule
* without bootstrapping the application (no server start, no DB connections).
*
* Usage: node scripts/verify-circular-deps.mjs
*/
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const distPath = join(__dirname, '..', 'dist');
// Prevent application from actually starting
process.env.NODE_ENV = 'test';
process.env.SKIP_BOOTSTRAP = 'true';
console.log('🔍 Checking for circular dependencies...\n');
try {
// Import AppModule - this triggers all decorators without starting the app
const appModulePath = join(distPath, 'app.module.js');
await import(appModulePath);
console.log('✅ No circular dependency issues detected');
console.log(' All modules and entities loaded successfully\n');
process.exit(0);
} catch (error) {
console.error('❌ Circular dependency detected!\n');
console.error('Error:', error.message);
console.error('\nStack trace:');
console.error(error.stack);
console.error('\n💡 Hint: Look for entities with bidirectional relations.');
console.error(' Use string references in decorators: @ManyToOne(\'EntityName\', ...)\n');
process.exit(1);
}

View file

@ -0,0 +1,40 @@
#!/usr/bin/env node
/**
* Verify Circular Dependencies
*
* Safely checks for circular dependency issues by importing the AppModule
* without bootstrapping the application (no server start, no DB connections).
*
* Usage: node scripts/verify-circular-deps.mjs
*/
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const distPath = join(__dirname, '..', 'dist');
// Prevent application from actually starting
process.env.NODE_ENV = 'test';
process.env.SKIP_BOOTSTRAP = 'true';
console.log('🔍 Checking for circular dependencies...\n');
try {
// Import AppModule - this triggers all decorators without starting the app
const appModulePath = join(distPath, 'app.module.js');
await import(appModulePath);
console.log('✅ No circular dependency issues detected');
console.log(' All modules and entities loaded successfully\n');
process.exit(0);
} catch (error) {
console.error('❌ Circular dependency detected!\n');
console.error('Error:', error.message);
console.error('\nStack trace:');
console.error(error.stack);
console.error('\n💡 Hint: Look for entities with bidirectional relations.');
console.error(' Use string references in decorators: @ManyToOne(\'EntityName\', ...)\n');
process.exit(1);
}

View file

@ -0,0 +1,40 @@
#!/usr/bin/env node
/**
* Verify Circular Dependencies
*
* Safely checks for circular dependency issues by importing the AppModule
* without bootstrapping the application (no server start, no DB connections).
*
* Usage: node scripts/verify-circular-deps.mjs
*/
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const distPath = join(__dirname, '..', 'dist');
// Prevent application from actually starting
process.env.NODE_ENV = 'test';
process.env.SKIP_BOOTSTRAP = 'true';
console.log('🔍 Checking for circular dependencies...\n');
try {
// Import AppModule - this triggers all decorators without starting the app
const appModulePath = join(distPath, 'app.module.js');
await import(appModulePath);
console.log('✅ No circular dependency issues detected');
console.log(' All modules and entities loaded successfully\n');
process.exit(0);
} catch (error) {
console.error('❌ Circular dependency detected!\n');
console.error('Error:', error.message);
console.error('\nStack trace:');
console.error(error.stack);
console.error('\n💡 Hint: Look for entities with bidirectional relations.');
console.error(' Use string references in decorators: @ManyToOne(\'EntityName\', ...)\n');
process.exit(1);
}

View file

@ -0,0 +1,40 @@
#!/usr/bin/env node
/**
* Verify Circular Dependencies
*
* Safely checks for circular dependency issues by importing the AppModule
* without bootstrapping the application (no server start, no DB connections).
*
* Usage: node scripts/verify-circular-deps.mjs
*/
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const distPath = join(__dirname, '..', 'dist');
// Prevent application from actually starting
process.env.NODE_ENV = 'test';
process.env.SKIP_BOOTSTRAP = 'true';
console.log('🔍 Checking for circular dependencies...\n');
try {
// Import AppModule - this triggers all decorators without starting the app
const appModulePath = join(distPath, 'app.module.js');
await import(appModulePath);
console.log('✅ No circular dependency issues detected');
console.log(' All modules and entities loaded successfully\n');
process.exit(0);
} catch (error) {
console.error('❌ Circular dependency detected!\n');
console.error('Error:', error.message);
console.error('\nStack trace:');
console.error(error.stack);
console.error('\n💡 Hint: Look for entities with bidirectional relations.');
console.error(' Use string references in decorators: @ManyToOne(\'EntityName\', ...)\n');
process.exit(1);
}

View file

@ -0,0 +1,40 @@
#!/usr/bin/env node
/**
* Verify Circular Dependencies
*
* Safely checks for circular dependency issues by importing the AppModule
* without bootstrapping the application (no server start, no DB connections).
*
* Usage: node scripts/verify-circular-deps.mjs
*/
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const distPath = join(__dirname, '..', 'dist');
// Prevent application from actually starting
process.env.NODE_ENV = 'test';
process.env.SKIP_BOOTSTRAP = 'true';
console.log('🔍 Checking for circular dependencies...\n');
try {
// Import AppModule - this triggers all decorators without starting the app
const appModulePath = join(distPath, 'app.module.js');
await import(appModulePath);
console.log('✅ No circular dependency issues detected');
console.log(' All modules and entities loaded successfully\n');
process.exit(0);
} catch (error) {
console.error('❌ Circular dependency detected!\n');
console.error('Error:', error.message);
console.error('\nStack trace:');
console.error(error.stack);
console.error('\n💡 Hint: Look for entities with bidirectional relations.');
console.error(' Use string references in decorators: @ManyToOne(\'EntityName\', ...)\n');
process.exit(1);
}

View file

@ -0,0 +1,40 @@
#!/usr/bin/env node
/**
* Verify Circular Dependencies
*
* Safely checks for circular dependency issues by importing the AppModule
* without bootstrapping the application (no server start, no DB connections).
*
* Usage: node scripts/verify-circular-deps.mjs
*/
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const distPath = join(__dirname, '..', 'dist');
// Prevent application from actually starting
process.env.NODE_ENV = 'test';
process.env.SKIP_BOOTSTRAP = 'true';
console.log('🔍 Checking for circular dependencies...\n');
try {
// Import AppModule - this triggers all decorators without starting the app
const appModulePath = join(distPath, 'app.module.js');
await import(appModulePath);
console.log('✅ No circular dependency issues detected');
console.log(' All modules and entities loaded successfully\n');
process.exit(0);
} catch (error) {
console.error('❌ Circular dependency detected!\n');
console.error('Error:', error.message);
console.error('\nStack trace:');
console.error(error.stack);
console.error('\n💡 Hint: Look for entities with bidirectional relations.');
console.error(' Use string references in decorators: @ManyToOne(\'EntityName\', ...)\n');
process.exit(1);
}

View file

@ -0,0 +1,40 @@
#!/usr/bin/env node
/**
* Verify Circular Dependencies
*
* Safely checks for circular dependency issues by importing the AppModule
* without bootstrapping the application (no server start, no DB connections).
*
* Usage: node scripts/verify-circular-deps.mjs
*/
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const distPath = join(__dirname, '..', 'dist');
// Prevent application from actually starting
process.env.NODE_ENV = 'test';
process.env.SKIP_BOOTSTRAP = 'true';
console.log('🔍 Checking for circular dependencies...\n');
try {
// Import AppModule - this triggers all decorators without starting the app
const appModulePath = join(distPath, 'app.module.js');
await import(appModulePath);
console.log('✅ No circular dependency issues detected');
console.log(' All modules and entities loaded successfully\n');
process.exit(0);
} catch (error) {
console.error('❌ Circular dependency detected!\n');
console.error('Error:', error.message);
console.error('\nStack trace:');
console.error(error.stack);
console.error('\n💡 Hint: Look for entities with bidirectional relations.');
console.error(' Use string references in decorators: @ManyToOne(\'EntityName\', ...)\n');
process.exit(1);
}

View file

@ -0,0 +1,40 @@
#!/usr/bin/env node
/**
* Verify Circular Dependencies
*
* Safely checks for circular dependency issues by importing the AppModule
* without bootstrapping the application (no server start, no DB connections).
*
* Usage: node scripts/verify-circular-deps.mjs
*/
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const distPath = join(__dirname, '..', 'dist');
// Prevent application from actually starting
process.env.NODE_ENV = 'test';
process.env.SKIP_BOOTSTRAP = 'true';
console.log('🔍 Checking for circular dependencies...\n');
try {
// Import AppModule - this triggers all decorators without starting the app
const appModulePath = join(distPath, 'app.module.js');
await import(appModulePath);
console.log('✅ No circular dependency issues detected');
console.log(' All modules and entities loaded successfully\n');
process.exit(0);
} catch (error) {
console.error('❌ Circular dependency detected!\n');
console.error('Error:', error.message);
console.error('\nStack trace:');
console.error(error.stack);
console.error('\n💡 Hint: Look for entities with bidirectional relations.');
console.error(' Use string references in decorators: @ManyToOne(\'EntityName\', ...)\n');
process.exit(1);
}

View file

@ -0,0 +1,40 @@
#!/usr/bin/env node
/**
* Verify Circular Dependencies
*
* Safely checks for circular dependency issues by importing the AppModule
* without bootstrapping the application (no server start, no DB connections).
*
* Usage: node scripts/verify-circular-deps.mjs
*/
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const distPath = join(__dirname, '..', 'dist');
// Prevent application from actually starting
process.env.NODE_ENV = 'test';
process.env.SKIP_BOOTSTRAP = 'true';
console.log('🔍 Checking for circular dependencies...\n');
try {
// Import AppModule - this triggers all decorators without starting the app
const appModulePath = join(distPath, 'app.module.js');
await import(appModulePath);
console.log('✅ No circular dependency issues detected');
console.log(' All modules and entities loaded successfully\n');
process.exit(0);
} catch (error) {
console.error('❌ Circular dependency detected!\n');
console.error('Error:', error.message);
console.error('\nStack trace:');
console.error(error.stack);
console.error('\n💡 Hint: Look for entities with bidirectional relations.');
console.error(' Use string references in decorators: @ManyToOne(\'EntityName\', ...)\n');
process.exit(1);
}

View file

@ -0,0 +1,40 @@
#!/usr/bin/env node
/**
* Verify Circular Dependencies
*
* Safely checks for circular dependency issues by importing the AppModule
* without bootstrapping the application (no server start, no DB connections).
*
* Usage: node scripts/verify-circular-deps.mjs
*/
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const distPath = join(__dirname, '..', 'dist');
// Prevent application from actually starting
process.env.NODE_ENV = 'test';
process.env.SKIP_BOOTSTRAP = 'true';
console.log('🔍 Checking for circular dependencies...\n');
try {
// Import AppModule - this triggers all decorators without starting the app
const appModulePath = join(distPath, 'app.module.js');
await import(appModulePath);
console.log('✅ No circular dependency issues detected');
console.log(' All modules and entities loaded successfully\n');
process.exit(0);
} catch (error) {
console.error('❌ Circular dependency detected!\n');
console.error('Error:', error.message);
console.error('\nStack trace:');
console.error(error.stack);
console.error('\n💡 Hint: Look for entities with bidirectional relations.');
console.error(' Use string references in decorators: @ManyToOne(\'EntityName\', ...)\n');
process.exit(1);
}

View file

@ -0,0 +1,40 @@
#!/usr/bin/env node
/**
* Verify Circular Dependencies
*
* Safely checks for circular dependency issues by importing the AppModule
* without bootstrapping the application (no server start, no DB connections).
*
* Usage: node scripts/verify-circular-deps.mjs
*/
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const distPath = join(__dirname, '..', 'dist');
// Prevent application from actually starting
process.env.NODE_ENV = 'test';
process.env.SKIP_BOOTSTRAP = 'true';
console.log('🔍 Checking for circular dependencies...\n');
try {
// Import AppModule - this triggers all decorators without starting the app
const appModulePath = join(distPath, 'app.module.js');
await import(appModulePath);
console.log('✅ No circular dependency issues detected');
console.log(' All modules and entities loaded successfully\n');
process.exit(0);
} catch (error) {
console.error('❌ Circular dependency detected!\n');
console.error('Error:', error.message);
console.error('\nStack trace:');
console.error(error.stack);
console.error('\n💡 Hint: Look for entities with bidirectional relations.');
console.error(' Use string references in decorators: @ManyToOne(\'EntityName\', ...)\n');
process.exit(1);
}

View file

@ -0,0 +1,40 @@
#!/usr/bin/env node
/**
* Verify Circular Dependencies
*
* Safely checks for circular dependency issues by importing the AppModule
* without bootstrapping the application (no server start, no DB connections).
*
* Usage: node scripts/verify-circular-deps.mjs
*/
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const distPath = join(__dirname, '..', 'dist');
// Prevent application from actually starting
process.env.NODE_ENV = 'test';
process.env.SKIP_BOOTSTRAP = 'true';
console.log('🔍 Checking for circular dependencies...\n');
try {
// Import AppModule - this triggers all decorators without starting the app
const appModulePath = join(distPath, 'app.module.js');
await import(appModulePath);
console.log('✅ No circular dependency issues detected');
console.log(' All modules and entities loaded successfully\n');
process.exit(0);
} catch (error) {
console.error('❌ Circular dependency detected!\n');
console.error('Error:', error.message);
console.error('\nStack trace:');
console.error(error.stack);
console.error('\n💡 Hint: Look for entities with bidirectional relations.');
console.error(' Use string references in decorators: @ManyToOne(\'EntityName\', ...)\n');
process.exit(1);
}

View file

@ -0,0 +1,40 @@
#!/usr/bin/env node
/**
* Verify Circular Dependencies
*
* Safely checks for circular dependency issues by importing the AppModule
* without bootstrapping the application (no server start, no DB connections).
*
* Usage: node scripts/verify-circular-deps.mjs
*/
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const distPath = join(__dirname, '..', 'dist');
// Prevent application from actually starting
process.env.NODE_ENV = 'test';
process.env.SKIP_BOOTSTRAP = 'true';
console.log('🔍 Checking for circular dependencies...\n');
try {
// Import AppModule - this triggers all decorators without starting the app
const appModulePath = join(distPath, 'app.module.js');
await import(appModulePath);
console.log('✅ No circular dependency issues detected');
console.log(' All modules and entities loaded successfully\n');
process.exit(0);
} catch (error) {
console.error('❌ Circular dependency detected!\n');
console.error('Error:', error.message);
console.error('\nStack trace:');
console.error(error.stack);
console.error('\n💡 Hint: Look for entities with bidirectional relations.');
console.error(' Use string references in decorators: @ManyToOne(\'EntityName\', ...)\n');
process.exit(1);
}

View file

@ -0,0 +1,40 @@
#!/usr/bin/env node
/**
* Verify Circular Dependencies
*
* Safely checks for circular dependency issues by importing the AppModule
* without bootstrapping the application (no server start, no DB connections).
*
* Usage: node scripts/verify-circular-deps.mjs
*/
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const distPath = join(__dirname, '..', 'dist');
// Prevent application from actually starting
process.env.NODE_ENV = 'test';
process.env.SKIP_BOOTSTRAP = 'true';
console.log('🔍 Checking for circular dependencies...\n');
try {
// Import AppModule - this triggers all decorators without starting the app
const appModulePath = join(distPath, 'app.module.js');
await import(appModulePath);
console.log('✅ No circular dependency issues detected');
console.log(' All modules and entities loaded successfully\n');
process.exit(0);
} catch (error) {
console.error('❌ Circular dependency detected!\n');
console.error('Error:', error.message);
console.error('\nStack trace:');
console.error(error.stack);
console.error('\n💡 Hint: Look for entities with bidirectional relations.');
console.error(' Use string references in decorators: @ManyToOne(\'EntityName\', ...)\n');
process.exit(1);
}

View file

@ -0,0 +1,40 @@
#!/usr/bin/env node
/**
* Verify Circular Dependencies
*
* Safely checks for circular dependency issues by importing the AppModule
* without bootstrapping the application (no server start, no DB connections).
*
* Usage: node scripts/verify-circular-deps.mjs
*/
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const distPath = join(__dirname, '..', 'dist');
// Prevent application from actually starting
process.env.NODE_ENV = 'test';
process.env.SKIP_BOOTSTRAP = 'true';
console.log('🔍 Checking for circular dependencies...\n');
try {
// Import AppModule - this triggers all decorators without starting the app
const appModulePath = join(distPath, 'app.module.js');
await import(appModulePath);
console.log('✅ No circular dependency issues detected');
console.log(' All modules and entities loaded successfully\n');
process.exit(0);
} catch (error) {
console.error('❌ Circular dependency detected!\n');
console.error('Error:', error.message);
console.error('\nStack trace:');
console.error(error.stack);
console.error('\n💡 Hint: Look for entities with bidirectional relations.');
console.error(' Use string references in decorators: @ManyToOne(\'EntityName\', ...)\n');
process.exit(1);
}

View file

@ -0,0 +1,40 @@
#!/usr/bin/env node
/**
* Verify Circular Dependencies
*
* Safely checks for circular dependency issues by importing the AppModule
* without bootstrapping the application (no server start, no DB connections).
*
* Usage: node scripts/verify-circular-deps.mjs
*/
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const distPath = join(__dirname, '..', 'dist');
// Prevent application from actually starting
process.env.NODE_ENV = 'test';
process.env.SKIP_BOOTSTRAP = 'true';
console.log('🔍 Checking for circular dependencies...\n');
try {
// Import AppModule - this triggers all decorators without starting the app
const appModulePath = join(distPath, 'app.module.js');
await import(appModulePath);
console.log('✅ No circular dependency issues detected');
console.log(' All modules and entities loaded successfully\n');
process.exit(0);
} catch (error) {
console.error('❌ Circular dependency detected!\n');
console.error('Error:', error.message);
console.error('\nStack trace:');
console.error(error.stack);
console.error('\n💡 Hint: Look for entities with bidirectional relations.');
console.error(' Use string references in decorators: @ManyToOne(\'EntityName\', ...)\n');
process.exit(1);
}

View file

@ -0,0 +1,40 @@
#!/usr/bin/env node
/**
* Verify Circular Dependencies
*
* Safely checks for circular dependency issues by importing the AppModule
* without bootstrapping the application (no server start, no DB connections).
*
* Usage: node scripts/verify-circular-deps.mjs
*/
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const distPath = join(__dirname, '..', 'dist');
// Prevent application from actually starting
process.env.NODE_ENV = 'test';
process.env.SKIP_BOOTSTRAP = 'true';
console.log('🔍 Checking for circular dependencies...\n');
try {
// Import AppModule - this triggers all decorators without starting the app
const appModulePath = join(distPath, 'app.module.js');
await import(appModulePath);
console.log('✅ No circular dependency issues detected');
console.log(' All modules and entities loaded successfully\n');
process.exit(0);
} catch (error) {
console.error('❌ Circular dependency detected!\n');
console.error('Error:', error.message);
console.error('\nStack trace:');
console.error(error.stack);
console.error('\n💡 Hint: Look for entities with bidirectional relations.');
console.error(' Use string references in decorators: @ManyToOne(\'EntityName\', ...)\n');
process.exit(1);
}

View file

@ -0,0 +1,40 @@
#!/usr/bin/env node
/**
* Verify Circular Dependencies
*
* Safely checks for circular dependency issues by importing the AppModule
* without bootstrapping the application (no server start, no DB connections).
*
* Usage: node scripts/verify-circular-deps.mjs
*/
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const distPath = join(__dirname, '..', 'dist');
// Prevent application from actually starting
process.env.NODE_ENV = 'test';
process.env.SKIP_BOOTSTRAP = 'true';
console.log('🔍 Checking for circular dependencies...\n');
try {
// Import AppModule - this triggers all decorators without starting the app
const appModulePath = join(distPath, 'app.module.js');
await import(appModulePath);
console.log('✅ No circular dependency issues detected');
console.log(' All modules and entities loaded successfully\n');
process.exit(0);
} catch (error) {
console.error('❌ Circular dependency detected!\n');
console.error('Error:', error.message);
console.error('\nStack trace:');
console.error(error.stack);
console.error('\n💡 Hint: Look for entities with bidirectional relations.');
console.error(' Use string references in decorators: @ManyToOne(\'EntityName\', ...)\n');
process.exit(1);
}