| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 | const qs = require('querystring')// these are built-in query parameters so should be ignored// if the user happen to add them as attrsconst ignoreList = ['id', 'index', 'src', 'type']// transform the attrs on a SFC block descriptor into a resourceQuery stringexports.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)}
 |