// @flow type Exclude = A; // see https://gist.github.com/thecotne/6e5969f4aaf8f253985ed36b30ac9fe0 type $FlowGen$If = $Call< ((true, Then, Else) => Then) & ((false, Then, Else) => Else), X, Then, Else >; type $FlowGen$Assignable = $Call< ((...r: [B]) => true) & ((...r: [A]) => false), A >; import type { Angle, CssColor, Rule, CustomProperty, EnvironmentVariable, Function, Image, LengthValue, MediaQuery, Declaration, Ratio, Resolution, Selector, SupportsCondition, Time, Token, TokenOrValue, UnknownAtRule, Url, Variable, StyleRule, DeclarationBlock, ParsedComponent, Multiplier, StyleSheet, } from "./ast.js.flow"; import { Targets, Features } from "./targets.js.flow"; declare export * from "./ast.js.flow"; declare export { Targets, Features }; export type TransformOptions = {| /** * The filename being transformed. Used for error messages and source maps. */ filename: string, /** * The source code to transform. */ code: Uint8Array, /** * Whether to enable minification. */ minify?: boolean, /** * Whether to output a source map. */ sourceMap?: boolean, /** * An input source map to extend. */ inputSourceMap?: string, /** * An optional project root path, used as the source root in the output source map. * Also used to generate relative paths for sources used in CSS module hashes. */ projectRoot?: string, /** * The browser targets for the generated code. */ targets?: Targets, /** * Features that should always be compiled, even when supported by targets. */ include?: number, /** * Features that should never be compiled, even when unsupported by targets. */ exclude?: number, /** * Whether to enable parsing various draft syntax. */ drafts?: Drafts, /** * Whether to enable various non-standard syntax. */ nonStandard?: NonStandard, /** * Whether to compile this file as a CSS module. */ cssModules?: boolean | CSSModulesConfig, /** * Whether to analyze dependencies (e.g. string). * When enabled, string dependencies * are replaced with hashed placeholders that can be replaced with the final * urls later (after bundling). Dependencies are returned as part of the result. */ analyzeDependencies?: boolean | DependencyOptions, /** * Replaces user action pseudo classes with class names that can be applied from JavaScript. * This is useful for polyfills, for example. */ pseudoClasses?: PseudoClasses, /** * A list of class names, ids, and custom identifiers (e.g. @keyframes) that are known * to be unused. These will be removed during minification. Note that these are not * selectors but individual names (without any . or # prefixes). */ unusedSymbols?: string[], /** * Whether to ignore invalid rules and declarations rather than erroring. * When enabled, warnings are returned, and the invalid rule or declaration is * omitted from the output code. */ errorRecovery?: boolean, /** * An AST visitor object. This allows custom transforms or analysis to be implemented in JavaScript. * Multiple visitors can be composed into one using the string function. * For optimal performance, visitors should be as specific as possible about what types of values * they care about so that JavaScript has to be called as little as possible. */ visitor?: Visitor, /** * Defines how to parse custom CSS at-rules. Each at-rule can have a prelude, defined using a CSS * [syntax string](https://drafts.css-houdini.org/css-properties-values-api/#syntax-strings), and * a block body. The body can be a declaration list, rule list, or style block as defined in the * [css spec](https://drafts.csswg.org/css-syntax/#declaration-rule-list). */ customAtRules?: C, |}; declare type PropertyStart = | "-" | "_" | "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z"; export type ReturnedDeclaration = | Declaration | {| /** * The property name. */ property: string, /** * The raw string value for the declaration. */ raw: string, |}; export type ReturnedMediaQuery = | MediaQuery | {| /** * The raw string value for the media query. */ raw: string, |}; declare type FindByType = $FlowGen$If< $FlowGen$Assignable< Union, {| type: Name, |} >, Union, empty >; export type ReturnedRule = Rule; declare type RequiredValue = $FlowGen$If< $FlowGen$Assignable< Rule, {| value: { [key: string]: any }, |} >, $FlowGen$If< $FlowGen$Assignable<$PropertyType, StyleRule>, {| ...Rule, ...{| value: {| ...Required, ...{| declarations: Required, |}, |}, |}, |}, {| ...Rule, ...{| value: Required<$PropertyType>, |}, |} >, Rule >; declare type RuleVisitor> = ( rule: R ) => ReturnedRule | ReturnedRule[] | void; declare type MappedRuleVisitors = $ObjMapi< { [k: Exclude<$PropertyType, "unknown" | "custom">]: any }, (Name) => RuleVisitor>> >; declare type UnknownVisitors = { [name: string]: RuleVisitor, }; declare type CustomVisitors = $ObjMapi< T, (Name) => RuleVisitor>> >; declare type AnyCustomAtRule = $ElementType< $ObjMapi(Key) => CustomAtRule>>, $Keys >; declare type RuleVisitors = {| ...MappedRuleVisitors, ...{| unknown?: | UnknownVisitors | $Diff< RuleVisitor, { [key: $Keys]: any } >, custom?: | CustomVisitors | $Diff< RuleVisitor>, { [key: $Keys]: any } >, |}, |}; declare type PreludeTypes = Exclude< $PropertyType, "literal" | "repeated" | "token" >; declare type SyntaxString = string | string; declare type ComponentTypes = $ObjMapi< { [k: PreludeTypes]: any }, (Key) => FindByType >; declare type Repetitions = $ObjMapi< { [k: PreludeTypes]: any }, (Key) => {| type: "repeated", value: {| components: FindByType[], multiplier: Multiplier, |}, |} >; declare type MappedPrelude = {| ...ComponentTypes, ...Repetitions |}; declare type MappedBody> = $FlowGen$If<$FlowGen$Assignable, "rule-list", P>; declare type CustomAtRule = {| name: N, prelude: $FlowGen$If< $FlowGen$Assignable<$PropertyType, $Keys>, $ElementType>, ParsedComponent >, body: FindByType>>, loc: Location, |}; declare type CustomAtRuleBody = | {| type: "declaration-list", value: Required, |} | {| type: "rule-list", value: RequiredValue[], |}; declare type FindProperty = $FlowGen$If< $FlowGen$Assignable< Union, {| property: Name, |} >, Union, empty >; declare type DeclarationVisitor

