Configuration management system for AutoRest's REST API client library generator
npx @tessl/cli install tessl/npm-autorest--configuration@1.12.0AutoRest Configuration is a TypeScript library that provides the configuration management system for AutoRest, Microsoft's REST API client library generator. It handles loading, parsing, validating, and merging configuration files for AutoRest's code generation pipeline.
npm install @autorest/configurationimport {
parseAutorestCliArgs,
AutorestConfiguration,
AutorestNormalizedConfiguration,
ConfigurationManager,
detectConfigurationFile,
detectConfigurationFiles,
isConfigurationDocument,
readConfigurationFile,
mergeConfigurations,
resolveDirectives,
Directive,
ResolvedDirective
} from "@autorest/configuration";For CommonJS:
const {
parseAutorestCliArgs,
AutorestConfiguration,
AutorestNormalizedConfiguration,
ConfigurationManager,
detectConfigurationFile,
detectConfigurationFiles,
isConfigurationDocument,
readConfigurationFile,
mergeConfigurations,
resolveDirectives,
Directive,
ResolvedDirective
} = require("@autorest/configuration");import {
parseAutorestCliArgs,
ConfigurationManager,
detectConfigurationFile,
autorestConfigurationProcessor
} from "@autorest/configuration";
// Parse CLI arguments
const cliArgs = ["--input-file=swagger.json", "--output-folder=./generated"];
const parsedArgs = parseAutorestCliArgs(cliArgs);
if (parsedArgs) {
// Detect configuration file
const configFile = await detectConfigurationFile(
fileSystem,
parsedArgs.configFileOrFolder
);
// Create configuration manager
const configManager = new ConfigurationManager(
parsedArgs.configFileOrFolder || ".",
fileSystem
);
// Add CLI configuration
await configManager.addConfig(parsedArgs.options);
// Load and merge all configurations
const config = await configManager.resolveConfig();
}AutoRest Configuration is built around several key components:
Command-line argument parsing with support for AutoRest-specific options and validation. Handles complex argument structures and provides detailed error reporting.
function parseAutorestCliArgs(cliArgs: string[]): AutorestCliArgs | undefined;
interface AutorestCliArgs {
options: AutorestNormalizedConfiguration;
configFileOrFolder: string | undefined;
}Core configuration management system for loading, merging, and organizing configurations from multiple sources with priority handling.
class ConfigurationManager {
constructor(configFileOrFolderUri: string, fileSystem: IFileSystem);
addConfig(config: AutorestNormalizedConfiguration): Promise<void>;
addHighPriorityConfig(config: AutorestNormalizedConfiguration): Promise<void>;
}Complete type definitions for AutoRest configuration with support for all AutoRest features including extensions, directives, and validation options.
interface AutorestConfiguration extends AutorestNormalizedConfiguration {
raw: AutorestNormalizedConfiguration;
configFileFolderUri: string;
inputFileUris: string[];
outputFolderUri: string;
configurationFiles: string[];
help: boolean;
verbose: boolean;
debug: boolean;
cachingEnabled: boolean;
}
interface AutorestNormalizedConfiguration {
version?: string;
"allow-no-input"?: boolean;
"input-file"?: Array<string>;
"exclude-file"?: Array<string>;
"base-folder"?: string;
directive?: Array<Directive>;
"output-artifact"?: Array<string>;
"message-format"?: "json" | "regular";
use?: string[] | string;
"use-extension"?: { [extensionName: string]: string };
require?: Array<string>;
help?: any;
debug?: boolean;
verbose?: boolean;
// ... many more properties
}Schema validation system with predefined schemas for AutoRest configuration and extensible schema processor for custom validation rules.
interface ConfigurationSchemaProcessor {
processConfiguration(config: any, options: any): any;
}
const autorestConfigurationProcessor: ConfigurationSchemaProcessor;
const AUTOREST_INITIAL_CONFIG: AutorestNormalizedConfiguration;Configuration file discovery and resolution with support for walking directory hierarchies and detecting multiple configuration formats.
function detectConfigurationFile(
fileSystem: IFileSystem,
configFileOrFolderUri: string | null,
logger?: AutorestLogger,
walkUpFolders?: boolean
): Promise<string | undefined>;
function detectConfigurationFiles(
fileSystem: IFileSystem,
configFileOrFolderUri: string | null,
logger?: AutorestLogger,
walkUpFolders?: boolean
): Promise<Array<string>>;Advanced configuration loading system with extension management, data store integration, and configuration merging from multiple sources.
interface ConfigurationLoaderOptions {
fileSystem?: IFileSystem;
dataStore?: DataStore;
extensionManager?: ExtensionManager;
}
interface AutorestConfigurationResult {
config: AutorestConfiguration;
extensions: ResolvedExtension[];
}Configuration directive system for custom transformations, suppressions, and rules processing with support for conditional execution.
interface Directive {
from?: string[] | string;
where?: string[] | string;
reason?: string[];
suppress?: string[] | string;
set?: string[] | string;
transform?: string[] | string;
"text-transform"?: string[] | string;
test?: string[] | string;
debug?: boolean;
}
class ResolvedDirective {
constructor(directive: Directive);
from: string[];
where: string[];
reason?: string[];
suppress: string[];
transform: string[];
test: string[];
debug: boolean;
get name(): string;
}Utility functions for configuration processing including array handling, log level determination, and configuration merging.
function arrayOf<T>(value: T | T[] | undefined): T[];
function mergeConfigurations<T>(configs: Array<T>, options?: MergeOptions): T;
function getLogLevel(config: LogOptions): LogLevel;
function isValidLogLevel(level: string): level is LogLevel;
function isIterable(target: any): target is Iterable<any>;