Skip to content

Commit 2028f3d

Browse files
timseTheLarkInn
authored andcommitted
Refactor harmony import and harmony accept import dependency to es6 (webpack#3787)
* refactor HarmonyAcceptImportDependency to es6 * expose getContent as makeImportStatement to prevent the need to initialize Templates to access it
1 parent b25325d commit 2028f3d

3 files changed

Lines changed: 75 additions & 55 deletions

File tree

lib/dependencies/HarmonyAcceptDependency.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55
"use strict";
66
const NullDependency = require("./NullDependency");
7-
const HarmonyImportDependency = require("./HarmonyImportDependency");
7+
const makeHarmonyImportStatement = require("./HarmonyImportDependency").makeImportStatement;
88

99
class HarmonyAcceptDependency extends NullDependency {
1010
constructor(range, dependencies, hasCallback) {
@@ -22,7 +22,7 @@ class HarmonyAcceptDependency extends NullDependency {
2222
HarmonyAcceptDependency.Template = class HarmonyAcceptDependencyTemplate {
2323
apply(dep, source, outputOptions, requestShortener) {
2424
const content = dep.dependencies
25-
.map(dependency => HarmonyImportDependency.makeStatement(
25+
.map(dependency => makeHarmonyImportStatement(
2626
false,
2727
dependency,
2828
outputOptions,

lib/dependencies/HarmonyAcceptImportDependency.js

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,21 @@
22
MIT License http://www.opensource.org/licenses/mit-license.php
33
Author Tobias Koppers @sokra
44
*/
5-
var HarmonyImportDependency = require("./HarmonyImportDependency");
5+
"use strict";
6+
const HarmonyImportDependency = require("./HarmonyImportDependency");
67

7-
function HarmonyAcceptImportDependency(request, importedVar, range) {
8-
HarmonyImportDependency.call(this, request, importedVar, range);
9-
}
10-
module.exports = HarmonyAcceptImportDependency;
8+
class HarmonyAcceptImportDependency extends HarmonyImportDependency {
9+
constructor(request, importedVar, range) {
10+
super(request, importedVar, range);
11+
}
1112

12-
HarmonyAcceptImportDependency.prototype = Object.create(HarmonyImportDependency.prototype);
13-
HarmonyAcceptImportDependency.prototype.constructor = HarmonyAcceptImportDependency;
14-
HarmonyAcceptImportDependency.prototype.type = "harmony accept";
13+
get type() {
14+
return "harmony accept";
15+
}
16+
}
1517

16-
HarmonyAcceptImportDependency.Template = function HarmonyAcceptImportDependencyTemplate() {};
18+
HarmonyAcceptImportDependency.Template = class HarmonyAcceptImportDependencyTemplate {
19+
apply(dep, source, outputOptions, requestShortener) {}
20+
}
1721

18-
HarmonyAcceptImportDependency.Template.prototype.apply = function(dep, source, outputOptions, requestShortener) {};
22+
module.exports = HarmonyAcceptImportDependency;

lib/dependencies/HarmonyImportDependency.js

Lines changed: 59 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2,55 +2,71 @@
22
MIT License http://www.opensource.org/licenses/mit-license.php
33
Author Tobias Koppers @sokra
44
*/
5+
"use strict"
56
var ModuleDependency = require("./ModuleDependency");
67

7-
function HarmonyImportDependency(request, importedVar, range) {
8-
ModuleDependency.call(this, request);
9-
this.range = range;
10-
this.importedVar = importedVar;
8+
class HarmonyImportDependency extends ModuleDependency {
9+
constructor(request, importedVar, range) {
10+
super(request);
11+
this.range = range;
12+
this.importedVar = importedVar;
13+
}
14+
15+
get type() {
16+
return "harmony import";
17+
}
18+
19+
getReference() {
20+
if(!this.module) return null;
21+
22+
return {
23+
module: this.module,
24+
importedNames: false
25+
};
26+
}
27+
28+
updateHash(hash) {
29+
super.updateHash(hash);
30+
hash.update((this.module && (!this.module.meta || this.module.meta.harmonyModule)) + "");
31+
}
32+
}
33+
34+
HarmonyImportDependency.Template = class HarmonyImportDependencyTemplate {
35+
apply(dep, source, outputOptions, requestShortener) {
36+
const content = makeImportStatement(true, dep, outputOptions, requestShortener);
37+
source.replace(dep.range[0], dep.range[1] - 1, "");
38+
source.insert(-1, content);
39+
}
40+
}
41+
42+
function getOptionalComment(pathinfo, shortenedRequest) {
43+
if(!pathinfo) {
44+
return "";
45+
}
46+
return `/*! ${shortenedRequest} */ `;
1147
}
12-
module.exports = HarmonyImportDependency;
1348

14-
HarmonyImportDependency.prototype = Object.create(ModuleDependency.prototype);
15-
HarmonyImportDependency.prototype.constructor = HarmonyImportDependency;
16-
HarmonyImportDependency.prototype.type = "harmony import";
17-
18-
HarmonyImportDependency.prototype.getReference = function() {
19-
if(!this.module) return null;
20-
return {
21-
module: this.module,
22-
importedNames: false
23-
};
24-
};
25-
26-
HarmonyImportDependency.prototype.updateHash = function updateHash(hash) {
27-
ModuleDependency.prototype.updateHash.call(this, hash);
28-
hash.update((this.module && (!this.module.meta || this.module.meta.harmonyModule)) + "");
29-
};
30-
31-
HarmonyImportDependency.makeStatement = function(declare, dep, outputOptions, requestShortener) {
32-
var comment = "";
33-
if(outputOptions.pathinfo) comment = "/*! " + requestShortener.shorten(dep.request) + " */ ";
34-
var declaration = declare ? "var " : "";
35-
var newline = declare ? "\n" : " ";
36-
var content;
49+
function makeImportStatement(declare, dep, outputOptions, requestShortener) {
50+
const comment = getOptionalComment(outputOptions.pathinfo, requestShortener.shorten(dep.request));
51+
const declaration = declare ? "var " : "";
52+
const newline = declare ? "\n" : " ";
53+
3754
if(!dep.module) {
38-
content = "throw new Error(" + JSON.stringify("Cannot find module \"" + dep.request + "\"") + ");" + newline;
39-
} else if(dep.importedVar) {
40-
content = "/* harmony import */ " + declaration + dep.importedVar + " = __webpack_require__(" + comment + JSON.stringify(dep.module.id) + ");" + newline;
41-
if(!(dep.module.meta && dep.module.meta.harmonyModule)) {
42-
content += "/* harmony import */ " + declaration + dep.importedVar + "_default = __webpack_require__.n(" + dep.importedVar + ");" + newline;
55+
const stringifiedError = JSON.stringify(`Cannot find module "${dep.request}"`);
56+
return `throw new Error(${stringifiedError});${newline}`;
57+
}
58+
59+
if(dep.importedVar) {
60+
const isHarmonyModule = dep.module.meta && dep.module.meta.harmonyModule;
61+
const content = `/* harmony import */ ${declaration}${dep.importedVar} = __webpack_require__(${comment}${JSON.stringify(dep.module.id)});${newline}`;
62+
if(isHarmonyModule) {
63+
return content;
4364
}
44-
} else {
45-
content = "";
65+
return `${content}/* harmony import */ ${declaration}${dep.importedVar}_default = __webpack_require__.n(${dep.importedVar});${newline}`;
4666
}
47-
return content;
48-
};
4967

50-
HarmonyImportDependency.Template = function HarmonyImportDependencyTemplate() {};
68+
return "";
69+
}
70+
HarmonyImportDependency.makeImportStatement = makeImportStatement;
5171

52-
HarmonyImportDependency.Template.prototype.apply = function(dep, source, outputOptions, requestShortener) {
53-
var content = HarmonyImportDependency.makeStatement(true, dep, outputOptions, requestShortener);
54-
source.replace(dep.range[0], dep.range[1] - 1, "");
55-
source.insert(-1, content);
56-
};
72+
module.exports = HarmonyImportDependency;

0 commit comments

Comments
 (0)