= ( property: P ) => ReturnedDeclaration | ReturnedDeclaration[] | void; declare type MappedDeclarationVisitors = $ObjMapi< { [k: Exclude< $PropertyType, "unparsed" | "custom" >]: any, }, ( Name ) => DeclarationVisitor< FindProperty | FindProperty > >; declare type CustomPropertyVisitors = { [name: string]: DeclarationVisitor, }; declare type DeclarationVisitors = {| ...MappedDeclarationVisitors, ...{| custom?: CustomPropertyVisitors | DeclarationVisitor, |}, |}; declare type RawValue = {| /** * A raw string value which will be parsed like CSS. */ raw: string, |}; declare type TokenReturnValue = TokenOrValue | TokenOrValue[] | RawValue | void; declare type TokenVisitor = (token: Token) => TokenReturnValue; declare type VisitableTokenTypes = | "ident" | "at-keyword" | "hash" | "id-hash" | "string" | "number" | "percentage" | "dimension"; declare type TokenVisitors = $ObjMapi< { [k: VisitableTokenTypes]: any }, (Name) => (token: FindByType) => TokenReturnValue >; declare type FunctionVisitor = (fn: Function) => TokenReturnValue; declare type EnvironmentVariableVisitor = ( env: EnvironmentVariable ) => TokenReturnValue; declare type EnvironmentVariableVisitors = { [name: string]: EnvironmentVariableVisitor, }; export type Visitor = {| StyleSheet?: ( stylesheet: StyleSheet ) => StyleSheet | void, StyleSheetExit?: ( stylesheet: StyleSheet ) => StyleSheet | void, Rule?: RuleVisitor<> | RuleVisitors, RuleExit?: RuleVisitor<> | RuleVisitors, Declaration?: DeclarationVisitor<> | DeclarationVisitors, DeclarationExit?: DeclarationVisitor<> | DeclarationVisitors, Url?: (url: Url) => Url | void, Color?: (color: CssColor) => CssColor | void, Image?: (image: Image) => Image | void, ImageExit?: (image: Image) => Image | void, Length?: (length: LengthValue) => LengthValue | void, Angle?: (angle: Angle) => Angle | void, Ratio?: (ratio: Ratio) => Ratio | void, Resolution?: (resolution: Resolution) => Resolution | void, Time?: (time: Time) => Time | void, CustomIdent?: (ident: string) => string | void, DashedIdent?: (ident: string) => string | void, MediaQuery?: ( query: MediaQuery ) => ReturnedMediaQuery | ReturnedMediaQuery[] | void, MediaQueryExit?: ( query: MediaQuery ) => ReturnedMediaQuery | ReturnedMediaQuery[] | void, SupportsCondition?: (condition: SupportsCondition) => SupportsCondition, SupportsConditionExit?: (condition: SupportsCondition) => SupportsCondition, Selector?: (selector: Selector) => Selector | Selector[] | void, Token?: TokenVisitor | TokenVisitors, Function?: | FunctionVisitor | { [name: string]: FunctionVisitor, }, FunctionExit?: | FunctionVisitor | { [name: string]: FunctionVisitor, }, Variable?: (variable: Variable) => TokenReturnValue, VariableExit?: (variable: Variable) => TokenReturnValue, EnvironmentVariable?: | EnvironmentVariableVisitor | EnvironmentVariableVisitors, EnvironmentVariableExit?: | EnvironmentVariableVisitor | EnvironmentVariableVisitors, |}; export type CustomAtRules = {| [name: string]: CustomAtRuleDefinition, |}; export type CustomAtRuleDefinition = {| /** * Defines the syntax for a custom at-rule prelude. The value should be a * CSS [syntax string](https://drafts.css-houdini.org/css-properties-values-api/#syntax-strings) * representing the types of values that are accepted. This property may be omitted or * set to null to indicate that no prelude is accepted. */ prelude?: SyntaxString | null, /** * Defines the type of body contained within the at-rule block. * - declaration-list: A CSS declaration list, as in a style rule. * - rule-list: A list of CSS rules, as supported within a non-nested * at-rule such as string. * - style-block: Both a declaration list and rule list, as accepted within * a nested at-rule within a style rule (e.g. string inside a style rule * with directly nested declarations). */ body?: "declaration-list" | "rule-list" | "style-block" | null, |}; export type DependencyOptions = {| /** * Whether to preserve string rules rather than removing them. */ preserveImports?: boolean, |}; export type BundleOptions = $Diff< TransformOptions, {| code: any |} >; export type BundleAsyncOptions = {| ...$Exact>, resolver?: Resolver, |}; /** * Custom resolver to use when loading CSS files. */ export type Resolver = {| /** * Read the given file and return its contents as a string. */ read?: (file: string) => string | Promise, /** * Resolve the given CSS import specifier from the provided originating file to a * path which gets passed to string. */ resolve?: ( specifier: string, originatingFile: string ) => string | Promise, |}; export type Drafts = {| /** * Whether to enable @custom-media rules. */ customMedia?: boolean, |}; export type NonStandard = {| /** * Whether to enable the non-standard >>> and /deep/ selector combinators used by Angular and Vue. */ deepSelectorCombinator?: boolean, |}; export type PseudoClasses = {| hover?: string, active?: string, focus?: string, focusVisible?: string, focusWithin?: string, |}; export type TransformResult = {| /** * The transformed code. */ code: Uint8Array, /** * The generated source map, if enabled. */ map: Uint8Array | void, /** * CSS module exports, if enabled. */ exports: CSSModuleExports | void, /** * CSS module references, if string is enabled. */ references: CSSModuleReferences, /** * string dependencies, if enabled. */ dependencies: Dependency[] | void, /** * Warnings that occurred during compilation. */ warnings: Warning[], |}; export type Warning = {| message: string, type: string, value?: any, loc: ErrorLocation, |}; export type CSSModulesConfig = {| /** * The pattern to use when renaming class names and other identifiers. Default is string. */ pattern?: string, /** * Whether to rename dashed identifiers, e.g. custom properties. */ dashedIdents?: boolean, |}; export type CSSModuleExports = { /** * Maps exported (i.e. original) names to local names. */ [name: string]: CSSModuleExport, }; export type CSSModuleExport = {| /** * The local (compiled) name for this export. */ name: string, /** * Whether the export is referenced in this file. */ isReferenced: boolean, /** * Other names that are composed by this export. */ composes: CSSModuleReference[], |}; export type CSSModuleReferences = { /** * Maps placeholder names to references. */ [name: string]: DependencyCSSModuleReference, }; export type CSSModuleReference = | LocalCSSModuleReference | GlobalCSSModuleReference | DependencyCSSModuleReference; export type LocalCSSModuleReference = {| type: "local", /** * The local (compiled) name for the reference. */ name: string, |}; export type GlobalCSSModuleReference = {| type: "global", /** * The referenced global name. */ name: string, |}; export type DependencyCSSModuleReference = {| type: "dependency", /** * The name to reference within the dependency. */ name: string, /** * The dependency specifier for the referenced file. */ specifier: string, |}; export type Dependency = ImportDependency | UrlDependency; export type ImportDependency = {| type: "import", /** * The url of the string dependency. */ url: string, /** * The media query for the string rule. */ media: string | null, /** * The string rule. */ supports: string | null, /** * The source location where the string rule was found. */ loc: SourceLocation, /** * The placeholder that the import was replaced with. */ placeholder: string, |}; export type UrlDependency = {| type: "url", /** * The url of the dependency. */ url: string, /** * The source location where the string was found. */ loc: SourceLocation, /** * The placeholder that the url was replaced with. */ placeholder: string, |}; export type SourceLocation = {| /** * The file path in which the dependency exists. */ filePath: string, /** * The start location of the dependency. */ start: Location, /** * The end location (inclusive) of the dependency. */ end: Location, |}; export type Location = {| /** * The line number (1-based). */ line: number, /** * The column number (0-based). */ column: number, |}; export type ErrorLocation = {| ...$Exact, filename: string, |}; /** * Compiles a CSS file, including optionally minifying and lowering syntax to the given * targets. A source map may also be generated, but this is not enabled by default. */ declare export function transform( options: TransformOptions ): TransformResult; export type TransformAttributeOptions = {| /** * The filename in which the style attribute appeared. Used for error messages and dependencies. */ filename?: string, /** * The source code to transform. */ code: Uint8Array, /** * Whether to enable minification. */ minify?: boolean, /** * The browser targets for the generated code. */ targets?: Targets, /** * Whether to analyze string dependencies. * When enabled, string dependencies are replaced with hashed placeholders * that can be replaced with the final urls later (after bundling). * Dependencies are returned as part of the result. */ analyzeDependencies?: boolean, /** * Whether to ignore invalid rules and declarations rather than erroring. * When enabled, warnings are returned, and the invalid rule or declaration is * omitted from the output code. */ errorRecovery?: boolean, /** * An AST visitor object. This allows custom transforms or analysis to be implemented in JavaScript. * Multiple visitors can be composed into one using the string function. * For optimal performance, visitors should be as specific as possible about what types of values * they care about so that JavaScript has to be called as little as possible. */ visitor?: Visitor, |}; export type TransformAttributeResult = {| /** * The transformed code. */ code: Uint8Array, /** * string dependencies, if enabled. */ dependencies: Dependency[] | void, /** * Warnings that occurred during compilation. */ warnings: Warning[], |}; /** * Compiles a single CSS declaration list, such as an inline style attribute in HTML. */ declare export function transformStyleAttribute( options: TransformAttributeOptions ): TransformAttributeResult; /** * Converts a browserslist result into targets that can be passed to lightningcss. * @param browserslist the result of calling string */ declare export function browserslistToTargets(browserslist: string[]): Targets; /** * Bundles a CSS file and its dependencies, inlining @import rules. */ declare export function bundle( options: BundleOptions ): TransformResult; /** * Bundles a CSS file and its dependencies asynchronously, inlining @import rules. */ declare export function bundleAsync( options: BundleAsyncOptions ): Promise; /** * Composes multiple visitor objects into a single one. */ declare export function composeVisitors( visitors: Visitor[] ): Visitor;