Files
goodgo-platform/.dependency-cruiser.cjs
Ho Ngoc Hai ef47d9eb80 chore(db): add query indexes migration and update project config
- Add database migration for missing query indexes on frequently filtered columns
- Update Prisma schema
- Update .env.example, eslint config, and dependency-cruiser config

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-09 09:44:37 +07:00

82 lines
2.2 KiB
JavaScript

/** @type {import('dependency-cruiser').IConfiguration} */
module.exports = {
forbidden: [
// No circular dependencies
{
name: 'no-circular',
severity: 'error',
comment: 'Circular dependencies are not allowed.',
from: {},
to: { circular: true },
},
// Modules must not import internals of other modules directly.
// Only import via the module's public barrel (index.ts).
{
name: 'no-cross-module-internals',
severity: 'error',
comment:
'Modules must not import internal files of other modules. Import from the module index (barrel) instead.',
from: {
path: 'src/modules/([^/]+)/',
},
to: {
path: 'src/modules/([^/]+)/.+',
pathNot: [
// Allow importing from the module's own files
'src/modules/$1/',
// Allow importing from another module's barrel index
'src/modules/[^/]+/index\\.ts$',
],
},
},
// Apps (outside modules) should not import module internals either.
// Files inside src/modules/ are covered by no-cross-module-internals above.
{
name: 'no-app-to-module-internals',
severity: 'error',
comment: 'Apps must import modules via their barrel index, not internal files.',
from: {
path: 'apps/',
pathNot: ['src/modules/'],
},
to: {
path: 'src/modules/([^/]+)/.+',
pathNot: ['src/modules/[^/]+/index\\.ts$'],
},
},
// No orphan modules (files not reachable from any entry point)
{
name: 'no-orphans',
severity: 'warn',
comment: 'Orphan modules may indicate dead code.',
from: {
orphan: true,
pathNot: ['\\.(spec|test)\\.ts$', '__tests__/', '\\.d\\.ts$', 'index\\.ts$'],
},
to: {},
},
],
options: {
doNotFollow: {
path: ['node_modules', '\\.next', 'dist'],
},
tsPreCompilationDeps: true,
tsConfig: {
fileName: 'tsconfig.base.json',
},
enhancedResolveOptions: {
exportsFields: ['exports'],
conditionNames: ['import', 'require', 'node', 'default'],
},
reporterOptions: {
text: {
highlightFocused: true,
},
},
},
};