68 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const createImports = (imports, postcss, mode = "rule") => {
 | |
|   return Object.keys(imports).map((path) => {
 | |
|     const aliases = imports[path];
 | |
|     const declarations = Object.keys(aliases).map((key) =>
 | |
|       postcss.decl({
 | |
|         prop: key,
 | |
|         value: aliases[key],
 | |
|         raws: { before: "\n  " },
 | |
|       })
 | |
|     );
 | |
| 
 | |
|     const hasDeclarations = declarations.length > 0;
 | |
| 
 | |
|     const rule =
 | |
|       mode === "rule"
 | |
|         ? postcss.rule({
 | |
|             selector: `:import('${path}')`,
 | |
|             raws: { after: hasDeclarations ? "\n" : "" },
 | |
|           })
 | |
|         : postcss.atRule({
 | |
|             name: "icss-import",
 | |
|             params: `'${path}'`,
 | |
|             raws: { after: hasDeclarations ? "\n" : "" },
 | |
|           });
 | |
| 
 | |
|     if (hasDeclarations) {
 | |
|       rule.append(declarations);
 | |
|     }
 | |
| 
 | |
|     return rule;
 | |
|   });
 | |
| };
 | |
| 
 | |
| const createExports = (exports, postcss, mode = "rule") => {
 | |
|   const declarations = Object.keys(exports).map((key) =>
 | |
|     postcss.decl({
 | |
|       prop: key,
 | |
|       value: exports[key],
 | |
|       raws: { before: "\n  " },
 | |
|     })
 | |
|   );
 | |
| 
 | |
|   if (declarations.length === 0) {
 | |
|     return [];
 | |
|   }
 | |
|   const rule =
 | |
|     mode === "rule"
 | |
|       ? postcss.rule({
 | |
|           selector: `:export`,
 | |
|           raws: { after: "\n" },
 | |
|         })
 | |
|       : postcss.atRule({
 | |
|           name: "icss-export",
 | |
|           raws: { after: "\n" },
 | |
|         });
 | |
| 
 | |
|   rule.append(declarations);
 | |
| 
 | |
|   return [rule];
 | |
| };
 | |
| 
 | |
| const createICSSRules = (imports, exports, postcss, mode) => [
 | |
|   ...createImports(imports, postcss, mode),
 | |
|   ...createExports(exports, postcss, mode),
 | |
| ];
 | |
| 
 | |
| module.exports = createICSSRules;
 |