or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

cli-operations.mdconfiguration.mdcore-management.mdindex.mdprogrammatic-api.md
tile.json

configuration.mddocs/

Configuration System

Configuration and settings management for AutoRest operations, primarily through the programmatic API and CLI interfaces.

Capabilities

AutoRest Configuration

AutoRest accepts configuration through multiple channels when using the programmatic API.

/**
 * Main AutoRest interface - accepts configuration via AddConfiguration method
 * Use create() function to get instances of this interface
 */
interface AutoRest {
  /**
   * Add configuration to the AutoRest instance
   * Configuration is merged with existing settings
   * @param config - Configuration object with AutoRest settings
   */
  AddConfiguration(config: any): Promise<void>;
  
  /**
   * Process the configured specifications and generate code
   * @returns Promise resolving to generation results
   */
  Process(): Promise<GenerationResults>;
}

Usage Examples:

import { create } from "autorest";

const autorest = await create(logger);

// Basic C# generation configuration
await autorest.AddConfiguration({
  "input-file": "https://example.com/petstore.json",
  "output-folder": "./generated/csharp",
  "csharp": true,
  "namespace": "PetStore.Client",
  "client-name": "PetStoreClient"
});

// Additional configuration for authentication
await autorest.AddConfiguration({
  "add-credentials": true,
  "credential-default-policy-type": "BearerTokenCredentialPolicy"  
});

// TypeScript generation configuration
await autorest.AddConfiguration({
  "input-file": "./specs/api.yaml",
  "output-folder": "./generated/typescript",
  "typescript": true,
  "generate-metadata": true,
  "source-code-folder-path": "./src"
});

// Process with combined configuration
const results = await autorest.Process();

Common Configuration Options

AutoRest supports extensive configuration options for code generation.

/**
 * Common AutoRest configuration properties
 * These can be passed to AddConfiguration()
 */
interface AutoRestConfigurationOptions {
  // Input and Output
  "input-file"?: string | string[];      // OpenAPI specification file(s)
  "output-folder"?: string;              // Output directory for generated code
  
  // Language Generators
  "csharp"?: boolean;                    // Generate C# client
  "java"?: boolean;                      // Generate Java client  
  "python"?: boolean;                    // Generate Python client
  "typescript"?: boolean;                // Generate TypeScript client
  "go"?: boolean;                        // Generate Go client
  "powershell"?: boolean;                // Generate PowerShell cmdlets
  
  // Generation Options
  "namespace"?: string;                  // Generated code namespace
  "client-name"?: string;                // Generated client class name
  "add-credentials"?: boolean;           // Add authentication support
  "sync-methods"?: "all" | "essential" | "none"; // Synchronous method generation
  "generate-metadata"?: boolean;         // Include metadata in output
  
  // Debugging and Output
  "debug"?: boolean;                     // Enable debug output
  "verbose"?: boolean;                   // Enable verbose logging
  "message-format"?: "regular" | "json"; // Output message format
  
  // Advanced Options
  "override-client-name"?: string;       // Override default client naming
  "use-datetimeoffset"?: boolean;        // Use DateTimeOffset in .NET
  "models-subnamespace"?: string;        // Subnamespace for model classes
  "operations-subnamespace"?: string;    // Subnamespace for operation classes
  
  // File and Path Options
  "source-code-folder-path"?: string;    // Source code output path
  "clear-output-folder"?: boolean;       // Clear output before generation
  
  // Additional options can be specified as key-value pairs
  [key: string]: any;
}

Configuration Sources

AutoRest can load configuration from multiple sources with the following precedence:

  1. Programmatic API: Configuration passed to AddConfiguration()
  2. Configuration Files: autorest.md, readme.md, or .autorest folder
  3. Command Line: Arguments passed to the CLI
  4. Environment Variables: Settings via environment

Configuration File Example:

Create an autorest.md file in your project:

# AutoRest Configuration

## Basic Settings

```yaml
input-file: ./specs/petstore.yaml
output-folder: ./generated
namespace: PetStore.SDK
client-name: PetStoreClient
```

## C# Configuration

```yaml
csharp:
  add-credentials: true
  sync-methods: essential
  use-datetimeoffset: true
```

## TypeScript Configuration  

```yaml
typescript:
  generate-metadata: true
  source-code-folder-path: ./src
```

Usage with Configuration File:

import { create } from "autorest";

// AutoRest will automatically discover and load autorest.md
const autorest = await create(logger, undefined, "./project-folder");

// Additional configuration can still be added programmatically
await autorest.AddConfiguration({
  "debug": true,
  "verbose": true
});

const results = await autorest.Process();

Configuration Validation

AutoRest validates configuration and provides detailed error messages for invalid settings.

Error Handling:

try {
  const autorest = await create(logger);
  
  await autorest.AddConfiguration({
    "input-file": "invalid-spec.yaml",
    "csharp": true,
    "invalid-option": "not-supported"
  });
  
  const results = await autorest.Process();
} catch (error) {
  // Handle configuration or generation errors
  console.error("AutoRest configuration error:", error);
}

Environment Variables

Configuration can be influenced by environment variables:

  • AUTOREST_HOME: Override default AutoRest home directory
  • autorest.home: Alternative to AUTOREST_HOME

Configuration Best Practices

  1. Use Configuration Files: Store common settings in autorest.md for team consistency
  2. Validate Early: Test configuration with debug mode before full generation
  3. Incremental Configuration: Add configuration in logical groups using multiple AddConfiguration() calls
  4. Version Pinning: Specify specific AutoRest core versions for reproducible builds
  5. Output Management: Use clear-output-folder option carefully to avoid data loss

Language-Specific Configuration

Each language generator supports specific configuration options:

C# (.NET)

  • namespace, client-name, add-credentials
  • sync-methods, use-datetimeoffset
  • models-subnamespace, operations-subnamespace

TypeScript/JavaScript

  • generate-metadata, source-code-folder-path
  • package-name, package-version

Python

  • package-name, package-version
  • basic-setup-py, override-client-name

Java

  • package-name, client-side-validation
  • generate-client-as-impl, sync-methods

Refer to language-specific generator documentation for complete option lists.