AsyncWebAssemblyGenerator.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const { RawSource } = require("webpack-sources");
  7. const Generator = require("../Generator");
  8. const { WEBASSEMBLY_TYPES } = require("../ModuleSourceTypeConstants");
  9. /** @import { Source } from "webpack-sources" */
  10. /** @import { GenerateContext } from "../Generator" */
  11. /** @import { SourceType, SourceTypes } from "../Module" */
  12. /** @import NormalModule from "../NormalModule" */
  13. /**
  14. * Represents the async web assembly generator runtime component.
  15. * @typedef {object} AsyncWebAssemblyGeneratorOptions
  16. * @property {boolean=} mangleImports mangle imports
  17. */
  18. class AsyncWebAssemblyGenerator extends Generator {
  19. /**
  20. * Creates an instance of AsyncWebAssemblyGenerator.
  21. * @param {AsyncWebAssemblyGeneratorOptions} options options
  22. */
  23. constructor(options) {
  24. super();
  25. /** @type {AsyncWebAssemblyGeneratorOptions} */
  26. this.options = options;
  27. }
  28. /**
  29. * Returns the source types available for this module.
  30. * @param {NormalModule} module fresh module
  31. * @returns {SourceTypes} available types (do not mutate)
  32. */
  33. getTypes(module) {
  34. return WEBASSEMBLY_TYPES;
  35. }
  36. /**
  37. * Returns the estimated size for the requested source type.
  38. * @param {NormalModule} module the module
  39. * @param {SourceType=} type source type
  40. * @returns {number} estimate size of the module
  41. */
  42. getSize(module, type) {
  43. const originalSource = module.originalSource();
  44. if (!originalSource) {
  45. return 0;
  46. }
  47. return originalSource.size();
  48. }
  49. /**
  50. * Generates generated code for this runtime module.
  51. * @param {NormalModule} module module for which the code should be generated
  52. * @param {GenerateContext} generateContext context for generate
  53. * @returns {Source | null} generated code
  54. */
  55. generate(module, generateContext) {
  56. return /** @type {Source} */ (module.originalSource());
  57. }
  58. /**
  59. * Generates fallback output for the provided error condition.
  60. * @param {Error} error the error
  61. * @param {NormalModule} module module for which the code should be generated
  62. * @param {GenerateContext} generateContext context for generate
  63. * @returns {Source | null} generated code
  64. */
  65. generateError(error, module, generateContext) {
  66. return new RawSource(error.message);
  67. }
  68. }
  69. module.exports = AsyncWebAssemblyGenerator;