ES Module support
Nobody has claimed this yet.
- Dominant language
- Scala
- Stars
- 195
- Forks
- 53
- PR merge metrics
- No merged PRs in 30d
Description
Native ES modules are finally supported in all current LTS NodeJS versions 🎉. More and more Node libraries are moving to ES modules. ES modules can use a top-level import for CommonJS, but CommonJS cannot import ES modules with top-level imports. This means libraries still using CommonJS risk getting left behind in the Node ecosystem.
Feral currently uses a dynamic export update to export the handler function. From what I could see, this is done to load resources only once instead of every time the lambda is invoked. However, ES modules do not support dynamic export updates. All exports have to be there as export statements. The recommended way for the resource use-case is by using top-level awaits.
To keep Node.js library interop and keep the library modern, it would be ideal for Feral to also support building as a ES Module. I'm not sure if it is possible to instruct Scala.JS to emit different code based on the module setting, or perhaps a different entrypoint should be available for ES Module users.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with lambda/js/src/main/scala/feral/lambda/IOLambdaPlatform.scala and investigate how Scala.js module settings produce the current dynamic export update. Determine whether an ES module entrypoint or alternate build can use static exports and top-level await while preserving CommonJS support; done means Feral can build an ES module for Node.js and retain the existing Lambda resource behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- aws, javascript, node.js, scala
- Domain
- backend, build-system
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 30/100