CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-microsoft-azure--autorest-core

AutoRest core module that generates client libraries for accessing RESTful web services from OpenAPI specifications.

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

configuration.mddocs/

Configuration Management

AutoRest Core provides a hierarchical configuration system that supports multiple configuration sources, view-based access patterns, and comprehensive options for customizing the code generation process. The system handles loading configurations from files, merging multiple sources, and provides a unified view for the generation pipeline.

Capabilities

Configuration View

The primary interface for accessing resolved configuration values from multiple sources.

/**
 * Configuration view providing access to resolved configuration values
 */
class ConfigurationView {
  /**
   * Message emitter for configuration-related events
   */
  messageEmitter: MessageEmitter;
  
  // Configuration access methods (implementation details vary)
  // Provides unified access to all merged configuration sources
}

Configuration Structure

Complete configuration interface defining all available AutoRest options.

/**
 * Complete AutoRest configuration structure
 */
interface AutoRestConfigurationImpl {
  // Core input/output options
  /** Input OpenAPI specification file(s) */
  "input-file"?: string | string[];
  /** Output folder for generated code */
  "output-folder"?: string;
  /** Base folder for resolving relative paths */
  "base-folder"?: string;
  
  // Processing control options  
  /** Enable debug mode with verbose logging */
  "debug"?: boolean;
  /** Enable verbose output */
  "verbose"?: boolean;
  /** Format for log messages */
  "message-format"?: string;
  /** Clear output folder before generation */
  "clear-output-folder"?: boolean;
  
  // Plugin and extension options
  /** Extensions to use during generation */
  "use-extension"?: string | string[];
  /** Additional modules to require */
  "require"?: string | string[];
  /** Processing directives for customization */
  "directive"?: any[];
  
  // Language-specific options
  /** Namespace for generated code */
  "namespace"?: string;
  /** Package name for generated code */
  "package-name"?: string;
  /** Client name for generated classes */
  "client-name"?: string;
  /** Client-side validation options */
  "client-side-validation"?: boolean;
  
  // Advanced processing options
  /** Override information section */
  "override-info"?: {
    title?: string;
    description?: string;
    version?: string;
  };
  /** License header for generated files */
  "license-header"?: string;
  /** Add credentials to generated client */
  "add-credentials"?: boolean;
  /** Payload flattening threshold */
  "payload-flattening-threshold"?: number;
  
  // Pipeline customization
  /** Custom pipeline stages */
  "pipeline"?: { [stage: string]: any };
  /** Pass additional properties to generators */
  "pass-thru"?: { [key: string]: any };
}

Usage Examples:

import { AutoRest } from "@microsoft.azure/autorest-core";

const autorest = new AutoRest();

// Basic configuration
autorest.AddConfiguration({
  "input-file": "petstore.json",
  "output-folder": "./generated",
  "namespace": "PetStore",
  "client-name": "PetStoreClient"
});

// Advanced configuration with multiple inputs
autorest.AddConfiguration({
  "input-file": [
    "swagger/pets.json",
    "swagger/users.json", 
    "swagger/orders.json"
  ],
  "output-folder": "./src/generated",
  "base-folder": "./specs",
  "clear-output-folder": true,
  "debug": true,
  "verbose": true,
  "client-side-validation": true,
  "payload-flattening-threshold": 2
});

// Language-specific configuration
autorest.AddConfiguration({
  "package-name": "my-api-client",
  "license-header": "Copyright (c) 2023 My Company. All rights reserved.",
  "add-credentials": true,
  "override-info": {
    title: "My API Client",
    description: "Generated client for My API",
    version: "1.0.0"
  }
});

Configuration Merging

Utility function for merging multiple configuration objects.

/**
 * Merges multiple configuration objects into a single configuration
 * @param configs - Configuration objects to merge (later configs override earlier ones)
 * @returns Merged configuration object
 */
function MergeConfigurations(...configs: AutoRestConfigurationImpl[]): AutoRestConfigurationImpl;

Usage Examples:

import { MergeConfigurations } from "@microsoft.azure/autorest-core";

// Base configuration
const baseConfig = {
  "output-folder": "./generated",
  "clear-output-folder": true,
  "debug": false
};

// Environment-specific overrides
const devConfig = {
  "debug": true,
  "verbose": true,
  "output-folder": "./dev-generated"
};

// Project-specific settings
const projectConfig = {
  "namespace": "MyProject",
  "client-name": "MyProjectClient"
};

// Merge configurations (later configs override earlier ones)
const finalConfig = MergeConfigurations(baseConfig, devConfig, projectConfig);

console.log(finalConfig);
// Result: {
//   "output-folder": "./dev-generated",  // overridden by devConfig
//   "clear-output-folder": true,         // from baseConfig
//   "debug": true,                       // overridden by devConfig  
//   "verbose": true,                     // from devConfig
//   "namespace": "MyProject",            // from projectConfig
//   "client-name": "MyProjectClient"     // from projectConfig
// }

Configuration Loading

AutoRest supports loading configuration from multiple sources with a well-defined precedence order:

Configuration Sources (in precedence order, highest to lowest)

  1. Programmatic Configuration: Added via AddConfiguration() method
  2. Command Line Arguments: Specified via CLI flags
  3. Configuration Files: Loaded from specified config file or folder
  4. Default Configuration: Built-in default values

Configuration File Formats

JSON Configuration (.autorest.json):

{
  "input-file": "swagger.json",
  "output-folder": "./generated",
  "namespace": "MyClient",
  "debug": true
}

YAML Configuration (.autorest.yaml):

input-file: swagger.json
output-folder: ./generated  
namespace: MyClient
debug: true

Literate Configuration (.autorest.md or README.md):

# AutoRest Configuration

> Input specification
input-file: swagger.json

> Output settings
output-folder: ./generated
namespace: MyClient

> Processing options  
debug: true
verbose: false

Configuration File Discovery

AutoRest automatically discovers configuration files using this search order:

  1. Explicit File: If configFileOrFolderUri parameter specifies a file
  2. Folder Search: If parameter specifies a folder, search for:
    • .autorest.json
    • .autorest.yaml
    • .autorest.md
    • README.md (with AutoRest configuration)
  3. Parent Directory Search: Recursively search parent directories
  4. Home Directory: Check user home directory for global configuration

Advanced Configuration Features

Environment Variable Expansion:

{
  "output-folder": "${OUTPUT_DIR}/generated",
  "namespace": "${PROJECT_NAME}Client"
}

Conditional Configuration:

{
  "input-file": "swagger.json",
  "output-folder": "./generated",
  "directive": [
    {
      "where": "$.paths[*][*]",
      "transform": "$.operationId = $.operationId + 'Async'"
    }
  ]
}

Multi-Language Configuration:

{
  "input-file": "swagger.json",
  "csharp": {
    "output-folder": "./generated/csharp",
    "namespace": "MyCompany.Api"
  },
  "typescript": {
    "output-folder": "./generated/typescript", 
    "package-name": "my-api-client"
  }
}

docs

autorest-generator.md

configuration.md

document-processing.md

file-system.md

index.md

messaging.md

tile.json