customBlocks.js 930 B

12345678910111213141516171819202122232425262728293031
  1. const qs = require('querystring')
  2. const { attrsToQuery } = require('./utils')
  3. module.exports = function genCustomBlocksCode(
  4. blocks,
  5. resourcePath,
  6. resourceQuery,
  7. stringifyRequest
  8. ) {
  9. return (
  10. `\n/* custom blocks */\n` +
  11. blocks
  12. .map((block, i) => {
  13. const src = block.attrs.src || resourcePath
  14. const attrsQuery = attrsToQuery(block.attrs)
  15. const issuerQuery = block.attrs.src
  16. ? `&issuerPath=${qs.escape(resourcePath)}`
  17. : ''
  18. const inheritQuery = resourceQuery ? `&${resourceQuery.slice(1)}` : ''
  19. const query = `?vue&type=custom&index=${i}&blockType=${qs.escape(
  20. block.type
  21. )}${issuerQuery}${attrsQuery}${inheritQuery}`
  22. return (
  23. `import block${i} from ${stringifyRequest(src + query)}\n` +
  24. `if (typeof block${i} === 'function') block${i}(component)`
  25. )
  26. })
  27. .join(`\n`) +
  28. `\n`
  29. )
  30. }