ImportContextDependency.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const makeSerializable = require("../util/makeSerializable");
  7. const ContextDependency = require("./ContextDependency");
  8. const ContextDependencyTemplateAsRequireCall = require("./ContextDependencyTemplateAsRequireCall");
  9. /** @typedef {import("../javascript/JavascriptParser").Range} Range */
  10. /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
  11. /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
  12. /** @typedef {import("./ContextDependency").ContextDependencyOptions} ContextDependencyOptions */
  13. class ImportContextDependency extends ContextDependency {
  14. /**
  15. * Creates an instance of ImportContextDependency.
  16. * @param {ContextDependencyOptions} options options
  17. * @param {Range} range range
  18. * @param {Range} valueRange value range
  19. */
  20. constructor(options, range, valueRange) {
  21. super(options);
  22. this.range = range;
  23. this.valueRange = valueRange;
  24. }
  25. get type() {
  26. return `import() context ${this.options.mode}`;
  27. }
  28. get category() {
  29. return "esm";
  30. }
  31. /**
  32. * Returns an identifier to merge equal requests.
  33. * @returns {string | null} an identifier to merge equal requests
  34. */
  35. getResourceIdentifier() {
  36. let str = super.getResourceIdentifier();
  37. if (this.options.attributes) {
  38. str += `|attributes${JSON.stringify(this.options.attributes)}`;
  39. }
  40. return str;
  41. }
  42. /**
  43. * Serializes this instance into the provided serializer context.
  44. * @param {ObjectSerializerContext} context context
  45. */
  46. serialize(context) {
  47. const { write } = context;
  48. write(this.valueRange);
  49. super.serialize(context);
  50. }
  51. /**
  52. * Restores this instance from the provided deserializer context.
  53. * @param {ObjectDeserializerContext} context context
  54. */
  55. deserialize(context) {
  56. const { read } = context;
  57. this.valueRange = read();
  58. super.deserialize(context);
  59. }
  60. }
  61. makeSerializable(
  62. ImportContextDependency,
  63. "webpack/lib/dependencies/ImportContextDependency"
  64. );
  65. ImportContextDependency.Template = ContextDependencyTemplateAsRequireCall;
  66. module.exports = ImportContextDependency;