rename exportsType named to default

exportsType default doesn't include named exports in strict esm
This commit is contained in:
Tobias Koppers 2019-11-20 10:06:16 +01:00
parent ce70102a8f
commit 5a01ed8121
9 changed files with 31 additions and 27 deletions

View File

@ -485,8 +485,8 @@ class ContextModule extends Module {
} else if (exportsType === "namespace") { } else if (exportsType === "namespace") {
map[id] = 9; map[id] = 9;
hasNamespace = true; hasNamespace = true;
} else if (exportsType === "named") { } else if (exportsType === "default") {
map[id] = 3; map[id] = this.options.namespaceObject === "strict" ? 1 : 3;
hasNamed = true; hasNamed = true;
} }
return map; return map;
@ -498,7 +498,7 @@ class ContextModule extends Module {
return 9; return 9;
} }
if (!hasNamespace && !hasNonHarmony && hasNamed) { if (!hasNamespace && !hasNonHarmony && hasNamed) {
return 3; return this.options.namespaceObject === "strict" ? 1 : 3;
} }
if (!hasNamespace && !hasNonHarmony && !hasNamed) { if (!hasNamespace && !hasNonHarmony && !hasNamed) {
return 9; return 9;

View File

@ -65,7 +65,7 @@ const makeSerializable = require("./util/makeSerializable");
* @property {string=} exportsArgument * @property {string=} exportsArgument
* @property {boolean=} strict * @property {boolean=} strict
* @property {string=} moduleConcatenationBailout * @property {string=} moduleConcatenationBailout
* @property {("named" | "namespace")=} exportsType * @property {("default" | "namespace")=} exportsType
* @property {boolean=} strictHarmonyModule * @property {boolean=} strictHarmonyModule
* @property {boolean=} async * @property {boolean=} async
*/ */

View File

@ -957,7 +957,7 @@ class ModuleGraph {
* @returns {void} * @returns {void}
*/ */
finishModule(module) { finishModule(module) {
if (module.buildMeta.exportsType === "named") { if (module.buildMeta.exportsType === "default") {
this.getExportsInfo(module).setRedirectToDefaultObject(); this.getExportsInfo(module).setRedirectToDefaultObject();
} }
} }

View File

@ -329,12 +329,12 @@ class RuntimeTemplate {
runtimeRequirements runtimeRequirements
}); });
return rawModule; return rawModule;
} else if (exportsType === "named") {
runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject);
return `${RuntimeGlobals.createFakeNamespaceObject}(${moduleId}, 3)`;
} else if (strict) { } else if (strict) {
runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject); runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject);
return `${RuntimeGlobals.createFakeNamespaceObject}(${moduleId}, 1)`; return `${RuntimeGlobals.createFakeNamespaceObject}(${moduleId}, 1)`;
} else if (exportsType === "default") {
runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject);
return `${RuntimeGlobals.createFakeNamespaceObject}(${moduleId}, 3)`;
} else { } else {
runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject); runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject);
return `${RuntimeGlobals.createFakeNamespaceObject}(${moduleId}, 7)`; return `${RuntimeGlobals.createFakeNamespaceObject}(${moduleId}, 7)`;
@ -435,13 +435,6 @@ class RuntimeTemplate {
runtimeRequirements.add(RuntimeGlobals.require); runtimeRequirements.add(RuntimeGlobals.require);
getModuleFunction = `__webpack_require__.bind(null, ${comment}${idExpr})`; getModuleFunction = `__webpack_require__.bind(null, ${comment}${idExpr})`;
} }
} else if (exportsType === "named") {
runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject);
if (header) {
getModuleFunction = `function() { ${header}return ${RuntimeGlobals.createFakeNamespaceObject}(${moduleIdExpr}, 3); }`;
} else {
getModuleFunction = `${RuntimeGlobals.createFakeNamespaceObject}.bind(__webpack_require__, ${comment}${idExpr}, 3)`;
}
} else if (strict) { } else if (strict) {
runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject); runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject);
if (header) { if (header) {
@ -449,6 +442,13 @@ class RuntimeTemplate {
} else { } else {
getModuleFunction = `${RuntimeGlobals.createFakeNamespaceObject}.bind(__webpack_require__, ${comment}${idExpr}, 1)`; getModuleFunction = `${RuntimeGlobals.createFakeNamespaceObject}.bind(__webpack_require__, ${comment}${idExpr}, 1)`;
} }
} else if (exportsType === "default") {
runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject);
if (header) {
getModuleFunction = `function() { ${header}return ${RuntimeGlobals.createFakeNamespaceObject}(${moduleIdExpr}, 3); }`;
} else {
getModuleFunction = `${RuntimeGlobals.createFakeNamespaceObject}.bind(__webpack_require__, ${comment}${idExpr}, 3)`;
}
} else { } else {
runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject); runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject);
if (header) { if (header) {
@ -595,7 +595,7 @@ class RuntimeTemplate {
} }
} }
if (exportsType === "named") { if (exportsType === "default") {
if (exportName.length === 0) { if (exportName.length === 0) {
runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject); runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject);
initFragments.push( initFragments.push(
@ -606,7 +606,11 @@ class RuntimeTemplate {
`${importVar}_namespace_cache` `${importVar}_namespace_cache`
) )
); );
return `/*#__PURE__*/ (${importVar}_namespace_cache || (${importVar}_namespace_cache = ${RuntimeGlobals.createFakeNamespaceObject}(${importVar}, 2)))`; return `/*#__PURE__*/ (${importVar}_namespace_cache || (${importVar}_namespace_cache = ${
RuntimeGlobals.createFakeNamespaceObject
}(${importVar}, ${
originModule.buildMeta.strictHarmonyModule ? 0 : 2
})))`;
} }
} }

