Skip to content

Commit 515a07a

Browse files
committed
fix non-harmony import() handling for null
1 parent bfa4b49 commit 515a07a

File tree

11 files changed

+27
-19
lines changed

11 files changed

+27
-19
lines changed

lib/ContextModule.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ class ContextModule extends Module {
241241
const harmonyModule = dep.module.meta && dep.module.meta.harmonyModule;
242242
if(!harmonyModule) hasNonHarmony = true;
243243
if(harmonyModule) hasHarmony = true;
244-
map[dep.module.id] = harmonyModule ? 0 : 1;
244+
map[dep.module.id] = harmonyModule ? 1 : 0;
245245
return map;
246246
}, Object.create(null));
247247
if(hasHarmony && !hasNonHarmony) return false;
@@ -253,10 +253,10 @@ class ContextModule extends Module {
253253
const strict = this.options.namespaceObject === "strict";
254254
if(strict) {
255255
if(fakeMap === true) return "/* fake namespace object */ { \"default\": module }";
256-
if(fakeMap) return `${fakeMapDataExpression} ? /* fake namespace object */ { "default": module } : module`;
256+
if(fakeMap) return `${fakeMapDataExpression} ? module : /* fake namespace object */ { "default": module }`;
257257
} else {
258-
if(fakeMap === true) return "typeof module !== \"object\" || !module.__esModule ? /* fake namespace object */ { \"default\": module } : module;";
259-
if(fakeMap) return `${fakeMapDataExpression} && (typeof module !== "object" || !module.__esModule) ? /* fake namespace object */ { "default": module } : module;`;
258+
if(fakeMap === true) return "typeof module === \"object\" && module && module.__esModule ? module : /* fake namespace object */ { \"default\": module };";
259+
if(fakeMap) return `${fakeMapDataExpression} || typeof module === "object" && module && module.__esModule ? module : /* fake namespace object */ { "default": module };`;
260260
}
261261
return "module";
262262
}

lib/dependencies/ImportDependency.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ ImportDependency.Template = class ImportDependencyTemplate {
4040
} else if(dep.originModule.meta.strictHarmonyModule) {
4141
getModuleFunction = `function() { return /* fake namespace object */ { "default": __webpack_require__(${comment}${stringifiedId}) }; }`;
4242
} else {
43-
getModuleFunction = `function() { var m = __webpack_require__(${comment}${stringifiedId}); return m && typeof m === "object" && m.__esModule ? m : /* fake namespace object */ { "default": m }; }`;
43+
getModuleFunction = `function() { var module = __webpack_require__(${comment}${stringifiedId}); return typeof module === "object" && module && module.__esModule ? module : /* fake namespace object */ { "default": module }; }`;
4444
}
4545

4646
return `${promise || "Promise.resolve()"}.then(${getModuleFunction})`;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = null;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = null;

test/cases/mjs/namespace-object-lazy/index.mjs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ it("should receive a namespace object when importing commonjs via context", func
6262
return Promise.all([
6363
promiseTest(contextCJS("one"), { default: { named: "named", default: "default" } }),
6464
promiseTest(contextCJS("two"), { default: { __esModule: true, named: "named", default: "default" } }),
65-
promiseTest(contextCJS("three"), { default: { named: "named", default: "default" } })
65+
promiseTest(contextCJS("three"), { default: { named: "named", default: "default" } }),
66+
promiseTest(contextCJS("null"), { default: null })
6667
]);
6768
});
6869

@@ -78,6 +79,7 @@ it("should receive a namespace object when importing mixed content via context",
7879
return Promise.all([
7980
promiseTest(contextMixed("one"), { default: { named: "named", default: "default" } }),
8081
promiseTest(contextMixed("two"), { default: { __esModule: true, named: "named", default: "default" } }),
81-
promiseTest(contextMixed("three"), { named: "named", default: "default" })
82+
promiseTest(contextMixed("three"), { named: "named", default: "default" }),
83+
promiseTest(contextMixed("null"), { default: null })
8284
]);
8385
});
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = null;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = null;

