AutoRest core module that generates client libraries for accessing RESTful web services from OpenAPI specifications.
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
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.
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
}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"
}
});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
// }AutoRest supports loading configuration from multiple sources with a well-defined precedence order:
AddConfiguration() methodJSON 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: trueLiterate 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: falseAutoRest automatically discovers configuration files using this search order:
configFileOrFolderUri parameter specifies a file.autorest.json.autorest.yaml.autorest.mdREADME.md (with AutoRest configuration)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"
}
}