or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

cli-tools.mdconfiguration-management.mdcore-analysis.mdindex.mdoutput-formatting.mdreporter-plugins.mdrule-system.mdtranspiler-support.md
tile.json

configuration-management.mddocs/

Configuration Management

Extract and process configuration from various sources including dependency-cruiser configs, TypeScript, Babel, and webpack configurations.

Capabilities

Dependency Cruiser Configuration

Extract dependency-cruiser configuration with support for extends and nested configurations.

/**
 * Reads and parses dependency-cruiser configuration file with extends support
 * @param configFileName - Path to configuration file
 * @param alreadyVisited - Set of already visited files (for circular detection)
 * @param baseDirectory - Base directory for resolving relative paths
 * @returns Promise resolving to parsed configuration object
 */
function extractDepcruiseConfig(
  configFileName: string,
  alreadyVisited?: Set<string>,
  baseDirectory?: string
): Promise<IConfiguration>;

/**
 * Extracts cruise options from configuration file
 * @param configFileName - Path to configuration file
 * @returns Promise resolving to cruise options
 */
function extractDepcruiseOptions(configFileName: string): Promise<ICruiseOptions>;

Usage Examples:

import extractDepcruiseConfig from "dependency-cruiser/config-utl/extract-depcruise-config";
import extractDepcruiseOptions from "dependency-cruiser/config-utl/extract-depcruise-options";

// Extract full configuration
const config = await extractDepcruiseConfig("./.dependency-cruiser.js");
console.log(config.forbidden.length); // Number of forbidden rules

// Extract only cruise options
const options = await extractDepcruiseOptions("./.dependency-cruiser.js");
console.log(options.validate); // Whether validation is enabled

// Use configuration with cruise
import { cruise } from "dependency-cruiser";
const result = await cruise(["src"], options);

TypeScript Configuration

Extract TypeScript configuration from tsconfig.json files.

/**
 * Reads and parses TypeScript configuration file
 * @param tsConfigFileName - Path to tsconfig.json file
 * @returns Promise resolving to parsed TypeScript configuration
 */
function extractTsConfig(tsConfigFileName: string): Promise<object>;

Usage Examples:

import extractTsConfig from "dependency-cruiser/config-utl/extract-ts-config";

// Extract TypeScript configuration
const tsConfig = await extractTsConfig("./tsconfig.json");

// Use with cruise for TypeScript projects
import { cruise } from "dependency-cruiser";
const result = await cruise(
  ["src"],
  { tsPreCompilationDeps: true },
  { extensions: [".ts", ".tsx"] },
  { tsConfig }
);

Babel Configuration

Extract and parse Babel configuration from various file formats.

/**
 * Reads and parses Babel configuration file
 * @param babelConfigFileName - Path to Babel configuration file
 * @returns Promise resolving to parsed Babel configuration
 * @throws Error when config has unknown extension or is invalid
 */
function extractBabelConfig(babelConfigFileName: string): Promise<object>;

Supported Babel Config Formats:

  • .babelrc (JSON)
  • .babelrc.json (JSON)
  • .babelrc.js (CommonJS)
  • .babelrc.cjs (CommonJS)
  • .babelrc.mjs (ES modules)
  • babel.config.js (CommonJS)
  • babel.config.cjs (CommonJS)
  • babel.config.mjs (ES modules)
  • package.json (babel property)

Usage Examples:

import extractBabelConfig from "dependency-cruiser/config-utl/extract-babel-config";

// Extract Babel configuration
const babelConfig = await extractBabelConfig("./.babelrc.js");

// Use with cruise for Babel-transpiled projects
import { cruise } from "dependency-cruiser";
const result = await cruise(
  ["src"],
  {},
  {},
  { babelConfig }
);

Webpack Configuration

Extract webpack resolve configuration for module resolution.

/**
 * Extracts webpack resolve configuration from webpack config file
 * @param webpackConfigFileName - Path to webpack configuration file
 * @param env - Environment variables passed to webpack config
 * @param argv - Arguments passed to webpack config
 * @returns Promise resolving to webpack resolve configuration
 */
function extractWebpackResolveConfig(
  webpackConfigFileName: string,
  env?: WebpackEnvType,
  argv?: any
): Promise<object>;

Usage Examples:

import extractWebpackResolveConfig from "dependency-cruiser/config-utl/extract-webpack-resolve-config";

// Extract webpack resolve config
const webpackResolve = await extractWebpackResolveConfig("./webpack.config.js");

// Use with cruise for webpack-configured projects
import { cruise } from "dependency-cruiser";
const result = await cruise(
  ["src"],
  {},
  webpackResolve // Use as resolve options
);

// Extract with environment and arguments
const webpackResolve = await extractWebpackResolveConfig(
  "./webpack.config.js",
  { NODE_ENV: "production" },
  { mode: "production" }
);

Configuration Types

Type definitions for configuration objects and options.

interface IConfiguration {
  /** Forbidden dependency rules */
  forbidden?: IRegularForbiddenRuleType[];
  
  /** Allowed dependency rules */
  allowed?: IRegularAllowedRuleType[];
  
