import EventEmitter from 'events' export type SupportedLexer = | 'HandlebarsLexer' | 'HTMLLexer' | 'JavascriptLexer' | 'JsxLexer' // BaseLexer is not importable therefore this is the best if done simple export class CustomLexerClass extends EventEmitter {} export type CustomLexer = typeof CustomLexerClass export interface CustomLexerConfig extends Record { lexer: CustomLexer } export interface HandlebarsLexerConfig { lexer: 'HandlebarsLexer' functions?: string[] } export interface HTMLLexerConfig { lexer: 'HTMLLexer' functions?: string[] attr?: string optionAttr?: string } export interface JavascriptLexerConfig { lexer: 'JavascriptLexer' functions?: string[] namespaceFunctions?: string[] attr?: string parseGenerics?: false typeMap?: Record } export interface JavascriptWithTypesLexerConfig { lexer: 'JavascriptLexer' functions?: string[] namespaceFunctions?: string[] attr?: string parseGenerics: true typeMap: Record } export interface JsxLexerConfig { lexer: 'JsxLexer' functions?: string[] namespaceFunctions?: string[] componentFunctions?: string[] attr?: string transSupportBasicHtmlNodes?: boolean transKeepBasicHtmlNodesFor?: string[] parseGenerics?: false typeMap?: Record } export interface JsxWithTypesLexerConfig { lexer: 'JsxLexer' functions?: string[] namespaceFunctions?: string[] componentFunctions?: string[] attr?: string transSupportBasicHtmlNodes?: boolean transKeepBasicHtmlNodesFor?: string[] parseGenerics: true typeMap: Record /** * Identity functions within trans that should be parsed for their * first arguments. Used for making typecheckers happy in a safe way: e.g., if in your code, you use: * * ``` * Hello {castToString({ name })} * ``` * * you'd want to pass in `transIdentityFunctionsToIgnore: ['castToString']` */ transIdentityFunctionsToIgnore?: string[] } export type LexerConfig = | HandlebarsLexerConfig | HTMLLexerConfig | JavascriptLexerConfig | JavascriptWithTypesLexerConfig | JsxLexerConfig | JsxWithTypesLexerConfig | CustomLexerConfig export interface UserConfig { contextSeparator?: string createOldCatalogs?: boolean defaultNamespace?: string defaultValue?: | string | (( locale?: string, namespace?: string, key?: string, value?: string ) => string) indentation?: number keepRemoved?: boolean | readonly RegExp[] keySeparator?: string | false lexers?: { hbs?: (SupportedLexer | CustomLexer | LexerConfig)[] handlebars?: (SupportedLexer | CustomLexer | LexerConfig)[] htm?: (SupportedLexer | CustomLexer | LexerConfig)[] html?: (SupportedLexer | CustomLexer | LexerConfig)[] mjs?: (SupportedLexer | CustomLexer | LexerConfig)[] js?: (SupportedLexer | CustomLexer | LexerConfig)[] ts?: (SupportedLexer | CustomLexer | LexerConfig)[] jsx?: (SupportedLexer | CustomLexer | LexerConfig)[] tsx?: (SupportedLexer | CustomLexer | LexerConfig)[] default?: (SupportedLexer | CustomLexer | LexerConfig)[] } lineEnding?: 'auto' | 'crlf' | '\r\n' | 'cr' | '\r' | 'lf' | '\n' locales?: string[] namespaceSeparator?: string | false output?: string pluralSeparator?: string input?: string | string[] sort?: boolean | ((a: string, b: string) => -1 | 0 | 1) verbose?: boolean failOnWarnings?: boolean failOnUpdate?: boolean customValueTemplate?: Record | null resetDefaultValueLocale?: string | null i18nextOptions?: Record | null yamlOptions?: Record | null }