95 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
[](https://travis-ci.org/css-modules/icss-utils)
 | 
						|
 | 
						|
# ICSS Utils
 | 
						|
 | 
						|
## replaceSymbols
 | 
						|
 | 
						|
Governs the way tokens are searched & replaced during the linking stage of ICSS loading.
 | 
						|
 | 
						|
This is broken into its own module in case the behaviour needs to be replicated in other PostCSS plugins
 | 
						|
(i.e. [CSS Modules Values](https://github.com/css-modules/postcss-modules-values))
 | 
						|
 | 
						|
```js
 | 
						|
import { replaceSymbols, replaceValueSymbols } from "icss-utils";
 | 
						|
 | 
						|
replaceSymbols(css, replacements);
 | 
						|
replaceValueSymbols(string, replacements);
 | 
						|
```
 | 
						|
 | 
						|
Where:
 | 
						|
 | 
						|
- `css` is the PostCSS tree you're working with
 | 
						|
- `replacements` is an JS object of `symbol: "replacement"` pairs, where all occurrences of `symbol` are replaced with `replacement`.
 | 
						|
 | 
						|
A symbol is a string of alphanumeric, `-` or `_` characters. A replacement can be any string. They are replaced in the following places:
 | 
						|
 | 
						|
- In the value of a declaration, i.e. `color: my_symbol;` or `box-shadow: 0 0 blur spread shadow-color`
 | 
						|
- In a media expression i.e. `@media small {}` or `@media screen and not-large {}`
 | 
						|
 | 
						|
## extractICSS(css, removeRules = true, mode = 'auto')
 | 
						|
 | 
						|
Extracts and remove (if removeRules is equal true) from PostCSS tree `:import`, `@icss-import`, `:export` and `@icss-export` statements.
 | 
						|
 | 
						|
```js
 | 
						|
import postcss from "postcss";
 | 
						|
import { extractICSS } from "icss-utils";
 | 
						|
 | 
						|
const css = postcss.parse(`
 | 
						|
  :import(colors) {
 | 
						|
    a: b;
 | 
						|
  }
 | 
						|
  :export {
 | 
						|
    c: d;
 | 
						|
  }
 | 
						|
`);
 | 
						|
 | 
						|
extractICSS(css);
 | 
						|
/*
 | 
						|
  {
 | 
						|
    icssImports: {
 | 
						|
      colors: {
 | 
						|
        a: 'b'
 | 
						|
      }
 | 
						|
    },
 | 
						|
    icssExports: {
 | 
						|
      c: 'd'
 | 
						|
    }
 | 
						|
  }
 | 
						|
*/
 | 
						|
```
 | 
						|
 | 
						|
By default both the pseudo and at-rule form of the import and export statements
 | 
						|
will be removed. Pass the `mode` option to limit to only one type.
 | 
						|
 | 
						|
## createICSSRules(icssImports, icssExports, mode = 'rule')
 | 
						|
 | 
						|
Converts icss imports and exports definitions to postcss ast
 | 
						|
 | 
						|
```js
 | 
						|
createICSSRules(
 | 
						|
  {
 | 
						|
    colors: {
 | 
						|
      a: "b",
 | 
						|
    },
 | 
						|
  },
 | 
						|
  {
 | 
						|
    c: "d",
 | 
						|
  },
 | 
						|
  // Need pass `rule` and `decl` from postcss
 | 
						|
  // Please look at `Step 4` https://evilmartians.com/chronicles/postcss-8-plugin-migration
 | 
						|
  postcss
 | 
						|
);
 | 
						|
```
 | 
						|
 | 
						|
By default it will create pseudo selector rules (`:import` and `:export`). Pass
 | 
						|
`at-rule` for `mode` to instead generate `@icss-import` and `@icss-export`, which
 | 
						|
may be more resilient to post processing by other tools.
 | 
						|
 | 
						|
## License
 | 
						|
 | 
						|
ISC
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
Glen Maddern, Bogdan Chadkin and Evilebottnawi 2015-present.
 |