LibJS: Allow exporting any imported bindings

This commit is contained in:
davidot 2022-09-01 23:13:45 +02:00 committed by Linus Groh
parent 462c6df24b
commit faf1430ce4
Notes: sideshowbarker 2024-07-17 23:00:03 +09:00
3 changed files with 19 additions and 1 deletions

View file

@ -565,8 +565,15 @@ void Parser::parse_module(Program& program)
if (name == exported_name)
found = true;
});
for (auto& import : program.imports()) {
if (import.has_bound_name(exported_name)) {
found = true;
break;
}
}
if (!found)
syntax_error(String::formatted("'{}' is not declared", exported_name));
syntax_error(String::formatted("'{}' in export is not declared", exported_name), export_statement.source_range().start);
}
}
}

View file

@ -190,6 +190,10 @@ describe("in- and exports", () => {
test("can have multiple star imports even from the same file", () => {
expectModulePassed("./multiple-star-imports.mjs");
});
test("can export namespace via binding", () => {
expectModulePassed("./re-export-namespace-via-binding.mjs");
});
});
describe("loops", () => {

View file

@ -0,0 +1,7 @@
import * as namespace from "./default-and-star-export.mjs";
import { "*" as fromStar } from "./default-and-star-export.mjs";
export { namespace };
import { namespace as nm } from "./re-export-namespace-via-binding.mjs";
export const passed = nm === namespace && fromStar === namespace["*"];