The configuration management module provides the core system for organizing, merging, and managing AutoRest configurations from multiple sources.
class ConfigurationManager {
constructor(configFileOrFolderUri: string, fileSystem: IFileSystem);
addConfig(config: AutorestNormalizedConfiguration): Promise<void>;
addHighPriorityConfig(config: AutorestNormalizedConfiguration): Promise<void>;
addConfigFile(file: ConfigurationFile): void;
resolveConfig(): Promise<AutorestConfiguration>;
}Main class for organizing configurations and merging them together. Configurations are processed in priority order where first configs override later ones.
Constructor Parameters:
configFileOrFolderUri: string - Base URI for configuration file or folderfileSystem: IFileSystem - File system interface for reading configuration filesMethods:
addConfig(config: AutorestNormalizedConfiguration): Promise<void>;Adds a configuration with normal priority. This configuration will be processed after high-priority configurations.
Parameters:
config: AutorestNormalizedConfiguration - Configuration object to addaddHighPriorityConfig(config: AutorestNormalizedConfiguration): Promise<void>;Adds a configuration with high priority. This configuration will be loaded first and its values can be used in later configurations.
Parameters:
config: AutorestNormalizedConfiguration - High-priority configuration objectaddConfigFile(file: ConfigurationFile): void;Adds a configuration file with conditional configuration support.
Parameters:
file: ConfigurationFile - Configuration file object to addresolveConfig(): Promise<AutorestConfiguration>;Resolves the final AutoRestConfiguration from all added configurations, processing conditional blocks and merging all sources.
Returns:
Promise<AutorestConfiguration> - Final merged and processed configurationExample:
import { ConfigurationManager } from "@autorest/configuration";
import { RealFileSystem } from "@azure-tools/datastore";
const fileSystem = new RealFileSystem();
const configManager = new ConfigurationManager("./", fileSystem);
// Add CLI arguments as high priority
await configManager.addHighPriorityConfig({
"input-file": ["swagger.json"],
"output-folder": "./generated",
debug: true
});
// Add default configuration
await configManager.addConfig({
"base-folder": ".",
"disable-validation": false
});interface ConfigurationFile {
type: "file";
fullPath: string;
configs: ConditionalConfiguration[];
}
interface ConditionalConfiguration {
condition?: string;
config: AutorestNormalizedConfiguration;
}Represents a configuration file with support for conditional configuration blocks and literate YAML processing.
Properties:
type: "file" - Type identifier for configuration filesfullPath: string - Full path to the configuration fileconfigs: ConditionalConfiguration[] - Array of configuration blocks, each with optional conditionsfunction readConfigurationFile(
configFile: DataHandle,
logger: AutorestLogger,
sink: DataSink
): Promise<ConfigurationFile>;Reads and parses configuration files supporting multiple formats including YAML, JSON, and literate markdown with full validation and error handling.
Parameters:
configFile: DataHandle - Data handle for the configuration file to readlogger: AutorestLogger - Logger instance for error and progress reportingsink: DataSink - Data sink for processed configuration dataReturns:
Promise<ConfigurationFile> - Parsed configuration file with conditional blocksThe system includes a default configuration that provides sensible defaults:
const defaultConfig: AutorestNormalizedConfiguration;Default values include:
"base-folder": "." - Current directory as base"output-folder": "generated" - Default output folderdebug: false - Debug mode disabledverbose: false - Verbose logging disabled"disable-validation": false - Validation enabledConfigurations are processed in the following priority order:
High-priority configurations (added via addHighPriorityConfig)
Normal configurations (added via addConfig)
System defaults
Higher priority configurations override values from lower priority configurations.
interface SimpleConfiguration {
type: "simple";
config: AutorestNormalizedConfiguration;
}Represents a simple configuration object with normalized values.
interface ConditionalConfiguration {
// Conditional configuration support for guard expressions
}Supports conditional configuration blocks that are evaluated based on context and guard expressions.
import { ConfigurationManager } from "@autorest/configuration";
import { RealFileSystem } from "@azure-tools/datastore";
const configManager = new ConfigurationManager("./config", new RealFileSystem());
// Add configurations in priority order
await configManager.addHighPriorityConfig(cliConfig);
await configManager.addConfig(fileConfig);
await configManager.addConfig(defaultConfig);
// Build final merged configuration
const finalConfig = await configManager.resolveConfig();// CLI arguments (highest priority)
await configManager.addHighPriorityConfig(parsedCliArgs.options);
// Project-specific configuration
await configManager.addConfig(projectConfig);
// Global configuration
await configManager.addConfig(globalConfig);
// Defaults (lowest priority)
await configManager.addConfig(defaultConfig);