import * as postcss from 'postcss'; import type { FileProcessor } from './cached-process-file'; import { Diagnostics } from './diagnostics'; import { SelectorNode, Selector, SelectorList, CompoundSelector, ImmutableSelectorNode } from '@tokey/css-selector-parser'; import { ClassSymbol, ElementSymbol, STStructure } from './features'; import type { StylableMeta } from './stylable-meta'; import { CSSResolve, StylableResolverCache, StylableResolver, createSymbolResolverWithCache } from './stylable-resolver'; import type { ModuleResolver } from './types'; import type { MappedStates } from './helpers/custom-state'; export interface ResolvedElement { name: string; type: string; resolved: Array>; } export type RuntimeStVar = string | { [key: string]: RuntimeStVar; } | RuntimeStVar[]; export interface StylableExports { classes: Record; vars: Record; stVars: Record; keyframes: Record; layers: Record; containers: Record; } export interface StylableResults { meta: StylableMeta; exports: StylableExports; } export type replaceValueHook = (value: string, name: string | { name: string; args: string[]; }, isLocal: boolean, passedThrough: string[]) => string; export type postProcessor = (stylableResults: StylableResults, transformer: StylableTransformer) => StylableResults & T; export interface TransformHooks { postProcessor?: postProcessor; replaceValueHook?: replaceValueHook; } type EnvMode = 'production' | 'development'; export interface TransformerOptions { fileProcessor: FileProcessor; moduleResolver: ModuleResolver; requireModule: (modulePath: string) => any; diagnostics: Diagnostics; keepValues?: boolean; replaceValueHook?: replaceValueHook; postProcessor?: postProcessor; mode?: EnvMode; resolverCache?: StylableResolverCache; stVarOverride?: Record; experimentalSelectorInference?: boolean; } export declare const transformerDiagnostics: { UNKNOWN_PSEUDO_ELEMENT: { (name: string): import("./diagnostics").DiagnosticBase; code: string; severity: import("./diagnostics").DiagnosticSeverity; }; }; type PostcssContainer = postcss.Container | postcss.Document; export declare class StylableTransformer { fileProcessor: FileProcessor; diagnostics: Diagnostics; resolver: StylableResolver; keepValues: boolean; replaceValueHook: replaceValueHook | undefined; postProcessor: postProcessor | undefined; mode: EnvMode; private defaultStVarOverride; private evaluator; getResolvedSymbols: ReturnType; private directiveNodes; experimentalSelectorInference: boolean; containerInferredSelectorMap: Map; constructor(options: TransformerOptions); transform(meta: StylableMeta): StylableResults; transformAst(ast: postcss.Root, meta: StylableMeta, metaExports?: StylableExports, stVarOverride?: Record, path?: string[], mixinTransform?: boolean, inferredSelectorMixin?: InferredSelector): void; resolveSelectorElements(meta: StylableMeta, selector: string): ResolvedElement[][]; scopeSelector(originMeta: StylableMeta, selector: string, selectorNode?: postcss.Rule | postcss.AtRule, inferredNestSelector?: InferredSelector, inferredMixinSelector?: InferredSelector, unwrapGlobals?: boolean): { selector: string; elements: ResolvedElement[][]; targetSelectorAst: SelectorList; inferredSelector: InferredSelector; }; createSelectorContext(meta: StylableMeta, selectorAst: SelectorList, selectorNode: postcss.Rule | postcss.AtRule, selectorStr?: string, selectorNest?: InferredSelector, selectorMixin?: InferredSelector): ScopeContext; createInferredSelector(meta: StylableMeta, { name, type }: { name: string; type: 'class' | 'element'; }): InferredSelector; scopeSelectorAst(context: ScopeContext): SelectorList; private handleCompoundNode; } type SelectorSymbol = ClassSymbol | ElementSymbol | STStructure.PartSymbol; type InferredResolve = CSSResolve; type InferredPseudoElement = { inferred: InferredSelector; selectors: SelectorList; }; type InferredPseudoClass = { meta: StylableMeta; state: MappedStates[string]; }; export declare class InferredSelector { private api; protected resolveSet: Set; constructor(api: Pick, resolve?: InferredResolve[] | InferredSelector); isEmpty(): boolean; set(resolve: InferredResolve[] | InferredSelector): void; clone(): InferredSelector; /** * Adds to the set of inferred resolved CSS * Assumes passes CSSResolved from the same meta/symbol are * the same from the same cached transform process to dedupe them. */ add(resolve: InferredResolve[] | InferredSelector): void; /** * Takes a CSS part resolve and use it extend the current set of inferred resolved. * Used to expand the resolved mapped selector with the part definition * e.g. part can add nested states/parts that override the inferred mapped selector. */ private addPartOverride; getPseudoClasses({ name: searchedName }?: { name?: string; }): Record; getPseudoElements({ isFirstInSelector, experimentalSelectorInference, name, }: { isFirstInSelector: boolean; experimentalSelectorInference: boolean; name?: string; }): Record; private matchedElement; getSingleResolve(): InferredResolve[]; } declare class SelectorMultiplier { private dupIndicesPerSelector; addSplitPoint(selectorIndex: number, nodeIndex: number, selectors: SelectorList): void; duplicateSelectors(targetSelectors: SelectorList): void; } export declare class ScopeContext { originMeta: StylableMeta; resolver: StylableResolver; selectorAst: SelectorList; ruleOrAtRule: postcss.Rule | postcss.AtRule; scopeSelectorAst: StylableTransformer['scopeSelectorAst']; private transformer; inferredSelectorMixin?: InferredSelector | undefined; transform: boolean; selectorStr: string; selectorIndex: number; elements: any[]; selectorAstResolveMap: Map; selector?: Selector; compoundSelector?: CompoundSelector; node?: CompoundSelector['nodes'][number]; isNested: boolean; splitSelectors: SelectorMultiplier; lastInferredSelectorNode: SelectorNode | undefined; isStandaloneSelector: boolean; inferredSelectorStart: InferredSelector; inferredSelectorContext: InferredSelector; inferredSelectorNest: InferredSelector; inferredSelector: InferredSelector; inferredMultipleSelectors: InferredSelector; constructor(originMeta: StylableMeta, resolver: StylableResolver, selectorAst: SelectorList, ruleOrAtRule: postcss.Rule | postcss.AtRule, scopeSelectorAst: StylableTransformer['scopeSelectorAst'], transformer: StylableTransformer, inferredSelectorNest?: InferredSelector, inferredSelectorMixin?: InferredSelector | undefined, inferredSelectorContext?: InferredSelector, selectorStr?: string); get experimentalSelectorInference(): boolean; static legacyElementsTypesMapping: Record; setNextSelectorScope(resolved: InferredResolve[] | InferredSelector, node: SelectorNode, name?: string): void; isFirstInSelector(node: SelectorNode): boolean; createNestedContext(selectorAst: SelectorList, selectorContext?: InferredSelector): ScopeContext; transformIntoMultiSelector(node: SelectorNode, selectors: SelectorList): void; isDuplicateStScopeDiagnostic(): boolean; } export {}; //# sourceMappingURL=stylable-transformer.d.ts.map