import type { ParseError, ParserOptions } from '@babel/parser';
import type { CssPreflightOptions, Document, IStyleHandlerOptions, Result as PostcssResult, Root } from '@weapp-tailwindcss/postcss';
import type { SourceMap } from 'magic-string';
import type { ICreateCacheReturnType } from '../cache/index.js';
import type { ItemOrItemArray } from './base.js';
import type { AppType, IArbitraryValues, ICustomAttributesEntities } from './shared.js';
import type { UniAppXComponentLocalStylesOptions, UniAppXOptions as UniAppXUserDefinedOptions, UserDefinedOptions } from './user-defined-options/index.js';
import type { LengthUnitsRuntimeOptions, TailwindContentTokenReport, TailwindcssExtractOptions, TailwindcssExtractResult, TailwindCssOptions, TailwindCssRuntimeOptions, TailwindPackageInfo } from '../tailwindcss/runtime-types.js';
export type { TailwindCssOptions, TailwindCssRuntimeOptions, UniAppXComponentLocalStylesOptions, UniAppXUserDefinedOptions, UserDefinedOptions, };
export type { AppType, IArbitraryValues, ICustomAttributes, ICustomAttributesEntities, IUnocssCompatibilityOptions } from './shared.js';
export type { CssPreflightOptions, IStyleHandlerOptions, ItemOrItemArray };
export type { WeappTailwindcssStyleInjectorOptions } from '../style-injector/internal.js';
export type RequiredDefined<T> = {
    [K in keyof T]-?: Exclude<T[K], undefined>;
};
type InternalUserDefinedOptionsBase = RequiredDefined<Omit<UserDefinedOptions, 'supportCustomLengthUnits' | 'customReplaceDictionary' | 'cache' | 'templateHandler' | 'styleHandler' | 'jsHandler'>>;
export interface LinkedJsModuleResult {
    code: string;
}
export interface JsHandlerResult {
    code: string;
    map?: SourceMap;
    error?: ParseError;
    linked?: Record<string, LinkedJsModuleResult>;
}
export interface TailwindcssRuntimeLike {
    packageInfo: TailwindPackageInfo;
    majorVersion?: number | undefined;
    getClassSet: () => Promise<Set<string>> | Set<string>;
    getClassSetSync?: (() => Set<string>) | undefined;
    extract: (options?: TailwindcssExtractOptions) => Promise<TailwindcssExtractResult> | TailwindcssExtractResult;
    collectContentTokens?: (() => Promise<TailwindContentTokenReport> | TailwindContentTokenReport) | undefined;
    options?: TailwindCssRuntimeOptions | undefined;
}
export type BabelParserOptions = ParserOptions & {
    cache?: boolean | undefined;
    cacheKey?: string | undefined;
    cacheMaxEntries?: number | undefined;
    cacheMaxSourceLength?: number | undefined;
};
export interface RefreshTailwindcssRuntimeOptions {
    clearCache?: boolean | undefined;
}
export interface IJsHandlerOptions {
    escapeMap?: Record<string, string> | undefined;
    classNameSet?: Set<string> | undefined;
    jsArbitraryValueFallback?: boolean | 'auto' | undefined;
    tailwindcssMajorVersion?: number | undefined;
    arbitraryValues?: IArbitraryValues | undefined;
    jsPreserveClass?: ((keyword: string) => boolean | undefined) | undefined;
    needEscaped?: boolean | undefined;
    generateMap?: boolean | undefined;
    alwaysEscape?: boolean | undefined;
    unescapeUnicode?: boolean | undefined;
    babelParserOptions?: BabelParserOptions | undefined;
    experimentalJsFastPath?: boolean | 'oxc' | undefined;
    ignoreTaggedTemplateExpressionIdentifiers?: (string | RegExp)[] | undefined;
    ignoreCallExpressionIdentifiers?: (string | RegExp)[] | undefined;
    uniAppX?: boolean | undefined;
    moduleSpecifierReplacements?: Record<string, string> | undefined;
    wrapExpression?: boolean | undefined;
    filename?: string | undefined;
    moduleGraph?: JsModuleGraphOptions | undefined;
}
export interface JsHandler {
    (rawSource: string, set?: Set<string>, options?: CreateJsHandlerOptions): JsHandlerResult;
}
export interface ICommonReplaceOptions {
    keepEOL?: boolean | undefined;
    escapeMap?: Record<string, string> | undefined;
}
export interface ITemplateHandlerOptions extends ICommonReplaceOptions {
    customAttributesEntities?: ICustomAttributesEntities | undefined;
    escapeMap?: Record<string, string> | undefined;
    inlineWxs?: boolean | undefined;
    jsHandler?: JsHandler | undefined;
    runtimeSet?: Set<string> | undefined;
    disabledDefaultTemplateHandler?: boolean | undefined;
    quote?: string | null | undefined;
    ignoreHead?: boolean | undefined;
    wrapExpression?: boolean | undefined;
}
export interface InternalUserDefinedOptions extends InternalUserDefinedOptionsBase {
    supportCustomLengthUnits: LengthUnitsRuntimeOptions | boolean;
    templateHandler: (rawSource: string, options?: ITemplateHandlerOptions) => Promise<string>;
    styleHandler: (rawSource: string, options?: IStyleHandlerOptions) => Promise<PostcssResult<Root | Document>>;
    jsHandler: JsHandler;
    escapeMap: Record<string, string>;
    customReplaceDictionary: Record<string, string>;
    cache: ICreateCacheReturnType;
    tailwindRuntime: TailwindcssRuntimeLike;
    refreshTailwindcssRuntime: (options?: RefreshTailwindcssRuntimeOptions) => Promise<TailwindcssRuntimeLike>;
}
export type InternalPostcssOptions = Pick<UserDefinedOptions, 'cssMatcher' | 'mainCssChunkMatcher' | 'cssPreflight' | 'cssPreflightRange' | 'disabled'>;
export interface IBaseWebpackPlugin {
    options: InternalUserDefinedOptions;
    appType?: AppType | undefined;
    apply: (compiler: any) => void;
}
export type CreateJsHandlerOptions = Omit<IJsHandlerOptions, 'classNameSet'>;
export interface JsModuleGraphOptions {
    resolve: (specifier: string, importer: string) => string | undefined;
    load: (id: string) => string | undefined;
    filter?: ((id: string, specifier: string, importer: string) => boolean) | undefined;
    maxDepth?: number | undefined;
}
