You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.4 KiB
49 lines
1.4 KiB
4 weeks ago
|
const qs = require('querystring')
|
||
|
|
||
|
// these are built-in query parameters so should be ignored
|
||
|
// if the user happen to add them as attrs
|
||
|
const ignoreList = ['id', 'index', 'src', 'type']
|
||
|
|
||
|
// transform the attrs on a SFC block descriptor into a resourceQuery string
|
||
|
exports.attrsToQuery = (attrs, langFallback) => {
|
||
|
let query = ``
|
||
|
for (const name in attrs) {
|
||
|
const value = attrs[name]
|
||
|
if (!ignoreList.includes(name)) {
|
||
|
query += `&${qs.escape(name)}=${value ? qs.escape(value) : ``}`
|
||
|
}
|
||
|
}
|
||
|
if (langFallback && !(`lang` in attrs)) {
|
||
|
query += `&lang=${langFallback}`
|
||
|
}
|
||
|
return query
|
||
|
}
|
||
|
|
||
|
exports.genMatchResource = (context, resourcePath, resourceQuery, lang) => {
|
||
|
resourceQuery = resourceQuery || ''
|
||
|
|
||
|
const loaders = []
|
||
|
const parsedQuery = qs.parse(resourceQuery.slice(1))
|
||
|
|
||
|
// process non-external resources
|
||
|
if ('vue' in parsedQuery && !('external' in parsedQuery)) {
|
||
|
const currentRequest = context.loaders
|
||
|
.slice(context.loaderIndex)
|
||
|
.map((obj) => obj.request)
|
||
|
loaders.push(...currentRequest)
|
||
|
}
|
||
|
const loaderString = loaders.join('!')
|
||
|
|
||
|
return `${resourcePath}${lang ? `.${lang}` : ''}${resourceQuery}!=!${
|
||
|
loaderString ? `${loaderString}!` : ''
|
||
|
}${resourcePath}${resourceQuery}`
|
||
|
}
|
||
|
|
||
|
exports.testWebpack5 = (compiler) => {
|
||
|
if (!compiler) {
|
||
|
return false
|
||
|
}
|
||
|
const webpackVersion = compiler.webpack && compiler.webpack.version
|
||
|
return Boolean(webpackVersion && Number(webpackVersion.split('.')[0]) > 4)
|
||
|
}
|