2016-11-16 07:04:57 +00:00
|
|
|
import loaderUtils from 'loader-utils'
|
2016-10-15 16:17:27 +00:00
|
|
|
|
2016-12-02 01:43:38 +00:00
|
|
|
module.exports = function (content, sourceMap) {
|
2016-10-15 16:17:27 +00:00
|
|
|
this.cacheable()
|
2017-12-05 23:46:06 +00:00
|
|
|
const callback = this.async()
|
|
|
|
const resourcePath = this.resourcePath
|
2016-10-15 16:17:27 +00:00
|
|
|
|
2017-02-22 18:08:49 +00:00
|
|
|
const query = loaderUtils.getOptions(this)
|
2017-12-05 23:46:06 +00:00
|
|
|
|
|
|
|
// Allows you to do checks on the file name. For example it's used to check if there's both a .js and .jsx file.
|
|
|
|
if (query.validateFileName) {
|
|
|
|
try {
|
|
|
|
query.validateFileName(resourcePath)
|
|
|
|
} catch (err) {
|
|
|
|
callback(err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-10-15 16:17:27 +00:00
|
|
|
const name = query.name || '[hash].[ext]'
|
|
|
|
const context = query.context || this.options.context
|
|
|
|
const regExp = query.regExp
|
|
|
|
const opts = { context, content, regExp }
|
2017-12-05 23:46:06 +00:00
|
|
|
const interpolateName = query.interpolateName || ((name) => name)
|
|
|
|
const interpolatedName = interpolateName(loaderUtils.interpolateName(this, name, opts), {name, opts})
|
2017-01-31 06:31:27 +00:00
|
|
|
const emit = (code, map) => {
|
|
|
|
this.emitFile(interpolatedName, code, map)
|
2017-12-05 23:46:06 +00:00
|
|
|
callback(null, code, map)
|
2017-01-31 06:31:27 +00:00
|
|
|
}
|
2016-10-15 16:17:27 +00:00
|
|
|
|
2017-01-31 06:31:27 +00:00
|
|
|
if (query.transform) {
|
2017-02-01 06:17:15 +00:00
|
|
|
const transformed = query.transform({ content, sourceMap, interpolatedName })
|
2017-01-31 06:31:27 +00:00
|
|
|
return emit(transformed.content, transformed.sourceMap)
|
|
|
|
}
|
|
|
|
|
|
|
|
return emit(content, sourceMap)
|
2016-10-15 16:17:27 +00:00
|
|
|
}
|