DelegatedModule.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const Module = require("./Module");
  7. const OriginalSource = require("webpack-sources").OriginalSource;
  8. const RawSource = require("webpack-sources").RawSource;
  9. const WebpackMissingModule = require("./dependencies/WebpackMissingModule");
  10. const DelegatedSourceDependency = require("./dependencies/DelegatedSourceDependency");
  11. class DelegatedModule extends Module {
  12. constructor(sourceRequest, data, type, userRequest) {
  13. super();
  14. this.sourceRequest = sourceRequest;
  15. this.request = data.id;
  16. this.meta = data.meta;
  17. this.type = type;
  18. this.userRequest = userRequest;
  19. this.built = false;
  20. this.delegated = true;
  21. this.delegateData = data;
  22. }
  23. identifier() {
  24. return `delegated ${JSON.stringify(this.request)} from ${this.sourceRequest}`;
  25. }
  26. readableIdentifier() {
  27. return `delegated ${this.userRequest} from ${this.sourceRequest}`;
  28. }
  29. needRebuild() {
  30. return false;
  31. }
  32. build(options, compilation, resolver, fs, callback) {
  33. this.built = true;
  34. this.builtTime = Date.now();
  35. this.usedExports = true;
  36. this.providedExports = this.delegateData.exports || true;
  37. this.dependencies.length = 0;
  38. this.addDependency(new DelegatedSourceDependency(this.sourceRequest));
  39. callback();
  40. }
  41. unbuild() {
  42. this.built = false;
  43. super.unbuild();
  44. }
  45. source() {
  46. const sourceModule = this.dependencies[0].module;
  47. let str;
  48. if(!sourceModule) {
  49. str = WebpackMissingModule.moduleCode(this.sourceRequest);
  50. } else {
  51. str = `module.exports = (__webpack_require__(${sourceModule.id}))`;
  52. switch(this.type) {
  53. case "require":
  54. str += `(${JSON.stringify(this.request)})`;
  55. break;
  56. case "object":
  57. str += `[${JSON.stringify(this.request)}]`;
  58. break;
  59. }
  60. str += ";";
  61. }
  62. if(this.useSourceMap) {
  63. return new OriginalSource(str, this.identifier());
  64. } else {
  65. return new RawSource(str);
  66. }
  67. }
  68. size() {
  69. return 42;
  70. }
  71. }
  72. module.exports = DelegatedModule;