Advanced configuration loading system with extension management, data store integration, and configuration merging from multiple sources.
interface AutorestConfigurationResult {
config: AutorestConfiguration;
extensions: ResolvedExtension[];
}Result of the configuration loading process containing the final merged configuration and resolved extensions.
Properties:
config: AutorestConfiguration - Final processed AutoRest configurationextensions: ResolvedExtension[] - Array of resolved and loaded extensionsinterface ConfigurationLoaderOptions {
fileSystem?: IFileSystem;
dataStore?: DataStore;
extensionManager?: ExtensionManager;
}Options for customizing the configuration loading process.
Properties:
fileSystem?: IFileSystem - Override the default file system implementationdataStore?: DataStore - Pass a custom data store for configuration dataextensionManager?: ExtensionManager - Extension manager for resolving extension configurationsinterface ExtensionDefinition {
name: string;
source: string;
fullyQualified: string;
}Defines an AutoRest extension with its identification and source information.
Properties:
name: string - Extension name (e.g., "csharp", "python")source: string - Extension source location or package namefullyQualified: string - Fully qualified extension identifierinterface ResolvedExtension {
definition: ExtensionDefinition;
extension: Extension;
}Represents a successfully resolved and loaded extension.
Properties:
definition: ExtensionDefinition - Extension definition informationextension: Extension - Loaded extension instanceThe configuration loader follows a comprehensive process:
import { ConfigurationLoader } from "@autorest/configuration";
import { RealFileSystem } from "@azure-tools/datastore";
import { ExtensionManager } from "@azure-tools/extension";
const options: ConfigurationLoaderOptions = {
fileSystem: new RealFileSystem(),
extensionManager: new ExtensionManager()
};
const loader = new ConfigurationLoader(options);
const result = await loader.loadConfiguration(configPath, cliOptions);
console.log("Loaded configuration:", result.config);
console.log("Resolved extensions:", result.extensions);import { CachingFileSystem } from "@azure-tools/datastore";
const options: ConfigurationLoaderOptions = {
fileSystem: new CachingFileSystem(new RealFileSystem())
};
const loader = new ConfigurationLoader(options);import { ExtensionManager } from "@azure-tools/extension";
const extensionManager = new ExtensionManager({
// Extension manager configuration
});
const options: ConfigurationLoaderOptions = {
extensionManager: extensionManager
};
const result = await loader.loadConfiguration(configPath, baseConfig);
// Access resolved extensions
for (const resolvedExt of result.extensions) {
console.log(`Loaded extension: ${resolvedExt.definition.name}`);
console.log(`Source: ${resolvedExt.definition.source}`);
}The configuration loader can work with custom data stores for advanced scenarios:
import { DataStore } from "@azure-tools/datastore";
const customDataStore = new DataStore();
const options: ConfigurationLoaderOptions = {
dataStore: customDataStore
};Configuration loading supports timeout settings to prevent hanging on network operations:
const CONFIGURATION_LOAD_TIMEOUT: number; // Timeout in millisecondsThe system supports caching of loaded configurations to improve performance:
The configuration loader provides comprehensive error handling: