Description
Reading through the readme, I'm confused about the syntax, as it seems inconsistent between static and dynamic imports.
import json from "./foo.json" assert { type: "json" };
import("foo.json", { assert: { type: "json" } })
Then, there's also this mentioned, but it appears to be a separate proposal (?):
import json from "./foo.json" assert { type: "json" } with { transformA: "value" };
There is no equivalent dynamic import shown, so it's unclear which of the following it would be:
import("foo.json", { assert: { type: "json" }, with: { transformA: "value" } })
import("foo.json", { assert: { type: "json" }, transformA: "value" })
My questions based on this:
-
Why are
assert
andwith
separate keywords in the static import case? Couldassert
be an option within thewith
options object? This seems like it would be more symmetric with the dynamic import syntax:import json from "./foo.json" with { assert: { type: "json" }} import("foo.json", { assert: { type: "json" } })
-
In the dynamic import syntax, is
assert
the only supported key like it appears to be for static imports? Will engines throw if other keys are added?
We're interested in using custom attributes in Parcel to indicate bundle preload/prefetch hints: parcel-bundler/parcel#5158. Webpack currently does this via their magic comments, but we'd like a less hacky syntax and this proposal looks very promising for that.
My questions above are based on this use case. If assert
is the only supported attribute at the parser level, then we likely won't be able to use it. I'm mainly wondering why it needs to be limited in this way (if it is), and why a more general proposal was rejected. Please feel free to point me to other threads if this was already discussed! 😄