  /** Required dependency rules */
  required?: IRegularRequiredRuleType[];
  
  /** Default severity for allowed rules */
  allowedSeverity?: SeverityType;
  
  /** Rule set options */
  options?: IRuleSetOptions;
  
  /** Cruise options */
  options?: ICruiseOptions;
  
  /** Configuration inheritance */
  extends?: string | string[];
}

interface ITsConfig {
  /** Path to TypeScript configuration file */
  fileName?: string;
  
  /** Parsed TypeScript compiler options */
  compilerOptions?: any;
  
  /** TypeScript project references */
  references?: any[];
  
  /** Include patterns */
  include?: string[];
  
  /** Exclude patterns */
  exclude?: string[];
}

interface IBabelConfig {
  /** Path to Babel configuration file */
  fileName?: string;
  
  /** Babel presets */
  presets?: any[];
  
  /** Babel plugins */
  plugins?: any[];
  
  /** Additional Babel options */
  [key: string]: any;
}

interface IWebpackConfig {
  /** Arguments used with webpack config */
  arguments?: { [key: string]: any };
  
  /** Environment variables passed to webpack config */
  env?: WebpackEnvType;
  
  /** Path to webpack configuration file */
  fileName?: string;
}

type WebpackEnvType = { [key: string]: any } | string;

Configuration File Examples

Examples of dependency-cruiser configuration files.

Basic Configuration (.dependency-cruiser.js):

module.exports = {
  forbidden: [
    {
      name: "no-circular",
      comment: "Prevent circular dependencies",
      severity: "error",
      from: {},
      to: { circular: true }
    },
    {
      name: "no-deprecated-core",
      comment: "Don't use deprecated core modules",
      severity: "warn",
      from: {},
      to: {
        dependencyTypes: ["core"],
        path: "^(punycode|domain|sys)$"
      }
    }
  ],
  options: {
    doNotFollow: "node_modules",
    moduleSystems: ["amd", "cjs", "es6"],
    tsPreCompilationDeps: true,
    progress: { type: "cli-feedback" }
  }
};

Configuration with Extends:

// .dependency-cruiser.js
module.exports = {
  extends: ["./shared-rules.js"],
  forbidden: [
    // Additional project-specific rules
    {
      name: "no-test-imports-in-src",
      from: { path: "^src/" },
      to: { path: "test/" }
    }
  ],
  options: {
    tsConfig: { fileName: "./tsconfig.json" }
  }
};

// shared-rules.js
module.exports = {
  forbidden: [
    {
      name: "no-circular",
      from: {},
      to: { circular: true }
    }
  ]
};

Integration Patterns

Common patterns for integrating configurations with analysis.

TypeScript Project Setup:

import { cruise } from "dependency-cruiser";
import extractTsConfig from "dependency-cruiser/config-utl/extract-ts-config";
import extractDepcruiseOptions from "dependency-cruiser/config-utl/extract-depcruise-options";

// Extract configurations
const [cruiseOptions, tsConfig] = await Promise.all([
  extractDepcruiseOptions("./.dependency-cruiser.js"),
  extractTsConfig("./tsconfig.json")
]);

// Analyze with both configurations
const result = await cruise(
  ["src", "test"],
  {
    ...cruiseOptions,
    tsPreCompilationDeps: true
  },
  { extensions: [".ts", ".tsx", ".js"] },
  { tsConfig }
);

Full-Stack Configuration:

import { cruise } from "dependency-cruiser";
import extractDepcruiseConfig from "dependency-cruiser/config-utl/extract-depcruise-config";
import extractBabelConfig from "dependency-cruiser/config-utl/extract-babel-config";
import extractWebpackResolveConfig from "dependency-cruiser/config-utl/extract-webpack-resolve-config";

// Extract all configurations
const [config, babelConfig, webpackResolve] = await Promise.all([
  extractDepcruiseConfig("./.dependency-cruiser.js"),
  extractBabelConfig("./babel.config.js"),
  extractWebpackResolveConfig("./webpack.config.js")
]);

// Convert config to options
const cruiseOptions = {
  ...config.options,
  ruleSet: config,
  validate: true
};

// Analyze with all configurations
const result = await cruise(
  ["src"],
  cruiseOptions,
  webpackResolve,
  { babelConfig }
);

Error Handling

Configuration extraction functions throw errors for invalid or missing configurations:

try {
  const config = await extractDepcruiseConfig("./missing-config.js");
} catch (error) {
  console.error("Configuration error:", error.message);
  // Handle missing or invalid configuration
}

try {
  const babelConfig = await extractBabelConfig("./invalid-babel.config.js");
} catch (error) {
  if (error.message.includes("returns a function")) {
    console.error("Function-format Babel configs not supported");
  }
}

Configuration Validation

Configurations are automatically validated when used with cruise:

import { cruise } from "dependency-cruiser";

try {
  const result = await cruise(
    ["src"],
    {
      validate: true,
      ruleSet: {
        forbidden: [
          {
            // Invalid rule - missing required properties
            severity: "error"
          }
        ]
      }
    }
  );
} catch (error) {
  console.error("Invalid configuration:", error.message);
}