diff options
| author | ruki <waruqi@gmail.com> | 2018-11-08 00:38:48 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2018-11-07 21:53:09 +0800 |
| commit | 26105034da4fcce7ac883c899d781f016559310d (patch) | |
| tree | c459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/@vue/component-compiler-utils/lib/styleProcessors | |
| parent | 2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff) | |
| download | xmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip | |
switch to vuepress
Diffstat (limited to 'node_modules/@vue/component-compiler-utils/lib/styleProcessors')
| -rw-r--r-- | node_modules/@vue/component-compiler-utils/lib/styleProcessors/index.ts | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/node_modules/@vue/component-compiler-utils/lib/styleProcessors/index.ts b/node_modules/@vue/component-compiler-utils/lib/styleProcessors/index.ts new file mode 100644 index 00000000..b458c52e --- /dev/null +++ b/node_modules/@vue/component-compiler-utils/lib/styleProcessors/index.ts @@ -0,0 +1,133 @@ +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('node-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 +} |
