- Add path.resolve for __dirname in ESM context to dependency-cruiser config - Configure alias in enhancedResolveOptions to map ~ to apps/web/src - Restore correct ~/env imports in sync routes (was incorrectly @tpmjs/env) This fixes two issues: 1. dependency-cruiser can now properly resolve the ~ TypeScript path alias 2. Sync routes import from the correct local env file, not the package 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
167 lines
5.4 KiB
JavaScript
167 lines
5.4 KiB
JavaScript
import path from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
|
|
/** @type {import('dependency-cruiser').IConfiguration} */
|
|
export default {
|
|
forbidden: [
|
|
{
|
|
name: 'no-circular',
|
|
severity: 'error',
|
|
comment:
|
|
'This dependency is part of a circular relationship. You might want to revise ' +
|
|
'your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ',
|
|
from: {},
|
|
to: {
|
|
circular: true,
|
|
},
|
|
},
|
|
{
|
|
name: 'no-orphans',
|
|
comment:
|
|
"This is an orphan module - it's likely not used (anymore?). Either use it or " +
|
|
"remove it. If it's logical this module is an orphan (i.e. it's a config file), " +
|
|
'add an exception for it in your dependency-cruiser configuration. By default ' +
|
|
'this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration ' +
|
|
'files (.d.ts), tsconfig.json and some of the babel and webpack configs.',
|
|
severity: 'warn',
|
|
from: {
|
|
orphan: true,
|
|
pathNot: [
|
|
'(^|/)\\.[^/]+\\.(js|cjs|mjs|ts|json)$', // dot files
|
|
'\\.d\\.ts$', // TypeScript declaration files
|
|
'(^|/)tsconfig\\.json$', // tsconfig
|
|
'(^|/)postcss\\.config\\.(js|cjs|mjs)$', // postcss config
|
|
'(^|/)(babel|webpack|tailwind)\\.config\\.(js|cjs|mjs|ts|json)$', // other configs
|
|
'/tokens\\.ts$', // token files
|
|
],
|
|
},
|
|
to: {},
|
|
},
|
|
{
|
|
name: 'no-deprecated-core',
|
|
comment:
|
|
'A module depends on a node core module that has been deprecated. Find an alternative - these are ' +
|
|
"bound to exist - node doesn't deprecate lightly.",
|
|
severity: 'warn',
|
|
from: {},
|
|
to: {
|
|
dependencyTypes: ['core'],
|
|
path: [
|
|
'^(v8/tools/codemap)$',
|
|
'^(v8/tools/consarray)$',
|
|
'^(v8/tools/csvparser)$',
|
|
'^(v8/tools/logreader)$',
|
|
'^(v8/tools/profile_view)$',
|
|
'^(v8/tools/profile)$',
|
|
'^(v8/tools/SourceMap)$',
|
|
'^(v8/tools/splaytree)$',
|
|
'^(v8/tools/tickprocessor-driver)$',
|
|
'^(v8/tools/tickprocessor)$',
|
|
'^(node-inspect/lib/_inspect)$',
|
|
'^(node-inspect/lib/internal/inspect_client)$',
|
|
'^(node-inspect/lib/internal/inspect_repl)$',
|
|
'^(async_hooks)$',
|
|
'^(punycode)$',
|
|
'^(domain)$',
|
|
'^(constants)$',
|
|
'^(sys)$',
|
|
'^(_linklist)$',
|
|
'^(_stream_wrap)$',
|
|
],
|
|
},
|
|
},
|
|
{
|
|
name: 'not-to-deprecated',
|
|
comment:
|
|
'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' +
|
|
'version of that module, or find an alternative. Deprecated modules are a security risk.',
|
|
severity: 'warn',
|
|
from: {},
|
|
to: {
|
|
dependencyTypes: ['deprecated'],
|
|
},
|
|
},
|
|
{
|
|
name: 'no-non-package-json',
|
|
severity: 'error',
|
|
comment:
|
|
"This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " +
|
|
"That's problematic as the package either (1) won't be available on live (2 - worse) will be " +
|
|
'available on live with an non-guaranteed version. Fix it by adding the package to the dependencies ' +
|
|
'in your package.json.',
|
|
from: {},
|
|
to: {
|
|
dependencyTypes: ['npm-no-pkg', 'npm-unknown'],
|
|
},
|
|
},
|
|
{
|
|
name: 'not-to-unresolvable',
|
|
comment:
|
|
"This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " +
|
|
'module: add it to your package.json. In all other cases you likely already know what to do.',
|
|
severity: 'error',
|
|
from: {},
|
|
to: {
|
|
couldNotResolve: true,
|
|
},
|
|
},
|
|
{
|
|
name: 'no-duplicate-dep-types',
|
|
comment:
|
|
"Likeley this module depends on an external ('npm') package that occurs more than once " +
|
|
'in your package.json i.e. both as a devDependencies and in dependencies. This will cause ' +
|
|
'maintenance problems later on.',
|
|
severity: 'warn',
|
|
from: {},
|
|
to: {
|
|
moreThanOneDependencyType: true,
|
|
// as it's pretty common to have a type import be a type only import
|
|
// _and_ (e.g.) a devDependency - don't consider type-only dependency
|
|
// types for this rule
|
|
dependencyTypesNot: ['type-only'],
|
|
},
|
|
},
|
|
|
|
/* Custom monorepo rules - keep it simple */
|
|
{
|
|
name: 'no-package-to-app-imports',
|
|
comment: 'Packages cannot import from apps - keeps packages reusable',
|
|
severity: 'error',
|
|
from: {
|
|
path: '^packages/',
|
|
},
|
|
to: {
|
|
path: '^apps/',
|
|
},
|
|
},
|
|
],
|
|
options: {
|
|
doNotFollow: {
|
|
path: ['node_modules', '\\.next', 'dist', '\\.turbo', 'storybook-static'],
|
|
},
|
|
tsPreCompilationDeps: true,
|
|
tsConfig: {
|
|
fileName: './tsconfig.json',
|
|
},
|
|
enhancedResolveOptions: {
|
|
exportsFields: ['exports'],
|
|
conditionNames: ['import', 'require', 'node', 'default'],
|
|
alias: {
|
|
'~': path.resolve(__dirname, 'apps/web/src'),
|
|
},
|
|
},
|
|
reporterOptions: {
|
|
dot: {
|
|
collapsePattern: 'node_modules/[^/]+',
|
|
},
|
|
archi: {
|
|
collapsePattern: '^(packages|apps)/[^/]+|node_modules/[^/]+',
|
|
},
|
|
text: {
|
|
highlightFocused: true,
|
|
},
|
|
},
|
|
},
|
|
};
|