proposal-source-phase-imports icon indicating copy to clipboard operation
proposal-source-phase-imports copied to clipboard

Missing sources should throw a *SyntaxError* when imported

Open nicolo-ribaudo opened this issue 2 years ago • 3 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 (https://github.com/tc39/ecma262/pull/1527).

nicolo-ribaudo avatar Jun 08 '23 17:06 nicolo-ribaudo

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.

guybedford avatar Jun 16 '23 00:06 guybedford

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

nicolo-ribaudo avatar Jul 24 '23 12:07 nicolo-ribaudo

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

guybedford avatar Jul 25 '23 22:07 guybedford