transform.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. const babel = require("@babel/core");
  2. const {
  3. promisify
  4. } = require("util");
  5. const LoaderError = require("./Error");
  6. const transform = promisify(babel.transform);
  7. module.exports = async function (source, options) {
  8. let result;
  9. try {
  10. result = await transform(source, options);
  11. } catch (err) {
  12. throw err.message && err.codeFrame ? new LoaderError(err) : err;
  13. }
  14. if (!result) return null;
  15. // We don't return the full result here because some entries are not
  16. // really serializable. For a full list of properties see here:
  17. // https://github.com/babel/babel/blob/main/packages/babel-core/src/transformation/index.js
  18. // For discussion on this topic see here:
  19. // https://github.com/babel/babel-loader/pull/629
  20. const {
  21. ast,
  22. code,
  23. map,
  24. metadata,
  25. sourceType,
  26. externalDependencies
  27. } = result;
  28. if (map && (!map.sourcesContent || !map.sourcesContent.length)) {
  29. map.sourcesContent = [source];
  30. }
  31. return {
  32. ast,
  33. code,
  34. map,
  35. metadata,
  36. sourceType,
  37. // Convert it from a Set to an Array to make it JSON-serializable.
  38. externalDependencies: Array.from(externalDependencies || [])
  39. };
  40. };
  41. module.exports.version = babel.version;