index.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.raw = undefined;
  6. exports.default = loader;
  7. var _loaderUtils = require('loader-utils');
  8. var _schemaUtils = require('schema-utils');
  9. var _schemaUtils2 = _interopRequireDefault(_schemaUtils);
  10. var _mime = require('mime');
  11. var _mime2 = _interopRequireDefault(_mime);
  12. var _options = require('./options.json');
  13. var _options2 = _interopRequireDefault(_options);
  14. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  15. // Loader Mode
  16. /* eslint-disable
  17. global-require,
  18. no-param-reassign,
  19. prefer-destructuring,
  20. import/no-dynamic-require,
  21. */
  22. const raw = exports.raw = true;
  23. function loader(src) {
  24. // Loader Options
  25. const options = (0, _loaderUtils.getOptions)(this) || {};
  26. (0, _schemaUtils2.default)(_options2.default, options, 'URL Loader');
  27. const file = this.resourcePath;
  28. // Set limit for resource inlining (file size)
  29. let limit = options.limit;
  30. if (limit) {
  31. limit = parseInt(limit, 10);
  32. }
  33. // Get MIME type
  34. const mimetype = options.mimetype || _mime2.default.getType(file);
  35. // No limit or within the specified limit
  36. if (!limit || src.length < limit) {
  37. if (typeof src === 'string') {
  38. src = Buffer.from(src);
  39. }
  40. return `module.exports = ${JSON.stringify(`data:${mimetype || ''};base64,${src.toString('base64')}`)}`;
  41. }
  42. const fallback = require(options.fallback ? options.fallback : 'file-loader');
  43. return fallback.call(this, src);
  44. }