UNPKG

2.37 kBJavaScriptView Raw
1/*
2 MIT License http://www.opensource.org/licenses/mit-license.php
3 Author Tobias Koppers @sokra
4*/
5"use strict";
6
7const DelegatedModule = require("./DelegatedModule");
8
9// options.source
10// options.type
11// options.context
12// options.scope
13// options.content
14class DelegatedModuleFactoryPlugin {
15 constructor(options) {
16 this.options = options;
17 options.type = options.type || "require";
18 options.extensions = options.extensions || [
19 "",
20 ".wasm",
21 ".mjs",
22 ".js",
23 ".json"
24 ];
25 }
26
27 apply(normalModuleFactory) {
28 const scope = this.options.scope;
29 if (scope) {
30 normalModuleFactory.hooks.factory.tap(
31 "DelegatedModuleFactoryPlugin",
32 factory => (data, callback) => {
33 const dependency = data.dependencies[0];
34 const request = dependency.request;
35 if (request && request.indexOf(scope + "/") === 0) {
36 const innerRequest = "." + request.substr(scope.length);
37 let resolved;
38 if (innerRequest in this.options.content) {
39 resolved = this.options.content[innerRequest];
40 return callback(
41 null,
42 new DelegatedModule(
43 this.options.source,
44 resolved,
45 this.options.type,
46 innerRequest,
47 request
48 )
49 );
50 }
51 for (let i = 0; i < this.options.extensions.length; i++) {
52 const extension = this.options.extensions[i];
53 const requestPlusExt = innerRequest + extension;
54 if (requestPlusExt in this.options.content) {
55 resolved = this.options.content[requestPlusExt];
56 return callback(
57 null,
58 new DelegatedModule(
59 this.options.source,
60 resolved,
61 this.options.type,
62 requestPlusExt,
63 request + extension
64 )
65 );
66 }
67 }
68 }
69 return factory(data, callback);
70 }
71 );
72 } else {
73 normalModuleFactory.hooks.module.tap(
74 "DelegatedModuleFactoryPlugin",
75 module => {
76 if (module.libIdent) {
77 const request = module.libIdent(this.options);
78 if (request && request in this.options.content) {
79 const resolved = this.options.content[request];
80 return new DelegatedModule(
81 this.options.source,
82 resolved,
83 this.options.type,
84 request,
85 module
86 );
87 }
88 }
89 return module;
90 }
91 );
92 }
93 }
94}
95module.exports = DelegatedModuleFactoryPlugin;