View File

@ -196,7 +196,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
importedModule.buildMeta && !importedModule.buildMeta.exportsType; importedModule.buildMeta && !importedModule.buildMeta.exportsType;
const isNamedModule = const isNamedModule =
importedModule.buildMeta && importedModule.buildMeta &&
importedModule.buildMeta.exportsType === "named"; importedModule.buildMeta.exportsType === "default";
// Special handling for reexporting the default export // Special handling for reexporting the default export
// from non-harmony modules // from non-harmony modules
@ -225,7 +225,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
if (ids.length > 0) { if (ids.length > 0) {
// export { name as name } // export { name as name }
if (isNotAHarmonyModule && strictHarmonyModule) { if ((isNotAHarmonyModule || isNamedModule) && strictHarmonyModule) {
mode = new ExportMode("reexport-non-harmony-undefined"); mode = new ExportMode("reexport-non-harmony-undefined");
mode.name = name; mode.name = name;
} else { } else {
@ -242,7 +242,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
mode = new ExportMode("reexport-fake-named-namespace-object"); mode = new ExportMode("reexport-fake-named-namespace-object");
mode.name = name; mode.name = name;
mode.partialNamespaceExportInfo = exportInfo; mode.partialNamespaceExportInfo = exportInfo;
mode.fakeType = 2; mode.fakeType = strictHarmonyModule ? 0 : 2;
} else { } else {
mode = new ExportMode("reexport-namespace-object"); mode = new ExportMode("reexport-namespace-object");
mode.name = name; mode.name = name;

View File

@ -115,7 +115,7 @@ class HarmonyImportDependency extends ModuleDependency {
]; ];
} }
return; return;
} else if (exportsType === "named") { } else if (exportsType === "default") {
if (ids.length > 0 && ids[0] !== "default") { if (ids.length > 0 && ids[0] !== "default") {
// For these modules only the default export is supported // For these modules only the default export is supported
return [ return [

View File

@ -19,7 +19,7 @@ class JsonParser {
parse(source, state) { parse(source, state) {
const data = parseJson(source[0] === "\ufeff" ? source.slice(1) : source); const data = parseJson(source[0] === "\ufeff" ? source.slice(1) : source);
state.module.buildInfo.jsonData = data; state.module.buildInfo.jsonData = data;
state.module.buildMeta.exportsType = "named"; state.module.buildMeta.exportsType = "default";
state.module.addDependency( state.module.addDependency(
new JsonExportsDependency(JsonExportsDependency.getExportsFromData(data)) new JsonExportsDependency(JsonExportsDependency.getExportsFromData(data))
); );

View File

@ -234,7 +234,7 @@ const getExternalImport = (
let exprStart; let exprStart;
if (exportName.length === 0) { if (exportName.length === 0) {
switch (importedModule.buildMeta.exportsType) { switch (importedModule.buildMeta.exportsType) {
case "named": case "default":
info.interopNamespaceObjectUsed = true; info.interopNamespaceObjectUsed = true;
exprStart = info.interopNamespaceObjectName; exprStart = info.interopNamespaceObjectName;
break; break;
@ -253,7 +253,7 @@ const getExternalImport = (
} }
} else { } else {
switch (importedModule.buildMeta.exportsType) { switch (importedModule.buildMeta.exportsType) {
case "named": case "default":
case "namespace": case "namespace":
break; break;
default: default:
@ -977,7 +977,7 @@ class ConcatenatedModule extends Module {
allUsedNames.add(externalName); allUsedNames.add(externalName);
info.name = externalName; info.name = externalName;
if ( if (
info.module.buildMeta.exportsType === "named" || info.module.buildMeta.exportsType === "default" ||
!info.module.buildMeta.exportsType !info.module.buildMeta.exportsType
) { ) {
const externalNameInterop = this.findNewName( const externalNameInterop = this.findNewName(
@ -1085,7 +1085,7 @@ class ConcatenatedModule extends Module {
)});\n` )});\n`
); );
if (info.interopNamespaceObjectUsed) { if (info.interopNamespaceObjectUsed) {
if (info.module.buildMeta.exportsType === "named") { if (info.module.buildMeta.exportsType === "default") {
runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject); runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject);
result.add( result.add(
`var ${info.interopNamespaceObjectName} = /*#__PURE__*/${RuntimeGlobals.createFakeNamespaceObject}(${info.name}, 2);\n` `var ${info.interopNamespaceObjectName} = /*#__PURE__*/${RuntimeGlobals.createFakeNamespaceObject}(${info.name}, 2);\n`

View File

@ -81,6 +81,6 @@ it("should receive a namespace object when importing mixed content via context",
promiseTest(contextMixed("two"), nsObj({ default: { __esModule: true, named: "named", default: "default" } })), promiseTest(contextMixed("two"), nsObj({ default: { __esModule: true, named: "named", default: "default" } })),
promiseTest(contextMixed("three"), nsObj({ named: "named", default: "default" })), promiseTest(contextMixed("three"), nsObj({ named: "named", default: "default" })),
promiseTest(contextMixed("null"), nsObj({ default: null })), promiseTest(contextMixed("null"), nsObj({ default: null })),
promiseTest(contextMixed("json.json"), nsObj({ named: "named", default: { named: "named", default: "default" } })) promiseTest(contextMixed("json.json"), nsObj({ default: { named: "named", default: "default" } }))
]); ]);
}); });