import type { MakeOptional, ParsingOptions, SerializationOptions, SerializationResult, TranslationDataset } from '../definitions.js'; import type { FileFormat } from './file-formats.js'; import type { Locale } from '../locales/index.js'; export type FileExtension = `.${T}`; type FileExtensions = [FileExtension, ...FileExtension[]]; export interface LanguageFileTransformer { readonly fileFormat: TFormat; readonly extensions: TFileExtensions; canParse(extension: string): extension is NoInfer[number]; parse(input: string, options: TParseOptions): TranslationDataset; formatKey(key: string): string; parseAggregate(inputs: Partial>, options: NoInfer): TranslationDataset; serialize(dataset: TranslationDataset, options: TSerializeOptions): SerializationResult; } type SomeLanguageFileTransformer = LanguageFileTransformer; export declare function makeLanguageTransformer(options: MakeOptional, 'canParse'>, 'parseAggregate' | 'formatKey'>): LanguageFileTransformer; type InferLanguageFileFormat = T extends LanguageFileTransformer ? Fmt : never; export type InferExtensions = T extends LanguageFileTransformer ? ExtArr extends [infer _Ext, ...infer _Rest] ? ExtArr[number] : never : never; type InferParserWithExtension = TTransformer extends LanguageFileTransformer ? SomeExts extends [Ext] ? TTransformer : never : never; type InferParserWithFormat = TTransformer extends LanguageFileTransformer ? TSomeFmt extends TFmt ? TTransformer : never : never; type InferParsingOptions = T extends LanguageFileTransformer ? Opt : never; export interface ParserSet { formats(): InferLanguageFileFormat>[]; getByExtension>(extension: TExt): InferParserWithExtension; getByExtension(extension: TExt): InferParserWithExtension | undefined; getSupportedExtensions(): InferExtensions[]; hasFormat(format: FileFormat): format is InferLanguageFileFormat; getByFormat>(format: TFmt): InferParserWithFormat; parse>(input: string, format: TFmt, options: InferParsingOptions, NoInfer>>): TranslationDataset; parseAggregate>(inputs: Partial>, format: TFmt, options: InferParsingOptions>): TranslationDataset; serialize(dataset: TranslationDataset, format: InferLanguageFileFormat, options: SerializationOptions): SerializationResult; } export declare function makeParserSet(transformers: TTransformers[]): ParserSet; export {};