werkzeug
Version:
compiles ts, coffee, sass/scss, less/ stylus and packs browser ready bundles
91 lines (66 loc) • 2.16 kB
text/coffeescript
Path = require 'path'
FSE = require 'fs-extra'
FS = require 'fs'
_ = require '../utils/pimped-lodash'
PH = require '../utils/path-helper'
IPC = require '../utils/ipc'
Log = require '../utils/log'
try
Sass = require 'node-sass'
catch e
console.log 'SAS require ERROR: ', e.toString(), e. stack
class SassCompiler
constructor: () ->
= false
= null
= null
= 0
= new IPC(process, @)
init: () ->
= PH.getIn , 'sass'
= PH.getOut , 'sass'
null
compile: (files) ->
= []
compiled = {}
for file in files
compiled[file.path] = true
file
globals = .sass.globals or []
for path in globals
path = Path.join , path
(path:path) if not compiled[path]
() if == 0
null
compileFile: (file) ->
path = file.path
options =
outputStyle: 'compressed'
sourceMap: true
if not /^_/.test Path.basename(path)
++
options.file = path
options.outFile = PH.outFromIn , 'sass', path, true
Sass.render options,
null
onResult: (error, result) =>
if error
.push
path: error.file or result?.stats?.entry or 'file missing'
line: error.line
col: error.column
error: error.message
else
path = result.stats.entry
out = PH.outFromIn , 'sass', path, true
map = out + '.map'
FSE.ensureFileSync out
FSE.ensureFileSync map
FS.writeFileSync out, result.css, 'utf8'
FS.writeFileSync map, result.map, 'utf8'
() if -- == 0
null
compiled: () ->
= true
.send 'compiled', 'sass',
module.exports = new SassCompiler()