Configuration file discovery and resolution system with support for multiple file formats and directory traversal.
function detectConfigurationFile(
fileSystem: IFileSystem,
configFileOrFolderUri: string | null,
logger?: AutorestLogger,
walkUpFolders?: boolean
): Promise<string | undefined>;Detects and returns the path to a single configuration file in the specified location.
Parameters:
fileSystem: IFileSystem - File system interface for file operationsconfigFileOrFolderUri: string | null - URI or folder path to search inlogger?: AutorestLogger - Optional logger for diagnostic messageswalkUpFolders?: boolean - Whether to recursively check parent folders (default: false)Returns:
Promise<string | undefined> - Path to the detected configuration file, or undefined if none foundResolution Priority:
readme.md)Example:
import { detectConfigurationFile } from "@autorest/configuration";
import { RealFileSystem } from "@azure-tools/datastore";
const fileSystem = new RealFileSystem();
const configFile = await detectConfigurationFile(
fileSystem,
"./config",
logger,
true // Walk up parent folders
);
if (configFile) {
console.log(`Found configuration: ${configFile}`);
}function detectConfigurationFiles(
fileSystem: IFileSystem,
configFileOrFolderUri: string | null,
logger?: AutorestLogger,
walkUpFolders?: boolean
): Promise<Array<string>>;Detects and returns paths to all configuration files in the specified location.
Parameters:
fileSystem: IFileSystem - File system interface for file operationsconfigFileOrFolderUri: string | null - URI or folder path to search inlogger?: AutorestLogger - Optional logger for diagnostic messageswalkUpFolders?: boolean - Whether to recursively check parent folders (default: false)Returns:
Promise<Array<string>> - Array of paths to all detected configuration filesExample:
import { detectConfigurationFiles } from "@autorest/configuration";
import { RealFileSystem } from "@azure-tools/datastore";
const fileSystem = new RealFileSystem();
const configFiles = await detectConfigurationFiles(
fileSystem,
"./",
logger
);
console.log(`Found ${configFiles.length} configuration files:`);
configFiles.forEach(file => console.log(` ${file}`));const DefaultConfiguration: string;The default configuration file name that AutoRest looks for (typically readme.md).
const MagicString: string;Magic string used to identify AutoRest configuration files.
The file resolution system supports multiple configuration file formats:
.md).yaml, .yml).json)When given a directory path, the resolver:
walkUpFolders is trueThe resolver identifies configuration files by:
.md, .yaml, .yml, .json)When configFileOrFolderUri is null:
detectConfigurationFilesundefined for detectConfigurationFileimport { detectConfigurationFile } from "@autorest/configuration";
import { RealFileSystem } from "@azure-tools/datastore";
const fileSystem = new RealFileSystem();
// Detect configuration in current directory
const configFile = await detectConfigurationFile(fileSystem, ".");
// Detect configuration in specific folder
const configFile2 = await detectConfigurationFile(fileSystem, "./config");
// Detect configuration with parent folder search
const configFile3 = await detectConfigurationFile(fileSystem, ".", logger, true);import { detectConfigurationFiles } from "@autorest/configuration";
// Find all configuration files in a directory
const allConfigs = await detectConfigurationFiles(fileSystem, "./configs");
// Process each configuration file
for (const configFile of allConfigs) {
const content = await fileSystem.readFile(configFile);
// Process configuration content
}import {
detectConfigurationFile,
ConfigurationManager
} from "@autorest/configuration";
const configFile = await detectConfigurationFile(fileSystem, configPath);
if (configFile) {
const configManager = new ConfigurationManager(configFile, fileSystem);
// Use detected configuration file
}function isConfigurationDocument(content: string): Promise<boolean>;Checks whether a document is a literate configuration document by looking for the AutoRest magic string.
Parameters:
content: string - Document content to check for configuration markersReturns:
Promise<boolean> - True if the document contains AutoRest configuration, false otherwiseUsage:
import { isConfigurationDocument } from "@autorest/configuration";
const content = await fileSystem.readFile("readme.md");
const isConfig = await isConfigurationDocument(content);
if (isConfig) {
console.log("File contains AutoRest configuration");
}The file resolution functions handle various error conditions:
The functions are designed to be robust and continue operation even when some file system operations fail.