aboutsummaryrefslogtreecommitdiff
path: root/node_modules/@vue/component-compiler-utils/lib/styleProcessors/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@vue/component-compiler-utils/lib/styleProcessors/index.ts')
-rw-r--r--node_modules/@vue/component-compiler-utils/lib/styleProcessors/index.ts133
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
+}