89 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| Object.defineProperty(exports, "__esModule", { value: true });
 | |
| exports.processors = void 0;
 | |
| const merge = require('merge-source-map');
 | |
| // .scss/.sass processor
 | |
| const scss = {
 | |
|     render(source, map, options) {
 | |
|         const nodeSass = require('sass');
 | |
|         const finalOptions = Object.assign({}, options, {
 | |
|             data: source,
 | |
|             file: options.filename,
 | |
|             outFile: options.filename,
 | |
|             sourceMap: !!map
 | |
|         });
 | |
|         try {
 | |
|             const result = nodeSass.renderSync(finalOptions);
 | |
|             if (map) {
 | |
|                 return {
 | |
|                     code: result.css.toString(),
 | |
|                     map: merge(map, JSON.parse(result.map.toString())),
 | |
|                     errors: []
 | |
|                 };
 | |
|             }
 | |
|             return { code: result.css.toString(), errors: [] };
 | |
|         }
 | |
|         catch (e) {
 | |
|             return { code: '', errors: [e] };
 | |
|         }
 | |
|     }
 | |
| };
 | |
| const sass = {
 | |
|     render(source, map, options) {
 | |
|         return scss.render(source, map, Object.assign({}, options, { indentedSyntax: true }));
 | |
|     }
 | |
| };
 | |
| // .less
 | |
| const less = {
 | |
|     render(source, map, options) {
 | |
|         const nodeLess = require('less');
 | |
|         let result;
 | |
|         let error = null;
 | |
|         nodeLess.render(source, Object.assign({}, options, { syncImport: true }), (err, output) => {
 | |
|             error = err;
 | |
|             result = output;
 | |
|         });
 | |
|         if (error)
 | |
|             return { code: '', errors: [error] };
 | |
|         if (map) {
 | |
|             return {
 | |
|                 code: result.css.toString(),
 | |
|                 map: merge(map, result.map),
 | |
|                 errors: []
 | |
|             };
 | |
|         }
 | |
|         return { code: result.css.toString(), errors: [] };
 | |
|     }
 | |
| };
 | |
| // .styl
 | |
| const styl = {
 | |
|     render(source, map, options) {
 | |
|         const nodeStylus = require('stylus');
 | |
|         try {
 | |
|             const ref = nodeStylus(source);
 | |
|             Object.keys(options).forEach(key => ref.set(key, options[key]));
 | |
|             if (map)
 | |
|                 ref.set('sourcemap', { inline: false, comment: false });
 | |
|             const result = ref.render();
 | |
|             if (map) {
 | |
|                 return {
 | |
|                     code: result,
 | |
|                     map: merge(map, ref.sourcemap),
 | |
|                     errors: []
 | |
|                 };
 | |
|             }
 | |
|             return { code: result, errors: [] };
 | |
|         }
 | |
|         catch (e) {
 | |
|             return { code: '', errors: [e] };
 | |
|         }
 | |
|     }
 | |
| };
 | |
| exports.processors = {
 | |
|     less,
 | |
|     sass,
 | |
|     scss,
 | |
|     styl,
 | |
|     stylus: styl
 | |
| };
 | 
