Source code

Revision control

Copy as Markdown

Other Tools

// |jit-test| skip-if: getBuildConfiguration("release_or_beta"); --enable-export-star-default
load(libdir + "asserts.js");
function evaluateModule(source) {
let module = parseModule(source);
moduleLoadAndLink(module);
moduleEvaluate(module);
return module;
}
registerModule(
"default-source",
parseModule("export default 1; export const named = 2;")
);
registerModule(
"export-star-default-reexport",
parseModule('export * from "default-source";')
);
let taggedModule = registerModule(
"export-star-default-tag-check",
parseModule('export * from "default-source";')
);
assertEq(taggedModule.starExportEntries.length, 1);
assertEq(taggedModule.starExportEntries[0].importNameValueType, "all");
let consumer = evaluateModule(`
import value, * as ns from "export-star-default-reexport";
import { named } from "export-star-default-reexport";
`);
assertEq(getModuleEnvironmentValue(consumer, "value"), 1);
assertEq(getModuleEnvironmentValue(consumer, "named"), 2);
assertEq(getModuleEnvironmentValue(consumer, "ns").default, 1);
registerModule(
"named-source",
parseModule("export const named = 1;")
);
registerModule(
"export-star-no-default-reexport",
parseModule('export * from "named-source";')
);
let missingDefault = parseModule(`
import value from "export-star-no-default-reexport";
`);
assertThrowsInstanceOf(() => moduleLoadAndLink(missingDefault), SyntaxError);
registerModule(
"default-a",
parseModule("export default 'a';")
);
registerModule(
"default-b",
parseModule("export default 'b';")
);
registerModule(
"export-star-default-ambiguous",
parseModule(`
export * from "default-a";
export * from "default-b";
`)
);
let nsConsumer = evaluateModule(`
import * as ns from "export-star-default-ambiguous";
`);
let ns = getModuleEnvironmentValue(nsConsumer, "ns");
assertEq("default" in ns, false);
let ambiguousDefault = parseModule(`
import value from "export-star-default-ambiguous";
`);
assertThrowsInstanceOf(() => moduleLoadAndLink(ambiguousDefault), SyntaxError);
registerModule(
"export-star-default-explicit",
parseModule(`
export * from "default-a";
export * from "default-b";
export { default } from "default-a";
`)
);
let explicit = evaluateModule(`
import value from "export-star-default-explicit";
`);
assertEq(getModuleEnvironmentValue(explicit, "value"), "a");