tc39 / proposal-source-phase-imports

Proposal to enable importing modules at the source phase

Home Page:https://tc39.es/proposal-source-phase-imports/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Missing sources should throw a *SyntaxError* when imported

nicolo-ribaudo opened this issue · comments

Right now this code throws a ReferenceError, because there are no JS source objects:

import source s from "./mod.js";

I believe this code should throw a SyntaxError, even if might appear conter-intuitive. ReferenceError is only used for code that runs, and not before evaluation. As a very strong precedent ("very strong" because it's basically the same thing), import { x } from "./a" is a SyntaxError is ./a does not export x.

Older versions of the language used to have ReferenceErrors for some errors that happen before evaluation, but in ES2020 we updated all of them to be SyntaxErrors (tc39/ecma262#1527).

This is still somewhat of a semantic question since source phases aren't really associated with any execution, they are more like slots on the module map.

We could similarly say that this is more like TDZ, since the slot is there but it is not filled. Note also that modules in cycles with TDZ provide reference errors when attempting to access a binding from a module which has not yet been executed.

That all said, I don't have strong opinions and am open to changing the error type, but some further discussion could be worthwhile.

Re discussed about this in a modules harmony call, what was the resolution?

I believe there were no strong opinions. If you still feel strongly towards SyntaxError please feel free to go ahead.