Configuration management system for AutoRest's REST API client library generator
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
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);