You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

61 lines
1.9 KiB

  1. "use strict";
  2. exports.__esModule = true;
  3. exports.default = void 0;
  4. var _loaderUtils = require("loader-utils");
  5. var _core = require("@babel/core");
  6. var _core2 = _interopRequireDefault(require("@svgr/core"));
  7. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  8. function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
  9. function svgrLoader(source) {
  10. const callback = this.async();
  11. const _ref = (0, _loaderUtils.getOptions)(this) || {},
  12. {
  13. babel = true
  14. } = _ref,
  15. options = _objectWithoutPropertiesLoose(_ref, ["babel"]);
  16. const readSvg = () => new Promise((resolve, reject) => {
  17. this.fs.readFile(this.resourcePath, (err, result) => {
  18. if (err) reject(err);
  19. resolve(result);
  20. });
  21. });
  22. const exportMatches = source.toString('utf-8').match(/^module.exports\s*=\s*(.*)/);
  23. const previousExport = exportMatches ? exportMatches[1] : null;
  24. const pBabelTransform = async jsCode => new Promise((resolve, reject) => {
  25. (0, _core.transform)(jsCode, {
  26. babelrc: false,
  27. presets: ['@babel/preset-react', ['@babel/preset-env', {
  28. modules: false
  29. }]],
  30. plugins: ['@babel/plugin-transform-react-constant-elements']
  31. }, (err, result) => {
  32. if (err) reject(err);else resolve(result.code);
  33. });
  34. });
  35. const tranformSvg = svg => (0, _core2.default)(svg, options, {
  36. webpack: {
  37. previousExport
  38. }
  39. }).then(jsCode => babel ? pBabelTransform(jsCode) : jsCode).then(result => callback(null, result)).catch(err => callback(err));
  40. if (exportMatches) {
  41. readSvg().then(tranformSvg);
  42. } else {
  43. tranformSvg(source);
  44. }
  45. }
  46. var _default = svgrLoader;
  47. exports.default = _default;