webpack 3.8.0 → 3.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +716 -716
  3. package/buildin/.eslintrc +7 -7
  4. package/buildin/amd-define.js +3 -3
  5. package/buildin/amd-options.js +2 -2
  6. package/buildin/global.js +21 -21
  7. package/buildin/harmony-module.js +24 -24
  8. package/buildin/module.js +22 -22
  9. package/buildin/system.js +7 -7
  10. package/hot/.eslintrc +9 -9
  11. package/hot/dev-server.js +53 -53
  12. package/hot/emitter.js +2 -2
  13. package/hot/log-apply-result.js +38 -38
  14. package/hot/log.js +44 -44
  15. package/hot/only-dev-server.js +71 -71
  16. package/hot/poll.js +34 -34
  17. package/hot/signal.js +51 -51
  18. package/lib/APIPlugin.js +45 -45
  19. package/lib/AsyncDependenciesBlock.js +43 -43
  20. package/lib/AutomaticPrefetchPlugin.js +36 -36
  21. package/lib/BasicEvaluatedExpression.js +203 -203
  22. package/lib/CaseSensitiveModulesWarning.js +49 -49
  23. package/lib/ChunkRenderError.js +24 -24
  24. package/lib/ChunkTemplate.js +36 -36
  25. package/lib/CompatibilityPlugin.js +57 -57
  26. package/lib/Compiler.js +523 -523
  27. package/lib/ConstPlugin.js +60 -60
  28. package/lib/ContextModule.js +431 -431
  29. package/lib/ContextReplacementPlugin.js +111 -111
  30. package/lib/DefinePlugin.js +123 -123
  31. package/lib/DelegatedModule.js +98 -98
  32. package/lib/DelegatedModuleFactoryPlugin.js +59 -59
  33. package/lib/DelegatedPlugin.js +30 -30
  34. package/lib/DependenciesBlockVariable.js +51 -51
  35. package/lib/DllEntryPlugin.js +37 -37
  36. package/lib/DllModule.js +58 -58
  37. package/lib/DllModuleFactory.js +20 -20
  38. package/lib/DllPlugin.js +38 -38
  39. package/lib/DllReferencePlugin.js +62 -62
  40. package/lib/DynamicEntryPlugin.js +59 -59
  41. package/lib/EntryModuleNotFoundError.js +22 -22
  42. package/lib/EntryOptionPlugin.js +31 -31
  43. package/lib/EnvironmentPlugin.js +50 -50
  44. package/lib/ErrorHelpers.js +31 -31
  45. package/lib/EvalDevToolModulePlugin.js +22 -22
  46. package/lib/EvalDevToolModuleTemplatePlugin.js +33 -33
  47. package/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +75 -75
  48. package/lib/EvalSourceMapDevToolPlugin.js +32 -32
  49. package/lib/ExportPropertyMainTemplatePlugin.js +31 -31
  50. package/lib/ExtendedAPIPlugin.js +47 -47
  51. package/lib/ExternalModuleFactoryPlugin.js +91 -91
  52. package/lib/ExternalsPlugin.js +21 -21
  53. package/lib/FlagDependencyExportsPlugin.js +101 -101
  54. package/lib/FunctionModulePlugin.js +24 -24
  55. package/lib/HashedModuleIdsPlugin.js +42 -42
  56. package/lib/HotUpdateChunkTemplate.js +31 -31
  57. package/lib/IgnorePlugin.js +69 -69
  58. package/lib/JsonpExportMainTemplatePlugin.js +37 -37
  59. package/lib/JsonpHotUpdateChunkTemplatePlugin.js +27 -27
  60. package/lib/JsonpTemplatePlugin.js +21 -21
  61. package/lib/LibManifestPlugin.js +63 -63
  62. package/lib/LibraryTemplatePlugin.js +92 -92
  63. package/lib/LoaderOptionsPlugin.js +36 -36
  64. package/lib/LoaderTargetPlugin.js +19 -19
  65. package/lib/MemoryOutputFileSystem.js +5 -5
  66. package/lib/ModuleBuildError.js +42 -42
  67. package/lib/ModuleDependencyError.js +22 -22
  68. package/lib/ModuleDependencyWarning.js +22 -22
  69. package/lib/ModuleError.js +24 -24
  70. package/lib/ModuleFilenameHelpers.js +162 -162
  71. package/lib/ModuleNotFoundError.js +26 -26
  72. package/lib/ModuleReason.js +50 -50
  73. package/lib/ModuleTemplate.js +23 -23
  74. package/lib/ModuleWarning.js +24 -24
  75. package/lib/MovedToPluginWarningPlugin.js +21 -21
  76. package/lib/MultiCompiler.js +164 -164
  77. package/lib/MultiEntryPlugin.js +39 -39
  78. package/lib/MultiModuleFactory.js +19 -19
  79. package/lib/MultiStats.js +79 -79
  80. package/lib/MultiWatching.js +32 -32
  81. package/lib/NamedChunksPlugin.js +30 -30
  82. package/lib/NamedModulesPlugin.js +27 -27
  83. package/lib/NewWatchingPlugin.js +15 -15
  84. package/lib/NoEmitOnErrorsPlugin.js +22 -22
  85. package/lib/NoErrorsPlugin.js +29 -29
  86. package/lib/NodeStuffPlugin.js +97 -97
  87. package/lib/NormalModuleReplacementPlugin.js +45 -45
  88. package/lib/NullFactory.js +12 -12
  89. package/lib/OptionsApply.js +10 -10
  90. package/lib/ParserHelpers.js +85 -85
  91. package/lib/PrefetchPlugin.js +31 -31
  92. package/lib/ProgressPlugin.js +192 -192
  93. package/lib/ProvidePlugin.js +55 -55
  94. package/lib/RawModule.js +54 -54
  95. package/lib/RequestShortener.js +63 -63
  96. package/lib/RequireJsStuffPlugin.js +31 -31
  97. package/lib/RuleSet.js +444 -444
  98. package/lib/SetVarMainTemplatePlugin.js +41 -41
  99. package/lib/SingleEntryPlugin.js +35 -35
  100. package/lib/SizeFormatHelpers.js +18 -18
  101. package/lib/SourceMapDevToolModuleOptionsPlugin.js +37 -37
  102. package/lib/UnsupportedFeatureWarning.js +21 -21
  103. package/lib/UseStrictPlugin.js +34 -34
  104. package/lib/WarnCaseSensitiveModulesPlugin.js +31 -31
  105. package/lib/WatchIgnorePlugin.js +49 -49
  106. package/lib/WebpackError.js +11 -11
  107. package/lib/WebpackOptionsDefaulter.js +129 -129
  108. package/lib/WebpackOptionsValidationError.js +196 -196
  109. package/lib/compareLocations.js +36 -36
  110. package/lib/dependencies/AMDDefineDependency.js +142 -142
  111. package/lib/dependencies/AMDPlugin.js +119 -119
  112. package/lib/dependencies/AMDRequireDependenciesBlock.js +33 -33
  113. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +177 -177
  114. package/lib/dependencies/AMDRequireDependency.js +67 -67
  115. package/lib/dependencies/AMDRequireItemDependency.js +22 -22
  116. package/lib/dependencies/CommonJsRequireDependency.js +22 -22
  117. package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +89 -89
  118. package/lib/dependencies/ConstDependency.js +32 -32
  119. package/lib/dependencies/ContextDependencyHelpers.js +71 -71
  120. package/lib/dependencies/ContextElementDependency.js +21 -21
  121. package/lib/dependencies/CriticalDependencyWarning.js +20 -20
  122. package/lib/dependencies/DelegatedExportsDependency.js +33 -33
  123. package/lib/dependencies/DelegatedSourceDependency.js +18 -18
  124. package/lib/dependencies/DllEntryDependency.js +20 -20
  125. package/lib/dependencies/HarmonyCompatibilityDependency.js +30 -30
  126. package/lib/dependencies/HarmonyExportHeaderDependency.js +28 -28
  127. package/lib/dependencies/ImportDependenciesBlock.js +17 -17
  128. package/lib/dependencies/ImportEagerContextDependency.js +22 -22
  129. package/lib/dependencies/ImportLazyContextDependency.js +22 -22
  130. package/lib/dependencies/ImportLazyOnceContextDependency.js +22 -22
  131. package/lib/dependencies/ImportParserPlugin.js +89 -89
  132. package/lib/dependencies/ImportPlugin.js +60 -60
  133. package/lib/dependencies/ImportWeakContextDependency.js +22 -22
  134. package/lib/dependencies/LoaderDependency.js +18 -18
  135. package/lib/dependencies/LoaderPlugin.js +60 -60
  136. package/lib/dependencies/LocalModule.js +23 -23
  137. package/lib/dependencies/LocalModuleDependency.js +24 -24
  138. package/lib/dependencies/LocalModulesHelpers.js +46 -46
  139. package/lib/dependencies/ModuleDependency.js +23 -23
  140. package/lib/dependencies/ModuleHotAcceptDependency.js +23 -23
  141. package/lib/dependencies/ModuleHotDeclineDependency.js +23 -23
  142. package/lib/dependencies/MultiEntryDependency.js +20 -20
  143. package/lib/dependencies/NullDependency.js +24 -24
  144. package/lib/dependencies/PrefetchDependency.js +18 -18
  145. package/lib/dependencies/RequireContextDependency.js +26 -26
  146. package/lib/dependencies/RequireContextDependencyParserPlugin.js +50 -50
  147. package/lib/dependencies/RequireContextPlugin.js +96 -96
  148. package/lib/dependencies/RequireEnsureDependenciesBlock.js +22 -22
  149. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +102 -102
  150. package/lib/dependencies/RequireEnsureDependency.js +38 -38
  151. package/lib/dependencies/RequireEnsureItemDependency.js +21 -21
  152. package/lib/dependencies/RequireEnsurePlugin.js +40 -40
  153. package/lib/dependencies/RequireHeaderDependency.js +26 -26
  154. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +21 -21
  155. package/lib/dependencies/RequireIncludePlugin.js +33 -33
  156. package/lib/dependencies/RequireResolveDependency.js +22 -22
  157. package/lib/dependencies/RequireResolveDependencyParserPlugin.js +71 -71
  158. package/lib/dependencies/RequireResolveHeaderDependency.js +26 -26
  159. package/lib/dependencies/SingleEntryDependency.js +18 -18
  160. package/lib/dependencies/SystemPlugin.js +44 -44
  161. package/lib/dependencies/UnsupportedDependency.js +23 -23
  162. package/lib/dependencies/WebpackMissingModule.js +18 -18
  163. package/lib/dependencies/getFunctionExpression.js +44 -44
  164. package/lib/formatLocation.js +54 -54
  165. package/lib/node/NodeChunkTemplatePlugin.js +27 -27
  166. package/lib/node/NodeEnvironmentPlugin.js +25 -25
  167. package/lib/node/NodeHotUpdateChunkTemplatePlugin.js +27 -27
  168. package/lib/node/NodeMainTemplate.runtime.js +24 -24
  169. package/lib/node/NodeMainTemplateAsync.runtime.js +40 -40
  170. package/lib/node/NodeOutputFileSystem.js +22 -22
  171. package/lib/node/NodeSourcePlugin.js +88 -88
  172. package/lib/node/NodeTargetPlugin.js +15 -15
  173. package/lib/node/NodeTemplatePlugin.js +27 -27
  174. package/lib/node/NodeWatchFileSystem.js +72 -72
  175. package/lib/optimize/ChunkModuleIdRangePlugin.js +53 -53
  176. package/lib/optimize/DedupePlugin.js +15 -15
  177. package/lib/optimize/FlagIncludedChunksPlugin.js +35 -35
  178. package/lib/optimize/LimitChunkCountPlugin.js +59 -59
  179. package/lib/optimize/MinChunkSizePlugin.js +65 -65
  180. package/lib/optimize/RemoveEmptyChunksPlugin.js +21 -21
  181. package/lib/optimize/UglifyJsPlugin.js +9 -9
  182. package/lib/performance/AssetsOverSizeLimitWarning.js +23 -23
  183. package/lib/performance/EntrypointsOverSizeLimitWarning.js +28 -28
  184. package/lib/performance/NoAsyncChunksWarning.js +20 -20
  185. package/lib/performance/SizeLimitsPlugin.js +102 -102
  186. package/lib/prepareOptions.js +29 -29
  187. package/lib/removeAndDo.js +15 -15
  188. package/lib/util/Semaphore.js +32 -32
  189. package/lib/util/identifier.js +38 -38
  190. package/lib/validateSchema.js +66 -66
  191. package/lib/web/WebEnvironmentPlugin.js +18 -18
  192. package/lib/webworker/WebWorkerChunkTemplatePlugin.js +29 -29
  193. package/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js +28 -28
  194. package/lib/webworker/WebWorkerMainTemplate.runtime.js +58 -58
  195. package/lib/webworker/WebWorkerTemplatePlugin.js +20 -20
  196. package/package.json +1 -1
  197. package/schemas/ajv.absolutePath.js +29 -29
  198. package/schemas/webpackOptionsSchema.json +16 -0
