index.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = loader;
  6. var _loaderUtils = require("loader-utils");
  7. var _schemaUtils = require("schema-utils");
  8. var _plugins = require("./plugins");
  9. var _utils = require("./utils");
  10. var _options = _interopRequireDefault(require("./options.json"));
  11. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  12. async function loader(content) {
  13. const rawOptions = (0, _loaderUtils.getOptions)(this);
  14. (0, _schemaUtils.validate)(_options.default, rawOptions, {
  15. name: 'HTML Loader',
  16. baseDataPath: 'options'
  17. });
  18. const options = (0, _utils.normalizeOptions)(rawOptions, this);
  19. if (options.preprocessor) {
  20. // eslint-disable-next-line no-param-reassign
  21. content = await options.preprocessor(content, this);
  22. }
  23. const plugins = [];
  24. const errors = [];
  25. const imports = [];
  26. const replacements = [];
  27. if (options.attributes) {
  28. plugins.push((0, _plugins.sourcePlugin)({
  29. urlHandler: url => (0, _loaderUtils.stringifyRequest)(this, url),
  30. attributes: options.attributes,
  31. resourcePath: this.resourcePath,
  32. imports,
  33. errors,
  34. replacements
  35. }));
  36. }
  37. if (options.minimize) {
  38. plugins.push((0, _plugins.minimizerPlugin)({
  39. minimize: options.minimize,
  40. errors
  41. }));
  42. }
  43. const {
  44. html
  45. } = (0, _utils.pluginRunner)(plugins).process(content);
  46. for (const error of errors) {
  47. this.emitError(error instanceof Error ? error : new Error(error));
  48. }
  49. const importCode = (0, _utils.getImportCode)(html, this, imports, options);
  50. const moduleCode = (0, _utils.getModuleCode)(html, replacements, options);
  51. const exportCode = (0, _utils.getExportCode)(html, options);
  52. return `${importCode}${moduleCode}${exportCode}`;
  53. }