utils.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. const qs = require('querystring')
  2. // these are built-in query parameters so should be ignored
  3. // if the user happen to add them as attrs
  4. const ignoreList = ['id', 'index', 'src', 'type']
  5. // transform the attrs on a SFC block descriptor into a resourceQuery string
  6. exports.attrsToQuery = (attrs, langFallback) => {
  7. let query = ``
  8. for (const name in attrs) {
  9. const value = attrs[name]
  10. if (!ignoreList.includes(name)) {
  11. query += `&${qs.escape(name)}=${value ? qs.escape(value) : ``}`
  12. }
  13. }
  14. if (langFallback && !(`lang` in attrs)) {
  15. query += `&lang=${langFallback}`
  16. }
  17. return query
  18. }
  19. exports.genMatchResource = (context, resourcePath, resourceQuery, lang) => {
  20. resourceQuery = resourceQuery || ''
  21. const loaders = []
  22. const parsedQuery = qs.parse(resourceQuery.slice(1))
  23. // process non-external resources
  24. if ('vue' in parsedQuery && !('external' in parsedQuery)) {
  25. const currentRequest = context.loaders
  26. .slice(context.loaderIndex)
  27. .map((obj) => obj.request)
  28. loaders.push(...currentRequest)
  29. }
  30. const loaderString = loaders.join('!')
  31. return `${resourcePath}${lang ? `.${lang}` : ''}${resourceQuery}!=!${
  32. loaderString ? `${loaderString}!` : ''
  33. }${resourcePath}${resourceQuery}`
  34. }
  35. exports.testWebpack5 = (compiler) => {
  36. if (!compiler) {
  37. return false
  38. }
  39. const webpackVersion = compiler.webpack && compiler.webpack.version
  40. return Boolean(webpackVersion && Number(webpackVersion.split('.')[0]) > 4)
  41. }