@@ -1,111 +1,111 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- const path = require("path");
8
- const ContextElementDependency = require("./dependencies/ContextElementDependency");
9
-
10
- class ContextReplacementPlugin {
11
- constructor(resourceRegExp, newContentResource, newContentRecursive, newContentRegExp) {
12
- this.resourceRegExp = resourceRegExp;
13
-
14
- if(typeof newContentResource === "function") {
15
- this.newContentCallback = newContentResource;
16
- } else if(typeof newContentResource === "string" && typeof newContentRecursive === "object") {
17
- this.newContentResource = newContentResource;
18
- this.newContentCreateContextMap = (fs, callback) => {
19
- callback(null, newContentRecursive);
20
- };
21
- } else if(typeof newContentResource === "string" && typeof newContentRecursive === "function") {
22
- this.newContentResource = newContentResource;
23
- this.newContentCreateContextMap = newContentRecursive;
24
- } else {
25
- if(typeof newContentResource !== "string") {
26
- newContentRegExp = newContentRecursive;
27
- newContentRecursive = newContentResource;
28
- newContentResource = undefined;
29
- }
30
- if(typeof newContentRecursive !== "boolean") {
31
- newContentRegExp = newContentRecursive;
32
- newContentRecursive = undefined;
33
- }
34
- this.newContentResource = newContentResource;
35
- this.newContentRecursive = newContentRecursive;
36
- this.newContentRegExp = newContentRegExp;
37
- }
38
- }
39
-
40
- apply(compiler) {
41
- const resourceRegExp = this.resourceRegExp;
42
- const newContentCallback = this.newContentCallback;
43
- const newContentResource = this.newContentResource;
44
- const newContentRecursive = this.newContentRecursive;
45
- const newContentRegExp = this.newContentRegExp;
46
- const newContentCreateContextMap = this.newContentCreateContextMap;
47
-
48
- compiler.plugin("context-module-factory", (cmf) => {
49
- cmf.plugin("before-resolve", (result, callback) => {
50
- if(!result) return callback();
51
- if(resourceRegExp.test(result.request)) {
52
- if(typeof newContentResource !== "undefined")
53
- result.request = newContentResource;
54
- if(typeof newContentRecursive !== "undefined")
55
- result.recursive = newContentRecursive;
56
- if(typeof newContentRegExp !== "undefined")
57
- result.regExp = newContentRegExp;
58
- if(typeof newContentCallback === "function") {
59
- newContentCallback(result);
60
- } else {
61
- result.dependencies.forEach((d) => {
62
- if(d.critical)
63
- d.critical = false;
64
- });
65
- }
66
- }
67
- return callback(null, result);
68
- });
69
- cmf.plugin("after-resolve", (result, callback) => {
70
- if(!result) return callback();
71
- if(resourceRegExp.test(result.resource)) {
72
- if(typeof newContentResource !== "undefined")
73
- result.resource = path.resolve(result.resource, newContentResource);
74
- if(typeof newContentRecursive !== "undefined")
75
- result.recursive = newContentRecursive;
76
- if(typeof newContentRegExp !== "undefined")
77
- result.regExp = newContentRegExp;
78
- if(typeof newContentCreateContextMap === "function")
79
- result.resolveDependencies = createResolveDependenciesFromContextMap(newContentCreateContextMap);
80
- if(typeof newContentCallback === "function") {
81
- const origResource = result.resource;
82
- newContentCallback(result);
83
- if(result.resource !== origResource) {
84
- result.resource = path.resolve(origResource, result.resource);
85
- }
86
- } else {
87
- result.dependencies.forEach((d) => {
88
- if(d.critical)
89
- d.critical = false;
90
- });
91
- }
92
- }
93
- return callback(null, result);
94
- });
95
- });
96
- }
97
- }
98
-
99
- const createResolveDependenciesFromContextMap = (createContextMap) => {
100
- return function resolveDependenciesFromContextMap(fs, resource, recursive, regExp, callback) {
101
- createContextMap(fs, (err, map) => {
102
- if(err) return callback(err);
103
- const dependencies = Object.keys(map).map((key) => {
104
- return new ContextElementDependency(map[key], key);
105
- });
106
- callback(null, dependencies);
107
- });
108
- };
109
- };
110
-
111
- module.exports = ContextReplacementPlugin;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const path = require("path");
8
+ const ContextElementDependency = require("./dependencies/ContextElementDependency");
9
+
10
+ class ContextReplacementPlugin {
11
+ constructor(resourceRegExp, newContentResource, newContentRecursive, newContentRegExp) {
12
+ this.resourceRegExp = resourceRegExp;
13
+
14
+ if(typeof newContentResource === "function") {
15
+ this.newContentCallback = newContentResource;
16
+ } else if(typeof newContentResource === "string" && typeof newContentRecursive === "object") {
17
+ this.newContentResource = newContentResource;
18
+ this.newContentCreateContextMap = (fs, callback) => {
19
+ callback(null, newContentRecursive);
20
+ };
21
+ } else if(typeof newContentResource === "string" && typeof newContentRecursive === "function") {
22
+ this.newContentResource = newContentResource;
23
+ this.newContentCreateContextMap = newContentRecursive;
24
+ } else {
25
+ if(typeof newContentResource !== "string") {
26
+ newContentRegExp = newContentRecursive;
27
+ newContentRecursive = newContentResource;
28
+ newContentResource = undefined;
29
+ }
30
+ if(typeof newContentRecursive !== "boolean") {
31
+ newContentRegExp = newContentRecursive;
32
+ newContentRecursive = undefined;
33
+ }
34
+ this.newContentResource = newContentResource;
35
+ this.newContentRecursive = newContentRecursive;
36
+ this.newContentRegExp = newContentRegExp;
37
+ }
38
+ }
39
+
40
+ apply(compiler) {
41
+ const resourceRegExp = this.resourceRegExp;
42
+ const newContentCallback = this.newContentCallback;
43
+ const newContentResource = this.newContentResource;
44
+ const newContentRecursive = this.newContentRecursive;
45
+ const newContentRegExp = this.newContentRegExp;
46
+ const newContentCreateContextMap = this.newContentCreateContextMap;
47
+
48
+ compiler.plugin("context-module-factory", (cmf) => {
49
+ cmf.plugin("before-resolve", (result, callback) => {
50
+ if(!result) return callback();
51
+ if(resourceRegExp.test(result.request)) {
52
+ if(typeof newContentResource !== "undefined")
53
+ result.request = newContentResource;
54
+ if(typeof newContentRecursive !== "undefined")
55
+ result.recursive = newContentRecursive;
56
+ if(typeof newContentRegExp !== "undefined")
57
+ result.regExp = newContentRegExp;
58
+ if(typeof newContentCallback === "function") {
59
+ newContentCallback(result);
60
+ } else {
61
+ result.dependencies.forEach((d) => {
62
+ if(d.critical)
63
+ d.critical = false;
64
+ });
65
+ }
66
+ }
67
+ return callback(null, result);
68
+ });
69
+ cmf.plugin("after-resolve", (result, callback) => {
70
+ if(!result) return callback();
71
+ if(resourceRegExp.test(result.resource)) {
72
+ if(typeof newContentResource !== "undefined")
73
+ result.resource = path.resolve(result.resource, newContentResource);
74
+ if(typeof newContentRecursive !== "undefined")
75
+ result.recursive = newContentRecursive;
76
+ if(typeof newContentRegExp !== "undefined")
77
+ result.regExp = newContentRegExp;
78
+ if(typeof newContentCreateContextMap === "function")
79
+ result.resolveDependencies = createResolveDependenciesFromContextMap(newContentCreateContextMap);
80
+ if(typeof newContentCallback === "function") {
81
+ const origResource = result.resource;
82
+ newContentCallback(result);
83
+ if(result.resource !== origResource) {
84
+ result.resource = path.resolve(origResource, result.resource);
85
+ }
86
+ } else {
87
+ result.dependencies.forEach((d) => {
88
+ if(d.critical)
89
+ d.critical = false;
90
+ });
91
+ }
92
+ }
93
+ return callback(null, result);
94
+ });
95
+ });
96
+ }
97
+ }
98
+
99
+ const createResolveDependenciesFromContextMap = (createContextMap) => {
100
+ return function resolveDependenciesFromContextMap(fs, resource, recursive, regExp, callback) {
101
+ createContextMap(fs, (err, map) => {
102
+ if(err) return callback(err);
103
+ const dependencies = Object.keys(map).map((key) => {
104
+ return new ContextElementDependency(map[key], key);
105
+ });
106
+ callback(null, dependencies);
107
+ });
108
+ };
109
+ };
110
+
111
+ module.exports = ContextReplacementPlugin;
@@ -1,123 +1,123 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- const ConstDependency = require("./dependencies/ConstDependency");
8
- const BasicEvaluatedExpression = require("./BasicEvaluatedExpression");
9
- const ParserHelpers = require("./ParserHelpers");
10
- const NullFactory = require("./NullFactory");
11
-
12
- class DefinePlugin {
13
- constructor(definitions) {
14
- this.definitions = definitions;
15
- }
16
-
17
- apply(compiler) {
18
- const definitions = this.definitions;
19
- compiler.plugin("compilation", (compilation, params) => {
20
- compilation.dependencyFactories.set(ConstDependency, new NullFactory());
21
- compilation.dependencyTemplates.set(ConstDependency, new ConstDependency.Template());
22
-
23
- params.normalModuleFactory.plugin("parser", (parser) => {
24
- (function walkDefinitions(definitions, prefix) {
25
- Object.keys(definitions).forEach((key) => {
26
- const code = definitions[key];
27
- if(code && typeof code === "object" && !(code instanceof RegExp)) {
28
- walkDefinitions(code, prefix + key + ".");
29
- applyObjectDefine(prefix + key, code);
30
- return;
31
- }
32
- applyDefineKey(prefix, key);
33
- applyDefine(prefix + key, code);
34
- });
35
- }(definitions, ""));
36
-
37
- function stringifyObj(obj) {
38
- return "Object({" + Object.keys(obj).map((key) => {
39
- const code = obj[key];
40
- return JSON.stringify(key) + ":" + toCode(code);
41
- }).join(",") + "})";
42
- }
43
-
44
- function toCode(code) {
45
- if(code === null) return "null";
46
- else if(code === undefined) return "undefined";
47
- else if(code instanceof RegExp && code.toString) return code.toString();
48
- else if(typeof code === "function" && code.toString) return "(" + code.toString() + ")";
49
- else if(typeof code === "object") return stringifyObj(code);
50
- else return code + "";
51
- }
52
-
53
- function applyDefineKey(prefix, key) {
54
- const splittedKey = key.split(".");
55
- splittedKey.slice(1).forEach((_, i) => {
56
- const fullKey = prefix + splittedKey.slice(0, i + 1).join(".");
57
- parser.plugin("can-rename " + fullKey, ParserHelpers.approve);
58
- });
59
- }
60
-
61
- function applyDefine(key, code) {
62
- const isTypeof = /^typeof\s+/.test(key);
63
- if(isTypeof) key = key.replace(/^typeof\s+/, "");
64
- let recurse = false;
65
- let recurseTypeof = false;
66
- code = toCode(code);
67
- if(!isTypeof) {
68
- parser.plugin("can-rename " + key, ParserHelpers.approve);
69
- parser.plugin("evaluate Identifier " + key, (expr) => {
70
- /**
71
- * this is needed in case there is a recursion in the DefinePlugin
72
- * to prevent an endless recursion
73
- * e.g.: new DefinePlugin({
74
- * "a": "b",
75
- * "b": "a"
76
- * });
77
- */
78
- if(recurse) return;
79
- recurse = true;
80
- const res = parser.evaluate(code);
81
- recurse = false;
82
- res.setRange(expr.range);
83
- return res;
84
- });
85
- parser.plugin("expression " + key, ParserHelpers.toConstantDependency(code));
86
- }
87
- const typeofCode = isTypeof ? code : "typeof (" + code + ")";
88
- parser.plugin("evaluate typeof " + key, (expr) => {
89
- /**
90
- * this is needed in case there is a recursion in the DefinePlugin
91
- * to prevent an endless recursion
92
- * e.g.: new DefinePlugin({
93
- * "typeof a": "tyepof b",
94
- * "typeof b": "typeof a"
95
- * });
96
- */
97
- if(recurseTypeof) return;
98
- recurseTypeof = true;
99
- const res = parser.evaluate(typeofCode);
100
- recurseTypeof = false;
101
- res.setRange(expr.range);
102
- return res;
103
- });
104
- parser.plugin("typeof " + key, (expr) => {
105
- const res = parser.evaluate(typeofCode);
106
- if(!res.isString()) return;
107
- return ParserHelpers.toConstantDependency(JSON.stringify(res.string)).bind(parser)(expr);
108
- });
109
- }
110
-
111
- function applyObjectDefine(key, obj) {
112
- const code = stringifyObj(obj);
113
- parser.plugin("can-rename " + key, ParserHelpers.approve);
114
- parser.plugin("evaluate Identifier " + key, (expr) => new BasicEvaluatedExpression().setTruthy().setRange(expr.range));
115
- parser.plugin("evaluate typeof " + key, ParserHelpers.evaluateToString("object"));
116
- parser.plugin("expression " + key, ParserHelpers.toConstantDependency(code));
117
- parser.plugin("typeof " + key, ParserHelpers.toConstantDependency(JSON.stringify("object")));
118
- }
119
- });
120
- });
121
- }
122
- }
123
- module.exports = DefinePlugin;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const ConstDependency = require("./dependencies/ConstDependency");
8
+ const BasicEvaluatedExpression = require("./BasicEvaluatedExpression");
9
+ const ParserHelpers = require("./ParserHelpers");
10
+ const NullFactory = require("./NullFactory");
11
+
12
+ class DefinePlugin {
13
+ constructor(definitions) {
14
+ this.definitions = definitions;
15
+ }
16
+
17
+ apply(compiler) {
18
+ const definitions = this.definitions;
19
+ compiler.plugin("compilation", (compilation, params) => {
20
+ compilation.dependencyFactories.set(ConstDependency, new NullFactory());
21
+ compilation.dependencyTemplates.set(ConstDependency, new ConstDependency.Template());
22
+
23
+ params.normalModuleFactory.plugin("parser", (parser) => {
24
+ (function walkDefinitions(definitions, prefix) {
25
+ Object.keys(definitions).forEach((key) => {
26
+ const code = definitions[key];
27
+ if(code && typeof code === "object" && !(code instanceof RegExp)) {
28
+ walkDefinitions(code, prefix + key + ".");
29
+ applyObjectDefine(prefix + key, code);
30
+ return;
31
+ }
32
+ applyDefineKey(prefix, key);
33
+ applyDefine(prefix + key, code);
34
+ });
35
+ }(definitions, ""));
36
+
37
+ function stringifyObj(obj) {
38
+ return "Object({" + Object.keys(obj).map((key) => {
39
+ const code = obj[key];
40
+ return JSON.stringify(key) + ":" + toCode(code);
41
+ }).join(",") + "})";
42
+ }
43
+
44
+ function toCode(code) {
45
+ if(code === null) return "null";
46
+ else if(code === undefined) return "undefined";
47
+ else if(code instanceof RegExp && code.toString) return code.toString();
48
+ else if(typeof code === "function" && code.toString) return "(" + code.toString() + ")";
49
+ else if(typeof code === "object") return stringifyObj(code);
50
+ else return code + "";
51
+ }
52
+
53
+ function applyDefineKey(prefix, key) {
54
+ const splittedKey = key.split(".");
55
+ splittedKey.slice(1).forEach((_, i) => {
56
+ const fullKey = prefix + splittedKey.slice(0, i + 1).join(".");
57
+ parser.plugin("can-rename " + fullKey, ParserHelpers.approve);
58
+ });
59
+ }
60
+
61
+ function applyDefine(key, code) {
62
+ const isTypeof = /^typeof\s+/.test(key);
63
+ if(isTypeof) key = key.replace(/^typeof\s+/, "");
64
+ let recurse = false;
65
+ let recurseTypeof = false;
66
+ code = toCode(code);
67
+ if(!isTypeof) {
68
+ parser.plugin("can-rename " + key, ParserHelpers.approve);
69
+ parser.plugin("evaluate Identifier " + key, (expr) => {
70
+ /**
71
+ * this is needed in case there is a recursion in the DefinePlugin
72
+ * to prevent an endless recursion
73
+ * e.g.: new DefinePlugin({
74
+ * "a": "b",
75
+ * "b": "a"
76
+ * });
77
+ */
78
+ if(recurse) return;
79
+ recurse = true;
80
+ const res = parser.evaluate(code);
81
+ recurse = false;
82
+ res.setRange(expr.range);
83
+ return res;
84
+ });
85
+ parser.plugin("expression " + key, ParserHelpers.toConstantDependency(code));
86
+ }
87
+ const typeofCode = isTypeof ? code : "typeof (" + code + ")";
88
+ parser.plugin("evaluate typeof " + key, (expr) => {
89
+ /**
90
+ * this is needed in case there is a recursion in the DefinePlugin
91
+ * to prevent an endless recursion
92
+ * e.g.: new DefinePlugin({
93
+ * "typeof a": "tyepof b",
94
+ * "typeof b": "typeof a"
95
+ * });
96
+ */
97
+ if(recurseTypeof) return;
98
+ recurseTypeof = true;
99
+ const res = parser.evaluate(typeofCode);
100
+ recurseTypeof = false;
101
+ res.setRange(expr.range);
102
+ return res;
103
+ });
104
+ parser.plugin("typeof " + key, (expr) => {
105
+ const res = parser.evaluate(typeofCode);
106
+ if(!res.isString()) return;
107
+ return ParserHelpers.toConstantDependency(JSON.stringify(res.string)).bind(parser)(expr);
108
+ });
109
+ }
110
+
111
+ function applyObjectDefine(key, obj) {
112
+ const code = stringifyObj(obj);
113
+ parser.plugin("can-rename " + key, ParserHelpers.approve);
114
+ parser.plugin("evaluate Identifier " + key, (expr) => new BasicEvaluatedExpression().setTruthy().setRange(expr.range));
115
+ parser.plugin("evaluate typeof " + key, ParserHelpers.evaluateToString("object"));
116
+ parser.plugin("expression " + key, ParserHelpers.toConstantDependency(code));
117
+ parser.plugin("typeof " + key, ParserHelpers.toConstantDependency(JSON.stringify("object")));
118
+ }
119
+ });
120
+ });
121
+ }
122
+ }
123
+ module.exports = DefinePlugin;
@@ -1,98 +1,98 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- const Module = require("./Module");
8
- const OriginalSource = require("webpack-sources").OriginalSource;
9
- const RawSource = require("webpack-sources").RawSource;
10
- const WebpackMissingModule = require("./dependencies/WebpackMissingModule");
11
- const DelegatedSourceDependency = require("./dependencies/DelegatedSourceDependency");
12
- const DelegatedExportsDependency = require("./dependencies/DelegatedExportsDependency");
13
-
14
- class DelegatedModule extends Module {
15
- constructor(sourceRequest, data, type, userRequest, originalRequest) {
16
- super();
17
- this.sourceRequest = sourceRequest;
18
- this.request = data.id;
19
- this.meta = data.meta;
20
- this.type = type;
21
- this.originalRequest = originalRequest;
22
- this.userRequest = userRequest;
23
- this.built = false;
24
- this.delegated = true;
25
- this.delegateData = data;
26
- }
27
-
28
- libIdent(options) {
29
- return typeof this.originalRequest === "string" ? this.originalRequest : this.originalRequest.libIdent(options);
30
- }
31
-
32
- identifier() {
33
- return `delegated ${JSON.stringify(this.request)} from ${this.sourceRequest}`;
34
- }
35
-
36
- readableIdentifier() {
37
- return `delegated ${this.userRequest} from ${this.sourceRequest}`;
38
- }
39
-
40
- needRebuild() {
41
- return false;
42
- }
43
-
44
- build(options, compilation, resolver, fs, callback) {
45
- this.built = true;
46
- this.builtTime = Date.now();
47
- this.cacheable = true;
48
- this.dependencies.length = 0;
49
- this.addDependency(new DelegatedSourceDependency(this.sourceRequest));
50
- this.addDependency(new DelegatedExportsDependency(this, this.delegateData.exports || true));
51
- callback();
52
- }
53
-
54
- unbuild() {
55
- this.built = false;
56
- super.unbuild();
57
- }
58
-
59
- source() {
60
- const sourceModule = this.dependencies[0].module;
61
- let str;
62
-
63
- if(!sourceModule) {
64
- str = WebpackMissingModule.moduleCode(this.sourceRequest);
65
- } else {
66
- str = `module.exports = (__webpack_require__(${JSON.stringify(sourceModule.id)}))`;
67
-
68
- switch(this.type) {
69
- case "require":
70
- str += `(${JSON.stringify(this.request)})`;
71
- break;
72
- case "object":
73
- str += `[${JSON.stringify(this.request)}]`;
74
- break;
75
- }
76
-
77
- str += ";";
78
- }
79
-
80
- if(this.useSourceMap) {
81
- return new OriginalSource(str, this.identifier());
82
- } else {
83
- return new RawSource(str);
84
- }
85
- }
86
-
87
- size() {
88
- return 42;
89
- }
90
-
91
- updateHash(hash) {
92
- hash.update(this.type);
93
- hash.update(JSON.stringify(this.request));
94
- super.updateHash(hash);
95
- }
96
- }
97
-
98
- module.exports = DelegatedModule;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const Module = require("./Module");
8
+ const OriginalSource = require("webpack-sources").OriginalSource;
9
+ const RawSource = require("webpack-sources").RawSource;
10
+ const WebpackMissingModule = require("./dependencies/WebpackMissingModule");
11
+ const DelegatedSourceDependency = require("./dependencies/DelegatedSourceDependency");
12
+ const DelegatedExportsDependency = require("./dependencies/DelegatedExportsDependency");
13
+
14
+ class DelegatedModule extends Module {
15
+ constructor(sourceRequest, data, type, userRequest, originalRequest) {
16
+ super();
17
+ this.sourceRequest = sourceRequest;
18
+ this.request = data.id;
19
+ this.meta = data.meta;
20
+ this.type = type;
21
+ this.originalRequest = originalRequest;
22
+ this.userRequest = userRequest;
23
+ this.built = false;
24
+ this.delegated = true;
25
+ this.delegateData = data;
26
+ }
27
+
28
+ libIdent(options) {
29
+ return typeof this.originalRequest === "string" ? this.originalRequest : this.originalRequest.libIdent(options);
30
+ }
31
+
32
+ identifier() {
33
+ return `delegated ${JSON.stringify(this.request)} from ${this.sourceRequest}`;
34
+ }
35
+
36
+ readableIdentifier() {
37
+ return `delegated ${this.userRequest} from ${this.sourceRequest}`;
38
+ }
39
+
40
+ needRebuild() {
41
+ return false;
42
+ }
43
+
44
+ build(options, compilation, resolver, fs, callback) {
45
+ this.built = true;
46
+ this.builtTime = Date.now();
47
+ this.cacheable = true;
48
+ this.dependencies.length = 0;
49
+ this.addDependency(new DelegatedSourceDependency(this.sourceRequest));
50
+ this.addDependency(new DelegatedExportsDependency(this, this.delegateData.exports || true));
51
+ callback();
52
+ }
53
+
54
+ unbuild() {
55
+ this.built = false;
56
+ super.unbuild();
57
+ }
58
+
59
+ source() {
60
+ const sourceModule = this.dependencies[0].module;
61
+ let str;
62
+
63
+ if(!sourceModule) {
64
+ str = WebpackMissingModule.moduleCode(this.sourceRequest);
65
+ } else {
66
+ str = `module.exports = (__webpack_require__(${JSON.stringify(sourceModule.id)}))`;
67
+
68
+ switch(this.type) {
69
+ case "require":
70
+ str += `(${JSON.stringify(this.request)})`;
71
+ break;
72
+ case "object":
73
+ str += `[${JSON.stringify(this.request)}]`;
74
+ break;
75
+ }
76
+
77
+ str += ";";
78
+ }
79
+
80
+ if(this.useSourceMap) {
81
+ return new OriginalSource(str, this.identifier());
82
+ } else {
83
+ return new RawSource(str);
84
+ }
85
+ }
86
+
87
+ size() {
88
+ return 42;
89
+ }
90
+
91
+ updateHash(hash) {
92
+ hash.update(this.type);
93
+ hash.update(JSON.stringify(this.request));
94
+ super.updateHash(hash);
95
+ }
96
+ }
97
+
98
+ module.exports = DelegatedModule;