blob: fbec04ec119c9870c90a9b501206f82a486521bc [file] [log] [blame]
import loaderUtils from 'loader-utils'
import {
parseScript,
parseStyle,
parseTemplate,
parseWeexFile
} from './parser'
import * as config from './config'
import * as legacy from './legacy'
function partedLoader (type, loader, params, source) {
let promise
switch (type) {
case 'js':
case 'script':
const transformerVersion = config.transformerVersion
promise = parseScript(loader, params, source,
{ config: JSON.stringify({ transformerVersion }) })
break
case 'css':
case 'style':
promise = parseStyle(loader, params, source)
break
case 'html':
case 'tpl':
case 'template':
promise = parseTemplate(loader, params, source)
break
case 'we':
default:
promise = parseWeexFile(loader, params, source)
break
}
return promise
}
function loader (source) {
this.cacheable && this.cacheable()
const callback = this.async()
const params = {
loaderQuery: loaderUtils.parseQuery(this.query),
resourceQuery: loaderUtils.parseQuery(this.resourceQuery),
resourcePath: this.resourcePath
}
const type = params.loaderQuery.type || 'we'
const promise = partedLoader(type, this, params, source)
promise.then(result => {
if (type === 'style' || type === 'css' ||
type === 'html' || type === 'tpl' || type === 'template') {
result = 'module.exports=' + result
}
callback(null, result)
}).catch(err => {
this.emitError(err.toString())
callback(err.toString(), '')
})
}
loader.setLogLevel = level => {
config.logLevel = level
}
for (const key in legacy) {
loader[key] = legacy[key]
}
module.exports = loader