Blame view

node_modules/node-sass/lib/render.js 2.93 KB
aaac7fed   liuqimichale   add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
  /*!
   * node-sass: lib/render.js
   */
  
  var chalk = require('chalk'),
    fs = require('fs'),
    mkdirp = require('mkdirp'),
    path = require('path'),
    sass = require('./');
  
  /**
   * Render
   *
   * @param {Object} options
   * @param {Object} emitter
   * @api public
   */
  
  module.exports = function(options, emitter) {
    var renderOptions = {
      includePaths: options.includePath,
      omitSourceMapUrl: options.omitSourceMapUrl,
      indentedSyntax: options.indentedSyntax,
      outFile: options.dest,
      outputStyle: options.outputStyle,
      precision: options.precision,
      sourceComments: options.sourceComments,
      sourceMapEmbed: options.sourceMapEmbed,
      sourceMapContents: options.sourceMapContents,
      sourceMap: options.sourceMap,
      sourceMapRoot: options.sourceMapRoot,
      importer: options.importer,
      functions: options.functions,
      indentWidth: options.indentWidth,
      indentType: options.indentType,
      linefeed: options.linefeed
    };
  
    if (options.data) {
      renderOptions.data = options.data;
    } else if (options.src) {
      renderOptions.file = options.src;
    }
  
    var sourceMap = options.sourceMap;
    var destination = options.dest;
    var stdin = options.stdin;
  
    var success = function(result) {
      var todo = 1;
      var done = function() {
        if (--todo <= 0) {
          emitter.emit('done');
        }
      };
  
      if (!destination || stdin) {
        emitter.emit('log', result.css.toString());
  
        if (sourceMap && !options.sourceMapEmbed) {
          emitter.emit('log', result.map.toString());
        }
  
        return done();
      }
  
      emitter.emit('info', chalk.green('Rendering Complete, saving .css file...'));
  
      mkdirp(path.dirname(destination), function(err) {
        if (err) {
          return emitter.emit('error', chalk.red(err));
        }
  
        fs.writeFile(destination, result.css.toString(), function(err) {
          if (err) {
            return emitter.emit('error', chalk.red(err));
          }
  
          emitter.emit('info', chalk.green('Wrote CSS to ' + destination));
          emitter.emit('write', err, destination, result.css.toString());
          done();
        });
      });
  
      if (sourceMap) {
        todo++;
  
        mkdirp(path.dirname(sourceMap), function(err) {
          if (err) {
            return emitter.emit('error', chalk.red(err));
          }
          fs.writeFile(sourceMap, result.map, function(err) {
            if (err) {
              return emitter.emit('error', chalk.red('Error' + err));
            }
  
            emitter.emit('info', chalk.green('Wrote Source Map to ' + sourceMap));
            emitter.emit('write-source-map', err, sourceMap, result.map);
            done();
          });
        });
      }
  
      emitter.emit('render', result.css.toString());
    };
  
    var error = function(error) {
      emitter.emit('error', chalk.red(JSON.stringify(error, null, 2)));
    };
  
    var renderCallback = function(err, result) {
      if (err) {
        error(err);
      }
      else {
        success(result);
      }
    };
  
    sass.render(renderOptions, renderCallback);
  };