Spaces:
Sleeping
Sleeping
| # API Reference | |
| ## Overview | |
| `@adobe/css-tools` provides a modern CSS parser and stringifier with comprehensive TypeScript support. It can parse CSS into an Abstract Syntax Tree (AST) and convert the AST back to CSS with various formatting options. | |
| ## Installation | |
| ```bash | |
| npm install @adobe/css-tools | |
| ``` | |
| ## Core Functions | |
| ### `parse(code, options?)` | |
| Parses CSS code and returns an Abstract Syntax Tree (AST). | |
| #### Parameters | |
| - `code` (string) - The CSS code to parse | |
| - `options` (object, optional) - Parsing options | |
| - `silent` (boolean) - Silently fail on parse errors instead of throwing. When `true`, errors are collected in `ast.stylesheet.parsingErrors` | |
| - `source` (string) - File path for better error reporting | |
| #### Returns | |
| - `CssStylesheetAST` - The parsed CSS as an AST | |
| #### Example | |
| ```javascript | |
| import { parse } from '@adobe/css-tools'; | |
| const css = ` | |
| .example { | |
| color: red; | |
| font-size: 16px; | |
| } | |
| `; | |
| const ast = parse(css); | |
| console.log(ast.stylesheet.rules); | |
| ``` | |
| ### `stringify(ast, options?)` | |
| Converts a CSS AST back to CSS string with configurable formatting. | |
| #### Parameters | |
| - `ast` (CssStylesheetAST) - The CSS AST to stringify | |
| - `options` (CompilerOptions, optional) - Stringification options | |
| - `indent` (string) - Indentation string (default: `' '`) | |
| - `compress` (boolean) - Whether to compress/minify the output (default: `false`) | |
| #### Returns | |
| - `string` - The formatted CSS string | |
| #### Example | |
| ```javascript | |
| import { parse, stringify } from '@adobe/css-tools'; | |
| const css = '.example { color: red; }'; | |
| const ast = parse(css); | |
| // Pretty print | |
| const formatted = stringify(ast, { indent: ' ' }); | |
| console.log(formatted); | |
| // Output: | |
| // .example { | |
| // color: red; | |
| // } | |
| // Compressed | |
| const minified = stringify(ast, { compress: true }); | |
| console.log(minified); | |
| // Output: .example{color:red} | |
| ``` | |
| ## Type Definitions | |
| ### Core Types | |
| #### `CssStylesheetAST` | |
| The root AST node representing a complete CSS stylesheet. | |
| ```typescript | |
| type CssStylesheetAST = { | |
| type: CssTypes.stylesheet; | |
| stylesheet: { | |
| source?: string; | |
| rules: CssRuleAST[]; | |
| parsingErrors?: CssParseError[]; | |
| }; | |
| }; | |
| ``` | |
| #### `CssRuleAST` | |
| Represents a CSS rule (selector + declarations). | |
| ```typescript | |
| type CssRuleAST = { | |
| type: CssTypes.rule; | |
| selectors: string[]; | |
| declarations: CssDeclarationAST[]; | |
| position?: CssPosition; | |
| parent?: CssStylesheetAST; | |
| }; | |
| ``` | |
| #### `CssDeclarationAST` | |
| Represents a CSS property declaration. | |
| ```typescript | |
| type CssDeclarationAST = { | |
| type: CssTypes.declaration; | |
| property: string; | |
| value: string; | |
| position?: CssPosition; | |
| parent?: CssRuleAST; | |
| }; | |
| ``` | |
| #### `CssMediaAST` | |
| Represents a CSS @media rule. | |
| ```typescript | |
| type CssMediaAST = { | |
| type: CssTypes.media; | |
| media: string; | |
| rules: CssRuleAST[]; | |
| position?: CssPosition; | |
| parent?: CssStylesheetAST; | |
| }; | |
| ``` | |
| #### `CssKeyframesAST` | |
| Represents a CSS @keyframes rule. | |
| ```typescript | |
| type CssKeyframesAST = { | |
| type: CssTypes.keyframes; | |
| name: string; | |
| keyframes: CssKeyframeAST[]; | |
| position?: CssPosition; | |
| parent?: CssStylesheetAST; | |
| }; | |
| ``` | |
| #### `CssPosition` | |
| Represents source position information. | |
| ```typescript | |
| type CssPosition = { | |
| source?: string; | |
| start: { | |
| line: number; | |
| column: number; | |
| }; | |
| end: { | |
| line: number; | |
| column: number; | |
| }; | |
| }; | |
| ``` | |
| #### `CssParseError` | |
| Represents a parsing error. | |
| ```typescript | |
| type CssParseError = { | |
| message: string; | |
| reason: string; | |
| filename?: string; | |
| line: number; | |
| column: number; | |
| source?: string; | |
| }; | |
| ``` | |
| ### Compiler Options | |
| #### `CompilerOptions` | |
| Options for the stringifier. | |
| ```typescript | |
| type CompilerOptions = { | |
| indent?: string; // Default: ' ' | |
| compress?: boolean; // Default: false | |
| }; | |
| ``` | |
| ## Error Handling | |
| ### Silent Parsing | |
| When parsing malformed CSS, you can use the `silent` option to collect errors instead of throwing: | |
| ```javascript | |
| import { parse } from '@adobe/css-tools'; | |
| const malformedCss = ` | |
| body { color: red; } | |
| { color: blue; } /* Missing selector */ | |
| .valid { background: green; } | |
| `; | |
| const result = parse(malformedCss, { silent: true }); | |
| if (result.stylesheet.parsingErrors) { | |
| result.stylesheet.parsingErrors.forEach(error => { | |
| console.log(`Error at line ${error.line}: ${error.message}`); | |
| }); | |
| } | |
| // Valid rules are still parsed | |
| console.log('Valid rules:', result.stylesheet.rules.length); | |
| ``` | |
| ### Source Tracking | |
| Enable source tracking for better error reporting: | |
| ```javascript | |
| import { parse } from '@adobe/css-tools'; | |
| const css = 'body { color: red; }'; | |
| const ast = parse(css, { source: 'styles.css' }); | |
| const rule = ast.stylesheet.rules[0]; | |
| console.log(rule.position?.source); // "styles.css" | |
| console.log(rule.position?.start); // { line: 1, column: 1 } | |
| console.log(rule.position?.end); // { line: 1, column: 20 } | |
| ``` | |
| ## Advanced Usage | |
| ### Working with At-Rules | |
| ```javascript | |
| import { parse, stringify } from '@adobe/css-tools'; | |
| const css = ` | |
| @media (max-width: 768px) { | |
| .container { | |
| padding: 10px; | |
| } | |
| } | |
| @keyframes fadeIn { | |
| from { opacity: 0; } | |
| to { opacity: 1; } | |
| } | |
| `; | |
| const ast = parse(css); | |
| // Access media rules | |
| const mediaRule = ast.stylesheet.rules.find(rule => rule.type === 'media'); | |
| console.log(mediaRule.media); // "(max-width: 768px)" | |
| // Access keyframes | |
| const keyframesRule = ast.stylesheet.rules.find(rule => rule.type === 'keyframes'); | |
| console.log(keyframesRule.name); // "fadeIn" | |
| ``` | |
| ### Custom Formatting | |
| ```javascript | |
| import { parse, stringify } from '@adobe/css-tools'; | |
| const css = '.example{color:red;font-size:16px}'; | |
| const ast = parse(css); | |
| // Custom indentation | |
| const formatted = stringify(ast, { indent: ' ' }); | |
| console.log(formatted); | |
| // Output: | |
| // .example { | |
| // color: red; | |
| // font-size: 16px; | |
| // } | |
| // Compressed with no spaces | |
| const compressed = stringify(ast, { compress: true }); | |
| console.log(compressed); | |
| // Output: .example{color:red;font-size:16px} | |
| ``` | |
| ## TypeScript Integration | |
| The library provides comprehensive TypeScript support with full type definitions for all AST nodes and functions: | |
| ```typescript | |
| import { parse, stringify, type CssStylesheetAST } from '@adobe/css-tools'; | |
| const css: string = '.example { color: red; }'; | |
| const ast: CssStylesheetAST = parse(css); | |
| const output: string = stringify(ast); | |
| ``` | |
| ## Performance Considerations | |
| - The parser is optimized for large CSS files | |
| - AST nodes are lightweight and memory-efficient | |
| - Stringification is fast and supports streaming for large outputs | |
| - Consider using `compress: true` for production builds to reduce file size | |
| ## Browser Support | |
| The library works in all modern browsers and Node.js environments. For older environments, you may need to use a bundler with appropriate polyfills. | |