| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494 |
- 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, Location2 } from './ast';
- import { Targets, Features } from './targets';
- export * from './ast';
- export { Targets, Features };
- export interface TransformOptions<C extends CustomAtRules> {
- /** 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. `@import` and `url()`).
- * When enabled, `@import` rules are removed, and `url()` 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 `composeVisitors` 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<C> | VisitorFunction<C>,
- /**
- * 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
- }
- // This is a hack to make TS still provide autocomplete for `property` vs. just making it `string`.
- 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: `${PropertyStart}${string}`,
- /** The raw string value for the declaration. */
- raw: string
- };
- export type ReturnedMediaQuery = MediaQuery | {
- /** The raw string value for the media query. */
- raw: string
- };
- type FindByType<Union, Name> = Union extends { type: Name } ? Union : never;
- export type ReturnedRule = Rule<ReturnedDeclaration, ReturnedMediaQuery>;
- type RequiredValue<Rule> = Rule extends { value: object }
- ? Rule['value'] extends StyleRule
- ? Rule & { value: Required<StyleRule> & { declarations: Required<DeclarationBlock> } }
- : Rule & { value: Required<Rule['value']> }
- : Rule;
- type RuleVisitor<R = RequiredValue<Rule>> = ((rule: R) => ReturnedRule | ReturnedRule[] | void);
- type MappedRuleVisitors = {
- [Name in Exclude<Rule['type'], 'unknown' | 'custom'>]?: RuleVisitor<RequiredValue<FindByType<Rule, Name>>>;
- }
- type UnknownVisitors<T> = {
- [name: string]: RuleVisitor<T>
- }
- type CustomVisitors<T extends CustomAtRules> = {
- [Name in keyof T]?: RuleVisitor<CustomAtRule<Name, T[Name]>>
- };
- type AnyCustomAtRule<C extends CustomAtRules> = {
- [Key in keyof C]: CustomAtRule<Key, C[Key]>
- }[keyof C];
- type RuleVisitors<C extends CustomAtRules> = MappedRuleVisitors & {
- unknown?: UnknownVisitors<UnknownAtRule> | Omit<RuleVisitor<UnknownAtRule>, keyof CallableFunction>,
- custom?: CustomVisitors<C> | Omit<RuleVisitor<AnyCustomAtRule<C>>, keyof CallableFunction>
- };
- type PreludeTypes = Exclude<ParsedComponent['type'], 'literal' | 'repeated' | 'token'>;
- type SyntaxString = `<${PreludeTypes}>` | `<${PreludeTypes}>+` | `<${PreludeTypes}>#` | (string & {});
- type ComponentTypes = {
- [Key in PreludeTypes as `<${Key}>`]: FindByType<ParsedComponent, Key>
- };
- type Repetitions = {
- [Key in PreludeTypes as `<${Key}>+` | `<${Key}>#`]: {
- type: "repeated",
- value: {
- components: FindByType<ParsedComponent, Key>[],
- multiplier: Multiplier
- }
- }
- };
- type MappedPrelude = ComponentTypes & Repetitions;
- type MappedBody<P extends CustomAtRuleDefinition['body']> = P extends 'style-block' ? 'rule-list' : P;
- interface CustomAtRule<N, R extends CustomAtRuleDefinition> {
- name: N,
- prelude: R['prelude'] extends keyof MappedPrelude ? MappedPrelude[R['prelude']] : ParsedComponent,
- body: FindByType<CustomAtRuleBody, MappedBody<R['body']>>,
- loc: Location2
- }
- type CustomAtRuleBody = {
- type: 'declaration-list',
- value: Required<DeclarationBlock>
- } | {
- type: 'rule-list',
- value: RequiredValue<Rule>[]
- };
- type FindProperty<Union, Name> = Union extends { property: Name } ? Union : never;
- type DeclarationVisitor<P = Declaration> = ((property: P) => ReturnedDeclaration | ReturnedDeclaration[] | void);
- type MappedDeclarationVisitors = {
- [Name in Exclude<Declaration['property'], 'unparsed' | 'custom'>]?: DeclarationVisitor<FindProperty<Declaration, Name> | FindProperty<Declaration, 'unparsed'>>;
- }
- type CustomPropertyVisitors = {
- [name: string]: DeclarationVisitor<CustomProperty>
- }
- type DeclarationVisitors = MappedDeclarationVisitors & {
- custom?: CustomPropertyVisitors | DeclarationVisitor<CustomProperty>
- }
- interface RawValue {
- /** A raw string value which will be parsed like CSS. */
- raw: string
- }
- type TokenReturnValue = TokenOrValue | TokenOrValue[] | RawValue | void;
- type TokenVisitor = (token: Token) => TokenReturnValue;
- type VisitableTokenTypes = 'ident' | 'at-keyword' | 'hash' | 'id-hash' | 'string' | 'number' | 'percentage' | 'dimension';
- type TokenVisitors = {
- [Name in VisitableTokenTypes]?: (token: FindByType<Token, Name>) => TokenReturnValue;
- }
- type FunctionVisitor = (fn: Function) => TokenReturnValue;
- type EnvironmentVariableVisitor = (env: EnvironmentVariable) => TokenReturnValue;
- type EnvironmentVariableVisitors = {
- [name: string]: EnvironmentVariableVisitor
- };
- export interface Visitor<C extends CustomAtRules> {
- StyleSheet?(stylesheet: StyleSheet): StyleSheet<ReturnedDeclaration, ReturnedMediaQuery> | void;
- StyleSheetExit?(stylesheet: StyleSheet): StyleSheet<ReturnedDeclaration, ReturnedMediaQuery> | void;
- Rule?: RuleVisitor | RuleVisitors<C>;
- RuleExit?: RuleVisitor | RuleVisitors<C>;
- 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 VisitorDependency = FileDependency | GlobDependency;
- export interface VisitorOptions {
- addDependency: (dep: VisitorDependency) => void
- }
- export type VisitorFunction<C extends CustomAtRules> = (options: VisitorOptions) => Visitor<C>;
- export interface CustomAtRules {
- [name: string]: CustomAtRuleDefinition
- }
- export interface 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 `@media` or `@supports`.
- * - style-block: Both a declaration list and rule list, as accepted within
- * a nested at-rule within a style rule (e.g. `@media` inside a style rule
- * with directly nested declarations).
- */
- body?: 'declaration-list' | 'rule-list' | 'style-block' | null
- }
- export interface DependencyOptions {
- /** Whether to preserve `@import` rules rather than removing them. */
- preserveImports?: boolean
- }
- export type BundleOptions<C extends CustomAtRules> = Omit<TransformOptions<C>, 'code'>;
- export interface BundleAsyncOptions<C extends CustomAtRules> extends BundleOptions<C> {
- resolver?: Resolver;
- }
- /** Custom resolver to use when loading CSS files. */
- export interface Resolver {
- /** Read the given file and return its contents as a string. */
- read?: (file: string) => string | Promise<string>;
- /**
- * Resolve the given CSS import specifier from the provided originating file to a
- * path which gets passed to `read()`.
- */
- resolve?: (specifier: string, originatingFile: string) => string | Promise<string>;
- }
- export interface Drafts {
- /** Whether to enable @custom-media rules. */
- customMedia?: boolean
- }
- export interface NonStandard {
- /** Whether to enable the non-standard >>> and /deep/ selector combinators used by Angular and Vue. */
- deepSelectorCombinator?: boolean
- }
- export interface PseudoClasses {
- hover?: string,
- active?: string,
- focus?: string,
- focusVisible?: string,
- focusWithin?: string
- }
- export interface 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 `dashedIdents` is enabled. */
- references: CSSModuleReferences,
- /** `@import` and `url()` dependencies, if enabled. */
- dependencies: Dependency[] | void,
- /** Warnings that occurred during compilation. */
- warnings: Warning[]
- }
- export interface Warning {
- message: string,
- type: string,
- value?: any,
- loc: ErrorLocation
- }
- export interface CSSModulesConfig {
- /** The pattern to use when renaming class names and other identifiers. Default is `[hash]_[local]`. */
- pattern?: string,
- /** Whether to rename dashed identifiers, e.g. custom properties. */
- dashedIdents?: boolean,
- /** Whether to enable hashing for `@keyframes`. */
- animation?: boolean,
- /** Whether to enable hashing for CSS grid identifiers. */
- grid?: boolean,
- /** Whether to enable hashing for `@container` names. */
- container?: boolean,
- /** Whether to enable hashing for custom identifiers. */
- customIdents?: boolean,
- /** Whether to require at least one class or id selector in each rule. */
- pure?: boolean
- }
- export type CSSModuleExports = {
- /** Maps exported (i.e. original) names to local names. */
- [name: string]: CSSModuleExport
- };
- export interface 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 interface LocalCSSModuleReference {
- type: 'local',
- /** The local (compiled) name for the reference. */
- name: string,
- }
- export interface GlobalCSSModuleReference {
- type: 'global',
- /** The referenced global name. */
- name: string,
- }
- export interface 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 | FileDependency | GlobDependency;
- export interface ImportDependency {
- type: 'import',
- /** The url of the `@import` dependency. */
- url: string,
- /** The media query for the `@import` rule. */
- media: string | null,
- /** The `supports()` query for the `@import` rule. */
- supports: string | null,
- /** The source location where the `@import` rule was found. */
- loc: SourceLocation,
- /** The placeholder that the import was replaced with. */
- placeholder: string
- }
- export interface UrlDependency {
- type: 'url',
- /** The url of the dependency. */
- url: string,
- /** The source location where the `url()` was found. */
- loc: SourceLocation,
- /** The placeholder that the url was replaced with. */
- placeholder: string
- }
- export interface FileDependency {
- type: 'file',
- filePath: string
- }
- export interface GlobDependency {
- type: 'glob',
- glob: string
- }
- export interface 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 interface Location {
- /** The line number (1-based). */
- line: number,
- /** The column number (0-based). */
- column: number
- }
- export interface ErrorLocation extends Location {
- 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.
- */
- export declare function transform<C extends CustomAtRules>(options: TransformOptions<C>): TransformResult;
- export interface 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 `url()` dependencies.
- * When enabled, `url()` 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 `composeVisitors` 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<never> | VisitorFunction<never>
- }
- export interface TransformAttributeResult {
- /** The transformed code. */
- code: Uint8Array,
- /** `@import` and `url()` 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.
- */
- export declare function transformStyleAttribute(options: TransformAttributeOptions): TransformAttributeResult;
- /**
- * Converts a browserslist result into targets that can be passed to lightningcss.
- * @param browserslist the result of calling `browserslist`
- */
- export declare function browserslistToTargets(browserslist: string[]): Targets;
- /**
- * Bundles a CSS file and its dependencies, inlining @import rules.
- */
- export declare function bundle<C extends CustomAtRules>(options: BundleOptions<C>): TransformResult;
- /**
- * Bundles a CSS file and its dependencies asynchronously, inlining @import rules.
- */
- export declare function bundleAsync<C extends CustomAtRules>(options: BundleAsyncOptions<C>): Promise<TransformResult>;
- /**
- * Composes multiple visitor objects into a single one.
- */
- export declare function composeVisitors<C extends CustomAtRules>(visitors: (Visitor<C> | VisitorFunction<C>)[]): Visitor<C> | VisitorFunction<C>;
|