Guest User

Untitled

a guest
Dec 11th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.01 KB | None | 0 0
  1. // wrap-transform.js
  2. const fs = require('fs');
  3. const parser = require('@babel/parser').parse;
  4. const traverse = require('@babel/traverse').default;
  5. const generate = require('@babel/generator').default;
  6. const prettier = require('prettier');
  7.  
  8. const file = fs.readFileSync('wrap-before.js').toString();
  9. const ast = parser(file, {sourceType: 'module', plugins: ['jsx']});
  10. let exportDefaultPath;
  11.  
  12. traverse(ast, {
  13. ExportDefaultDeclaration(path) {
  14. exportDefaultPath = path;
  15. },
  16. })
  17.  
  18. const declarationName = exportDefaultPath.node.declaration.name;
  19. const reducerNames = ['volleyball', 'soccer'].join(',');
  20.  
  21. exportDefaultPath.replaceWith(
  22. parser(
  23. `
  24. const mapStateToProps = ({${reducerNames}}) => ({${reducerNames}})
  25.  
  26. export default connect(mapStateToProps)(${declarationName})
  27. `,
  28. {sourceType: 'module'}
  29. )
  30. )
  31.  
  32. const newCode = generate(ast).code;
  33. const prettifiedCode = prettier.format(newCode, { parser: 'babylon' })
  34.  
  35. fs.writeFile('wrap-after.js', prettifiedCode, (err) => {
  36. if (err) throw new Error(err)
  37. });
Add Comment
Please, Sign In to add comment