UNPKG

1.81 kBJavaScriptView Raw
1const loaderUtils = require('loader-utils')
2const mime = require('mime')
3const getOptions = loaderUtils.getOptions
4const parseQuery = loaderUtils.parseQuery
5
6function isStyle (request) {
7 let elements = request.replace(/^-?!+/, '').replace(/!!+/g, '!').split('!')
8 elements.pop()
9 for (let i = 0; i < elements.length; i++) {
10 let element = elements[i]
11 let queryString = '?'
12 let loaderString = element
13 let idx = element.indexOf('?')
14 if (idx >= 0) {
15 queryString = element.substr(idx)
16 loaderString = element.substr(0, idx)
17 }
18 if (/css-loader/.test(loaderString)) {
19 return true
20 }
21 if (/content-loader/.test(loaderString)) {
22 let query = parseQuery(queryString)
23 if (query.type === 'styles') {
24 return true
25 }
26 }
27 }
28 return false
29}
30
31module.exports = function (src) {
32 let transBase64 = false
33 const options = getOptions(this) || {}
34
35 const filePath = this.resourcePath
36 const mimetype = options.mimetype || mime.getType(filePath)
37 const issuer = this._module.issuer
38
39 if (issuer && issuer.request && isStyle(issuer.request)) {
40 if (options.publicPath) {
41 const limit = options.limit
42 if (!limit || src.length < limit) {
43 transBase64 = true
44 }
45 const queryOption = parseQuery(this.resourceQuery || '?')
46 if (queryOption.fallback) {
47 transBase64 = false
48 }
49 } else {
50 transBase64 = true
51 }
52 }
53
54 if (transBase64) {
55 if (typeof src === 'string') {
56 src = Buffer.from(src)
57 }
58 return `module.exports = ${JSON.stringify(
59 `data:${mimetype || ''};base64,${src.toString('base64')}`
60 )}`
61 } else {
62 const fallback = require(options.fallback ? options.fallback : './file-loader')
63 return fallback.call(this, src)
64 }
65}
66
67module.exports.raw = true