| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 | 
							- const merge = require('merge-source-map')
 
- export interface StylePreprocessor {
 
-   render(
 
-     source: string,
 
-     map: any | null,
 
-     options: any
 
-   ): StylePreprocessorResults
 
- }
 
- export interface StylePreprocessorResults {
 
-   code: string
 
-   map?: any
 
-   errors: Array<Error>
 
- }
 
- // .scss/.sass processor
 
- const scss: StylePreprocessor = {
 
-   render(
 
-     source: string,
 
-     map: any | null,
 
-     options: any
 
-   ): StylePreprocessorResults {
 
-     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: string,
 
-     map: any | null,
 
-     options: any
 
-   ): StylePreprocessorResults {
 
-     return scss.render(
 
-       source,
 
-       map,
 
-       Object.assign({}, options, { indentedSyntax: true })
 
-     )
 
-   }
 
- }
 
- // .less
 
- const less = {
 
-   render(
 
-     source: string,
 
-     map: any | null,
 
-     options: any
 
-   ): StylePreprocessorResults {
 
-     const nodeLess = require('less')
 
-     let result: any
 
-     let error: Error | null = null
 
-     nodeLess.render(
 
-       source,
 
-       Object.assign({}, options, { syncImport: true }),
 
-       (err: Error | null, output: any) => {
 
-         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: string,
 
-     map: any | null,
 
-     options: any
 
-   ): StylePreprocessorResults {
 
-     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] }
 
-     }
 
-   }
 
- }
 
- export const processors: { [key: string]: StylePreprocessor } = {
 
-   less,
 
-   sass,
 
-   scss,
 
-   styl,
 
-   stylus: styl
 
- }
 
 
  |