test/cases/mjs/non-mjs-namespace-object-lazy/index.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ it("should receive a namespace object when importing commonjs via context", func
6262
return Promise.all([
6363
promiseTest(contextCJS("one"), { default: { named: "named", default: "default" } }),
6464
promiseTest(contextCJS("two"), { __esModule: true, named: "named", default: "default" }),
65-
promiseTest(contextCJS("three"), { default: { named: "named", default: "default" } })
65+
promiseTest(contextCJS("three"), { default: { named: "named", default: "default" } }),
66+
promiseTest(contextCJS("null"), { default: null })
6667
]);
6768
});
6869

@@ -78,6 +79,7 @@ it("should receive a namespace object when importing mixed content via context",
7879
return Promise.all([
7980
promiseTest(contextMixed("one"), { default: { named: "named", default: "default" } }),
8081
promiseTest(contextMixed("two"), { __esModule: true, named: "named", default: "default" }),
81-
promiseTest(contextMixed("three"), { named: "named", default: "default" })
82+
promiseTest(contextMixed("three"), { named: "named", default: "default" }),
83+
promiseTest(contextMixed("null"), { default: null })
8284
]);
8385
});

test/statsCases/import-weak/expected.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Hash: 9915cc41cf8ad107ab1e
22
Time: Xms
33
Asset Size Chunks Chunk Names
44
0.js 149 bytes 0 [emitted]
5-
entry.js 7.18 KiB 1 [emitted] entry
5+
entry.js 7.21 KiB 1 [emitted] entry
66
[0] ./modules/b.js 22 bytes {0} [built]
77
[1] ./entry.js 120 bytes {1} [built]
88
[2] ./modules/a.js 37 bytes [built]

test/statsCases/limit-chunk-count-plugin/expected.txt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ Child
33
Hash: 8a563b80ea8746a38924
44
Time: Xms
55
Asset Size Chunks Chunk Names
6-
bundle.js 3.71 KiB 0 [emitted] main
6+
bundle.js 3.79 KiB 0 [emitted] main
77
chunk {0} bundle.js (main) 191 bytes [entry] [rendered]
88
[0] ./index.js 73 bytes {0} [built]
99
[1] ./a.js 22 bytes {0} [built]
@@ -15,8 +15,8 @@ Child
1515
Hash: 36a7c7bbedbe36681d4b
1616
Time: Xms
1717
Asset Size Chunks Chunk Names
18-
0.bundle.js 881 bytes 0 [emitted]
19-
bundle.js 7.09 KiB 1 [emitted] main
18+
0.bundle.js 941 bytes 0 [emitted]
19+
bundle.js 7.12 KiB 1 [emitted] main
2020
chunk {0} 0.bundle.js 118 bytes {1} [rendered]
2121
[1] ./a.js 22 bytes {0} [built]
2222
[2] ./b.js 22 bytes {0} [built]
@@ -29,9 +29,9 @@ Child
2929
Hash: ad59fc60a72e40a54e4d
3030
Time: Xms
3131
Asset Size Chunks Chunk Names
32-
0.bundle.js 734 bytes 0 [emitted]
32+
0.bundle.js 794 bytes 0 [emitted]
3333
1.bundle.js 232 bytes 1 [emitted]
34-
bundle.js 7.09 KiB 2 [emitted] main
34+
bundle.js 7.12 KiB 2 [emitted] main
3535
chunk {0} 0.bundle.js 74 bytes {2} [rendered]
3636
[1] ./a.js 22 bytes {0} [built]
3737
[3] ./c.js 30 bytes {0} [built]
@@ -47,8 +47,8 @@ Child
4747
Asset Size Chunks Chunk Names
4848
0.bundle.js 232 bytes 0 [emitted]
4949
1.bundle.js 254 bytes 1 [emitted]
50-
2.bundle.js 563 bytes 2 [emitted]
51-
bundle.js 7.08 KiB 3 [emitted] main
50+
2.bundle.js 623 bytes 2 [emitted]
51+
bundle.js 7.11 KiB 3 [emitted] main
5252
chunk {0} 0.bundle.js 44 bytes {2} {3} [rendered]
5353
[2] ./b.js 22 bytes {0} [built]
5454
[5] ./e.js 22 bytes {0} [built]

0 commit comments

Comments
 (0)