ware-loader
Version:
A loader for webpack that let you change your source in loader.
63 lines (50 loc) • 1.27 kB
JavaScript
var loaderUtils = require('loader-utils')
var wrapped = require('wrapped')
var map = {
'\\b': '\b',
'\\f': '\f',
'\\n': '\n',
'\\r': '\r',
'\\t': '\t',
'\\v': '\v',
'\\"': '"',
"\\'": "'",
'\\\\': '\\'
}
module.exports = function(source) {
var ctx = this
ctx.cacheable && ctx.cacheable()
source = JSON.stringify(source)
.replace(/\u2028/g, '\\u2028')
.replace(/\u2029/g, '\\u2029')
.replace(/^"|"$/g, '')
.replace(/\\(.)/g, function(char) {
return map[char] || char
})
var options = loaderUtils.getOptions(ctx) || {}
var middleware = [].concat(options.middleware || [])
if (options.async) {
var callback = ctx.async()
var i = 0
var l = middleware.length
function next(err, source) {
if (err) return ctx.emitError(err)
if (i === l) {
if (!options.raw) {
source = 'module.exports = ' + JSON.stringify(source)
}
return callback(null, source)
}
wrapped(middleware[i++]).apply(ctx, [source, next])
}
next(null, source)
} else {
middleware.forEach(fn => {
source = fn.apply(ctx, [source])
})
if (!options.raw) {
source = 'module.exports = ' + JSON.stringify(source)
}
return source
}
}