AsyncWebAssemblyGenerator.js 2.4 KB

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